diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index c37b6093ca1..143c92dc1aa 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -572,6 +572,11 @@ public class SettingsActivity extends SettingsBaseActivity @VisibleForTesting void launchSettingFragment(String initialFragmentName, Intent intent) { if (initialFragmentName != null) { + if (SettingsActivityUtil.launchSpaActivity(this, initialFragmentName, intent)) { + finish(); + return; + } + setTitleFromIntent(intent); Bundle initialArguments = intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); diff --git a/src/com/android/settings/SettingsActivityUtil.kt b/src/com/android/settings/SettingsActivityUtil.kt new file mode 100644 index 00000000000..c673ad9861f --- /dev/null +++ b/src/com/android/settings/SettingsActivityUtil.kt @@ -0,0 +1,78 @@ +/* + * 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.settings + +import android.content.Context +import android.content.Intent +import android.util.FeatureFlagUtils +import com.android.settings.applications.appinfo.AlarmsAndRemindersDetails +import com.android.settings.applications.appinfo.DrawOverlayDetails +import com.android.settings.applications.appinfo.ExternalSourcesDetails +import com.android.settings.applications.appinfo.ManageExternalStorageDetails +import com.android.settings.applications.appinfo.MediaManagementAppsDetails +import com.android.settings.applications.appinfo.WriteSettingsDetails +import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails +import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings +import com.android.settings.spa.SpaActivity.Companion.startSpaActivity +import com.android.settings.spa.SpaActivity.Companion.startSpaActivityForApp +import com.android.settings.spa.app.specialaccess.AlarmsAndRemindersAppListProvider +import com.android.settings.spa.app.specialaccess.AllFilesAccessAppListProvider +import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider +import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider +import com.android.settings.spa.app.specialaccess.MediaManagementAppsAppListProvider +import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider +import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider + +object SettingsActivityUtil { + private val FRAGMENT_TO_SPA_DESTINATION_MAP = mapOf( + PictureInPictureSettings::class.qualifiedName to + PictureInPictureListProvider.getAppListRoute(), + ) + + private val FRAGMENT_TO_SPA_APP_DESTINATION_PREFIX_MAP = mapOf( + PictureInPictureDetails::class.qualifiedName to + PictureInPictureListProvider.getAppInfoRoutePrefix(), + DrawOverlayDetails::class.qualifiedName to + DisplayOverOtherAppsAppListProvider.getAppInfoRoutePrefix(), + WriteSettingsDetails::class.qualifiedName to + ModifySystemSettingsAppListProvider.getAppInfoRoutePrefix(), + AlarmsAndRemindersDetails::class.qualifiedName to + AlarmsAndRemindersAppListProvider.getAppInfoRoutePrefix(), + ExternalSourcesDetails::class.qualifiedName to + InstallUnknownAppsListProvider.getAppInfoRoutePrefix(), + ManageExternalStorageDetails::class.qualifiedName to + AllFilesAccessAppListProvider.getAppInfoRoutePrefix(), + MediaManagementAppsDetails::class.qualifiedName to + MediaManagementAppsAppListProvider.getAppInfoRoutePrefix(), + ) + + @JvmStatic + fun Context.launchSpaActivity(fragmentName: String, intent: Intent): Boolean { + if (!FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_ENABLE_SPA)) { + return false + } + FRAGMENT_TO_SPA_DESTINATION_MAP[fragmentName]?.let { destination -> + startSpaActivity(destination) + return true + } + FRAGMENT_TO_SPA_APP_DESTINATION_PREFIX_MAP[fragmentName]?.let { appDestinationPrefix -> + startSpaActivityForApp(appDestinationPrefix, intent) + return true + } + return false + } +} \ No newline at end of file diff --git a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java index 034230e9302..d794de69475 100644 --- a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java @@ -28,7 +28,6 @@ import android.content.pm.UserInfo; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; -import android.util.FeatureFlagUtils; import android.util.IconDrawableFactory; import android.util.Pair; import android.view.View; @@ -41,8 +40,6 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settings.spa.SpaActivity; -import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider; import com.android.settings.widget.EmptyTextSettings; import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.widget.AppPreference; @@ -129,16 +126,6 @@ public class PictureInPictureSettings extends EmptyTextSettings { mUserManager = um; } - @Override - public void onAttach(Context context) { - super.onAttach(context); - if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_ENABLE_SPA)) { - SpaActivity.startSpaActivity( - context, PictureInPictureListProvider.INSTANCE.getAppListRoute()); - finish(); - } - } - @Override public void onCreate(Bundle icicle) { super.onCreate(icicle);