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