From 37864a9d42436081eb6132dc0c8b1e0868a15272 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Thu, 6 Aug 2015 01:59:11 +0530 Subject: updated OrbotHelper with silent start --- .../ui/dialog/AddEditKeyserverDialogFragment.java | 19 ++++-- .../ui/dialog/OrbotStartDialogFragment.java | 73 ++++++++++++++++------ .../ui/dialog/SupportInstallDialogFragment.java | 12 ++-- 3 files changed, 77 insertions(+), 27 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java index 691cc009d..47bc7dfda 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddEditKeyserverDialogFragment.java @@ -50,6 +50,7 @@ import android.widget.TextView.OnEditorActionListener; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; + import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.keyimport.HkpKeyserver; @@ -216,15 +217,25 @@ public class AddEditKeyserverDialogFragment extends DialogFragment implements On if (mVerifyKeyserverCheckBox.isChecked()) { final Preferences.ProxyPrefs proxyPrefs = Preferences.getPreferences(getActivity()) .getProxyPrefs(); - Runnable ignoreTor = new Runnable() { + OrbotHelper.DialogActions dialogActions = new OrbotHelper.DialogActions() { + @Override + public void onOrbotStarted() { + verifyConnection(keyserverUrl, + proxyPrefs.parcelableProxy.getProxy()); + } + @Override - public void run() { + public void onNeutralButton() { verifyConnection(keyserverUrl, null); } + + @Override + public void onCancel() { + // do nothing + } }; - if (OrbotHelper.putOrbotInRequiredState(R.string.orbot_ignore_tor, ignoreTor, proxyPrefs, - getActivity())) { + if (OrbotHelper.putOrbotInRequiredState(dialogActions, getActivity())) { verifyConnection(keyserverUrl, proxyPrefs.parcelableProxy.getProxy()); } } else { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/OrbotStartDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/OrbotStartDialogFragment.java index d1d22b6d7..b06e05c30 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/OrbotStartDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/OrbotStartDialogFragment.java @@ -18,15 +18,19 @@ package org.sufficientlysecure.keychain.ui.dialog; import android.app.Activity; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; import android.view.ContextThemeWrapper; +import android.view.View; +import android.widget.Button; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -43,8 +47,11 @@ public class OrbotStartDialogFragment extends DialogFragment { private static final String ARG_MESSAGE = "message"; private static final String ARG_MIDDLE_BUTTON = "middleButton"; + private static final int ORBOT_REQUEST_CODE = 1; + public static final int MESSAGE_MIDDLE_BUTTON = 1; - public static final int MESSAGE_DIALOG_DISMISSED = 2; // for either cancel or enable pressed + public static final int MESSAGE_DIALOG_CANCELLED = 2; // for either cancel or enable pressed + public static final int MESSAGE_ORBOT_STARTED = 3; // for either cancel or enable pressed public static OrbotStartDialogFragment newInstance(Messenger messenger, int title, int message, int middleButton) { Bundle args = new Bundle(); @@ -59,6 +66,7 @@ public class OrbotStartDialogFragment extends DialogFragment { return fragment; } + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -77,7 +85,7 @@ public class OrbotStartDialogFragment extends DialogFragment { @Override public void onClick(DialogInterface dialog, int which) { Message msg = Message.obtain(); - msg.what = MESSAGE_DIALOG_DISMISSED; + msg.what = MESSAGE_DIALOG_CANCELLED; try { messenger.send(msg); } catch (RemoteException e) { @@ -89,13 +97,11 @@ public class OrbotStartDialogFragment extends DialogFragment { } }); - builder.setPositiveButton(R.string.orbot_start_dialog_start, new DialogInterface.OnClickListener() { + builder.setNeutralButton(middleButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - getActivity().startActivityForResult(OrbotHelper.getOrbotStartIntent(), 1); - - Message msg = Message.obtain(); - msg.what = MESSAGE_DIALOG_DISMISSED; + Message msg = new Message(); + msg.what = MESSAGE_MIDDLE_BUTTON; try { messenger.send(msg); } catch (RemoteException e) { @@ -106,21 +112,52 @@ public class OrbotStartDialogFragment extends DialogFragment { } }); - builder.setNeutralButton(middleButton, new DialogInterface.OnClickListener() { + builder.setPositiveButton(R.string.orbot_start_dialog_start, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Message msg = new Message(); - msg.what = MESSAGE_MIDDLE_BUTTON; - try { - messenger.send(msg); - } catch (RemoteException e) { - Log.w(Constants.TAG, "Exception sending message, Is handler present?", e); - } catch (NullPointerException e) { - Log.w(Constants.TAG, "Messenger is null!", e); - } + // actual onClick defined in onStart, this is just to make the button appear } }); return builder.show(); } + + @Override + public void onStart() { + super.onStart(); + //super.onStart() is where dialog.show() is actually called on the underlying dialog, + // so we have to do it after this point + AlertDialog d = (AlertDialog) getDialog(); + if (d != null) { + Button positiveButton = d.getButton(Dialog.BUTTON_POSITIVE); + positiveButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + startActivityForResult(OrbotHelper.getShowOrbotStartIntent(), + ORBOT_REQUEST_CODE); + } + }); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == ORBOT_REQUEST_CODE) { + // assume Orbot was started + final Messenger messenger = getArguments().getParcelable(ARG_MESSENGER); + + Message msg = Message.obtain(); + msg.what = MESSAGE_ORBOT_STARTED; + try { + messenger.send(msg); + } catch (RemoteException e) { + Log.w(Constants.TAG, "Exception sending message, Is handler present?", e); + } catch (NullPointerException e) { + Log.w(Constants.TAG, "Messenger is null!", e); + } + dismiss(); + } + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SupportInstallDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SupportInstallDialogFragment.java index b2b71b364..82d1be4ed 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SupportInstallDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/SupportInstallDialogFragment.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui.dialog; import android.app.Dialog; import android.os.Bundle; import android.os.Messenger; +import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import org.sufficientlysecure.keychain.ui.util.InstallDialogFragmentHelper; @@ -34,7 +35,7 @@ public class SupportInstallDialogFragment extends DialogFragment { * and "Cancel") and an optional third button. Callbacks are provided only for the middle button, if set. * * @param messenger required only for callback from middle button if it has been set - * @param title + * @param title xml resource for title of the install dialog * @param message content of dialog * @param packageToInstall package name of application to install * @param middleButton if not null, adds a third button to the app with a call back @@ -57,16 +58,17 @@ public class SupportInstallDialogFragment extends DialogFragment { /** * To create a DialogFragment with only two buttons * - * @param title - * @param message - * @param packageToInstall + * @param title xml string resource for title of the dialog + * @param message xml string resource to display as dialog body + * @param packageToInstall name of package to install * @return */ public static SupportInstallDialogFragment newInstance(int title, int message, - String packageToInstall) { + String packageToInstall) { return newInstance(null, title, message, packageToInstall, -1, false); } + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { -- cgit v1.2.3