Merge "Revert "Fix onPackageChanged handling of disabled packages""
This commit is contained in:
committed by
Android (Google) Code Review
commit
af976b5188
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user