1707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski/*
2707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * Copyright (C) 2016 The Android Open Source Project
3707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski *
4707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * Licensed under the Apache License, Version 2.0 (the "License");
5707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * you may not use this file except in compliance with the License.
6707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * You may obtain a copy of the License at
7707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski *
8707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski *      http://www.apache.org/licenses/LICENSE-2.0
9707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski *
10707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * Unless required by applicable law or agreed to in writing, software
11707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * distributed under the License is distributed on an "AS IS" BASIS,
12707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * See the License for the specific language governing permissions and
14707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * limitations under the License.
15707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski */
16707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskipackage com.android.settings;
17707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
18707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.annotation.Nullable;
19707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.app.Activity;
20707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.app.AlertDialog;
21707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.app.admin.DevicePolicyManager;
22707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.content.DialogInterface;
23707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.content.Intent;
24707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.os.Bundle;
25707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.os.UserHandle;
26707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.util.Log;
27707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport android.widget.LinearLayout;
28707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
29707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskiimport com.android.settings.R;
30707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
31707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski/**
32707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * UI for the remote bugreport dialog. Shows one of 3 possible dialogs:
33707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * <ul>
34707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * <li>bugreport is still being taken and can be shared or declined</li>
35707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * <li>bugreport has been taken and can be shared or declined</li>
36707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * <li>bugreport has already been accepted to be shared, but is still being taken</li>
37707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski * </ul>
38707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski */
39707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinskipublic class RemoteBugreportActivity extends Activity {
40707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
41707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski    private static final String TAG = "RemoteBugreportActivity";
42707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
43707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski    @Override
44707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski    protected void onCreate(@Nullable Bundle savedInstanceState) {
45707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        super.onCreate(savedInstanceState);
46707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
47707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        final int notificationType = getIntent().getIntExtra(
48707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                DevicePolicyManager.EXTRA_BUGREPORT_NOTIFICATION_TYPE, -1);
49707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski
50707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
51707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski            AlertDialog dialog = new AlertDialog.Builder(this)
52707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setMessage(R.string.sharing_remote_bugreport_dialog_message)
53707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setOnDismissListener(new DialogInterface.OnDismissListener() {
54707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        @Override
55707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        public void onDismiss(DialogInterface dialog) {
56707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            finish();
57707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        }
58707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    })
59707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
60707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        @Override
61707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        public void onClick(DialogInterface dialog, int which) {
62707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            finish();
63707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        }
64707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    })
65707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .create();
66707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski            dialog.show();
67707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        } else if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
68707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                || notificationType
69707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        == DevicePolicyManager.NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
70707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski            AlertDialog dialog = new AlertDialog.Builder(this)
71707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setTitle(R.string.share_remote_bugreport_dialog_title)
72707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setMessage(notificationType
73707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
74707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            ? R.string.share_remote_bugreport_dialog_message
75707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            : R.string.share_remote_bugreport_dialog_message_finished)
76707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setOnDismissListener(new DialogInterface.OnDismissListener() {
77707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        @Override
78707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        public void onDismiss(DialogInterface dialog) {
79707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            finish();
80707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        }
81707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    })
82707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setNegativeButton(R.string.decline_remote_bugreport_action,
83707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            new DialogInterface.OnClickListener() {
84707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        @Override
85707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        public void onClick(DialogInterface dialog, int which) {
86707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            Intent intent = new Intent(
87707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                                    DevicePolicyManager.ACTION_BUGREPORT_SHARING_DECLINED);
88707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            RemoteBugreportActivity.this.sendBroadcastAsUser(intent,
89707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                                    UserHandle.SYSTEM, android.Manifest.permission.DUMP);
90707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            finish();
91707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        }
92707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    })
93707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .setPositiveButton(R.string.share_remote_bugreport_action,
94707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            new DialogInterface.OnClickListener() {
95707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        @Override
96707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        public void onClick(DialogInterface dialog, int which) {
97707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            Intent intent = new Intent(
98707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                                    DevicePolicyManager.ACTION_BUGREPORT_SHARING_ACCEPTED);
99707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            RemoteBugreportActivity.this.sendBroadcastAsUser(intent,
100707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                                    UserHandle.SYSTEM, android.Manifest.permission.DUMP);
101707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                            finish();
102707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                        }
103707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    })
104707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski                    .create();
105707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski            dialog.show();
106707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        } else {
107707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski            Log.e(TAG, "Incorrect dialog type, no dialog shown. Received: " + notificationType);
108707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski        }
109707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski    }
110707f42f01d1f5e5caddb133a8f38b7edbdd458b5Michal Karpinski}
111