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

Commit 227daf01 authored by Hyunyoung Song's avatar Hyunyoung Song
Browse files

ub-launcher3-qt-qpr1-dev @ build 5818303

Test: presubmit setup on source branch

Bug: 112282235  Starting an app from Launcher sometimes takes > 10 sec
Bug: 125027540  Apps to be searchable in different languages
Bug: 132336512  Notification dots on pinned shortcuts
Bug: 135218095  Disable unnecessary services
Bug: 136277517  Widgets often don’t support scroll direction up/down, left/right and use forward/backward instead
Bug: 137777105  Make clearcut launcher logging feature parity with westworld logging
Bug: 137952354  OnResume() and onStop logging doesn't reflect the real source id for -1 screen
Bug: 137953006  Swiping/fling up from workspace logged as hotseat
Bug: 138273985  The pause app message takes more than 30 seconds to display after restarting the device.
Bug: 138683199  Pass the captured snapshot data to Launcher when recents animation is cancelled
Bug: 138729456  [Flaky test] java.lang.AssertionError: http://go/tapl : Can't find an object with selector: BySelector [CLASS='\Qandroid.widget.TextView\E', PKG='\Qcom.google.android.apps.nexuslauncher\E', TEXT='\QShortcut 3\E'] (visible state: Workspace)
Bug: 138743758  [Flaky test] java.lang.AssertionError: App still doesn't have Pause action: com.google.android.calculator
Bug: 138743792  [Flaky test] java.lang.AssertionError: ensureScrollable didn't add Chrome app
Bug: 138964490  Investigate if ToggleableFlags can be connected with DeviceConfig
Bug: 139416391  CTS tests crash when app_prediction service is disabled
Bug: 139498375  Flake:     java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
Bug: 139540363  Launcher goes in crash loop

Change-Id: Iaba4ed67e9fe4f8f5858324201e4c4e8711f59fa
parents 63b2cbc0 d88f63bb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />


    <!--
+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ public final class LandscapeStatesTouchController extends PortraitStatesTouchCon
    }

    @Override
    protected int getLogContainerTypeForNormalState() {
    protected int getLogContainerTypeForNormalState(MotionEvent ev) {
        return LauncherLogProto.ContainerType.WORKSPACE;
    }
}
+1 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.Bundle;
import android.os.UserHandle;

import com.android.launcher3.ItemInfo;
import com.android.launcher3.notification.NotificationKeyData;

