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

Commit 7aa577d8 authored by Samuel Fufa's avatar Samuel Fufa
Browse files

Show independent shortcuts from Hero view

Test: Manual
Screenshot: https://screenshot.googleplex.com/6iQGEZADXf9PtWz
Bug: 165320033
Change-Id: Ib8db1fc34da4adc39f3bec5557223a1e283380dd
parent b0277191
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?><!-- 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.
-->
<com.android.launcher3.views.SearchResultShortcut xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:launcher="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:padding="@dimen/dynamic_grid_edge_margin">

    <com.android.launcher3.BubbleTextView
        android:id="@+id/bubble_text"
        style="@style/BaseIcon"
        android:drawablePadding="@dimen/dynamic_grid_icon_drawable_padding"
        android:gravity="start|center_vertical"
        android:textAlignment="viewStart"
        android:textColor="?android:attr/textColorPrimary"
        android:textSize="16sp"
        android:layout_height="wrap_content"
        launcher:iconDisplay="hero_app"
        launcher:layoutHorizontal="true" />

    <View
        android:id="@+id/icon"
        android:layout_width="@dimen/deep_shortcut_icon_size"
        android:layout_height="@dimen/deep_shortcut_icon_size"
        android:layout_gravity="start|center_vertical"
        android:background="@drawable/ic_deepshortcut_placeholder" />

</com.android.launcher3.views.SearchResultShortcut>
 No newline at end of file
+8 −1
Original line number Diff line number Diff line
@@ -89,6 +89,8 @@ public class AllAppsGridAdapter extends

    public static final int VIEW_TYPE_SEARCH_SLICE = 1 << 9;

    public static final int VIEW_TYPE_SEARCH_SHORTCUT = 1 << 10;

    // Common view type masks
    public static final int VIEW_TYPE_MASK_DIVIDER = VIEW_TYPE_ALL_APPS_DIVIDER;
    public static final int VIEW_TYPE_MASK_ICON = VIEW_TYPE_ICON;
@@ -179,7 +181,8 @@ public class AllAppsGridAdapter extends
                    || viewType == VIEW_TYPE_SEARCH_HERO_APP
                    || viewType == VIEW_TYPE_SEARCH_ROW_WITH_BUTTON
                    || viewType == VIEW_TYPE_SEARCH_SLICE
                    || viewType == VIEW_TYPE_SEARCH_ROW;
                    || viewType == VIEW_TYPE_SEARCH_ROW
                    || viewType == VIEW_TYPE_SEARCH_SHORTCUT;
        }
    }

@@ -426,6 +429,9 @@ public class AllAppsGridAdapter extends
            case VIEW_TYPE_SEARCH_SLICE:
                return new ViewHolder(mLayoutInflater.inflate(
                        R.layout.search_result_slice, parent, false));
            case VIEW_TYPE_SEARCH_SHORTCUT:
                return new ViewHolder(mLayoutInflater.inflate(
                        R.layout.search_result_shortcut, parent, false));
            default:
                throw new RuntimeException("Unexpected view type");
        }
@@ -468,6 +474,7 @@ public class AllAppsGridAdapter extends
            case VIEW_TYPE_SEARCH_ROW_WITH_BUTTON:
            case VIEW_TYPE_SEARCH_HERO_APP:
            case VIEW_TYPE_SEARCH_ROW:
            case VIEW_TYPE_SEARCH_SHORTCUT:
                PayloadResultHandler payloadResultView = (PayloadResultHandler) holder.itemView;
                payloadResultView.applyAdapterInfo(
                        (AdapterItemWithPayload) mApps.getAdapterItems().get(position));
+98 −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.launcher3.views;

import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;

import android.content.Context;
import android.content.pm.ShortcutInfo;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.allapps.AllAppsGridAdapter;
import com.android.launcher3.allapps.search.AllAppsSearchBarController;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.touch.ItemClickHandler;
import com.android.systemui.plugins.shared.SearchTarget;

/**
 * A view representing a stand alone shortcut search result
 */
public class SearchResultShortcut extends FrameLayout implements
        AllAppsSearchBarController.PayloadResultHandler<SearchTarget> {

    BubbleTextView mBubbleTextView;
    View mIconView;

    public SearchResultShortcut(@NonNull Context context) {
        super(context);
    }

    public SearchResultShortcut(@NonNull Context context,
            @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public SearchResultShortcut(@NonNull Context context, @Nullable AttributeSet attrs,
            int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        Launcher launcher = Launcher.getLauncher(getContext());
        DeviceProfile grid = launcher.getDeviceProfile();
        mIconView = findViewById(R.id.icon);
        ViewGroup.LayoutParams iconParams = mIconView.getLayoutParams();
        iconParams.height = grid.allAppsIconSizePx;
        iconParams.width = grid.allAppsIconSizePx;
        mBubbleTextView = findViewById(R.id.bubble_text);
        setOnClickListener(v -> handleSelection());
    }

    @Override
    public void applyAdapterInfo(
            AllAppsGridAdapter.AdapterItemWithPayload<SearchTarget> adapterItemWithPayload) {
        SearchTarget payload = adapterItemWithPayload.getPayload();
        ShortcutInfo si = payload.shortcuts.get(0);
        WorkspaceItemInfo workspaceItemInfo = new WorkspaceItemInfo(si, getContext());
        mBubbleTextView.applyFromWorkspaceItem(workspaceItemInfo);
        mIconView.setBackground(mBubbleTextView.getIcon());
        LauncherAppState launcherAppState = LauncherAppState.getInstance(getContext());
        MODEL_EXECUTOR.execute(() -> {
            launcherAppState.getIconCache().getShortcutIcon(workspaceItemInfo, si);
            mBubbleTextView.applyFromWorkspaceItem(workspaceItemInfo);
            mIconView.setBackground(mBubbleTextView.getIcon());
        });
        adapterItemWithPayload.setSelectionHandler(this::handleSelection);
    }

    private void handleSelection() {
        ItemClickHandler.onClickAppShortcut(this, (WorkspaceItemInfo) mBubbleTextView.getTag(),
                Launcher.getLauncher(getContext()));
    }
}
+6 −2
Original line number Diff line number Diff line
@@ -31,7 +31,9 @@ public class SearchTarget implements Comparable<SearchTarget> {
        DETAIL(2),
        ROW(3),
        ROW_WITH_BUTTON(4),
        SLICE(5);
        SLICE(5),
        SHORTCUT(6),
        PEOPLE(7);

        private final int mId;
        ViewType(int id) {
@@ -48,7 +50,9 @@ public class SearchTarget implements Comparable<SearchTarget> {
        SETTINGS_ROW(1, "Settings", ViewType.ROW),
        SETTINGS_SLICE(2, "Settings", ViewType.SLICE),
        APP(3, "", ViewType.TOP_HIT),
        APP_HERO(4, "", ViewType.HERO);
        APP_HERO(4, "", ViewType.HERO),
        SHORTCUT(5, "Shortcuts", ViewType.SHORTCUT),
        PEOPLE(6, "People", ViewType.PEOPLE);

        private final int mId;
        private final String mTitle;