handle onActivityResult in FileDialogFragment directly

This commit is contained in:
Dominik Schürmann 2014-01-18 22:37:00 +01:00
parent e8b9dfe379
commit 96936dda23
9 changed files with 63 additions and 110 deletions

View File

@ -76,7 +76,7 @@ public final class Id {
public static final int public_keys = 0x00007001; public static final int public_keys = 0x00007001;
public static final int secret_keys = 0x00007002; public static final int secret_keys = 0x00007002;
public static final int filename = 0x00007003; public static final int filename = 0x00007003;
public static final int output_filename = 0x00007004; // public static final int output_filename = 0x00007004;
public static final int key_server_preference = 0x00007005; public static final int key_server_preference = 0x00007005;
public static final int look_up_key_id = 0x00007006; public static final int look_up_key_id = 0x00007006;
public static final int export_to_server = 0x00007007; public static final int export_to_server = 0x00007007;

View File

@ -27,7 +27,6 @@ import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
@ -107,7 +106,7 @@ public class ExportHelper {
} }
mFileDialog = FileDialogFragment.newInstance(messenger, title, message, mFileDialog = FileDialogFragment.newInstance(messenger, title, message,
exportFilename, null, Id.request.filename); exportFilename, null);
mFileDialog.show(activity.getSupportFragmentManager(), "fileDialog"); mFileDialog.show(activity.getSupportFragmentManager(), "fileDialog");
} }
@ -182,22 +181,4 @@ public class ExportHelper {
activity.startService(intent); activity.startService(intent);
} }
public boolean handleActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Id.request.filename) {
if (resultCode == Activity.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 true;
}
return false;
}
} }

View File

@ -629,8 +629,7 @@ public class DecryptActivity extends DrawerActivity {
mFileDialog = FileDialogFragment.newInstance(messenger, mFileDialog = FileDialogFragment.newInstance(messenger,
getString(R.string.title_decrypt_to_file), getString(R.string.title_decrypt_to_file),
getString(R.string.specify_file_to_decrypt_to), mOutputFilename, null, getString(R.string.specify_file_to_decrypt_to), mOutputFilename, null);
Id.request.output_filename);
mFileDialog.show(getSupportFragmentManager(), "fileDialog"); mFileDialog.show(getSupportFragmentManager(), "fileDialog");
} }
@ -826,20 +825,6 @@ public class DecryptActivity extends DrawerActivity {
return; return;
} }
case Id.request.output_filename: {
if (resultCode == RESULT_OK && data != null) {
try {
String path = FileHelper.getPath(this, data.getData());
Log.d(Constants.TAG, "path=" + path);
mFileDialog.setFilename(path);
} catch (NullPointerException e) {
Log.e(Constants.TAG, "Nullpointer while retrieving path!");
}
}
return;
}
// this request is returned after LookupUnknownKeyDialogFragment started // this request is returned after LookupUnknownKeyDialogFragment started
// KeyServerQueryActivity and user looked uo key // KeyServerQueryActivity and user looked uo key
case Id.request.look_up_key_id: { case Id.request.look_up_key_id: {

View File

@ -663,10 +663,4 @@ public class EditKeyActivity extends SherlockFragmentActivity {
: getString(R.string.btn_set_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);
}
}
} }

View File

@ -590,8 +590,7 @@ public class EncryptActivity extends DrawerActivity {
mFileDialog = FileDialogFragment.newInstance(messenger, mFileDialog = FileDialogFragment.newInstance(messenger,
getString(R.string.title_encrypt_to_file), getString(R.string.title_encrypt_to_file),
getString(R.string.specify_file_to_encrypt_to), mOutputFilename, null, getString(R.string.specify_file_to_encrypt_to), mOutputFilename, null);
Id.request.output_filename);
mFileDialog.show(getSupportFragmentManager(), "fileDialog"); mFileDialog.show(getSupportFragmentManager(), "fileDialog");
} }
@ -973,20 +972,6 @@ public class EncryptActivity extends DrawerActivity {
return; return;
} }
case Id.request.output_filename: {
if (resultCode == RESULT_OK && data != null) {
try {
String path = data.getData().getPath();
Log.d(Constants.TAG, "path=" + path);
mFileDialog.setFilename(path);
} catch (NullPointerException e) {
Log.e(Constants.TAG, "Nullpointer while retrieving path!");
}
}
return;
}
case Id.request.public_keys: { case Id.request.public_keys: {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras(); Bundle bundle = data.getExtras();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012-2013 Dominik Schürmann <dominik@dominikschuermann.de> * Copyright (C) 2012-2014 Dominik Schürmann <dominik@dominikschuermann.de>
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -56,7 +56,7 @@ public class KeyListPublicActivity extends DrawerActivity {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_key_list_public_import: case R.id.menu_key_list_public_import:
Intent intentImport = new Intent(this, ImportKeysActivity.class); Intent intentImport = new Intent(this, ImportKeysActivity.class);
startActivityForResult(intentImport, Id.request.import_from_qr_code); startActivityForResult(intentImport, 0);
return true; return true;
case R.id.menu_key_list_public_export: case R.id.menu_key_list_public_export:
@ -69,11 +69,8 @@ public class KeyListPublicActivity extends DrawerActivity {
} }
} }
@Override // @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
// switch (requestCode) { // switch (requestCode) {
// case Id.request.look_up_key_id: { // case Id.request.look_up_key_id: {
// if (resultCode == RESULT_CANCELED || data == null // if (resultCode == RESULT_CANCELED || data == null
@ -94,5 +91,5 @@ public class KeyListPublicActivity extends DrawerActivity {
// break; // break;
// } // }
// } // }
} // }
} }

