From 1d5606a1a31d49248d90d0fd6c9734b27cbb1a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Fri, 27 Jun 2014 23:01:11 +0200 Subject: More wizardry --- .../keychain/ui/ImportKeysActivity.java | 15 +- .../keychain/ui/ImportKeysListFragment.java | 4 +- .../keychain/ui/WizardActivity.java | 229 +++++++++++++-------- .../main/res/layout/wizard_generic_fragment.xml | 15 -- .../src/main/res/layout/wizard_k9_fragment.xml | 43 ++++ 5 files changed, 202 insertions(+), 104 deletions(-) delete mode 100644 OpenKeychain/src/main/res/layout/wizard_generic_fragment.xml create mode 100644 OpenKeychain/src/main/res/layout/wizard_k9_fragment.xml (limited to 'OpenKeychain/src') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index f7455905d..60162a682 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -18,6 +18,7 @@ package org.sufficientlysecure.keychain.ui; import android.annotation.TargetApi; +import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; @@ -66,6 +67,8 @@ public class ImportKeysActivity extends ActionBarActivity { + "IMPORT_KEY_FROM_KEYSERVER"; public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN = Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_KEY_SERVER_AND_RETURN"; + public static final String ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN = Constants.INTENT_PREFIX + + "IMPORT_KEY_FROM_FILE_AND_RETURN"; public static final String ACTION_IMPORT_KEY_FROM_KEYBASE = Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_KEYBASE"; @@ -224,7 +227,8 @@ public class ImportKeysActivity extends ActionBarActivity { ); return; } - } else if (ACTION_IMPORT_KEY_FROM_FILE.equals(action)) { + } else if (ACTION_IMPORT_KEY_FROM_FILE.equals(action) + || ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN.equals(action)) { // NOTE: this only displays the appropriate fragment, no actions are taken mSwitchToTab = TAB_FILE; @@ -509,12 +513,13 @@ public class ImportKeysActivity extends ActionBarActivity { } */ - /* if (ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN.equals(getIntent().getAction())) { - ImportKeysActivity.this.setResult(Activity.RESULT_OK, mPendingIntentData); - finish(); + ImportKeysActivity.this.setResult(RESULT_OK, mPendingIntentData); + ImportKeysActivity.this.finish(); + } else if (ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN.equals(getIntent().getAction())) { + ImportKeysActivity.this.setResult(RESULT_OK); + ImportKeysActivity.this.finish(); } - */ } } }; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java index 84fd513a0..160869895 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java @@ -207,7 +207,9 @@ public class ImportKeysListFragment extends ListFragment implements if (getLoaderManager().getLoader(LOADER_ID_KEYBASE) != null) { getLoaderManager().destroyLoader(LOADER_ID_KEYBASE); } - setListShown(true); + if (getView() != null) { + setListShown(true); + } } private void restartLoaders() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/WizardActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/WizardActivity.java index efa51ac71..3a528cb18 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/WizardActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/WizardActivity.java @@ -17,7 +17,11 @@ package org.sufficientlysecure.keychain.ui; +import android.app.Activity; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -41,8 +45,11 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; import android.widget.TextView; +import org.sufficientlysecure.htmltextview.HtmlTextView; +import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.ContactHelper; +import org.sufficientlysecure.keychain.util.Log; import java.util.regex.Matcher; @@ -53,15 +60,22 @@ public class WizardActivity extends ActionBarActivity { // values for mCurrentScreen private enum State { - START, CREATE_KEY, NFC, FINISH + START, CREATE_KEY, IMPORT_KEY, K9 } + public static final int REQUEST_CODE_IMPORT = 0x00007703; + Button mBackButton; Button mNextButton; StartFragment mStartFragment; CreateKeyFragment mCreateKeyFragment; - GenericFragment mNFCFragment; - GenericFragment mFinishFragment; + K9Fragment mK9Fragment; + + private static final String K9_PACKAGE = "com.fsck.k9"; + // private static final String K9_MARKET_INTENT_URI_BASE = "market://details?id=%s"; +// private static final Intent K9_MARKET_INTENT = new Intent(Intent.ACTION_VIEW, Uri.parse( +// String.format(K9_MARKET_INTENT_URI_BASE, K9_PACKAGE))); + private static final Intent K9_MARKET_INTENT = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/k9mail/k-9/releases/tag/4.904")); LinearLayout mProgressLayout; View mProgressLine; @@ -121,7 +135,7 @@ public class WizardActivity extends ActionBarActivity { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.wizard_create_key_fragment, + View view = inflater.inflate(R.layout.wizard_create_key_fragment, container, false); final AutoCompleteTextView emailView = (AutoCompleteTextView) view.findViewById(R.id.email); @@ -157,21 +171,17 @@ public class WizardActivity extends ActionBarActivity { // remove drawable if email is empty emailView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); } -// if (mEditorListener != null) { -// mEditorListener.onEdited(); -// } } }); return view; } } - public static class GenericFragment extends Fragment { - public static GenericFragment newInstance(String text) { - GenericFragment myFragment = new GenericFragment(); + public static class K9Fragment extends Fragment { + public static K9Fragment newInstance() { + K9Fragment myFragment = new K9Fragment(); Bundle args = new Bundle(); - args.putString("text", text); myFragment.setArguments(args); return myFragment; @@ -180,12 +190,12 @@ public class WizardActivity extends ActionBarActivity { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.wizard_generic_fragment, + View v = inflater.inflate(R.layout.wizard_k9_fragment, container, false); - TextView text = (TextView) v - .findViewById(R.id.fragment_vehicle_reg_generic_text); - text.setText(getArguments().getString("text")); + HtmlTextView text = (HtmlTextView) v + .findViewById(R.id.wizard_k9_text); + text.setHtmlFromString("Install K9. It's good for you! Here is a screenhot how to enable OK in K9: (TODO)", true); return v; } @@ -221,12 +231,10 @@ public class WizardActivity extends ActionBarActivity { mProgressLayout = (LinearLayout) findViewById(R.id.wizard_progress); mProgressLine = findViewById(R.id.wizard_progress_line); mProgressBar = (ProgressBar) findViewById(R.id.wizard_progress_progressbar); - mProgressImage = (ImageView) findViewById(R.id.wizard_progress_image); - mProgressText = (TextView) findViewById(R.id.wizard_progress_text); + mProgressImage = (ImageView) findViewById(R.id.wizard_progress_image); + mProgressText = (TextView) findViewById(R.id.wizard_progress_text); - mStartFragment = StartFragment.newInstance(); - loadFragment(mStartFragment); - mCurrentState = State.START; + changeToState(State.START); } private enum ProgressState { @@ -281,114 +289,169 @@ public class WizardActivity extends ActionBarActivity { } switch (mCurrentState) { - case START: { RadioGroup radioGroup = (RadioGroup) findViewById(R.id.wizard_start_radio_group); int selectedId = radioGroup.getCheckedRadioButtonId(); switch (selectedId) { case R.id.wizard_start_new_key: { - mCurrentState = State.CREATE_KEY; - mCreateKeyFragment = CreateKeyFragment.newInstance(); - loadFragment(mCreateKeyFragment); + changeToState(State.CREATE_KEY); + break; + } + case R.id.wizard_start_import: { + changeToState(State.IMPORT_KEY); + break; + } + case R.id.wizard_start_skip: { + finish(); break; } } mBackButton.setText(R.string.btn_back); - -// if (isEditTextNotEmpty(this, asd)) { -// mLicensePlate = asd.getText().toString(); -// -// showProgress(ProgressState.WORKING, -// "doing something"; -// } break; } case CREATE_KEY: + EditText nameEdit = (EditText) findViewById(R.id.name); + EditText emailEdit = (EditText) findViewById(R.id.email); + EditText passphraseEdit = (EditText) findViewById(R.id.passphrase); - AsyncTask generateTask = new AsyncTask() { + if (isEditTextNotEmpty(this, nameEdit) + && isEditTextNotEmpty(this, emailEdit) + && isEditTextNotEmpty(this, passphraseEdit)) { - @Override - protected void onPreExecute() { - super.onPreExecute(); +// SaveKeyringParcel newKey = new SaveKeyringParcel(); +// newKey.addUserIds.add(nameEdit.getText().toString() + " <" +// + emailEdit.getText().toString() + ">"); - showProgress(ProgressState.WORKING, "generating key..."); - } - @Override - protected Boolean doInBackground(String... params) { - return false; - } + AsyncTask generateTask = new AsyncTask() { - @Override - protected void onPostExecute(Boolean result) { - super.onPostExecute(result); - -// if (result) { -// showProgress( -// ProgressState.WORKING, -// "asd"); -// -// } else { -// showProgress( -// ProgressState.ERROR, "asd"); -// } - } + @Override + protected void onPreExecute() { + super.onPreExecute(); + + showProgress(ProgressState.WORKING, "generating key..."); + } - }; + @Override + protected Boolean doInBackground(String... params) { + return true; + } - generateTask.execute(""); + @Override + protected void onPostExecute(Boolean result) { + super.onPostExecute(result); - break; - case NFC: + if (result) { + showProgress(ProgressState.ENABLED, "key generated successfully!"); + + changeToState(State.K9); + } else { + showProgress(ProgressState.ERROR, "error in key gen"); + } + } - mCurrentState = State.FINISH; - hideProgress(); - mFinishFragment = GenericFragment - .newInstance("asd"); - loadFragment(mFinishFragment); - mNextButton.setText("finish"); + }; + generateTask.execute(""); + } break; - case FINISH: + case K9: { + RadioGroup radioGroup = (RadioGroup) findViewById(R.id.wizard_k9_radio_group); + int selectedId = radioGroup.getCheckedRadioButtonId(); + switch (selectedId) { + case R.id.wizard_k9_install: { + try { + startActivity(K9_MARKET_INTENT); + } catch (ActivityNotFoundException e) { + Log.e(Constants.TAG, "Activity not found for: " + K9_MARKET_INTENT); + } + break; + } + case R.id.wizard_k9_skip: { + finish(); + break; + } + } + finish(); break; + } default: break; } } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case REQUEST_CODE_IMPORT: { + if (resultCode == Activity.RESULT_OK) { + // imported now... + changeToState(State.K9); + } else { + // back to start + changeToState(State.START); + } + break; + } + + default: { + super.onActivityResult(requestCode, resultCode, data); + + break; + } + } + } + public void backOnClick(View view) { switch (mCurrentState) { case START: finish(); break; - case CREATE_KEY: - loadFragment(mStartFragment); - mCurrentState = State.START; - mBackButton.setText(android.R.string.cancel); - mNextButton.setText(R.string.btn_next); + changeToState(State.START); break; - case NFC: - loadFragment(mCreateKeyFragment); - mCurrentState = State.CREATE_KEY; - mBackButton.setText(R.string.btn_back); - mNextButton.setText(R.string.btn_next); + case IMPORT_KEY: + changeToState(State.START); break; - case FINISH: - loadFragment(mNFCFragment); - mCurrentState = State.NFC; - mBackButton.setText(R.string.btn_back); - mNextButton.setText(R.string.btn_next); + default: + changeToState(State.START); break; + } + } - default: - loadFragment(mStartFragment); + private void changeToState(State state) { + switch (state) { + case START: { mCurrentState = State.START; + mStartFragment = StartFragment.newInstance(); + loadFragment(mStartFragment); mBackButton.setText(android.R.string.cancel); mNextButton.setText(R.string.btn_next); break; + } + case CREATE_KEY: { + mCurrentState = State.CREATE_KEY; + mCreateKeyFragment = CreateKeyFragment.newInstance(); + loadFragment(mCreateKeyFragment); + break; + } + case IMPORT_KEY: { + mCurrentState = State.IMPORT_KEY; + Intent intent = new Intent(this, ImportKeysActivity.class); + intent.setAction(ImportKeysActivity.ACTION_IMPORT_KEY_FROM_FILE_AND_RETURN); + startActivityForResult(intent, REQUEST_CODE_IMPORT); + break; + } + case K9: { + mCurrentState = State.K9; + mBackButton.setEnabled(false); // don't go back to import/create key + mK9Fragment = K9Fragment.newInstance(); + loadFragment(mK9Fragment); + break; + } } } diff --git a/OpenKeychain/src/main/res/layout/wizard_generic_fragment.xml b/OpenKeychain/src/main/res/layout/wizard_generic_fragment.xml deleted file mode 100644 index a55370804..000000000 --- a/OpenKeychain/src/main/res/layout/wizard_generic_fragment.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/wizard_k9_fragment.xml b/OpenKeychain/src/main/res/layout/wizard_k9_fragment.xml new file mode 100644 index 000000000..342adc37e --- /dev/null +++ b/OpenKeychain/src/main/res/layout/wizard_k9_fragment.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3