From 37fd7dbbc70d6fc033db4101eaf89bad627fe499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 9 Jan 2014 23:13:23 +0100 Subject: fix bad crashes --- .../keychain/ui/DrawerActivity.java | 10 - .../keychain/ui/EditKeyActivity.java | 19 +- .../keychain/ui/KeyActivity.java | 208 --------------------- .../keychain/ui/KeyListPublicActivity.java | 58 +++--- .../keychain/ui/KeyListSecretActivity.java | 16 +- .../keychain/ui/KeyViewActivity.java | 20 +- 6 files changed, 80 insertions(+), 251 deletions(-) delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyActivity.java (limited to 'OpenPGP-Keychain') diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DrawerActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DrawerActivity.java index db6a3a155..2190388b0 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DrawerActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DrawerActivity.java @@ -71,9 +71,6 @@ public class DrawerActivity extends SherlockFragmentActivity { // set a custom shadow that overlays the main content when the drawer // opens mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); - // set up the drawer's list view with items and click listener - // mDrawerList - // .setAdapter(new ArrayAdapter(this, R.layout.drawer_list_item, mItemsText)); NavItem mItemIconTexts[] = new NavItem[] { new NavItem("fa-user", getString(R.string.nav_contacts)), @@ -90,13 +87,6 @@ public class DrawerActivity extends SherlockFragmentActivity { mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); - // - // enable ActionBar app icon to behave as action to toggle nav drawer getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java index 569a16c41..b79200ba1 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java @@ -27,6 +27,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.ActionBarHelper; +import org.sufficientlysecure.keychain.helper.ExportHelper; import org.sufficientlysecure.keychain.pgp.PgpConversionHelper; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; @@ -61,11 +62,12 @@ import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; import android.widget.Toast; +import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.beardedhen.androidbootstrap.BootstrapButton; -public class EditKeyActivity extends KeyActivity { +public class EditKeyActivity extends SherlockFragmentActivity { // Actions for internal use only: public static final String ACTION_CREATE_KEY = Constants.INTENT_PREFIX + "CREATE_KEY"; @@ -100,10 +102,14 @@ public class EditKeyActivity extends KeyActivity { Vector mKeysUsages; boolean masterCanSign = true; + ExportHelper mExportHelper; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mExportHelper = new ExportHelper(this); + mUserIds = new Vector(); mKeys = new Vector(); mKeysUsages = new Vector(); @@ -322,7 +328,7 @@ public class EditKeyActivity extends KeyActivity { cancelClicked(); return true; case R.id.menu_key_edit_export_file: - showExportKeysDialog(mDataUri, Id.type.secret_key, Constants.path.APP_DIR + mExportHelper.showExportKeysDialog(mDataUri, Id.type.secret_key, Constants.path.APP_DIR + "/secexport.asc"); return true; case R.id.menu_key_edit_delete: { @@ -337,7 +343,7 @@ public class EditKeyActivity extends KeyActivity { } }; - deleteKey(mDataUri, Id.type.secret_key, returnHandler); + mExportHelper.deleteKey(mDataUri, Id.type.secret_key, returnHandler); return true; } } @@ -656,4 +662,11 @@ public class EditKeyActivity extends KeyActivity { mChangePassPhrase.setText(isPassphraseSet() ? getString(R.string.btn_change_passphrase) : getString(R.string.btn_set_passphrase)); } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) { + super.onActivityResult(requestCode, resultCode, data); + } + } } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyActivity.java deleted file mode 100644 index 91481d2b4..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyActivity.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2013-2014 Dominik Schürmann - * - * 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 . - */ - -package org.sufficientlysecure.keychain.ui; - -import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.Id; -import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; -import org.sufficientlysecure.keychain.provider.ProviderHelper; -import org.sufficientlysecure.keychain.service.KeychainIntentService; -import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; -import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; -import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment; -import org.sufficientlysecure.keychain.util.Log; - -import android.app.ProgressDialog; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.os.Messenger; -import android.widget.Toast; - -/** - * This implements export key method and delete key method. Used in lists and key view and key edit. - * - * TODO: get key type by looking at dataUri! - * - */ -public class KeyActivity extends DrawerActivity { - protected FileDialogFragment mFileDialog; - protected String mExportFilename; - - protected void deleteKey(Uri dataUri, final int keyType, Handler deleteHandler) { - long keyRingRowId = Long.valueOf(dataUri.getLastPathSegment()); - - // Create a new Messenger for the communication back - Messenger messenger = new Messenger(deleteHandler); - - DeleteKeyDialogFragment deleteKeyDialog = DeleteKeyDialogFragment.newInstance(messenger, - new long[] { keyRingRowId }, keyType); - - deleteKeyDialog.show(getSupportFragmentManager(), "deleteKeyDialog"); - } - - /** - * Show dialog where to export keys - * - * @param keyRingMasterKeyId - * if -1 export all keys - */ - public void showExportKeysDialog(final Uri dataUri, final int keyType, - final String exportFilename) { - mExportFilename = exportFilename; - - // Message is received after file is selected - Handler returnHandler = new Handler() { - @Override - public void handleMessage(Message message) { - if (message.what == FileDialogFragment.MESSAGE_OKAY) { - Bundle data = message.getData(); - mExportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME); - - long keyRingRowId = Long.valueOf(dataUri.getLastPathSegment()); - - // TODO? - long keyRingMasterKeyId = ProviderHelper.getSecretMasterKeyId(KeyActivity.this, - keyRingRowId); - - exportKeys(keyRingMasterKeyId, keyType); - } - } - }; - - // Create a new Messenger for the communication back - final Messenger messenger = new Messenger(returnHandler); - - DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { - public void run() { - String title = null; - if (dataUri != null) { - // single key export - title = getString(R.string.title_export_key); - } else { - title = getString(R.string.title_export_keys); - } - - String message = null; - if (keyType == Id.type.public_key) { - message = getString(R.string.specify_file_to_export_to); - } else { - message = getString(R.string.specify_file_to_export_secret_keys_to); - } - - mFileDialog = FileDialogFragment.newInstance(messenger, title, message, - exportFilename, null, Id.request.filename); - - mFileDialog.show(getSupportFragmentManager(), "fileDialog"); - } - }); - } - - /** - * Export keys - * - * @param keyRingMasterKeyId - * if -1 export all keys - */ - public void exportKeys(long keyRingMasterKeyId, int keyType) { - Log.d(Constants.TAG, "exportKeys started"); - - // Send all information needed to service to export key in other thread - Intent intent = new Intent(this, KeychainIntentService.class); - - intent.setAction(KeychainIntentService.ACTION_EXPORT_KEYRING); - - // fill values for this action - Bundle data = new Bundle(); - - data.putString(KeychainIntentService.EXPORT_FILENAME, mExportFilename); - data.putInt(KeychainIntentService.EXPORT_KEY_TYPE, keyType); - - if (keyRingMasterKeyId == -1) { - data.putBoolean(KeychainIntentService.EXPORT_ALL, true); - } else { - data.putLong(KeychainIntentService.EXPORT_KEY_RING_MASTER_KEY_ID, keyRingMasterKeyId); - } - - intent.putExtra(KeychainIntentService.EXTRA_DATA, data); - - // Message is received after exporting is done in ApgService - KeychainIntentServiceHandler exportHandler = new KeychainIntentServiceHandler(this, - R.string.progress_exporting, ProgressDialog.STYLE_HORIZONTAL) { - public void handleMessage(Message message) { - // handle messages by standard ApgHandler first - super.handleMessage(message); - - if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { - // get returned data bundle - Bundle returnData = message.getData(); - - int exported = returnData.getInt(KeychainIntentService.RESULT_EXPORT); - String toastMessage; - if (exported == 1) { - toastMessage = getString(R.string.key_exported); - } else if (exported > 0) { - toastMessage = getString(R.string.keys_exported, exported); - } else { - toastMessage = getString(R.string.no_keys_exported); - } - Toast.makeText(KeyActivity.this, toastMessage, Toast.LENGTH_SHORT).show(); - - } - }; - }; - - // Create a new Messenger for the communication back - Messenger messenger = new Messenger(exportHandler); - intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger); - - // show progress dialog - exportHandler.showProgressDialog(this); - - // start service with intent - startService(intent); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - switch (requestCode) { - case Id.request.filename: { - if (resultCode == RESULT_OK && data != null) { - try { - String path = data.getData().getPath(); - Log.d(Constants.TAG, "path=" + path); - - // set filename used in export/import dialogs - mFileDialog.setFilename(path); - } catch (NullPointerException e) { - Log.e(Constants.TAG, "Nullpointer while retrieving path!", e); - } - } - return; - } - - default: { - break; - } - } - super.onActivityResult(requestCode, resultCode, data); - } -} diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java index cb04ddf0d..204939610 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.helper.ExportHelper; import android.content.Intent; import android.os.Bundle; @@ -27,12 +28,16 @@ import android.os.Bundle; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; -public class KeyListPublicActivity extends KeyActivity { +public class KeyListPublicActivity extends DrawerActivity { + + ExportHelper mExportHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mExportHelper = new ExportHelper(this); + setContentView(R.layout.key_list_public_activity); // now setup navigation drawer in DrawerActivity... @@ -55,7 +60,7 @@ public class KeyListPublicActivity extends KeyActivity { return true; case R.id.menu_key_list_public_export: - showExportKeysDialog(null, Id.type.public_key, Constants.path.APP_DIR + mExportHelper.showExportKeysDialog(null, Id.type.public_key, Constants.path.APP_DIR + "/pubexport.asc"); return true; @@ -64,27 +69,30 @@ public class KeyListPublicActivity extends KeyActivity { } } - // @Override - // protected void onActivityResult(int requestCode, int resultCode, Intent data) { - // switch (requestCode) { - // case Id.request.look_up_key_id: { - // if (resultCode == RESULT_CANCELED || data == null - // || data.getStringExtra(KeyServerQueryActivity.RESULT_EXTRA_TEXT) == null) { - // return; - // } - // - // Intent intent = new Intent(this, KeyListPublicActivity.class); - // intent.setAction(KeyListPublicActivity.ACTION_IMPORT); - // intent.putExtra(KeyListPublicActivity.EXTRA_TEXT, - // data.getStringExtra(KeyListActivity.EXTRA_TEXT)); - // handleActions(intent); - // break; - // } - // - // default: { - // super.onActivityResult(requestCode, resultCode, data); - // break; - // } - // } - // } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) { + super.onActivityResult(requestCode, resultCode, data); + } + // switch (requestCode) { + // case Id.request.look_up_key_id: { + // if (resultCode == RESULT_CANCELED || data == null + // || data.getStringExtra(KeyServerQueryActivity.RESULT_EXTRA_TEXT) == null) { + // return; + // } + // + // Intent intent = new Intent(this, KeyListPublicActivity.class); + // intent.setAction(KeyListPublicActivity.ACTION_IMPORT); + // intent.putExtra(KeyListPublicActivity.EXTRA_TEXT, + // data.getStringExtra(KeyListActivity.EXTRA_TEXT)); + // handleActions(intent); + // break; + // } + // + // default: { + // super.onActivityResult(requestCode, resultCode, data); + // break; + // } + // } + } } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListSecretActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListSecretActivity.java index 747055a47..34a053d25 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListSecretActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListSecretActivity.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.helper.ExportHelper; import android.content.Intent; import android.os.Bundle; @@ -27,12 +28,16 @@ import android.os.Bundle; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; -public class KeyListSecretActivity extends KeyActivity { +public class KeyListSecretActivity extends DrawerActivity { + + ExportHelper mExportHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mExportHelper = new ExportHelper(this); + setContentView(R.layout.key_list_secret_activity); // now setup navigation drawer in DrawerActivity... @@ -58,7 +63,7 @@ public class KeyListSecretActivity extends KeyActivity { return true; case R.id.menu_key_list_secret_export: - showExportKeysDialog(null, Id.type.secret_key, Constants.path.APP_DIR + mExportHelper.showExportKeysDialog(null, Id.type.secret_key, Constants.path.APP_DIR + "/secexport.asc"); return true; @@ -86,4 +91,11 @@ public class KeyListSecretActivity extends KeyActivity { startActivityForResult(intent, 0); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) { + super.onActivityResult(requestCode, resultCode, data); + } + } + } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java index fb04bb1f8..0e1e20cce 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyViewActivity.java @@ -29,6 +29,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; +import org.sufficientlysecure.keychain.helper.ExportHelper; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; @@ -55,13 +56,17 @@ import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.Toast; +import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.beardedhen.androidbootstrap.BootstrapButton; @SuppressLint("NewApi") -public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCallback, +public class KeyViewActivity extends SherlockFragmentActivity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback { + + ExportHelper mExportHelper; + private Uri mDataUri; private PGPPublicKey mPublicKey; @@ -81,6 +86,8 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mExportHelper = new ExportHelper(this); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); @@ -125,7 +132,7 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal uploadToKeyserver(mDataUri); return true; case R.id.menu_key_view_export_file: - showExportKeysDialog(mDataUri, Id.type.public_key, Constants.path.APP_DIR + mExportHelper.showExportKeysDialog(mDataUri, Id.type.public_key, Constants.path.APP_DIR + "/pubexport.asc"); return true; case R.id.menu_key_view_share_default: @@ -152,7 +159,7 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal } }; - deleteKey(mDataUri, Id.type.public_key, returnHandler); + mExportHelper.deleteKey(mDataUri, Id.type.public_key, returnHandler); return true; } } @@ -373,4 +380,11 @@ public class KeyViewActivity extends KeyActivity implements CreateNdefMessageCal } }; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) { + super.onActivityResult(requestCode, resultCode, data); + } + } + } -- cgit v1.2.3