|
@@ -76,6 +76,7 @@ import com.owncloud.android.utils.MimeTypeUtil;
|
|
|
import com.owncloud.android.utils.ThemeUtils;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
|
|
|
|
* An Activity that allows the user to change the application's settings.
|
|
@@ -87,7 +88,11 @@ public class Preferences extends PreferenceActivity
|
|
|
|
|
|
private static final String TAG = Preferences.class.getSimpleName();
|
|
|
|
|
|
- public final static String PREFERENCE_USE_DEVICE_CREDENTIALS= "use_device_credentials";
|
|
|
+ public static final String PREFERENCE_LOCK= "lock";
|
|
|
+
|
|
|
+ public static final String LOCK_NONE = "none";
|
|
|
+ public static final String LOCK_PASSCODE = "passcode";
|
|
|
+ public static final String LOCK_DEVICE_CREDENTIALS = "device_credentials";
|
|
|
|
|
|
public static final String PREFERENCE_EXPERT_MODE = "expert_mode";
|
|
|
|
|
@@ -106,13 +111,14 @@ public class Preferences extends PreferenceActivity
|
|
|
*/
|
|
|
private Uri mUri;
|
|
|
|
|
|
- private SwitchPreference pCode;
|
|
|
+ private ListPreference mLock;
|
|
|
private SwitchPreference mShowHiddenFiles;
|
|
|
private SwitchPreference mExpertMode;
|
|
|
private AppCompatDelegate mDelegate;
|
|
|
|
|
|
private ListPreference mPrefStoragePath;
|
|
|
private String mStoragePath;
|
|
|
+ private String pendingLock;
|
|
|
|
|
|
public static class PreferenceKeys {
|
|
|
public static final String STORAGE_PATH = "storage_path";
|
|
@@ -509,9 +515,7 @@ public class Preferences extends PreferenceActivity
|
|
|
boolean fShowHiddenFilesEnabled = getResources().getBoolean(R.bool.show_hidden_files_enabled);
|
|
|
boolean fSyncedFolderLightEnabled = getResources().getBoolean(R.bool.syncedFolder_light);
|
|
|
|
|
|
- setupPasscodePreference(preferenceCategoryDetails, fPassCodeEnabled);
|
|
|
-
|
|
|
- setupDeviceCredentialsPreference(preferenceCategoryDetails, fDeviceCredentialsEnabled);
|
|
|
+ setupLockPreference(preferenceCategoryDetails, fPassCodeEnabled, fDeviceCredentialsEnabled);
|
|
|
|
|
|
setupHiddenFilesPreference(preferenceCategoryDetails, fShowHiddenFilesEnabled);
|
|
|
|
|
@@ -574,64 +578,56 @@ public class Preferences extends PreferenceActivity
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void setupDeviceCredentialsPreference(PreferenceCategory preferenceCategoryDetails,
|
|
|
- boolean deviceCredentialsEnabled) {
|
|
|
- SwitchPreference useDeviceCredentials = (SwitchPreference) findPreference(PREFERENCE_USE_DEVICE_CREDENTIALS);
|
|
|
-
|
|
|
- final Activity activity = this;
|
|
|
-
|
|
|
- if (useDeviceCredentials != null && deviceCredentialsEnabled && Build.VERSION.SDK_INT >=
|
|
|
- Build.VERSION_CODES.M) {
|
|
|
- useDeviceCredentials.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
|
+ private void setupLockPreference(PreferenceCategory preferenceCategoryDetails,
|
|
|
+ boolean passCodeEnabled,
|
|
|
+ boolean deviceCredentialsEnabled) {
|
|
|
+ mLock = (ListPreference) findPreference(PREFERENCE_LOCK);
|
|
|
+ if (mLock != null && (passCodeEnabled || deviceCredentialsEnabled)) {
|
|
|
+ ArrayList<String> lockEntries = new ArrayList<>(3);
|
|
|
+ lockEntries.add(getString(R.string.prefs_lock_none));
|
|
|
+ lockEntries.add(getString(R.string.prefs_lock_using_passcode));
|
|
|
+ lockEntries.add(getString(R.string.prefs_lock_using_device_credentials));
|
|
|
+
|
|
|
+ ArrayList<String> lockValues = new ArrayList<>(3);
|
|
|
+ lockValues.add(LOCK_NONE);
|
|
|
+ lockValues.add(LOCK_PASSCODE);
|
|
|
+ lockValues.add(LOCK_DEVICE_CREDENTIALS);
|
|
|
+
|
|
|
+ if (!passCodeEnabled) {
|
|
|
+ lockEntries.remove(1);
|
|
|
+ lockValues.remove(1);
|
|
|
+ } else if (!deviceCredentialsEnabled || Build.VERSION.SDK_INT <
|
|
|
+ Build.VERSION_CODES.M) {
|
|
|
+ lockEntries.remove(2);
|
|
|
+ lockValues.remove(2);
|
|
|
+ }
|
|
|
+ String[] lockEntriesArr = new String[lockEntries.size()];
|
|
|
+ lockEntriesArr = lockEntries.toArray(lockEntriesArr);
|
|
|
+ String[] lockValuesArr = new String[lockValues.size()];
|
|
|
+ lockValuesArr = lockValues.toArray(lockValuesArr);
|
|
|
+
|
|
|
+ mLock.setEntries(lockEntriesArr);
|
|
|
+ mLock.setEntryValues(lockValuesArr);
|
|
|
+ mLock.setSummary(mLock.getEntry());
|
|
|
+ mLock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
|
@Override
|
|
|
- public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
- Boolean incoming = (Boolean) newValue;
|
|
|
- if (incoming) {
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
|
|
|
- !DeviceCredentialUtils.areCredentialsAvailable(getApplicationContext())) {
|
|
|
- DisplayUtils
|
|
|
- .showSnackMessage(activity, R.string.prefs_device_credentials_not_setup);
|
|
|
- return false;
|
|
|
+ public boolean onPreferenceChange(Preference preference, Object o) {
|
|
|
+ pendingLock = LOCK_NONE;
|
|
|
+ String oldValue = ((ListPreference) preference).getValue();
|
|
|
+ String newValue = (String) o;
|
|
|
+ if (!oldValue.equals(newValue)) {
|
|
|
+ if (oldValue.equals(LOCK_NONE)) {
|
|
|
+ enableLock(newValue);
|
|
|
+ } else {
|
|
|
+ pendingLock = newValue;
|
|
|
+ disableLock(oldValue);
|
|
|
}
|
|
|
- SharedPreferences appPrefs = PreferenceManager
|
|
|
- .getDefaultSharedPreferences(getApplicationContext());
|
|
|
- appPrefs.edit().putBoolean(PREFERENCE_USE_DEVICE_CREDENTIALS, true).apply();
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- Intent i = new Intent(getApplicationContext(), RequestCredentialsActivity.class);
|
|
|
- startActivityForResult(i, ACTION_CONFIRM_DEVICE_CREDENTIALS);
|
|
|
- return false;
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- preferenceCategoryDetails.removePreference(useDeviceCredentials);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void setupPasscodePreference(PreferenceCategory preferenceCategoryDetails, boolean fPassCodeEnabled) {
|
|
|
- pCode = (SwitchPreference) findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE);
|
|
|
- if (pCode != null && fPassCodeEnabled) {
|
|
|
- pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
|
- @Override
|
|
|
- public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
- Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
|
|
|
- Boolean incoming = (Boolean) newValue;
|
|
|
-
|
|
|
- i.setAction(
|
|
|
- incoming ? PassCodeActivity.ACTION_REQUEST_WITH_RESULT :
|
|
|
- PassCodeActivity.ACTION_CHECK_WITH_RESULT
|
|
|
- );
|
|
|
-
|
|
|
- startActivityForResult(i, incoming ? ACTION_REQUEST_PASSCODE :
|
|
|
- ACTION_CONFIRM_PASSCODE);
|
|
|
-
|
|
|
-
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
- preferenceCategoryDetails.removePreference(pCode);
|
|
|
+ preferenceCategoryDetails.removePreference(mLock);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -683,6 +679,35 @@ public class Preferences extends PreferenceActivity
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void enableLock(String lock) {
|
|
|
+ pendingLock = LOCK_NONE;
|
|
|
+ if (lock.equals(LOCK_PASSCODE)) {
|
|
|
+ Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
|
|
|
+ i.setAction(PassCodeActivity.ACTION_REQUEST_WITH_RESULT);
|
|
|
+ startActivityForResult(i, ACTION_REQUEST_PASSCODE);
|
|
|
+ } else if (lock.equals(LOCK_DEVICE_CREDENTIALS)){
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
|
|
|
+ !DeviceCredentialUtils.areCredentialsAvailable(getApplicationContext())) {
|
|
|
+ DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_not_setup);
|
|
|
+ } else {
|
|
|
+ DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_enabled);
|
|
|
+ mLock.setValue(LOCK_DEVICE_CREDENTIALS);
|
|
|
+ mLock.setSummary(mLock.getEntry());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void disableLock(String lock) {
|
|
|
+ if (lock.equals(LOCK_PASSCODE)) {
|
|
|
+ Intent i = new Intent(getApplicationContext(), PassCodeActivity.class);
|
|
|
+ i.setAction(PassCodeActivity.ACTION_CHECK_WITH_RESULT);
|
|
|
+ startActivityForResult(i, ACTION_CONFIRM_PASSCODE);
|
|
|
+ } else if (lock.equals(LOCK_DEVICE_CREDENTIALS)) {
|
|
|
+ Intent i = new Intent(getApplicationContext(), RequestCredentialsActivity.class);
|
|
|
+ startActivityForResult(i, ACTION_CONFIRM_DEVICE_CREDENTIALS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void setupGeneralCategory(int accentColor) {
|
|
|
PreferenceCategory preferenceCategoryGeneral = (PreferenceCategory) findPreference("general");
|
|
|
preferenceCategoryGeneral.setTitle(ThemeUtils.getColoredTitle(getString(R.string.prefs_category_general),
|
|
@@ -816,14 +841,7 @@ public class Preferences extends PreferenceActivity
|
|
|
t.start();
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- protected void onResume() {
|
|
|
- super.onResume();
|
|
|
|
|
|
- SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
|
|
- boolean state = appPrefs.getBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
|
|
|
- pCode.setChecked(state);
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
@@ -844,32 +862,32 @@ public class Preferences extends PreferenceActivity
|
|
|
for (int i = 1; i <= 4; ++i) {
|
|
|
appPrefs.putString(PassCodeActivity.PREFERENCE_PASSCODE_D + i, passcode.substring(i - 1, i));
|
|
|
}
|
|
|
- appPrefs.putBoolean(PassCodeActivity.PREFERENCE_SET_PASSCODE, true);
|
|
|
appPrefs.apply();
|
|
|
+ mLock.setValue(LOCK_PASSCODE);
|
|
|
+ mLock.setSummary(mLock.getEntry());
|
|
|
DisplayUtils.showSnackMessage(this, R.string.pass_code_stored);
|
|
|
}
|
|
|
} 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(PassCodeActivity.PREFERENCE_SET_PASSCODE, false);
|
|
|
- appPrefs.apply();
|
|
|
+ mLock.setValue(LOCK_NONE);
|
|
|
+ mLock.setSummary(mLock.getEntry());
|
|
|
|
|
|
DisplayUtils.showSnackMessage(this, R.string.pass_code_removed);
|
|
|
+ if (!pendingLock.equals(LOCK_NONE)) {
|
|
|
+ enableLock(pendingLock);
|
|
|
+ }
|
|
|
}
|
|
|
} else if (requestCode == ACTION_REQUEST_CODE_DAVDROID_SETUP && resultCode == RESULT_OK) {
|
|
|
DisplayUtils.showSnackMessage(this, R.string.prefs_calendar_contacts_sync_setup_successful);
|
|
|
} else if (requestCode == ACTION_CONFIRM_DEVICE_CREDENTIALS && resultCode == RESULT_OK &&
|
|
|
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
|
|
|
data.getBooleanExtra(RequestCredentialsActivity.KEY_CHECK_RESULT, false)) {
|
|
|
- SharedPreferences.Editor appPrefs = PreferenceManager
|
|
|
- .getDefaultSharedPreferences(getApplicationContext()).edit();
|
|
|
- appPrefs.putBoolean(PREFERENCE_USE_DEVICE_CREDENTIALS, false).apply();
|
|
|
- SwitchPreference useDeviceCredentials = (SwitchPreference)
|
|
|
- findPreference(PREFERENCE_USE_DEVICE_CREDENTIALS);
|
|
|
- useDeviceCredentials.setChecked(false);
|
|
|
+ mLock.setValue(LOCK_NONE);
|
|
|
+ mLock.setSummary(mLock.getEntry());
|
|
|
DisplayUtils.showSnackMessage(this, R.string.credentials_disabled);
|
|
|
+ if (!pendingLock.equals(LOCK_NONE)) {
|
|
|
+ enableLock(pendingLock);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|