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