mirror of
https://github.com/nextcloud/android.git
synced 2024-11-23 05:35:39 +03:00
Merge pull request #1296 from owncloud/bug_1251
Don't allow to remove passcode without entering it, nor set it incomplete
This commit is contained in:
commit
831de4534e
3 changed files with 68 additions and 43 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
|
@ -118,6 +121,7 @@ public class Preferences extends PreferenceActivity
|
|||
protected FileUploader.FileUploaderBinder mUploaderBinder = null;
|
||||
private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null;
|
||||
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -220,24 +224,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);
|
||||
|
@ -599,6 +609,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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue