Auto enabled after widget off

This commit is contained in:
M66B 2015-12-03 14:05:38 +01:00
parent 433113e18e
commit 586092abe2
4 changed files with 68 additions and 26 deletions

View File

@ -87,11 +87,19 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
getSupportActionBar().setTitle(R.string.menu_settings);
}
private PreferenceScreen getPreferenceScreen() {
return ((PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content)).getPreferenceScreen();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
PreferenceScreen screen = frag.getPreferenceScreen();
PreferenceScreen screen = getPreferenceScreen();
// Handle auto enable
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Preference pref_auto_enable = screen.findPreference("auto_enable");
pref_auto_enable.setTitle(getString(R.string.setting_auto, prefs.getString("auto_enable", "0")));
// Handle export
Preference pref_export = screen.findPreference("export");
@ -150,6 +158,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
protected void onResume() {
super.onResume();
PreferenceScreen screen = getPreferenceScreen();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// TODO: check permision for whitelist_roaming
@ -163,19 +172,16 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
prefs.edit().putBoolean("unmetered_3g", false).apply();
prefs.edit().putBoolean("unmetered_4g", false).apply();
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_2g")).setChecked(false);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_3g")).setChecked(false);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_4g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_2g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_3g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_4g")).setChecked(false);
}
// Check if permission was revoked
if (prefs.getBoolean("national_roaming", false))
if (!Util.hasPhoneStatePermission(this)) {
prefs.edit().putBoolean("national_roaming", false).apply();
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
((SwitchPreference) frag.getPreferenceScreen().findPreference("national_roaming")).setChecked(false);
((SwitchPreference) screen.findPreference("national_roaming")).setChecked(false);
}
// Listen for preference changes
@ -236,7 +242,11 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} else
SinkholeService.reload("other", "setting changed", this);
} else if ("unmetered_2g".equals(name) ||
} else if ("auto_enable".equals(name))
getPreferenceScreen().findPreference(name).setTitle(getString(R.string.setting_auto, prefs.getString(name, "0")));
else if ("unmetered_2g".equals(name) ||
"unmetered_3g".equals(name) ||
"unmetered_4g".equals(name)) {
if (prefs.getBoolean(name, false)) {
@ -266,6 +276,8 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
PreferenceScreen screen = getPreferenceScreen();
if (requestCode == REQUEST_METERED)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
SinkholeService.reload("other", "permission granted", this);
@ -274,11 +286,9 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
prefs.edit().putBoolean("unmetered_2g", false).apply();
prefs.edit().putBoolean("unmetered_3g", false).apply();
prefs.edit().putBoolean("unmetered_4g", false).apply();
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_2g")).setChecked(false);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_3g")).setChecked(false);
((SwitchPreference) frag.getPreferenceScreen().findPreference("unmetered_4g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_2g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_3g")).setChecked(false);
((SwitchPreference) screen.findPreference("unmetered_4g")).setChecked(false);
}
else if (requestCode == REQUEST_ROAMING_NATIONAL)
@ -287,9 +297,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
else {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("national_roaming", false).apply();
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
((SwitchPreference) frag.getPreferenceScreen().findPreference("national_roaming")).setChecked(false);
((SwitchPreference) screen.findPreference("national_roaming")).setChecked(false);
}
else if (requestCode == REQUEST_ROAMING_INTERNATIONAL)
@ -298,9 +306,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
else {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("whitelist_roaming", false).apply();
PreferenceFragment frag = (PreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content);
((SwitchPreference) frag.getPreferenceScreen().findPreference("whitelist_roaming")).setChecked(false);
((SwitchPreference) screen.findPreference("whitelist_roaming")).setChecked(false);
}
}
@ -519,6 +525,13 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
serializer.attribute(null, "value", value.toString());
serializer.endTag(null, "setting");
} else if (value instanceof String) {
serializer.startTag(null, "setting");
serializer.attribute(null, "key", key);
serializer.attribute(null, "type", "string");
serializer.attribute(null, "value", value.toString());
serializer.endTag(null, "setting");
} else
Log.e(TAG, "Unknown key=" + key);
}
@ -564,6 +577,8 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
editor.putBoolean(key, (Boolean) value);
else if (value instanceof Integer)
editor.putInt(key, (Integer) value);
else if (value instanceof String)
editor.putString(key, (String) value);
else
Log.e(TAG, "Unknown type=" + value.getClass());
}
@ -623,6 +638,8 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
current.put(key, Boolean.parseBoolean(value));
else if ("integer".equals(type))
current.put(key, Integer.parseInt(value));
else if ("string".equals(type))
current.put(key, value);
else
Log.e(TAG, "Unknown type key=" + key);
}

