Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87e3064b authored by Chaohui Wang's avatar Chaohui Wang
Browse files

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
parent 7d7bcaf4
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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;
                });
+35 −0
Original line number Diff line number Diff line
@@ -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)
+5 −13
Original line number Diff line number Diff line
@@ -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));
    }

    /**