Merge "Changes to icon picker for reusability in "add mode" flow" into main

This commit is contained in:
Matías Hernández
2024-06-26 11:40:21 +00:00
committed by Android (Google) Code Review
9 changed files with 190 additions and 67 deletions

View File

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

View File

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