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 Original line 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.DatabaseIndexingManager;
import com.android.settings.intelligence.search.indexing.IndexData;
import com.android.settings.intelligence.search.indexing.IndexData;
import com.android.settings.intelligence.search.indexing.IndexingCallback;
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.DatabaseResultTask;
import com.android.settings.intelligence.search.query.InstalledAppResultTask;
import com.android.settings.intelligence.search.query.InstalledAppResultTask;
import com.android.settings.intelligence.search.query.SearchQueryTask;
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 String TAG = "CarSearchFeatureProvider";
    private static final long SMART_SEARCH_RANKING_TIMEOUT = 300L;
    private static final long SMART_SEARCH_RANKING_TIMEOUT = 300L;


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


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


    private List<IndexData> getIndexData(PreIndexData data) {
    private List<IndexData> getIndexData(PreIndexData data) {
        if (mConverter == null) {
        if (mConverter == null) {
            mConverter = new IndexDataConverter(mContext);
            mConverter = getIndexDataConverter(mContext);
        }
        }
        return mConverter.convertPreIndexDataToIndexData(data);
        return mConverter.convertPreIndexDataToIndexData(data);
    }
    }
@@ -186,7 +186,7 @@ public class DatabaseIndexingManager {
    private List<SiteMapPair> getSiteMapPairs(List<IndexData> indexData,
    private List<SiteMapPair> getSiteMapPairs(List<IndexData> indexData,
            List<Pair<String, String>> siteMapClassNames) {
            List<Pair<String, String>> siteMapClassNames) {
        if (mConverter == null) {
        if (mConverter == null) {
            mConverter = new IndexDataConverter(mContext);
            mConverter = getIndexDataConverter(mContext);
        }
        }
        return mConverter.convertSiteMapPairs(indexData, siteMapClassNames);
        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> {
    public class IndexingTask extends AsyncTask<Void, Void, Void> {


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


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


        public String getIntentAction() {
            return mIntentAction;
        }

        public String getIntentTargetPackage() {
            return mIntentTargetPackage;
        }

        public String getIntentTargetClass() {
            return mIntentTargetClass;
        }

        public Builder setSummaryOn(String summaryOn) {
        public Builder setSummaryOn(String summaryOn) {
            mSummaryOn = summaryOn;
            mSummaryOn = summaryOn;
            return this;
            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;
            final Intent intent;


            // TODO REFACTOR (b/62807132) With inline results re-add proper intent support
            // TODO REFACTOR (b/62807132) With inline results re-add proper intent support
+7 −3
Original line number Original line 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
        // A row is enabled if it does not show up as an nonIndexableKey
        boolean enabled = !(nonIndexableKeys != null && nonIndexableKeys.contains(raw.key));
        boolean enabled = !(nonIndexableKeys != null && nonIndexableKeys.contains(raw.key));


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


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

    protected IndexData.Builder getIndexDataBuilder() {
        return new IndexData.Builder();
    }
}
}
+39 −0
Original line number Original line 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