• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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