Merge branch 'develop' into pinEnhancement
authorDavid A. Velasco <dvelasco@solidgear.es>
Tue, 28 Apr 2015 12:20:17 +0000 (14:20 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Tue, 28 Apr 2015 12:20:17 +0000 (14:20 +0200)
Conflicts SOLVED:
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/activity/Preferences.java
src/com/owncloud/android/ui/activity/Uploader.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

res/values/strings.xml
res/xml/preferences.xml
src/com/owncloud/android/authentication/PinCheck.java [new file with mode: 0644]
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/activity/PinCodeActivity.java
src/com/owncloud/android/ui/activity/Preferences.java
src/com/owncloud/android/ui/activity/Uploader.java
src/com/owncloud/android/ui/preview/PreviewImageActivity.java

index abf48d3..71a40b5 100644 (file)
@@ -24,8 +24,7 @@
     <string name="prefs_category_more">More</string>
     <string name="prefs_accounts">Accounts</string>
     <string name="prefs_manage_accounts">Manage Accounts</string>
-    <string name="prefs_pincode">App PIN</string>
-    <string name="prefs_pincode_summary">Protect your client</string>
+    <string name="prefs_pincode">Passcode lock</string>
     <string name="prefs_instant_upload">Instant picture uploads</string>
     <string name="prefs_instant_upload_summary">Instantly upload pictures taken by camera</string>
     <string name="prefs_instant_video_upload">Instant video uploads</string>
index ac36984..18cb398 100644 (file)
@@ -27,8 +27,7 @@
                android:title="@string/prefs_select_oc_account"
                android:summary="@string/prefs_summary_select_oc_account"
                / -->
-           <com.owncloud.android.ui.CheckBoxPreferenceWithLongTitle android:title="@string/prefs_pincode" android:key="set_pincode" 
-                        android:summary="@string/prefs_pincode_summary"/>
+           <android.preference.CheckBoxPreference android:title="@string/prefs_pincode" android:key="set_pincode" />
        </PreferenceCategory>
 
     <PreferenceCategory android:title="@string/prefs_category_instant_uploading" android:key="instant_uploading_category">
diff --git a/src/com/owncloud/android/authentication/PinCheck.java b/src/com/owncloud/android/authentication/PinCheck.java
new file mode 100644 (file)
index 0000000..0f3f4c5
--- /dev/null
@@ -0,0 +1,30 @@
+package com.owncloud.android.authentication;
+
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+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;
+    
+    public static void setUnlockTimestamp() {
+        timestamp = System.currentTimeMillis();
+    }
+
+    public static boolean checkIfPinEntry(){
+        if ((System.currentTimeMillis() - timestamp) > PINCODE_TIMEOUT &&
+            (System.currentTimeMillis() - lastStart) > PINCODE_TIMEOUT){
+            SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(MainApp.getAppContext());
+            if (appPrefs.getBoolean("set_pincode", false)) {
+                lastStart = System.currentTimeMillis();
+                return true;
+            }
+        }
+        return false;
+    }
+}
index 83a4902..793f904 100644 (file)
@@ -65,6 +65,7 @@ import com.actionbarsherlock.view.Window;
 import com.owncloud.android.BuildConfig;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
+import com.owncloud.android.authentication.PinCheck;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
@@ -153,6 +154,8 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
 
 
     private OCFile mWaitingToSend;
+    
+    private Boolean mUnlocked = false;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -161,14 +164,14 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
 
         super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account is valid
 
-        // PIN CODE request ;  best location is to decide, let's try this first
-        if (getIntent().getAction() != null && getIntent().getAction().equals(Intent.ACTION_MAIN) && savedInstanceState == null) {
-            requestPinCode();
-        } else if (getIntent().getAction() == null && savedInstanceState == null) {
-            requestPinCode();
+        
+        if (PinCheck.checkIfPinEntry()){
+            Intent i = new Intent(MainApp.getAppContext(), PinCodeActivity.class);
+            i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "FileDisplayActivity");
+            startActivity(i);
         }
 
-        /// grant that FileObserverService is watching favourite files
+        /// grant that FileObserverService is watching favorite files
         if (savedInstanceState == null) {
             Intent initObserversIntent = FileObserverService.makeInitIntent(this);
             startService(initObserversIntent);
@@ -798,6 +801,12 @@ 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();
 
@@ -843,7 +852,8 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
             mDownloadFinishReceiver = null;
         }
         
-        
+        PinCheck.setUnlockTimestamp();
+
         super.onPause();
         Log_OC.d(TAG, "onPause() end");
     }
