From: David A. Velasco Date: Tue, 28 Apr 2015 12:20:17 +0000 (+0200) Subject: Merge branch 'develop' into pinEnhancement X-Git-Tag: test~19^2~18 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/802a1646160051a507853ef09e680139833fb142?hp=3489fa1ccb3bdea8b86960be6e267d58d62b0ddd Merge branch 'develop' into pinEnhancement 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 --- diff --git a/res/values/strings.xml b/res/values/strings.xml index abf48d39..71a40b5b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -24,8 +24,7 @@ More Accounts Manage Accounts - App PIN - Protect your client + Passcode lock Instant picture uploads Instantly upload pictures taken by camera Instant video uploads diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index ac369847..18cb398f 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -27,8 +27,7 @@ android:title="@string/prefs_select_oc_account" android:summary="@string/prefs_summary_select_oc_account" / --> - + diff --git a/src/com/owncloud/android/authentication/PinCheck.java b/src/com/owncloud/android/authentication/PinCheck.java new file mode 100644 index 00000000..0f3f4c52 --- /dev/null +++ b/src/com/owncloud/android/authentication/PinCheck.java @@ -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; + } +} diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 83a49024..793f904a 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -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); diff --git a/src/com/owncloud/android/ui/activity/PinCodeActivity.java b/src/com/owncloud/android/ui/activity/PinCodeActivity.java index 76ece933..cdc95782 100644 --- a/src/com/owncloud/android/ui/activity/PinCodeActivity.java +++ b/src/com/owncloud/android/ui/activity/PinCodeActivity.java @@ -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); - } - - - - - + } } diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 70ca9dee..ef9e39a7 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -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 diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index 9dc0fbf9..d36e1cb1 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -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()); diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index 1f6ab809..be486335 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -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; } - }