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

Commit 3af73364 authored by Jason Chiu's avatar Jason Chiu
Browse files

Support highlighting the menu entry for Search results

1. Add a receiver to monitor the search state
2. Shoe/hide the menu highlight in the listener
3. Highlight the menu entry in SearchResultTrampoline
4. Enable/disable the receiver in SettingsInitialize

Bug: 205781792
Test: manual, robotest
Change-Id: Ia04901f504172f4f0c7b4b2ea7eda5f3713f676d
parent 9ae7fa25
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -297,6 +297,15 @@
            </intent-filter>
        </activity>

        <receiver android:name=".search.SearchStateReceiver"
                  android:exported="true"
                  android:permission="android.permission.READ_SEARCH_INDEXABLES">
            <intent-filter>
                <action android:name="com.android.settings.SEARCH_START"/>
                <action android:name="com.android.settings.SEARCH_EXIT"/>
            </intent-filter>
        </receiver>

        <activity
            android:name="Settings$WifiSettingsActivity"
            android:label="@string/wifi_settings"
+4 −4
Original line number Diff line number Diff line
@@ -16,17 +16,17 @@

package com.android.settings;

import android.app.Activity;
import android.app.Application;

import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.homepage.SettingsHomepageActivity;

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<Activity> mHomeActivity = new WeakReference<>(null);
    private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);

    @Override
    public void onCreate() {
@@ -37,11 +37,11 @@ public class SettingsApplication extends Application {
        controller.initRules();
    }

    public void setHomeActivity(Activity homeActivity) {
    public void setHomeActivity(SettingsHomepageActivity homeActivity) {
        mHomeActivity = new WeakReference<>(homeActivity);
    }

    public Activity getHomeActivity() {
    public SettingsHomepageActivity getHomeActivity() {
        return mHomeActivity.get();
    }
}
+7 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import androidx.window.embedding.SplitController;

import com.android.settings.Settings.CreateShortcutActivity;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settings.search.SearchStateReceiver;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
@@ -67,7 +68,7 @@ public class SettingsInitialize extends BroadcastReceiver {
        managedProfileSetup(context, pm, broadcast, userInfo);
        webviewSettingSetup(context, pm, userInfo);
        ThreadUtils.postOnBackgroundThread(() -> refreshExistingShortcuts(context));
        enableTwoPaneDeepLinkActivityIfNecessary(pm, broadcast);
        enableTwoPaneDeepLinkActivityIfNecessary(pm, context);
    }

    private void managedProfileSetup(Context context, final PackageManager pm, Intent broadcast,
@@ -148,12 +149,16 @@ public class SettingsInitialize extends BroadcastReceiver {
        shortcutManager.updateShortcuts(updates);
    }

    private void enableTwoPaneDeepLinkActivityIfNecessary(PackageManager pm, Intent intent) {
    private void enableTwoPaneDeepLinkActivityIfNecessary(PackageManager pm, Context context) {
        final ComponentName deepLinkHome = new ComponentName(Utils.SETTINGS_PACKAGE_NAME,
                SettingsHomepageActivity.ALIAS_DEEP_LINK);
        final ComponentName searchStateReceiver = new ComponentName(context,
                SearchStateReceiver.class);
        final int enableState = SplitController.getInstance().isSplitSupported()
                ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
        pm.setComponentEnabledSetting(deepLinkHome, enableState, PackageManager.DONT_KILL_APP);
        pm.setComponentEnabledSetting(searchStateReceiver, enableState,
                PackageManager.DONT_KILL_APP);
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.settings.Settings;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settings.homepage.SliceDeepLinkHomepageActivity;

import java.util.HashSet;
import java.util.Set;
@@ -127,6 +128,15 @@ public class ActivityEmbeddingRulesController {
                true /* finishPrimaryWithSecondary */,
                true /* finishSecondaryWithPrimary */,
                clearTop);

        registerTwoPanePairRule(
                context,
                getComponentName(context, SliceDeepLinkHomepageActivity.class),
                secondaryComponent,
                secondaryIntentAction,
                true /* finishPrimaryWithSecondary */,
                true /* finishSecondaryWithPrimary */,
                clearTop);
    }

    /** Register a SplitPairRule for SubSettings if the device supports 2-pane. */
+18 −15
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    private static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network;
    private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300;

    private TopLevelSettings mMainFragment;
    private View mHomepageView;
    private View mSuggestionView;
    private CategoryMixin mCategoryMixin;
@@ -124,6 +125,11 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        homepageView.setVisibility(View.VISIBLE);
    }

    /** Returns the main content fragment */
    public TopLevelSettings getMainFragment() {
        return mMainFragment;
    }

    @Override
    public CategoryMixin getCategoryMixin() {
        return mCategoryMixin;
@@ -132,7 +138,6 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHomeActivity();
        setContentView(R.layout.settings_homepage_container);

        final View appBar = findViewById(R.id.app_bar_container);
@@ -162,10 +167,10 @@ public class SettingsHomepageActivity extends FragmentActivity implements
                showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content);
            }
        }
        final Fragment fragment = new TopLevelSettings();
        fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
        mMainFragment = new TopLevelSettings();
        mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
                getHighlightMenuKey());
        showFragment(fragment, R.id.main_content);
        showFragment(mMainFragment, R.id.main_content);

        ((FrameLayout) findViewById(R.id.main_content))
                .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
@@ -174,6 +179,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        launchDeepLinkIntentToRight();
    }

    @Override
    protected void onStart() {
        ((SettingsApplication) getApplication()).setHomeActivity(this);
        super.onStart();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
@@ -189,10 +200,6 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        launchDeepLinkIntentToRight();
    }

    protected void setHomeActivity() {
        ((SettingsApplication) getApplication()).setHomeActivity(this);
    }

    private void showSuggestionFragment() {
        final Class<? extends Fragment> fragment = FeatureFactory.getFactory(this)
                .getSuggestionFeatureProvider(this).getContextualSuggestionFragment();
@@ -314,13 +321,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    }

    private void reloadHighlightMenuKey() {
        final TopLevelSettings fragment =
                (TopLevelSettings) getSupportFragmentManager().findFragmentById(R.id.main_content);
        if (fragment != null) {
            fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
        mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
                getHighlightMenuKey());
            fragment.reloadHighlightMenuKey();
        }
        mMainFragment.reloadHighlightMenuKey();
    }

    private void initHomepageContainer() {
Loading