From: David A. Velasco Date: Thu, 30 Apr 2015 11:21:28 +0000 (+0200) Subject: Prevent that PIN code is requested when system windows partially overlapping the... X-Git-Tag: test~19^2~16 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/84e99c3cc7bfd51fa648ecae35a839269204c2d0?ds=inline Prevent that PIN code is requested when system windows partially overlapping the app disappear and the app is resumed --- diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java index 789fa14d..b16198d8 100644 --- a/src/com/owncloud/android/MainApp.java +++ b/src/com/owncloud/android/MainApp.java @@ -30,7 +30,7 @@ import android.os.Build; import android.os.Bundle; import com.owncloud.android.authentication.AuthenticatorActivity; -import com.owncloud.android.authentication.PinCheck; +import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy; @@ -52,14 +52,6 @@ public class MainApp extends Application { private static final String AUTH_ON = "on"; - private static final Set sExemptOfPasscodeActivites; - - static { - sExemptOfPasscodeActivites = new HashSet(); - sExemptOfPasscodeActivites.add(AuthenticatorActivity.class.getCanonicalName()); - sExemptOfPasscodeActivites.add(PinCodeActivity.class.getCanonicalName()); - } - @SuppressWarnings("unused") private static final String POLICY_SINGLE_SESSION_PER_ACCOUNT = "single session per account"; @SuppressWarnings("unused") @@ -106,31 +98,23 @@ public class MainApp extends Application { @Override public void onActivityStarted(Activity activity) { Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onStart()" ); + PassCodeManager.getPassCodeManager().onActivityStarted(activity); } @Override public void onActivityResumed(Activity activity) { Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onResume()" ); - if (!sExemptOfPasscodeActivites.contains(activity.getClass().getCanonicalName()) && - PinCheck.checkIfPinEntry() - ){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - //i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, activity.getClass().getSimpleName()); - i.setAction(PinCodeActivity.ACTION_REQUEST); - activity.startActivity(i); - } } @Override public void onActivityPaused(Activity activity) { Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onPause()"); - PinCheck.setUnlockTimestamp(); } @Override public void onActivityStopped(Activity activity) { Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onStop()" ); - + PassCodeManager.getPassCodeManager().onActivityStopped(activity); } @Override diff --git a/src/com/owncloud/android/authentication/PasscodeManager.java b/src/com/owncloud/android/authentication/PasscodeManager.java new file mode 100644 index 00000000..a5eb06a6 --- /dev/null +++ b/src/com/owncloud/android/authentication/PasscodeManager.java @@ -0,0 +1,76 @@ +package com.owncloud.android.authentication; + +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import com.owncloud.android.MainApp; +import com.owncloud.android.ui.activity.PinCodeActivity; + +import java.util.HashSet; +import java.util.Set; + +public class PassCodeManager { + + private static final Set sExemptOfPasscodeActivites; + + static { + sExemptOfPasscodeActivites = new HashSet(); + sExemptOfPasscodeActivites.add(AuthenticatorActivity.class); // maybe not so good idea + sExemptOfPasscodeActivites.add(PinCodeActivity.class); + } + + private static int PASS_CODE_TIMEOUT = 1000; + + public static PassCodeManager mPassCodeManagerInstance = null; + + public static PassCodeManager getPassCodeManager() { + if (mPassCodeManagerInstance == null) { + mPassCodeManagerInstance = new PassCodeManager(); + } + return mPassCodeManagerInstance; + } + + private Long mTimestamp = 0l; + private int mVisibleActivitiesCounter = 0; + + protected PassCodeManager() {}; + + public void onActivityStarted(Activity activity) { + if (!sExemptOfPasscodeActivites.contains(activity.getClass()) && + passCodeShouldBeRequested() + ){ + + Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); + i.setAction(PinCodeActivity.ACTION_REQUEST); + activity.startActivity(i); + } + + mVisibleActivitiesCounter++; // AFTER passCodeShouldBeRequested was checked + } + + public void onActivityStopped(Activity activity) { + if (mVisibleActivitiesCounter > 0) { + mVisibleActivitiesCounter--; + } + setUnlockTimestamp(); + } + + private boolean passCodeShouldBeRequested(){ + if ((System.currentTimeMillis() - mTimestamp) > PASS_CODE_TIMEOUT && + mVisibleActivitiesCounter <= 0 + ){ + SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext()); + if (appPrefs.getBoolean("set_pincode", false)) { + return true; + } + } + return false; + } + + private void setUnlockTimestamp() { + mTimestamp = System.currentTimeMillis(); + } + +} diff --git a/src/com/owncloud/android/authentication/PinCheck.java b/src/com/owncloud/android/authentication/PinCheck.java deleted file mode 100644 index 2f48eb0a..00000000 --- a/src/com/owncloud/android/authentication/PinCheck.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.owncloud.android.authentication; - -import android.app.Activity; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; - -import com.owncloud.android.MainApp; - -public class PinCheck extends Activity { - - private static Long timestamp = 0l; - private static Long lastStart = 0l; // this must be here because it's called twice - in onCreate and onResume - private static int PINCODE_TIMEOUT = 1000; - - public static void setUnlockTimestamp() { - timestamp = System.currentTimeMillis(); - } - - public static boolean checkIfPinEntry(){ - if ((System.currentTimeMillis() - timestamp) > PINCODE_TIMEOUT && - (System.currentTimeMillis() - lastStart) > PINCODE_TIMEOUT - ){ - SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext()); - if (appPrefs.getBoolean("set_pincode", false)) { - lastStart = System.currentTimeMillis(); - return true; - } - } - return false; - } -} diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index a94e978a..840339c0 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -65,7 +65,7 @@ import com.actionbarsherlock.view.Window; import com.owncloud.android.BuildConfig; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.authentication.PinCheck; +import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; @@ -164,14 +164,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account is valid - /* TODO remove - if (PinCheck.checkIfPinEntry()){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "FileDisplayActivity"); - startActivity(i); - } - */ - /// grant that FileObserverService is watching favorite files if (savedInstanceState == null) { Intent initObserversIntent = FileObserverService.makeInitIntent(this); @@ -843,8 +835,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { mDownloadFinishReceiver = null; } - PinCheck.setUnlockTimestamp(); - super.onPause(); Log_OC.d(TAG, "onPause() end"); } diff --git a/src/com/owncloud/android/ui/activity/PinCodeActivity.java b/src/com/owncloud/android/ui/activity/PinCodeActivity.java index cab1917c..11ddf11d 100644 --- a/src/com/owncloud/android/ui/activity/PinCodeActivity.java +++ b/src/com/owncloud/android/ui/activity/PinCodeActivity.java @@ -21,7 +21,6 @@ package com.owncloud.android.ui.activity; import java.util.Arrays; -import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -40,7 +39,7 @@ import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.owncloud.android.R; -import com.owncloud.android.authentication.PinCheck; +import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.utils.DisplayUtils; public class PinCodeActivity extends SherlockFragmentActivity { @@ -367,7 +366,8 @@ public class PinCodeActivity extends SherlockFragmentActivity { } if (mPinCodeChecked) { - PinCheck.setUnlockTimestamp(); + // TODO remove or update: + // PassCodeManager.setUnlockTimestamp(); if (ACTION_REQUEST.equals(getIntent().getAction())) { finish(); diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 313a07be..7429f32b 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -58,7 +58,7 @@ import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; -import com.owncloud.android.authentication.PinCheck; +import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.db.DbHandler; @@ -395,13 +395,6 @@ public class Preferences extends SherlockPreferenceActivity } @Override - protected void onPause() { - super.onPause(); - - PinCheck.setUnlockTimestamp(); - } - - @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // Filter for only showing contextual menu when long press on the diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index c8326e7f..9dc0fbf9 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -64,8 +64,6 @@ import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountAuthenticator; -import com.owncloud.android.authentication.PinCheck; -import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.lib.common.operations.RemoteOperation; diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index af10789f..81e54a15 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -38,10 +38,9 @@ import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Window; import com.ortiz.touch.ExtendedViewPager; -import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; -import com.owncloud.android.authentication.PinCheck; +import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileDownloader; @@ -58,7 +57,6 @@ import com.owncloud.android.operations.RemoveFileOperation; import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; -import com.owncloud.android.ui.activity.PinCodeActivity; import com.owncloud.android.ui.fragment.FileFragment; import com.owncloud.android.utils.DisplayUtils; @@ -340,7 +338,6 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { mDownloadFinishReceiver = null; } - PinCheck.setUnlockTimestamp(); super.onPause(); }