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

Commit 5db22756 authored by Yuri Lin's avatar Yuri Lin Committed by Automerger Merge Worker
Browse files

Merge "Disable zen rule preferences with invalid activities" into tm-qpr-dev...

Merge "Disable zen rule preferences with invalid activities" into tm-qpr-dev am: dc4100f1 am: de8a27b4

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20725886



Change-Id: I4c0309a1b5773d6d92c0f43ba631571e2b375e49
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 5f08e8ac de8a27b4
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.ScheduleInfo;
import android.util.Log;

import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
@@ -34,9 +36,11 @@ import com.android.settings.utils.ZenServiceListing;
import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;

import java.util.List;
import java.util.Map;

public class ZenRulePreference extends PrimarySwitchPreference {
    private static final String TAG = "ZenRulePreference";
    private static final ManagedServiceSettings.Config CONFIG =
            ZenModeAutomationSettings.getConditionProviderConfig();
    final String mId;
@@ -121,8 +125,14 @@ public class ZenRulePreference extends PrimarySwitchPreference {
                getSettingsActivity(mPm, rule, si);
        mIntent = AbstractZenModeAutomaticRulePreferenceController.getRuleIntent(action,
                settingsActivity, mId);
        if (mIntent.resolveActivity(mPm) == null) {
        // If the intent's activity for this rule doesn't exist or resolve to anything, disable the
        // preference and rule.
        List<ResolveInfo> results = mPm.queryIntentActivities(
                mIntent, PackageManager.ResolveInfoFlags.of(0));
        if (mIntent.resolveActivity(mPm) == null || results.size() == 0) {
            Log.w(TAG, "intent for zen rule invalid: " + mIntent);
            mIntent = null;
            setEnabled(false);
        }
        setKey(mId);
    }
+16 −0
Original line number Diff line number Diff line
@@ -21,9 +21,11 @@ import android.app.NotificationManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -45,6 +47,7 @@ import com.android.settings.utils.ZenServiceListing;
import java.lang.ref.WeakReference;
import java.text.Collator;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

@@ -113,6 +116,14 @@ public class ZenRuleSelectionDialog extends InstrumentedDialogFragment {
        }
    }

    // Returns whether the rule's configuration activity exists and is valid.
    private boolean isRuleActivityValid(final ZenRuleInfo ri) {
        Intent intent = new Intent().setComponent(ri.configurationActivity);
        List<ResolveInfo> results = mPm.queryIntentActivities(
                intent, PackageManager.ResolveInfoFlags.of(0));
        return intent.resolveActivity(mPm) != null && results.size() > 0;
    }

    private void bindType(final ZenRuleInfo ri) {
        try {
            ApplicationInfo info = mPm.getApplicationInfo(ri.packageName, 0);
@@ -122,6 +133,11 @@ public class ZenRuleSelectionDialog extends InstrumentedDialogFragment {
            ImageView iconView = v.findViewById(R.id.icon);
            ((TextView) v.findViewById(R.id.title)).setText(ri.title);
            if (!ri.isSystem) {
                // Omit rule if the externally provided rule activity is not valid.
                if (!isRuleActivityValid(ri)) {
                    Log.w(TAG, "rule configuration activity invalid: " + ri.configurationActivity);
                    return;
                }
                LoadIconTask task = new LoadIconTask(iconView);
                task.execute(info);