From: tobiasKaminsky Date: Fri, 20 Nov 2015 17:51:37 +0000 (+0100) Subject: Merge remote-tracking branch 'remotes/upstream/bug_1251' into beta X-Git-Tag: beta-20151122~7 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/5780aca37f2c8d74058b57be6e7f7b3024c26132?hp=8a9983f7311a6bf46dadd7dc73265db240fa8682 Merge remote-tracking branch 'remotes/upstream/bug_1251' into beta --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 050ec9ea..97ea0e30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 2015-11-20 +- PR [#1293] (https://github.com/owncloud/android/pull/1293) "External SD by przybylski" merged +- PR [#1296] (https://github.com/owncloud/android/pull/1296) "Don't allow to remove passcode without entering it. Don't allow to set incomplete passcode by przybylski" merged + # 2015-11-18 - update all PR - fix #1259 diff --git a/src/com/owncloud/android/authentication/PassCodeManager.java b/src/com/owncloud/android/authentication/PassCodeManager.java index e60233df..5fcccba6 100644 --- a/src/com/owncloud/android/authentication/PassCodeManager.java +++ b/src/com/owncloud/android/authentication/PassCodeManager.java @@ -74,7 +74,7 @@ public class PassCodeManager { ){ Intent i = new Intent(MainApp.getAppContext(), PassCodeActivity.class); - i.setAction(PassCodeActivity.ACTION_REQUEST); + i.setAction(PassCodeActivity.ACTION_CHECK); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); activity.startActivity(i); diff --git a/src/com/owncloud/android/ui/activity/PassCodeActivity.java b/src/com/owncloud/android/ui/activity/PassCodeActivity.java index cc4170fe..d06306ba 100644 --- a/src/com/owncloud/android/ui/activity/PassCodeActivity.java +++ b/src/com/owncloud/android/ui/activity/PassCodeActivity.java @@ -24,6 +24,7 @@ package com.owncloud.android.ui.activity; import java.util.Arrays; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -45,18 +46,18 @@ public class PassCodeActivity extends AppCompatActivity { private static final String TAG = PassCodeActivity.class.getSimpleName(); - public final static String ACTION_ENABLE = PassCodeActivity.class.getCanonicalName() + - ".ENABLE"; - public final static String ACTION_DISABLE = PassCodeActivity.class.getCanonicalName() + - ".DISABLE"; - public final static String ACTION_REQUEST = PassCodeActivity.class.getCanonicalName() + - ".REQUEST"; + public final static String ACTION_REQUEST_WITH_RESULT = "ACTION_REQUEST_WITH_RESULT"; + public final static String ACTION_CHECK_WITH_RESULT = "ACTION_CHECK_WITH_RESULT"; + public final static String ACTION_CHECK = "ACTION_CHECK"; + + public final static String KEY_PASSCODE = "KEY_PASSCODE"; + public final static String KEY_CHECK_RESULT = "KEY_CHECK_RESULT"; private Button mBCancel; private TextView mPassCodeHdr; private TextView mPassCodeHdrExplanation; private EditText[] mPassCodeEditTexts = new EditText[4]; - + private String [] mPassCodeDigits = {"","","",""}; private static String KEY_PASSCODE_DIGITS = "PASSCODE_DIGITS"; private boolean mConfirmingPassCode = false; @@ -88,13 +89,13 @@ public class PassCodeActivity extends AppCompatActivity { mPassCodeEditTexts[2] = (EditText) findViewById(R.id.txt2); mPassCodeEditTexts[3] = (EditText) findViewById(R.id.txt3); - if (ACTION_REQUEST.equals(getIntent().getAction())) { + if (ACTION_CHECK.equals(getIntent().getAction())) { /// this is a pass code request; the user has to input the right value mPassCodeHdr.setText(R.string.pass_code_enter_pass_code); mPassCodeHdrExplanation.setVisibility(View.INVISIBLE); setCancelButtonEnabled(false); // no option to cancel - } else if (ACTION_ENABLE.equals(getIntent().getAction())) { + } else if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction())) { if (savedInstanceState != null) { mConfirmingPassCode = savedInstanceState.getBoolean(PassCodeActivity.KEY_CONFIRMING_PASSCODE); mPassCodeDigits = savedInstanceState.getStringArray(PassCodeActivity.KEY_PASSCODE_DIGITS); @@ -112,7 +113,7 @@ public class PassCodeActivity extends AppCompatActivity { setCancelButtonEnabled(true); } - } else if (ACTION_DISABLE.equals(getIntent().getAction())) { + } else if (ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) { /// pass code preference has just been disabled in Preferences; // will confirm user knows pass code, then remove it mPassCodeHdr.setText(R.string.pass_code_remove_your_pass_code); @@ -284,7 +285,7 @@ public class PassCodeActivity extends AppCompatActivity { * the previously typed pass code, if any. */ private void processFullPassCode() { - if (ACTION_REQUEST.equals(getIntent().getAction())) { + if (ACTION_CHECK.equals(getIntent().getAction())) { if (checkPassCode()) { /// pass code accepted in request, user is allowed to access the app finish(); @@ -294,24 +295,20 @@ public class PassCodeActivity extends AppCompatActivity { View.INVISIBLE); } - } else if (ACTION_DISABLE.equals(getIntent().getAction())) { + } else if (ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) { if (checkPassCode()) { - /// pass code accepted when disabling, pass code is removed - SharedPreferences.Editor appPrefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()).edit(); - appPrefs.putBoolean("set_pincode", false); // TODO remove; this should be - // unnecessary, was done before entering in the activity - appPrefs.commit(); - - Toast.makeText(PassCodeActivity.this, R.string.pass_code_removed, Toast.LENGTH_LONG).show(); - finish(); + Intent resultIntent = new Intent(); + resultIntent.putExtra(KEY_CHECK_RESULT, true); + setResult(RESULT_OK, resultIntent); + + finish(); } else { showErrorAndRestart(R.string.pass_code_wrong, R.string.pass_code_enter_pass_code, View.INVISIBLE); } - } else if (ACTION_ENABLE.equals(getIntent().getAction())) { + } else if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction())) { /// enabling pass code if (!mConfirmingPassCode) { requestPassCodeConfirmation(); @@ -403,7 +400,7 @@ public class PassCodeActivity extends AppCompatActivity { /** * Overrides click on the BACK arrow to correctly cancel ACTION_ENABLE or ACTION_DISABLE, while - * preventing than ACTION_REQUEST may be worked around. + * preventing than ACTION_CHECK may be worked around. * * @param keyCode Key code of the key that triggered the down event. * @param event Event triggered. @@ -412,8 +409,8 @@ public class PassCodeActivity extends AppCompatActivity { @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()== 0){ - if (ACTION_ENABLE.equals(getIntent().getAction()) || - ACTION_DISABLE.equals(getIntent().getAction())) { + if (ACTION_REQUEST_WITH_RESULT.equals(getIntent().getAction()) || + ACTION_CHECK_WITH_RESULT.equals(getIntent().getAction())) { revertActionAndExit(); } return true; @@ -427,16 +424,12 @@ public class PassCodeActivity extends AppCompatActivity { protected void savePassCodeAndExit() { SharedPreferences.Editor appPrefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()).edit(); - - appPrefs.putString("PrefPinCode1", mPassCodeDigits[0]); - appPrefs.putString("PrefPinCode2", mPassCodeDigits[1]); - appPrefs.putString("PrefPinCode3", mPassCodeDigits[2]); - appPrefs.putString("PrefPinCode4", mPassCodeDigits[3]); - appPrefs.putBoolean("set_pincode", true); /// TODO remove; unnecessary, - // Preferences did it before entering here - appPrefs.commit(); - - Toast.makeText(this, R.string.pass_code_stored, Toast.LENGTH_LONG).show(); + + Intent resultIntent = new Intent(); + resultIntent.putExtra(KEY_PASSCODE, + mPassCodeDigits[0] + mPassCodeDigits[1] + mPassCodeDigits[2] + mPassCodeDigits[3]); + + setResult(RESULT_OK, resultIntent); finish(); } @@ -467,7 +460,6 @@ public class PassCodeActivity extends AppCompatActivity { outState.putStringArray(PassCodeActivity.KEY_PASSCODE_DIGITS, mPassCodeDigits); } - private class PassCodeDigitTextWatcher implements TextWatcher { private int mIndex = -1; diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index 6d677cd3..863a0e4b 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -106,6 +106,8 @@ public class Preferences extends PreferenceActivity private static final int ACTION_SELECT_UPLOAD_PATH = 1; private static final int ACTION_SELECT_UPLOAD_VIDEO_PATH = 2; + private static final int ACTION_REQUEST_PASSCODE = 5; + private static final int ACTION_CONFIRM_PASSCODE = 6; private static final int ACTION_SELECT_STORAGE_PATH = 3; private static final int ACTION_PERFORM_MIGRATION = 4; @@ -134,6 +136,7 @@ public class Preferences extends PreferenceActivity private PreferenceWithLongSummary mPrefStoragePath; private String mStoragePath; + @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { @@ -236,21 +239,25 @@ public class Preferences extends PreferenceActivity registerForContextMenu(getListView()); pCode = (CheckBoxPreference) findPreference("set_pincode"); - if (pCode != null){ + if (pCode != null) { pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Intent i = new Intent(getApplicationContext(), PassCodeActivity.class); - Boolean enable = (Boolean) newValue; + Boolean incoming = (Boolean) newValue; + i.setAction( - enable.booleanValue() ? PassCodeActivity.ACTION_ENABLE : - PassCodeActivity.ACTION_DISABLE + incoming.booleanValue() ? PassCodeActivity.ACTION_REQUEST_WITH_RESULT : + PassCodeActivity.ACTION_CHECK_WITH_RESULT ); - startActivity(i); - - return true; + + startActivityForResult(i, incoming.booleanValue() ? ACTION_REQUEST_PASSCODE : + ACTION_CONFIRM_PASSCODE); + + // Don't update just yet, we will decide on it in onActivityResult + return false; } - }); + }); } @@ -720,6 +727,29 @@ public class Preferences extends PreferenceActivity } else if (requestCode == ACTION_PERFORM_MIGRATION && resultCode == RESULT_OK) { String resultStorageDir = data.getStringExtra(StorageMigrationActivity.KEY_MIGRATION_TARGET_DIR); saveStoragePath(resultStorageDir); + } else if (requestCode == ACTION_REQUEST_PASSCODE && resultCode == RESULT_OK) { + String passcode = data.getStringExtra(PassCodeActivity.KEY_PASSCODE); + if (passcode != null && passcode.length() == 4) { + SharedPreferences.Editor appPrefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()).edit(); + + for (int i = 1; i <= 4; ++i) { + appPrefs.putString("PrefPinCode" + i, passcode.substring(i-1, i)); + } + appPrefs.putBoolean("set_pincode", true); + appPrefs.commit(); + Toast.makeText(this, R.string.pass_code_stored, Toast.LENGTH_LONG).show(); + } + } else if (requestCode == ACTION_CONFIRM_PASSCODE && resultCode == RESULT_OK) { + if (data.getBooleanExtra(PassCodeActivity.KEY_CHECK_RESULT, false)) { + + SharedPreferences.Editor appPrefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()).edit(); + appPrefs.putBoolean("set_pincode", false); + appPrefs.commit(); + + Toast.makeText(this, R.string.pass_code_removed, Toast.LENGTH_LONG).show(); + } } }