Merge "Remove divider above device switcher in panel" into qt-dev

This commit is contained in:
Linda Tseng
2019-04-05 23:09:14 +00:00
committed by Android (Google) Code Review
5 changed files with 95 additions and 12 deletions

View File

@@ -31,8 +31,6 @@
android:textColor="?android:attr/colorPrimary" android:textColor="?android:attr/colorPrimary"
android:textSize="20sp"/> android:textSize="20sp"/>
<include layout="@layout/horizontal_divider"/>
<include layout="@layout/panel_slice_list"/> <include layout="@layout/panel_slice_list"/>
<LinearLayout <LinearLayout

View File

@@ -26,6 +26,4 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="20dp" android:paddingStart="20dp"
android:paddingEnd="20dp"/> android:paddingEnd="20dp"/>
<include layout="@layout/horizontal_divider"/>
</LinearLayout> </LinearLayout>

View File

@@ -37,6 +37,7 @@ import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.panel.PanelLoggingContract.PanelClosedKeys; import com.android.settings.panel.PanelLoggingContract.PanelClosedKeys;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.google.android.setupdesign.DividerItemDecoration;
public class PanelFragment extends Fragment { public class PanelFragment extends Fragment {
@@ -93,6 +94,10 @@ public class PanelFragment extends Fragment {
mPanelSlices.setLayoutManager(new LinearLayoutManager((activity))); mPanelSlices.setLayoutManager(new LinearLayoutManager((activity)));
mPanelSlices.setAdapter(mAdapter); mPanelSlices.setAdapter(mAdapter);
DividerItemDecoration itemDecoration = new DividerItemDecoration(getActivity());
itemDecoration.setDividerCondition(DividerItemDecoration.DIVIDER_CONDITION_BOTH);
mPanelSlices.addItemDecoration(itemDecoration);
mTitleView.setText(mPanel.getTitle()); mTitleView.setText(mPanel.getTitle());
mSeeMoreButton.setOnClickListener(getSeeMoreListener()); mSeeMoreButton.setOnClickListener(getSeeMoreListener());

View File

@@ -16,6 +16,8 @@
package com.android.settings.panel; package com.android.settings.panel;
import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
@@ -33,6 +35,7 @@ import androidx.slice.widget.SliceView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.google.android.setupdesign.DividerItemDecoration;
import java.util.List; import java.util.List;
@@ -80,10 +83,13 @@ public class PanelSlicesAdapter
/** /**
* ViewHolder for binding Slices to SliceViews. * ViewHolder for binding Slices to SliceViews.
*/ */
public static class SliceRowViewHolder extends RecyclerView.ViewHolder { public static class SliceRowViewHolder extends RecyclerView.ViewHolder
implements DividerItemDecoration.DividedViewHolder {
private final PanelContent mPanelContent; private final PanelContent mPanelContent;
private boolean mDividerAllowedAbove = true;
@VisibleForTesting @VisibleForTesting
LiveData<Slice> sliceLiveData; LiveData<Slice> sliceLiveData;
@@ -103,6 +109,11 @@ public class PanelSlicesAdapter
sliceLiveData = SliceLiveData.fromUri(context, sliceUri); sliceLiveData = SliceLiveData.fromUri(context, sliceUri);
sliceLiveData.observe(fragment.getViewLifecycleOwner(), sliceView); sliceLiveData.observe(fragment.getViewLifecycleOwner(), sliceView);
// Do not show the divider above media devices switcher slice per request
if (sliceUri.equals(MEDIA_OUTPUT_INDICATOR_SLICE_URI)) {
mDividerAllowedAbove = false;
}
// Log Panel interaction // Log Panel interaction
sliceView.setOnSliceActionListener( sliceView.setOnSliceActionListener(
((eventInfo, sliceItem) -> { ((eventInfo, sliceItem) -> {
@@ -116,5 +127,15 @@ public class PanelSlicesAdapter
}) })
); );
} }
@Override
public boolean isDividerAllowedAbove() {
return mDividerAllowedAbove;
}
@Override
public boolean isDividerAllowedBelow() {
return true;
}
} }
} }

View File

