1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.systemui; 16 17 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; 18 19 import android.app.Activity; 20 import android.app.AlertDialog; 21 import android.app.slice.SliceManager; 22 import android.app.slice.SliceProvider; 23 import android.content.DialogInterface; 24 import android.content.DialogInterface.OnClickListener; 25 import android.content.DialogInterface.OnDismissListener; 26 import android.content.pm.PackageManager; 27 import android.content.pm.PackageManager.NameNotFoundException; 28 import android.net.Uri; 29 import android.os.Bundle; 30 import android.text.BidiFormatter; 31 import android.util.Log; 32 import android.widget.CheckBox; 33 import android.widget.TextView; 34 35 public class SlicePermissionActivity extends Activity implements OnClickListener, 36 OnDismissListener { 37 38 private static final String TAG = "SlicePermissionActivity"; 39 40 private CheckBox mAllCheckbox; 41 42 private Uri mUri; 43 private String mCallingPkg; 44 private String mProviderPkg; 45 46 @Override onCreate(Bundle savedInstanceState)47 protected void onCreate(Bundle savedInstanceState) { 48 super.onCreate(savedInstanceState); 49 50 mUri = getIntent().getParcelableExtra(SliceProvider.EXTRA_BIND_URI); 51 mCallingPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PKG); 52 mProviderPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PROVIDER_PKG); 53 54 try { 55 PackageManager pm = getPackageManager(); 56 CharSequence app1 = BidiFormatter.getInstance().unicodeWrap( 57 pm.getApplicationInfo(mCallingPkg, 0).loadSafeLabel(pm).toString()); 58 CharSequence app2 = BidiFormatter.getInstance().unicodeWrap( 59 pm.getApplicationInfo(mProviderPkg, 0).loadSafeLabel(pm).toString()); 60 AlertDialog dialog = new AlertDialog.Builder(this) 61 .setTitle(getString(R.string.slice_permission_title, app1, app2)) 62 .setView(R.layout.slice_permission_request) 63 .setNegativeButton(R.string.slice_permission_deny, this) 64 .setPositiveButton(R.string.slice_permission_allow, this) 65 .setOnDismissListener(this) 66 .create(); 67 dialog.getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); 68 dialog.show(); 69 TextView t1 = dialog.getWindow().getDecorView().findViewById(R.id.text1); 70 t1.setText(getString(R.string.slice_permission_text_1, app2)); 71 TextView t2 = dialog.getWindow().getDecorView().findViewById(R.id.text2); 72 t2.setText(getString(R.string.slice_permission_text_2, app2)); 73 mAllCheckbox = dialog.getWindow().getDecorView().findViewById( 74 R.id.slice_permission_checkbox); 75 mAllCheckbox.setText(getString(R.string.slice_permission_checkbox, app1)); 76 } catch (NameNotFoundException e) { 77 Log.e(TAG, "Couldn't find package", e); 78 finish(); 79 } 80 } 81 82 @Override onClick(DialogInterface dialog, int which)83 public void onClick(DialogInterface dialog, int which) { 84 if (which == DialogInterface.BUTTON_POSITIVE) { 85 getSystemService(SliceManager.class).grantPermissionFromUser(mUri, mCallingPkg, 86 mAllCheckbox.isChecked()); 87 } 88 finish(); 89 } 90 91 @Override onDismiss(DialogInterface dialog)92 public void onDismiss(DialogInterface dialog) { 93 finish(); 94 } 95 } 96