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 Original line Diff line number Diff line
@@ -32,12 +32,15 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Bundle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.FrameLayout;


import androidx.annotation.Nullable;

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


    public static final String SEARCH_PROVIDER_SETTINGS_KEY = "SEARCH_PROVIDER_PACKAGE_NAME";

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


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


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


            mWrapper = new FrameLayout(getContext());
            mWrapper = new FrameLayout(getContext());

            // Only add the view when enabled
            // Only add the view when enabled
            if (isQsbEnabled()) {
            if (isQsbEnabled()) {
                mWrapper.addView(createQsb(mWrapper));
                mWrapper.addView(createQsb(mWrapper));
@@ -246,21 +250,37 @@ public class QsbContainerView extends FrameLayout {
            return v;
            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}
         * 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
         * If widgetCategory is not supported, or no such widget is found, returns the first widget
         * provided by the package.
         * provided by the package.
         */
         */
        protected AppWidgetProviderInfo getSearchWidgetProvider() {
        protected AppWidgetProviderInfo getSearchWidgetProvider() {
            SearchManager searchManager =
            String providerPkg = getSearchProviderPackageName();
                    (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);
            if (providerPkg == null) {
            ComponentName searchComponent = searchManager.getGlobalSearchActivity();
                return null;
            if (searchComponent == null) return null;
            }
            String providerPkg = searchComponent.getPackageName();

            AppWidgetProviderInfo defaultWidgetForSearchPackage = null;
            AppWidgetProviderInfo defaultWidgetForSearchPackage = null;

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


        private final WidgetViewFactory mViewFactory;
        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);
            super(context, hostId);
            mViewFactory = viewFactory;
            mViewFactory = viewFactory;
            mWidgetsUpdateCallback = widgetProvidersUpdateCallback;
        }

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


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

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


    public interface WidgetViewFactory {
    public interface WidgetViewFactory {
@@ -297,6 +332,17 @@ public class QsbContainerView extends FrameLayout {
        QsbWidgetHostView newView(Context context);
        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
     * Returns true if {@param original} contains all entries defined in {@param updates} and
     * have the same value.
     * have the same value.