ee1ba714e0f63d902d8724723766b6d5ad1c607b
[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(PinCodeActivity.class);
21 // other activities may be exempted, if needed
22 }
23
24 private static int PASS_CODE_TIMEOUT = 1000;
25 // keeping a "low" value (not 0) is the easiest way to avoid prevent the pass code is requested on rotations
26
27 public static PassCodeManager mPassCodeManagerInstance = null;
28
29 public static PassCodeManager getPassCodeManager() {
30 if (mPassCodeManagerInstance == null) {
31 mPassCodeManagerInstance = new PassCodeManager();
32 }
33 return mPassCodeManagerInstance;
34 }
35
36 private Long mTimestamp = 0l;
37 private int mVisibleActivitiesCounter = 0;
38
39 protected PassCodeManager() {};
40
41 public void onActivityStarted(Activity activity) {
42 if (!sExemptOfPasscodeActivites.contains(activity.getClass()) &&
43 passCodeShouldBeRequested()
44 ){
45
46 Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class);
47 i.setAction(PinCodeActivity.ACTION_REQUEST);
48 i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
49 activity.startActivity(i);
50 }
51
52 mVisibleActivitiesCounter++; // AFTER passCodeShouldBeRequested was checked
53 }
54
55 public void onActivityStopped(Activity activity) {
56 if (mVisibleActivitiesCounter > 0) {
57 mVisibleActivitiesCounter--;
58 }
59 setUnlockTimestamp();
60 }
61
62 private boolean passCodeShouldBeRequested(){
63 if ((System.currentTimeMillis() - mTimestamp) > PASS_CODE_TIMEOUT &&
64 mVisibleActivitiesCounter <= 0
65 ){
66 SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
67 if (appPrefs.getBoolean("set_pincode", false)) {
68 return true;
69 }
70 }
71 return false;
72 }
73
74 private void setUnlockTimestamp() {
75 mTimestamp = System.currentTimeMillis();
76 }
77
78 }