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