Disable the optimization that is automatically enabled when including Window Extensions through Activity Embedding. The optimization causes to launch an additional trampoline activity for deep links, even when the screen size is smaller than required by Activity Embedding rules. This CL also rename isActivityEmbeddingEnabled to shouldEnableLargeScreenOptimization because the method may report false even if the device supports the feature but Settings app doesn't for performance concern. Bug: 267725145 Bug: 279461170 Test: Build, perf metrics Test: atest LauncherIronwoodIntegrationTests:android.platform.test.scenario.launcher.integration_tests.HomescreenCustomizationTests Test: atest SettingsMultiPaneDeepLinkTest.java Change-Id: I38e8c62a61a344eb7a5cbfd1cd2c2137357d1a87
112 lines
3.9 KiB
Java
112 lines
3.9 KiB
Java
/*
|
|
* Copyright (C) 2021 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.app.Application;
|
|
import android.database.ContentObserver;
|
|
import android.net.Uri;
|
|
import android.provider.Settings;
|
|
import android.util.FeatureFlagUtils;
|
|
|
|
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
|
|
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
|
|
import com.android.settings.core.instrumentation.ElapsedTimeUtils;
|
|
import com.android.settings.homepage.SettingsHomepageActivity;
|
|
import com.android.settings.spa.SettingsSpaEnvironment;
|
|
import com.android.settingslib.applications.AppIconCacheManager;
|
|
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory;
|
|
|
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
|
|
|
import java.lang.ref.WeakReference;
|
|
|
|
/** Settings application which sets up activity embedding rules for the large screen device. */
|
|
public class SettingsApplication extends Application {
|
|
|
|
private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
|
|
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
|
|
// Add null checking to avoid test case failed.
|
|
if (getApplicationContext() != null) {
|
|
ElapsedTimeUtils.assignSuwFinishedTimeStamp(getApplicationContext());
|
|
}
|
|
|
|
// Set Spa environment.
|
|
setSpaEnvironment();
|
|
|
|
if (FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN)
|
|
&& ActivityEmbeddingUtils.isSettingsSplitEnabled(this)) {
|
|
if (WizardManagerHelper.isUserSetupComplete(this)) {
|
|
new ActivityEmbeddingRulesController(this).initRules();
|
|
} else {
|
|
new DeviceProvisionedObserver().registerContentObserver();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set the spa environment instance.
|
|
* Override this function to set different spa environment for different Settings app.
|
|
*/
|
|
protected void setSpaEnvironment() {
|
|
SpaEnvironmentFactory.INSTANCE.reset(new SettingsSpaEnvironment(this));
|
|
}
|
|
|
|
public void setHomeActivity(SettingsHomepageActivity homeActivity) {
|
|
mHomeActivity = new WeakReference<>(homeActivity);
|
|
}
|
|
|
|
public SettingsHomepageActivity getHomeActivity() {
|
|
return mHomeActivity.get();
|
|
}
|
|
|
|
@Override
|
|
public void onTrimMemory(int level) {
|
|
super.onTrimMemory(level);
|
|
AppIconCacheManager.getInstance().trimMemory(level);
|
|
}
|
|
|
|
private class DeviceProvisionedObserver extends ContentObserver {
|
|
private final Uri mDeviceProvisionedUri = Settings.Secure.getUriFor(
|
|
Settings.Secure.USER_SETUP_COMPLETE);
|
|
|
|
DeviceProvisionedObserver() {
|
|
super(null /* handler */);
|
|
}
|
|
|
|
@Override
|
|
public void onChange(boolean selfChange, Uri uri, int flags) {
|
|
if (!mDeviceProvisionedUri.equals(uri)) {
|
|
return;
|
|
}
|
|
|
|
SettingsApplication.this.getContentResolver().unregisterContentObserver(this);
|
|
new ActivityEmbeddingRulesController(SettingsApplication.this).initRules();
|
|
}
|
|
|
|
public void registerContentObserver() {
|
|
SettingsApplication.this.getContentResolver().registerContentObserver(
|
|
mDeviceProvisionedUri,
|
|
false /* notifyForDescendants */,
|
|
this);
|
|
}
|
|
}
|
|
}
|