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

Unverified Commit b3da2c57 authored by Kevin F. Haggerty's avatar Kevin F. Haggerty
Browse files

Merge tag 'android-11.0.0_r32' into staging/lineage-18.1_merge-android-11.0.0_r32

Android 11.0.0 Release 32 (RQ2A.210305.006)

* tag 'android-11.0.0_r32':
  Integrate wide screen kb in settings search results

Change-Id: I0dd97e7e8a19279a478ee84706ac7163fd98fc62
parents 1dcca1c7 0d22308f
Loading
Loading
Loading
Loading
+1 −24
Original line number Diff line number Diff line
@@ -16,25 +16,18 @@

package com.android.settings.intelligence.search.car;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import com.android.settings.intelligence.R;
import com.android.settings.intelligence.search.AppSearchResult;
import com.android.settings.intelligence.search.SearchResult;

import java.util.List;

/**
 * ViewHolder for intent based search results.
 */
public class CarIntentSearchViewHolder extends CarSearchViewHolder {
    private static final String TAG = "CarIntentSearchViewHolder";
    private static final int REQUEST_CODE_NO_OP = 0;

    public CarIntentSearchViewHolder(View view) {
        super(view);
@@ -52,23 +45,7 @@ public class CarIntentSearchViewHolder extends CarSearchViewHolder {
        }
        bindBreadcrumbView(result);

        itemView.setOnClickListener(v -> {
            fragment.onSearchResultClicked(/* resultViewHolder= */ this, result);
            Intent intent = result.payload.getIntent();
            if (result instanceof AppSearchResult) {
                AppSearchResult appResult = (AppSearchResult) result;
                fragment.getActivity().startActivity(intent);
            } else {
                PackageManager pm = fragment.getActivity().getPackageManager();
                List<ResolveInfo> info = pm.queryIntentActivities(intent, /* flags= */ 0);
                if (info != null && !info.isEmpty()) {
                    fragment.startActivityForResult(intent, REQUEST_CODE_NO_OP);
                } else {
                    Log.e(TAG, "Cannot launch search result, title: "
                            + result.title + ", " + intent);
                }
            }
        });
        itemView.setOnClickListener(v -> fragment.onSearchResultClicked(result));
    }

