aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2014-07-30 00:50:53 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2014-07-30 00:50:53 +0200
commit6448de8f6ac84a8dcc91908af37c8826e32aa785 (patch)
treed1681d361ebd82a05c1600354b70b968cd98b347 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
parentcce243299a400e9d68b9bd350fd75870f51b732f (diff)
downloadopen-keychain-6448de8f6ac84a8dcc91908af37c8826e32aa785.tar.gz
open-keychain-6448de8f6ac84a8dcc91908af37c8826e32aa785.tar.bz2
open-keychain-6448de8f6ac84a8dcc91908af37c8826e32aa785.zip
Create key with fragments
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java252
1 files changed, 42 insertions, 210 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
index 3cf89f6a4..40e8af72d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java
@@ -17,233 +17,65 @@
package org.sufficientlysecure.keychain.ui;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
-import android.os.Message;
-import android.os.Messenger;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBarActivity;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.util.Patterns;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.AutoCompleteTextView;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.Spinner;
-import com.devspark.appmsg.AppMsg;
-
-import org.spongycastle.bcpg.sig.KeyFlags;
-import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.helper.ContactHelper;
-import org.sufficientlysecure.keychain.service.KeychainIntentService;
-import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
-import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
-
-import java.util.regex.Matcher;
public class CreateKeyActivity extends ActionBarActivity {
- AutoCompleteTextView mNameEdit;
- AutoCompleteTextView mEmailEdit;
- EditText mPassphraseEdit;
- View mCreateButton;
- CheckBox mUploadCheckbox;
+ public static final String EXTRA_NAME = "name";
+ public static final String EXTRA_EMAIL = "email";
+
+ public static final int ANIM_NO = 0;
+ public static final int ANIM_TO_RIGHT = 1;
+ public static final int ANIM_TO_LEFT = 2;
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_key_activity);
- mNameEdit = (AutoCompleteTextView) findViewById(R.id.name);
- mEmailEdit = (AutoCompleteTextView) findViewById(R.id.email);
- mPassphraseEdit = (EditText) findViewById(R.id.passphrase);
- mCreateButton = findViewById(R.id.create_key_button);
- mUploadCheckbox = (CheckBox) findViewById(R.id.create_key_upload);
-
- mEmailEdit.setThreshold(1); // Start working from first character
- mEmailEdit.setAdapter(
- new ArrayAdapter<String>
- (this, android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserEmails(this)
- )
- );
- mEmailEdit.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
- String email = editable.toString();
- if (email.length() > 0) {
- Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(email);
- if (emailMatcher.matches()) {
- mEmailEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0,
- R.drawable.uid_mail_ok, 0);
- } else {
- mEmailEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0,
- R.drawable.uid_mail_bad, 0);
- }
- } else {
- // remove drawable if email is empty
- mEmailEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
- }
- }
- });
-
- mNameEdit.setThreshold(1); // Start working from first character
- mNameEdit.setAdapter(
- new ArrayAdapter<String>
- (this, android.R.layout.simple_spinner_dropdown_item,
- ContactHelper.getPossibleUserNames(this)
- )
- );
-
- mCreateButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- createKeyCheck();
- }
- });
-
+ // pass extras into fragment
+ CreateKeyInputFragment frag =
+ CreateKeyInputFragment.newInstance(
+ getIntent().getStringExtra(EXTRA_NAME),
+ getIntent().getStringExtra(EXTRA_EMAIL)
+ );
+ loadFragment(null, frag, ANIM_NO);
}
- private void createKeyCheck() {
- if (isEditTextNotEmpty(this, mNameEdit)
- && isEditTextNotEmpty(this, mEmailEdit)
- && isEditTextNotEmpty(this, mPassphraseEdit)) {
- createKey();
+ public void loadFragment(Bundle savedInstanceState, Fragment fragment, int animation) {
+ // However, if we're being restored from a previous state,
+ // then we don't need to do anything and should return or else
+ // we could end up with overlapping fragments.
+ if (savedInstanceState != null) {
+ return;
}
- }
-
- private void createKey() {
- Intent intent = new Intent(this, KeychainIntentService.class);
- intent.setAction(KeychainIntentService.ACTION_SAVE_KEYRING);
-
- // Message is received after importing is done in KeychainIntentService
- KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
- this,
- getString(R.string.progress_importing),
- ProgressDialog.STYLE_HORIZONTAL) {
- public void handleMessage(Message message) {
- // handle messages by standard KeychainIntentServiceHandler first
- super.handleMessage(message);
-
- // TODO
-// if (mUploadCheckbox.isChecked()) {
-// uploadKey();
-// } else {
- if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- CreateKeyActivity.this.setResult(RESULT_OK);
- CreateKeyActivity.this.finish();
- }
-// }
- }
- };
-
- // fill values for this action
- Bundle data = new Bundle();
-
- SaveKeyringParcel parcel = new SaveKeyringParcel();
- parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Constants.choice.algorithm.rsa, 4096, KeyFlags.CERTIFY_OTHER, null));
- parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Constants.choice.algorithm.rsa, 4096, KeyFlags.SIGN_DATA, null));
- parcel.mAddSubKeys.add(new SaveKeyringParcel.SubkeyAdd(Constants.choice.algorithm.rsa, 4096, KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE, null));
- String userId = mNameEdit.getText().toString() + " <" + mEmailEdit.getText().toString() + ">";
- parcel.mAddUserIds.add(userId);
- parcel.mNewPassphrase = mPassphraseEdit.getText().toString();
-
- // get selected key entries
- data.putParcelable(KeychainIntentService.SAVE_KEYRING_PARCEL, parcel);
-
- intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
-
- // Create a new Messenger for the communication back
- Messenger messenger = new Messenger(saveHandler);
- intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
- saveHandler.showProgressDialog(this);
-
- startService(intent);
- }
-
- private void uploadKey() {
- // Send all information needed to service to upload key in other thread
- Intent intent = new Intent(this, KeychainIntentService.class);
-
- intent.setAction(KeychainIntentService.ACTION_UPLOAD_KEYRING);
-
- // set data uri as path to keyring
- // TODO
-// Uri blobUri = KeychainContract.KeyRingData.buildPublicKeyRingUri(mDataUri);
-// intent.setData(blobUri);
-
- // fill values for this action
- Bundle data = new Bundle();
-
- Spinner keyServer = (Spinner) findViewById(R.id.upload_key_keyserver);
- String server = (String) keyServer.getSelectedItem();
- data.putString(KeychainIntentService.UPLOAD_KEY_SERVER, server);
-
- intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
-
- // Message is received after uploading is done in KeychainIntentService
- KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(this,
- getString(R.string.progress_exporting), ProgressDialog.STYLE_HORIZONTAL) {
- public void handleMessage(Message message) {
- // handle messages by standard KeychainIntentServiceHandler first
- super.handleMessage(message);
-
- if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
- AppMsg.makeText(CreateKeyActivity.this, R.string.key_send_success,
- AppMsg.STYLE_INFO).show();
-
- CreateKeyActivity.this.setResult(RESULT_OK);
- CreateKeyActivity.this.finish();
- }
- }
- };
-
- // Create a new Messenger for the communication back
- Messenger messenger = new Messenger(saveHandler);
- intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
-
- // show progress dialog
- saveHandler.showProgressDialog(this);
-
- // start service with intent
- startService(intent);
- }
-
- /**
- * Checks if text of given EditText is not empty. If it is empty an error is
- * set and the EditText gets the focus.
- *
- * @param context
- * @param editText
- * @return true if EditText is not empty
- */
- private static boolean isEditTextNotEmpty(Context context, EditText editText) {
- boolean output = true;
- if (editText.getText().toString().length() == 0) {
- editText.setError(context.getString(R.string.create_key_empty));
- editText.requestFocus();
- output = false;
- } else {
- editText.setError(null);
+ // Add the fragment to the 'fragment_container' FrameLayout
+ // NOTE: We use commitAllowingStateLoss() to prevent weird crashes!
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+
+ switch (animation) {
+ case ANIM_NO:
+ transaction.setCustomAnimations(0, 0);
+ break;
+ case ANIM_TO_LEFT:
+ transaction.setCustomAnimations(R.anim.frag_slide_in_from_left, R.anim.frag_slide_out_to_right);
+ break;
+ case ANIM_TO_RIGHT:
+ transaction.setCustomAnimations(R.anim.frag_slide_out_to_left, R.anim.frag_slide_in_from_right);
+ transaction.addToBackStack("back");
+ break;
}
-
- return output;
+ transaction.replace(R.id.create_key_fragment_container, fragment)
+ .commitAllowingStateLoss();
+ // do it immediately!
+ getSupportFragmentManager().executePendingTransactions();
}
+
}