Allow app lists to have a toggle

And make the notifications app list toggle block/unblock
notifications.

Test: make -j RunSettingsRoboTests
Change-Id: I7417b98fb1c66504897df515c4c84afad591764e
Fixes: 74318867
This commit is contained in:
Julia Reynolds
2018-03-26 17:02:58 -04:00
parent a6fa9226c9
commit 1cda00b12b
7 changed files with 259 additions and 11 deletions

View File

@@ -91,4 +91,31 @@ public class ApplicationViewHolderTest {
mHolder.updateSizeText(entry, invalidStr, ManageApplications.SIZE_EXTERNAL);
assertThat(mHolder.mSummary.getText()).isEqualTo(invalidStr);
}
@Test
public void oneTouchTarget() {
assertThat(mHolder.mSwitch).isNull();
assertThat(mHolder.mWidgetContainer.getChildCount()).isEqualTo(0);
// assert no exception
mHolder.updateSwitch(null, true, true);
}
@Test
public void twoTouchTarget() {
mView = ApplicationViewHolder.newView(new FrameLayout(mContext), true);
mHolder = new ApplicationViewHolder(mView, false /* useStableHeight */);
assertThat(mHolder.mSwitch).isNotNull();
assertThat(mHolder.mWidgetContainer.getChildCount()).isEqualTo(1);
}
@Test
public void updateSwitch() {
mView = ApplicationViewHolder.newView(new FrameLayout(mContext), true);
mHolder = new ApplicationViewHolder(mView, false /* useStableHeight */);
mHolder.updateSwitch(v -> {}, true, true);
assertThat(mHolder.mSwitch.isChecked()).isTrue();
assertThat(mHolder.mSwitch.isEnabled()).isTrue();
assertThat(mHolder.mWidgetContainer.hasOnClickListeners()).isTrue();
}
}

View File

@@ -22,6 +22,8 @@ import static com.android.settings.applications.manageapplications.AppFilterRegi
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_MAIN;
import static com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_NOTIFICATION;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
@@ -265,6 +267,42 @@ public class ManageApplicationsTest {
verify(adapter).notifyDataSetChanged();
}
@Test
public void applicationsAdapter_onBindViewHolder_updateSwitch_notifications() {
ManageApplications manageApplications = mock(ManageApplications.class);
manageApplications.mListType = LIST_TYPE_NOTIFICATION;
ApplicationViewHolder holder = mock(ApplicationViewHolder.class);
ReflectionHelpers.setField(holder, "itemView", mock(View.class));
ManageApplications.ApplicationsAdapter adapter =
new ManageApplications.ApplicationsAdapter(mState,
manageApplications, mock(AppFilterItem.class),
mock(Bundle.class));
final ArrayList<ApplicationsState.AppEntry> appList = new ArrayList<>();
appList.add(mock(ApplicationsState.AppEntry.class));
ReflectionHelpers.setField(adapter, "mEntries", appList);
adapter.onBindViewHolder(holder, 0);
verify(holder).updateSwitch(any(), anyBoolean(), anyBoolean());
}
@Test
public void applicationsAdapter_onBindViewHolder_updateSwitch_notNotifications() {
ManageApplications manageApplications = mock(ManageApplications.class);
manageApplications.mListType = LIST_TYPE_MAIN;
ApplicationViewHolder holder = mock(ApplicationViewHolder.class);
ReflectionHelpers.setField(holder, "itemView", mock(View.class));
ManageApplications.ApplicationsAdapter adapter =
new ManageApplications.ApplicationsAdapter(mState,
manageApplications, mock(AppFilterItem.class),
mock(Bundle.class));
final ArrayList<ApplicationsState.AppEntry> appList = new ArrayList<>();
appList.add(mock(ApplicationsState.AppEntry.class));
ReflectionHelpers.setField(adapter, "mEntries", appList);
adapter.onBindViewHolder(holder, 0);
verify(holder, never()).updateSwitch(any(), anyBoolean(), anyBoolean());
}
private void setUpOptionMenus() {
when(mMenu.findItem(anyInt())).thenAnswer(invocation -> {
final Object[] args = invocation.getArguments();