mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
preserve state in KeySpinner, and some lint fixes
This commit is contained in:
parent
6c17734e73
commit
fed0e7db8d
@ -58,7 +58,7 @@ public class AccountSettingsFragment extends Fragment {
|
||||
this.mAccSettings = accountSettings;
|
||||
|
||||
mAccNameView.setText(accountSettings.getAccountName());
|
||||
mSelectKeySpinner.setSelectedKeyId(accountSettings.getKeyId());
|
||||
mSelectKeySpinner.setPreSelectedKeyId(accountSettings.getKeyId());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -107,7 +107,7 @@ public class AccountSettingsFragment extends Fragment {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null && data.hasExtra(OperationResult.EXTRA_RESULT)) {
|
||||
EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT);
|
||||
mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId);
|
||||
mSelectKeySpinner.setPreSelectedKeyId(result.mMasterKeyId);
|
||||
} else {
|
||||
Log.e(Constants.TAG, "missing result!");
|
||||
}
|
||||
|
@ -60,7 +60,6 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationFragment;
|
||||
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
|
||||
import org.sufficientlysecure.keychain.ui.widget.KeySpinner;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
|
||||
@ -113,7 +112,7 @@ public class CertifyKeyFragment extends CryptoOperationFragment
|
||||
try {
|
||||
CachedPublicKeyRing key = (new ProviderHelper(getActivity())).getCachedPublicKeyRing(certifyKeyId);
|
||||
if (key.canCertify()) {
|
||||
mCertifyKeySpinner.setSelectedKeyId(certifyKeyId);
|
||||
mCertifyKeySpinner.setPreSelectedKeyId(certifyKeyId);
|
||||
}
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
Log.e(Constants.TAG, "certify certify check failed", e);
|
||||
|
@ -84,12 +84,17 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mProviderHelper = new ProviderHelper(getActivity());
|
||||
|
||||
// preselect keys given
|
||||
long signatureKeyId = getArguments().getLong(ARG_SINGATURE_KEY_ID);
|
||||
long[] encryptionKeyIds = getArguments().getLongArray(ARG_ENCRYPTION_KEY_IDS);
|
||||
// preselect keys given, from state or arguments
|
||||
long signatureKeyId, encryptionKeyIds[];
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
signatureKeyId = getArguments().getLong(ARG_SINGATURE_KEY_ID);
|
||||
encryptionKeyIds = getArguments().getLongArray(ARG_ENCRYPTION_KEY_IDS);
|
||||
preselectKeys(signatureKeyId, encryptionKeyIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* If an Intent gives a signatureMasterKeyId and/or encryptionMasterKeyIds, preselect those!
|
||||
*/
|
||||
@ -99,7 +104,7 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
|
||||
CachedPublicKeyRing keyring = mProviderHelper.getCachedPublicKeyRing(
|
||||
KeyRings.buildUnifiedKeyRingUri(signatureKeyId));
|
||||
if (keyring.hasAnySecret()) {
|
||||
mSignKeySpinner.setSelectedKeyId(signatureKeyId);
|
||||
mSignKeySpinner.setPreSelectedKeyId(signatureKeyId);
|
||||
}
|
||||
} catch (PgpKeyNotFoundException e) {
|
||||
Log.e(Constants.TAG, "key not found!", e);
|
||||
|
@ -98,7 +98,7 @@ public class CertifyKeySpinner extends KeySpinner {
|
||||
// - there are actually keys (not just "none" entry)
|
||||
// Then:
|
||||
// - select key that is capable of certifying, but only if there is only one key capable of it
|
||||
if (mSelectedKeyId == Constants.key.none && mAdapter.getCount() > 1) {
|
||||
if (mPreSelectedKeyId == Constants.key.none && mAdapter.getCount() > 1) {
|
||||
// preselect if key can certify
|
||||
int selection = -1;
|
||||
while (data.moveToNext()) {
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package org.sufficientlysecure.keychain.ui.widget;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Color;
|
||||
@ -52,13 +53,13 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
LoaderManager.LoaderCallbacks<Cursor> {
|
||||
|
||||
public static final String ARG_SUPER_STATE = "super_state";
|
||||
public static final String ARG_SELECTED_KEY_ID = "select_key_id";
|
||||
public static final String ARG_KEY_ID = "key_id";
|
||||
|
||||
public interface OnKeyChangedListener {
|
||||
void onKeyChanged(long masterKeyId);
|
||||
}
|
||||
|
||||
protected long mSelectedKeyId = Constants.key.none;
|
||||
protected long mPreSelectedKeyId = Constants.key.none;
|
||||
protected SelectKeyAdapter mAdapter = new SelectKeyAdapter();
|
||||
protected OnKeyChangedListener mListener;
|
||||
|
||||
@ -85,17 +86,15 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
super.setOnItemSelectedListener(new OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
mSelectedKeyId = id;
|
||||
if (mListener != null) {
|
||||
mListener.onKeyChanged(mSelectedKeyId);
|
||||
mListener.onKeyChanged(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
mSelectedKeyId = Constants.key.none;
|
||||
if (mListener != null) {
|
||||
mListener.onKeyChanged(mSelectedKeyId);
|
||||
mListener.onKeyChanged(Constants.key.none);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -139,11 +138,11 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
}
|
||||
|
||||
public long getSelectedKeyId() {
|
||||
return mSelectedKeyId;
|
||||
return getSelectedItemId();
|
||||
}
|
||||
|
||||
public void setSelectedKeyId(long selectedKeyId) {
|
||||
mSelectedKeyId = selectedKeyId;
|
||||
public void setPreSelectedKeyId(long selectedKeyId) {
|
||||
mPreSelectedKeyId = selectedKeyId;
|
||||
}
|
||||
|
||||
protected class SelectKeyAdapter extends BaseAdapter implements SpinnerAdapter {
|
||||
@ -232,10 +231,10 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
mIndexMasterKeyId = newCursor.getColumnIndex(KeychainContract.KeyRings.MASTER_KEY_ID);
|
||||
mIndexCreationDate = newCursor.getColumnIndex(KeychainContract.KeyRings.CREATION);
|
||||
|
||||
// pre-select key if mSelectedKeyId is given
|
||||
if (mSelectedKeyId != Constants.key.none && newCursor.moveToFirst()) {
|
||||
// pre-select key if mPreSelectedKeyId is given
|
||||
if (mPreSelectedKeyId != Constants.key.none && newCursor.moveToFirst()) {
|
||||
do {
|
||||
if (newCursor.getLong(mIndexMasterKeyId) == mSelectedKeyId) {
|
||||
if (newCursor.getLong(mIndexMasterKeyId) == mPreSelectedKeyId) {
|
||||
setSelection(newCursor.getPosition() + 1);
|
||||
}
|
||||
} while (newCursor.moveToNext());
|
||||
@ -260,6 +259,7 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
return inner.getItemId(position - 1);
|
||||
}
|
||||
|
||||
@SuppressLint("ViewHolder") // inflate call is for the preview only
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
try {
|
||||
@ -304,4 +304,26 @@ public abstract class KeySpinner extends AppCompatSpinner implements
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRestoreInstanceState(Parcelable state) {
|
||||
Bundle bundle = (Bundle) state;
|
||||
|
||||
mPreSelectedKeyId = bundle.getLong(ARG_KEY_ID);
|
||||
|
||||
// restore super state
|
||||
super.onRestoreInstanceState(bundle.getParcelable(ARG_SUPER_STATE));
|
||||
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Parcelable onSaveInstanceState() {
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
// save super state
|
||||
bundle.putParcelable(ARG_SUPER_STATE, super.onSaveInstanceState());
|
||||
|
||||
bundle.putLong(ARG_KEY_ID, getSelectedKeyId());
|
||||
return bundle;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user