Merge "Remove empty space in Usage access"

This commit is contained in:
TreeHugger Robot
2019-01-30 07:04:25 +00:00
committed by Android (Google) Code Review
3 changed files with 62 additions and 10 deletions

View File

@@ -28,9 +28,9 @@
settings:layout_behavior="com.android.settings.widget.FloatingAppBarScrollingViewBehavior">
<FrameLayout
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/app_bar_height">
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/list_container"

View File

@@ -185,7 +185,6 @@ public class ManageApplications extends InstrumentedFragment
private ApplicationsAdapter mApplications;
private View mLoadingContainer;
private View mListContainer;
private RecyclerView mRecyclerView;
private SearchView mSearchView;
@@ -216,10 +215,15 @@ public class ManageApplications extends InstrumentedFragment
LIST_TYPE_MAIN,
LIST_TYPE_STORAGE));
@VisibleForTesting
View mSpinnerHeader;
@VisibleForTesting
FilterSpinnerAdapter mFilterAdapter;
@VisibleForTesting
View mContentContainer;
private View mRootView;
private View mSpinnerHeader;
private Spinner mFilterSpinner;
private FilterSpinnerAdapter mFilterAdapter;
private IUsageStatsManager mUsageStatsManager;
private UserManager mUserManager;
private NotificationBackend mNotificationBackend;
@@ -326,6 +330,7 @@ public class ManageApplications extends InstrumentedFragment
Bundle savedInstanceState) {
mRootView = inflater.inflate(R.layout.manage_applications_apps, null);
mLoadingContainer = mRootView.findViewById(R.id.loading_container);
mContentContainer = mRootView.findViewById(R.id.content_container);
mListContainer = mRootView.findViewById(R.id.list_container);
if (mListContainer != null) {
// Create adapter and list view here
@@ -794,8 +799,7 @@ public class ManageApplications extends InstrumentedFragment
}
mFilterOptions.add(filter);
Collections.sort(mFilterOptions);
mManageApplications.mSpinnerHeader.setVisibility(
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
updateFilterView(mFilterOptions.size() > 1);
notifyDataSetChanged();
if (mFilterOptions.size() == 1) {
if (DEBUG) {
@@ -826,14 +830,13 @@ public class ManageApplications extends InstrumentedFragment
filter.getTitle()));
}
Collections.sort(mFilterOptions);
mManageApplications.mSpinnerHeader.setVisibility(
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
updateFilterView(mFilterOptions.size() > 1);
notifyDataSetChanged();
if (mManageApplications.mFilter == filter) {
if (mFilterOptions.size() > 0) {
if (DEBUG) {
Log.d(TAG, "Auto selecting filter " + mFilterOptions.get(0)
+ mContext.getText(mFilterOptions.get(0).getTitle()));
+ mContext.getText(mFilterOptions.get(0).getTitle()));
}
mManageApplications.mFilterSpinner.setSelection(0);
mManageApplications.onItemSelected(null, null, 0, 0);
@@ -850,6 +853,26 @@ public class ManageApplications extends InstrumentedFragment
public CharSequence getItem(int position) {
return mContext.getText(mFilterOptions.get(position).getTitle());
}
@VisibleForTesting
void updateFilterView(boolean hasFilter) {
// If we need to add a floating filter in this screen, we should have an extra top
// padding for putting floating filter view. Otherwise, the content of list will be
// overlapped by floating filter.
if (hasFilter) {
mManageApplications.mSpinnerHeader.setVisibility(View.VISIBLE);
mManageApplications.mContentContainer.setPadding(0 /* left */,
mContext.getResources().getDimensionPixelSize(
R.dimen.app_bar_height) /* top */,
0 /* right */,
0 /* bottom */);
} else {
mManageApplications.mSpinnerHeader.setVisibility(View.GONE);
mManageApplications.mContentContainer.setPadding(0 /* left */, 0 /* top */,
0 /* right */,
0 /* bottom */);
}
}
}
static class ApplicationsAdapter extends RecyclerView.Adapter<ApplicationViewHolder>

View File

@@ -91,6 +91,8 @@ public class ManageApplicationsTest {
private UserManager mUserManager;
@Mock
private PackageManager mPackageManager;
private Context mContext;
private MenuItem mAppReset;
private MenuItem mSortRecent;
private MenuItem mSortFrequent;
@@ -99,6 +101,7 @@ public class ManageApplicationsTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mAppReset = new RoboMenuItem(R.id.reset_app_preferences);
mSortRecent = new RoboMenuItem(R.id.sort_order_recent_notification);
mSortFrequent = new RoboMenuItem(R.id.sort_order_frequent_notification);
@@ -107,6 +110,7 @@ public class ManageApplicationsTest {
when(mState.getBackgroundLooper()).thenReturn(Looper.myLooper());
mFragment = spy(new ManageApplications());
when(mFragment.getContext()).thenReturn(mContext);
when(mFragment.getActivity()).thenReturn(mActivity);
when(mActivity.getResources()).thenReturn(mResources);
when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
@@ -460,6 +464,31 @@ public class ManageApplicationsTest {
assertThat(mFragment.mSortOrder).isEqualTo(mSortFrequent.getItemId());
}
@Test
public void updateFilterView_hasFilterSet_shouldShowFilterAndHavePaddingTop() {
mFragment.mContentContainer = new View(mContext);
mFragment.mSpinnerHeader = new View(mContext);
mFragment.mFilterAdapter = new ManageApplications.FilterSpinnerAdapter(mFragment);
mFragment.mFilterAdapter.updateFilterView(true);
assertThat(mFragment.mSpinnerHeader.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mFragment.mContentContainer.getPaddingTop()).isEqualTo(
mContext.getResources().getDimensionPixelSize(R.dimen.app_bar_height));
}
@Test
public void updateFilterView_noFilterSet_shouldHideFilterAndNoPaddingTop() {
mFragment.mContentContainer = new View(mContext);
mFragment.mSpinnerHeader = new View(mContext);
mFragment.mFilterAdapter = new ManageApplications.FilterSpinnerAdapter(mFragment);
mFragment.mFilterAdapter.updateFilterView(false);
assertThat(mFragment.mSpinnerHeader.getVisibility()).isEqualTo(View.GONE);
assertThat(mFragment.mContentContainer.getPaddingTop()).isEqualTo(0);
}
private void setUpOptionMenus() {
when(mMenu.findItem(anyInt())).thenAnswer(invocation -> {
final Object[] args = invocation.getArguments();