From: David A. Velasco Date: Wed, 29 Apr 2015 14:50:30 +0000 (+0200) Subject: Refactored location of passcode check: a callback to rule them all X-Git-Tag: test~19^2~17 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/e0867d2b28b3e29430eead9938f9fc6a9b2944be?ds=inline;hp=-c Refactored location of passcode check: a callback to rule them all --- e0867d2b28b3e29430eead9938f9fc6a9b2944be diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java index 760a5e79..789fa14d 100644 --- a/src/com/owncloud/android/MainApp.java +++ b/src/com/owncloud/android/MainApp.java @@ -20,15 +20,25 @@ */ package com.owncloud.android; +import android.app.Activity; import android.app.Application; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import com.owncloud.android.authentication.AuthenticatorActivity; +import com.owncloud.android.authentication.PinCheck; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy; import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.ui.activity.PinCodeActivity; + +import java.util.HashSet; +import java.util.Set; /** * Main Application of the project @@ -41,6 +51,14 @@ public class MainApp extends Application { private static final String TAG = MainApp.class.getSimpleName(); private static final String AUTH_ON = "on"; + + private static final Set sExemptOfPasscodeActivites; + + static { + sExemptOfPasscodeActivites = new HashSet(); + 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"; @@ -75,6 +93,59 @@ public class MainApp extends Application { Log_OC.startLogging(); Log_OC.d("Debug", "start logging"); } + + // register global protection with pass code + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + this.registerActivityLifecycleCallbacks( new ActivityLifecycleCallbacks() { + + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onCreate(Bundle)" ); + } + + @Override + public void onActivityStarted(Activity activity) { + Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onStart()" ); + } + + @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()" ); + + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onSaveInstanceState(Bundle)" ); + + } + + @Override + public void onActivityDestroyed(Activity activity) { + Log_OC.d(TAG, activity.getClass().getSimpleName() + " in onDestroy()" ); + + } + }); + } } public static Context getAppContext() { diff --git a/src/com/owncloud/android/authentication/PinCheck.java b/src/com/owncloud/android/authentication/PinCheck.java index 0f3f4c52..2f48eb0a 100644 --- a/src/com/owncloud/android/authentication/PinCheck.java +++ b/src/com/owncloud/android/authentication/PinCheck.java @@ -9,8 +9,8 @@ import com.owncloud.android.MainApp; public class PinCheck extends Activity { private static Long timestamp = 0l; - private static Long lastStart = 0l; - private static int PINCODE_TIMEOUT = 10000; + 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(); @@ -18,7 +18,8 @@ public class PinCheck extends Activity { public static boolean checkIfPinEntry(){ if ((System.currentTimeMillis() - timestamp) > PINCODE_TIMEOUT && - (System.currentTimeMillis() - lastStart) > PINCODE_TIMEOUT){ + (System.currentTimeMillis() - lastStart) > PINCODE_TIMEOUT + ){ SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext()); if (appPrefs.getBoolean("set_pincode", false)) { lastStart = System.currentTimeMillis(); diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 793f904a..a94e978a 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -164,12 +164,13 @@ 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) { @@ -535,10 +536,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { sortByDate(false); break; -// TODO re-enable when server-side folder size calculation is available -// case 2: -// sortBySize(false); -// break; } dialog.dismiss(); @@ -801,12 +798,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { Log_OC.d(TAG, "onResume() start"); super.onResume(); - if (PinCheck.checkIfPinEntry()){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "FileDisplayActivity"); - startActivity(i); - } - // refresh list of files refreshListOfFilesFragment(); diff --git a/src/com/owncloud/android/ui/activity/PinCodeActivity.java b/src/com/owncloud/android/ui/activity/PinCodeActivity.java index cdc95782..cab1917c 100644 --- a/src/com/owncloud/android/ui/activity/PinCodeActivity.java +++ b/src/com/owncloud/android/ui/activity/PinCodeActivity.java @@ -46,7 +46,9 @@ import com.owncloud.android.utils.DisplayUtils; public class PinCodeActivity extends SherlockFragmentActivity { - public final static String EXTRA_ACTIVITY = "com.owncloud.android.ui.activity.PinCodeActivity.ACTIVITY"; + public final static String ACTION_TOGGLE = PinCodeActivity.class.getCanonicalName() + ".TOGGLE"; + public final static String ACTION_REQUEST= PinCodeActivity.class.getCanonicalName() + ".REQUEST"; + public final static String EXTRA_NEW_STATE = "com.owncloud.android.ui.activity.PinCodeActivity.NEW_STATE"; private Button mBCancel; @@ -59,8 +61,6 @@ public class PinCodeActivity extends SherlockFragmentActivity { private String [] mTempText ={"","","",""}; - private String mActivity; - private boolean mConfirmingPinCode = false; private boolean mPinCodeChecked = false; private boolean mNewPasswordEntered = false; @@ -72,9 +72,6 @@ public class PinCodeActivity extends SherlockFragmentActivity { super.onCreate(savedInstanceState); setContentView(R.layout.pincodelock); - Intent intent = getIntent(); - mActivity = intent.getStringExtra(EXTRA_ACTIVITY); - mBCancel = (Button) findViewById(R.id.cancel); mPinHdr = (TextView) findViewById(R.id.pinHdr); mPinHdrExplanation = (TextView) findViewById(R.id.pinHdrExpl); @@ -96,31 +93,32 @@ public class PinCodeActivity extends SherlockFragmentActivity { mPinCodeChecked = true; mNewPasswordEntered = true; - }else{ - + } else { + + /// TODO rewrite this activity; this logic is too twisted if (appPrefs.getBoolean("set_pincode", false)){ - // pincode activated - if (mActivity.equals("preferences")){ - // PIN has been activated yet - mPinHdr.setText(R.string.pincode_configure_your_pin); - mPinHdrExplanation.setVisibility(View.VISIBLE); - mPinCodeChecked = true ; // No need to check it - setChangePincodeView(true); - }else{ - // PIN active - mBCancel.setVisibility(View.INVISIBLE); - mBCancel.setVisibility(View.GONE); - mPinHdr.setText(R.string.pincode_enter_pin_code); - mPinHdrExplanation.setVisibility(View.INVISIBLE); - setChangePincodeView(false); + // pincode activated + if (ACTION_TOGGLE.equals(getIntent().getAction())) { + // PIN has been activated yet + mPinHdr.setText(R.string.pincode_configure_your_pin); + mPinHdrExplanation.setVisibility(View.VISIBLE); + mPinCodeChecked = true ; // No need to check it + setChangePincodeView(true); + } else { + // PIN active + mBCancel.setVisibility(View.INVISIBLE); + mBCancel.setVisibility(View.GONE); + mPinHdr.setText(R.string.pincode_enter_pin_code); + mPinHdrExplanation.setVisibility(View.INVISIBLE); + setChangePincodeView(false); } - }else { - // pincode removal - mPinHdr.setText(R.string.pincode_remove_your_pincode); - mPinHdrExplanation.setVisibility(View.INVISIBLE); - mPinCodeChecked = false; - setChangePincodeView(true); + } else { + // pincode removal + mPinHdr.setText(R.string.pincode_remove_your_pincode); + mPinHdrExplanation.setVisibility(View.INVISIBLE); + mPinCodeChecked = false; + setChangePincodeView(true); } } @@ -368,36 +366,36 @@ public class PinCodeActivity extends SherlockFragmentActivity { mPinCodeChecked = checkPincode(); } - if (mPinCodeChecked && - (mActivity.equals("FileDisplayActivity") || mActivity.equals("PreviewImageActivity") || mActivity.equals("ownCloudUploader"))){ - PinCheck.setUnlockTimestamp(); - finish(); - } else if (mPinCodeChecked){ + if (mPinCodeChecked) { PinCheck.setUnlockTimestamp(); - - Intent intent = getIntent(); - String newState = intent.getStringExtra(EXTRA_NEW_STATE); - - if (newState.equals("false")){ - SharedPreferences.Editor appPrefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()).edit(); - appPrefs.putBoolean("set_pincode",false); - appPrefs.commit(); - - setInitVars(); - pinCodeEnd(false); - - }else{ - - if (!mConfirmingPinCode){ - pinCodeChangeRequest(); - + + if (ACTION_REQUEST.equals(getIntent().getAction())) { + finish(); + + } else if (mPinCodeChecked) { + String newState = getIntent().getStringExtra(EXTRA_NEW_STATE); + + // TODO - next decision should done according to the current state of PIN in prefs (enable or not), not whatever says de client + if (newState.equals("false")) { + SharedPreferences.Editor appPrefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()).edit(); + appPrefs.putBoolean("set_pincode", false); + appPrefs.commit(); + + setInitVars(); + pinCodeEnd(false); + } else { - confirmPincode(); + + if (!mConfirmingPinCode) { + pinCodeChangeRequest(); + + } else { + confirmPincode(); + } } + } - - } } } @@ -571,9 +569,8 @@ public class PinCodeActivity extends SherlockFragmentActivity { @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()== 0){ - if (mActivity.equals("preferences")){ + if (ACTION_TOGGLE.equals(getIntent().getAction())){ SharedPreferences.Editor appPrefsE = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()).edit(); SharedPreferences appPrefs = PreferenceManager diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index ef9e39a7..313a07be 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -168,7 +168,7 @@ public class Preferences extends SherlockPreferenceActivity @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Intent i = new Intent(getApplicationContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "preferences"); + i.setAction(PinCodeActivity.ACTION_TOGGLE); i.putExtra(PinCodeActivity.EXTRA_NEW_STATE, newValue.toString()); startActivity(i); diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index d36e1cb1..c8326e7f 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -118,13 +118,6 @@ public class Uploader extends FileActivity } super.onCreate(savedInstanceState); - // Check Pin entry - if (PinCheck.checkIfPinEntry()){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "ownCloudUploader"); - startActivity(i); - } - ActionBar actionBar = getSupportActionBar(); actionBar.setIcon(DisplayUtils.getSeasonalIconId()); diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index be486335..af10789f 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -104,13 +104,6 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { actionBar.setIcon(DisplayUtils.getSeasonalIconId()); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.hide(); - - // PIN CODE request - if (PinCheck.checkIfPinEntry()){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "PreviewImageActivity"); - startActivity(i); - } // Make sure we're running on Honeycomb or higher to use FullScreen and // Immersive Mode @@ -327,14 +320,7 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { @Override protected void onResume() { super.onResume(); - - if (PinCheck.checkIfPinEntry()){ - Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class); - i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "PreviewImageActivity"); - startActivity(i); - } - - //Log_OC.e(TAG, "ACTIVITY, ONRESUME"); + mDownloadFinishReceiver = new DownloadFinishReceiver(); IntentFilter filter = new IntentFilter(FileDownloader.getDownloadFinishMessage()); @@ -344,7 +330,6 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { @Override protected void onPostResume() { - //Log_OC.e(TAG, "ACTIVITY, ONPOSTRESUME"); super.onPostResume(); }