diff --git a/src/com/android/settings/applications/AppsPreferenceController.java b/src/com/android/settings/applications/AppsPreferenceController.java index 37ec0bbf0a1..963376662b7 100644 --- a/src/com/android/settings/applications/AppsPreferenceController.java +++ b/src/com/android/settings/applications/AppsPreferenceController.java @@ -16,6 +16,8 @@ package com.android.settings.applications; +import static com.android.settings.spa.app.appinfo.AppInfoSettingsProvider.startAppInfoSettings; + import android.app.Application; import android.app.usage.UsageStats; import android.content.Context; @@ -33,7 +35,6 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.Utils; import com.android.settingslib.applications.ApplicationsState; @@ -208,9 +209,7 @@ public class AppsPreferenceController extends BasePreferenceController implement RelativeDateTimeFormatter.Style.SHORT)); pref.setOrder(showAppsCount++); pref.setOnPreferenceClickListener(preference -> { - AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class, - mContext.getString(R.string.application_info_label), - pkgName, appEntry.info.uid, + startAppInfoSettings(pkgName, appEntry.info.uid, mHost, 1001 /*RequestCode*/, getMetricsCategory()); return true; }); diff --git a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt index b019061652b..d59a4f72c86 100644 --- a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt +++ b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt @@ -19,16 +19,22 @@ package com.android.settings.spa.app.appinfo import android.app.settings.SettingsEnums import android.content.pm.ApplicationInfo import android.os.Bundle +import android.os.UserHandle +import android.util.FeatureFlagUtils import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.fragment.app.Fragment import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavType import androidx.navigation.navArgument import com.android.settings.R +import com.android.settings.applications.AppInfoBase +import com.android.settings.applications.appinfo.AppInfoDashboardFragment +import com.android.settings.spa.SpaActivity.Companion.startSpaActivity import com.android.settings.spa.app.specialaccess.AlarmsAndRemindersAppListProvider import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider @@ -77,6 +83,35 @@ object AppInfoSettingsProvider : SettingsPageProvider { * Expose route to enable enter from non-SPA pages. */ fun getRoute(packageName: String, userId: Int): String = "$name/$packageName/$userId" + + /** + * Starts the App Info Settings page from non-SPA. + * + * Will starts SPA version if flag [FeatureFlagUtils.SETTINGS_ENABLE_SPA] is true. + */ + @JvmStatic + fun startAppInfoSettings( + packageName: String, + uid: Int, + source: Fragment, + request: Int, + sourceMetricsCategory: Int, + ) { + val context = source.context ?: return + if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_ENABLE_SPA)) { + context.startSpaActivity(getRoute(packageName, UserHandle.getUserId(uid))) + } else { + AppInfoBase.startAppInfoFragment( + AppInfoDashboardFragment::class.java, + context.getString(R.string.application_info_label), + packageName, + uid, + source, + request, + sourceMetricsCategory, + ) + } + } } @OptIn(ExperimentalLifecycleComposeApi::class) diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java index 51911c0ed1e..8a2403cf3c0 100644 --- a/src/com/android/settings/widget/EntityHeaderController.java +++ b/src/com/android/settings/widget/EntityHeaderController.java @@ -16,6 +16,8 @@ package com.android.settings.widget; +import static com.android.settings.spa.app.appinfo.AppInfoSettingsProvider.startAppInfoSettings; + import android.annotation.IdRes; import android.annotation.UserIdInt; import android.app.Activity; @@ -40,8 +42,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.Utils; -import com.android.settings.applications.AppInfoBase; -import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -292,17 +292,9 @@ public class EntityHeaderController { Log.w(TAG, "Missing ingredients to build app info link, skip"); return; } - entityHeaderContent.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AppInfoBase.startAppInfoFragment( - AppInfoDashboardFragment.class, - mActivity.getString(R.string.application_info_label), - mPackageName, mUid, mFragment, 0 /* request */, - mMetricsCategory); - } - }); - return; + entityHeaderContent.setOnClickListener(v -> startAppInfoSettings( + mPackageName, mUid, mFragment, 0 /* request */, + mMetricsCategory)); } /**