1 package com
.owncloud
.android
.authentication
;
3 import android
.app
.Activity
;
4 import android
.content
.Context
;
5 import android
.content
.Intent
;
6 import android
.content
.SharedPreferences
;
7 import android
.os
.PowerManager
;
8 import android
.preference
.PreferenceManager
;
9 import android
.view
.View
;
10 import android
.view
.WindowManager
;
12 import com
.owncloud
.android
.MainApp
;
13 import com
.owncloud
.android
.ui
.activity
.PinCodeActivity
;
15 import java
.util
.HashSet
;
18 public class PassCodeManager
{
20 private static final Set
<Class
> sExemptOfPasscodeActivites
;
23 sExemptOfPasscodeActivites
= new HashSet
<Class
>();
24 sExemptOfPasscodeActivites
.add(PinCodeActivity
.class);
25 // other activities may be exempted, if needed
28 private static int PASS_CODE_TIMEOUT
= 1000;
29 // keeping a "low" positive value is the easiest way to prevent the pass code is requested on rotations
31 public static PassCodeManager mPassCodeManagerInstance
= null
;
33 public static PassCodeManager
getPassCodeManager() {
34 if (mPassCodeManagerInstance
== null
) {
35 mPassCodeManagerInstance
= new PassCodeManager();
37 return mPassCodeManagerInstance
;
40 private Long mTimestamp
= 0l;
41 private int mVisibleActivitiesCounter
= 0;
43 protected PassCodeManager() {};
45 public void onActivityCreated(Activity activity
) {
46 if (passCodeIsEnabled()) {
47 activity
.getWindow().addFlags(WindowManager
.LayoutParams
.FLAG_SECURE
);
49 activity
.getWindow().clearFlags(WindowManager
.LayoutParams
.FLAG_SECURE
);
53 public void onActivityStarted(Activity activity
) {
54 if (!sExemptOfPasscodeActivites
.contains(activity
.getClass()) &&
55 passCodeShouldBeRequested()
58 Intent i
= new Intent(MainApp
.getAppContext(), PinCodeActivity
.class);
59 i
.setAction(PinCodeActivity
.ACTION_REQUEST
);
60 i
.setFlags(Intent
.FLAG_ACTIVITY_REORDER_TO_FRONT
);
61 activity
.startActivity(i
);
65 mVisibleActivitiesCounter
++; // keep it AFTER passCodeShouldBeRequested was checked
68 public void onActivityStopped(Activity activity
) {
69 if (mVisibleActivitiesCounter
> 0) {
70 mVisibleActivitiesCounter
--;
73 PowerManager powerMgr
= (PowerManager
) activity
.getSystemService(Context
.POWER_SERVICE
);
74 if (passCodeIsEnabled() && powerMgr
!= null
&& !powerMgr
.isScreenOn()) {
75 activity
.moveTaskToBack(true
);
79 private void setUnlockTimestamp() {
80 mTimestamp
= System
.currentTimeMillis();
83 private boolean passCodeShouldBeRequested(){
84 if ((System
.currentTimeMillis() - mTimestamp
) > PASS_CODE_TIMEOUT
&&
85 mVisibleActivitiesCounter
<= 0
87 return passCodeIsEnabled();
92 private boolean passCodeIsEnabled() {
93 SharedPreferences appPrefs
= PreferenceManager
.getDefaultSharedPreferences(MainApp
.getAppContext());
94 return (appPrefs
.getBoolean("set_pincode", false
));