Merge "Remove empty space in Usage access"
This commit is contained in:
committed by
Android (Google) Code Review
commit
f660e72009
@@ -28,9 +28,9 @@
|
|||||||
settings:layout_behavior="com.android.settings.widget.FloatingAppBarScrollingViewBehavior">
|
settings:layout_behavior="com.android.settings.widget.FloatingAppBarScrollingViewBehavior">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
android:id="@+id/content_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:paddingTop="@dimen/app_bar_height">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/list_container"
|
android:id="@+id/list_container"
|
||||||
|
@@ -185,7 +185,6 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
private ApplicationsAdapter mApplications;
|
private ApplicationsAdapter mApplications;
|
||||||
|
|
||||||
private View mLoadingContainer;
|
private View mLoadingContainer;
|
||||||
|
|
||||||
private View mListContainer;
|
private View mListContainer;
|
||||||
private RecyclerView mRecyclerView;
|
private RecyclerView mRecyclerView;
|
||||||
private SearchView mSearchView;
|
private SearchView mSearchView;
|
||||||
@@ -216,10 +215,15 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
LIST_TYPE_MAIN,
|
LIST_TYPE_MAIN,
|
||||||
LIST_TYPE_STORAGE));
|
LIST_TYPE_STORAGE));
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
View mSpinnerHeader;
|
||||||
|
@VisibleForTesting
|
||||||
|
FilterSpinnerAdapter mFilterAdapter;
|
||||||
|
@VisibleForTesting
|
||||||
|
View mContentContainer;
|
||||||
|
|
||||||
private View mRootView;
|
private View mRootView;
|
||||||
private View mSpinnerHeader;
|
|
||||||
private Spinner mFilterSpinner;
|
private Spinner mFilterSpinner;
|
||||||
private FilterSpinnerAdapter mFilterAdapter;
|
|
||||||
private IUsageStatsManager mUsageStatsManager;
|
private IUsageStatsManager mUsageStatsManager;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
private NotificationBackend mNotificationBackend;
|
private NotificationBackend mNotificationBackend;
|
||||||
@@ -326,6 +330,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
mRootView = inflater.inflate(R.layout.manage_applications_apps, null);
|
mRootView = inflater.inflate(R.layout.manage_applications_apps, null);
|
||||||
mLoadingContainer = mRootView.findViewById(R.id.loading_container);
|
mLoadingContainer = mRootView.findViewById(R.id.loading_container);
|
||||||
|
mContentContainer = mRootView.findViewById(R.id.content_container);
|
||||||
mListContainer = mRootView.findViewById(R.id.list_container);
|
mListContainer = mRootView.findViewById(R.id.list_container);
|
||||||
if (mListContainer != null) {
|
if (mListContainer != null) {
|
||||||
// Create adapter and list view here
|
// Create adapter and list view here
|
||||||
@@ -794,8 +799,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
}
|
}
|
||||||
mFilterOptions.add(filter);
|
mFilterOptions.add(filter);
|
||||||
Collections.sort(mFilterOptions);
|
Collections.sort(mFilterOptions);
|
||||||
mManageApplications.mSpinnerHeader.setVisibility(
|
updateFilterView(mFilterOptions.size() > 1);
|
||||||
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
if (mFilterOptions.size() == 1) {
|
if (mFilterOptions.size() == 1) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
@@ -826,8 +830,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
filter.getTitle()));
|
filter.getTitle()));
|
||||||
}
|
}
|
||||||
Collections.sort(mFilterOptions);
|
Collections.sort(mFilterOptions);
|
||||||
mManageApplications.mSpinnerHeader.setVisibility(
|
updateFilterView(mFilterOptions.size() > 1);
|
||||||
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
if (mManageApplications.mFilter == filter) {
|
if (mManageApplications.mFilter == filter) {
|
||||||
if (mFilterOptions.size() > 0) {
|
if (mFilterOptions.size() > 0) {
|
||||||
@@ -850,6 +853,26 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
public CharSequence getItem(int position) {
|
public CharSequence getItem(int position) {
|
||||||
return mContext.getText(mFilterOptions.get(position).getTitle());
|
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>
|
static class ApplicationsAdapter extends RecyclerView.Adapter<ApplicationViewHolder>
|
||||||
|
@@ -91,6 +91,8 @@ public class ManageApplicationsTest {
|
|||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
@Mock
|
@Mock
|
||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
private MenuItem mAppReset;
|
private MenuItem mAppReset;
|
||||||
private MenuItem mSortRecent;
|
private MenuItem mSortRecent;
|
||||||
private MenuItem mSortFrequent;
|
private MenuItem mSortFrequent;
|
||||||
@@ -99,6 +101,7 @@ public class ManageApplicationsTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
mContext = RuntimeEnvironment.application;
|
||||||
mAppReset = new RoboMenuItem(R.id.reset_app_preferences);
|
mAppReset = new RoboMenuItem(R.id.reset_app_preferences);
|
||||||
mSortRecent = new RoboMenuItem(R.id.sort_order_recent_notification);
|
mSortRecent = new RoboMenuItem(R.id.sort_order_recent_notification);
|
||||||
mSortFrequent = new RoboMenuItem(R.id.sort_order_frequent_notification);
|
mSortFrequent = new RoboMenuItem(R.id.sort_order_frequent_notification);
|
||||||
@@ -107,6 +110,7 @@ public class ManageApplicationsTest {
|
|||||||
when(mState.getBackgroundLooper()).thenReturn(Looper.myLooper());
|
when(mState.getBackgroundLooper()).thenReturn(Looper.myLooper());
|
||||||
|
|
||||||
mFragment = spy(new ManageApplications());
|
mFragment = spy(new ManageApplications());
|
||||||
|
when(mFragment.getContext()).thenReturn(mContext);
|
||||||
when(mFragment.getActivity()).thenReturn(mActivity);
|
when(mFragment.getActivity()).thenReturn(mActivity);
|
||||||
when(mActivity.getResources()).thenReturn(mResources);
|
when(mActivity.getResources()).thenReturn(mResources);
|
||||||
when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
|
when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
|
||||||
@@ -460,6 +464,31 @@ public class ManageApplicationsTest {
|
|||||||
assertThat(mFragment.mSortOrder).isEqualTo(mSortFrequent.getItemId());
|
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() {
|
private void setUpOptionMenus() {
|
||||||
when(mMenu.findItem(anyInt())).thenAnswer(invocation -> {
|
when(mMenu.findItem(anyInt())).thenAnswer(invocation -> {
|
||||||
final Object[] args = invocation.getArguments();
|
final Object[] args = invocation.getArguments();
|
||||||
|
Reference in New Issue
Block a user