private void startVpn() { if (LaunchService.isVpnRunning()) { LogUtils.e("vpn is already running, do not start it again"); return; } Intent intent = VpnService.prepare(MainActivity.this); if (intent == null) { onActivityResult(ASK_VPN_PERMISSION, RESULT_OK, null); } else { startActivityForResult(intent, ASK_VPN_PERMISSION); } }
public void updateStatus(String status) { LogUtils.i(status); TextView textView = (TextView) findViewById(R.id.statusTextView); if (!textView.getText().toString().startsWith("Error:")) { textView.setText(status); if (LaunchService.isVpnRunning()) { clearNotification(); } else { showNotification(status); } } }
@Override public void onDownloaded(String url, String downloadTo) { downloaded = true; ActivityCompat.invalidateOptionsMenu(this); updateStatus(_(R.string.status_downloaded) + " " + Uri.parse(url).getLastPathSegment()); setExiting(); try { ManagerProcess.kill(); } catch (Exception e) { LogUtils.e("failed to kill manager", e); } ApkUtils.install(this, downloadTo); }
private String getApnName() { try { ConnectivityManager conManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = conManager.getActiveNetworkInfo(); if (null == ni) { return null; } return ni.getExtraInfo(); } catch (Exception e) { LogUtils.e("failed to get apn name", e); return null; } }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PreferenceManager.setDefaultValues(this, R.xml.preferences, true); setTitle("fqrouter " + LaunchService.getMyVersion(this)); setupUI(); LaunchedIntent.register(this); UpdateFoundIntent.register(this); ExitedIntent.register(this); WifiRepeaterChangedIntent.register(this); PickAndPlayChangedIntent.register(this); FreeInternetChangedIntent.register(this); DownloadingIntent.register(this); DownloadedIntent.register(this); DownloadFailedIntent.register(this); HandleFatalErrorIntent.register(this); DnsPollutedIntent.register(this); HandleAlertIntent.register(this); ExitingIntent.register(this); blinkStatus(0); String apnName = getApnName(); LogUtils.i("apn name: " + apnName); final File ignoredFile = new File("/data/data/fq.router2/etc/apn-alert-ignored"); if (apnName != null && WAP_APN_LIST.contains(apnName.trim().toLowerCase()) && !ignoredFile.exists()) { new AlertDialog.Builder(MainActivity.this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle(R.string.wap_apn_alert_title) .setMessage(String.format(_(R.string.wap_apn_alert_message), apnName)) .setPositiveButton(R.string.wap_apn_alert_change_now, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_APN_SETTINGS); startActivity(intent); clearNotification(); MainActivity.this.finish(); } }) .setNegativeButton(R.string.wap_apn_alert_ignore, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { IOUtils.writeToFile(ignoredFile, "OK"); launch(); } }) .show(); } else { launch(); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { if (ASK_VPN_PERMISSION == requestCode) { if (resultCode == RESULT_OK) { if (LaunchService.SOCKS_VPN_SERVICE_CLASS == null) { onHandleFatalError("vpn class not loaded"); } else { updateStatus(_(R.string.status_launch_vpn)); stopService(new Intent(this, LaunchService.SOCKS_VPN_SERVICE_CLASS)); startService(new Intent(this, LaunchService.SOCKS_VPN_SERVICE_CLASS)); uninstallOldVersion(); } } else { onHandleFatalError(_(R.string.status_vpn_rejected)); LogUtils.e("failed to start vpn service: " + resultCode); } } else { super.onActivityResult(requestCode, resultCode, data); } } catch (Exception e) { LogUtils.e("failed to handle onActivityResult", e); } }
private void uninstallOldVersion() { boolean isOldVersionInstalled = ApkUtils.isInstalled(this, "fq.router"); LogUtils.i("old version is installed: " + isOldVersionInstalled); if (isOldVersionInstalled) { new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle(R.string.uninstall_old_version_alert_title) .setMessage(R.string.uninstall_old_version_alert_message) .setPositiveButton(R.string.uninstall_old_version_alert_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ApkUtils.uninstall(MainActivity.this, "fq.router"); } }) .show(); } }