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. Bug: 267725145 Bug: 279461170 fixes: 280606740 Test: Build, perf metrics Test: atest LauncherIronwoodIntegrationTests:android.platform.test.scenario.launcher.integration_tests.HomescreenCustomizationTests Test: atest SettingsMultiPaneDeepLinkTest.java Test: run v2/aep-ironwood/suite/test-mapping-ironwood-p0-cujs via ABTD on cheetah/oriole/panther/raven in udc-dev/master branch Change-Id: I74c9608fce92fc77c0f1ef2d61aba3af85afba02
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);
|
|
}
|
|
}
|
|
}
|