176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler/*
276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Copyright (C) 2014 The Android Open Source Project
376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * you may not use this file except in compliance with the License.
676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * You may obtain a copy of the License at
776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
1076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Unless required by applicable law or agreed to in writing, software
1176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
1276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * See the License for the specific language governing permissions and
1476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * limitations under the License.
1576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler */
1676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
1776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerpackage com.android.email.activity.setup;
1876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
1976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.AlertDialog;
2076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.Dialog;
2176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.DialogFragment;
2276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.Context;
2376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.DialogInterface;
2476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.os.Bundle;
2576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
2676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.email.R;
2776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
2876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler/**
2976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * The "security required" error dialog.  This is presented whenever an exchange account
3076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * reports that it will require security policy control, and provide the user with the
3176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * opportunity to accept or deny this.
3276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
3376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * If the user clicks OK, calls onSecurityRequiredDialogResultOk(true) which reports back
3476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * to the target as if the settings check was "ok".  If the user clicks "cancel", calls
3576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * onSecurityRequiredDialogResultOk(false) which simply closes the checker (this is the
3676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * same as any other failed check.)
3776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler */
3876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
3976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerpublic class SecurityRequiredDialogFragment extends DialogFragment {
4076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public final static String TAG = "SecurityRequiredDialog";
4176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // Bundle keys for arguments
4376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private final static String ARGS_HOST_NAME = "SecurityRequiredDialog.HostName";
4476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public interface Callback {
4676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        /**
4876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler         * Callback for the result of this dialog fragment
4976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler         * @param ok True for OK pressed, false for cancel
5076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler         */
5176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        void onSecurityRequiredDialogResult(boolean ok);
5276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
5376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
5476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // Public no-args constructor needed for fragment re-instantiation
5576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public SecurityRequiredDialogFragment() {}
5676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
5776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public static SecurityRequiredDialogFragment newInstance(String hostName) {
5876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final SecurityRequiredDialogFragment fragment = new SecurityRequiredDialogFragment();
5976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final Bundle arguments = new Bundle(1);
6076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        arguments.putString(ARGS_HOST_NAME, hostName);
6176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        fragment.setArguments(arguments);
6276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return fragment;
6376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
6476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
6576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    @Override
6676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public Dialog onCreateDialog(Bundle savedInstanceState) {
6776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final Context context = getActivity();
6876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final Bundle arguments = getArguments();
6976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final String hostName = arguments.getString(ARGS_HOST_NAME);
70254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler
71254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler        setCancelable(true);
7276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
7376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return new AlertDialog.Builder(context)
7476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .setIconAttribute(android.R.attr.alertDialogIcon)
7576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .setTitle(context.getString(R.string.account_setup_security_required_title))
7676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .setMessage(context.getString(
7776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        R.string.account_setup_security_policies_required_fmt, hostName))
7876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .setPositiveButton(
79254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler                        context.getString(android.R.string.ok),
8076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        new DialogInterface.OnClickListener() {
8176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            @Override
8276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            public void onClick(DialogInterface dialog, int which) {
8376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                dismiss();
84254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler                                final Callback callback = (Callback) getActivity();
8576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                callback.onSecurityRequiredDialogResult(true);
8676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            }
8776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        })
8876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .setNegativeButton(
89254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler                        context.getString(android.R.string.cancel),
9076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        new DialogInterface.OnClickListener() {
9176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            @Override
9276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            public void onClick(DialogInterface dialog, int which) {
93254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler                                dialog.cancel();
9476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            }
9576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        })
9676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                .create();
9776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
98254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler
99254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler    @Override
100254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler    public void onCancel(DialogInterface dialog) {
101254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler        super.onCancel(dialog);
102254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler        final Callback callback = (Callback) getActivity();
103254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler        if (callback != null) {
104254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler            callback.onSecurityRequiredDialogResult(false);
105254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler        }
106254dde761f1cfed028ba258ec56f6b239eb2fb02Tony Mantler    }
10776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler}
108