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

Commit 96ab2b9e authored by Hani Kazmi's avatar Hani Kazmi
Browse files

Wired remaining SpecialAppAccess for ECM.

This change enables the remaining settings for ECM, and adds tests for
both this and previous ECM changes.

Bug: 297372999
Test: Tested on device
Test: atest SpaPrivilegedLibTests
Test: atest com.android.settings.applications.specialaccess.notificationaccess
Test: atest com.android.settings.datausage
Test: atest PremiumSmsAccessTest
Test: atest RestrictedPreferenceHelperTest
Change-Id: I73d39d765dba0c1a75111c37b29ccf1c85d2cdd8
parent 73b273d7
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.view.View;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceScreen;
@@ -38,6 +37,7 @@ import com.android.settings.applications.AppStateSmsPremBridge.SmsState;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.EmptyTextSettings;
import com.android.settingslib.RestrictedDropDownPreference;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.Callbacks;
@@ -52,6 +52,8 @@ import java.util.ArrayList;
public class PremiumSmsAccess extends EmptyTextSettings
        implements Callback, Callbacks, OnPreferenceChangeListener {

    private static final String ECM_RESTRICTION_KEY = "android:premium_sms_access";

    private ApplicationsState mApplicationsState;
    private AppStateSmsPremBridge mSmsBackend;
    private Session mSession;
@@ -205,7 +207,7 @@ public class PremiumSmsAccess extends EmptyTextSettings

    }

    private class PremiumSmsPreference extends DropDownPreference {
    private class PremiumSmsPreference extends RestrictedDropDownPreference {
        private final AppEntry mAppEntry;

        public PremiumSmsPreference(AppEntry appEntry, Context context) {
@@ -224,6 +226,8 @@ public class PremiumSmsAccess extends EmptyTextSettings
            });
            setValue(String.valueOf(getCurrentValue()));
            setSummary("%s");
            this.checkEcmRestrictionAndSetDisabled(ECM_RESTRICTION_KEY, appEntry.info.packageName,
                    appEntry.info.uid);
        }

        private int getCurrentValue() {
+21 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.UserHandle;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceViewHolder;

import com.android.settings.R;
@@ -36,6 +37,7 @@ import com.android.settingslib.widget.AppSwitchPreference;

public class UnrestrictedDataAccessPreference extends AppSwitchPreference implements
        DataSaverBackend.Listener {
    private static final String ECM_RESTRICTION_KEY = "android:unrestricted_data_access";

    private final ApplicationsState mApplicationsState;
    private final AppEntry mEntry;
@@ -58,6 +60,8 @@ public class UnrestrictedDataAccessPreference extends AppSwitchPreference implem
        mParentFragment = parentFragment;
        setDisabledByAdmin(checkIfMeteredDataUsageUserControlDisabled(
                context, entry.info.packageName, UserHandle.getUserId(entry.info.uid)));
        mHelper.checkEcmRestrictionAndSetDisabled(ECM_RESTRICTION_KEY, entry.info.packageName,
                entry.info.uid);
        updateState();
        setKey(generateKey(mEntry));

@@ -166,10 +170,25 @@ public class UnrestrictedDataAccessPreference extends AppSwitchPreference implem
        return mHelper.isDisabledByAdmin();
    }

    @VisibleForTesting
    boolean isDisabledByEcm() {
        return mHelper.isDisabledByEcm();
    }

    public void setDisabledByAdmin(EnforcedAdmin admin) {
        mHelper.setDisabledByAdmin(admin);
    }

    /**
     * Checks if the given setting is subject to Enhanced Confirmation Mode restrictions for this
     * package. Marks the preference as disabled if so.
     * @param packageName the package to check the restriction for
     * @param uid the uid of the package
     */
    public void checkEcmRestrictionAndSetDisabled(@Nullable String packageName, int uid) {
        mHelper.checkEcmRestrictionAndSetDisabled(ECM_RESTRICTION_KEY, packageName, uid);
    }

    // Sets UI state based on allowlist/denylist status.
    public void updateState() {
        setTitle(mEntry.label);
@@ -179,7 +198,8 @@ public class UnrestrictedDataAccessPreference extends AppSwitchPreference implem
                setSummary(com.android.settingslib.widget.restricted.R.string.disabled_by_admin);
            } else if (mDataUsageState.isDataSaverDenylisted) {
                setSummary(R.string.restrict_background_blocklisted);
            } else {
            // If disabled by ECM, the summary is set directly by the switch.
            } else if (!isDisabledByEcm()) {
                setSummary("");
            }
        }
