From: Bartosz Przybylski Date: Wed, 11 Nov 2015 22:01:39 +0000 (+0100) Subject: Don't allow to remove passcode without entering it. Don't allow to set incomplete... X-Git-Tag: beta-20151122~7^2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/bb7e95739a7ef1cacc7bb3b7d937d6e5c977362f?hp=--cc Don't allow to remove passcode without entering it. Don't allow to set incomplete passcode, --- bb7e95739a7ef1cacc7bb3b7d937d6e5c977362f 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 16974394..135fe041 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 e1c5c10d..fcee70e5 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -62,6 +62,7 @@ import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; +import android.widget.Toast; import com.owncloud.android.BuildConfig; import com.owncloud.android.MainApp; @@ -93,6 +94,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 DbHandler mDbHandler; private CheckBoxPreference pCode; @@ -117,6 +120,7 @@ public class Preferences extends PreferenceActivity protected FileUploader.FileUploaderBinder mUploaderBinder = null; private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null; + @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { @@ -219,24 +223,30 @@ 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; } - }); + }); } + + PreferenceCategory preferenceCategory = (PreferenceCategory) findPreference("more"); boolean helpEnabled = getResources().getBoolean(R.bool.help_enabled); @@ -579,6 +589,29 @@ public class Preferences extends PreferenceActivity mPrefInstantVideoUploadPath.setSummary(mUploadVideoPath); saveInstantUploadVideoPathOnPreferences(); + } 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(); + } } }