X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e0867d2b28b3e29430eead9938f9fc6a9b2944be..84e99c3cc7bfd51fa648ecae35a839269204c2d0:/src/com/owncloud/android/authentication/PasscodeManager.java 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(); + } + +}