summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-03 18:43:37 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-03 18:43:37 -0800
commit725f07abdaf81447c77e0b07f66c77cb355f6e40 (patch)
tree835aa464768f48378e45620c1fe8d8578097c69c
parent4d0d9d44493f3e4ab69da4ff5f01884ba56894d9 (diff)
parentf5ac84e6b4f0335b033122d1fc59805eb44dfa37 (diff)
Merge "Extract flags into their own Util class" into main
-rw-r--r--PREUPLOAD.cfg3
-rw-r--r--preupload-checks.xml27
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java8
-rw-r--r--src/com/android/documentsui/ActionModeController.java6
-rw-r--r--src/com/android/documentsui/BaseActivity.java24
-rw-r--r--src/com/android/documentsui/DrawerController.java4
-rw-r--r--src/com/android/documentsui/Injector.java4
-rw-r--r--src/com/android/documentsui/MenuManager.java10
-rw-r--r--src/com/android/documentsui/NavigationViewManager.java10
-rw-r--r--src/com/android/documentsui/ProfileTabs.java4
-rw-r--r--src/com/android/documentsui/dirlist/AppsRowManager.java4
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java12
-rw-r--r--src/com/android/documentsui/dirlist/DocumentHolder.java6
-rw-r--r--src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java4
-rw-r--r--src/com/android/documentsui/dirlist/GridDocumentHolder.java14
-rw-r--r--src/com/android/documentsui/dirlist/ListDocumentHolder.java11
-rw-r--r--src/com/android/documentsui/files/ActionHandler.java12
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java12
-rw-r--r--src/com/android/documentsui/files/MenuManager.java5
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java6
-rw-r--r--src/com/android/documentsui/queries/SearchChipViewManager.java10
-rw-r--r--src/com/android/documentsui/queries/SearchViewManager.java4
-rw-r--r--src/com/android/documentsui/sidebar/AppItem.java4
-rw-r--r--src/com/android/documentsui/sidebar/RootItem.java4
-rw-r--r--src/com/android/documentsui/sidebar/RootsAdapter.java4
-rw-r--r--src/com/android/documentsui/sidebar/RootsFragment.java15
-rw-r--r--src/com/android/documentsui/sorting/HeaderCell.java4
-rw-r--r--src/com/android/documentsui/sorting/TableHeaderController.java8
-rw-r--r--src/com/android/documentsui/ui/Snackbars.java4
-rw-r--r--src/com/android/documentsui/util/FlagUtils.kt57
-rw-r--r--tests/common/com/android/documentsui/bots/UiBot.java6
-rw-r--r--tests/unit/com/android/documentsui/files/ActionHandlerTest.java4
-rw-r--r--tests/unit/com/android/documentsui/files/MenuManagerTest.java4
33 files changed, 203 insertions, 111 deletions
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index ebc1264c7..8f318d23d 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -1,4 +1,5 @@
[Hook Scripts]
checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT}
-
ktlint_hook = ${REPO_ROOT}/prebuilts/ktlint/ktlint.py -f ${PREUPLOAD_FILES}
+docsui_checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} --config_xml ${REPO_ROOT}/packages/apps/DocumentsUI/preupload-checks.xml
+
diff --git a/preupload-checks.xml b/preupload-checks.xml
new file mode 100644
index 000000000..b30b4240b
--- /dev/null
+++ b/preupload-checks.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2025 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+<module name="Checker">
+ <module name="TreeWalker">
+ <module name="RegexpSinglelineJava">
+ <property name="ignoreComments" value="true" />
+ <property name="severity" value="error" />
+ <property name="format" value="com.android.documentsui.flags.Flags" />
+ <property name="message" value="Please don't use Flags.* directly, instead add the flag to FlagUtils and use that instead." />
+ </module>
+ </module>
+</module>
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index 619162f90..de193e235 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -19,8 +19,8 @@ package com.android.documentsui;
import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import static com.android.documentsui.flags.Flags.desktopFileHandling;
-import static com.android.documentsui.flags.Flags.useSearchV2Rw;
+import static com.android.documentsui.util.FlagUtils.isDesktopFileHandlingFlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isUseSearchV2RwFlagEnabled;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
@@ -576,7 +576,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
flags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
}
// On desktop users expect files to open in a new window.
- if (desktopFileHandling()) {
+ if (isDesktopFileHandlingFlagEnabled()) {
// The combination of NEW_DOCUMENT and MULTIPLE_TASK allows multiple instances of the
// same activity to open in separate windows.
flags |= Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
@@ -916,7 +916,7 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
mState.stack.changeRoot(mActivity.getCurrentRoot());
}
- if (useSearchV2Rw()) {
+ if (isUseSearchV2RwFlagEnabled()) {
return onCreateLoaderV2(id, args);
}
return onCreateLoaderV1(id, args);
diff --git a/src/com/android/documentsui/ActionModeController.java b/src/com/android/documentsui/ActionModeController.java
index 6259a8bba..931942fca 100644
--- a/src/com/android/documentsui/ActionModeController.java
+++ b/src/com/android/documentsui/ActionModeController.java
@@ -17,7 +17,7 @@
package com.android.documentsui;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.Activity;
import android.util.Log;
@@ -138,7 +138,7 @@ public class ActionModeController extends SelectionObserver<String>
// Re-enable TalkBack for the toolbars, as they are no longer covered by action mode.
int[] toolbarIds =
- useMaterial3()
+ isUseMaterial3FlagEnabled()
? new int[] {R.id.toolbar}
: new int[] {R.id.toolbar, R.id.roots_toolbar};
mScope.accessibilityImportanceSetter.setAccessibilityImportance(
@@ -159,7 +159,7 @@ public class ActionModeController extends SelectionObserver<String>
// Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to
// these controls when using linear navigation.
int[] toolbarIds =
- useMaterial3()
+ isUseMaterial3FlagEnabled()
? new int[] {R.id.toolbar}
: new int[] {R.id.toolbar, R.id.roots_toolbar};
mScope.accessibilityImportanceSetter.setAccessibilityImportance(
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index aa46acbe9..11717de4e 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -19,7 +19,7 @@ package com.android.documentsui;
import static com.android.documentsui.base.Shared.EXTRA_BENCHMARK;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.State.MODE_GRID;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Context;
import android.content.Intent;
@@ -184,7 +184,7 @@ public abstract class BaseActivity
// in case Activity continuously encounter resource not found exception.
getTheme().applyStyle(R.style.DocumentsDefaultTheme, false);
- if (useMaterial3() && SdkLevel.isAtLeastS()) {
+ if (isUseMaterial3FlagEnabled() && SdkLevel.isAtLeastS()) {
DynamicColors.applyToActivityIfAvailable(this);
}
@@ -205,7 +205,7 @@ public abstract class BaseActivity
mDrawer = DrawerController.create(this, mInjector.config);
Metrics.logActivityLaunch(mState, intent);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
View navRailRoots = findViewById(R.id.nav_rail_container_roots);
if (navRailRoots != null) {
// Bind event listener for the burger menu on nav rail.
@@ -369,7 +369,7 @@ public abstract class BaseActivity
if (roots != null) {
roots.onSelectedUserChanged();
}
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
final RootsFragment navRailRoots =
RootsFragment.getNavRail(getSupportFragmentManager());
if (navRailRoots != null) {
@@ -397,7 +397,7 @@ public abstract class BaseActivity
});
mSortController = SortController.create(this, mState.derivedMode, mState.sortModel);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
View previewIconPlaceholder = findViewById(R.id.preview_icon_placeholder);
if (previewIconPlaceholder != null) {
previewIconPlaceholder.setVisibility(
@@ -454,7 +454,7 @@ public abstract class BaseActivity
super.onPostCreate(savedInstanceState);
Runnable finishActionMode =
- (useMaterial3())
+ (isUseMaterial3FlagEnabled())
? mNavigator::closeSelectionBar
: mInjector.actionModeController::finishActionMode;
@@ -479,7 +479,7 @@ public abstract class BaseActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
// In Material3 the menu is now inflated in the `NavigationViewMenu`. This is currently
// to allow for us to inflate between the action_menu and the activity menu. Once the
// Material 3 flag is removed, the menus will be merged and we can rely on this single
@@ -510,7 +510,7 @@ public abstract class BaseActivity
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// Remove the subMenu when material3 is launched b/379776735.
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
if (mNavigator != null) {
mNavigator.updateActionMenu();
}
@@ -574,7 +574,7 @@ public abstract class BaseActivity
insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), 0);
// in M3, no additional bottom gap in full screen mode.
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
View saveContainer = findViewById(R.id.container_save);
saveContainer.setPadding(
0, 0, 0, insets.getSystemWindowInsetBottom());
@@ -617,7 +617,7 @@ public abstract class BaseActivity
return;
}
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mNavigator.closeSelectionBar();
} else {
mInjector.actionModeController.finishActionMode();
@@ -759,7 +759,7 @@ public abstract class BaseActivity
if (roots != null) {
roots.onCurrentRootChanged();
}
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
final RootsFragment navRailRoots =
RootsFragment.getNavRail(getSupportFragmentManager());
if (navRailRoots != null) {
@@ -843,7 +843,7 @@ public abstract class BaseActivity
mState.derivedMode = mode;
// Remove the subMenu when material3 is launched b/379776735.
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mInjector.menuManager.updateSubMenu(null);
} else {
final ActionMenuView subMenuView = findViewById(R.id.sub_menu);
diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java
index 88c41b3f2..a519b6001 100644
--- a/src/com/android/documentsui/DrawerController.java
+++ b/src/com/android/documentsui/DrawerController.java
@@ -17,7 +17,7 @@
package com.android.documentsui;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.Activity;
import android.util.Log;
@@ -208,7 +208,7 @@ public abstract class DrawerController implements DrawerListener {
@Override
void setTitle(String title) {
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
mToolbar.setTitle(title);
}
}
diff --git a/src/com/android/documentsui/Injector.java b/src/com/android/documentsui/Injector.java
index 5fd716a97..6b68ba1f1 100644
--- a/src/com/android/documentsui/Injector.java
+++ b/src/com/android/documentsui/Injector.java
@@ -15,7 +15,7 @@
*/
package com.android.documentsui;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.SOURCE;
@@ -129,7 +129,7 @@ public class Injector<T extends ActionHandler> {
public final ActionModeController getActionModeController(
SelectionDetails selectionDetails, EventHandler<MenuItem> menuItemClicker) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
return null;
}
return actionModeController.reset(selectionDetails, menuItemClicker);
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 126a777da..5f17d7e02 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -16,7 +16,8 @@
package com.android.documentsui;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isZipNgFlagEnabled;
import android.view.KeyboardShortcutGroup;
import android.view.Menu;
@@ -33,7 +34,6 @@ import com.android.documentsui.base.Menus;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.flags.Flags;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.sidebar.RootsFragment;
@@ -93,7 +93,7 @@ public abstract class MenuManager {
return;
}
updateCreateDir(mOptionMenu.findItem(R.id.option_menu_create_dir));
- if (Flags.zipNg()) {
+ if (isZipNgFlagEnabled()) {
updateExtractAll(mOptionMenu.findItem(R.id.option_menu_extract_all));
}
updateSettings(mOptionMenu.findItem(R.id.option_menu_settings));
@@ -105,7 +105,7 @@ public abstract class MenuManager {
updateLauncher(mOptionMenu.findItem(R.id.option_menu_launcher));
updateShowHiddenFiles(mOptionMenu.findItem(R.id.option_menu_show_hidden_files));
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
updateModePicker(mOptionMenu.findItem(R.id.sub_menu_grid),
mOptionMenu.findItem(R.id.sub_menu_list));
}
@@ -116,7 +116,7 @@ public abstract class MenuManager {
public void updateSubMenu(Menu menu) {
// Remove the subMenu when material3 is launched b/379776735.
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
menu = mOptionMenu;
if (menu == null) {
return;
diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java
index 6d56b4590..86b5e517f 100644
--- a/src/com/android/documentsui/NavigationViewManager.java
+++ b/src/com/android/documentsui/NavigationViewManager.java
@@ -17,7 +17,7 @@
package com.android.documentsui;
import static com.android.documentsui.base.SharedMinimal.VERBOSE;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -157,7 +157,7 @@ public class NavigationViewManager extends SelectionTracker.SelectionObserver<St
onNavigationIconClicked();
}
});
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mToolbar.setOnMenuItemClickListener(
new Toolbar.OnMenuItemClickListener() {
@Override
@@ -261,7 +261,7 @@ public class NavigationViewManager extends SelectionTracker.SelectionObserver<St
}
private void onNavigationIconClicked() {
- if (useMaterial3() && inSelectionMode()) {
+ if (isUseMaterial3FlagEnabled() && inSelectionMode()) {
closeSelectionBar();
} else if (mDrawer.isPresent()) {
mDrawer.setOpen(true);
@@ -311,7 +311,7 @@ public class NavigationViewManager extends SelectionTracker.SelectionObserver<St
mDrawer.setTitle(mEnv.getDrawerTitle());
boolean showBurgerMenuOnToolbar = true;
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
View navRailRoots = mActivity.findViewById(R.id.nav_rail_container_roots);
if (navRailRoots != null) {
// If nav rail exists, burger menu will show on the nav rail instead.
@@ -336,7 +336,7 @@ public class NavigationViewManager extends SelectionTracker.SelectionObserver<St
mSearchBarView.setVisibility(View.GONE);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
updateActionMenu();
if (inSelectionMode()) {
final int quantity = mInjector.selectionMgr.getSelection().size();
diff --git a/src/com/android/documentsui/ProfileTabs.java b/src/com/android/documentsui/ProfileTabs.java
index 9fbae8bae..5aacc22b0 100644
--- a/src/com/android/documentsui/ProfileTabs.java
+++ b/src/com/android/documentsui/ProfileTabs.java
@@ -20,7 +20,7 @@ import static androidx.core.util.Preconditions.checkNotNull;
import static com.android.documentsui.DevicePolicyResources.Strings.PERSONAL_TAB;
import static com.android.documentsui.DevicePolicyResources.Strings.WORK_TAB;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.admin.DevicePolicyManager;
import android.os.Build;
@@ -156,7 +156,7 @@ public class ProfileTabs implements ProfileTabsAddons {
(ViewGroup.MarginLayoutParams) tab.getLayoutParams();
int tabMarginSide = (int) mTabsContainer.getContext().getResources()
.getDimension(R.dimen.profile_tab_margin_side);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
// M3 uses the margin value as the right margin, except for the last child.
if (i != mTabs.getTabCount() - 1) {
marginLayoutParams.setMargins(0, 0, tabMarginSide, 0);
diff --git a/src/com/android/documentsui/dirlist/AppsRowManager.java b/src/com/android/documentsui/dirlist/AppsRowManager.java
index 53e9bd44d..33cb67a02 100644
--- a/src/com/android/documentsui/dirlist/AppsRowManager.java
+++ b/src/com/android/documentsui/dirlist/AppsRowManager.java
@@ -16,7 +16,7 @@
package com.android.documentsui.dirlist;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -105,7 +105,7 @@ public class AppsRowManager {
}
private boolean shouldShow(State state, boolean isSearchExpanded) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
return false;
}
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 9cd7c2f7c..855a8273d 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -21,8 +21,8 @@ import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.SharedMinimal.VERBOSE;
import static com.android.documentsui.base.State.MODE_GRID;
import static com.android.documentsui.base.State.MODE_LIST;
-import static com.android.documentsui.flags.Flags.desktopFileHandling;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isDesktopFileHandlingFlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
@@ -611,7 +611,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
new RefreshHelper(mRefreshLayout::setEnabled)
.attach(mRecView);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mSelectionMgr.addObserver(mActivity.getNavigator());
mActivity.getNavigator().updateSelection(mSelectionMetadata, this::handleMenuItemClick);
} else {
@@ -924,7 +924,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
}
private void closeSelectionBar() {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mActivity.getNavigator().closeSelectionBar();
} else {
mActionModeController.finishActionMode();
@@ -939,7 +939,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
mSelectionMgr.copySelection(selection);
final int id = item.getItemId();
- if (desktopFileHandling() && id == R.id.dir_menu_open) {
+ if (isDesktopFileHandlingFlagEnabled() && id == R.id.dir_menu_open) {
// On desktop, "open" is displayed in file management mode (i.e. `files.MenuManager`).
// This menu item behaves the same as double click on the menu item which is handled by
// onItemActivated but since onItemActivated requires a RecylcerView ItemDetails, we're
@@ -1535,7 +1535,7 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
// For orientation changed case, sometimes the docs loading comes after the menu
// update. We need to update the menu here to ensure the status is correct.
mInjector.menuManager.updateModel(mModel);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mActivity.getNavigator().updateActionMenu();
} else {
mInjector.menuManager.updateOptionMenu();
diff --git a/src/com/android/documentsui/dirlist/DocumentHolder.java b/src/com/android/documentsui/dirlist/DocumentHolder.java
index b1b2765f8..8e5f50636 100644
--- a/src/com/android/documentsui/dirlist/DocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/DocumentHolder.java
@@ -18,7 +18,7 @@ package com.android.documentsui.dirlist;
import static com.android.documentsui.DevicePolicyResources.Strings.PREVIEW_WORK_FILE_ACCESSIBILITY;
import static com.android.documentsui.DevicePolicyResources.Strings.UNDEFINED;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -56,9 +56,9 @@ import javax.annotation.Nullable;
public abstract class DocumentHolder
extends RecyclerView.ViewHolder implements View.OnKeyListener {
- static final float DISABLED_ALPHA = useMaterial3() ? 0.6f : 0.3f;
+ static final float DISABLED_ALPHA = isUseMaterial3FlagEnabled() ? 0.6f : 0.3f;
- static final int THUMBNAIL_STROKE_WIDTH = useMaterial3() ? 2 : 0;
+ static final int THUMBNAIL_STROKE_WIDTH = isUseMaterial3FlagEnabled() ? 2 : 0;
protected final Context mContext;
diff --git a/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java b/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
index 92faee198..838b1fa72 100644
--- a/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
+++ b/src/com/android/documentsui/dirlist/DocumentsSwipeRefreshLayout.java
@@ -16,7 +16,7 @@
package com.android.documentsui.dirlist;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Context;
import android.content.res.TypedArray;
@@ -45,7 +45,7 @@ public class DocumentsSwipeRefreshLayout extends SwipeRefreshLayout {
public DocumentsSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
TypedValue spinnerColor = new TypedValue();
context.getTheme()
.resolveAttribute(
diff --git a/src/com/android/documentsui/dirlist/GridDocumentHolder.java b/src/com/android/documentsui/dirlist/GridDocumentHolder.java
index 112e98702..e321f8ba7 100644
--- a/src/com/android/documentsui/dirlist/GridDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/GridDocumentHolder.java
@@ -21,7 +21,7 @@ import static com.android.documentsui.DevicePolicyResources.Drawables.WORK_PROFI
import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorLong;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -81,7 +81,7 @@ final class GridDocumentHolder extends DocumentHolder {
ConfigStore configStore) {
super(context, parent, R.layout.item_doc_grid, configStore);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mIconWrapper = itemView.findViewById(R.id.icon_wrapper);
mIconLayout = null;
mIconMimeSm = null;
@@ -119,7 +119,7 @@ final class GridDocumentHolder extends DocumentHolder {
@Override
public void setSelected(boolean selected, boolean animate) {
float checkAlpha = selected ? 1f : 0f;
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
// We always want to make sure our check box disappears if we're not selected,
// even if the item is disabled. This is because this object can be reused
// and this method will be called to setup initial state.
@@ -139,7 +139,7 @@ final class GridDocumentHolder extends DocumentHolder {
super.setSelected(selected, animate);
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
if (animate) {
fade(mIconMimeSm, 1f - checkAlpha).start();
} else {
@@ -164,7 +164,7 @@ final class GridDocumentHolder extends DocumentHolder {
float imgAlpha = enabled ? 1f : DISABLED_ALPHA;
mIconMimeLg.setAlpha(imgAlpha);
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
mIconMimeSm.setAlpha(imgAlpha);
}
mIconThumb.setAlpha(imgAlpha);
@@ -206,7 +206,7 @@ final class GridDocumentHolder extends DocumentHolder {
@Override
public boolean inSelectRegion(MotionEvent event) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
return Views.isEventOver(event, itemView.getParent(), mIconWrapper);
}
return Views.isEventOver(event, itemView.getParent(), mIconLayout);
@@ -240,7 +240,7 @@ final class GridDocumentHolder extends DocumentHolder {
mIconThumb.animate().cancel();
mIconThumb.setAlpha(0f);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mIconHelper.load(
mDoc, mIconThumb, mIconMimeLg, /* subIconMime= */ null,
thumbnailLoaded -> {
diff --git a/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/src/com/android/documentsui/dirlist/ListDocumentHolder.java
index a4839d4f4..58473d5aa 100644
--- a/src/com/android/documentsui/dirlist/ListDocumentHolder.java
+++ b/src/com/android/documentsui/dirlist/ListDocumentHolder.java
@@ -20,7 +20,7 @@ import static com.android.documentsui.DevicePolicyResources.Drawables.Style.SOLI
import static com.android.documentsui.DevicePolicyResources.Drawables.WORK_PROFILE_ICON;
import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -89,7 +89,8 @@ final class ListDocumentHolder extends DocumentHolder {
super(context, parent, R.layout.item_doc_list, configStore);
mIconLayout = itemView.findViewById(R.id.icon);
- mIconWrapper = useMaterial3() ? itemView.findViewById(R.id.icon_wrapper) : null;
+ mIconWrapper =
+ isUseMaterial3FlagEnabled() ? itemView.findViewById(R.id.icon_wrapper) : null;
mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime);
mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
mIconCheck = (ImageView) itemView.findViewById(R.id.icon_check);
@@ -147,7 +148,7 @@ final class ListDocumentHolder extends DocumentHolder {
}
// Do not show stroke when selected, only show stroke when not selected if it has thumbnail.
- if (useMaterial3() && mIconWrapper != null) {
+ if (isUseMaterial3FlagEnabled() && mIconWrapper != null) {
if (selected) {
mIconWrapper.setStrokeWidth(0);
} else if (mIconThumb.getDrawable() != null) {
@@ -160,7 +161,7 @@ final class ListDocumentHolder extends DocumentHolder {
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
itemView.setAlpha(enabled ? 1f : DISABLED_ALPHA);
} else {
// Text colors enabled/disabled is handle via a color set.
@@ -269,7 +270,7 @@ final class ListDocumentHolder extends DocumentHolder {
/* subIconMime= */ null,
thumbnailLoaded -> {
// Show stroke when thumbnail is loaded.
- if (useMaterial3() && mIconWrapper != null) {
+ if (isUseMaterial3FlagEnabled() && mIconWrapper != null) {
mIconWrapper.setStrokeWidth(thumbnailLoaded ? THUMBNAIL_STROKE_WIDTH : 0);
}
});
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 33057d140..86f7a1a14 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -19,6 +19,9 @@ package com.android.documentsui.files;
import static android.content.ContentResolver.wrap;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
+import static com.android.documentsui.util.FlagUtils.isDesktopFileHandlingFlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isUsePeekPreviewFlagEnabled;
import android.app.DownloadManager;
import android.content.ActivityNotFoundException;
@@ -67,7 +70,6 @@ import com.android.documentsui.clipping.ClipStore;
import com.android.documentsui.clipping.DocumentClipper;
import com.android.documentsui.clipping.UrisSupplier;
import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.flags.Flags;
import com.android.documentsui.inspector.InspectorActivity;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.roots.ProvidersAccess;
@@ -234,7 +236,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co
@Override
public void springOpenDirectory(DocumentInfo doc) {
assert (doc.isDirectory());
- if (Flags.useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mCloseSelectionBar.run();
} else {
mActionModeAddons.finishActionMode();
@@ -330,7 +332,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co
return;
}
- if (Flags.useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mCloseSelectionBar.run();
} else {
mActionModeAddons.finishActionMode();
@@ -562,7 +564,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co
return;
}
- if (Flags.desktopFileHandling()) {
+ if (isDesktopFileHandlingFlagEnabled()) {
Intent intent = buildViewIntent(doc);
intent.setComponent(
new ComponentName("android", "com.android.internal.app.ResolverActivity"));
@@ -613,7 +615,7 @@ public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.Co
@Override
public void showPreview(DocumentInfo doc) {
- if (Flags.useMaterial3() && Flags.usePeekPreview()) {
+ if (isUseMaterial3FlagEnabled() && isUsePeekPreviewFlagEnabled()) {
showPeek();
} else {
showInspector(doc);
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index ff9d30106..50e266d38 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -18,7 +18,8 @@ package com.android.documentsui.files;
import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_UNKNOWN;
import static com.android.documentsui.base.SharedMinimal.DEBUG;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isZipNgFlagEnabled;
import android.app.ActivityManager.TaskDescription;
import android.content.Intent;
@@ -60,7 +61,6 @@ import com.android.documentsui.clipping.DocumentClipper;
import com.android.documentsui.dirlist.AnimationView.AnimationType;
import com.android.documentsui.dirlist.AppsRowManager;
import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.flags.Flags;
import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.sidebar.RootsFragment;
import com.android.documentsui.ui.DialogController;
@@ -140,7 +140,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler
mInjector.getModel()::getItemUri,
mInjector.getModel()::getItemCount);
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
mInjector.actionModeController =
new ActionModeController(
this,
@@ -190,7 +190,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler
RootsFragment.show(getSupportFragmentManager(), /* includeApps= */ false,
/* intent= */ null);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
View navRailRoots = findViewById(R.id.nav_rail_container_roots);
if (navRailRoots != null) {
// Medium layout, populate navigation rail layout.
@@ -332,7 +332,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
mInjector.menuManager.updateOptionMenu(menu);
}
return true;
@@ -349,7 +349,7 @@ public class FilesActivity extends BaseActivity implements AbstractActionHandler
} else if (id == R.id.option_menu_settings) {
mInjector.actions.openSettings(getCurrentRoot());
} else if (id == R.id.option_menu_extract_all) {
- if (!Flags.zipNg()) return false;
+ if (!isZipNgFlagEnabled()) return false;
final DirectoryFragment dir = getDirectoryFragment();
if (dir == null) return false;
mInjector.actions.selectAllFiles();
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index 0fb7c4fa1..9b3564eeb 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -16,7 +16,7 @@
package com.android.documentsui.files;
-import static com.android.documentsui.flags.Flags.desktopFileHandling;
+import static com.android.documentsui.util.FlagUtils.isDesktopFileHandlingFlagEnabled;
import android.content.Context;
import android.content.res.Resources;
@@ -168,7 +168,8 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
@Override
protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
- Menus.setEnabledAndVisible(open, desktopFileHandling() && selectionDetails.canOpen());
+ Menus.setEnabledAndVisible(
+ open, isDesktopFileHandlingFlagEnabled() && selectionDetails.canOpen());
}
@Override
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 51b35e155..68a797397 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -21,7 +21,7 @@ import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
import static com.android.documentsui.base.State.ACTION_OPEN;
import static com.android.documentsui.base.State.ACTION_OPEN_TREE;
import static com.android.documentsui.base.State.ACTION_PICK_COPY_DESTINATION;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Intent;
import android.content.res.Resources;
@@ -128,7 +128,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
new DirectoryDetails(this),
mInjector.getModel()::getItemCount);
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
mInjector.actionModeController =
new ActionModeController(
this,
@@ -253,7 +253,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
RootsFragment.show(getSupportFragmentManager(),
/* includeApps= */ mState.action == ACTION_GET_CONTENT,
/* intent= */ moreApps);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
View navRailRoots = findViewById(R.id.nav_rail_container_roots);
if (navRailRoots != null) {
// Medium layout, populate navigation rail layout.
diff --git a/src/com/android/documentsui/queries/SearchChipViewManager.java b/src/com/android/documentsui/queries/SearchChipViewManager.java
index 8bc548493..18cde82a5 100644
--- a/src/com/android/documentsui/queries/SearchChipViewManager.java
+++ b/src/com/android/documentsui/queries/SearchChipViewManager.java
@@ -16,7 +16,7 @@
package com.android.documentsui.queries;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -399,7 +399,7 @@ public class SearchChipViewManager {
chip.setChipIcon(chipIcon);
chip.setOnClickListener(this::onChipClick);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
chip.setOnFocusChangeListener(this::onChipFocusChange);
}
@@ -420,7 +420,7 @@ public class SearchChipViewManager {
// For M3, we don't want to use MIME type icons for image/audio/video/document from the
// system.
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
return switch (chipType) {
case TYPE_IMAGES -> context.getDrawable(R.drawable.ic_chip_image);
case TYPE_AUDIO -> context.getDrawable(R.drawable.ic_chip_audio);
@@ -468,14 +468,14 @@ public class SearchChipViewManager {
}
final int chipSpacing =
- useMaterial3()
+ isUseMaterial3FlagEnabled()
? ((ChipGroup) mChipGroup).getChipSpacingHorizontal()
: mChipGroup
.getResources()
.getDimensionPixelSize(R.dimen.search_chip_spacing);
final boolean isRtl = mChipGroup.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
final float chipGroupPaddingStart =
- useMaterial3()
+ isUseMaterial3FlagEnabled()
? mChipGroup.getPaddingStart()
: mChipGroup
.getResources()
diff --git a/src/com/android/documentsui/queries/SearchViewManager.java b/src/com/android/documentsui/queries/SearchViewManager.java
index 1e26e4e08..ca132a187 100644
--- a/src/com/android/documentsui/queries/SearchViewManager.java
+++ b/src/com/android/documentsui/queries/SearchViewManager.java
@@ -20,7 +20,7 @@ import static com.android.documentsui.base.SharedMinimal.DEBUG;
import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
import static com.android.documentsui.base.State.ACTION_OPEN;
import static com.android.documentsui.base.State.ActionType;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Intent;
import android.os.Bundle;
@@ -335,7 +335,7 @@ public class SearchViewManager implements
// Recent root show open search bar, do not show duplicate search icon.
boolean enabled = supportsSearch && (!stack.isRecents() || !mShowSearchBar);
mMenuItem.setVisible(enabled);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
// When the use_material3 flag is enabled, we inflate and deflate the menu.
// This causes the search button to be disabled on inflation, toggle it in
// this scenario.
diff --git a/src/com/android/documentsui/sidebar/AppItem.java b/src/com/android/documentsui/sidebar/AppItem.java
index c719241d2..d9aed1522 100644
--- a/src/com/android/documentsui/sidebar/AppItem.java
+++ b/src/com/android/documentsui/sidebar/AppItem.java
@@ -16,7 +16,7 @@
package com.android.documentsui.sidebar;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -102,7 +102,7 @@ public class AppItem extends Item {
// In M3, we don't show action icon for the app items, do nothing here because the icons
// are hidden by default.
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
final View actionIconArea = convertView.findViewById(R.id.action_icon_area);
final ImageView actionIcon = (ImageView) convertView.findViewById(R.id.action_icon);
bindActionIcon(actionIconArea, actionIcon);
diff --git a/src/com/android/documentsui/sidebar/RootItem.java b/src/com/android/documentsui/sidebar/RootItem.java
index 326f086e1..af72a5239 100644
--- a/src/com/android/documentsui/sidebar/RootItem.java
+++ b/src/com/android/documentsui/sidebar/RootItem.java
@@ -16,7 +16,7 @@
package com.android.documentsui.sidebar;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -110,7 +110,7 @@ public class RootItem extends Item {
}
protected final void bindAction(View view, int visibility, int iconId, String description) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
final MaterialButton actionIcon = view.findViewById(R.id.action_icon);
actionIcon.setVisibility(visibility);
diff --git a/src/com/android/documentsui/sidebar/RootsAdapter.java b/src/com/android/documentsui/sidebar/RootsAdapter.java
index b64e39d5f..d689705be 100644
--- a/src/com/android/documentsui/sidebar/RootsAdapter.java
+++ b/src/com/android/documentsui/sidebar/RootsAdapter.java
@@ -16,7 +16,7 @@
package com.android.documentsui.sidebar;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.Activity;
import android.os.Looper;
@@ -86,7 +86,7 @@ class RootsAdapter extends ArrayAdapter<Item> {
final Item item = getItem(position);
final View view = item.getView(convertView, parent);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
// In order to have hover showing on the list item, we need to have
// "android:clickable=true" on the list item level, which will break the click handler
// because it's set at the list level, so here we "bubble up" the item level click
diff --git a/src/com/android/documentsui/sidebar/RootsFragment.java b/src/com/android/documentsui/sidebar/RootsFragment.java
index e30017fe4..1735f9a29 100644
--- a/src/com/android/documentsui/sidebar/RootsFragment.java
+++ b/src/com/android/documentsui/sidebar/RootsFragment.java
@@ -19,8 +19,8 @@ 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 static com.android.documentsui.util.FlagUtils.isHideRootsOnDesktopFlagEnabled;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -150,7 +150,7 @@ public class RootsFragment extends Fragment {
private List<Item> mApplicationItemList;
// Weather the fragment is using nav_rail_container_roots as its container (in nav_rail_layout).
- // This will always be false if useMaterial3() flag is off.
+ // This will always be false if isUseMaterial3FlagEnabled() flag is off.
private boolean mUseRailAsContainer = false;
/**
@@ -183,7 +183,7 @@ public class RootsFragment extends Fragment {
final Bundle args = new Bundle();
args.putBoolean(EXTRA_INCLUDE_APPS, includeApps);
args.putParcelable(EXTRA_INCLUDE_APPS_INTENT, intent);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
args.putInt(EXTRA_CONTAINER_ID, containerId);
}
@@ -215,7 +215,7 @@ public class RootsFragment extends Fragment {
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
mUseRailAsContainer =
getArguments() != null
&& getArguments().getInt(EXTRA_CONTAINER_ID)
@@ -481,8 +481,9 @@ public class RootsFragment extends Fragment {
if (root.isExternalStorageHome()) {
continue;
- } else if (hideRootsOnDesktop() && context.getPackageManager().hasSystemFeature(
- PackageManager.FEATURE_PC) && (root.isImages() || root.isVideos()
+ } else if (isHideRootsOnDesktopFlagEnabled()
+ && context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_PC)
+ && (root.isImages() || root.isVideos()
|| root.isDocuments()
|| root.isAudio())) {
// Hide Images/Videos/Documents/Audio roots on desktop.
diff --git a/src/com/android/documentsui/sorting/HeaderCell.java b/src/com/android/documentsui/sorting/HeaderCell.java
index e9fce67cc..7f72f13da 100644
--- a/src/com/android/documentsui/sorting/HeaderCell.java
+++ b/src/com/android/documentsui/sorting/HeaderCell.java
@@ -16,7 +16,7 @@
package com.android.documentsui.sorting;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.animation.AnimatorInflater;
import android.animation.LayoutTransition;
@@ -134,7 +134,7 @@ public class HeaderCell extends LinearLayout {
}
private void setDataTypeNumber(View label) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
label.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
setGravity(Gravity.CENTER_VERTICAL | Gravity.START);
} else {
diff --git a/src/com/android/documentsui/sorting/TableHeaderController.java b/src/com/android/documentsui/sorting/TableHeaderController.java
index 52fa465a9..cb72ac916 100644
--- a/src/com/android/documentsui/sorting/TableHeaderController.java
+++ b/src/com/android/documentsui/sorting/TableHeaderController.java
@@ -16,7 +16,7 @@
package com.android.documentsui.sorting;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.view.KeyEvent;
import android.view.View;
@@ -92,12 +92,12 @@ public final class TableHeaderController implements SortController.WidgetControl
if (dimension.getVisibility() == View.VISIBLE
&& dimension.getSortCapability() != SortDimension.SORT_CAPABILITY_NONE) {
cell.setOnClickListener(mOnCellClickListener);
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
cell.setSortArrowListeners(mOnCellClickListener, mOnCellKeyListener, dimension);
}
} else {
cell.setOnClickListener(null);
- if (useMaterial3()) cell.setSortArrowListeners(null, null, null);
+ if (isUseMaterial3FlagEnabled()) cell.setSortArrowListeners(null, null, null);
}
}
@@ -109,7 +109,7 @@ public final class TableHeaderController implements SortController.WidgetControl
/** Sorts the column if the key pressed was Enter or Space. */
private boolean onCellKeyEvent(View v, int keyCode, KeyEvent event) {
- if (!useMaterial3()) {
+ if (!isUseMaterial3FlagEnabled()) {
return false;
}
// Only the enter and space bar should trigger the sort header to engage.
diff --git a/src/com/android/documentsui/ui/Snackbars.java b/src/com/android/documentsui/ui/Snackbars.java
index c6eaf4661..795b6248b 100644
--- a/src/com/android/documentsui/ui/Snackbars.java
+++ b/src/com/android/documentsui/ui/Snackbars.java
@@ -16,7 +16,7 @@
package com.android.documentsui.ui;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import android.app.Activity;
import android.view.Gravity;
@@ -112,7 +112,7 @@ public final class Snackbars {
public static final Snackbar makeSnackbar(
Activity activity, CharSequence message, int duration) {
- final View view = activity.findViewById(useMaterial3()
+ final View view = activity.findViewById(isUseMaterial3FlagEnabled()
? R.id.coordinator_layout
: R.id.container_save
);
diff --git a/src/com/android/documentsui/util/FlagUtils.kt b/src/com/android/documentsui/util/FlagUtils.kt
new file mode 100644
index 000000000..49c55de57
--- /dev/null
+++ b/src/com/android/documentsui/util/FlagUtils.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui.util
+
+import com.android.documentsui.flags.Flags
+
+/**
+ * Wraps the static flags classes to enable a single place to refactor flag usage
+ * (or combine usage when required).
+ */
+class FlagUtils {
+ companion object {
+ @JvmStatic
+ fun isUseMaterial3FlagEnabled(): Boolean {
+ return Flags.useMaterial3()
+ }
+
+ @JvmStatic
+ fun isZipNgFlagEnabled(): Boolean {
+ return Flags.zipNg()
+ }
+
+ @JvmStatic
+ fun isUseSearchV2RwFlagEnabled(): Boolean {
+ return Flags.useSearchV2Rw()
+ }
+
+ @JvmStatic
+ fun isDesktopFileHandlingFlagEnabled(): Boolean {
+ return Flags.desktopFileHandling()
+ }
+
+ @JvmStatic
+ fun isHideRootsOnDesktopFlagEnabled(): Boolean {
+ return Flags.hideRootsOnDesktop()
+ }
+
+ @JvmStatic
+ fun isUsePeekPreviewFlagEnabled(): Boolean {
+ return Flags.usePeekPreview()
+ }
+ }
+}
diff --git a/tests/common/com/android/documentsui/bots/UiBot.java b/tests/common/com/android/documentsui/bots/UiBot.java
index 161510e2a..47e0acd5a 100644
--- a/tests/common/com/android/documentsui/bots/UiBot.java
+++ b/tests/common/com/android/documentsui/bots/UiBot.java
@@ -25,7 +25,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
@@ -211,7 +211,7 @@ public class UiBot extends Bots.BaseBot {
}
public void clickActionbarOverflowItem(String label) {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
onView(TOOLBAR_OVERFLOW).perform(click());
} else {
onView(ACTIONBAR_OVERFLOW).perform(click());
@@ -231,7 +231,7 @@ public class UiBot extends Bots.BaseBot {
}
public boolean waitForActionModeBarToAppear() {
- String actionModeId = useMaterial3() ? "toolbar" : "action_mode_bar";
+ String actionModeId = isUseMaterial3FlagEnabled() ? "toolbar" : "action_mode_bar";
UiObject2 bar =
mDevice.wait(
Until.findObject(By.res(mTargetPackage + ":id/" + actionModeId)), mTimeout);
diff --git a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
index 01dfa1c76..54a685776 100644
--- a/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
+++ b/tests/unit/com/android/documentsui/files/ActionHandlerTest.java
@@ -16,7 +16,7 @@
package com.android.documentsui.files;
-import static com.android.documentsui.flags.Flags.useMaterial3;
+import static com.android.documentsui.util.FlagUtils.isUseMaterial3FlagEnabled;
import static com.android.documentsui.testing.IntentAsserts.assertHasAction;
import static com.android.documentsui.testing.IntentAsserts.assertHasData;
import static com.android.documentsui.testing.IntentAsserts.assertHasExtra;
@@ -160,7 +160,7 @@ public class ActionHandlerTest {
}
private void assertSelectionContainerClosed() {
- if (useMaterial3()) {
+ if (isUseMaterial3FlagEnabled()) {
verify(mMockCloseSelectionBar, times(1)).run();
} else {
assertTrue(mActionModeAddons.finishActionModeCalled);
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index 394537784..f9737dc39 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -16,6 +16,8 @@
package com.android.documentsui.files;
+import static com.android.documentsui.util.FlagUtils.isZipNgFlagEnabled;
+
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -492,7 +494,7 @@ public final class MenuManagerTest {
public void testOptionMenu_ExtractAll() {
dirDetails.isInArchive = true;
mgr.updateOptionMenu(testMenu);
- if (Flags.zipNg()) {
+ if (isZipNgFlagEnabled()) {
mOptionExtractAll.assertEnabledAndVisible();
} else {
mOptionExtractAll.assertDisabledAndInvisible();