Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0fe992cc authored by /e/ robot's avatar /e/ robot
Browse files

Merge remote-tracking branch 'origin/lineage-19.1' into v1-s

parents 5cfb43e7 9eed5425
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -23,10 +23,12 @@ import android.accounts.AccountManager;
import android.accounts.AuthenticatorDescription;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
@@ -39,6 +41,7 @@ import android.os.Environment;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.image.DynamicSystemManager;
import android.provider.Settings;
import android.sysprop.VoldProperties;
import android.telephony.euicc.EuiccManager;
@@ -262,6 +265,19 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis
                return;
            }

            final DynamicSystemManager dsuManager = (DynamicSystemManager)
                    getActivity().getSystemService(Context.DYNAMIC_SYSTEM_SERVICE);
            if (dsuManager.isInUse()) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle(R.string.dsu_is_running);
                builder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {}
                });
                AlertDialog dsuAlertdialog = builder.create();
                dsuAlertdialog.show();
                return;
            }

            if (runKeyguardConfirmation(KEYGUARD_REQUEST)) {
                return;
            }
+30 −20
Original line number Diff line number Diff line
@@ -29,12 +29,14 @@ import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
import android.text.TextUtils;
import android.util.Slog;
import android.view.WindowManager;
@@ -44,6 +46,8 @@ import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.settings.R;

import java.util.List;

/** @hide */
public class NotificationAccessConfirmationActivity extends Activity
        implements DialogInterface {
@@ -92,6 +96,31 @@ public class NotificationAccessConfirmationActivity extends Activity
            return;
        }

        // Check NLS service info.
        String requiredPermission = Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE;
        Intent NLSIntent = new Intent(NotificationListenerService.SERVICE_INTERFACE);
        List<ResolveInfo> matchedServiceList = getPackageManager().queryIntentServicesAsUser(
                NLSIntent, /* flags */ 0, mUserId);
        boolean hasNLSIntentFilter = false;
        for (ResolveInfo service : matchedServiceList) {
            if (service.serviceInfo.packageName.equals(mComponentName.getPackageName())) {
                if (!requiredPermission.equals(service.serviceInfo.permission)) {
                    Slog.e(LOG_TAG, "Service " + mComponentName + " lacks permission "
                            + requiredPermission);
                    finish();
                    return;
                }
                hasNLSIntentFilter = true;
                break;
            }
        }
        if (!hasNLSIntentFilter) {
            Slog.e(LOG_TAG, "Service " + mComponentName + " lacks an intent-filter action "
                    + "for android.service.notification.NotificationListenerService.");
            finish();
            return;
        }

        AlertController.AlertParams p = new AlertController.AlertParams(this);
        p.mTitle = getString(
                R.string.notification_listener_security_warning_title,
@@ -126,19 +155,6 @@ public class NotificationAccessConfirmationActivity extends Activity
    }

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

        mNm.setNotificationListenerAccessGranted(mComponentName, true);

        finish();
@@ -149,12 +165,6 @@ public class NotificationAccessConfirmationActivity extends Activity
        return AlertActivity.dispatchPopulateAccessibilityEvent(this, event);
    }

    @Override
    public void onBackPressed() {
        // Suppress finishing the activity on back button press,
        // consistently with the permission dialog behavior
    }

    @Override
    public void cancel() {
        finish();