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; package com.android.settings.applications;
import static com.android.settings.spa.app.appinfo.AppInfoSettingsProvider.startAppInfoSettings;
import android.app.Application; import android.app.Application;
import android.app.usage.UsageStats; import android.app.usage.UsageStats;
import android.content.Context; import android.content.Context;
@@ -33,7 +35,6 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
@@ -208,9 +209,7 @@ public class AppsPreferenceController extends BasePreferenceController implement
RelativeDateTimeFormatter.Style.SHORT)); RelativeDateTimeFormatter.Style.SHORT));
pref.setOrder(showAppsCount++); pref.setOrder(showAppsCount++);
pref.setOnPreferenceClickListener(preference -> { pref.setOnPreferenceClickListener(preference -> {
AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class, startAppInfoSettings(pkgName, appEntry.info.uid,
mContext.getString(R.string.application_info_label),
pkgName, appEntry.info.uid,
mHost, 1001 /*RequestCode*/, getMetricsCategory()); mHost, 1001 /*RequestCode*/, getMetricsCategory());
return true; return true;
}); });

View File

@@ -19,16 +19,22 @@ package com.android.settings.spa.app.appinfo
import android.app.settings.SettingsEnums import android.app.settings.SettingsEnums
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import android.os.Bundle import android.os.Bundle
import android.os.UserHandle
import android.util.FeatureFlagUtils
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.fragment.app.Fragment
import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavType import androidx.navigation.NavType
import androidx.navigation.navArgument import androidx.navigation.navArgument
import com.android.settings.R 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.AlarmsAndRemindersAppListProvider
import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider
import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
@@ -77,6 +83,35 @@ object AppInfoSettingsProvider : SettingsPageProvider {
* Expose route to enable enter from non-SPA pages. * Expose route to enable enter from non-SPA pages.
*/ */
fun getRoute(packageName: String, userId: Int): String = "$name/$packageName/$userId" 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) @OptIn(ExperimentalLifecycleComposeApi::class)

View File

@@ -16,6 +16,8 @@
package com.android.settings.widget; package com.android.settings.widget;
import static com.android.settings.spa.app.appinfo.AppInfoSettingsProvider.startAppInfoSettings;
import android.annotation.IdRes; import android.annotation.IdRes;
import android.annotation.UserIdInt; import android.annotation.UserIdInt;
import android.app.Activity; import android.app.Activity;
@@ -40,8 +42,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; 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.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.lifecycle.Lifecycle; 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"); Log.w(TAG, "Missing ingredients to build app info link, skip");
return; return;
} }
entityHeaderContent.setOnClickListener(new View.OnClickListener() { entityHeaderContent.setOnClickListener(v -> startAppInfoSettings(
@Override mPackageName, mUid, mFragment, 0 /* request */,
public void onClick(View v) { mMetricsCategory));
AppInfoBase.startAppInfoFragment(
AppInfoDashboardFragment.class,
mActivity.getString(R.string.application_info_label),
mPackageName, mUid, mFragment, 0 /* request */,
mMetricsCategory);
}
});
return;
} }
/** /**