View File

@ -91,11 +91,4 @@ public class KeyListSecretActivity extends DrawerActivity {
startActivityForResult(intent, 0); startActivityForResult(intent, 0);
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
} }

View File

@ -503,11 +503,4 @@ public class ViewKeyActivity extends SherlockFragmentActivity implements CreateN
} }
}; };
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!mExportHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012-2013 Dominik Schürmann <dominik@dominikschuermann.de> * Copyright (C) 2012-2014 Dominik Schürmann <dominik@dominikschuermann.de>
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -27,6 +27,7 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
@ -39,15 +40,12 @@ import android.widget.EditText;
import com.beardedhen.androidbootstrap.BootstrapButton; import com.beardedhen.androidbootstrap.BootstrapButton;
// TODO: return result from file manager activity to this dialog! not the activity!
// do it like in ImportFileFragment!
public class FileDialogFragment extends DialogFragment { public class FileDialogFragment extends DialogFragment {
private static final String ARG_MESSENGER = "messenger"; private static final String ARG_MESSENGER = "messenger";
private static final String ARG_TITLE = "title"; private static final String ARG_TITLE = "title";
private static final String ARG_MESSAGE = "message"; private static final String ARG_MESSAGE = "message";
private static final String ARG_DEFAULT_FILE = "default_file"; private static final String ARG_DEFAULT_FILE = "default_file";
private static final String ARG_CHECKBOX_TEXT = "checkbox_text"; private static final String ARG_CHECKBOX_TEXT = "checkbox_text";
private static final String ARG_REQUEST_CODE = "request_code";
public static final int MESSAGE_OKAY = 1; public static final int MESSAGE_OKAY = 1;
@ -60,11 +58,13 @@ public class FileDialogFragment extends DialogFragment {
private BootstrapButton mBrowse; private BootstrapButton mBrowse;
private CheckBox mCheckBox; private CheckBox mCheckBox;
private static final int REQUEST_CODE = 0x00007004;
/** /**
* Creates new instance of this file dialog fragment * Creates new instance of this file dialog fragment
*/ */
public static FileDialogFragment newInstance(Messenger messenger, String title, String message, public static FileDialogFragment newInstance(Messenger messenger, String title, String message,
String defaultFile, String checkboxText, int requestCode) { String defaultFile, String checkboxText) {
FileDialogFragment frag = new FileDialogFragment(); FileDialogFragment frag = new FileDialogFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putParcelable(ARG_MESSENGER, messenger); args.putParcelable(ARG_MESSENGER, messenger);
@ -73,7 +73,6 @@ public class FileDialogFragment extends DialogFragment {
args.putString(ARG_MESSAGE, message); args.putString(ARG_MESSAGE, message);
args.putString(ARG_DEFAULT_FILE, defaultFile); args.putString(ARG_DEFAULT_FILE, defaultFile);
args.putString(ARG_CHECKBOX_TEXT, checkboxText); args.putString(ARG_CHECKBOX_TEXT, checkboxText);
args.putInt(ARG_REQUEST_CODE, requestCode);
frag.setArguments(args); frag.setArguments(args);
@ -93,7 +92,6 @@ public class FileDialogFragment extends DialogFragment {
String message = getArguments().getString(ARG_MESSAGE); String message = getArguments().getString(ARG_MESSAGE);
String defaultFile = getArguments().getString(ARG_DEFAULT_FILE); String defaultFile = getArguments().getString(ARG_DEFAULT_FILE);
String checkboxText = getArguments().getString(ARG_CHECKBOX_TEXT); String checkboxText = getArguments().getString(ARG_CHECKBOX_TEXT);
final int requestCode = getArguments().getInt(ARG_REQUEST_CODE);
LayoutInflater inflater = (LayoutInflater) activity LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@ -112,7 +110,8 @@ public class FileDialogFragment extends DialogFragment {
// only .asc or .gpg files // only .asc or .gpg files
// setting it to text/plain prevents Cynaogenmod's file manager from selecting asc // setting it to text/plain prevents Cynaogenmod's file manager from selecting asc
// or gpg types! // or gpg types!
FileHelper.openFile(activity, mFilename.getText().toString(), "*/*", requestCode); FileHelper.openFile(FileDialogFragment.this, mFilename.getText().toString(), "*/*",
REQUEST_CODE);
} }
}); });
@ -166,7 +165,7 @@ public class FileDialogFragment extends DialogFragment {
* @param progress * @param progress
* @param max * @param max
*/ */
public void setFilename(String filename) { private void setFilename(String filename) {
AlertDialog dialog = (AlertDialog) getDialog(); AlertDialog dialog = (AlertDialog) getDialog();
EditText filenameEditText = (EditText) dialog.findViewById(R.id.input); EditText filenameEditText = (EditText) dialog.findViewById(R.id.input);
@ -175,6 +174,32 @@ public class FileDialogFragment extends DialogFragment {
} }
} }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode & 0xFFFF) {
case REQUEST_CODE: {
if (resultCode == Activity.RESULT_OK && data != null) {
try {
String path = data.getData().getPath();
Log.d(Constants.TAG, "path=" + path);
// set filename used in export/import dialogs
setFilename(path);
} catch (NullPointerException e) {
Log.e(Constants.TAG, "Nullpointer while retrieving path!", e);
}
}
break;
}
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
/** /**
* Send message back to handler which is initialized in a activity * Send message back to handler which is initialized in a activity
* *