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

Commit c7085cee authored by Paul Hadfield's avatar Paul Hadfield
Browse files

Revert "Fix onPackageChanged handling of disabled packages"

This reverts commit 33139c16.

Reason for revert: A CTS test is now flaky, see b/197093424

Change-Id: Ife432938448cc24bb2a61fa30873270bcf2ee1a7
parent 33139c16
Loading
Loading
Loading
Loading
+0 −42
Original line number Diff line number Diff line
@@ -16,9 +16,6 @@

package com.android.server.backup;

import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;

import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
@@ -60,7 +57,6 @@ import java.util.function.Predicate;
/** Handles in-memory bookkeeping of all BackupTransport objects. */
public class TransportManager {
    private static final String TAG = "BackupTransportManager";
    private static final boolean MORE_DEBUG = false;

    @VisibleForTesting
    public static final String SERVICE_ACTION_TRANSPORT_HOST = "android.backup.TRANSPORT_HOST";
@@ -132,52 +128,14 @@ public class TransportManager {
        }
    }

    void onPackageEnabled(String packageName) {
        onPackageAdded(packageName);
    }

    void onPackageDisabled(String packageName) {
        onPackageRemoved(packageName);
    }

    @WorkerThread
    void onPackageChanged(String packageName, String... components) {
        // Determine if the overall package has changed and not just its
        // components - see {@link EXTRA_CHANGED_COMPONENT_NAME_LIST}.  When we
        // know a package was enabled/disabled we'll handle that directly and
        // not continue with onPackageChanged.
        if (components.length == 1 && components[0].equals(packageName)) {
            final int enabled = mPackageManager.getApplicationEnabledSetting(packageName);
            switch (enabled) {
                case COMPONENT_ENABLED_STATE_ENABLED: {
                    if (MORE_DEBUG) {
                        Slog.d(TAG, "Package " + packageName + " was enabled.");
                    }
                    onPackageEnabled(packageName);
                    return;
                }
                case COMPONENT_ENABLED_STATE_DISABLED: {
                    if (MORE_DEBUG) {
                        Slog.d(TAG, "Package " + packageName + " was disabled.");
                    }
                    onPackageDisabled(packageName);
                    return;
                }
                default: {
                    Slog.w(TAG, "Package " + packageName + " enabled setting: " + enabled);
                    return;
                }
            }
        }
        // Unfortunately this can't be atomic because we risk a deadlock if
        // registerTransportsFromPackage() is put inside the synchronized block
        Set<ComponentName> transportComponents = new ArraySet<>(components.length);
        for (String componentName : components) {
            transportComponents.add(new ComponentName(packageName, componentName));
        }
        if (transportComponents.isEmpty()) {
            return;
        }
        synchronized (mTransportLock) {
            mRegisteredTransportsDescriptionMap.keySet().removeIf(transportComponents::contains);
        }
+0 −69
Original line number Diff line number Diff line
@@ -16,10 +16,6 @@

package com.android.server.backup;

import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;

import static com.android.server.backup.testing.TransportData.genericTransport;
import static com.android.server.backup.testing.TransportTestUtils.mockTransport;
import static com.android.server.backup.testing.TransportTestUtils.setUpTransportsForTransportManager;
@@ -315,71 +311,6 @@ public class TransportManagerTest {
                .onTransportRegistered(mTransportA2.transportName, mTransportA2.transportDirName);
    }

    @Test
    public void testOnPackageChanged_onPackageChanged_packageDisabledUnregistersTransport()
            throws Exception {
        TransportManager transportManager =
                createTransportManagerWithRegisteredTransports(mTransportA1, mTransportB1);
        reset(mListener);

        mContext.getPackageManager()
                .setApplicationEnabledSetting(
                        PACKAGE_A,
                        Integer.valueOf(COMPONENT_ENABLED_STATE_DISABLED),
                        0 /*flags*/);
        transportManager.onPackageChanged(PACKAGE_A, PACKAGE_A);

        assertRegisteredTransports(transportManager, singletonList(mTransportB1));
        verify(mListener, never()).onTransportRegistered(any(), any());
    }

    @Test
    public void testOnPackageChanged_onPackageChanged_packageEnabledRegistersTransport()
            throws Exception {
        TransportManager transportManager =
                createTransportManagerWithRegisteredTransports(mTransportA1, mTransportB1);
        reset(mListener);

        mContext.getPackageManager()
                .setApplicationEnabledSetting(
                        PACKAGE_A,
                        Integer.valueOf(COMPONENT_ENABLED_STATE_DISABLED),
                        0 /*flags*/);
        transportManager.onPackageChanged(PACKAGE_A, PACKAGE_A);

        assertRegisteredTransports(transportManager, singletonList(mTransportB1));
        verify(mListener, never()).onTransportRegistered(any(), any());

        mContext.getPackageManager()
                .setApplicationEnabledSetting(
                        PACKAGE_A,
                        Integer.valueOf(COMPONENT_ENABLED_STATE_ENABLED),
                        0 /*flags*/);
        transportManager.onPackageChanged(PACKAGE_A, PACKAGE_A);

        assertRegisteredTransports(transportManager, asList(mTransportA1, mTransportB1));
        verify(mListener)
                .onTransportRegistered(mTransportA1.transportName, mTransportA1.transportDirName);
    }

    @Test
    public void testOnPackageChanged_onPackageChanged_unknownComponentStateIsIgnored()
            throws Exception {
        TransportManager transportManager =
                createTransportManagerWithRegisteredTransports(mTransportA1, mTransportB1);
        reset(mListener);

        mContext.getPackageManager()
                .setApplicationEnabledSetting(
                        PACKAGE_A,
                        Integer.valueOf(COMPONENT_ENABLED_STATE_DEFAULT),
                        0 /*flags*/);
        transportManager.onPackageChanged(PACKAGE_A, PACKAGE_A);

        assertRegisteredTransports(transportManager, asList(mTransportA1, mTransportB1));
        verify(mListener, never()).onTransportRegistered(any(), any());
    }

    @Test
    public void testRegisterAndSelectTransport_whenTransportRegistered() throws Exception {
        TransportManager transportManager =
+0 −17
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.server.testing.shadows;

import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.NameNotFoundException;

import android.app.ApplicationPackageManager;
@@ -45,7 +44,6 @@ public class ShadowApplicationPackageManager
    private static final List<PackageInfo> sInstalledPackages = new ArrayList<>();
    private static final Map<String, Integer> sPackageUids = new ArrayMap<>();
    private static final Map<Integer, Map<String, Integer>> sUserPackageUids = new ArrayMap<>();
    private static final Map<String, Integer> sPackageAppEnabledStates = new ArrayMap<>();

    /**
     * Registers the package {@code packageName} to be returned when invoking {@link
@@ -55,7 +53,6 @@ public class ShadowApplicationPackageManager
    public static void addInstalledPackage(String packageName, PackageInfo packageInfo) {
        sPackageInfos.put(packageName, packageInfo);
        sInstalledPackages.add(packageInfo);
        sPackageAppEnabledStates.put(packageName, Integer.valueOf(COMPONENT_ENABLED_STATE_DEFAULT));
    }

    /**
@@ -79,19 +76,6 @@ public class ShadowApplicationPackageManager
        sUserPackageUids.put(userId, userPackageUids);
    }

    @Override
    protected int getApplicationEnabledSetting(String packageName) {
        if (!sPackageAppEnabledStates.containsKey(packageName)) {
            return COMPONENT_ENABLED_STATE_DEFAULT;
        }
        return sPackageAppEnabledStates.get(packageName);
    }

    @Override
    protected void setApplicationEnabledSetting(String packageName, int newState, int flags) {
        sPackageAppEnabledStates.put(packageName, Integer.valueOf(newState));  // flags unused here.
    }

    @Override
    protected PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
            throws NameNotFoundException {
@@ -131,7 +115,6 @@ public class ShadowApplicationPackageManager
    public static void reset() {
        sPackageInfos.clear();
        sInstalledPackages.clear();
        sPackageAppEnabledStates.clear();
        org.robolectric.shadows.ShadowApplicationPackageManager.reset();
    }
}