diff options
| author | 2023-09-11 10:59:41 -0400 | |
|---|---|---|
| committer | 2023-09-11 21:32:53 -0400 | |
| commit | 42fbb1defed76e2f712195b088c34fdff12a764e (patch) | |
| tree | ce94bdbc8d96c127b0d78114816f2a60ac95fee0 /java/src | |
| parent | a5812b465408efd2cc096099ee8b3284c6e334bd (diff) | |
Remove SysUiFlags, provide injectable FeatureFlags
Bug: 296633726
Test: atest IntentResolverUnitTests
Change-Id: I523c9af094da30307904003c417dc50c6cb4a44b
Diffstat (limited to 'java/src')
7 files changed, 32 insertions, 108 deletions
| diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 1e670a21..0101c046 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -23,9 +23,7 @@ import static android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CANT  import static android.app.admin.DevicePolicyResources.Strings.Core.RESOLVER_CROSS_PROFILE_BLOCKED_TITLE;  import static android.stats.devicepolicy.nano.DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_PERSONAL;  import static android.stats.devicepolicy.nano.DevicePolicyEnums.RESOLVER_EMPTY_STATE_NO_SHARING_TO_WORK; -  import static androidx.lifecycle.LifecycleKt.getCoroutineScope; -  import static com.android.internal.util.LatencyTracker.ACTION_LOAD_SHARE_SHEET;  import android.annotation.IntDef; @@ -85,8 +83,6 @@ import com.android.intentresolver.contentpreview.BasePreviewViewModel;  import com.android.intentresolver.contentpreview.ChooserContentPreviewUi;  import com.android.intentresolver.contentpreview.HeadlineGeneratorImpl;  import com.android.intentresolver.contentpreview.PreviewViewModel; -import com.android.intentresolver.flags.FeatureFlagRepository; -import com.android.intentresolver.flags.FeatureFlagRepositoryFactory;  import com.android.intentresolver.grid.ChooserGridAdapter;  import com.android.intentresolver.icons.DefaultTargetDataLoader;  import com.android.intentresolver.icons.TargetDataLoader; @@ -119,6 +115,8 @@ import java.util.concurrent.ExecutorService;  import java.util.concurrent.Executors;  import java.util.function.Consumer; +import javax.inject.Inject; +  /**   * The Chooser Activity handles intent resolution specifically for sharing intents -   * for example, as generated by {@see android.content.Intent#createChooser(Intent, CharSequence)}. @@ -175,6 +173,8 @@ public class ChooserActivity extends Hilt_ChooserActivity implements      @Retention(RetentionPolicy.SOURCE)      public @interface ShareTargetType {} +    @Inject public FeatureFlags mFeatureFlags; +      private ChooserIntegratedDeviceComponents mIntegratedDeviceComponents;      /* TODO: this is `nullable` because we have to defer the assignment til onCreate(). We make the @@ -188,7 +188,6 @@ public class ChooserActivity extends Hilt_ChooserActivity implements      private ChooserRefinementManager mRefinementManager; -    private FeatureFlagRepository mFeatureFlagRepository;      private ChooserContentPreviewUi mChooserContentPreviewUi;      private boolean mShouldDisplayLandscape; @@ -242,15 +241,11 @@ public class ChooserActivity extends Hilt_ChooserActivity implements          getEventLog().logSharesheetTriggered(); -        mFeatureFlagRepository = createFeatureFlagRepository(); -        mIntegratedDeviceComponents = getIntegratedDeviceComponents(); -          try {              mChooserRequest = new ChooserRequestParameters(                      getIntent(),                      getReferrerPackageName(), -                    getReferrer(), -                    mFeatureFlagRepository); +                    getReferrer());          } catch (IllegalArgumentException e) {              Log.e(TAG, "Caller provided invalid Chooser request parameters", e);              finish(); @@ -265,7 +260,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements          createProfileRecords(                  new AppPredictorFactory( -                        getApplicationContext(), +                        this, // TODO: Review w/team, possible side effects?                          mChooserRequest.getSharedText(),                          mChooserRequest.getTargetIntentFilter()),                  mChooserRequest.getTargetIntentFilter()); @@ -283,7 +278,10 @@ public class ChooserActivity extends Hilt_ChooserActivity implements                  new DefaultTargetDataLoader(this, getLifecycle(), false),                  /* safeForwardingMode= */ true); -        mFeatureFlagRepository = createFeatureFlagRepository(); +        if (mFeatureFlags.exampleNewSharingMethod()) { +            // Sample flag usage +        } +          mIntegratedDeviceComponents = getIntegratedDeviceComponents();          mRefinementManager = new ViewModelProvider(this).get(ChooserRefinementManager.class); @@ -371,10 +369,6 @@ public class ChooserActivity extends Hilt_ChooserActivity 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(); @@ -395,7 +389,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements          ShortcutLoader shortcutLoader = ActivityManager.isLowRamDeviceStatic()                      ? null                      : createShortcutLoader( -                            getApplicationContext(), +                            this, // TODO: Review w/team, possible side effects?                              appPredictor,                              userHandle,                              targetIntentFilter, diff --git a/java/src/com/android/intentresolver/ChooserRequestParameters.java b/java/src/com/android/intentresolver/ChooserRequestParameters.java index 5157986b..b05d51b2 100644 --- a/java/src/com/android/intentresolver/ChooserRequestParameters.java +++ b/java/src/com/android/intentresolver/ChooserRequestParameters.java @@ -32,7 +32,6 @@ import android.text.TextUtils;  import android.util.Log;  import android.util.Pair; -import com.android.intentresolver.flags.FeatureFlagRepository;  import com.android.intentresolver.util.UriFilters;  import com.google.common.collect.ImmutableList; @@ -104,8 +103,7 @@ public class ChooserRequestParameters {      public ChooserRequestParameters(              final Intent clientIntent,              String referrerPackageName, -            final Uri referrer, -            FeatureFlagRepository featureFlags) { +            final Uri referrer) {          final Intent requestedTarget = parseTargetIntentExtra(                  clientIntent.getParcelableExtra(Intent.EXTRA_INTENT));          mTarget = intentWithModifiedLaunchFlags(requestedTarget); diff --git a/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt b/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt deleted file mode 100644 index d1494fe7..00000000 --- a/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 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.intentresolver.flags - -import android.provider.DeviceConfig -import com.android.systemui.flags.ParcelableFlag - -internal class DeviceConfigProxy { -    fun isEnabled(flag: ParcelableFlag<Boolean>): Boolean? { -        return runCatching { -            val hasProperty = DeviceConfig.getProperty(flag.namespace, flag.name) != null -            if (hasProperty) { -                DeviceConfig.getBoolean(flag.namespace, flag.name, flag.default) -            } else { -                null -            } -        }.getOrDefault(null) -    } -} diff --git a/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt b/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt deleted file mode 100644 index 5b5d769c..00000000 --- a/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 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.intentresolver.flags - -import com.android.systemui.flags.ReleasedFlag -import com.android.systemui.flags.UnreleasedFlag - -interface FeatureFlagRepository { -    fun isEnabled(flag: UnreleasedFlag): Boolean -    fun isEnabled(flag: ReleasedFlag): Boolean -} diff --git a/java/src/com/android/intentresolver/flags/Flags.kt b/java/src/com/android/intentresolver/flags/Flags.kt deleted file mode 100644 index 2c20d341..00000000 --- a/java/src/com/android/intentresolver/flags/Flags.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2022 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.intentresolver.flags - -import com.android.systemui.flags.ReleasedFlag -import com.android.systemui.flags.UnreleasedFlag - -// 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). -// All flags added should be included in UnbundledChooserActivityTest.ALL_FLAGS. -object Flags { -    private fun releasedFlag(name: String) = ReleasedFlag(name, "systemui") - -    private fun unreleasedFlag(name: String, teamfood: Boolean = false) = -        UnreleasedFlag(name, "systemui", teamfood) -} diff --git a/java/src/com/android/intentresolver/inject/FeatureFlagsModule.kt b/java/src/com/android/intentresolver/inject/FeatureFlagsModule.kt new file mode 100644 index 00000000..05cf2104 --- /dev/null +++ b/java/src/com/android/intentresolver/inject/FeatureFlagsModule.kt @@ -0,0 +1,15 @@ +package com.android.intentresolver.inject + +import com.android.intentresolver.FeatureFlags +import com.android.intentresolver.FeatureFlagsImpl +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +object FeatureFlagsModule { + +    @Provides fun featureFlags(): FeatureFlags = FeatureFlagsImpl() +} diff --git a/java/src/com/android/intentresolver/inject/Qualifiers.kt b/java/src/com/android/intentresolver/inject/Qualifiers.kt index 2bfb1ff9..fca1e896 100644 --- a/java/src/com/android/intentresolver/inject/Qualifiers.kt +++ b/java/src/com/android/intentresolver/inject/Qualifiers.kt @@ -20,6 +20,11 @@ import javax.inject.Qualifier  @Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class ActivityOwned +@Qualifier +@MustBeDocumented +@Retention(AnnotationRetention.RUNTIME) +annotation class ApplicationOwned +  @Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class Background  @Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class Default |