@@ -16,13 +16,18 @@
package com.android.settings.panel; package com.android.settings.panel;
import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
@@ -39,6 +44,9 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.android.controller.ActivityController; import org.robolectric.android.controller.ActivityController;
import java.util.Arrays;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class PanelSlicesAdapterTest { public class PanelSlicesAdapterTest {
@@ -48,8 +56,6 @@ public class PanelSlicesAdapterTest {
private FakeFeatureFactory mFakeFeatureFactory; private FakeFeatureFactory mFakeFeatureFactory;
private PanelFeatureProvider mPanelFeatureProvider; private PanelFeatureProvider mPanelFeatureProvider;
private PanelSlicesAdapter mAdapter;
@Before @Before
public void setUp() { public void setUp() {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
@@ -70,28 +76,83 @@ public class PanelSlicesAdapterTest {
.get() .get()
.getSupportFragmentManager() .getSupportFragmentManager()
.findFragmentById(R.id.main_content)); .findFragmentById(R.id.main_content));
mAdapter = new PanelSlicesAdapter(mPanelFragment, mFakePanelContent);
} }
@Test @Test
public void onCreateViewHolder_returnsSliceRowViewHolder() { public void onCreateViewHolder_returnsSliceRowViewHolder() {
final PanelSlicesAdapter adapter =
new PanelSlicesAdapter(mPanelFragment, mFakePanelContent);
final ViewGroup view = new FrameLayout(mContext); final ViewGroup view = new FrameLayout(mContext);
final PanelSlicesAdapter.SliceRowViewHolder viewHolder = final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
mAdapter.onCreateViewHolder(view, 0); adapter.onCreateViewHolder(view, 0);
assertThat(viewHolder.sliceView).isNotNull(); assertThat(viewHolder.sliceView).isNotNull();
} }
@Test @Test
public void onBindViewHolder_bindsSlice() { public void onBindViewHolder_bindsSlice() {
final PanelSlicesAdapter adapter =
new PanelSlicesAdapter(mPanelFragment, mFakePanelContent);
final int position = 0; final int position = 0;
final ViewGroup view = new FrameLayout(mContext); final ViewGroup view = new FrameLayout(mContext);
final PanelSlicesAdapter.SliceRowViewHolder viewHolder = final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
mAdapter.onCreateViewHolder(view, 0 /* view type*/); adapter.onCreateViewHolder(view, 0 /* view type*/);
mAdapter.onBindViewHolder(viewHolder, position); adapter.onBindViewHolder(viewHolder, position);
assertThat(viewHolder.sliceLiveData).isNotNull(); assertThat(viewHolder.sliceLiveData).isNotNull();
} }
@Test
public void nonMediaOutputIndicatorSlice_shouldAllowDividerAboveAndBelow() {
final PanelSlicesAdapter adapter =
new PanelSlicesAdapter(mPanelFragment, mFakePanelContent);
final int position = 0;
final ViewGroup view = new FrameLayout(mContext);
final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
adapter.onCreateViewHolder(view, 0 /* view type*/);
adapter.onBindViewHolder(viewHolder, position);
assertThat(viewHolder.isDividerAllowedAbove()).isTrue();
assertThat(viewHolder.isDividerAllowedBelow()).isTrue();
}
@Test
public void mediaOutputIndicatorSlice_shouldNotAllowDividerAbove() {
PanelContent mediaOutputIndicatorSlicePanelContent = new PanelContent() {
@Override
public CharSequence getTitle() {
return "title";
}
@Override
public List<Uri> getSlices() {
return Arrays.asList(
MEDIA_OUTPUT_INDICATOR_SLICE_URI
);
}
@Override
public Intent getSeeMoreIntent() {
return new Intent();
}
@Override
public int getMetricsCategory() {
return SettingsEnums.TESTING;
}
};
final PanelSlicesAdapter adapter =
new PanelSlicesAdapter(mPanelFragment, mediaOutputIndicatorSlicePanelContent);
final int position = 0;
final ViewGroup view = new FrameLayout(mContext);
final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
adapter.onCreateViewHolder(view, 0 /* view type*/);
adapter.onBindViewHolder(viewHolder, position);
assertThat(viewHolder.isDividerAllowedAbove()).isFalse();
}
} }