Prevent that PIN code is requested when system windows partially overlapping the...
[pub/Android/ownCloud.git] / src / com / owncloud / android / authentication / PasscodeManager.java
1 package com.owncloud.android.authentication;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.content.SharedPreferences;
6 import android.preference.PreferenceManager;
7
8 import com.owncloud.android.MainApp;
9 import com.owncloud.android.ui.activity.PinCodeActivity;
10
11 import java.util.HashSet;
12 import java.util.Set;
13
14 public class PassCodeManager {
15
16 private static final Set<Class> sExemptOfPasscodeActivites;
17
18 static {
19 sExemptOfPasscodeActivites = new HashSet<Class>();
20 sExemptOfPasscodeActivites.add(AuthenticatorActivity.class); // maybe not so good idea
21 sExemptOfPasscodeActivites.add(PinCodeActivity.class);
22 }
23
24 private static int PASS_CODE_TIMEOUT = 1000;
25
26 public static PassCodeManager mPassCodeManagerInstance = null;
27
28 public static PassCodeManager getPassCodeManager() {
29 if (mPassCodeManagerInstance == null) {
30 mPassCodeManagerInstance = new PassCodeManager();
31 }
32 return mPassCodeManagerInstance;
33 }
34
35 private Long mTimestamp = 0l;
36 private int mVisibleActivitiesCounter = 0;
37
38 protected PassCodeManager() {};
39
40 public void onActivityStarted(Activity activity) {
41 if (!sExemptOfPasscodeActivites.contains(activity.getClass()) &&
42 passCodeShouldBeRequested()
43 ){
44
45 Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class);
46 i.setAction(PinCodeActivity.ACTION_REQUEST);
47 activity.startActivity(i);
48 }
49
50 mVisibleActivitiesCounter++; // AFTER passCodeShouldBeRequested was checked
51 }
52
53 public void onActivityStopped(Activity activity) {
54 if (mVisibleActivitiesCounter > 0) {
55 mVisibleActivitiesCounter--;
56 }
57 setUnlockTimestamp();
58 }
59
60 private boolean passCodeShouldBeRequested(){
61 if ((System.currentTimeMillis() - mTimestamp) > PASS_CODE_TIMEOUT &&
62 mVisibleActivitiesCounter <= 0
63 ){
64 SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
65 if (appPrefs.getBoolean("set_pincode", false)) {
66 return true;
67 }
68 }
69 return false;
70 }
71
72 private void setUnlockTimestamp() {
73 mTimestamp = System.currentTimeMillis();
74 }
75
76 }