Loading AndroidManifest.xml +18 −17 Original line number Diff line number Diff line Loading @@ -144,12 +144,30 @@ android:value="true" /> </activity> <!-- Activity for launching deep link page in 2-pane. --> <activity android:name=".homepage.DeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:theme="@style/Theme.Settings.Home" android:taskAffinity="" android:launchMode="singleTask" android:exported="true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout" android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK"> <intent-filter> <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> </activity> <activity android:name=".homepage.SliceDeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:theme="@style/Theme.Settings.Home" android:taskAffinity="" android:launchMode="singleTask" android:exported="false" android:excludeFromRecents="true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> Loading @@ -170,18 +188,6 @@ <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/> </activity-alias> <!-- Alias for SettingsHomepageActivity which works for deep link page in 2-panel. --> <activity-alias android:name="DeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:exported="true" android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" android:targetActivity=".homepage.SettingsHomepageActivity"> <intent-filter> <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <receiver android:name=".SettingsInitialize" android:exported="true"> <intent-filter> Loading Loading @@ -4032,11 +4038,6 @@ </intent-filter> </provider> <provider android:name=".activityembedding.ActivityEmbeddingProvider" android:authorities="com.android.settings.activityembedding" android:exported="true"/> <activity android:name=".wifi.dpp.WifiDppConfiguratorActivity" android:exported="true"> Loading src/com/android/settings/SettingsActivity.java +20 −31 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import androidx.preference.PreferenceManager; import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.activityembedding.SplitStateObserver; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; Loading Loading @@ -248,16 +247,21 @@ public class SettingsActivity extends SettingsBaseActivity @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); Log.d(LOG_TAG, "Starting onCreate"); long startTime = System.currentTimeMillis(); // Should happen before any call to getIntent() getMetaData(); final Intent intent = getIntent(); registerSplitStateObserverForTwoPaneDeepLink(); if (shouldShowTwoPaneDeepLink(intent)) { launchHomepageForTwoPaneDeepLink(intent); finishAndRemoveTask(); super.onCreate(savedState); return; } super.onCreate(savedState); Log.d(LOG_TAG, "Starting onCreate"); long startTime = System.currentTimeMillis(); final FeatureFactory factory = FeatureFactory.getFactory(this); mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this); Loading Loading @@ -362,30 +366,6 @@ public class SettingsActivity extends SettingsBaseActivity } } private void registerSplitStateObserverForTwoPaneDeepLink() { if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { return; } final SplitStateObserver splitStateObserver = new SplitStateObserver(this /* activity*/, true /* listenOnce */, splitInfos -> { if (!splitInfos.isEmpty() || !SettingsActivity.this.isTaskRoot()) { // It's already in 2-pane or in a non-empty task, there is no need to go // 2-pane deep link flow. return; } if (shouldShowTwoPaneDeepLink(getIntent())) { launchHomepageForTwoPaneDeepLink(getIntent()); finishAndRemoveTask(); return; } } ); getLifecycle().addObserver(splitStateObserver); } private boolean isSubSettings(Intent intent) { return this instanceof SubSettings || intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false); Loading Loading @@ -435,6 +415,15 @@ public class SettingsActivity extends SettingsBaseActivity } private boolean shouldShowTwoPaneDeepLink(Intent intent) { if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { return false; } // If the activity is not the task root, it should not start trampoline for deep links. if (!isTaskRoot()) { return false; } // Only starts trampoline for deep links. Should return false for all the cases that // Settings app starts SettingsActivity or SubSetting by itself. if (intent.getAction() == null) { Loading src/com/android/settings/SettingsInitialize.java +3 −3 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ import androidx.annotation.VisibleForTesting; import androidx.window.embedding.SplitController; import com.android.settings.Settings.CreateShortcutActivity; import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.homepage.DeepLinkHomepageActivity; import com.android.settings.search.SearchStateReceiver; import com.android.settingslib.utils.ThreadUtils; Loading Loading @@ -150,8 +150,8 @@ public class SettingsInitialize extends BroadcastReceiver { } private void enableTwoPaneDeepLinkActivityIfNecessary(PackageManager pm, Context context) { final ComponentName deepLinkHome = new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK); final ComponentName deepLinkHome = new ComponentName(context, DeepLinkHomepageActivity.class); final ComponentName searchStateReceiver = new ComponentName(context, SearchStateReceiver.class); final int enableState = SplitController.getInstance().isSplitSupported() Loading src/com/android/settings/activityembedding/ActivityEmbeddingProvider.javadeleted 100644 → 0 +0 −88 Original line number Diff line number Diff line /* * 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.activityembedding; import android.app.Activity; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import com.android.settings.SettingsApplication; /** * A content provider for querying the state of activity embedding feature */ public class ActivityEmbeddingProvider extends ContentProvider { private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled"; private static final String METHOD_IS_IN_SETTINGS_TWO_PANE = "isInSettingsTwoPane"; private static final String EXTRA_ENABLED_STATE = "enabled_state"; private static final String EXTRA_TWO_PANE_STATE = "two_pane_state"; @Override public boolean onCreate() { return true; } @Override public Bundle call(String method, String arg, Bundle extras) { if (TextUtils.equals(method, METHOD_IS_EMBEDDING_ACTIVITY_ENABLED)) { final Bundle bundle = new Bundle(); bundle.putBoolean(EXTRA_ENABLED_STATE, ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())); return bundle; } else if (TextUtils.equals(method, METHOD_IS_IN_SETTINGS_TWO_PANE)) { final Activity homeActivity = ((SettingsApplication) getContext().getApplicationContext()).getHomeActivity(); final Bundle bundle = new Bundle(); bundle.putBoolean(EXTRA_TWO_PANE_STATE, homeActivity == null ? false : ActivityEmbeddingUtils.isTwoPaneResolution(homeActivity)); return bundle; } return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException(); } @Override public String getType(Uri uri) { throw new UnsupportedOperationException(); } @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException(); } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } } src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java +4 −6 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ import androidx.window.embedding.SplitRule; import com.android.settings.Settings; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.homepage.DeepLinkHomepageActivity; import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.homepage.SliceDeepLinkHomepageActivity; Loading Loading @@ -101,7 +101,6 @@ public class ActivityEmbeddingRulesController { ComponentName secondaryComponent, String secondaryIntentAction, boolean clearTop) { registerTwoPanePairRule( context, getComponentName(context, Settings.class), Loading @@ -113,8 +112,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK), new ComponentName(context, DeepLinkHomepageActivity.class), secondaryComponent, secondaryIntentAction, true /* finishPrimaryWithSecondary */, Loading Loading @@ -156,9 +154,9 @@ public class ActivityEmbeddingRulesController { private void registerHomepagePlaceholderRule() { final Set<ActivityFilter> activityFilters = new HashSet<>(); addActivityFilter(activityFilters, SettingsHomepageActivity.class); addActivityFilter(activityFilters, DeepLinkHomepageActivity.class); addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class); addActivityFilter(activityFilters, Settings.class); addActivityFilter(activityFilters, new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK)); final Intent intent = new Intent(); intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class)); Loading Loading
AndroidManifest.xml +18 −17 Original line number Diff line number Diff line Loading @@ -144,12 +144,30 @@ android:value="true" /> </activity> <!-- Activity for launching deep link page in 2-pane. --> <activity android:name=".homepage.DeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:theme="@style/Theme.Settings.Home" android:taskAffinity="" android:launchMode="singleTask" android:exported="true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout" android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK"> <intent-filter> <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> </activity> <activity android:name=".homepage.SliceDeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:theme="@style/Theme.Settings.Home" android:taskAffinity="" android:launchMode="singleTask" android:exported="false" android:excludeFromRecents="true" android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> Loading @@ -170,18 +188,6 @@ <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/> </activity-alias> <!-- Alias for SettingsHomepageActivity which works for deep link page in 2-panel. --> <activity-alias android:name="DeepLinkHomepageActivity" android:label="@string/settings_label_launcher" android:exported="true" android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" android:targetActivity=".homepage.SettingsHomepageActivity"> <intent-filter> <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <receiver android:name=".SettingsInitialize" android:exported="true"> <intent-filter> Loading Loading @@ -4032,11 +4038,6 @@ </intent-filter> </provider> <provider android:name=".activityembedding.ActivityEmbeddingProvider" android:authorities="com.android.settings.activityembedding" android:exported="true"/> <activity android:name=".wifi.dpp.WifiDppConfiguratorActivity" android:exported="true"> Loading
src/com/android/settings/SettingsActivity.java +20 −31 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import androidx.preference.PreferenceManager; import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.activityembedding.ActivityEmbeddingUtils; import com.android.settings.activityembedding.SplitStateObserver; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; Loading Loading @@ -248,16 +247,21 @@ public class SettingsActivity extends SettingsBaseActivity @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); Log.d(LOG_TAG, "Starting onCreate"); long startTime = System.currentTimeMillis(); // Should happen before any call to getIntent() getMetaData(); final Intent intent = getIntent(); registerSplitStateObserverForTwoPaneDeepLink(); if (shouldShowTwoPaneDeepLink(intent)) { launchHomepageForTwoPaneDeepLink(intent); finishAndRemoveTask(); super.onCreate(savedState); return; } super.onCreate(savedState); Log.d(LOG_TAG, "Starting onCreate"); long startTime = System.currentTimeMillis(); final FeatureFactory factory = FeatureFactory.getFactory(this); mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this); Loading Loading @@ -362,30 +366,6 @@ public class SettingsActivity extends SettingsBaseActivity } } private void registerSplitStateObserverForTwoPaneDeepLink() { if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { return; } final SplitStateObserver splitStateObserver = new SplitStateObserver(this /* activity*/, true /* listenOnce */, splitInfos -> { if (!splitInfos.isEmpty() || !SettingsActivity.this.isTaskRoot()) { // It's already in 2-pane or in a non-empty task, there is no need to go // 2-pane deep link flow. return; } if (shouldShowTwoPaneDeepLink(getIntent())) { launchHomepageForTwoPaneDeepLink(getIntent()); finishAndRemoveTask(); return; } } ); getLifecycle().addObserver(splitStateObserver); } private boolean isSubSettings(Intent intent) { return this instanceof SubSettings || intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false); Loading Loading @@ -435,6 +415,15 @@ public class SettingsActivity extends SettingsBaseActivity } private boolean shouldShowTwoPaneDeepLink(Intent intent) { if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { return false; } // If the activity is not the task root, it should not start trampoline for deep links. if (!isTaskRoot()) { return false; } // Only starts trampoline for deep links. Should return false for all the cases that // Settings app starts SettingsActivity or SubSetting by itself. if (intent.getAction() == null) { Loading
src/com/android/settings/SettingsInitialize.java +3 −3 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ import androidx.annotation.VisibleForTesting; import androidx.window.embedding.SplitController; import com.android.settings.Settings.CreateShortcutActivity; import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.homepage.DeepLinkHomepageActivity; import com.android.settings.search.SearchStateReceiver; import com.android.settingslib.utils.ThreadUtils; Loading Loading @@ -150,8 +150,8 @@ public class SettingsInitialize extends BroadcastReceiver { } private void enableTwoPaneDeepLinkActivityIfNecessary(PackageManager pm, Context context) { final ComponentName deepLinkHome = new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK); final ComponentName deepLinkHome = new ComponentName(context, DeepLinkHomepageActivity.class); final ComponentName searchStateReceiver = new ComponentName(context, SearchStateReceiver.class); final int enableState = SplitController.getInstance().isSplitSupported() Loading
src/com/android/settings/activityembedding/ActivityEmbeddingProvider.javadeleted 100644 → 0 +0 −88 Original line number Diff line number Diff line /* * 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.activityembedding; import android.app.Activity; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import com.android.settings.SettingsApplication; /** * A content provider for querying the state of activity embedding feature */ public class ActivityEmbeddingProvider extends ContentProvider { private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled"; private static final String METHOD_IS_IN_SETTINGS_TWO_PANE = "isInSettingsTwoPane"; private static final String EXTRA_ENABLED_STATE = "enabled_state"; private static final String EXTRA_TWO_PANE_STATE = "two_pane_state"; @Override public boolean onCreate() { return true; } @Override public Bundle call(String method, String arg, Bundle extras) { if (TextUtils.equals(method, METHOD_IS_EMBEDDING_ACTIVITY_ENABLED)) { final Bundle bundle = new Bundle(); bundle.putBoolean(EXTRA_ENABLED_STATE, ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())); return bundle; } else if (TextUtils.equals(method, METHOD_IS_IN_SETTINGS_TWO_PANE)) { final Activity homeActivity = ((SettingsApplication) getContext().getApplicationContext()).getHomeActivity(); final Bundle bundle = new Bundle(); bundle.putBoolean(EXTRA_TWO_PANE_STATE, homeActivity == null ? false : ActivityEmbeddingUtils.isTwoPaneResolution(homeActivity)); return bundle; } return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException(); } @Override public String getType(Uri uri) { throw new UnsupportedOperationException(); } @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException(); } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } }
src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java +4 −6 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ import androidx.window.embedding.SplitRule; import com.android.settings.Settings; import com.android.settings.SubSettings; import com.android.settings.Utils; import com.android.settings.homepage.DeepLinkHomepageActivity; import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.homepage.SliceDeepLinkHomepageActivity; Loading Loading @@ -101,7 +101,6 @@ public class ActivityEmbeddingRulesController { ComponentName secondaryComponent, String secondaryIntentAction, boolean clearTop) { registerTwoPanePairRule( context, getComponentName(context, Settings.class), Loading @@ -113,8 +112,7 @@ public class ActivityEmbeddingRulesController { registerTwoPanePairRule( context, new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK), new ComponentName(context, DeepLinkHomepageActivity.class), secondaryComponent, secondaryIntentAction, true /* finishPrimaryWithSecondary */, Loading Loading @@ -156,9 +154,9 @@ public class ActivityEmbeddingRulesController { private void registerHomepagePlaceholderRule() { final Set<ActivityFilter> activityFilters = new HashSet<>(); addActivityFilter(activityFilters, SettingsHomepageActivity.class); addActivityFilter(activityFilters, DeepLinkHomepageActivity.class); addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class); addActivityFilter(activityFilters, Settings.class); addActivityFilter(activityFilters, new ComponentName(Utils.SETTINGS_PACKAGE_NAME, SettingsHomepageActivity.ALIAS_DEEP_LINK)); final Intent intent = new Intent(); intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class)); Loading