// Copyright 2015 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.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AlertDialog; import org.chromium.chrome.R; import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics; /** * Shows the dialog that explains the user the consequences of signing out of Chrome. * Calls the listener callback if the user signs out. */ public class SignOutDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { /** * The extra key used to specify the GAIA service that triggered this dialog. */ public static final String SHOW_GAIA_SERVICE_TYPE_EXTRA = "ShowGAIAServiceType"; /** * Receives updates when the user clicks "Sign out" or dismisses the dialog. */ public interface SignOutDialogListener { /** * Called when the user clicks "Sign out". */ public void onSignOutClicked(); /** * Called when the dialog is dismissed. * * @param signOutClicked Whether the user clicked the "sign out" button before the dialog * was dismissed. */ public void onSignOutDialogDismissed(boolean signOutClicked); } private boolean mSignOutClicked; /** * The GAIA service that's prompted this dialog. Values can be any constant in * signin::GAIAServiceType */ private int mGaiaServiceType; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mGaiaServiceType = AccountManagementScreenHelper.GAIA_SERVICE_TYPE_NONE; if (getArguments() != null) { mGaiaServiceType = getArguments().getInt( SHOW_GAIA_SERVICE_TYPE_EXTRA, mGaiaServiceType); } String managementDomain = SigninManager.get(getActivity()).getManagementDomain(); String message; if (managementDomain == null) { message = getActivity().getResources().getString(R.string.signout_message); } else { message = getActivity().getResources().getString( R.string.signout_managed_account_message, managementDomain); } return new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme) .setTitle(R.string.signout_title) .setPositiveButton(R.string.signout_dialog_positive_button, this) .setNegativeButton(R.string.cancel, this) .setMessage(message) .create(); } @Override public void onClick(DialogInterface dialog, int which) { if (which == AlertDialog.BUTTON_POSITIVE) { AccountManagementScreenHelper.logEvent( ProfileAccountManagementMetrics.SIGNOUT_SIGNOUT, mGaiaServiceType); mSignOutClicked = true; SignOutDialogListener targetFragment = (SignOutDialogListener) getTargetFragment(); targetFragment.onSignOutClicked(); } } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); AccountManagementScreenHelper.logEvent( ProfileAccountManagementMetrics.SIGNOUT_CANCEL, mGaiaServiceType); SignOutDialogListener targetFragment = (SignOutDialogListener) getTargetFragment(); targetFragment.onSignOutDialogDismissed(mSignOutClicked); } }