Merge "Changes to icon picker for reusability in "add mode" flow" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
3df9e97f77
@@ -24,6 +24,7 @@ import android.service.notification.ZenDeviceEffects;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
import android.service.notification.ZenPolicy;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
@@ -70,13 +71,13 @@ class TestModeBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public TestModeBuilder setName(String name) {
|
||||
TestModeBuilder setName(String name) {
|
||||
mRule.setName(name);
|
||||
mConfigZenRule.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TestModeBuilder setPackage(String pkg) {
|
||||
TestModeBuilder setPackage(String pkg) {
|
||||
mRule.setPackageName(pkg);
|
||||
mConfigZenRule.pkg = pkg;
|
||||
return this;
|
||||
@@ -114,7 +115,7 @@ class TestModeBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public TestModeBuilder setEnabled(boolean enabled) {
|
||||
TestModeBuilder setEnabled(boolean enabled) {
|
||||
mRule.setEnabled(enabled);
|
||||
mConfigZenRule.enabled = enabled;
|
||||
return this;
|
||||
@@ -126,12 +127,17 @@ class TestModeBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public TestModeBuilder setTriggerDescription(@Nullable String triggerDescription) {
|
||||
TestModeBuilder setTriggerDescription(@Nullable String triggerDescription) {
|
||||
mRule.setTriggerDescription(triggerDescription);
|
||||
mConfigZenRule.triggerDescription = triggerDescription;
|
||||
return this;
|
||||
}
|
||||
|
||||
TestModeBuilder setIconResId(@DrawableRes int iconResId) {
|
||||
mRule.setIconResId(iconResId);
|
||||
return this;
|
||||
}
|
||||
|
||||
TestModeBuilder setActive(boolean active) {
|
||||
if (active) {
|
||||
mConfigZenRule.enabled = true;
|
||||
|
@@ -24,13 +24,15 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.notification.modes.ZenMode;
|
||||
import com.android.settingslib.notification.modes.ZenModesBackend;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
@@ -40,35 +42,34 @@ import com.google.common.collect.ImmutableList;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class ZenModeIconPickerListPreferenceControllerTest {
|
||||
|
||||
private static final ZenMode ZEN_MODE = TestModeBuilder.EXAMPLE;
|
||||
|
||||
private ZenModesBackend mBackend;
|
||||
private Context mContext;
|
||||
private ZenModeIconPickerListPreferenceController mController;
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock private PreferenceScreen mPreferenceScreen;
|
||||
private LayoutPreference mLayoutPreference;
|
||||
private RecyclerView mRecyclerView;
|
||||
@Mock private ZenModeIconPickerListPreferenceController.IconPickerListener mListener;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
Context context = RuntimeEnvironment.getApplication();
|
||||
mBackend = mock(ZenModesBackend.class);
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.getApplication();
|
||||
|
||||
DashboardFragment fragment = mock(DashboardFragment.class);
|
||||
mController = new ZenModeIconPickerListPreferenceController(
|
||||
RuntimeEnvironment.getApplication(), "icon_list", fragment,
|
||||
new TestIconOptionsProvider(), mBackend);
|
||||
RuntimeEnvironment.getApplication(), "icon_list", mListener,
|
||||
new TestIconOptionsProvider(), mock(ZenModesBackend.class));
|
||||
|
||||
mRecyclerView = new RecyclerView(context);
|
||||
mRecyclerView = new RecyclerView(mContext);
|
||||
mRecyclerView.setId(R.id.icon_list);
|
||||
LayoutPreference layoutPreference = new LayoutPreference(context, mRecyclerView);
|
||||
mPreferenceScreen = mock(PreferenceScreen.class);
|
||||
when(mPreferenceScreen.findPreference(eq("icon_list"))).thenReturn(layoutPreference);
|
||||
mLayoutPreference = new LayoutPreference(mContext, mRecyclerView);
|
||||
when(mPreferenceScreen.findPreference(eq("icon_list"))).thenReturn(mLayoutPreference);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -80,14 +81,32 @@ public class ZenModeIconPickerListPreferenceControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectIcon_updatesMode() {
|
||||
mController.setZenMode(ZEN_MODE);
|
||||
public void updateState_highlightsCurrentIcon() {
|
||||
ZenMode mode = new TestModeBuilder().setIconResId(R.drawable.ic_hearing).build();
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
mController.onIconSelected(R.drawable.ic_android);
|
||||
mController.updateZenMode(mLayoutPreference, mode);
|
||||
|
||||
ArgumentCaptor<ZenMode> captor = ArgumentCaptor.forClass(ZenMode.class);
|
||||
verify(mBackend).updateMode(captor.capture());
|
||||
assertThat(captor.getValue().getRule().getIconResId()).isEqualTo(R.drawable.ic_android);
|
||||
assertThat(getItemViewAt(0).isSelected()).isFalse();
|
||||
assertThat(getItemViewAt(1).isSelected()).isFalse();
|
||||
assertThat(getItemViewAt(2).isSelected()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void performClick_onIconItem_notifiesListener() {
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
getItemViewAt(1).performClick();
|
||||
|
||||
verify(mListener).onIconSelected(R.drawable.ic_info);
|
||||
}
|
||||
|
||||
private View getItemViewAt(int position) {
|
||||
ViewGroup fakeParent = new FrameLayout(mContext);
|
||||
RecyclerView.ViewHolder viewHolder = mRecyclerView.getAdapter().onCreateViewHolder(
|
||||
fakeParent, 0);
|
||||
mRecyclerView.getAdapter().bindViewHolder(viewHolder, position);
|
||||
return viewHolder.itemView;
|
||||
}
|
||||
|
||||
private static class TestIconOptionsProvider implements IconOptionsProvider {
|
||||
|
Reference in New Issue
Block a user