diff options
| author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-07-30 00:50:53 +0200 | 
|---|---|---|
| committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-07-30 00:50:53 +0200 | 
| commit | 6448de8f6ac84a8dcc91908af37c8826e32aa785 (patch) | |
| tree | d1681d361ebd82a05c1600354b70b968cd98b347 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java | |
| parent | cce243299a400e9d68b9bd350fd75870f51b732f (diff) | |
| download | open-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.java | 252 | 
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();      } +  }  | 