import java.util.Collections;
import java.util.List;
@@ -48,10 +49,6 @@ public class DeepShortcutManager {
    private DeepShortcutManager(Context context) {
    }

    public static boolean supportsShortcuts(ItemInfo info) {
        return false;
    }

    public boolean wasLastCallSuccess() {
        return false;
    }
+54 −37
Original line number Diff line number Diff line
@@ -36,12 +36,16 @@ import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Handler;
import android.os.LocaleList;
import android.os.Looper;
import android.os.Process;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;

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

import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.icons.BitmapInfo;
import com.android.launcher3.icons.BitmapRenderer;
@@ -57,8 +61,6 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;

import androidx.annotation.NonNull;

public abstract class BaseIconCache {

    private static final String TAG = "BaseIconCache";
@@ -84,6 +86,7 @@ public abstract class BaseIconCache {

    protected int mIconDpi;
    protected IconDB mIconDb;
    protected LocaleList mLocaleList = LocaleList.getEmptyLocaleList();
    protected String mSystemState = "";

    private final String mDbFileName;
@@ -227,12 +230,12 @@ public abstract class BaseIconCache {

    /**
     * Refreshes the system state definition used to check the validity of the cache. It
     * incorporates all the properties that can affect the cache like locale and system-version.
     * incorporates all the properties that can affect the cache like the list of enabled locale
     * and system-version.
     */
    private void updateSystemState() {
        final String locale =
                mContext.getResources().getConfiguration().getLocales().toLanguageTags();
        mSystemState = locale + "," + Build.VERSION.SDK_INT;
        mLocaleList = mContext.getResources().getConfiguration().getLocales();
        mSystemState = mLocaleList.toLanguageTags() + "," + Build.VERSION.SDK_INT;
    }

    protected String getIconSystemState(String packageName) {
@@ -269,7 +272,7 @@ public abstract class BaseIconCache {
        mCache.put(key, entry);

        ContentValues values = newContentValues(entry, entry.title.toString(),
                componentName.getPackageName());
                componentName.getPackageName(), cachingLogic.getKeywords(object, mLocaleList));
        addIconToDB(values, componentName, info, userSerial);
    }

@@ -445,7 +448,7 @@ public abstract class BaseIconCache {
                    // Add the icon in the DB here, since these do not get written during
                    // package updates.
                    ContentValues values = newContentValues(
                            iconInfo, entry.title.toString(), packageName);
                            iconInfo, entry.title.toString(), packageName, null);
                    addIconToDB(values, cacheKey.componentName, info, getSerialNumberForUser(user));

                } catch (NameNotFoundException e) {
@@ -504,23 +507,35 @@ public abstract class BaseIconCache {
        return false;
    }

    static final class IconDB extends SQLiteCacheHelper {
        private final static int RELEASE_VERSION = 26;

        public final static String TABLE_NAME = "icons";
        public final static String COLUMN_ROWID = "rowid";
        public final static String COLUMN_COMPONENT = "componentName";
        public final static String COLUMN_USER = "profileId";
        public final static String COLUMN_LAST_UPDATED = "lastUpdated";
        public final static String COLUMN_VERSION = "version";
        public final static String COLUMN_ICON = "icon";
        public final static String COLUMN_ICON_COLOR = "icon_color";
        public final static String COLUMN_LABEL = "label";
        public final static String COLUMN_SYSTEM_STATE = "system_state";
    /**
     * Returns a cursor for an arbitrary query to the cache db
     */
    public synchronized Cursor queryCacheDb(String[] columns, String selection,
            String[] selectionArgs) {
        return mIconDb.query(columns, selection, selectionArgs);
    }

        public final static String[] COLUMNS_HIGH_RES = new String[] {
    /**
     * Cache class to store the actual entries on disk
     */
    public static final class IconDB extends SQLiteCacheHelper {
        private static final int RELEASE_VERSION = 27;

        public static final String TABLE_NAME = "icons";
        public static final String COLUMN_ROWID = "rowid";
        public static final String COLUMN_COMPONENT = "componentName";
        public static final String COLUMN_USER = "profileId";
        public static final String COLUMN_LAST_UPDATED = "lastUpdated";
        public static final String COLUMN_VERSION = "version";
        public static final String COLUMN_ICON = "icon";
        public static final String COLUMN_ICON_COLOR = "icon_color";
        public static final String COLUMN_LABEL = "label";
        public static final String COLUMN_SYSTEM_STATE = "system_state";
        public static final String COLUMN_KEYWORDS = "keywords";

        public static final String[] COLUMNS_HIGH_RES = new String[] {
                IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL, IconDB.COLUMN_ICON };
        public final static String[] COLUMNS_LOW_RES = new String[] {
        public static final String[] COLUMNS_LOW_RES = new String[] {
                IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL };

        public IconDB(Context context, String dbFileName, int iconPixelSize) {
@@ -529,21 +544,23 @@ public abstract class BaseIconCache {

        @Override
        protected void onCreateTable(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" +
                    COLUMN_COMPONENT + " TEXT NOT NULL, " +
                    COLUMN_USER + " INTEGER NOT NULL, " +
                    COLUMN_LAST_UPDATED + " INTEGER NOT NULL DEFAULT 0, " +
                    COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0, " +
                    COLUMN_ICON + " BLOB, " +
                    COLUMN_ICON_COLOR + " INTEGER NOT NULL DEFAULT 0, " +
                    COLUMN_LABEL + " TEXT, " +
                    COLUMN_SYSTEM_STATE + " TEXT, " +
                    "PRIMARY KEY (" + COLUMN_COMPONENT + ", " + COLUMN_USER + ") " +
                    ");");
        }
    }

    private ContentValues newContentValues(BitmapInfo bitmapInfo, String label, String packageName) {
            db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
                    + COLUMN_COMPONENT + " TEXT NOT NULL, "
                    + COLUMN_USER + " INTEGER NOT NULL, "
                    + COLUMN_LAST_UPDATED + " INTEGER NOT NULL DEFAULT 0, "
                    + COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0, "
                    + COLUMN_ICON + " BLOB, "
                    + COLUMN_ICON_COLOR + " INTEGER NOT NULL DEFAULT 0, "
                    + COLUMN_LABEL + " TEXT, "
                    + COLUMN_SYSTEM_STATE + " TEXT, "
                    + COLUMN_KEYWORDS + " TEXT, "
                    + "PRIMARY KEY (" + COLUMN_COMPONENT + ", " + COLUMN_USER + ") "
                    + ");");
        }
    }

    private ContentValues newContentValues(BitmapInfo bitmapInfo, String label,
            String packageName, @Nullable String keywords) {
        ContentValues values = new ContentValues();
        values.put(IconDB.COLUMN_ICON,
                bitmapInfo.isLowRes() ? null : GraphicsUtils.flattenBitmap(bitmapInfo.icon));
@@ -551,7 +568,7 @@ public abstract class BaseIconCache {

        values.put(IconDB.COLUMN_LABEL, label);
        values.put(IconDB.COLUMN_SYSTEM_STATE, getIconSystemState(packageName));

        values.put(IconDB.COLUMN_KEYWORDS, keywords);
        return values;
    }

+11 −0
Original line number Diff line number Diff line
@@ -17,8 +17,11 @@ package com.android.launcher3.icons.cache;

import android.content.ComponentName;
import android.content.Context;
import android.os.LocaleList;
import android.os.UserHandle;

import androidx.annotation.Nullable;

import com.android.launcher3.icons.BitmapInfo;

public interface CachingLogic<T> {
@@ -30,4 +33,12 @@ public interface CachingLogic<T> {
    CharSequence getLabel(T object);

    void loadIcon(Context context, T object, BitmapInfo target);

    /**
     * Provides a option list of keywords to associate with this object
     */
    @Nullable
    default String getKeywords(T object, LocaleList localeList) {
        return null;
    }
}
Loading