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