summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ben Reich <benreich@google.com> 2025-03-04 06:09:24 +1100
committer Ben Reich <benreich@google.com> 2025-03-03 16:26:28 -0800
commitf5ac84e6b4f0335b033122d1fc59805eb44dfa37 (patch)
treee044ac2ae9f133c6d83074a9cf0cfb17d87fe267
parenta534456b17d5140a2e135b50668a8779bfab5cce (diff)
Extract flags into their own Util class
The flags are all currently spread out across the codebase. This means if we want to do any large scale changes based on them (e.g. change the flag name OR union the flag with some other condition) it requires a mass refactoring. Let's move the flags into their own class so this becomes a much easier process. To avoid additional usages getting added, create a presubmit check that should error when new dependencies are added Bug: 400475579 Flag: EXEMPT Moving flags into a helper class Test: m DocumentsUIGoogle Change-Id: If5c346141813afb68b24e1303362408c3cc9fd4a
-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 bd139ec7a..eb013172d 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.
@@ -333,7 +333,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();