diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b38cea74f7b..02351e5238f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2645,6 +2645,10 @@
android:value="true" />
+
+
+
onAllow();
+ p.mNegativeButtonText = getString(R.string.deny);
+ p.mNegativeButtonListener = (a, b) -> cancel();
+ AlertController
+ .create(this, this, getWindow())
+ .installContent(p);
+ }
+
+ private void onAllow() {
+ String requiredPermission = Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE;
+ try {
+ ServiceInfo serviceInfo = getPackageManager().getServiceInfo(mComponentName, 0);
+ if (!requiredPermission.equals(serviceInfo.permission)) {
+ Slog.e(LOG_TAG,
+ "Service " + mComponentName + " lacks permission " + requiredPermission);
+ return;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Slog.e(LOG_TAG, "Failed to get service info for " + mComponentName, e);
+ return;
+ }
+
+ final SettingsStringUtil.SettingStringHelper setting =
+ new SettingsStringUtil.SettingStringHelper(
+ getContentResolver(),
+ Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
+ mUserId);
+ setting.write(SettingsStringUtil.ComponentNameSet.add(setting.read(), mComponentName));
+
+ finish();
+ }
+
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+ return AlertActivity.dispatchPopulateAccessibilityEvent(this, event);
+ }
+
+ @Override
+ public void cancel() {
+ finish();
+ }
+
+ @Override
+ public void dismiss() {
+ // This is called after the click, since we finish when handling the
+ // click, don't do that again here.
+ if (!isFinishing()) {
+ finish();
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mTouchOverlayManager.setOverlayAllowed(false);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mTouchOverlayManager.setOverlayAllowed(true);
+ }
+}