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

Commit 6888b5ce authored by Samuel Fufa's avatar Samuel Fufa Committed by Android (Google) Code Review
Browse files

Merge "Support Agassi (Search Engine choice) in Android R" into ub-launcher3-master

parents 2f9019e5 9ec8cfa2
Loading
Loading
Loading
Loading
+57 −11
Original line number Diff line number Diff line
@@ -32,12 +32,15 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import androidx.annotation.Nullable;

import com.android.launcher3.AppWidgetResizeFrame;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
@@ -55,6 +58,8 @@ import com.android.launcher3.graphics.FragmentWithPreview;
 */
public class QsbContainerView extends FrameLayout {

    public static final String SEARCH_PROVIDER_SETTINGS_KEY = "SEARCH_PROVIDER_PACKAGE_NAME";

    public QsbContainerView(Context context) {
        super(context);
    }
@@ -101,7 +106,7 @@ public class QsbContainerView extends FrameLayout {

        protected QsbWidgetHost createHost() {
            return new QsbWidgetHost(getContext(), QSB_WIDGET_HOST_ID,
                    (c) -> new QsbWidgetHostView(c));
                    (c) -> new QsbWidgetHostView(c), this::rebindFragment);
        }

        private FrameLayout mWrapper;
@@ -111,7 +116,6 @@ public class QsbContainerView extends FrameLayout {
                LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            mWrapper = new FrameLayout(getContext());

            // Only add the view when enabled
            if (isQsbEnabled()) {
                mWrapper.addView(createQsb(mWrapper));
@@ -246,21 +250,37 @@ public class QsbContainerView extends FrameLayout {
            return v;
        }

        /**
         * returns the package name string from global settings or from system search service.
         *
         * @return String (package name) or null if neither exist
         */
        @Nullable
        protected String getSearchProviderPackageName() {
            String providerPkg = Settings.Global.getString(getContext().getContentResolver(),
                    SEARCH_PROVIDER_SETTINGS_KEY);
            if (providerPkg == null) {
                SearchManager searchManager = getContext().getSystemService(SearchManager.class);
                ComponentName componentName = searchManager.getGlobalSearchActivity();
                if (componentName != null) {
                    providerPkg = searchManager.getGlobalSearchActivity().getPackageName();
                }
            }
            return providerPkg;
        }

        /**
         * Returns a widget with category {@link AppWidgetProviderInfo#WIDGET_CATEGORY_SEARCHBOX}
         * provided by the same package which is set to be global search activity.
         * provided by the package from getSearchProviderPackageName
         * If widgetCategory is not supported, or no such widget is found, returns the first widget
         * provided by the package.
         */
        protected AppWidgetProviderInfo getSearchWidgetProvider() {
            SearchManager searchManager =
                    (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);
            ComponentName searchComponent = searchManager.getGlobalSearchActivity();
            if (searchComponent == null) return null;
            String providerPkg = searchComponent.getPackageName();

            String providerPkg = getSearchProviderPackageName();
            if (providerPkg == null) {
                return null;
            }
            AppWidgetProviderInfo defaultWidgetForSearchPackage = null;

            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getContext());
            for (AppWidgetProviderInfo info : appWidgetManager.getInstalledProviders()) {
                if (info.provider.getPackageName().equals(providerPkg) && info.configure == null) {
@@ -279,10 +299,17 @@ public class QsbContainerView extends FrameLayout {
    public static class QsbWidgetHost extends AppWidgetHost {

        private final WidgetViewFactory mViewFactory;
        private final WidgetProvidersUpdateCallback mWidgetsUpdateCallback;

        public QsbWidgetHost(Context context, int hostId, WidgetViewFactory viewFactory) {
        public QsbWidgetHost(Context context, int hostId, WidgetViewFactory viewFactory,
                WidgetProvidersUpdateCallback widgetProvidersUpdateCallback) {
            super(context, hostId);
            mViewFactory = viewFactory;
            mWidgetsUpdateCallback = widgetProvidersUpdateCallback;
        }

        public QsbWidgetHost(Context context, int hostId, WidgetViewFactory viewFactory) {
            this(context, hostId, viewFactory, null);
        }

        @Override
@@ -290,6 +317,14 @@ public class QsbContainerView extends FrameLayout {
                Context context, int appWidgetId, AppWidgetProviderInfo appWidget) {
            return mViewFactory.newView(context);
        }

        @Override
        protected void onProvidersChanged() {
            super.onProvidersChanged();
            if (mWidgetsUpdateCallback != null) {
                mWidgetsUpdateCallback.onProvidersUpdated();
            }
        }
    }

    public interface WidgetViewFactory {
@@ -297,6 +332,17 @@ public class QsbContainerView extends FrameLayout {
        QsbWidgetHostView newView(Context context);
    }

    /**
     * Callback interface for packages list update.
     */
    @FunctionalInterface
    public interface WidgetProvidersUpdateCallback {
        /**
         * Gets called when widget providers list changes
         */
        void onProvidersUpdated();
    }

    /**
     * Returns true if {@param original} contains all entries defined in {@param updates} and
     * have the same value.