View File

@ -19,6 +19,7 @@ package eu.faircode.netguard;
Copyright 2015 by Marcel Bokhorst (M66B)
*/
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
@ -31,6 +32,8 @@ import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.RemoteViews;
import java.util.Date;
public class Widget extends AppWidgetProvider {
private static final String TAG = "NetGuard.Widget";
@ -51,10 +54,22 @@ public class Widget extends AppWidgetProvider {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
// Cancel set alarm
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(INTENT_ON), PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pi);
if (INTENT_OFF.equals(intent.getAction())) {
prefs.edit().putBoolean("enabled", false).apply();
SinkholeService.stop("widget", context);
// Auto enable
int auto = Integer.parseInt(prefs.getString("auto_enable", "0"));
if (auto > 0) {
Log.i(TAG, "Scheduling enabled after minutes=" + auto);
am.set(AlarmManager.RTC_WAKEUP, new Date().getTime() + auto * 60 * 1000L, pi);
}
} else if (INTENT_ON.equals(intent.getAction()))
try {
if (VpnService.prepare(context) == null) {

View File

@ -15,26 +15,31 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="menu_support">Support</string>
<string name="menu_about">About</string>
<string name="setting_defaults">Defaults</string>
<string name="setting_whitelist_wifi">Block Wi-Fi</string>
<string name="setting_whitelist_other">Block mobile</string>
<string name="setting_screen_wifi">Allow Wi-Fi when screen on</string>
<string name="setting_screen_other">Allow mobile when screen on</string>
<string name="setting_whitelist_roaming">Block roaming</string>
<string name="setting_options">Options</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_auto">Auto enable after %1$s minutes</string>
<string name="setting_dark">Use dark theme</string>
<string name="setting_metered">Handle metered Wi-Fi networks</string>
<string name="setting_metered_2g">Consider 2G unmetered</string>
<string name="setting_metered_3g">Consider 3G unmetered</string>
<string name="setting_metered_4g">Consider LTE unmetered</string>
<string name="setting_national_roaming">Ignore national roaming</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_dark">Use dark theme</string>
<string name="setting_backup">Backup</string>
<string name="setting_export">Export settings</string>
<string name="setting_import">Import settings</string>
<string name="setting_defaults">Defaults</string>
<string name="setting_options">Options</string>
<string name="setting_backup">Backup</string>
<string name="setting_technical">Technical information</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_auto">After disabling using the widget, automatically enable NetGuard again after the selected number of minutes\nEnter zero to disable this option</string>
<string name="summary_metered">Apply mobile network rules to metered (paid, tethered) Wi-Fi networks</string>
<string name="summary_metered_2g">Apply Wi-Fi network rules for 2G data connections</string>
<string name="summary_metered_3g">Apply Wi-Fi network rules for 3G data connections</string>

View File

@ -32,6 +32,11 @@
android:key="manage_system"
android:summary="@string/summary_system"
android:title="@string/setting_system" />
<EditTextPreference
android:defaultValue="0"
android:inputType="number"
android:key="auto_enable"
android:summary="@string/summary_auto" />
<SwitchPreference
android:defaultValue="false"
android:key="dark_theme"