From 8c0fac43c43956cd5ece80f726d2260082e30cd0 Mon Sep 17 00:00:00 2001 From: Hocuri Date: Wed, 2 Jun 2021 11:21:47 +0200 Subject: [PATCH] Remove screenlock (#1942) * Remove screen lock feature, move the two remaining "App access" options into "Advanced" Locking the app was removed a long time ago, so in "App access" in the settings, the only two remaining items were "Screen security" and "Incognito keyboard". * Remove the now-unused strings * remove app-access-category from main settings screen Co-authored-by: B. Petersen --- res/drawable-hdpi/ic_security_white_24dp.png | Bin 428 -> 0 bytes res/drawable-mdpi/ic_security_white_24dp.png | Bin 288 -> 0 bytes res/drawable-xhdpi/ic_security_white_24dp.png | Bin 507 -> 0 bytes .../ic_security_white_24dp.png | Bin 702 -> 0 bytes .../ic_security_white_24dp.png | Bin 913 -> 0 bytes res/drawable/ic_security_24dp.xml | 4 - res/values/strings.xml | 10 +- res/xml/preferences.xml | 5 - res/xml/preferences_advanced.xml | 15 ++ res/xml/preferences_app_protection.xml | 42 ------ .../securesms/ApplicationContext.java | 40 +---- .../ApplicationPreferencesActivity.java | 13 -- .../securesms/BaseActionBarActivity.java | 82 +--------- .../connect/ApplicationDcContext.java | 16 +- .../AdvancedPreferenceFragment.java | 23 ++- .../AppProtectionPreferenceFragment.java | 140 ------------------ .../thoughtcrime/securesms/util/Prefs.java | 15 -- .../securesms/util/ScreenLockUtil.java | 46 ------ 18 files changed, 53 insertions(+), 398 deletions(-) delete mode 100644 res/drawable-hdpi/ic_security_white_24dp.png delete mode 100644 res/drawable-mdpi/ic_security_white_24dp.png delete mode 100644 res/drawable-xhdpi/ic_security_white_24dp.png delete mode 100644 res/drawable-xxhdpi/ic_security_white_24dp.png delete mode 100644 res/drawable-xxxhdpi/ic_security_white_24dp.png delete mode 100644 res/drawable/ic_security_24dp.xml delete mode 100644 res/xml/preferences_app_protection.xml delete mode 100644 src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java diff --git a/res/drawable-hdpi/ic_security_white_24dp.png b/res/drawable-hdpi/ic_security_white_24dp.png deleted file mode 100644 index 262800a4d89c11f90c2607e2596b00cb8c917f6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmV;d0aN~oP)4fI5C-6YO+fBAn}8q+78XVk5+sONUl)m_IRvrD9}u(=3HJkR6@sJ@n^;)cg!GDH znM#W&R@X?d@DAP0BiIb&yWQJw3qkOma^NYZn3=i17=3+nv#P#5Z^J&=w_&~=v|wl? z!pP7<9<*rN1i*KZiEWF`puSy^1NU?t&u%)kbRv;A)}8p%Ns~-1nAMnw!j2WutIEh~ z3Jn2=9y=RIEyS=2+R+K1Jrs@q(7yp~wt_ZO=s^usNb3mPPocXiGZlXd?xfI-Oz17R zo?&};u_W!7(x W*Q%T(FN`3Qp#N3mm6la}KEbFt(9` za6c2A<4#C{x?(EWH8!%9gK(Au+XiS0Ik4n51)7GqQJN0IifaHndf>{kNJ09McK`zi mB0c1{_!j` z(65rV@qh=MM2Lnc{VF;T-}p_AA+fQ@0*E#)O97&dFAWf6S-=Wd0V}{;2=GG(zFGh~ z`e6F310P6Frw?J8>A({w;1s4uI&i}YxQgkz4qR{oo?$wt14kWz3O=T~4hU~@0~ay9 zMv{PTPN2XP)1_qK2!1YL1Cz($WI(u=1K7nB(*Q{WS_GMa%a{V1>40!IBe2E}rrU@O zP~%$$V1KlpFI4RSVbdBY@szOhh%F!ttbn~dByg;HXZ-~002ovPDHLkV1k+$*vtR` diff --git a/res/drawable-xxhdpi/ic_security_white_24dp.png b/res/drawable-xxhdpi/ic_security_white_24dp.png deleted file mode 100644 index 7bcb2fd013f9a7fef71171f0852ddf109135987d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)4uW0Wf`YiI z1yL{#LUF95wDo}?CDfvAO_Thc%J~v$J-LrBpx^(_4Zo1n<(?b+4~rr}KY8->lOSe$ zY(JolL1tKOhC$kz2TC)_0`)C0N;-T{FFDGrRhb;U;eb{rMv>W6nM{l#^Qp3%80jsN z)l}I`jLb_PF(j+0QcaBJySthy#l+~Q!_`zNCPw*96=|kQF)_+nP^9^!Mn3vGBkTOP zn575lfBEo1c}~j2G#ezpbMry+2N5U&MW6^2fg(@@`o};kp@B*|(0pj1q7L-M2(+v| z(kC70Jtk@4+mI%7peJ5I8KlQL&@Hc^OGsHAXuvBdhjc~<>hTDQ^A)LE2THQ!4RjFc z2MO(E!?-ulHKb?y+mAs{pg2=V7xkb$oztP$w0nbB%%8 zS#}N@Lt13B4kYKkW6%LANOv2*^xQ?+Dd+{#3TZt^&O?WwQv@3`yB6Nbq9afTMWml} zm|mP;aRN&4l3+vTH~E_=H~`%y*d!ZmRttSpEJ5c9R_3tn@@3cxbebx`uG?>el8hUJ z2B;A1ISCi*sjW;KfZ|-GwgT<0_GMknH3-_mQ)>IhK9?KC9_IBRPVkx9igdePaUP+l z0`2Az_04g}#}aryvws0~@qiNbO|#e6RyxHS*6J*;sPbp8+3s_1zkw|Js@x>$|7F8* zrqER2SXfUjS{Y`U^;+Tvt>HdK*}*+ZNYXFvkZR6zofJcSB-kvMWr)KB$!Q_O2p^av kONN&4A2j(q5lC@<1G;jC0F4+6x&QzG07*qoM6N<$g6>#9O#lD@ diff --git a/res/drawable-xxxhdpi/ic_security_white_24dp.png b/res/drawable-xxxhdpi/ic_security_white_24dp.png deleted file mode 100644 index b1eddbd6c303b0e0b43d9b6a39ff77a2be6e4f52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmV;C18)3@P)YC}3+H>*gM8q5z{NZxT&8llsArT7 zHW;NIVd@FYycDzS@o#&~l1dIB%^W9qJ7JD=`~ewOIp?y@StS!!z{SL0C#_qdb>bD$ zwiWs&UOg>aVRGW-3~hz!i9ayC6(%Qsn;Du-Z-uFe|B4an5D3#-p?~7bEc4)hpEA7_ zx+nfEx)9Ryr*$jzO?-}Nnh^*EfQGHmGx1;Y-!w0-c z=anO&1$p9=2aqQ|fdJtE4&VR|-~bNb01n^)4&VR| z-~bT;DzO4o)B%6T3UI0pD8>pr4n-w~qF@DAiQ)B)>O0goZ~nL6Nx zRlrNgy{!(Iu?lz}x#!gZ16Bds$UUMCXtM~o9l0tgb$}pm4e%6lIYbb^k~P35$h{W~ z@QfuuBS*+h1Os$i0*v@Jpd%PS@Pie=8giS6pnx|l0B)m%+-t!B_gVnFinn`$0|c89 z18(Lw0cp-60qa-0D}8C)&$5+#u?TV99rE_9RJsk^xC}SyOoa!(+Vy2Zz(4^BuGWZ<8lnz#pkHDMrXXvafkVd z>$b&U91o%!$g;;({mc~g@xAD7|5}fDmrRm=)j-h1FbnLk n!vaGzA - diff --git a/res/values/strings.xml b/res/values/strings.xml index 094a23385..6add24982 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -492,8 +492,6 @@ Balanced Worse quality, small size Vibrate - Change secret - Change your PIN / pattern / fingerprint via system settings Screen security Request to block screenshots in the recents list and inside the app @@ -666,15 +664,9 @@ Chat protection enabled. - Screen lock - Lock access with Android screen lock or fingerprint; to avoid showing the prior content, please also enable \"Screen security\". - Authentication failed. Unlock Delta Chat Please enter your system defined secret to unlock Delta Chat. - Inactivity timeout lock - Auto-lock Delta Chat after a specified time period of inactivity - Time to remain active - + Authentication failed. QR code diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index b4b5066d6..a4e03b792 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -20,11 +20,6 @@ android:icon="@drawable/ic_brightness_6_24dp" android:layout="@layout/preference_item" /> - - + + + + + + + - - - - - - - - - - - - - - - - - - - diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index b0f799db2..005932aa9 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -1,26 +1,18 @@ package org.thoughtcrime.securesms; -import android.annotation.SuppressLint; - -import androidx.appcompat.app.AppCompatDelegate; -import androidx.lifecycle.DefaultLifecycleObserver; -import androidx.lifecycle.LifecycleOwner; -import androidx.lifecycle.ProcessLifecycleOwner; -import androidx.work.Constraints; -import androidx.work.ExistingPeriodicWorkPolicy; -import androidx.work.NetworkType; -import androidx.work.PeriodicWorkRequest; -import androidx.work.WorkManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; -import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatDelegate; import androidx.multidex.MultiDexApplication; - -import com.b44t.messenger.DcContext; +import androidx.work.Constraints; +import androidx.work.ExistingPeriodicWorkPolicy; +import androidx.work.NetworkType; +import androidx.work.PeriodicWorkRequest; +import androidx.work.WorkManager; import org.thoughtcrime.securesms.connect.ApplicationDcContext; import org.thoughtcrime.securesms.connect.FetchWorker; @@ -33,18 +25,16 @@ import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.notifications.InChatSounds; import org.thoughtcrime.securesms.util.AndroidSignalProtocolLogger; import org.thoughtcrime.securesms.util.DynamicLanguage; -import org.thoughtcrime.securesms.util.ScreenLockUtil; import org.thoughtcrime.securesms.util.SignalProtocolLoggerProvider; import java.util.concurrent.TimeUnit; //import com.squareup.leakcanary.LeakCanary; -public class ApplicationContext extends MultiDexApplication implements DefaultLifecycleObserver { +public class ApplicationContext extends MultiDexApplication { public ApplicationDcContext dcContext; public DcLocationManager dcLocationManager; private JobManager jobManager; - private volatile boolean isAppVisible; public static ApplicationContext getInstance(Context context) { return (ApplicationContext)context.getApplicationContext(); @@ -76,7 +66,6 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi initializeRandomNumberFix(); initializeLogging(); initializeJobManager(); - ProcessLifecycleOwner.get().getLifecycle().addObserver(this); InChatSounds.getInstance(this); dcLocationManager = new DcLocationManager(this); @@ -118,25 +107,10 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } - @Override - public void onStart(@NonNull LifecycleOwner owner) { - isAppVisible = true; - } - - @Override - public void onStop(@NonNull LifecycleOwner owner) { - isAppVisible = false; - ScreenLockUtil.setShouldLockApp(true); - } - public JobManager getJobManager() { return jobManager; } - public boolean isAppVisible() { - return isAppVisible; - } - private void initializeRandomNumberFix() { PRNGFixes.apply(); } diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index 72dd11c29..2b23d024f 100644 --- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -18,13 +18,11 @@ package org.thoughtcrime.securesms; import android.annotation.TargetApi; -import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.Build; import android.os.Build.VERSION; import android.os.Bundle; @@ -37,11 +35,9 @@ import androidx.fragment.app.FragmentTransaction; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import androidx.preference.Preference; -import android.widget.Toast; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.preferences.AdvancedPreferenceFragment; -import org.thoughtcrime.securesms.preferences.AppProtectionPreferenceFragment; import org.thoughtcrime.securesms.preferences.AppearancePreferenceFragment; import org.thoughtcrime.securesms.preferences.ChatsPreferenceFragment; import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment; @@ -66,7 +62,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA private static final String PREFERENCE_CATEGORY_PROFILE = "preference_category_profile"; private static final String PREFERENCE_CATEGORY_NOTIFICATIONS = "preference_category_notifications"; - private static final String PREFERENCE_CATEGORY_APP_PROTECTION = "preference_category_app_protection"; private static final String PREFERENCE_CATEGORY_APPEARANCE = "preference_category_appearance"; private static final String PREFERENCE_CATEGORY_CHATS = "preference_category_chats"; private static final String PREFERENCE_CATEGORY_ADVANCED = "preference_category_advanced"; @@ -141,8 +136,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA .setOnPreferenceClickListener(new ProfileClickListener()); this.findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS) .setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_NOTIFICATIONS)); - this.findPreference(PREFERENCE_CATEGORY_APP_PROTECTION) - .setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_APP_PROTECTION)); this.findPreference(PREFERENCE_CATEGORY_APPEARANCE) .setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_APPEARANCE)); this.findPreference(PREFERENCE_CATEGORY_CHATS) @@ -187,7 +180,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA @TargetApi(11) private void tintIcons(Context context) { Drawable notifications = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_notifications_white_24dp)); - Drawable privacy = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_security_white_24dp)); Drawable appearance = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_brightness_6_white_24dp)); Drawable chats = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_forum_white_24dp)); Drawable advanced = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_advanced_white_24dp)); @@ -199,14 +191,12 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA typedArray.recycle(); DrawableCompat.setTint(notifications, color); - DrawableCompat.setTint(privacy, color); DrawableCompat.setTint(appearance, color); DrawableCompat.setTint(chats, color); DrawableCompat.setTint(advanced, color); DrawableCompat.setTint(help, color); this.findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS).setIcon(notifications); - this.findPreference(PREFERENCE_CATEGORY_APP_PROTECTION).setIcon(privacy); this.findPreference(PREFERENCE_CATEGORY_APPEARANCE).setIcon(appearance); this.findPreference(PREFERENCE_CATEGORY_CHATS).setIcon(chats); this.findPreference(PREFERENCE_CATEGORY_ADVANCED).setIcon(advanced); @@ -228,9 +218,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA case PREFERENCE_CATEGORY_NOTIFICATIONS: fragment = new NotificationsPreferenceFragment(); break; - case PREFERENCE_CATEGORY_APP_PROTECTION: - fragment = new AppProtectionPreferenceFragment(); - break; case PREFERENCE_CATEGORY_APPEARANCE: fragment = new AppearancePreferenceFragment(); break; diff --git a/src/org/thoughtcrime/securesms/BaseActionBarActivity.java b/src/org/thoughtcrime/securesms/BaseActionBarActivity.java index 412d03897..e0a61bbfb 100644 --- a/src/org/thoughtcrime/securesms/BaseActionBarActivity.java +++ b/src/org/thoughtcrime/securesms/BaseActionBarActivity.java @@ -1,37 +1,26 @@ package org.thoughtcrime.securesms; -import android.content.Intent; import android.os.Build; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.core.app.ActivityOptionsCompat; -import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; -import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import org.thoughtcrime.securesms.util.Prefs; -import org.thoughtcrime.securesms.util.ScreenLockUtil; import java.lang.reflect.Field; -import java.util.Timer; public abstract class BaseActionBarActivity extends AppCompatActivity { private static final String TAG = BaseActionBarActivity.class.getSimpleName(); - private Timer timer; - - private boolean isWaitingForResult; - private boolean isHiddenByScreenLock; - @Override protected void onCreate(Bundle savedInstanceState) { if (BaseActivity.isMenuWorkaroundRequired()) { @@ -40,67 +29,10 @@ public abstract class BaseActionBarActivity extends AppCompatActivity { super.onCreate(savedInstanceState); } - @Override - protected void onStart() { - if (ScreenLockUtil.isScreenLockEnabled(this) && ScreenLockUtil.getShouldLockApp() && !isWaitingForResult) { - ScreenLockUtil.applyScreenLock(this); - } else if (isHiddenByScreenLock) { - findViewById(android.R.id.content).setVisibility(View.VISIBLE); - isHiddenByScreenLock = false; - } - super.onStart(); - } - - @Override - protected void onStop() { - if (ScreenLockUtil.isScreenLockEnabled(this)) { - findViewById(android.R.id.content).setVisibility(View.GONE); - isHiddenByScreenLock = true; - } - super.onStop(); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - isWaitingForResult = false; - if (requestCode == ScreenLockUtil.REQUEST_CODE_CONFIRM_CREDENTIALS) { - if (resultCode == RESULT_OK) { - ScreenLockUtil.setShouldLockApp(false); - } else { - Toast.makeText(this, R.string.screenlock_authentication_failed, Toast.LENGTH_SHORT).show(); - ScreenLockUtil.applyScreenLock(this); - } - } - } - @Override protected void onResume() { super.onResume(); initializeScreenshotSecurity(); - initializeScreenLockTimeout(); - } - - private void initializeScreenLockTimeout() { - if (ScreenLockUtil.isScreenLockTimeoutEnabled(this)) { - timer = ScreenLockUtil.scheduleScreenLockTimer(timer, this); - } - } - - @Override - protected void onPause() { - super.onPause(); - tearDownScreenLockTimeout(); - } - - private void tearDownScreenLockTimeout() { - ScreenLockUtil.cancelScreenLockTimer(timer); - } - - @Override - public void onUserInteraction() { - super.onUserInteraction(); - initializeScreenLockTimeout(); } @Override @@ -145,14 +77,6 @@ public abstract class BaseActionBarActivity extends AppCompatActivity { } } - @Override - public void startActivityForResult(Intent intent, int requestCode) { - super.startActivityForResult(intent, requestCode); - if (requestCode != -1) { - isWaitingForResult = true; - } - } - public void makeSearchMenuVisible(final Menu menu, final MenuItem searchItem, boolean visible) { for (int i = 0; i < menu.size(); ++i) { MenuItem item = menu.getItem(i); diff --git a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java index 0a2ff83db..64596dca9 100644 --- a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java +++ b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java @@ -60,17 +60,17 @@ public class ApplicationDcContext extends DcContext { // screen-lock is deprecated, inform users still using it try { - if (!Prefs.getBooleanPreference(context, "pref_android_screen_lock_checked", false)) { - Prefs.setBooleanPreference(context, "pref_android_screen_lock_checked", true); + if (!Prefs.getBooleanPreference(context, "pref_android_screen_lock_checked_1", false)) { + Prefs.setBooleanPreference(context, "pref_android_screen_lock_checked_1", true); if (Prefs.isScreenLockEnabled(context)) { - Prefs.setBooleanPreference(context, "pref_android_screen_lock_keep_for_now", true); + Prefs.setScreenLockEnabled(context, false); DcMsg msg = new DcMsg(this, DcMsg.DC_MSG_TEXT); - msg.setText("⚠️ You are using the function \"Screen lock\" " + - "that will be removed in one of the next versions for the following reasons:\n" + + msg.setText("⚠️ You were using the function \"Screen lock\" " + + "that was removed for the following reasons:\n" + "\n" + - "• It does not add much protection as one just has to repeat the system secret.\n" + + "• It did not add much protection as one just has to repeat the system secret.\n" + "\n" + - "• It is hard to maintain across different Android versions and is not even doable on some." + + "• It was hard to maintain across different Android versions and is not even doable on some." + " We like to put the resources to other things.\n" + "\n" + "• It is not planned/possible on iOS or Desktop this way" + @@ -80,7 +80,7 @@ public class ApplicationDcContext extends DcContext { "\n" + "\uD83D\uDC49 For the future, we suggest to keep your phone locked " + "or use an appropriate app or check the device settings."); - addDeviceMsg("android-screen-lock-deprecated14", msg); + addDeviceMsg("android-screen-lock-deprecated17", msg); } } } catch (Exception e) { diff --git a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java index a8ebcc16e..45345f29f 100644 --- a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java @@ -6,15 +6,16 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.preference.CheckBoxPreference; import androidx.preference.Preference; -import android.util.Log; -import android.view.View; -import android.widget.EditText; -import android.widget.Toast; import com.b44t.messenger.DcContext; @@ -24,6 +25,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.permissions.Permissions; +import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.ScreenLockUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.views.ProgressDialog; @@ -95,6 +97,9 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment Preference manageKeys = this.findPreference("pref_manage_keys"); manageKeys.setOnPreferenceClickListener(new ManageKeysListener()); + Preference screenSecurity = this.findPreference(Prefs.SCREEN_SECURITY_PREF); + screenSecurity.setOnPreferenceChangeListener(new ScreenShotSecurityListener()); + Preference submitDebugLog = this.findPreference("pref_view_log"); submitDebugLog.setOnPreferenceClickListener(new ViewLogListener()); @@ -169,6 +174,16 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment } } + private class ScreenShotSecurityListener implements Preference.OnPreferenceChangeListener { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + boolean enabled = (Boolean) newValue; + Prefs.setScreenSecurityEnabled(getContext(), enabled); + Toast.makeText(getContext(), R.string.pref_screen_security_please_restart_hint, Toast.LENGTH_LONG).show(); + return true; + } + } + private class ViewLogListener implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(Preference preference) { diff --git a/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java deleted file mode 100644 index e61e351df..000000000 --- a/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.thoughtcrime.securesms.preferences; - -import android.app.Activity; -import android.app.KeyguardManager; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.provider.Settings; -import androidx.annotation.Nullable; -import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; - -import android.widget.Toast; - -import org.thoughtcrime.securesms.ApplicationPreferencesActivity; -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.components.SwitchPreferenceCompat; -import org.thoughtcrime.securesms.util.Prefs; -import org.thoughtcrime.securesms.util.ScreenLockUtil; - -import java.util.concurrent.TimeUnit; - -import mobi.upod.timedurationpicker.TimeDurationPickerDialog; - -public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment { - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - } - - @Override - public void onCreate(Bundle paramBundle) { - super.onCreate(paramBundle); - - this.findPreference(Prefs.SCREEN_LOCK).setOnPreferenceChangeListener(new ScreenLockListener()); - this.findPreference(Prefs.CHANGE_PASSPHRASE_PREF).setOnPreferenceClickListener(new ChangePassphraseClickListener()); - this.findPreference(Prefs.SCREEN_LOCK_TIMEOUT_INTERVAL_PREF).setOnPreferenceClickListener(new LockIntervalClickListener()); - this.findPreference(Prefs.SCREEN_SECURITY_PREF).setOnPreferenceChangeListener(new ScreenShotSecurityListener()); - - initializeVisibility(); - } - - @Override - public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_app_protection); - } - - @Override - public void onResume() { - super.onResume(); - ((ApplicationPreferencesActivity) getActivity()).getSupportActionBar().setTitle(R.string.pref_app_access); - initializePassphraseTimeoutSummary(); - } - - private void initializePassphraseTimeoutSummary() { - int timeoutSeconds = Prefs.getScreenLockTimeoutInterval(getActivity()); - this.findPreference(Prefs.SCREEN_LOCK_TIMEOUT_INTERVAL_PREF) - .setSummary(getResources().getQuantityString(R.plurals.n_minutes, timeoutSeconds, timeoutSeconds / 60)); - } - - private void initializeVisibility() { - KeyguardManager keyguardManager = (KeyguardManager) getContext().getSystemService(Context.KEYGUARD_SERVICE); - SwitchPreferenceCompat screenLockPreference = (SwitchPreferenceCompat) findPreference(Prefs.SCREEN_LOCK); - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP || keyguardManager == null || !keyguardManager.isKeyguardSecure()) { - screenLockPreference.setChecked(false); - screenLockPreference.setEnabled(false); - } - if (!screenLockPreference.isChecked()) { - manageScreenLockChildren(false); - } - - // screen-lock is deprecated - try { - if (!Prefs.getBooleanPreference(getContext(), "pref_android_screen_lock_keep_for_now", false)) { - PreferenceCategory screenLockCategory = findPreference("pref_android_screen_lock_category"); - screenLockCategory.setVisible(false); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void manageScreenLockChildren(boolean enable) { - SwitchPreferenceCompat timeoutPreference = (SwitchPreferenceCompat) findPreference(Prefs.SCREEN_LOCK_TIMEOUT_PREF); - timeoutPreference.setEnabled(enable); - findPreference(Prefs.SCREEN_LOCK_TIMEOUT_INTERVAL_PREF).setEnabled(enable); - if (!enable) { - timeoutPreference.setChecked(false); - } - } - - private class ScreenShotSecurityListener implements Preference.OnPreferenceChangeListener { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - boolean enabled = (Boolean) newValue; - Prefs.setScreenSecurityEnabled(getContext(), enabled); - Toast.makeText(getContext(), R.string.pref_screen_security_please_restart_hint, Toast.LENGTH_LONG).show(); - return true; - } - } - - private class ScreenLockListener implements Preference.OnPreferenceChangeListener { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - boolean enabled = (Boolean) newValue; - manageScreenLockChildren(enabled); - Prefs.setScreenLockEnabled(getContext(), enabled); - ScreenLockUtil.setShouldLockApp(false); - return true; - } - } - - private class ChangePassphraseClickListener implements Preference.OnPreferenceClickListener { - @Override - public boolean onPreferenceClick(Preference preference) { - Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); - startActivity(intent); - return true; - } - } - - private class LockIntervalClickListener implements Preference.OnPreferenceClickListener { - - @Override - public boolean onPreferenceClick(Preference preference) { - new TimeDurationPickerDialog(getContext(), (view, duration) -> { - int timeoutSeconds = (int) Math.max(TimeUnit.MILLISECONDS.toSeconds(duration), 60); - - Prefs.setScreenLockTimeoutInterval(getActivity(), timeoutSeconds); - - initializePassphraseTimeoutSummary(); - - }, 0).show(); - - return true; - } - } - -} diff --git a/src/org/thoughtcrime/securesms/util/Prefs.java b/src/org/thoughtcrime/securesms/util/Prefs.java index 726729945..a6fc58dc5 100644 --- a/src/org/thoughtcrime/securesms/util/Prefs.java +++ b/src/org/thoughtcrime/securesms/util/Prefs.java @@ -31,7 +31,6 @@ public class Prefs { private static final String TAG = Prefs.class.getSimpleName(); - public static final String CHANGE_PASSPHRASE_PREF = "pref_change_passphrase"; public static final String DISABLE_PASSPHRASE_PREF = "pref_disable_passphrase"; public static final String THEME_PREF = "pref_theme"; public static final String LANGUAGE_PREF = "pref_language"; @@ -43,8 +42,6 @@ public class Prefs { private static final String NOTIFICATION_PREF = "pref_key_enable_notifications"; public static final String LED_COLOR_PREF = "pref_led_color"; private static final String CHAT_RINGTONE = "pref_chat_ringtone_"; // followed by chat-id - public static final String SCREEN_LOCK_TIMEOUT_INTERVAL_PREF = "pref_timeout_interval"; - public static final String SCREEN_LOCK_TIMEOUT_PREF = "pref_timeout_passphrase"; public static final String SCREEN_SECURITY_PREF = "pref_screen_security"; private static final String ENTER_SENDS_PREF = "pref_enter_sends"; private static final String PROMPTED_DOZE_MSG_ID_PREF = "pref_prompted_doze_msg_id"; @@ -144,18 +141,6 @@ public class Prefs { return getStringPreference(context, THEME_PREF, DynamicTheme.systemThemeAvailable() ? DynamicTheme.SYSTEM : DynamicTheme.LIGHT); } - public static boolean isScreenLockTimeoutEnabled(Context context) { - return getBooleanPreference(context, SCREEN_LOCK_TIMEOUT_PREF, false); - } - - public static int getScreenLockTimeoutInterval(Context context) { - return getIntegerPreference(context, SCREEN_LOCK_TIMEOUT_INTERVAL_PREF, 5 * 60); - } - - public static void setScreenLockTimeoutInterval(Context context, int interval) { - setIntegerPrefrence(context, SCREEN_LOCK_TIMEOUT_INTERVAL_PREF, interval); - } - public static String getLanguage(Context context) { return getStringPreference(context, LANGUAGE_PREF, "zz"); } diff --git a/src/org/thoughtcrime/securesms/util/ScreenLockUtil.java b/src/org/thoughtcrime/securesms/util/ScreenLockUtil.java index a590fa96d..eccefe7f2 100644 --- a/src/org/thoughtcrime/securesms/util/ScreenLockUtil.java +++ b/src/org/thoughtcrime/securesms/util/ScreenLockUtil.java @@ -7,19 +7,10 @@ import android.content.Intent; import org.thoughtcrime.securesms.R; -import java.util.Timer; -import java.util.TimerTask; - public class ScreenLockUtil { public static final int REQUEST_CODE_CONFIRM_CREDENTIALS = 1001; - private static boolean shouldLockApp = true; - - public static void applyScreenLock(Activity activity) { - applyScreenLock(activity, REQUEST_CODE_CONFIRM_CREDENTIALS); - } - public static boolean applyScreenLock(Activity activity, int requestCode) { KeyguardManager keyguardManager = (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE); Intent intent; @@ -33,44 +24,7 @@ public class ScreenLockUtil { return false; } - public static boolean isScreenLockEnabled(Context context) { - return isScreenLockAvailable() && Prefs.isScreenLockEnabled(context); - } - private static boolean isScreenLockAvailable() { return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP; } - - public static boolean isScreenLockTimeoutEnabled(Context context) { - return isScreenLockAvailable() && Prefs.isScreenLockTimeoutEnabled(context); - } - - public static Timer scheduleScreenLockTimer(Timer timer, Activity activity) { - cancelScreenLockTimer(timer); - Timer newTimer = new Timer(); - newTimer.schedule(new TimerTask() { - @Override - public void run() { - if (isScreenLockTimeoutEnabled(activity)) { - ScreenLockUtil.applyScreenLock(activity); - } - } - }, Prefs.getScreenLockTimeoutInterval(activity) * 1000); - return newTimer; - } - - public static void cancelScreenLockTimer(Timer timer) { - if (timer != null) { - timer.cancel(); - } - } - - public static boolean getShouldLockApp() { - return shouldLockApp; - } - - public static void setShouldLockApp(boolean newShouldLockApp) { - shouldLockApp = newShouldLockApp; - } - }