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); + } +}