Prevent that PIN code is requested when system windows partially overlapping the...
authorDavid A. Velasco <dvelasco@solidgear.es>
Thu, 30 Apr 2015 11:21:28 +0000 (13:21 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Thu, 30 Apr 2015 11:21:28 +0000 (13:21 +0200)
src/com/owncloud/android/MainApp.java
src/com/owncloud/android/authentication/PasscodeManager.java [new file with mode: 0644]
src/com/owncloud/android/authentication/PinCheck.java [deleted file]
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/activity/PinCodeActivity.java
src/com/owncloud/android/ui/activity/Preferences.java
src/com/owncloud/android/ui/activity/Uploader.java
src/com/owncloud/android/ui/preview/PreviewImageActivity.java

index 789fa14..b16198d 100644 (file)
@@ -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<String> sExemptOfPasscodeActivites;
-
-    static {
-        sExemptOfPasscodeActivites = new HashSet<String>();
-        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 (file)
index 0000000..a5eb06a
--- /dev/null
@@ -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<Class> sExemptOfPasscodeActivites;
+
+    static {
+        sExemptOfPasscodeActivites = new HashSet<Class>();
+        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 (file)
index 2f48eb0..0000000
+++ /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;
-    }
-}
index a94e978..840339c 100644 (file)
@@ -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");
     }
index cab1917..11ddf11 100644 (file)
@@ -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();
index 313a07b..7429f32 100644 (file)
@@ -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
index c8326e7..9dc0fbf 100644 (file)
@@ -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;
index af10789..81e54a1 100644 (file)
@@ -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();
     }