+2 −0
Original line number Diff line number Diff line
@@ -151,6 +151,8 @@ public class UnrestrictedDataAccessPreferenceController extends BasePreferenceCo
            } else {
                preference.setDisabledByAdmin(checkIfMeteredDataUsageUserControlDisabled(mContext,
                        entry.info.packageName, UserHandle.getUserId(entry.info.uid)));
                preference.checkEcmRestrictionAndSetDisabled(entry.info.packageName,
                        entry.info.uid);
                preference.updateState();
            }
            preference.setOrder(i);
+4 −2
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@ import com.android.settings.applications.specialaccess.zenaccess.ZenAccessDetail
import com.android.settings.applications.specialaccess.zenaccess.ZenAccessSettingObserverMixin;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.EmptyTextSettings;
import com.android.settings.widget.RestrictedAppPreference;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.AppPreference;

import java.util.ArrayList;
import java.util.Collections;
@@ -122,7 +122,7 @@ public class ZenAccessSettings extends EmptyTextSettings implements
        for (ApplicationInfo app : apps) {
            final String pkg = app.packageName;
            final CharSequence label = app.loadLabel(mPkgMan);
            final AppPreference pref = new AppPreference(getPrefContext());
            final RestrictedAppPreference pref = new RestrictedAppPreference(getPrefContext());
            pref.setKey(pkg);
            pref.setIcon(app.loadIcon(mPkgMan));
            pref.setTitle(label);
@@ -133,6 +133,8 @@ public class ZenAccessSettings extends EmptyTextSettings implements
            } else {
                // Not auto approved, update summary according to notification backend.
                pref.setSummary(getPreferenceSummary(pkg));
                pref.checkEcmRestrictionAndSetDisabled(
                        android.Manifest.permission.MANAGE_NOTIFICATIONS, app.packageName, app.uid);
            }
            pref.setOnPreferenceClickListener(preference -> {
                AppInfoBase.startAppInfoFragment(
+9 −3
Original line number Diff line number Diff line
@@ -37,14 +37,14 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceScreen;
import androidx.preference.TwoStatePreference;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.widget.EmptyTextSettings;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.applications.ServiceListing;
import com.android.settingslib.widget.AppSwitchPreference;
import com.android.settingslib.widget.TwoTargetPreference;

import java.util.List;

@@ -121,10 +121,12 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings {
            }
            final CharSequence finalTitle = title;
            final String summary = service.loadLabel(mPm).toString();
            final TwoStatePreference pref = new AppSwitchPreference(getPrefContext());
            final RestrictedSwitchPreference pref =
                    new RestrictedSwitchPreference(getPrefContext());
            pref.setPersistent(false);
            pref.setIcon(mIconDrawableFactory.getBadgedIcon(service, service.applicationInfo,
                    UserHandle.getUserId(service.applicationInfo.uid)));
            pref.setIconSize(TwoTargetPreference.ICON_SIZE_MEDIUM);
            if (title != null && !title.equals(summary)) {
                pref.setTitle(title);
                pref.setSummary(summary);
@@ -150,6 +152,10 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings {
                }
            });
            pref.setKey(cn.flattenToString());
            if (!pref.isChecked()) {
                pref.checkEcmRestrictionAndSetDisabled(mConfig.permission, service.packageName,
                        service.applicationInfo.uid);
            }
            screen.addPreference(pref);
        }
        highlightPreferenceIfNeeded();
Loading