Loading src/com/android/documentsui/BaseActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ public abstract class BaseActivity protected SearchViewManager mSearchManager; protected AppsRowManager mAppsRowManager; protected UserIdManager mUserIdManager; protected State mState; @Injected Loading Loading @@ -199,6 +200,9 @@ public abstract class BaseActivity @Override public void onSearchViewChanged(boolean opened) { mNavigator.update(); // We also need to update AppsRowManager because we may want to show/hide the // appsRow in cross-profile search according to the searching conditions. mAppsRowManager.updateView(BaseActivity.this); } @Override Loading Loading @@ -248,6 +252,7 @@ public abstract class BaseActivity cmdInterceptor); ViewGroup chipGroup = findViewById(R.id.search_chip_group); mUserIdManager = DocumentsApplication.getUserIdManager(this); mSearchManager = new SearchViewManager(searchListener, queryInterceptor, chipGroup, icicle); // initialize the chip sets by accept mime types Loading src/com/android/documentsui/dirlist/AppsRowManager.java +13 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.TextView; import com.android.documentsui.ActionHandler; import com.android.documentsui.BaseActivity; import com.android.documentsui.R; import com.android.documentsui.UserIdManager; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.dirlist.AppsRowItemData.AppData; Loading @@ -47,11 +48,14 @@ public class AppsRowManager { private final ActionHandler mActionHandler; private final List<AppsRowItemData> mDataList; private final boolean mMaybeShowBadge; private final UserIdManager mUserIdManager; public AppsRowManager(ActionHandler handler, boolean maybeShowBadge) { public AppsRowManager(ActionHandler handler, boolean maybeShowBadge, UserIdManager userIdManager) { mDataList = new ArrayList<>(); mActionHandler = handler; mMaybeShowBadge = maybeShowBadge; mUserIdManager = userIdManager; } public List<AppsRowItemData> updateList(List<Item> itemList) { Loading Loading @@ -80,17 +84,22 @@ public class AppsRowManager { return mDataList; } private boolean shouldShow(State state) { private boolean shouldShow(State state, boolean isTextSearching) { boolean isHiddenAction = state.action == State.ACTION_CREATE || state.action == State.ACTION_OPEN_TREE || state.action == State.ACTION_PICK_COPY_DESTINATION; return state.stack.isRecents() && !isHiddenAction && mDataList.size() > 0; boolean isTextSearchingAcrossProfile = mUserIdManager.getUserIds().size() > 1 && state.supportsCrossProfile() && isTextSearching; return state.stack.isRecents() && !isHiddenAction && mDataList.size() > 0 && !isTextSearchingAcrossProfile; } public void updateView(BaseActivity activity) { final View appsRowLayout = activity.findViewById(R.id.apps_row); if (!shouldShow(activity.getDisplayState())) { if (!shouldShow(activity.getDisplayState(), activity.isTextSearching())) { appsRowLayout.setVisibility(View.GONE); return; } Loading src/com/android/documentsui/files/FilesActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -155,7 +155,8 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler mInjector.selectionMgr, mProfileTabsAddonsStub); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile()); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile(), mUserIdManager); mInjector.appsRowManager = mAppsRowManager; mActivityInputHandler = Loading src/com/android/documentsui/picker/PickActivity.java +3 −2 Original line number Diff line number Diff line Loading @@ -138,13 +138,14 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { ProviderExecutor::forAuthority, mInjector, LastAccessedStorage.create(), DocumentsApplication.getUserIdManager(this)); mUserIdManager); mInjector.searchManager = mSearchManager; Intent intent = getIntent(); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile()); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile(), mUserIdManager); mInjector.appsRowManager = mAppsRowManager; mSharedInputHandler = Loading tests/unit/com/android/documentsui/dirlist/AppsRowManagerTest.java +53 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.documentsui.dirlist; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; Loading @@ -33,6 +35,7 @@ import androidx.test.InstrumentationRegistry; import com.android.documentsui.ActionHandler; import com.android.documentsui.BaseActivity; import com.android.documentsui.R; import com.android.documentsui.TestUserIdManager; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.sidebar.AppItem; Loading @@ -42,6 +45,8 @@ import com.android.documentsui.testing.TestActionHandler; import com.android.documentsui.testing.TestProvidersAccess; import com.android.documentsui.testing.TestResolveInfo; import com.google.common.collect.Lists; import org.junit.Before; import org.junit.Test; Loading @@ -55,6 +60,7 @@ public class AppsRowManagerTest { private ActionHandler mActionHandler; private boolean mMaybeShowBadge; private BaseActivity mActivity; private TestUserIdManager mTestUserIdManager; private State mState; private View mAppsRow; Loading @@ -63,8 +69,9 @@ public class AppsRowManagerTest { @Before public void setUp() { mActionHandler = new TestActionHandler(); mTestUserIdManager = new TestUserIdManager(); mAppsRowManager = new AppsRowManager(mActionHandler, mMaybeShowBadge); mAppsRowManager = new AppsRowManager(mActionHandler, mMaybeShowBadge, mTestUserIdManager); Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); LayoutInflater layoutInflater = LayoutInflater.from(context); Loading @@ -78,6 +85,9 @@ public class AppsRowManagerTest { when(mActivity.findViewById(R.id.apps_row)).thenReturn(mAppsRow); when(mActivity.findViewById(R.id.apps_group)).thenReturn(mAppsGroup); when(mActivity.getSelectedUser()).thenReturn(TestProvidersAccess.USER_ID); mTestUserIdManager.userIds = Lists.newArrayList(UserId.DEFAULT_USER, TestProvidersAccess.OtherUser.USER_ID); } @Test Loading Loading @@ -219,6 +229,48 @@ public class AppsRowManagerTest { assertEquals(View.GONE, mAppsRow.getVisibility()); } @Test public void testUpdateView_crossProfileSearch_hideRow() { mState.action = State.ACTION_GET_CONTENT; when(mActivity.isTextSearching()).thenReturn(true); mState.stack.changeRoot(TestProvidersAccess.RECENTS); final List<Item> rootList = new ArrayList<>(); rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.AUDIO, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.HAMMY, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.IMAGE, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.DOWNLOADS, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.PICKLES, mActionHandler, mMaybeShowBadge)); mAppsRowManager.updateList(rootList); mAppsRowManager.updateView(mActivity); assertThat(mAppsRow.getVisibility()).isEqualTo(View.GONE); } @Test public void testUpdateView_notCrossProfileSearch_showRow() { mState.action = State.ACTION_GET_CONTENT; when(mActivity.isTextSearching()).thenReturn(false); mState.stack.changeRoot(TestProvidersAccess.RECENTS); final List<Item> rootList = new ArrayList<>(); rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.AUDIO, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.HAMMY, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.IMAGE, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.DOWNLOADS, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.PICKLES, mActionHandler, mMaybeShowBadge)); mAppsRowManager.updateList(rootList); mAppsRowManager.updateView(mActivity); assertThat(mAppsRow.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void testUpdateView_noItemsOnSelectedUser_hideRow() { mState.action = State.ACTION_GET_CONTENT; Loading Loading
src/com/android/documentsui/BaseActivity.java +5 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ public abstract class BaseActivity protected SearchViewManager mSearchManager; protected AppsRowManager mAppsRowManager; protected UserIdManager mUserIdManager; protected State mState; @Injected Loading Loading @@ -199,6 +200,9 @@ public abstract class BaseActivity @Override public void onSearchViewChanged(boolean opened) { mNavigator.update(); // We also need to update AppsRowManager because we may want to show/hide the // appsRow in cross-profile search according to the searching conditions. mAppsRowManager.updateView(BaseActivity.this); } @Override Loading Loading @@ -248,6 +252,7 @@ public abstract class BaseActivity cmdInterceptor); ViewGroup chipGroup = findViewById(R.id.search_chip_group); mUserIdManager = DocumentsApplication.getUserIdManager(this); mSearchManager = new SearchViewManager(searchListener, queryInterceptor, chipGroup, icicle); // initialize the chip sets by accept mime types Loading
src/com/android/documentsui/dirlist/AppsRowManager.java +13 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.widget.TextView; import com.android.documentsui.ActionHandler; import com.android.documentsui.BaseActivity; import com.android.documentsui.R; import com.android.documentsui.UserIdManager; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.dirlist.AppsRowItemData.AppData; Loading @@ -47,11 +48,14 @@ public class AppsRowManager { private final ActionHandler mActionHandler; private final List<AppsRowItemData> mDataList; private final boolean mMaybeShowBadge; private final UserIdManager mUserIdManager; public AppsRowManager(ActionHandler handler, boolean maybeShowBadge) { public AppsRowManager(ActionHandler handler, boolean maybeShowBadge, UserIdManager userIdManager) { mDataList = new ArrayList<>(); mActionHandler = handler; mMaybeShowBadge = maybeShowBadge; mUserIdManager = userIdManager; } public List<AppsRowItemData> updateList(List<Item> itemList) { Loading Loading @@ -80,17 +84,22 @@ public class AppsRowManager { return mDataList; } private boolean shouldShow(State state) { private boolean shouldShow(State state, boolean isTextSearching) { boolean isHiddenAction = state.action == State.ACTION_CREATE || state.action == State.ACTION_OPEN_TREE || state.action == State.ACTION_PICK_COPY_DESTINATION; return state.stack.isRecents() && !isHiddenAction && mDataList.size() > 0; boolean isTextSearchingAcrossProfile = mUserIdManager.getUserIds().size() > 1 && state.supportsCrossProfile() && isTextSearching; return state.stack.isRecents() && !isHiddenAction && mDataList.size() > 0 && !isTextSearchingAcrossProfile; } public void updateView(BaseActivity activity) { final View appsRowLayout = activity.findViewById(R.id.apps_row); if (!shouldShow(activity.getDisplayState())) { if (!shouldShow(activity.getDisplayState(), activity.isTextSearching())) { appsRowLayout.setVisibility(View.GONE); return; } Loading
src/com/android/documentsui/files/FilesActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -155,7 +155,8 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler mInjector.selectionMgr, mProfileTabsAddonsStub); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile()); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile(), mUserIdManager); mInjector.appsRowManager = mAppsRowManager; mActivityInputHandler = Loading
src/com/android/documentsui/picker/PickActivity.java +3 −2 Original line number Diff line number Diff line Loading @@ -138,13 +138,14 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons { ProviderExecutor::forAuthority, mInjector, LastAccessedStorage.create(), DocumentsApplication.getUserIdManager(this)); mUserIdManager); mInjector.searchManager = mSearchManager; Intent intent = getIntent(); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile()); mAppsRowManager = new AppsRowManager(mInjector.actions, mState.supportsCrossProfile(), mUserIdManager); mInjector.appsRowManager = mAppsRowManager; mSharedInputHandler = Loading
tests/unit/com/android/documentsui/dirlist/AppsRowManagerTest.java +53 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.documentsui.dirlist; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; Loading @@ -33,6 +35,7 @@ import androidx.test.InstrumentationRegistry; import com.android.documentsui.ActionHandler; import com.android.documentsui.BaseActivity; import com.android.documentsui.R; import com.android.documentsui.TestUserIdManager; import com.android.documentsui.base.State; import com.android.documentsui.base.UserId; import com.android.documentsui.sidebar.AppItem; Loading @@ -42,6 +45,8 @@ import com.android.documentsui.testing.TestActionHandler; import com.android.documentsui.testing.TestProvidersAccess; import com.android.documentsui.testing.TestResolveInfo; import com.google.common.collect.Lists; import org.junit.Before; import org.junit.Test; Loading @@ -55,6 +60,7 @@ public class AppsRowManagerTest { private ActionHandler mActionHandler; private boolean mMaybeShowBadge; private BaseActivity mActivity; private TestUserIdManager mTestUserIdManager; private State mState; private View mAppsRow; Loading @@ -63,8 +69,9 @@ public class AppsRowManagerTest { @Before public void setUp() { mActionHandler = new TestActionHandler(); mTestUserIdManager = new TestUserIdManager(); mAppsRowManager = new AppsRowManager(mActionHandler, mMaybeShowBadge); mAppsRowManager = new AppsRowManager(mActionHandler, mMaybeShowBadge, mTestUserIdManager); Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); LayoutInflater layoutInflater = LayoutInflater.from(context); Loading @@ -78,6 +85,9 @@ public class AppsRowManagerTest { when(mActivity.findViewById(R.id.apps_row)).thenReturn(mAppsRow); when(mActivity.findViewById(R.id.apps_group)).thenReturn(mAppsGroup); when(mActivity.getSelectedUser()).thenReturn(TestProvidersAccess.USER_ID); mTestUserIdManager.userIds = Lists.newArrayList(UserId.DEFAULT_USER, TestProvidersAccess.OtherUser.USER_ID); } @Test Loading Loading @@ -219,6 +229,48 @@ public class AppsRowManagerTest { assertEquals(View.GONE, mAppsRow.getVisibility()); } @Test public void testUpdateView_crossProfileSearch_hideRow() { mState.action = State.ACTION_GET_CONTENT; when(mActivity.isTextSearching()).thenReturn(true); mState.stack.changeRoot(TestProvidersAccess.RECENTS); final List<Item> rootList = new ArrayList<>(); rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.AUDIO, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.HAMMY, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.IMAGE, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.DOWNLOADS, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.PICKLES, mActionHandler, mMaybeShowBadge)); mAppsRowManager.updateList(rootList); mAppsRowManager.updateView(mActivity); assertThat(mAppsRow.getVisibility()).isEqualTo(View.GONE); } @Test public void testUpdateView_notCrossProfileSearch_showRow() { mState.action = State.ACTION_GET_CONTENT; when(mActivity.isTextSearching()).thenReturn(false); mState.stack.changeRoot(TestProvidersAccess.RECENTS); final List<Item> rootList = new ArrayList<>(); rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.AUDIO, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.HAMMY, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.IMAGE, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.DOWNLOADS, mActionHandler, mMaybeShowBadge)); rootList.add(new RootItem(TestProvidersAccess.OtherUser.PICKLES, mActionHandler, mMaybeShowBadge)); mAppsRowManager.updateList(rootList); mAppsRowManager.updateView(mActivity); assertThat(mAppsRow.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void testUpdateView_noItemsOnSelectedUser_hideRow() { mState.action = State.ACTION_GET_CONTENT; Loading