Redirect to AppInfoSettings when SPA is on

From recently opened apps or when click app icon from some app info
pages.

Bug: 236346018
Test: Manually with Settings
Change-Id: Ia4e1789196875eb0d10fdb6363f0d65cb88cb563
This commit is contained in:
Chaohui Wang
2023-01-06 14:46:27 +08:00
parent 7d7bcaf46f
commit 87e3064b33
3 changed files with 43 additions and 17 deletions

View File

@@ -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;
});

View File

@@ -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)

View File

@@ -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),
entityHeaderContent.setOnClickListener(v -> startAppInfoSettings(
mPackageName, mUid, mFragment, 0 /* request */,
mMetricsCategory);
}
});
return;
mMetricsCategory));
}
/**