    private void bindBreadcrumbView(SearchResult result) {
+80 −11
Original line number Diff line number Diff line
@@ -18,11 +18,19 @@ package com.android.settings.intelligence.search.car;

import static com.android.car.ui.core.CarUi.requireInsets;
import static com.android.car.ui.core.CarUi.requireToolbar;
import static com.android.car.ui.utils.CarUiUtils.drawableToBitmap;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

@@ -31,12 +39,15 @@ import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.RecyclerView;

import com.android.car.ui.imewidescreen.CarUiImeSearchListItem;
import com.android.car.ui.preference.PreferenceFragment;
import com.android.car.ui.recyclerview.CarUiContentListItem;
import com.android.car.ui.toolbar.MenuItem;
import com.android.car.ui.toolbar.Toolbar;
import com.android.car.ui.toolbar.ToolbarController;
import com.android.settings.intelligence.R;
import com.android.settings.intelligence.overlay.FeatureFactory;
import com.android.settings.intelligence.search.AppSearchResult;
import com.android.settings.intelligence.search.SearchCommon;
import com.android.settings.intelligence.search.SearchFeatureProvider;
import com.android.settings.intelligence.search.SearchResult;
@@ -44,6 +55,7 @@ import com.android.settings.intelligence.search.indexing.IndexingCallback;
import com.android.settings.intelligence.search.savedqueries.car.CarSavedQueryController;
import com.android.settings.intelligence.search.savedqueries.car.CarSavedQueryViewHolder;

import java.util.ArrayList;
import java.util.List;

/**
@@ -51,6 +63,8 @@ import java.util.List;
 */
public class CarSearchFragment extends PreferenceFragment implements
        LoaderManager.LoaderCallbacks<List<? extends SearchResult>>, IndexingCallback {
    private static final String TAG = "CarSearchFragment";
    private static final int REQUEST_CODE_NO_OP = 0;

    private SearchFeatureProvider mSearchFeatureProvider;

@@ -106,15 +120,15 @@ public class CarSearchFragment extends PreferenceFragment implements

        LoaderManager loaderManager = getLoaderManager();
        mSearchAdapter = new CarSearchResultsAdapter(/* fragment= */ this);
        mToolbar = getToolbar();
        mSavedQueryController = new CarSavedQueryController(
                getContext(), loaderManager, mSearchAdapter);
                getContext(), loaderManager, mSearchAdapter, mToolbar, this);
        mSearchFeatureProvider.updateIndexAsync(getContext(), /* indexingCallback= */ this);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mToolbar = getToolbar();
        if (mToolbar != null) {
            List<MenuItem> items = getToolbarMenuItems();
            mToolbar.setTitle(getPreferenceScreen().getTitle());
@@ -181,20 +195,12 @@ public class CarSearchFragment extends PreferenceFragment implements
    /**
     * Gets called when a saved query is clicked.
     */
    public void onSavedQueryClicked(CarSavedQueryViewHolder vh, CharSequence query) {
    public void onSavedQueryClicked(CharSequence query) {
        String queryString = query.toString();
        mToolbar.setSearchQuery(queryString);
        onQueryTextChange(queryString);
    }

    /**
     * Gets called when a search result is clicked.
     */
    public void onSearchResultClicked(CarSearchViewHolder resultViewHolder, SearchResult result) {
        mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
        mSavedQueryController.saveQuery(mQuery);
    }

    @Override
    public Loader<List<? extends SearchResult>> onCreateLoader(int id, Bundle args) {
        Activity activity = getActivity();
@@ -208,10 +214,73 @@ public class CarSearchFragment extends PreferenceFragment implements
    @Override
    public void onLoadFinished(Loader<List<? extends SearchResult>> loader,
            List<? extends SearchResult> data) {

        if (mToolbar.canShowSearchResultItems()) {
            List<CarUiImeSearchListItem> searchItems = new ArrayList<>();
            for (SearchResult result : data) {
                CarUiImeSearchListItem item = new CarUiImeSearchListItem(
                        CarUiContentListItem.Action.ICON);
                item.setTitle(result.title);
                if (result.breadcrumbs != null && !result.breadcrumbs.isEmpty()) {
                    item.setBody(getBreadcrumb(result));
                }

                if (result instanceof AppSearchResult) {
                    AppSearchResult appResult = (AppSearchResult) result;
                    PackageManager pm = getActivity().getPackageManager();
                    Drawable drawable = appResult.info.loadIcon(pm);
                    Bitmap bm = drawableToBitmap(drawable);
                    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bm);
                    item.setIcon(bitmapDrawable);
                } else if (result.icon != null) {
                    Bitmap bm = drawableToBitmap(result.icon);
                    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bm);
                    item.setIcon(bitmapDrawable);
                }
                item.setOnItemClickedListener(v -> onSearchResultClicked(result));

                searchItems.add(item);
            }
            mToolbar.setSearchResultItems(searchItems);
        }

        mSearchAdapter.postSearchResults(data);
        mRecyclerView.scrollToPosition(0);
    }

    private String getBreadcrumb(SearchResult result) {
        String breadcrumb = result.breadcrumbs.get(0);
        int count = result.breadcrumbs.size();
        for (int i = 1; i < count; i++) {
            breadcrumb = getContext().getString(R.string.search_breadcrumb_connector,
                    breadcrumb, result.breadcrumbs.get(i));
        }

        return breadcrumb;
    }

    /**
     * Gets called when a search result is clicked.
     */
    protected void onSearchResultClicked(SearchResult result) {
        mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
        mSavedQueryController.saveQuery(mQuery);

        Intent intent = result.payload.getIntent();
        if (result instanceof AppSearchResult) {
            getActivity().startActivity(intent);
        } else {
            PackageManager pm = getActivity().getPackageManager();
            List<ResolveInfo> info = pm.queryIntentActivities(intent, /* flags= */ 0);
            if (info != null && !info.isEmpty()) {
                startActivityForResult(intent, REQUEST_CODE_NO_OP);
            } else {
                Log.e(TAG, "Cannot launch search result, title: "
                        + result.title + ", " + intent);
            }
        }
    }

    @Override
    public void onLoaderReset(Loader<List<? extends SearchResult>> loader) {
    }
+30 −2
Original line number Diff line number Diff line
@@ -21,17 +21,24 @@ import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;

import com.android.car.ui.imewidescreen.CarUiImeSearchListItem;
import com.android.car.ui.recyclerview.CarUiContentListItem;
import com.android.car.ui.toolbar.ToolbarController;
import com.android.settings.intelligence.R;
import com.android.settings.intelligence.overlay.FeatureFactory;
import com.android.settings.intelligence.search.SearchCommon;
import com.android.settings.intelligence.search.SearchFeatureProvider;
import com.android.settings.intelligence.search.SearchResult;
import com.android.settings.intelligence.search.car.CarSearchFragment;
import com.android.settings.intelligence.search.car.CarSearchResultsAdapter;
import com.android.settings.intelligence.search.savedqueries.SavedQueryRecorder;
import com.android.settings.intelligence.search.savedqueries.SavedQueryRemover;

import java.util.ArrayList;
import java.util.List;

/**
@@ -49,14 +56,19 @@ public class CarSavedQueryController implements LoaderManager.LoaderCallbacks,
    private final LoaderManager mLoaderManager;
    private final SearchFeatureProvider mSearchFeatureProvider;
    private final CarSearchResultsAdapter mResultAdapter;
    private ToolbarController mToolbar;
    private CarSearchFragment mFragment;

    public CarSavedQueryController(Context context, LoaderManager loaderManager,
            CarSearchResultsAdapter resultsAdapter) {
            CarSearchResultsAdapter resultsAdapter, @NonNull ToolbarController toolbar,
            CarSearchFragment fragment) {
        mContext = context;
        mLoaderManager = loaderManager;
        mResultAdapter = resultsAdapter;
        mSearchFeatureProvider = FeatureFactory.get(context)
                .searchFeatureProvider();
        mToolbar = toolbar;
        mFragment = fragment;
    }

    @Override
@@ -83,7 +95,23 @@ public class CarSavedQueryController implements LoaderManager.LoaderCallbacks,
                if (SearchFeatureProvider.DEBUG) {
                    Log.d(TAG, "Saved queries loaded");
                }
                mResultAdapter.displaySavedQuery((List<SearchResult>) data);
                List<SearchResult> results = (List<SearchResult>) data;
                if (mToolbar.canShowSearchResultItems()) {
                    List<CarUiImeSearchListItem> searchItems = new ArrayList<>();
                    for (SearchResult result : results) {
                        CarUiImeSearchListItem item = new CarUiImeSearchListItem(
                                CarUiContentListItem.Action.ICON);
                        item.setTitle(result.title);
                        item.setIconResId(R.drawable.ic_restore);
                        item.setOnItemClickedListener(
                                v -> mFragment.onSavedQueryClicked(result.title));

                        searchItems.add(item);
                    }
                    mToolbar.setSearchResultItems(searchItems);
                }

                mResultAdapter.displaySavedQuery(results);
                break;
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ public class CarSavedQueryViewHolder extends CarSearchViewHolder {
        mIcon.setImageResource(R.drawable.ic_restore);
        mSummary.setVisibility(View.GONE);
        itemView.setOnClickListener(v -> {
            fragment.onSavedQueryClicked(CarSavedQueryViewHolder.this, result.title);
            fragment.onSavedQueryClicked(result.title);
        });
    }
}