*/
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
private static final String TAG = MainApp.class.getSimpleName();
private static final String AUTH_ON = "on";
+
+ private static final Set<String> sExemptOfPasscodeActivites;
+
+ static {
+ sExemptOfPasscodeActivites = new HashSet<String>();
+ 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";
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() {
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();
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();
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) {
sortByDate(false);
break;
-// TODO re-enable when server-side folder size calculation is available
-// case 2:
-// sortBySize(false);
-// break;
}
dialog.dismiss();
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();
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;
private String [] mTempText ={"","","",""};
- private String mActivity;
-
private boolean mConfirmingPinCode = false;
private boolean mPinCodeChecked = false;
private boolean mNewPasswordEntered = false;
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);
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);
}
}
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();
+ }
}
+
}
-
-
}
}
}
@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
@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);
}
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());
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
@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());
@Override
protected void onPostResume() {
- //Log_OC.e(TAG, "ACTIVITY, ONPOSTRESUME");
super.onPostResume();
}