Loading flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,13 @@ flag { bug: "378011512" } flag { name: "hide_roots_on_desktop" namespace: "documentsui" description: "Enables the hiding of the Images/Videos/Audio/Documents roots on desktop." bug: "381959330" } flag { name: "redirect_get_content" namespace: "documentsui" Loading src/com/android/documentsui/sidebar/RootsFragment.java +8 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.documentsui.sidebar; import static com.android.documentsui.base.Shared.compareToIgnoreCaseNullable; import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.base.SharedMinimal.VERBOSE; import static com.android.documentsui.flags.Flags.hideRootsOnDesktop; import static com.android.documentsui.flags.Flags.useMaterial3; import android.app.admin.DevicePolicyManager; Loading Loading @@ -480,6 +481,13 @@ public class RootsFragment extends Fragment { if (root.isExternalStorageHome()) { continue; } else if (hideRootsOnDesktop() && context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_PC) && (root.isImages() || root.isVideos() || root.isDocuments() || root.isAudio())) { // Hide Images/Videos/Documents/Audio roots on desktop. Log.d(TAG, "Hiding " + root); continue; } else if (root.isLibrary() || root.isDownloads()) { item = mUseRailAsContainer Loading tests/unit/com/android/documentsui/sidebar/RootsFragmentTest.java +60 −6 Original line number Diff line number Diff line Loading @@ -24,7 +24,12 @@ import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import androidx.test.filters.MediumTest; import androidx.test.platform.app.InstrumentationRegistry; Loading @@ -33,6 +38,7 @@ import com.android.documentsui.TestConfigStore; import com.android.documentsui.TestUserManagerState; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.UserId; import com.android.documentsui.flags.Flags; import com.android.documentsui.testing.TestEnv; import com.android.documentsui.testing.TestProvidersAccess; import com.android.documentsui.testing.TestResolveInfo; Loading @@ -41,6 +47,7 @@ import com.android.modules.utils.build.SdkLevel; import com.google.android.collect.Lists; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; Loading @@ -59,13 +66,14 @@ import java.util.List; public class RootsFragmentTest { private Context mContext; private PackageManager mPackageManager; private DevicePolicyManager mDevicePolicyManager; private RootsFragment mRootsFragment; private TestEnv mEnv; private final TestConfigStore mTestConfigStore = new TestConfigStore(); private TestUserManagerState mTestUserManagerState; private static final String[] EXPECTED_SORTED_RESULT = { private static final String[] EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP = { TestProvidersAccess.RECENTS.title, TestProvidersAccess.IMAGE.title, TestProvidersAccess.VIDEO.title, Loading @@ -79,6 +87,19 @@ public class RootsFragmentTest { TestProvidersAccess.INSPECTOR.title, TestProvidersAccess.PICKLES.title}; private static final String[] EXPECTED_SORTED_RESULT_FOR_DESKTOP = { TestProvidersAccess.RECENTS.title, TestProvidersAccess.DOWNLOADS.title, "" /* SpacerItem */, TestProvidersAccess.EXTERNALSTORAGE.title, TestProvidersAccess.HAMMY.title, "" /* SpacerItem */, TestProvidersAccess.INSPECTOR.title, TestProvidersAccess.PICKLES.title}; @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Parameter(0) public boolean isPrivateSpaceEnabled; Loading @@ -98,12 +119,14 @@ public class RootsFragmentTest { mContext = mock(Context.class); mDevicePolicyManager = mock(DevicePolicyManager.class); mPackageManager = mock(PackageManager.class); when(mContext.getResources()).thenReturn( InstrumentationRegistry.getInstrumentation().getTargetContext().getResources()); when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) .thenReturn(mDevicePolicyManager); when(mContext.getApplicationContext()).thenReturn( InstrumentationRegistry.getInstrumentation().getTargetContext()); when(mContext.getPackageManager()).thenReturn(mPackageManager); if (SdkLevel.isAtLeastS() && isPrivateSpaceEnabled) { mTestConfigStore.enablePrivateSpaceInPhotoPicker(); Loading @@ -115,7 +138,38 @@ public class RootsFragmentTest { } @Test public void testSortLoadResult_WithCorrectOrder() { @RequiresFlagsDisabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_hideRootsOnDesktopFlagDisable() { List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, createFakeRootInfoList(), null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP)); } @Test @RequiresFlagsEnabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_onNonDesktop() { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_PC)).thenReturn(false); List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, createFakeRootInfoList(), null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP)); } @Test @RequiresFlagsEnabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_onDesktop() { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_PC)).thenReturn(true); List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, Loading @@ -124,7 +178,7 @@ public class RootsFragmentTest { UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items)); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_DESKTOP)); } @Test Loading Loading @@ -169,13 +223,13 @@ public class RootsFragmentTest { assertEquals(rootList.get(2).title, TestProvidersAccess.PICKLES.title); } private boolean assertSortedResult(List<Item> items) { private boolean assertSortedResult(List<Item> items, String[] expectedSortedResult) { for (int i = 0; i < items.size(); i++) { Item item = items.get(i); if (item instanceof RootItem) { assertEquals(EXPECTED_SORTED_RESULT[i], ((RootItem) item).root.title); assertEquals(expectedSortedResult[i], ((RootItem) item).root.title); } else if (item instanceof SpacerItem) { assertTrue(EXPECTED_SORTED_RESULT[i].isEmpty()); assertTrue(expectedSortedResult[i].isEmpty()); } else { return false; } Loading Loading
flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,13 @@ flag { bug: "378011512" } flag { name: "hide_roots_on_desktop" namespace: "documentsui" description: "Enables the hiding of the Images/Videos/Audio/Documents roots on desktop." bug: "381959330" } flag { name: "redirect_get_content" namespace: "documentsui" Loading
src/com/android/documentsui/sidebar/RootsFragment.java +8 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.documentsui.sidebar; import static com.android.documentsui.base.Shared.compareToIgnoreCaseNullable; import static com.android.documentsui.base.SharedMinimal.DEBUG; import static com.android.documentsui.base.SharedMinimal.VERBOSE; import static com.android.documentsui.flags.Flags.hideRootsOnDesktop; import static com.android.documentsui.flags.Flags.useMaterial3; import android.app.admin.DevicePolicyManager; Loading Loading @@ -480,6 +481,13 @@ public class RootsFragment extends Fragment { if (root.isExternalStorageHome()) { continue; } else if (hideRootsOnDesktop() && context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_PC) && (root.isImages() || root.isVideos() || root.isDocuments() || root.isAudio())) { // Hide Images/Videos/Documents/Audio roots on desktop. Log.d(TAG, "Hiding " + root); continue; } else if (root.isLibrary() || root.isDownloads()) { item = mUseRailAsContainer Loading
tests/unit/com/android/documentsui/sidebar/RootsFragmentTest.java +60 −6 Original line number Diff line number Diff line Loading @@ -24,7 +24,12 @@ import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import androidx.test.filters.MediumTest; import androidx.test.platform.app.InstrumentationRegistry; Loading @@ -33,6 +38,7 @@ import com.android.documentsui.TestConfigStore; import com.android.documentsui.TestUserManagerState; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.UserId; import com.android.documentsui.flags.Flags; import com.android.documentsui.testing.TestEnv; import com.android.documentsui.testing.TestProvidersAccess; import com.android.documentsui.testing.TestResolveInfo; Loading @@ -41,6 +47,7 @@ import com.android.modules.utils.build.SdkLevel; import com.google.android.collect.Lists; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; Loading @@ -59,13 +66,14 @@ import java.util.List; public class RootsFragmentTest { private Context mContext; private PackageManager mPackageManager; private DevicePolicyManager mDevicePolicyManager; private RootsFragment mRootsFragment; private TestEnv mEnv; private final TestConfigStore mTestConfigStore = new TestConfigStore(); private TestUserManagerState mTestUserManagerState; private static final String[] EXPECTED_SORTED_RESULT = { private static final String[] EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP = { TestProvidersAccess.RECENTS.title, TestProvidersAccess.IMAGE.title, TestProvidersAccess.VIDEO.title, Loading @@ -79,6 +87,19 @@ public class RootsFragmentTest { TestProvidersAccess.INSPECTOR.title, TestProvidersAccess.PICKLES.title}; private static final String[] EXPECTED_SORTED_RESULT_FOR_DESKTOP = { TestProvidersAccess.RECENTS.title, TestProvidersAccess.DOWNLOADS.title, "" /* SpacerItem */, TestProvidersAccess.EXTERNALSTORAGE.title, TestProvidersAccess.HAMMY.title, "" /* SpacerItem */, TestProvidersAccess.INSPECTOR.title, TestProvidersAccess.PICKLES.title}; @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Parameter(0) public boolean isPrivateSpaceEnabled; Loading @@ -98,12 +119,14 @@ public class RootsFragmentTest { mContext = mock(Context.class); mDevicePolicyManager = mock(DevicePolicyManager.class); mPackageManager = mock(PackageManager.class); when(mContext.getResources()).thenReturn( InstrumentationRegistry.getInstrumentation().getTargetContext().getResources()); when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) .thenReturn(mDevicePolicyManager); when(mContext.getApplicationContext()).thenReturn( InstrumentationRegistry.getInstrumentation().getTargetContext()); when(mContext.getPackageManager()).thenReturn(mPackageManager); if (SdkLevel.isAtLeastS() && isPrivateSpaceEnabled) { mTestConfigStore.enablePrivateSpaceInPhotoPicker(); Loading @@ -115,7 +138,38 @@ public class RootsFragmentTest { } @Test public void testSortLoadResult_WithCorrectOrder() { @RequiresFlagsDisabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_hideRootsOnDesktopFlagDisable() { List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, createFakeRootInfoList(), null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP)); } @Test @RequiresFlagsEnabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_onNonDesktop() { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_PC)).thenReturn(false); List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, createFakeRootInfoList(), null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_NON_DESKTOP)); } @Test @RequiresFlagsEnabled({Flags.FLAG_HIDE_ROOTS_ON_DESKTOP}) public void testSortLoadResult_WithCorrectOrder_onDesktop() { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_PC)).thenReturn(true); List<Item> items = mRootsFragment.sortLoadResult( mContext, mEnv.state, Loading @@ -124,7 +178,7 @@ public class RootsFragmentTest { UserId.DEFAULT_USER, Collections.singletonList(UserId.DEFAULT_USER), /* maybeShowBadge */ false, mTestUserManagerState); assertTrue(assertSortedResult(items)); assertTrue(assertSortedResult(items, EXPECTED_SORTED_RESULT_FOR_DESKTOP)); } @Test Loading Loading @@ -169,13 +223,13 @@ public class RootsFragmentTest { assertEquals(rootList.get(2).title, TestProvidersAccess.PICKLES.title); } private boolean assertSortedResult(List<Item> items) { private boolean assertSortedResult(List<Item> items, String[] expectedSortedResult) { for (int i = 0; i < items.size(); i++) { Item item = items.get(i); if (item instanceof RootItem) { assertEquals(EXPECTED_SORTED_RESULT[i], ((RootItem) item).root.title); assertEquals(expectedSortedResult[i], ((RootItem) item).root.title); } else if (item instanceof SpacerItem) { assertTrue(EXPECTED_SORTED_RESULT[i].isEmpty()); assertTrue(expectedSortedResult[i].isEmpty()); } else { return false; } Loading