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

Commit e7a68174 authored by Jason Chiu's avatar Jason Chiu Committed by Automerger Merge Worker
Browse files

Merge "Start deep link page synchronously in SettingsActivity" into sc-v2-dev am: b4d3278a

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16263226

Change-Id: Id203bbb5f0d0e0c345494c111ad8c0c296b8e6e5
parents 105bca80 b4d3278a
Loading
Loading
Loading
Loading
+18 −17
Original line number Diff line number Diff line
@@ -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" />
@@ -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>
@@ -4045,11 +4051,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">
+20 −31
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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);
@@ -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) {
+3 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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()
+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();
    }
}
+4 −6
Original line number Diff line number Diff line
@@ -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;

@@ -101,7 +101,6 @@ public class ActivityEmbeddingRulesController {
            ComponentName secondaryComponent,
            String secondaryIntentAction,
            boolean clearTop) {

        registerTwoPanePairRule(
                context,
                getComponentName(context, Settings.class),
@@ -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 */,
@@ -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