diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-01-18 18:44:34 +0100 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-01-18 18:44:34 +0100 |
commit | 47e3bd6d6556fde0ba2683d5e2e079eb992d6c7d (patch) | |
tree | 1403a30edfe3b7e3d004452043a5141fa38b9526 /OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui | |
parent | 68042847df39eaad7c150f532bf65d6e1fd9ae10 (diff) | |
download | open-keychain-47e3bd6d6556fde0ba2683d5e2e079eb992d6c7d.tar.gz open-keychain-47e3bd6d6556fde0ba2683d5e2e079eb992d6c7d.tar.bz2 open-keychain-47e3bd6d6556fde0ba2683d5e2e079eb992d6c7d.zip |
Externalize secret key selection into fragment for reuse in different activities
Diffstat (limited to 'OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui')
4 files changed, 154 insertions, 18 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java index 6073e6b80..c3ec7b9c3 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java @@ -119,7 +119,7 @@ public class KeyServerQueryActivity extends SherlockFragmentActivity { mAdapter = new KeyInfoListAdapter(this); mList.setAdapter(mAdapter); - mKeyServer = (Spinner)findViewById(R.id.keyServer); + mKeyServer = (Spinner)findViewById(R.id.sign_key_keyserver); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Preferences.getPreferences(this) .getKeyServers()); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerUploadActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerUploadActivity.java index 8a32ea513..2bf19ab92 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerUploadActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerUploadActivity.java @@ -79,7 +79,7 @@ public class KeyServerUploadActivity extends SherlockFragmentActivity { setContentView(R.layout.key_server_export); export = (Button) findViewById(R.id.btn_export_to_server); - keyServer = (Spinner) findViewById(R.id.keyServer); + keyServer = (Spinner) findViewById(R.id.sign_key_keyserver); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Preferences.getPreferences(this) diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java new file mode 100644 index 000000000..996071a31 --- /dev/null +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package org.sufficientlysecure.keychain.ui; + +import org.spongycastle.openpgp.PGPSecretKey; +import org.spongycastle.openpgp.PGPSecretKeyRing; +import org.sufficientlysecure.keychain.Id; +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; +import org.sufficientlysecure.keychain.provider.ProviderHelper; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.beardedhen.androidbootstrap.BootstrapButton; + +public class SelectSecretKeyLayoutFragment extends Fragment { + + private TextView mKeyUserId; + private TextView mKeyUserIdRest; + private BootstrapButton mSelectKeyButton; + + private SelectSecretKeyCallback mCallback; + + private static final int REQUEST_CODE_SELECT_KEY = 8882; + + public interface SelectSecretKeyCallback { + void onKeySelected(long secretKeyId); + } + + public void setCallback(SelectSecretKeyCallback callback) { + mCallback = callback; + } + + /** + * Inflate the layout for this fragment + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.select_secret_key_layout_fragment, container, false); + + mKeyUserId = (TextView) view.findViewById(R.id.select_secret_key_user_id); + mKeyUserIdRest = (TextView) view.findViewById(R.id.select_secret_key_user_id_rest); + mSelectKeyButton = (BootstrapButton) view + .findViewById(R.id.select_secret_key_select_key_button); + mSelectKeyButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + selectSecretKey(); + } + }); + + return view; + } + + private void selectSecretKey() { + Intent intent = new Intent(getActivity(), SelectSecretKeyActivity.class); + startActivityForResult(intent, REQUEST_CODE_SELECT_KEY); + } + + public void selectKey(long secretKeyId) { + if (secretKeyId == Id.key.none) { + mKeyUserId.setText(R.string.api_settings_no_key); + mKeyUserIdRest.setText(""); + } else { + String uid = getResources().getString(R.string.unknown_user_id); + String uidExtra = ""; + PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId( + getActivity(), secretKeyId); + if (keyRing != null) { + PGPSecretKey key = PgpKeyHelper.getMasterKey(keyRing); + if (key != null) { + String userId = PgpKeyHelper.getMainUserIdSafe(getActivity(), key); + String chunks[] = userId.split(" <", 2); + uid = chunks[0]; + if (chunks.length > 1) { + uidExtra = "<" + chunks[1]; + } + } + } + mKeyUserId.setText(uid); + mKeyUserIdRest.setText(uidExtra); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode & 0xFFFF) { + case REQUEST_CODE_SELECT_KEY: { + long secretKeyId; + if (resultCode == Activity.RESULT_OK) { + Bundle bundle = data.getExtras(); + secretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID); + + selectKey(secretKeyId); + + // give value back to callback + mCallback.onKeySelected(secretKeyId); + } + break; + } + + default: + super.onActivityResult(requestCode, resultCode, data); + + break; + } + } +} diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SignKeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SignKeyActivity.java index 6abdddee6..a6390f9c9 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SignKeyActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SignKeyActivity.java @@ -50,6 +50,7 @@ import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.beardedhen.androidbootstrap.BootstrapButton; /** * gpg --sign-key @@ -63,11 +64,15 @@ public class SignKeyActivity extends SherlockFragmentActivity { private long mPubKeyId = 0; private long mMasterKeyId = 0; + private BootstrapButton mSignButton; + private CheckBox mUploadKeyCheckbox; + private Spinner mSelectKeyserverSpinner; + private BootstrapButton mSelectKeyButton; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // check we havent already signed it setContentView(R.layout.sign_key_activity); final ActionBar actionBar = getSupportActionBar(); @@ -75,35 +80,35 @@ public class SignKeyActivity extends SherlockFragmentActivity { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false); - final Spinner keyServer = (Spinner) findViewById(R.id.keyServer); + mSelectKeyserverSpinner = (Spinner) findViewById(R.id.sign_key_keyserver); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Preferences.getPreferences(this) .getKeyServers()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - keyServer.setAdapter(adapter); + mSelectKeyserverSpinner.setAdapter(adapter); - final CheckBox sendKey = (CheckBox) findViewById(R.id.sendKey); - if (!sendKey.isChecked()) { - keyServer.setEnabled(false); + mUploadKeyCheckbox = (CheckBox) findViewById(R.id.sign_key_upload_checkbox); + if (!mUploadKeyCheckbox.isChecked()) { + mSelectKeyserverSpinner.setEnabled(false); } else { - keyServer.setEnabled(true); + mSelectKeyserverSpinner.setEnabled(true); } - sendKey.setOnCheckedChangeListener(new OnCheckedChangeListener() { + mUploadKeyCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!isChecked) { - keyServer.setEnabled(false); + mSelectKeyserverSpinner.setEnabled(false); } else { - keyServer.setEnabled(true); + mSelectKeyserverSpinner.setEnabled(true); } } }); - Button sign = (Button) findViewById(R.id.sign); - sign.setEnabled(false); // disabled until the user selects a key to sign with - sign.setOnClickListener(new OnClickListener() { + mSignButton = (BootstrapButton) findViewById(R.id.sign_key_sign_button); + mSignButton.setEnabled(false); // disabled until the user selects a key to sign with + mSignButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -221,7 +226,7 @@ public class SignKeyActivity extends SherlockFragmentActivity { Toast.LENGTH_SHORT).show(); // check if we need to send the key to the server or not - CheckBox sendKey = (CheckBox) findViewById(R.id.sendKey); + CheckBox sendKey = (CheckBox) findViewById(R.id.sign_key_upload_checkbox); if (sendKey.isChecked()) { /* * upload the newly signed key to the key server @@ -256,7 +261,7 @@ public class SignKeyActivity extends SherlockFragmentActivity { data.putLong(KeychainIntentService.UPLOAD_KEY_KEYRING_ROW_ID, mPubKeyId); - Spinner keyServer = (Spinner) findViewById(R.id.keyServer); + Spinner keyServer = (Spinner) findViewById(R.id.sign_key_keyserver); String server = (String) keyServer.getSelectedItem(); data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, server); @@ -299,7 +304,7 @@ public class SignKeyActivity extends SherlockFragmentActivity { mMasterKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID); // re-enable the sign button so the user can initiate the sign process - Button sign = (Button) findViewById(R.id.sign); + Button sign = (Button) findViewById(R.id.sign_key_sign_button); sign.setEnabled(true); } |