Make Mainline Module update intent explicit
Change-Id: Iaacbebcb5328d50f0bdaa554782144315140e143 Test: Existing unit test Test: on-device verified tapping UI element still navigates to Play's update screen (About phone > Android version > Google Play system update) Bug: 278987474
This commit is contained in:
@@ -6,3 +6,10 @@ flag {
|
||||
description: "This flag controls whether to show a Cancel button when factory reset"
|
||||
bug: "300634367"
|
||||
}
|
||||
|
||||
flag {
|
||||
name: "mainline_module_explicit_intent"
|
||||
namespace: "android_settings"
|
||||
description: "Enabling will provide an explicit package name for Intent to update mainline modules"
|
||||
bug: "278987474"
|
||||
}
|
||||
|
3
res/values/config.xml
Executable file → Normal file
3
res/values/config.xml
Executable file → Normal file
@@ -782,4 +782,7 @@
|
||||
<item>@layout/screen_zoom_preview_1</item>
|
||||
<item>@layout/accessibility_text_reading_preview_mail_content</item>
|
||||
</array>
|
||||
|
||||
<!-- Package responsible for updating Mainline Modules -->
|
||||
<string name="config_mainline_module_update_package" translatable="false">com.android.vending</string>
|
||||
</resources>
|
||||
|
@@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.flags.Flags;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -43,14 +44,15 @@ public class MainlineModuleVersionPreferenceController extends BasePreferenceCon
|
||||
private static final String TAG = "MainlineModuleControl";
|
||||
private static final List<String> VERSION_NAME_DATE_PATTERNS = Arrays.asList("yyyy-MM-dd",
|
||||
"yyyy-MM");
|
||||
|
||||
@VisibleForTesting
|
||||
static final Intent MODULE_UPDATE_INTENT =
|
||||
new Intent("android.settings.MODULE_UPDATE_SETTINGS");
|
||||
static final String MODULE_UPDATE_INTENT_ACTION =
|
||||
"android.settings.MODULE_UPDATE_SETTINGS";
|
||||
@VisibleForTesting
|
||||
static final Intent MODULE_UPDATE_V2_INTENT =
|
||||
new Intent("android.settings.MODULE_UPDATE_VERSIONS");
|
||||
static final String MODULE_UPDATE_V2_INTENT_ACTION =
|
||||
"android.settings.MODULE_UPDATE_VERSIONS";
|
||||
|
||||
private final Intent mModuleUpdateIntent;
|
||||
private final Intent mModuleUpdateV2Intent;
|
||||
private final PackageManager mPackageManager;
|
||||
|
||||
private String mModuleVersion;
|
||||
@@ -58,6 +60,14 @@ public class MainlineModuleVersionPreferenceController extends BasePreferenceCon
|
||||
public MainlineModuleVersionPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mPackageManager = mContext.getPackageManager();
|
||||
mModuleUpdateIntent = new Intent(MODULE_UPDATE_INTENT_ACTION);
|
||||
mModuleUpdateV2Intent = new Intent(MODULE_UPDATE_V2_INTENT_ACTION);
|
||||
if (Flags.mainlineModuleExplicitIntent()) {
|
||||
String packageName = mContext
|
||||
.getString(com.android.settings.R.string.config_mainline_module_update_package);
|
||||
mModuleUpdateIntent.setPackage(packageName);
|
||||
mModuleUpdateV2Intent.setPackage(packageName);
|
||||
}
|
||||
initModules();
|
||||
}
|
||||
|
||||
@@ -86,17 +96,17 @@ public class MainlineModuleVersionPreferenceController extends BasePreferenceCon
|
||||
super.updateState(preference);
|
||||
|
||||
final ResolveInfo resolvedV2 =
|
||||
mPackageManager.resolveActivity(MODULE_UPDATE_V2_INTENT, 0 /* flags */);
|
||||
mPackageManager.resolveActivity(mModuleUpdateV2Intent, 0 /* flags */);
|
||||
if (resolvedV2 != null) {
|
||||
preference.setIntent(MODULE_UPDATE_V2_INTENT);
|
||||
preference.setIntent(mModuleUpdateV2Intent);
|
||||
preference.setSelectable(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final ResolveInfo resolved =
|
||||
mPackageManager.resolveActivity(MODULE_UPDATE_INTENT, 0 /* flags */);
|
||||
mPackageManager.resolveActivity(mModuleUpdateIntent, 0 /* flags */);
|
||||
if (resolved != null) {
|
||||
preference.setIntent(MODULE_UPDATE_INTENT);
|
||||
preference.setIntent(mModuleUpdateIntent);
|
||||
preference.setSelectable(true);
|
||||
} else {
|
||||
Log.d(TAG, "The ResolveInfo of the update intent is null.");
|
||||
|
@@ -18,8 +18,8 @@ package com.android.settings.deviceinfo.firmwareversion;
|
||||
|
||||
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
||||
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
||||
import static com.android.settings.deviceinfo.firmwareversion.MainlineModuleVersionPreferenceController.MODULE_UPDATE_INTENT;
|
||||
import static com.android.settings.deviceinfo.firmwareversion.MainlineModuleVersionPreferenceController.MODULE_UPDATE_V2_INTENT;
|
||||
import static com.android.settings.deviceinfo.firmwareversion.MainlineModuleVersionPreferenceController.MODULE_UPDATE_INTENT_ACTION;
|
||||
import static com.android.settings.deviceinfo.firmwareversion.MainlineModuleVersionPreferenceController.MODULE_UPDATE_V2_INTENT_ACTION;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -29,13 +29,18 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
@@ -46,6 +51,15 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class MainlineModuleVersionPreferenceControllerTest {
|
||||
|
||||
private static final String MODULE_PACKAGE = "com.android.vending";
|
||||
private static final Intent MODULE_UPDATE_V2_INTENT =
|
||||
new Intent(MODULE_UPDATE_V2_INTENT_ACTION).setPackage(MODULE_PACKAGE);
|
||||
private static final Intent MODULE_UPDATE_INTENT =
|
||||
new Intent(MODULE_UPDATE_INTENT_ACTION).setPackage(MODULE_PACKAGE);
|
||||
|
||||
@Rule
|
||||
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
|
||||
@@ -58,6 +72,9 @@ public class MainlineModuleVersionPreferenceControllerTest {
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mPreference = new Preference(mContext);
|
||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||
when(mContext
|
||||
.getString(com.android.settings.R.string.config_mainline_module_update_package))
|
||||
.thenReturn(MODULE_PACKAGE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -123,6 +140,7 @@ public class MainlineModuleVersionPreferenceControllerTest {
|
||||
assertThat(mPreference.isSelectable()).isTrue();
|
||||
}
|
||||
|
||||
@RequiresFlagsEnabled(com.android.settings.flags.Flags.FLAG_MAINLINE_MODULE_EXPLICIT_INTENT)
|
||||
@Test
|
||||
public void updateState_canHandleIntent_setIntentToPreference() throws Exception {
|
||||
setupModulePackage("test version 123");
|
||||
@@ -137,6 +155,7 @@ public class MainlineModuleVersionPreferenceControllerTest {
|
||||
assertThat(mPreference.getIntent()).isEqualTo(MODULE_UPDATE_INTENT);
|
||||
}
|
||||
|
||||
@RequiresFlagsEnabled(com.android.settings.flags.Flags.FLAG_MAINLINE_MODULE_EXPLICIT_INTENT)
|
||||
@Test
|
||||
public void updateState_canHandleIntent_preferenceShouldBeSelectable() throws Exception {
|
||||
setupModulePackage("test version 123");
|
||||
@@ -151,6 +170,7 @@ public class MainlineModuleVersionPreferenceControllerTest {
|
||||
assertThat(mPreference.isSelectable()).isTrue();
|
||||
}
|
||||
|
||||
@RequiresFlagsEnabled(com.android.settings.flags.Flags.FLAG_MAINLINE_MODULE_EXPLICIT_INTENT)
|
||||
@Test
|
||||
public void updateState_cannotHandleIntent_setNullToPreference() throws Exception {
|
||||
setupModulePackage("test version 123");
|
||||
|
Reference in New Issue
Block a user