option to run locking functionality while phone is locked to force pin

This commit is contained in:
wesaphzt 2019-09-09 13:33:04 +01:00
parent 53828ddc3f
commit 813b948f19
5 changed files with 71 additions and 19 deletions

View file

@ -7,7 +7,9 @@ import androidx.annotation.Nullable;
import android.view.Menu; import android.view.Menu;
import android.view.View; import android.view.View;
import android.widget.Toast;
import androidx.preference.CheckBoxPreference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -15,17 +17,26 @@ import com.wesaphzt.privatelock.R;
public class FragmentSettings extends PreferenceFragmentCompat { public class FragmentSettings extends PreferenceFragmentCompat {
private SharedPreferences prefs; private Context context;
private CheckBoxPreference cbRunConstant;
private SharedPreferences sharedPreferences;
private SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener;
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences);
setHasOptionsMenu(true); setHasOptionsMenu(true);
Context context = getContext(); context = getContext();
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
//this static call will reset default values only on the first read //this static call will reset default values only on the first read
PreferenceManager.setDefaultValues(context, R.xml.preferences, false); PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
cbRunConstant = (CheckBoxPreference) findPreference("RUN_CONSTANT");
} }
@Override @Override
@ -33,6 +44,24 @@ public class FragmentSettings extends PreferenceFragmentCompat {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@Override
public void onResume() {
super.onResume();
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
@Override
public void onDestroy() {
super.onDestroy();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
@Override
public void onPause() {
super.onPause();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
@Override @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
@ -41,6 +70,16 @@ public class FragmentSettings extends PreferenceFragmentCompat {
//bg color //bg color
view.setBackgroundColor(getResources().getColor(R.color.white)); view.setBackgroundColor(getResources().getColor(R.color.white));
sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.equals("RUN_CONSTANT") && cbRunConstant.isChecked()) {
Toast.makeText(context, getString(R.string.settings_restart_service_toast), Toast.LENGTH_LONG).show();
}
}
};
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
} }
@Override @Override

View file

@ -16,7 +16,7 @@ public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
if(prefs.getBoolean("START_ON_BOOT", false)) { if(prefs.getBoolean("START_ON_BOOT", false)) {
Intent i = new Intent(context, LockService.class); Intent i = new Intent(context, LockService.class);

View file

@ -83,18 +83,18 @@ public class LockService extends JobIntentService {
String action = intent.getAction(); String action = intent.getAction();
LockWidgetProvider lockWidgetProvider = new LockWidgetProvider(); LockWidgetProvider lockWidgetProvider = new LockWidgetProvider();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
switch (action) { switch (action) {
case ACTION_START_FOREGROUND_SERVICE: case ACTION_START_FOREGROUND_SERVICE:
if(! prefs.getBoolean("RUN_CONSTANT", false)) {
presenceReceiver = new PresenceReceiver(); presenceReceiver = new PresenceReceiver();
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_USER_PRESENT); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_USER_PRESENT);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF); intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(presenceReceiver, intentFilter); registerReceiver(presenceReceiver, intentFilter);
}
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
try { try {
SENSITIVITY = prefs.getInt(MainActivity.PREFS_THRESHOLD, DEFAULT_SENSITIVITY); SENSITIVITY = prefs.getInt(MainActivity.PREFS_THRESHOLD, DEFAULT_SENSITIVITY);
} catch (Exception e) { } catch (Exception e) {
@ -134,7 +134,9 @@ public class LockService extends JobIntentService {
case ACTION_STOP_FOREGROUND_SERVICE: case ACTION_STOP_FOREGROUND_SERVICE:
try { try {
if(! prefs.getBoolean("RUN_CONSTANT", false)) {
unregisterReceiver(presenceReceiver); unregisterReceiver(presenceReceiver);
}
mSensorManager.unregisterListener(activeListener); mSensorManager.unregisterListener(activeListener);
disabled = true; disabled = true;
@ -145,6 +147,9 @@ public class LockService extends JobIntentService {
PauseReceiver.isRunning = false; PauseReceiver.isRunning = false;
} }
} catch (Exception e) { } catch (Exception e) {
if(! prefs.getBoolean("RUN_CONSTANT", false)) {
unregisterReceiver(presenceReceiver);
}
disabled = true; disabled = true;
mInitialized = false; mInitialized = false;

View file

@ -62,6 +62,9 @@
<string name="about_bug_report_image_desc">Bug report image</string> <string name="about_bug_report_image_desc">Bug report image</string>
<!--message-->
<string name="settings_restart_service_toast">If service is running, restart for setting to take effect.</string>
<!--donate--> <!--donate-->
<string name="donate_bitcoin_image_desc">Bitcoin image</string> <string name="donate_bitcoin_image_desc">Bitcoin image</string>
<string name="donate_litecoin_image_desc">Litecoin image</string> <string name="donate_litecoin_image_desc">Litecoin image</string>

View file

@ -2,20 +2,25 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory <PreferenceCategory
android:title="Lock Service"> android:title="Lock Service">
<CheckBoxPreference
android:defaultValue="false"
android:key="START_ON_BOOT"
android:title="System start" />
<CheckBoxPreference
android:defaultValue="false"
android:key="RUN_CONSTANT"
android:title="Run service when locked"
android:summary="Run service all the time, even when the screen is off, to be able to force PIN entry at any time."/>
<ListPreference <ListPreference
android:defaultValue="1" android:defaultValue="1"
android:entries="@array/array_pause_minutes" android:entries="@array/array_pause_minutes"
android:entryValues="@array/array_pause_minutes_vals" android:entryValues="@array/array_pause_minutes_vals"
android:key="PAUSE_TIME" android:key="PAUSE_TIME"
android:summary="%s" android:summary="%s"
android:title="Pause time" /> android:title="Pause length" />
</PreferenceCategory>
<PreferenceCategory
android:title="Application">
<CheckBoxPreference
android:defaultValue="false"
android:key="START_ON_BOOT"
android:title="System start" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>