0
0
mirror of https://github.com/schwabe/ics-openvpn.git synced 2024-09-20 12:02:28 +02:00

Allow clearing of external apps

This commit is contained in:
Arne Schwabe 2013-04-07 14:05:05 +02:00
parent 3b68ac89cd
commit 195b0a10d9
7 changed files with 114 additions and 25 deletions

View File

@ -11,7 +11,7 @@
android:id="@+id/cancel"
android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:showAsAction="ifRoom|withText"
android:title="@string/cancel_connection"
android:title="@string/disconnect"
android:titleCondensed="@string/cancel"/>
<item
android:id="@+id/info"

View File

@ -57,6 +57,7 @@
<string name="custom_config_summary">Specify custom options. Use with care!</string>
<string name="route_rejected">Route rejected by Android</string>
<string name="cancel_connection">Disconnect</string>
<string name="disconnect">Disconnect</string>
<string name="clear_log">clear log</string>
<string name="title_cancel">Cancel Confirmation</string>
<string name="cancel_connection_query">Disconnect the connected VPN/cancel the connection attempt?</string>
@ -281,5 +282,8 @@
<string name="prompt">%1$s attempts to control %2$s</string>
<string name="remote_warning">By proceeding, you are giving the application permission to completely control OpenVPN for Android and to intercept all network traffic. <b> Do NOT accept unless you trust the application. </b> Otherwise, you run the risk of having your data compromised by malicious software."</string>
<string name="remote_trust">I trust this application.</string>
<string name="no_external_app_allowed">No app allowed to use external API</string>
<string name="allowed_apps">Allowed apps: %s</string>
<string name="clearappsdialog">Clear list of allowed external apps?\nCurrent list of allowed apps:\n\n%s</string>
</resources>

View File

@ -11,11 +11,13 @@
android:key="showlogwindow"
android:summary="@string/show_log_summary"
android:title="@string/show_log_window" />
<!-- <CheckBoxPreference
<!--
<CheckBoxPreference
android:defaultValue="false"
android:key="statusafterconnect"
android:summary="@string/keppstatus_summary"
android:title="@string/keepstatus" /> -->
android:title="@string/keepstatus" />
-->
<CheckBoxPreference
android:defaultValue="true"
android:key="usesystemproxy"
@ -27,6 +29,11 @@
android:summary="@string/onbootrestartsummary"
android:title="@string/onbootrestart" />
<Preference
android:key="clearapi"
android:title="Clear allowed external apps"
android:persistent="false" />
<PreferenceCategory android:title="Device specifics Hacks" >
<CheckBoxPreference
android:defaultValue="false"
@ -40,5 +47,4 @@
android:title="@string/setting_loadtun" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -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() {

View File

@ -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>());
}

View File

@ -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() {

View File

@ -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);
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);
} catch (NameNotFoundException e) {
// App not found. Remove it from the list
mExtapp.removeApp(packagename);
}
}
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;
}
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.general_settings);
Preference loadtun = findPreference("loadTunModule");
if(!isTunModuleAvailable())
loadtun.setEnabled(false);
@Override
public void onClick(DialogInterface dialog, int which) {
if( which == Dialog.BUTTON_POSITIVE){
mExtapp.clearAllApiApps();
setClearApiSummary();
}
}
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;
}
}
}