summaryrefslogtreecommitdiff
path: root/src/de
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2013-04-07 14:05:05 +0200
committerArne Schwabe <arne@rfc2549.org>2013-04-07 14:05:05 +0200
commit195b0a10d96ad358d956381d8a0e423a8dd913c7 (patch)
tree5f62da8410bc08b50e8784ff94231cccbfcb8fb1 /src/de
parent3b68ac89cd679f134681204e0d1bb40d6dbf7879 (diff)
Allow clearing of external apps
Diffstat (limited to 'src/de')
-rw-r--r--src/de/blinkt/openvpn/api/ConfirmDialog.java1
-rw-r--r--src/de/blinkt/openvpn/api/ExternalAppDatabase.java6
-rw-r--r--src/de/blinkt/openvpn/api/ExternalOpenVPNService.java4
-rw-r--r--src/de/blinkt/openvpn/fragments/GeneralSettings.java110
4 files changed, 100 insertions, 21 deletions
diff --git a/src/de/blinkt/openvpn/api/ConfirmDialog.java b/src/de/blinkt/openvpn/api/ConfirmDialog.java
index f72f4921..dfd01884 100644
--- a/src/de/blinkt/openvpn/api/ConfirmDialog.java
+++ b/src/de/blinkt/openvpn/api/ConfirmDialog.java
@@ -73,6 +73,7 @@ CompoundButton.OnCheckedChangeListener, DialogInterface.OnClickListener {
builder.setNegativeButton(android.R.string.cancel,this);
mAlert = builder.create();
+ mAlert.setCanceledOnTouchOutside(false);
mAlert.setOnShowListener (new OnShowListener() {
diff --git a/src/de/blinkt/openvpn/api/ExternalAppDatabase.java b/src/de/blinkt/openvpn/api/ExternalAppDatabase.java
index ca348152..e640a13a 100644
--- a/src/de/blinkt/openvpn/api/ExternalAppDatabase.java
+++ b/src/de/blinkt/openvpn/api/ExternalAppDatabase.java
@@ -25,12 +25,12 @@ public class ExternalAppDatabase {
}
- Set<String> getExtAppList() {
+ public Set<String> getExtAppList() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
Set<String> allowedapps = prefs.getStringSet(PREFERENCES_KEY, new HashSet<String>());
return allowedapps;
}
-
+
void addApp(String packagename)
{
Set<String> allowedapps = getExtAppList();
@@ -45,7 +45,7 @@ public class ExternalAppDatabase {
prefedit.apply();
}
- void clearAllApiApps() {
+ public void clearAllApiApps() {
saveExtAppList(new HashSet<String>());
}
diff --git a/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java b/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java
index fff6c34f..9e6ac9f3 100644
--- a/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java
+++ b/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java
@@ -244,7 +244,9 @@ public class ExternalOpenVPNService extends Service implements StateListener {
@Override
public void updateState (String state, String logmessage, int resid, ConnectionStatus level) {
mMostRecentState = new UpdateMessage(state, logmessage, level);
- mHandler.obtainMessage(SEND_TOALL, mMostRecentState);
+ Message msg = mHandler.obtainMessage(SEND_TOALL, mMostRecentState);
+ msg.sendToTarget();
+
}
private static final Handler mHandler = new Handler() {
diff --git a/src/de/blinkt/openvpn/fragments/GeneralSettings.java b/src/de/blinkt/openvpn/fragments/GeneralSettings.java
index 4ac0a8ac..bf391d29 100644
--- a/src/de/blinkt/openvpn/fragments/GeneralSettings.java
+++ b/src/de/blinkt/openvpn/fragments/GeneralSettings.java
@@ -1,31 +1,107 @@
package de.blinkt.openvpn.fragments;
import java.io.File;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import de.blinkt.openvpn.R;
+import de.blinkt.openvpn.api.ExternalAppDatabase;
-public class GeneralSettings extends PreferenceFragment {
+public class GeneralSettings extends PreferenceFragment implements OnPreferenceClickListener, OnClickListener {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
+ private ExternalAppDatabase mExtapp;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.general_settings);
+
+ Preference loadtun = findPreference("loadTunModule");
+ if(!isTunModuleAvailable())
+ loadtun.setEnabled(false);
- // Load the preferences from an XML resource
- addPreferencesFromResource(R.xml.general_settings);
- Preference loadtun = findPreference("loadTunModule");
- if(!isTunModuleAvailable())
- loadtun.setEnabled(false);
+ mExtapp = new ExternalAppDatabase(getActivity());
+ Preference clearapi = findPreference("clearapi");
+ clearapi.setOnPreferenceClickListener(this);
+
+ setClearApiSummary();
+ }
+
+ private void setClearApiSummary() {
+ Preference clearapi = findPreference("clearapi");
+
+ if(mExtapp.getExtAppList().isEmpty()) {
+ clearapi.setEnabled(false);
+ clearapi.setSummary(R.string.no_external_app_allowed);
+ } else {
+ clearapi.setEnabled(true);
+ clearapi.setSummary(getString(R.string.allowed_apps,getExtAppList(", ")));
}
+ }
+
+ private String getExtAppList(String delim) {
+ ApplicationInfo app;
+ PackageManager pm = getActivity().getPackageManager();
+
+ String applist=null;
+ for (String packagename : mExtapp.getExtAppList()) {
+ try {
+ app = pm.getApplicationInfo(packagename, 0);
+ if (applist==null)
+ applist = "";
+ else
+ applist += delim;
+ applist+=app.loadLabel(pm);
- private boolean isTunModuleAvailable() {
- // Check if the tun module exists on the file system
- if(new File("/system/lib/modules/tun.ko").length() > 10)
- return true;
- return false;
+ } catch (NameNotFoundException e) {
+ // App not found. Remove it from the list
+ mExtapp.removeApp(packagename);
+ }
}
-
- } \ No newline at end of file
+ return applist;
+ }
+
+ private boolean isTunModuleAvailable() {
+ // Check if the tun module exists on the file system
+ if(new File("/system/lib/modules/tun.ko").length() > 10)
+ return true;
+ return false;
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if(preference.getKey().equals("clearapi")){
+ Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setPositiveButton(R.string.clear, this);
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.setMessage(getString(R.string.clearappsdialog,getExtAppList("\n")));
+ builder.show();
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if( which == Dialog.BUTTON_POSITIVE){
+ mExtapp.clearAllApiApps();
+ setClearApiSummary();
+ }
+ }
+
+
+
+} \ No newline at end of file