1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/* 2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copyright (C) 2011 The Android Open Source Project 3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Licensed under the Apache License, Version 2.0 (the "License"); 5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * you may not use this file except in compliance with the License. 6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * You may obtain a copy of the License at 7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * http://www.apache.org/licenses/LICENSE-2.0 9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unless required by applicable law or agreed to in writing, software 11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS, 12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * See the License for the specific language governing permissions and 14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * limitations under the License. 15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage com.android.email.activity; 18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.email.AttachmentInfo; 20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.email.R; 21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.app.AlertDialog; 23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.app.Dialog; 24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.app.DialogFragment; 25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.Context; 26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.DialogInterface; 27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.DialogInterface.OnClickListener; 28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.Intent; 29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.res.Resources; 30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.os.Bundle; 31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.provider.Settings; 32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/** 34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * "Info" dialog box 35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class AttachmentInfoDialog extends DialogFragment { 37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook private static final String BUNDLE_TITLE = "title"; 38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook private static final String BUNDLE_BODY_TEXT = "body_text"; 39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook private static final String BUNDLE_ACTION_TEXT = "action_text"; 40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook private static final String BUNDLE_ACTION_INTENT = "action_intent"; 41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook /** 43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Returns a new dialog instance 44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */ 45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static AttachmentInfoDialog newInstance(Context context, int denyFlags) { 46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Resources res = context.getResources(); 47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String title = res.getString(R.string.attachment_info_dialog_default_title); 48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String bodyText = res.getString(R.string.attachment_info_unknown); 49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String actionText = null; 50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Intent actionIntent = null; 51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // NOTE: Order here matters. There can be multiple reasons for denying an attachment, 53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // so, we want to show the most important ones first (i.e. it's pointless to tell the 54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // user to connect to wi-fi to download a 30mb attachment that is suspected of being 55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook // malware). 56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if ((denyFlags & AttachmentInfo.DENY_MALWARE) != 0) { 57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_malware); 58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else if ((denyFlags & AttachmentInfo.DENY_POLICY) != 0) { 59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_policy); 60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else if ((denyFlags & AttachmentInfo.DENY_NOINTENT) != 0) { 61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_no_intent); 62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else if ((denyFlags & AttachmentInfo.DENY_NOSIDELOAD) != 0) { 63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_sideload_disabled); 64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionText = res.getString(R.string.attachment_info_application_settings); 65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else if ((denyFlags & AttachmentInfo.DENY_APKINSTALL) != 0) { 69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_apk_install_disabled); 70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } else if ((denyFlags & AttachmentInfo.DENY_WIFIONLY) != 0) { 71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook title = res.getString(R.string.attachment_info_dialog_wifi_title); 72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook bodyText = res.getString(R.string.attachment_info_wifi_only); 73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionText = res.getString(R.string.attachment_info_wifi_settings); 74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent = new Intent(Settings.ACTION_WIFI_SETTINGS); 75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook actionIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook AttachmentInfoDialog dialog = new AttachmentInfoDialog(); 79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Bundle args = new Bundle(); 80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook args.putString(BUNDLE_TITLE, title); 81bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook args.putString(BUNDLE_BODY_TEXT, bodyText); 82bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook args.putString(BUNDLE_ACTION_TEXT, actionText); 83bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook args.putParcelable(BUNDLE_ACTION_INTENT, actionIntent); 84bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook dialog.setArguments(args); 85bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return dialog; 86bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 87bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 88bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook @Override 89bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public Dialog onCreateDialog(Bundle savedInstanceState) { 90bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Bundle args = getArguments(); 91bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Context context = getActivity(); 92bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String title = args.getString(BUNDLE_TITLE); 93bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String infoText = args.getString(BUNDLE_BODY_TEXT); 94bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook String actionText = args.getString(BUNDLE_ACTION_TEXT); 95bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook final Intent actionIntent = args.getParcelable(BUNDLE_ACTION_INTENT); 96bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 97bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook OnClickListener onClickListener = new OnClickListener() { 98bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook @Override 99bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void onClick(DialogInterface dialog, int which) { 100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook switch (which) { 101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook case DialogInterface.BUTTON_POSITIVE: 102bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook startActivity(actionIntent); 103bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook break; 104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook case DialogInterface.BUTTON_NEUTRAL: 105bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook dialog.dismiss(); 106bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook break; 107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 108bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook }; 110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook 111bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook AlertDialog.Builder builder = new AlertDialog.Builder(context); 112bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook builder.setTitle(title); 113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook builder.setMessage(infoText); 114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook builder.setNeutralButton(R.string.okay_action, onClickListener); 115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook if (actionText != null && actionIntent != null) { 116bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook builder.setPositiveButton(actionText, onClickListener); 117bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return builder.show(); 119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook } 120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook} 121