From 32e70450e75edd5f5d61aaaf15cc61551e5ba3db Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Mon, 25 Nov 2013 12:36:49 +0100 Subject: [PATCH] Fix #322: add a _visit security settings_ button that open a browser in WordPress.com->Settings->Security to create an app specific password when 2FA is enabled and master password entered --- res/layout/nux_dialog_fragment.xml | 8 ++--- res/values/strings.xml | 2 +- .../ui/accounts/NUXDialogFragment.java | 32 ++++++++++++++++--- .../android/ui/accounts/SetupBlog.java | 2 +- .../android/ui/accounts/TutorialActivity.java | 4 ++- .../ui/accounts/WelcomeFragmentSignIn.java | 26 +++++++++------ 6 files changed, 54 insertions(+), 20 deletions(-) diff --git a/res/layout/nux_dialog_fragment.xml b/res/layout/nux_dialog_fragment.xml index 7574a1186ca0..d3ef8103762e 100644 --- a/res/layout/nux_dialog_fragment.xml +++ b/res/layout/nux_dialog_fragment.xml @@ -49,7 +49,7 @@ android:paddingBottom="8dp" android:paddingTop="8dp" android:textColor="@color/white" - android:textSize="18sp" + android:textSize="16sp" android:shadowColor="@color/black" android:shadowDx="0" android:shadowDy="1" @@ -81,9 +81,9 @@ @@ -91,7 +91,7 @@ Are you sure you want to sign out from WordPress.com? Are you sure you want to sign out? Please sign in again. - This account has two step authentication enabled. Please open WordPress.com in your browser, and generate an application-specific passwords to use with this app.\n(Log in to WordPress, and go to Settings->security). + This account has two step authentication enabled. Visit your security settings on WordPress.com and generate an application-specific password. Visit Security Settings diff --git a/src/org/wordpress/android/ui/accounts/NUXDialogFragment.java b/src/org/wordpress/android/ui/accounts/NUXDialogFragment.java index fee85676e947..9e23e9e0d1ee 100644 --- a/src/org/wordpress/android/ui/accounts/NUXDialogFragment.java +++ b/src/org/wordpress/android/ui/accounts/NUXDialogFragment.java @@ -1,5 +1,7 @@ package org.wordpress.android.ui.accounts; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; @@ -14,12 +16,14 @@ import org.wordpress.android.widgets.WPTextView; public class NUXDialogFragment extends SherlockDialogFragment { - private static String ARG_TITLE = "title"; private static String ARG_DESCRIPTION = "message"; private static String ARG_FOOTER = "footer"; private static String ARG_IMAGE = "image"; private static String ARG_TWO_BUTTONS = "two-buttons"; + private static String ARG_SECOND_BUTTON_LABEL = "second-btn-label"; + private static String ARG_SECOND_BUTTON_ACTION = "second-btn-action"; + private static String ARG_SECOND_BUTTON_PARAM = "second-btn-param"; private ImageView mImageView; private WPTextView mTitleTextView; @@ -29,17 +33,22 @@ public class NUXDialogFragment extends SherlockDialogFragment { private WPTextView mFooterRightButton; private RelativeLayout mFooterTwoButtons; + public static int ACTION_FINISH = 1; + public static int ACTION_OPEN_URL = 2; + public NUXDialogFragment() { // Empty constructor required for DialogFragment } public static NUXDialogFragment newInstance(String title, String message, String footer, int imageSource) { - return newInstance(title, message, footer, imageSource, false); + return newInstance(title, message, footer, imageSource, false, "", 0, ""); } public static NUXDialogFragment newInstance(String title, String message, String footer, - int imageSource, boolean twoButtons) { + int imageSource, boolean twoButtons, + String secondButtonLabel, int secondButtonAction, + String secondButtonParam) { NUXDialogFragment adf = new NUXDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(ARG_TITLE, title); @@ -47,6 +56,10 @@ public static NUXDialogFragment newInstance(String title, String message, String bundle.putString(ARG_FOOTER, footer); bundle.putInt(ARG_IMAGE, imageSource); bundle.putBoolean(ARG_TWO_BUTTONS, twoButtons); + bundle.putString(ARG_SECOND_BUTTON_LABEL, secondButtonLabel); + bundle.putInt(ARG_SECOND_BUTTON_ACTION, secondButtonAction); + bundle.putString(ARG_SECOND_BUTTON_PARAM, secondButtonParam); + adf.setArguments(bundle); adf.setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme); return adf; @@ -75,6 +88,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, if (args.getBoolean(ARG_TWO_BUTTONS)) { mFooterOneButton.setVisibility(View.GONE); mFooterTwoButtons.setVisibility(View.VISIBLE); + mFooterRightButton.setText(args.getString(ARG_SECOND_BUTTON_LABEL)); } View.OnClickListener clickListenerDismiss = new View.OnClickListener() { @@ -84,10 +98,20 @@ public void onClick(View v) { } }; + final int action = args.getInt(ARG_SECOND_BUTTON_ACTION, 0); + final String param = args.getString(ARG_SECOND_BUTTON_PARAM); + View.OnClickListener clickListenerFinish = new View.OnClickListener() { @Override public void onClick(View v) { - getActivity().finish(); + if (action == ACTION_FINISH) { + getActivity().finish(); + } + if (action == ACTION_OPEN_URL) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(param)); + startActivity(intent); + dismissAllowingStateLoss(); + } } }; diff --git a/src/org/wordpress/android/ui/accounts/SetupBlog.java b/src/org/wordpress/android/ui/accounts/SetupBlog.java index 630559cba7a8..ec63ea727806 100644 --- a/src/org/wordpress/android/ui/accounts/SetupBlog.java +++ b/src/org/wordpress/android/ui/accounts/SetupBlog.java @@ -28,7 +28,7 @@ public class SetupBlog { private String mHttpPassword = ""; private String mXmlrpcUrl; - private int mErrorMsgId = -1; + private int mErrorMsgId; private boolean mIsCustomUrl; private String mSelfHostedURL; diff --git a/src/org/wordpress/android/ui/accounts/TutorialActivity.java b/src/org/wordpress/android/ui/accounts/TutorialActivity.java index 9238e19295cc..a41a3c69ea48 100644 --- a/src/org/wordpress/android/ui/accounts/TutorialActivity.java +++ b/src/org/wordpress/android/ui/accounts/TutorialActivity.java @@ -87,7 +87,9 @@ public void onClick(View v) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); NUXDialogFragment alert = NUXDialogFragment.newInstance(getString(R.string.nux_dialog_success), getString(R.string.nux_dialog_success_message), - getString(R.string.nux_dialog_success_continue), R.drawable.nux_icon_check, true); + getString(R.string.nux_dialog_success_continue), R.drawable.nux_icon_check, true, + getString(R.string.nux_tutorial_get_started_title), + NUXDialogFragment.ACTION_FINISH, ""); alert.show(ft, "alert"); } diff --git a/src/org/wordpress/android/ui/accounts/WelcomeFragmentSignIn.java b/src/org/wordpress/android/ui/accounts/WelcomeFragmentSignIn.java index 79f92b248f94..47799c66a84f 100644 --- a/src/org/wordpress/android/ui/accounts/WelcomeFragmentSignIn.java +++ b/src/org/wordpress/android/ui/accounts/WelcomeFragmentSignIn.java @@ -178,7 +178,7 @@ protected void endProgress() { private class SetupBlogTask extends AsyncTask> { private SetupBlog mSetupBlog; - private String mErrorMsg; + private int mErrorMsgId; @Override protected void onPreExecute() { @@ -197,9 +197,7 @@ protected void onPreExecute() { @Override protected List doInBackground(Void... args) { List userBlogList = mSetupBlog.getBlogList(); - if (mSetupBlog.getErrorMsgId() != -1) { - mErrorMsg = getString(mSetupBlog.getErrorMsgId()); - } + mErrorMsgId = mSetupBlog.getErrorMsgId(); return userBlogList; } @@ -235,13 +233,23 @@ public void onClick(DialogInterface dialog, int whichButton) { return; } - if (usersBlogsList == null && mErrorMsg != null) { + if (usersBlogsList == null && mErrorMsgId != 0) { FragmentTransaction ft = getFragmentManager().beginTransaction(); - NUXDialogFragment nuxAlert = NUXDialogFragment - .newInstance(getString(R.string.nux_cannot_log_in), mErrorMsg, - getString(R.string.nux_tap_continue), R.drawable.nux_icon_alert); + NUXDialogFragment nuxAlert; + if (mErrorMsgId == R.string.account_two_step_auth_enabled) { + nuxAlert = NUXDialogFragment.newInstance(getString(R.string.nux_cannot_log_in), + getString(mErrorMsgId), getString(R.string.nux_tap_continue), + R.drawable.nux_icon_alert, true, + getString(R.string.visit_security_settings), + NUXDialogFragment.ACTION_OPEN_URL, + "https://wordpress.com/settings/security/?ssl=forced"); + } else { + nuxAlert = NUXDialogFragment.newInstance(getString(R.string.nux_cannot_log_in), + getString(mErrorMsgId), getString(R.string.nux_tap_continue), + R.drawable.nux_icon_alert); + } nuxAlert.show(ft, "alert"); - mErrorMsg = null; + mErrorMsgId = 0; endProgress(); return; }