diff options
author | Dominik <dominik@dominikschuermann.de> | 2012-06-18 19:29:23 +0300 |
---|---|---|
committer | Dominik <dominik@dominikschuermann.de> | 2012-06-18 19:29:23 +0300 |
commit | e4489bc78d7540042fd9626eb0d03231e2bd9d0b (patch) | |
tree | de538c6923d9a025a4f83c67f1c6266fb70922c7 /org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java | |
parent | cbfbb9430049fa1e888802aa1c771074e6570a5d (diff) | |
download | open-keychain-e4489bc78d7540042fd9626eb0d03231e2bd9d0b.tar.gz open-keychain-e4489bc78d7540042fd9626eb0d03231e2bd9d0b.tar.bz2 open-keychain-e4489bc78d7540042fd9626eb0d03231e2bd9d0b.zip |
file dialog reworked, file encryption should work again
Diffstat (limited to 'org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java')
-rw-r--r-- | org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java | 167 |
1 files changed, 90 insertions, 77 deletions
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java index b4a9d6943..5848fdd2b 100644 --- a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java +++ b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java @@ -22,15 +22,16 @@ import org.spongycastle.openpgp.PGPSecretKey; import org.spongycastle.openpgp.PGPSecretKeyRing; import org.thialfihar.android.apg.Apg; import org.thialfihar.android.apg.Constants; -import org.thialfihar.android.apg.FileDialog; import org.thialfihar.android.apg.Id; import org.thialfihar.android.apg.Preferences; import org.thialfihar.android.apg.service.ApgHandler; import org.thialfihar.android.apg.service.ApgService; +import org.thialfihar.android.apg.ui.dialog.FileDialogFragment; import org.thialfihar.android.apg.ui.dialog.PassphraseDialogFragment; import org.thialfihar.android.apg.ui.dialog.ProgressDialogFragment; import org.thialfihar.android.apg.util.Choice; import org.thialfihar.android.apg.util.Compatibility; +import org.thialfihar.android.apg.util.Utils; import org.thialfihar.android.apg.R; import com.actionbarsherlock.app.ActionBar; @@ -38,9 +39,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; -import android.app.Dialog; import android.app.ProgressDialog; -import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -119,6 +118,7 @@ public class EncryptActivity extends SherlockFragmentActivity { private long mSecretKeyId = 0; private ProgressDialogFragment mEncryptingDialog; + private FileDialogFragment mFileDialog; public void setSecretKeyId(long id) { mSecretKeyId = id; @@ -150,6 +150,14 @@ public class EncryptActivity extends SherlockFragmentActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + + case android.R.id.home: + // app icon in Action Bar clicked; go home + Intent intent = new Intent(this, MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + return true; + case Id.menu.option.encrypt_to_clipboard: { Log.d(Constants.TAG, "encrypt_to_clipboard option item clicked!"); encryptToClipboardClicked(); @@ -260,7 +268,8 @@ public class EncryptActivity extends SherlockFragmentActivity { mBrowse = (ImageButton) findViewById(R.id.btn_browse); mBrowse.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - openFile(); + Utils.openFile(EncryptActivity.this, mFilename.getText().toString(), "*/*", + Id.request.filename); } }); @@ -324,10 +333,14 @@ public class EncryptActivity extends SherlockFragmentActivity { extras = new Bundle(); } - // disable home button on actionbar because this activity is run from another app - if (Apg.Intent.ENCRYPT_AND_RETURN.equals(mIntent.getAction())) { - final ActionBar actionBar = getSupportActionBar(); - actionBar.setDisplayShowTitleEnabled(true); + // set actionbar without home button if called from another app + final ActionBar actionBar = getSupportActionBar(); + Log.d(Constants.TAG, "calling package (only set when using startActivityForResult)=" + + getCallingPackage()); + if (getCallingPackage() != null && getCallingPackage().equals(Apg.PACKAGE_NAME)) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + } else { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false); } @@ -449,23 +462,6 @@ public class EncryptActivity extends SherlockFragmentActivity { } } - private void openFile() { - String filename = mFilename.getText().toString(); - - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - - intent.setData(Uri.parse("file://" + filename)); - intent.setType("*/*"); - - try { - startActivityForResult(intent, Id.request.filename); - } catch (ActivityNotFoundException e) { - // No compatible file manager was found. - Toast.makeText(this, R.string.noFilemanagerInstalled, Toast.LENGTH_SHORT).show(); - } - } - private void guessOutputFilename() { mInputFilename = mFilename.getText().toString(); File file = new File(mInputFilename); @@ -693,7 +689,7 @@ public class EncryptActivity extends SherlockFragmentActivity { try { PassphraseDialogFragment passphraseDialog = PassphraseDialogFragment.newInstance( - mSecretKeyId, messenger); + messenger, mSecretKeyId); passphraseDialog.show(getSupportFragmentManager(), "passphraseDialog"); } catch (Apg.GeneralException e) { @@ -704,7 +700,30 @@ public class EncryptActivity extends SherlockFragmentActivity { } private void askForOutputFilename() { - showDialog(Id.dialog.output_filename); + // showDialog(Id.dialog.output_filename); + + // Message is received after passphrase is cached + Handler returnHandler = new Handler() { + @Override + public void handleMessage(Message message) { + if (message.what == FileDialogFragment.MESSAGE_OKAY) { + Bundle data = message.getData(); + mOutputFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME); + encryptStart(); + } + } + }; + + // Create a new Messenger for the communication back + Messenger messenger = new Messenger(returnHandler); + + mFileDialog = FileDialogFragment.newInstance(messenger, + getString(R.string.title_encryptToFile), + getString(R.string.specifyFileToEncryptTo), mOutputFilename, null, + Id.request.output_filename); + + mFileDialog.show(getSupportFragmentManager(), "fileDialog"); + } // @Override @@ -718,9 +737,6 @@ public class EncryptActivity extends SherlockFragmentActivity { // } private void encryptStart() { - // showDialog(Id.dialog.encrypting); - // startThread(); - boolean useAsciiArmour = true; long encryptionKeyIds[] = null; long signatureKeyId = 0; @@ -758,8 +774,11 @@ public class EncryptActivity extends SherlockFragmentActivity { intent.putExtra(ApgService.EXTRA_ACTION, ApgService.ACTION_ENCRYPT_SIGN_FILE); - data.putString(ApgService.FILE_URI, mInputFilename); - data.putString(ApgService.OUTPUT_FILENAME, mOutputFilename); + Log.d(Constants.TAG, "mInputFilename=" + mInputFilename + ", mOutputFilename=" + + mOutputFilename); + + data.putString(ApgService.INPUT_FILE, mInputFilename); + data.putString(ApgService.OUTPUT_FILE, mOutputFilename); } else { useAsciiArmour = true; @@ -961,16 +980,13 @@ public class EncryptActivity extends SherlockFragmentActivity { switch (requestCode) { case Id.request.filename: { if (resultCode == RESULT_OK && data != null) { - String filename = data.getDataString(); - if (filename != null) { - // Get rid of URI prefix: - if (filename.startsWith("file://")) { - filename = filename.substring(7); - } - // replace %20 and so on - filename = Uri.decode(filename); + try { + String path = data.getData().getPath(); + Log.d(Constants.TAG, "path=" + path); - mFilename.setText(filename); + mFilename.setText(path); + } catch (NullPointerException e) { + Log.e(Constants.TAG, "Nullpointer while retrieving path!"); } } return; @@ -978,16 +994,13 @@ public class EncryptActivity extends SherlockFragmentActivity { case Id.request.output_filename: { if (resultCode == RESULT_OK && data != null) { - String filename = data.getDataString(); - if (filename != null) { - // Get rid of URI prefix: - if (filename.startsWith("file://")) { - filename = filename.substring(7); - } - // replace %20 and so on - filename = Uri.decode(filename); + try { + String path = data.getData().getPath(); + Log.d(Constants.TAG, "path=" + path); - FileDialog.setFilename(filename); + mFileDialog.setFilename(path); + } catch (NullPointerException e) { + Log.e(Constants.TAG, "Nullpointer while retrieving path!"); } } return; @@ -1021,32 +1034,32 @@ public class EncryptActivity extends SherlockFragmentActivity { super.onActivityResult(requestCode, resultCode, data); } - @Override - protected Dialog onCreateDialog(int id) { - switch (id) { - case Id.dialog.output_filename: { - return FileDialog.build(this, getString(R.string.title_encryptToFile), - getString(R.string.specifyFileToEncryptTo), mOutputFilename, - new FileDialog.OnClickListener() { - public void onOkClick(String filename, boolean checked) { - removeDialog(Id.dialog.output_filename); - mOutputFilename = filename; - encryptStart(); - } - - public void onCancelClick() { - removeDialog(Id.dialog.output_filename); - } - }, getString(R.string.filemanager_titleSave), - getString(R.string.filemanager_btnSave), null, Id.request.output_filename); - } - - default: { - break; - } - } - - return super.onCreateDialog(id); - } + // @Override + // protected Dialog onCreateDialog(int id) { + // switch (id) { + // case Id.dialog.output_filename: { + // return FileDialog.build(this, getString(R.string.title_encryptToFile), + // getString(R.string.specifyFileToEncryptTo), mOutputFilename, + // new FileDialog.OnClickListener() { + // public void onOkClick(String filename, boolean checked) { + // removeDialog(Id.dialog.output_filename); + // mOutputFilename = filename; + // encryptStart(); + // } + // + // public void onCancelClick() { + // removeDialog(Id.dialog.output_filename); + // } + // }, getString(R.string.filemanager_titleSave), + // getString(R.string.filemanager_btnSave), null, Id.request.output_filename); + // } + // + // default: { + // break; + // } + // } + // + // return super.onCreateDialog(id); + // } } |