summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-01-31 16:35:21 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-01-31 16:35:21 +0000
commitf05c774e2af5d766b2ea561abb8a8b0d361cbe9c (patch)
tree95911d43ef49bce8d7b191fa18a143b2c052509a /java
parent1ec46f3799bb75aa741eea2cc52af96db21c6f6f (diff)
parent78f87a3886577b1937cbac96256596f1d72c5945 (diff)
Merge "Use SystemUI feature flags" into tm-qpr-dev
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java25
-rw-r--r--java/src/com/android/intentresolver/ChooserContentPreviewUi.java23
-rw-r--r--java/src/com/android/intentresolver/ChooserRequestParameters.java12
-rw-r--r--java/src/com/android/intentresolver/flags/Flags.kt16
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java3
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java9
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java19
7 files changed, 78 insertions, 29 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 7fa715c3..e741b06c 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -98,6 +98,9 @@ import com.android.intentresolver.NoCrossProfileEmptyStateProvider.DevicePolicyB
import com.android.intentresolver.chooser.DisplayResolveInfo;
import com.android.intentresolver.chooser.MultiDisplayResolveInfo;
import com.android.intentresolver.chooser.TargetInfo;
+import com.android.intentresolver.flags.FeatureFlagRepository;
+import com.android.intentresolver.flags.FeatureFlagRepositoryFactory;
+import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.grid.ChooserGridAdapter;
import com.android.intentresolver.grid.DirectShareViewHolder;
import com.android.intentresolver.model.AbstractResolverComparator;
@@ -160,8 +163,6 @@ public class ChooserActivity extends ResolverActivity implements
private static final String CHIP_ICON_METADATA_KEY = "android.service.chooser.chip_icon";
private static final boolean DEBUG = true;
- static final boolean ENABLE_CUSTOM_ACTIONS = false;
- static final boolean ENABLE_RESELECTION_ACTION = false;
public static final String LAUNCH_LOCATION_DIRECT_SHARE = "direct_share";
private static final String SHORTCUT_TARGET = "shortcut_target";
@@ -218,6 +219,9 @@ public class ChooserActivity extends ResolverActivity implements
@Nullable
private ChooserRequestParameters mChooserRequest;
+ private FeatureFlagRepository mFeatureFlagRepository;
+ private ChooserContentPreviewUi mChooserContentPreviewUi;
+
private boolean mShouldDisplayLandscape;
// statsd logger wrapper
protected ChooserActivityLogger mChooserActivityLogger;
@@ -267,19 +271,20 @@ public class ChooserActivity extends ResolverActivity implements
getChooserActivityLogger().logSharesheetTriggered();
+ mFeatureFlagRepository = createFeatureFlagRepository();
try {
mChooserRequest = new ChooserRequestParameters(
getIntent(),
getReferrer(),
getNearbySharingComponent(),
- ENABLE_CUSTOM_ACTIONS,
- ENABLE_RESELECTION_ACTION);
+ mFeatureFlagRepository);
} catch (IllegalArgumentException e) {
Log.e(TAG, "Caller provided invalid Chooser request parameters", e);
finish();
super_onCreate(null);
return;
}
+ mChooserContentPreviewUi = new ChooserContentPreviewUi(mFeatureFlagRepository);
setAdditionalTargets(mChooserRequest.getAdditionalTargets());
@@ -366,6 +371,10 @@ public class ChooserActivity extends ResolverActivity implements
return R.style.Theme_DeviceDefault_Chooser;
}
+ protected FeatureFlagRepository createFeatureFlagRepository() {
+ return new FeatureFlagRepositoryFactory().create(getApplicationContext());
+ }
+
private void createProfileRecords(
AppPredictorFactory factory, IntentFilter targetIntentFilter) {
UserHandle mainUserHandle = getPersonalProfileUserHandle();
@@ -753,7 +762,8 @@ public class ChooserActivity extends ResolverActivity implements
@Nullable
@Override
public Runnable getReselectionAction() {
- if (!ENABLE_RESELECTION_ACTION) {
+ if (!mFeatureFlagRepository
+ .isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)) {
return null;
}
PendingIntent reselectionAction = mChooserRequest.getReselectionAction();
@@ -763,15 +773,12 @@ public class ChooserActivity extends ResolverActivity implements
}
};
- ViewGroup layout = ChooserContentPreviewUi.displayContentPreview(
+ ViewGroup layout = mChooserContentPreviewUi.displayContentPreview(
previewType,
targetIntent,
getResources(),
getLayoutInflater(),
actionFactory,
- ENABLE_CUSTOM_ACTIONS
- ? R.layout.scrollable_chooser_action_row
- : R.layout.chooser_action_row,
parent,
imageLoader,
mEnterTransitionAnimationDelegate,
diff --git a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
index f3d00c43..26c08e36 100644
--- a/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/ChooserContentPreviewUi.java
@@ -45,6 +45,8 @@ import android.widget.TextView;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
+import com.android.intentresolver.flags.FeatureFlagRepository;
+import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.widget.ActionRow;
import com.android.intentresolver.widget.ImagePreviewView;
import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback;
@@ -129,6 +131,8 @@ public final class ChooserContentPreviewUi {
private static final String PLURALS_COUNT = "count";
private static final String PLURALS_FILE_NAME = "file_name";
+ private final FeatureFlagRepository mFeatureFlagRepository;
+
/** Determine the most appropriate type of preview to show for the provided {@link Intent}. */
@ContentPreviewType
public static int findPreferredContentPreview(
@@ -164,17 +168,21 @@ public final class ChooserContentPreviewUi {
return CONTENT_PREVIEW_TEXT;
}
+ public ChooserContentPreviewUi(
+ FeatureFlagRepository featureFlagRepository) {
+ mFeatureFlagRepository = featureFlagRepository;
+ }
+
/**
* Display a content preview of the specified {@code previewType} to preview the content of the
* specified {@code intent}.
*/
- public static ViewGroup displayContentPreview(
+ public ViewGroup displayContentPreview(
@ContentPreviewType int previewType,
Intent targetIntent,
Resources resources,
LayoutInflater layoutInflater,
ActionFactory actionFactory,
- @LayoutRes int actionRowLayout,
ViewGroup parent,
ImageLoader previewImageLoader,
TransitionElementStatusCallback transitionElementStatusCallback,
@@ -185,6 +193,9 @@ public final class ChooserContentPreviewUi {
if (previewType != CONTENT_PREVIEW_IMAGE) {
transitionElementStatusCallback.onAllTransitionElementsReady();
}
+ int actionRowLayout = mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)
+ ? R.layout.scrollable_chooser_action_row
+ : R.layout.chooser_action_row;
List<ActionRow.Action> customActions = actionFactory.createCustomActions();
switch (previewType) {
case CONTENT_PREVIEW_TEXT:
@@ -230,7 +241,7 @@ public final class ChooserContentPreviewUi {
}
Runnable reselectionAction = actionFactory.getReselectionAction();
if (reselectionAction != null && layout != null
- && ChooserActivity.ENABLE_RESELECTION_ACTION) {
+ && mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)) {
View reselectionView = layout.findViewById(R.id.reselection_action);
if (reselectionView != null) {
reselectionView.setVisibility(View.VISIBLE);
@@ -241,12 +252,12 @@ public final class ChooserContentPreviewUi {
return layout;
}
- private static List<ActionRow.Action> createActions(
+ private List<ActionRow.Action> createActions(
List<ActionRow.Action> systemActions, List<ActionRow.Action> customActions) {
ArrayList<ActionRow.Action> actions =
new ArrayList<>(systemActions.size() + customActions.size());
actions.addAll(systemActions);
- if (ChooserActivity.ENABLE_CUSTOM_ACTIONS) {
+ if (mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)) {
actions.addAll(customActions);
}
return actions;
@@ -594,6 +605,4 @@ public final class ChooserContentPreviewUi {
this.hasThumbnail = hasThumbnail;
}
}
-
- private ChooserContentPreviewUi() {}
}
diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java
index 97bee82c..0d004b0d 100644
--- a/java/src/com/android/intentresolver/ChooserRequestParameters.java
+++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java
@@ -33,6 +33,9 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
+import com.android.intentresolver.flags.FeatureFlagRepository;
+import com.android.intentresolver.flags.Flags;
+
import com.google.common.collect.ImmutableList;
import java.net.URISyntaxException;
@@ -101,8 +104,7 @@ public class ChooserRequestParameters {
final Intent clientIntent,
final Uri referrer,
@Nullable final ComponentName nearbySharingComponent,
- boolean extractCustomActions,
- boolean extractReslectionAction) {
+ FeatureFlagRepository featureFlags) {
final Intent requestedTarget = parseTargetIntentExtra(
clientIntent.getParcelableExtra(Intent.EXTRA_INTENT));
mTarget = intentWithModifiedLaunchFlags(requestedTarget);
@@ -137,10 +139,10 @@ public class ChooserRequestParameters {
mTargetIntentFilter = getTargetIntentFilter(mTarget);
- mChooserActions = extractCustomActions
+ mChooserActions = featureFlags.isEnabled(Flags.SHARESHEET_CUSTOM_ACTIONS)
? getChooserActions(clientIntent)
: ImmutableList.of();
- mReselectionAction = extractReslectionAction
+ mReselectionAction = featureFlags.isEnabled(Flags.SHARESHEET_RESELECTION_ACTION)
? getReselectionActionExtra(clientIntent)
: null;
}
@@ -194,7 +196,7 @@ public class ChooserRequestParameters {
}
/**
- * Whether the {@link ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP} behavior was requested.
+ * Whether the {@link ChooserActivity#EXTRA_PRIVATE_RETAIN_IN_ON_STOP} behavior was requested.
*/
public boolean shouldRetainInOnStop() {
return mRetainInOnStop;
diff --git a/java/src/com/android/intentresolver/flags/Flags.kt b/java/src/com/android/intentresolver/flags/Flags.kt
index c9271a6a..6962b1c3 100644
--- a/java/src/com/android/intentresolver/flags/Flags.kt
+++ b/java/src/com/android/intentresolver/flags/Flags.kt
@@ -18,11 +18,17 @@ package com.android.intentresolver.flags
import com.android.systemui.flags.UnreleasedFlag
-// keep in sync with com.android.systemui.flags.Flags to make the flags available in the
-// flag flipper app (see go/sysui-flags)
+// Flag id, name and namespace should be kept in sync with [com.android.systemui.flags.Flags] to
+// make the flags available in the flag flipper app (see go/sysui-flags).
object Flags {
+ // TODO(b/266983432) Tracking Bug
@JvmField
- val SHARESHEET_CUSTOM_ACTIONS = UnreleasedFlag(
- id = 1501, name = "sharesheet_custom_actions", namespace = "systemui", teamfood = false
- )
+ val SHARESHEET_CUSTOM_ACTIONS = unreleasedFlag(1501, "sharesheet_custom_actions")
+
+ // TODO(b/266982749) Tracking Bug
+ @JvmField
+ val SHARESHEET_RESELECTION_ACTION = unreleasedFlag(1502, "sharesheet_reselection_action")
+
+ private fun unreleasedFlag(id: Int, name: String, teamfood: Boolean = false) =
+ UnreleasedFlag(id, name, "systemui", teamfood)
}
diff --git a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
index 5df0d4a2..857fa124 100644
--- a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
+++ b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
@@ -31,6 +31,7 @@ import com.android.intentresolver.AbstractMultiProfilePagerAdapter.CrossProfileI
import com.android.intentresolver.AbstractMultiProfilePagerAdapter.MyUserIdProvider;
import com.android.intentresolver.AbstractMultiProfilePagerAdapter.QuietModeManager;
import com.android.intentresolver.chooser.TargetInfo;
+import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.shortcuts.ShortcutLoader;
import java.util.function.Consumer;
@@ -76,6 +77,7 @@ public class ChooserActivityOverrideData {
public MyUserIdProvider mMyUserIdProvider;
public CrossProfileIntentsChecker mCrossProfileIntentsChecker;
public PackageManager packageManager;
+ public FeatureFlagRepository featureFlagRepository;
public void reset() {
onSafelyStartCallback = null;
@@ -128,6 +130,7 @@ public class ChooserActivityOverrideData {
mCrossProfileIntentsChecker = mock(CrossProfileIntentsChecker.class);
when(mCrossProfileIntentsChecker.hasCrossProfileIntents(any(), anyInt(), anyInt()))
.thenAnswer(invocation -> hasCrossProfileIntents);
+ featureFlagRepository = null;
}
private ChooserActivityOverrideData() {}
diff --git a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
index 6bc5e12a..a47014e8 100644
--- a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
+++ b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
@@ -39,6 +39,7 @@ import com.android.intentresolver.AbstractMultiProfilePagerAdapter.QuietModeMana
import com.android.intentresolver.chooser.DisplayResolveInfo;
import com.android.intentresolver.chooser.NotSelectableTargetInfo;
import com.android.intentresolver.chooser.TargetInfo;
+import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.grid.ChooserGridAdapter;
import com.android.intentresolver.shortcuts.ShortcutLoader;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -287,4 +288,12 @@ public class ChooserWrapperActivity
return super.createShortcutLoader(
context, appPredictor, userHandle, targetIntentFilter, callback);
}
+
+ @Override
+ protected FeatureFlagRepository createFeatureFlagRepository() {
+ if (sOverrides.featureFlagRepository != null) {
+ return sOverrides.featureFlagRepository;
+ }
+ return super.createFeatureFlagRepository();
+ }
}
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index d7af8925..53c357d6 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -101,9 +101,13 @@ import androidx.test.rule.ActivityTestRule;
import com.android.intentresolver.ResolverActivity.ResolvedComponentInfo;
import com.android.intentresolver.chooser.DisplayResolveInfo;
+import com.android.intentresolver.flags.FeatureFlagRepository;
+import com.android.intentresolver.flags.Flags;
import com.android.intentresolver.shortcuts.ShortcutLoader;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.systemui.flags.ReleasedFlag;
+import com.android.systemui.flags.UnreleasedFlag;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
@@ -1673,9 +1677,18 @@ public class UnbundledChooserActivityTest {
@Test
public void testLaunchWithCustomAction() throws InterruptedException {
- if (!ChooserActivity.ENABLE_CUSTOM_ACTIONS) {
- return;
- }
+ ChooserActivityOverrideData.getInstance().featureFlagRepository =
+ new FeatureFlagRepository() {
+ @Override
+ public boolean isEnabled(@NonNull UnreleasedFlag flag) {
+ return Flags.SHARESHEET_CUSTOM_ACTIONS.equals(flag) || flag.getDefault();
+ }
+
+ @Override
+ public boolean isEnabled(@NonNull ReleasedFlag flag) {
+ return false;
+ }
+ };
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
when(
ChooserActivityOverrideData