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

Commit 56a30954 authored by Alex Stetson's avatar Alex Stetson
Browse files

Customize actionless car intents

Change intent handling for CarSettings intents to use package and class
name rather than Search Result Trampoline for intents without an action.

Bug: 155508460
Test: manual
Change-Id: I295ce94b82a0deecb960dc8c749230c0c06c800b
parent 684466b9
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.settings.intelligence.search.SearchResultLoader;
import com.android.settings.intelligence.search.indexing.DatabaseIndexingManager;
import com.android.settings.intelligence.search.indexing.IndexData;
import com.android.settings.intelligence.search.indexing.IndexingCallback;
import com.android.settings.intelligence.search.indexing.car.CarDatabaseIndexingManager;
import com.android.settings.intelligence.search.query.DatabaseResultTask;
import com.android.settings.intelligence.search.query.InstalledAppResultTask;
import com.android.settings.intelligence.search.query.SearchQueryTask;
@@ -49,7 +50,7 @@ public class CarSearchFeatureProviderImpl implements SearchFeatureProvider {
    private static final String TAG = "CarSearchFeatureProvider";
    private static final long SMART_SEARCH_RANKING_TIMEOUT = 300L;

    private DatabaseIndexingManager mDatabaseIndexingManager;
    private CarDatabaseIndexingManager mDatabaseIndexingManager;
    private ExecutorService mExecutorService;
    private SiteMapManager mSiteMapManager;

@@ -75,7 +76,8 @@ public class CarSearchFeatureProviderImpl implements SearchFeatureProvider {
    @Override
    public DatabaseIndexingManager getIndexingManager(Context context) {
        if (mDatabaseIndexingManager == null) {
            mDatabaseIndexingManager = new DatabaseIndexingManager(context.getApplicationContext());
            mDatabaseIndexingManager = new CarDatabaseIndexingManager(
                    context.getApplicationContext());
        }
        return mDatabaseIndexingManager;
    }
+10 −2
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ public class DatabaseIndexingManager {

    private List<IndexData> getIndexData(PreIndexData data) {
        if (mConverter == null) {
            mConverter = new IndexDataConverter(mContext);
            mConverter = getIndexDataConverter(mContext);
        }
        return mConverter.convertPreIndexDataToIndexData(data);
    }
@@ -186,7 +186,7 @@ public class DatabaseIndexingManager {
    private List<SiteMapPair> getSiteMapPairs(List<IndexData> indexData,
            List<Pair<String, String>> siteMapClassNames) {
        if (mConverter == null) {
            mConverter = new IndexDataConverter(mContext);
            mConverter = getIndexDataConverter(mContext);
        }
        return mConverter.convertSiteMapPairs(indexData, siteMapClassNames);
    }
@@ -312,6 +312,14 @@ public class DatabaseIndexingManager {
        }
    }

    /**
     * Protected method to get a new IndexDataConverter instance. This method can be overridden
     * in subclasses to substitute in a custom IndexDataConverter.
     */
    protected IndexDataConverter getIndexDataConverter(Context context) {
        return new IndexDataConverter(context);
    }

    public class IndexingTask extends AsyncTask<Void, Void, Void> {

        @VisibleForTesting
+16 −3
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ public class IndexData {
    private static final Pattern REMOVE_DIACRITICALS_PATTERN
            = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");

    private IndexData(Builder builder) {
    protected IndexData(Builder builder) {
        locale = Locale.getDefault().toString();
        updatedTitle = normalizeHyphen(builder.mTitle);
        updatedSummaryOn = normalizeHyphen(builder.mSummaryOn);
@@ -186,6 +186,18 @@ public class IndexData {
            return mKey;
        }

        public String getIntentAction() {
            return mIntentAction;
        }

        public String getIntentTargetPackage() {
            return mIntentTargetPackage;
        }

        public String getIntentTargetClass() {
            return mIntentTargetClass;
        }

        public Builder setSummaryOn(String summaryOn) {
            mSummaryOn = summaryOn;
            return this;
@@ -290,9 +302,10 @@ public class IndexData {
        }

        /**
         * Adds Intent payload to builder.
         * Builds Intent payload for the builder.
         * This protected method that can be overridden in a subclass for custom intents.
         */
        private Intent buildIntent(Context context) {
        protected Intent buildIntent(Context context) {
            final Intent intent;

            // TODO REFACTOR (b/62807132) With inline results re-add proper intent support
+7 −3
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ public class IndexDataConverter {
        // A row is enabled if it does not show up as an nonIndexableKey
        boolean enabled = !(nonIndexableKeys != null && nonIndexableKeys.contains(raw.key));

        final IndexData.Builder builder = new IndexData.Builder();
        final IndexData.Builder builder = getIndexDataBuilder();
        builder.setTitle(raw.title)
                .setSummaryOn(raw.summaryOn)
                .setEntries(raw.entries)
@@ -244,7 +244,7 @@ public class IndexDataConverter {
            headerKeywords = XmlParserUtils.getDataKeywords(context, attrs);
            enabled = !nonIndexableKeys.contains(headerKey);
            // TODO: Set payload type for header results
            IndexData.Builder headerBuilder = new IndexData.Builder();
            IndexData.Builder headerBuilder = getIndexDataBuilder();
            headerBuilder.setTitle(headerTitle)
                    .setSummaryOn(headerSummary)
                    .setScreenTitle(screenTitle)
@@ -286,7 +286,7 @@ public class IndexDataConverter {
                    isHeaderUnique = false;
                }

                builder = new IndexData.Builder();
                builder = getIndexDataBuilder();
                builder.setTitle(title)
                        .setKeywords(keywords)
                        .setClassName(sir.className)
@@ -365,4 +365,8 @@ public class IndexDataConverter {
        final Set<String> result = nonIndexableKeys.get(authority);
        return result != null ? result : new ArraySet<>();
    }

    protected IndexData.Builder getIndexDataBuilder() {
        return new IndexData.Builder();
    }
}
+39 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 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.intelligence.search.indexing.car;

import android.content.Context;

import com.android.settings.intelligence.search.indexing.DatabaseIndexingManager;
import com.android.settings.intelligence.search.indexing.IndexDataConverter;
import com.android.settings.intelligence.search.indexing.PreIndexData;

/**
 * Car extension to {@link DatabaseIndexingManager} to use {@link CarIndexDataConverter} for
 * converting {@link PreIndexData} into {@link CarIndexData}.
 */
public class CarDatabaseIndexingManager extends DatabaseIndexingManager {

    public CarDatabaseIndexingManager(Context context) {
        super(context);
    }

    @Override
    protected IndexDataConverter getIndexDataConverter(Context context) {
        return new CarIndexDataConverter(context);
    }
}
Loading