New feature “Text and reading options” for SetupWizard, Wallpaper, and Settings (4/n).

- Extending the interface of AppGridView to be flexible. It will be used
in the TextReadingPreferenceFragment.
  1. Add a new attribute "appCounts" into the view.
  2. Default app counts as 6 if not set the attribute.

Bug: 211503117
Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER=AppGridViewTest
Change-Id: I94a5f1d037551f6faba0300a176feb11fba1f203
This commit is contained in:
Peter_Liang
2022-01-12 11:59:06 +08:00
parent 3ae979bf27
commit 93668d6002
3 changed files with 125 additions and 6 deletions

View File

@@ -18,26 +18,39 @@ package com.android.settings.display;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.IconDrawableFactory;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
/**
* Tests for {@link AppGridView}.
*/
@RunWith(RobolectricTestRunner.class)
public class AppGridViewTest {
@@ -87,4 +100,72 @@ public class AppGridViewTest {
assertThat(entry1.compareTo(entry2)).isEqualTo(0);
assertThat(entry1.compareTo(entry3)).isNotEqualTo(0);
}
@Test
public void noAppCountAttribute_matchListSize() {
final int appCountFromSystem = 8;
setUpResolveInfos(appCountFromSystem);
final AppGridView appGridView = new AppGridView(mContext, /* attrs= */ null);
assertThat(appGridView.getAdapter().getCount()).isEqualTo(/* expected= */ 6);
}
@Test
public void setAppCountAttribute_matchListSize() {
final int appCountFromSystem = 8;
final int appCountFromAttr = 7;
setUpResolveInfos(appCountFromSystem);
final AppGridView appGridView =
new AppGridView(mContext, createAttributeSet(appCountFromAttr));
assertThat(appGridView.getAdapter().getCount()).isEqualTo(appCountFromAttr);
}
@Test(expected = IllegalArgumentException.class)
public void setAppCountAttribute_belowLowerBound_matchListSize() {
final int appCountFromSystem = 9;
final int appCountFromAttr = -1; // The num is just for the test.
setUpResolveInfos(appCountFromSystem);
new AppGridView(mContext, createAttributeSet(appCountFromAttr));
}
@Test
public void setAppCountAttribute_aboveUpperBound_matchListSize() {
final int appCountFromSystem = 10;
final int appCountFromAttr = 15;
setUpResolveInfos(appCountFromSystem);
final AppGridView appGridView =
new AppGridView(mContext, createAttributeSet(appCountFromAttr));
assertThat(appGridView.getAdapter().getCount()).isEqualTo(appCountFromSystem);
}
private AttributeSet createAttributeSet(int appCount) {
return Robolectric.buildAttributeSet()
.addAttribute(R.attr.appCount, String.valueOf(appCount))
.build();
}
private void setUpResolveInfos(int appCount) {
when(mContext.getPackageManager().queryIntentActivities(
any(Intent.class), anyInt()))
.thenReturn(createFakeResolveInfos(appCount));
}
private List<ResolveInfo> createFakeResolveInfos(int count) {
final List<ResolveInfo> list = new ArrayList<>();
for (int i = 0; i < count; i++) {
final ResolveInfo info = new ResolveInfo();
info.nonLocalizedLabel = String.valueOf(i);
list.add(info);
}
return list;
}
}