Match direct boot unaware receivers for Partner
In Partner.java, since we don't actually execute code in the package,
it is safe to match direct boot unaware receivers as well.
Test: ./gradlew connectedAndroidTest test
Bug: 36984206
Change-Id: I5ad017458db7d4af2d5a753a3f7663721291402e
(cherry picked from commit a3f1dc094f
)
This commit is contained in:
parent
7204767830
commit
6fa591591a
|
@ -24,9 +24,13 @@ import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Build.VERSION;
|
||||||
|
import android.os.Build.VERSION_CODES;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities to discover and interact with partner customizations. An overlay package is one that
|
* Utilities to discover and interact with partner customizations. An overlay package is one that
|
||||||
* registers the broadcast receiver for {@code com.android.setupwizard.action.PARTNER_CUSTOMIZATION}
|
* registers the broadcast receiver for {@code com.android.setupwizard.action.PARTNER_CUSTOMIZATION}
|
||||||
|
@ -36,11 +40,12 @@ import android.util.Log;
|
||||||
* <p>Derived from {@code com.android.launcher3/Partner.java}
|
* <p>Derived from {@code com.android.launcher3/Partner.java}
|
||||||
*/
|
*/
|
||||||
public class Partner {
|
public class Partner {
|
||||||
|
|
||||||
private static final String TAG = "(SUW) Partner";
|
private static final String TAG = "(SUW) Partner";
|
||||||
|
|
||||||
/** Marker action used to discover partner */
|
/** Marker action used to discover partner */
|
||||||
private static final String
|
private static final String ACTION_PARTNER_CUSTOMIZATION =
|
||||||
ACTION_PARTNER_CUSTOMIZATION = "com.android.setupwizard.action.PARTNER_CUSTOMIZATION";
|
"com.android.setupwizard.action.PARTNER_CUSTOMIZATION";
|
||||||
|
|
||||||
private static boolean sSearched = false;
|
private static boolean sSearched = false;
|
||||||
private static Partner sPartner;
|
private static Partner sPartner;
|
||||||
|
@ -113,7 +118,20 @@ public class Partner {
|
||||||
if (!sSearched) {
|
if (!sSearched) {
|
||||||
PackageManager pm = context.getPackageManager();
|
PackageManager pm = context.getPackageManager();
|
||||||
final Intent intent = new Intent(ACTION_PARTNER_CUSTOMIZATION);
|
final Intent intent = new Intent(ACTION_PARTNER_CUSTOMIZATION);
|
||||||
for (ResolveInfo info : pm.queryBroadcastReceivers(intent, 0)) {
|
List<ResolveInfo> receivers;
|
||||||
|
if (VERSION.SDK_INT >= VERSION_CODES.N) {
|
||||||
|
receivers = pm.queryBroadcastReceivers(
|
||||||
|
intent,
|
||||||
|
PackageManager.MATCH_SYSTEM_ONLY
|
||||||
|
| PackageManager.MATCH_DIRECT_BOOT_AWARE
|
||||||
|
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
|
||||||
|
} else {
|
||||||
|
// On versions before N, direct boot doesn't exist. And the MATCH_SYSTEM_ONLY flag
|
||||||
|
// doesn't exist so we filter for system apps in code below.
|
||||||
|
receivers = pm.queryBroadcastReceivers(intent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ResolveInfo info : receivers) {
|
||||||
if (info.activityInfo == null) {
|
if (info.activityInfo == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.os.Build.VERSION;
|
||||||
|
import android.os.Build.VERSION_CODES;
|
||||||
|
|
||||||
import com.android.setupwizardlib.BuildConfig;
|
import com.android.setupwizardlib.BuildConfig;
|
||||||
import com.android.setupwizardlib.R;
|
import com.android.setupwizardlib.R;
|
||||||
|
@ -48,9 +50,10 @@ import org.robolectric.res.builder.DefaultPackageManager;
|
||||||
import org.robolectric.shadows.ShadowResources;
|
import org.robolectric.shadows.ShadowResources;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
@RunWith(SuwLibRobolectricTestRunner.class)
|
@RunWith(SuwLibRobolectricTestRunner.class)
|
||||||
@Config(constants = BuildConfig.class)
|
@Config(constants = BuildConfig.class, sdk = { Config.OLDEST_SDK, Config.NEWEST_SDK })
|
||||||
public class PartnerTest {
|
public class PartnerTest {
|
||||||
|
|
||||||
private static final String ACTION_PARTNER_CUSTOMIZATION =
|
private static final String ACTION_PARTNER_CUSTOMIZATION =
|
||||||
|
@ -77,8 +80,8 @@ public class PartnerTest {
|
||||||
mPackageManager.addResolveInfoForIntent(
|
mPackageManager.addResolveInfoForIntent(
|
||||||
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
createResolveInfo("foo.bar", false),
|
createResolveInfo("foo.bar", false, true),
|
||||||
createResolveInfo("test.partner.package", true))
|
createResolveInfo("test.partner.package", true, true))
|
||||||
);
|
);
|
||||||
|
|
||||||
Partner partner = Partner.get(mContext);
|
Partner partner = Partner.get(mContext);
|
||||||
|
@ -96,8 +99,8 @@ public class PartnerTest {
|
||||||
mPackageManager.addResolveInfoForIntent(
|
mPackageManager.addResolveInfoForIntent(
|
||||||
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
createResolveInfo("foo.bar", false),
|
createResolveInfo("foo.bar", false, true),
|
||||||
createResolveInfo("test.partner.package", false))
|
createResolveInfo("test.partner.package", false, true))
|
||||||
);
|
);
|
||||||
|
|
||||||
Partner partner = Partner.get(mContext);
|
Partner partner = Partner.get(mContext);
|
||||||
|
@ -113,8 +116,8 @@ public class PartnerTest {
|
||||||
mPackageManager.addResolveInfoForIntent(
|
mPackageManager.addResolveInfoForIntent(
|
||||||
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
createResolveInfo("foo.bar", false),
|
createResolveInfo("foo.bar", false, true),
|
||||||
createResolveInfo("test.partner.package", true))
|
createResolveInfo("test.partner.package", true, true))
|
||||||
);
|
);
|
||||||
|
|
||||||
ResourceEntry entry = Partner.getResourceEntry(mContext, R.integer.suwTransitionDuration);
|
ResourceEntry entry = Partner.getResourceEntry(mContext, R.integer.suwTransitionDuration);
|
||||||
|
@ -128,8 +131,8 @@ public class PartnerTest {
|
||||||
mPackageManager.addResolveInfoForIntent(
|
mPackageManager.addResolveInfoForIntent(
|
||||||
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
createResolveInfo("foo.bar", false),
|
createResolveInfo("foo.bar", false, true),
|
||||||
createResolveInfo("test.partner.package", true))
|
createResolveInfo("test.partner.package", true, true))
|
||||||
);
|
);
|
||||||
|
|
||||||
ResourceEntry entry = Partner.getResourceEntry(mContext, R.color.suw_color_accent_dark);
|
ResourceEntry entry = Partner.getResourceEntry(mContext, R.color.suw_color_accent_dark);
|
||||||
|
@ -138,7 +141,22 @@ public class PartnerTest {
|
||||||
assertFalse("Partner value should come from fallback", entry.isOverlay);
|
assertFalse("Partner value should come from fallback", entry.isOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResolveInfo createResolveInfo(String packageName, boolean isSystem) {
|
@Test
|
||||||
|
public void testNotDirectBootAware() {
|
||||||
|
mPackageManager.addResolveInfoForIntent(
|
||||||
|
new Intent(ACTION_PARTNER_CUSTOMIZATION),
|
||||||
|
Collections.singletonList(createResolveInfo("test.partner.package", true, false)));
|
||||||
|
|
||||||
|
ResourceEntry entry = Partner.getResourceEntry(mContext, R.color.suw_color_accent_dark);
|
||||||
|
int partnerValue = entry.resources.getColor(entry.id);
|
||||||
|
assertEquals("Partner value should default to 0xff448aff", 0xff448aff, partnerValue);
|
||||||
|
assertFalse("Partner value should come from fallback", entry.isOverlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResolveInfo createResolveInfo(
|
||||||
|
String packageName,
|
||||||
|
boolean isSystem,
|
||||||
|
boolean directBootAware) {
|
||||||
ResolveInfo info = new ResolveInfo();
|
ResolveInfo info = new ResolveInfo();
|
||||||
info.resolvePackageName = packageName;
|
info.resolvePackageName = packageName;
|
||||||
ActivityInfo activityInfo = new ActivityInfo();
|
ActivityInfo activityInfo = new ActivityInfo();
|
||||||
|
@ -148,6 +166,9 @@ public class PartnerTest {
|
||||||
activityInfo.applicationInfo = appInfo;
|
activityInfo.applicationInfo = appInfo;
|
||||||
activityInfo.packageName = packageName;
|
activityInfo.packageName = packageName;
|
||||||
activityInfo.name = packageName;
|
activityInfo.name = packageName;
|
||||||
|
if (VERSION.SDK_INT >= VERSION_CODES.N) {
|
||||||
|
activityInfo.directBootAware = directBootAware;
|
||||||
|
}
|
||||||
info.activityInfo = activityInfo;
|
info.activityInfo = activityInfo;
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue