1 package com
.owncloud
.android
.authentication
;
3 import android
.app
.Activity
;
4 import android
.content
.Intent
;
5 import android
.content
.SharedPreferences
;
6 import android
.preference
.PreferenceManager
;
8 import com
.owncloud
.android
.MainApp
;
9 import com
.owncloud
.android
.ui
.activity
.PinCodeActivity
;
11 import java
.util
.HashSet
;
14 public class PassCodeManager
{
16 private static final Set
<Class
> sExemptOfPasscodeActivites
;
19 sExemptOfPasscodeActivites
= new HashSet
<Class
>();
20 sExemptOfPasscodeActivites
.add(PinCodeActivity
.class);
21 // other activities may be exempted, if needed
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
27 public static PassCodeManager mPassCodeManagerInstance
= null
;
29 public static PassCodeManager
getPassCodeManager() {
30 if (mPassCodeManagerInstance
== null
) {
31 mPassCodeManagerInstance
= new PassCodeManager();
33 return mPassCodeManagerInstance
;
36 private Long mTimestamp
= 0l;
37 private int mVisibleActivitiesCounter
= 0;
39 protected PassCodeManager() {};
41 public void onActivityStarted(Activity activity
) {
42 if (!sExemptOfPasscodeActivites
.contains(activity
.getClass()) &&
43 passCodeShouldBeRequested()
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
);
52 mVisibleActivitiesCounter
++; // AFTER passCodeShouldBeRequested was checked
55 public void onActivityStopped(Activity activity
) {
56 if (mVisibleActivitiesCounter
> 0) {
57 mVisibleActivitiesCounter
--;
62 private boolean passCodeShouldBeRequested(){
63 if ((System
.currentTimeMillis() - mTimestamp
) > PASS_CODE_TIMEOUT
&&
64 mVisibleActivitiesCounter
<= 0
66 SharedPreferences appPrefs
= PreferenceManager
.getDefaultSharedPreferences(MainApp
.getAppContext());
67 if (appPrefs
.getBoolean("set_pincode", false
)) {
74 private void setUnlockTimestamp() {
75 mTimestamp
= System
.currentTimeMillis();