Index: chrome/android/java/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegate.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegate.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..90ba01ce503d86f5cb57dafc88b7355923de4229 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegate.java |
@@ -0,0 +1,133 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.signin; |
+ |
+import android.app.Dialog; |
+import android.content.Context; |
+import android.content.DialogInterface; |
+import android.support.v7.app.AlertDialog; |
+import android.view.LayoutInflater; |
+ |
+import org.chromium.chrome.R; |
+ |
+/** |
+ * Class to decouple ConfirmSyncDataStateMachine from UI code and dialog management. |
+ */ |
+public class ConfirmSyncDataStateMachineDelegate { |
+ /** |
+ * Listener to receive events from progress dialog. If dialog is not dismissed by calling |
msarda
2017/03/28 11:09:02
Nit: I would add a *the* in: "If *the* dialog ..."
bsazonov
2017/03/28 12:59:58
Done. I've also changed the same sentence in Timeo
msarda
2017/03/28 13:41:05
Acknowledged.
|
+ * {@link ConfirmSyncDataStateMachineDelegate#dismissProgressDialog}, then |
+ * {@link #onCancel} will be called once. |
+ */ |
+ public interface ProgressDialogListener { |
+ /** |
+ * This method is called when user cancels the dialog in any way. |
+ */ |
+ void onCancel(); |
+ } |
+ |
+ /** |
+ * Listener to receive events from timeout dialog. If dialog is not dismissed by calling |
+ * {@link ConfirmSyncDataStateMachineDelegate#dismissTimeoutDialog}, then |
+ * either {@link #onCancel} or {@link #onRetry} will be called once. |
+ */ |
+ public interface TimeoutDialogListener { |
+ /** |
+ * This method is called when user cancels the dialog in any way. |
+ */ |
+ void onCancel(); |
+ |
+ /** |
+ * This method is called when user clicks retry button. |
+ */ |
+ void onRetry(); |
+ } |
+ |
+ private final Context mContext; |
+ |
+ private Dialog mProgressDialog; |
+ private AlertDialog mTimeoutAlertDialog; |
+ |
+ public ConfirmSyncDataStateMachineDelegate(Context context) { |
+ mContext = context; |
+ } |
+ |
+ /** |
+ * Shows progress dialog. Will dismiss previous progress dialog, if any. |
+ * |
+ * @param listener The {@link ProgressDialogListener} that will be notified about user actions. |
+ */ |
+ public void showProgressDialog(final ProgressDialogListener listener) { |
msarda
2017/03/28 11:09:02
My understand is that this delegate is the generic
bsazonov
2017/03/28 12:59:58
Done. I think that "Management" fits better than "
|
+ dismissProgressDialog(); |
msarda
2017/03/28 11:09:02
Why does the previous dialog need to be dismissed
bsazonov
2017/03/28 12:59:58
Thanks for bringing this up. I've made this functi
msarda
2017/03/28 13:41:05
I think we should not have this call be done in th
bsazonov
2017/03/29 13:05:05
Done. I've added dismissAllDialogs instead of sepa
|
+ AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.AlertDialogTheme); |
msarda
2017/03/28 11:09:02
For consistency with the code below (and if it is
bsazonov
2017/03/28 12:59:58
See next comment.
|
+ LayoutInflater inflater = LayoutInflater.from(builder.getContext()); |
msarda
2017/03/28 11:09:02
Stupid question: Is builder.getContext() the same
bsazonov
2017/03/28 12:59:58
AFAIK, these context can be different (at least in
|
+ builder.setView(inflater.inflate(R.layout.signin_progress_bar_dialog, null)); |
+ builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { |
+ @Override |
+ public void onClick(DialogInterface dialogInterface, int i) { |
msarda
2017/03/28 11:09:02
For consistency, use dialog instead of dialogInter
bsazonov
2017/03/28 12:59:58
Done.
|
+ listener.onCancel(); |
msarda
2017/03/28 11:09:02
For consistency, please call dialogInterface.cance
bsazonov
2017/03/28 12:59:58
Done.
|
+ } |
+ }); |
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() { |
+ @Override |
+ public void onCancel(DialogInterface dialogInterface) { |
+ listener.onCancel(); |
+ } |
+ }); |
+ mProgressDialog = builder.create(); |
+ mProgressDialog.show(); |
+ } |
+ |
+ /** |
+ * Dismisses progress dialog. |
+ */ |
+ public void dismissProgressDialog() { |
+ if (mProgressDialog != null) mProgressDialog.dismiss(); |
+ mProgressDialog = null; |
+ } |
+ |
+ /** |
+ * Shows timeout dialog. Will dismiss previous timeout dialog, if any. |
+ * |
+ * @param listener The {@link TimeoutDialogListener} that will be notified about user actions. |
+ */ |
+ public void showTimeoutDialog(final TimeoutDialogListener listener) { |
msarda
2017/03/28 11:09:02
Same here: showFetchManagedPolicyTimeoutDialog
bsazonov
2017/03/28 12:59:58
Done.
|
+ dismissTimeoutDialog(); |
+ mTimeoutAlertDialog = |
+ new AlertDialog.Builder(mContext, R.style.AlertDialogTheme) |
+ .setTitle(R.string.sign_in_timeout_title) |
+ .setMessage(R.string.sign_in_timeout_message) |
+ .setNegativeButton(R.string.cancel, |
+ new DialogInterface.OnClickListener() { |
+ @Override |
+ public void onClick(DialogInterface dialog, int which) { |
+ dialog.cancel(); |
+ } |
+ }) |
+ .setPositiveButton(R.string.retry, |
+ new DialogInterface.OnClickListener() { |
+ @Override |
+ public void onClick(DialogInterface dialog, int which) { |
+ listener.onRetry(); |
+ } |
+ }) |
+ .setOnCancelListener(new DialogInterface.OnCancelListener() { |
+ @Override |
+ public void onCancel(DialogInterface dialogInterface) { |
+ listener.onCancel(); |
+ } |
+ }) |
+ .create(); |
+ mTimeoutAlertDialog.show(); |
+ } |
+ |
+ /** |
+ * Dismisses timeout dialog. |
+ */ |
+ public void dismissTimeoutDialog() { |
+ if (mTimeoutAlertDialog != null) mTimeoutAlertDialog.dismiss(); |
+ mTimeoutAlertDialog = null; |
+ } |
+} |