diff --git a/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java index e2f4fae14fc..174cb8cd050 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java @@ -17,11 +17,16 @@ package com.android.settings.deviceinfo.firmwareversion; import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.text.TextUtils; import android.util.FeatureFlagUtils; import android.util.Log; +import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; + import com.android.settings.core.BasePreferenceController; import com.android.settings.core.FeatureFlags; @@ -29,6 +34,9 @@ public class MainlineModuleVersionPreferenceController extends BasePreferenceCon private static final String TAG = "MainlineModuleControl"; + @VisibleForTesting + static final Intent MODULE_UPDATE_INTENT = + new Intent("android.settings.MODULE_UPDATE_SETTINGS"); private final PackageManager mPackageManager; private String mModuleVersion; @@ -65,6 +73,20 @@ public class MainlineModuleVersionPreferenceController extends BasePreferenceCon } } + @Override + public void updateState(Preference preference) { + super.updateState(preference); + + // Confirm MODULE_UPDATE_INTENT is handleable, and set it to Preference. + final ResolveInfo resolved = + mPackageManager.resolveActivity(MODULE_UPDATE_INTENT, 0 /* flags */); + if (resolved != null) { + preference.setIntent(MODULE_UPDATE_INTENT); + } else { + preference.setIntent(null); + } + } + @Override public CharSequence getSummary() { return mModuleVersion; diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java index 2761b2fb42a..f391aac64a3 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java @@ -18,6 +18,7 @@ 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.google.common.truth.Truth.assertThat; @@ -29,8 +30,11 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.util.FeatureFlagUtils; +import androidx.preference.Preference; + import com.android.settings.core.FeatureFlags; import org.junit.Before; @@ -48,11 +52,13 @@ public class MainlineModuleVersionPreferenceControllerTest { private PackageManager mPackageManager; private Context mContext; + private Preference mPreference; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + mPreference = new Preference(mContext); when(mContext.getPackageManager()).thenReturn(mPackageManager); FeatureFlagUtils.setEnabled(mContext, FeatureFlags.MAINLINE_MODULE, true); @@ -82,7 +88,6 @@ public class MainlineModuleVersionPreferenceControllerTest { @Test public void getAvailabilityStatus_noMainlineModulePackageInfo_unavailable() throws Exception { - final String provider = "test.provider"; when(mContext.getString( com.android.internal.R.string.config_defaultModuleMetadataProvider)) @@ -98,6 +103,43 @@ public class MainlineModuleVersionPreferenceControllerTest { @Test public void getAvailabilityStatus_hasMainlineModulePackageInfo_available() throws Exception { + setupModulePackage(); + + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); + + assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void updateStates_canHandleIntent_setIntentToPreference() throws Exception { + setupModulePackage(); + when(mPackageManager.resolveActivity(MODULE_UPDATE_INTENT, 0)) + .thenReturn(new ResolveInfo()); + + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); + + controller.updateState(mPreference); + + assertThat(mPreference.getIntent()).isEqualTo(MODULE_UPDATE_INTENT); + } + + @Test + public void updateStates_cannotHandleIntent_setNullToPreference() throws Exception { + setupModulePackage(); + when(mPackageManager.resolveActivity(MODULE_UPDATE_INTENT, 0)) + .thenReturn(null); + + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); + + controller.updateState(mPreference); + + assertThat(mPreference.getIntent()).isNull(); + } + + private void setupModulePackage() throws Exception { final String provider = "test.provider"; final String version = "test version 123"; final PackageInfo info = new PackageInfo(); @@ -106,11 +148,5 @@ public class MainlineModuleVersionPreferenceControllerTest { com.android.internal.R.string.config_defaultModuleMetadataProvider)) .thenReturn(provider); when(mPackageManager.getPackageInfo(eq(provider), anyInt())).thenReturn(info); - - final MainlineModuleVersionPreferenceController controller = - new MainlineModuleVersionPreferenceController(mContext, "key"); - - assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); } - }