Avoid 2-pane deep link before gone through Setup Wizard

To improve security.

Fix: 238391432
Test: manual
      Flash ROM and check 2-pane bebavior
Change-Id: If96c645319d9df45930644fd438cf479462685b0
This commit is contained in:
Arc Wang
2022-07-08 15:46:40 +08:00
parent b1cb90f7f1
commit be2ea9eb39
3 changed files with 75 additions and 18 deletions

View File

@@ -17,11 +17,19 @@
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 androidx.window.embedding.SplitController;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settingslib.applications.AppIconCacheManager;
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. */
@@ -33,9 +41,14 @@ public class SettingsApplication extends Application {
public void onCreate() {
super.onCreate();
final ActivityEmbeddingRulesController controller =
new ActivityEmbeddingRulesController(this);
controller.initRules();
if (FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN)
&& SplitController.getInstance().isSplitSupported()) {
if (WizardManagerHelper.isUserSetupComplete(this)) {
new ActivityEmbeddingRulesController(this).initRules();
} else {
new DeviceProvisionedObserver().registerContentObserver();
}
}
}
public void setHomeActivity(SettingsHomepageActivity homeActivity) {
@@ -51,4 +64,30 @@ public class SettingsApplication extends Application {
super.onLowMemory();
AppIconCacheManager.getInstance().release();
}
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);
}
}
}