@@ -1324,23 +1334,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         }
     };    
 
-
-
-    /**
-     * Launch an intent to request the PIN code to the user before letting him use the app
-     */
-    private void requestPinCode() {
-        boolean pinStart = false;
-        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-        pinStart = appPrefs.getBoolean("set_pincode", false);
-        if (pinStart) {
-            Intent i = new Intent(getApplicationContext(), PinCodeActivity.class);
-            i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "FileDisplayActivity");
-            startActivity(i);
-        }
-    }
-
-
     @Override
     public void onSavedCertificate() {
         startSyncFolderOperation(getCurrentDir(), false);
index 76ece93..cdc9578 100644 (file)
@@ -21,13 +21,6 @@ package com.owncloud.android.ui.activity;
 
 import java.util.Arrays;
 
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockFragmentActivity;
-import com.owncloud.android.R;
-import com.owncloud.android.utils.DisplayUtils;
-
-import android.app.AlertDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
@@ -42,6 +35,13 @@ import android.view.View.OnKeyListener;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;
+import android.widget.Toast;
+
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockFragmentActivity;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.PinCheck;
+import com.owncloud.android.utils.DisplayUtils;
 
 public class PinCodeActivity extends SherlockFragmentActivity {
 
@@ -369,9 +369,11 @@ public class PinCodeActivity extends SherlockFragmentActivity {
                     }
                     
                     if (mPinCodeChecked && 
-                            ( mActivity.equals("FileDisplayActivity") || mActivity.equals("PreviewImageActivity") ) ){
+                       (mActivity.equals("FileDisplayActivity") || mActivity.equals("PreviewImageActivity") || mActivity.equals("ownCloudUploader"))){
+                        PinCheck.setUnlockTimestamp();
                         finish();
                     } else if (mPinCodeChecked){
+                        PinCheck.setUnlockTimestamp();
                         
                         Intent intent = getIntent();
                         String newState = intent.getStringExtra(EXTRA_NEW_STATE);
@@ -486,21 +488,9 @@ public class PinCodeActivity extends SherlockFragmentActivity {
         
         }else {
             Arrays.fill(mTempText, null);
-            AlertDialog aDialog = new AlertDialog.Builder(this).create();
             CharSequence errorSeq = getString(R.string.common_error);
-            aDialog.setTitle(errorSeq);
-            CharSequence cseq = getString(R.string.pincode_wrong);
-            aDialog.setMessage(cseq);
-            CharSequence okSeq = getString(R.string.common_ok);
-            aDialog.setButton(okSeq, new DialogInterface.OnClickListener(){
-
-                @Override
-                public void onClick(DialogInterface dialog, int which) {
-                   return; 
-                }
-                
-            });
-            aDialog.show();
+            Toast.makeText(this, errorSeq, Toast.LENGTH_LONG).show();
+            
             clearBoxes(); 
             mPinHdr.setText(R.string.pincode_enter_pin_code);
             mPinHdrExplanation.setVisibility(View.INVISIBLE);
@@ -530,23 +520,10 @@ public class PinCodeActivity extends SherlockFragmentActivity {
             savePincodeAndExit();
             
         } else {
-            
             Arrays.fill(mTempText, null);
-            AlertDialog aDialog = new AlertDialog.Builder(this).create();
-            CharSequence errorSeq = getString(R.string.common_error);
-            aDialog.setTitle(errorSeq);
             CharSequence cseq = getString(R.string.pincode_mismatch);
-            aDialog.setMessage(cseq);
-            CharSequence okSeq = getString(R.string.common_ok);
-            aDialog.setButton(okSeq, new DialogInterface.OnClickListener(){
-
-                @Override
-                public void onClick(DialogInterface dialog, int which) {
-                   return; 
-                }
-                
-            });
-            aDialog.show();
+            Toast.makeText(this, cseq, Toast.LENGTH_LONG).show();
+            
             mPinHdr.setText(R.string.pincode_configure_your_pin);
             mPinHdrExplanation.setVisibility(View.VISIBLE);
             clearBoxes();
@@ -556,32 +533,15 @@ public class PinCodeActivity extends SherlockFragmentActivity {
    
     
     protected void pinCodeEnd(boolean state){
-        AlertDialog aDialog = new AlertDialog.Builder(this).create();
-        
+        CharSequence cseq;
         if (state){
-            CharSequence saveSeq = getString(R.string.common_save_exit);
-            aDialog.setTitle(saveSeq);
-            CharSequence cseq = getString(R.string.pincode_stored);
-            aDialog.setMessage(cseq);
-            
+           cseq = getString(R.string.pincode_stored);
         }else{
-            CharSequence saveSeq = getString(R.string.common_save_exit);
-            aDialog.setTitle(saveSeq);
-            CharSequence cseq = getString(R.string.pincode_removed);
-            aDialog.setMessage(cseq);
-            
+             cseq = getString(R.string.pincode_removed);
         }
-        CharSequence okSeq = getString(R.string.common_ok);
-        aDialog.setButton(okSeq, new DialogInterface.OnClickListener(){
-
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                finish();
-                return; 
-            }
-            
-        });
-        aDialog.show(); 
+        
+        Toast.makeText(this, cseq, Toast.LENGTH_LONG).show();
+        finish();
     }
     
     protected void savePincodeAndExit(){
@@ -596,14 +556,10 @@ public class PinCodeActivity extends SherlockFragmentActivity {
         appPrefs.commit();
         
         pinCodeEnd(true);
-        
-        
-        
     }
     
     
     protected void clearBoxes(){
-        
         mText1.setText("");
         mText2.setText("");
         mText3.setText("");
@@ -615,7 +571,6 @@ 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")){
                 SharedPreferences.Editor appPrefsE = PreferenceManager
             
@@ -631,14 +586,7 @@ public class PinCodeActivity extends SherlockFragmentActivity {
                 finish();
             }
             return true; 
-            
         }
-        
         return super.onKeyDown(keyCode, event);
-    }
-    
-   
-
-    
-            
+    }     
 }
index 70ca9de..ef9e39a 100644 (file)
@@ -58,6 +58,7 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.authentication.PinCheck;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.db.DbHandler;
@@ -69,8 +70,6 @@ import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.RadioButtonPreference;
 import com.owncloud.android.utils.DisplayUtils;
 
-import java.io.File;
-
 
 /**
  * An Activity that allows the user to change the application's settings.
@@ -398,6 +397,8 @@ public class Preferences extends SherlockPreferenceActivity
     @Override
     protected void onPause() {
         super.onPause();
+        
+        PinCheck.setUnlockTimestamp();
     }
 
     @Override
index 9dc0fbf..d36e1cb 100644 (file)
@@ -64,6 +64,8 @@ import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountAuthenticator;
+import com.owncloud.android.authentication.PinCheck;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
@@ -116,6 +118,13 @@ 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());
 
index 1f6ab80..be48633 100644 (file)
@@ -26,13 +26,11 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
-import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
-import android.preference.PreferenceManager;
 import android.support.v4.view.ViewPager;
 import android.view.View;
 
@@ -40,8 +38,10 @@ import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.view.MenuItem;
 import com.actionbarsherlock.view.Window;
 import com.ortiz.touch.ExtendedViewPager;
+import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.authentication.PinCheck;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
@@ -90,6 +90,8 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
     
     private View mFullScreenAnchorView;
     
+    private Boolean mUnlocked = false;
+    
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -104,8 +106,10 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
         actionBar.hide();
         
         // PIN CODE request
-        if (getIntent().getExtras() != null && savedInstanceState == null && fromNotification()) {
-            requestPinCode();
+        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
@@ -323,6 +327,13 @@ 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();
         
@@ -339,8 +350,12 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
     
     @Override
     public void onPause() {
-        unregisterReceiver(mDownloadFinishReceiver);
-        mDownloadFinishReceiver = null;
+        if (mDownloadFinishReceiver != null){
+            unregisterReceiver(mDownloadFinishReceiver);
+            mDownloadFinishReceiver = null;
+        }
+        
+        PinCheck.setUnlockTimestamp();
         super.onPause();
     }
     
@@ -527,21 +542,6 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
             }
         }
     }
-    
-    
-    /**
-     * Launch an intent to request the PIN code to the user before letting him use the app
-     */
-    private void requestPinCode() {
-        boolean pinStart = false;
-        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-        pinStart = appPrefs.getBoolean("set_pincode", false);
-        if (pinStart) {
-            Intent i = new Intent(getApplicationContext(), PinCodeActivity.class);
-            i.putExtra(PinCodeActivity.EXTRA_ACTIVITY, "PreviewImageActivity");
-            startActivity(i);
-        }
-    }
 
     @Override
     public void onBrowsedDownTo(OCFile folder) {
@@ -588,5 +588,4 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener {
         }
         return false;
     }
-
 }