Deep link to detail UI when mainline module version is clicked.

Fixes: 129287281
Test: robotests
Change-Id: I875cf39936dd8cc656aba9e30dc03c882ee13d4a
This commit is contained in:
Fan Zhang
2019-03-26 12:26:21 -07:00
parent cd0b74d730
commit 5911fe6188
2 changed files with 65 additions and 7 deletions

View File

@@ -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;

View File

@@ -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);
}
}