Loading ext_tests/src/com/android/launcher3/testing/DebugTestInformationHandler.java +19 −0 Original line number Diff line number Diff line Loading @@ -18,9 +18,12 @@ package com.android.launcher3.testing; import static android.graphics.Bitmap.Config.ARGB_8888; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Binder; import android.os.Bundle; import android.os.Debug; import android.system.Os; Loading @@ -28,6 +31,9 @@ import android.view.View; import androidx.annotation.Keep; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherSettings; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; Loading Loading @@ -165,6 +171,19 @@ public class DebugTestInformationHandler extends TestInformationHandler { return response; } case TestProtocol.REQUEST_CLEAR_DATA: { final long identity = Binder.clearCallingIdentity(); try { LauncherSettings.Settings.call(mContext.getContentResolver(), LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB); MAIN_EXECUTOR.submit(() -> LauncherAppState.getInstance(mContext).getModel().forceReload()); return response; } finally { Binder.restoreCallingIdentity(identity); } } default: return super.call(method); } Loading protos/launcher_atom.proto +9 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,15 @@ message PredictionContainer { // Represents the apps container within search results. message SearchResultContainer { // Length of search term. optional int32 query_length = 1; // Container from where search was invoked. oneof ParentContainer { WorkspaceContainer workspace = 2; AllAppsContainer all_apps_container = 3; } } // Container for package specific shortcuts to deep links and notifications. Loading quickstep/recents_ui_overrides/res/layout/predicted_hotseat_edu.xml +2 −1 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:text="@string/hotseat_edu_dismiss" android:layout_gravity="start|center_vertical" android:textColor="@android:color/white"/> </FrameLayout> <FrameLayout Loading @@ -102,7 +103,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:gravity="end" android:layout_gravity="end|center_vertical" android:text="@string/hotseat_edu_accept" android:textColor="@android:color/white"/> </FrameLayout> Loading quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +34 −16 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.quickstep.logging; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.FOLDER; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.PREDICTED_HOTSEAT_CONTAINER; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.SEARCH_RESULT_CONTAINER; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WORKSPACE_SNAPSHOT; import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__ALLAPPS; import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND; Loading Loading @@ -75,6 +75,7 @@ public class StatsLogCompatManager extends StatsLogManager { // from nano to lite, bake constant to prevent robo test failure. private static final int DEFAULT_PAGE_INDEX = -2; private static final int FOLDER_HIERARCHY_OFFSET = 100; private static final int SEARCH_RESULT_HIERARCHY_OFFSET = 200; public StatsLogCompatManager(Context context) { sContext = context; Loading Loading @@ -156,10 +157,10 @@ public class StatsLogCompatManager extends StatsLogManager { getComponentName(info) /* component_name */, getGridX(info, false) /* grid_x */, getGridY(info, false) /* grid_y */, getPageId(info, false) /* page_id */, getPageId(info) /* page_id */, getGridX(info, true) /* grid_x_parent */, getGridY(info, true) /* grid_y_parent */, getPageId(info, true) /* page_id_parent */, getParentPageId(info) /* page_id_parent */, getHierarchy(info) /* hierarchy */, info.getIsWork() /* is_work_profile */, info.getAttribute().getNumber() /* origin */, Loading Loading @@ -321,10 +322,10 @@ public class StatsLogCompatManager extends StatsLogManager { getComponentName(atomInfo) /* component_name */, getGridX(atomInfo, false) /* grid_x */, getGridY(atomInfo, false) /* grid_y */, getPageId(atomInfo, false) /* page_id */, getPageId(atomInfo) /* page_id */, getGridX(atomInfo, true) /* grid_x_parent */, getGridY(atomInfo, true) /* grid_y_parent */, getPageId(atomInfo, true) /* page_id_parent */, getParentPageId(atomInfo) /* page_id_parent */, getHierarchy(atomInfo) /* hierarchy */, atomInfo.getIsWork() /* is_work_profile */, atomInfo.getRank() /* rank */, Loading @@ -336,9 +337,14 @@ public class StatsLogCompatManager extends StatsLogManager { } private static int getCardinality(LauncherAtom.ItemInfo info) { return info.getContainerInfo().getContainerCase().equals(PREDICTED_HOTSEAT_CONTAINER) ? info.getContainerInfo().getPredictedHotseatContainer().getCardinality() : info.getFolderIcon().getCardinality(); switch (info.getContainerInfo().getContainerCase()){ case PREDICTED_HOTSEAT_CONTAINER: return info.getContainerInfo().getPredictedHotseatContainer().getCardinality(); case SEARCH_RESULT_CONTAINER: return info.getContainerInfo().getSearchResultContainer().getQueryLength(); default: return info.getFolderIcon().getCardinality(); } } private static String getPackageName(LauncherAtom.ItemInfo info) { Loading Loading @@ -395,14 +401,23 @@ public class StatsLogCompatManager extends StatsLogManager { } } private static int getPageId(LauncherAtom.ItemInfo info, boolean parent) { if (info.getContainerInfo().getContainerCase() == FOLDER) { if (parent) { return info.getContainerInfo().getFolder().getWorkspace().getPageIndex(); } else { private static int getPageId(LauncherAtom.ItemInfo info) { switch (info.getContainerInfo().getContainerCase()) { case FOLDER: return info.getContainerInfo().getFolder().getPageIndex(); default: return info.getContainerInfo().getWorkspace().getPageIndex(); } } else { } private static int getParentPageId(LauncherAtom.ItemInfo info) { switch (info.getContainerInfo().getContainerCase()) { case FOLDER: return info.getContainerInfo().getFolder().getWorkspace().getPageIndex(); case SEARCH_RESULT_CONTAINER: return info.getContainerInfo().getSearchResultContainer().getWorkspace() .getPageIndex(); default: return info.getContainerInfo().getWorkspace().getPageIndex(); } } Loading @@ -411,6 +426,9 @@ public class StatsLogCompatManager extends StatsLogManager { if (info.getContainerInfo().getContainerCase() == FOLDER) { return info.getContainerInfo().getFolder().getParentContainerCase().getNumber() + FOLDER_HIERARCHY_OFFSET; } else if (info.getContainerInfo().getContainerCase() == SEARCH_RESULT_CONTAINER) { return info.getContainerInfo().getSearchResultContainer().getParentContainerCase() .getNumber() + SEARCH_RESULT_HIERARCHY_OFFSET; } else { return info.getContainerInfo().getContainerCase().getNumber(); } Loading src/com/android/launcher3/model/GridSizeMigrationTaskV2.java +20 −11 Original line number Diff line number Diff line Loading @@ -248,10 +248,10 @@ public class GridSizeMigrationTaskV2 { /** Return what's in the src but not in the dest */ private static List<DbEntry> calcDiff(List<DbEntry> src, List<DbEntry> dest) { Set<String> destIntentSet = new HashSet<>(); Set<Set<String>> destFolderIntentSet = new HashSet<>(); Set<Map<String, Integer>> destFolderIntentSet = new HashSet<>(); for (DbEntry entry : dest) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { destFolderIntentSet.add(entry.mFolderItems.keySet()); destFolderIntentSet.add(getFolderIntents(entry)); } else { destIntentSet.add(entry.mIntent); } Loading @@ -259,7 +259,7 @@ public class GridSizeMigrationTaskV2 { List<DbEntry> diff = new ArrayList<>(); for (DbEntry entry : src) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { if (!destFolderIntentSet.contains(entry.mFolderItems.keySet())) { if (!destFolderIntentSet.contains(getFolderIntents(entry))) { diff.add(entry); } } else { Loading @@ -271,16 +271,26 @@ public class GridSizeMigrationTaskV2 { return diff; } private static Map<String, Integer> getFolderIntents(DbEntry entry) { Map<String, Integer> folder = new HashMap<>(); for (String intent : entry.mFolderItems.keySet()) { folder.put(intent, entry.mFolderItems.get(intent).size()); } return folder; } private static void insertEntryInDb(SQLiteDatabase db, Context context, DbEntry entry, String srcTableName, String destTableName) { int id = copyEntryAndUpdate(db, context, entry, srcTableName, destTableName); if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { for (int itemId : entry.mFolderItems.values()) { for (Set<Integer> itemIds : entry.mFolderItems.values()) { for (int itemId : itemIds) { copyEntryAndUpdate(db, context, itemId, id, srcTableName, destTableName); } } } } private static int copyEntryAndUpdate(SQLiteDatabase db, Context context, DbEntry entry, String srcTableName, String destTableName) { Loading Loading @@ -675,7 +685,10 @@ public class GridSizeMigrationTaskV2 { String intent = c.getString(1); verifyIntent(intent); total++; entry.mFolderItems.put(intent, id); if (!entry.mFolderItems.containsKey(intent)) { entry.mFolderItems.put(intent, new HashSet<>()); } entry.mFolderItems.get(intent).add(id); } catch (Exception e) { removeEntryFromDb(mDb, mTableName, IntArray.wrap(c.getInt(0))); } Loading Loading @@ -714,7 +727,7 @@ public class GridSizeMigrationTaskV2 { private String mIntent; private String mProvider; private Map<String, Integer> mFolderItems = new HashMap<>(); private Map<String, Set<Integer>> mFolderItems = new HashMap<>(); /** Comparator according to the reading order */ @Override Loading Loading @@ -748,9 +761,5 @@ public class GridSizeMigrationTaskV2 { values.put(LauncherSettings.Favorites.SPANX, spanX); values.put(LauncherSettings.Favorites.SPANY, spanY); } public String getIntentStr() { return mIntent; } } } Loading
ext_tests/src/com/android/launcher3/testing/DebugTestInformationHandler.java +19 −0 Original line number Diff line number Diff line Loading @@ -18,9 +18,12 @@ package com.android.launcher3.testing; import static android.graphics.Bitmap.Config.ARGB_8888; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Binder; import android.os.Bundle; import android.os.Debug; import android.system.Os; Loading @@ -28,6 +31,9 @@ import android.view.View; import androidx.annotation.Keep; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherSettings; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; Loading Loading @@ -165,6 +171,19 @@ public class DebugTestInformationHandler extends TestInformationHandler { return response; } case TestProtocol.REQUEST_CLEAR_DATA: { final long identity = Binder.clearCallingIdentity(); try { LauncherSettings.Settings.call(mContext.getContentResolver(), LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB); MAIN_EXECUTOR.submit(() -> LauncherAppState.getInstance(mContext).getModel().forceReload()); return response; } finally { Binder.restoreCallingIdentity(identity); } } default: return super.call(method); } Loading
protos/launcher_atom.proto +9 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,15 @@ message PredictionContainer { // Represents the apps container within search results. message SearchResultContainer { // Length of search term. optional int32 query_length = 1; // Container from where search was invoked. oneof ParentContainer { WorkspaceContainer workspace = 2; AllAppsContainer all_apps_container = 3; } } // Container for package specific shortcuts to deep links and notifications. Loading
quickstep/recents_ui_overrides/res/layout/predicted_hotseat_edu.xml +2 −1 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:text="@string/hotseat_edu_dismiss" android:layout_gravity="start|center_vertical" android:textColor="@android:color/white"/> </FrameLayout> <FrameLayout Loading @@ -102,7 +103,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:gravity="end" android:layout_gravity="end|center_vertical" android:text="@string/hotseat_edu_accept" android:textColor="@android:color/white"/> </FrameLayout> Loading
quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +34 −16 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package com.android.quickstep.logging; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.FOLDER; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.PREDICTED_HOTSEAT_CONTAINER; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.SEARCH_RESULT_CONTAINER; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WORKSPACE_SNAPSHOT; import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__ALLAPPS; import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND; Loading Loading @@ -75,6 +75,7 @@ public class StatsLogCompatManager extends StatsLogManager { // from nano to lite, bake constant to prevent robo test failure. private static final int DEFAULT_PAGE_INDEX = -2; private static final int FOLDER_HIERARCHY_OFFSET = 100; private static final int SEARCH_RESULT_HIERARCHY_OFFSET = 200; public StatsLogCompatManager(Context context) { sContext = context; Loading Loading @@ -156,10 +157,10 @@ public class StatsLogCompatManager extends StatsLogManager { getComponentName(info) /* component_name */, getGridX(info, false) /* grid_x */, getGridY(info, false) /* grid_y */, getPageId(info, false) /* page_id */, getPageId(info) /* page_id */, getGridX(info, true) /* grid_x_parent */, getGridY(info, true) /* grid_y_parent */, getPageId(info, true) /* page_id_parent */, getParentPageId(info) /* page_id_parent */, getHierarchy(info) /* hierarchy */, info.getIsWork() /* is_work_profile */, info.getAttribute().getNumber() /* origin */, Loading Loading @@ -321,10 +322,10 @@ public class StatsLogCompatManager extends StatsLogManager { getComponentName(atomInfo) /* component_name */, getGridX(atomInfo, false) /* grid_x */, getGridY(atomInfo, false) /* grid_y */, getPageId(atomInfo, false) /* page_id */, getPageId(atomInfo) /* page_id */, getGridX(atomInfo, true) /* grid_x_parent */, getGridY(atomInfo, true) /* grid_y_parent */, getPageId(atomInfo, true) /* page_id_parent */, getParentPageId(atomInfo) /* page_id_parent */, getHierarchy(atomInfo) /* hierarchy */, atomInfo.getIsWork() /* is_work_profile */, atomInfo.getRank() /* rank */, Loading @@ -336,9 +337,14 @@ public class StatsLogCompatManager extends StatsLogManager { } private static int getCardinality(LauncherAtom.ItemInfo info) { return info.getContainerInfo().getContainerCase().equals(PREDICTED_HOTSEAT_CONTAINER) ? info.getContainerInfo().getPredictedHotseatContainer().getCardinality() : info.getFolderIcon().getCardinality(); switch (info.getContainerInfo().getContainerCase()){ case PREDICTED_HOTSEAT_CONTAINER: return info.getContainerInfo().getPredictedHotseatContainer().getCardinality(); case SEARCH_RESULT_CONTAINER: return info.getContainerInfo().getSearchResultContainer().getQueryLength(); default: return info.getFolderIcon().getCardinality(); } } private static String getPackageName(LauncherAtom.ItemInfo info) { Loading Loading @@ -395,14 +401,23 @@ public class StatsLogCompatManager extends StatsLogManager { } } private static int getPageId(LauncherAtom.ItemInfo info, boolean parent) { if (info.getContainerInfo().getContainerCase() == FOLDER) { if (parent) { return info.getContainerInfo().getFolder().getWorkspace().getPageIndex(); } else { private static int getPageId(LauncherAtom.ItemInfo info) { switch (info.getContainerInfo().getContainerCase()) { case FOLDER: return info.getContainerInfo().getFolder().getPageIndex(); default: return info.getContainerInfo().getWorkspace().getPageIndex(); } } else { } private static int getParentPageId(LauncherAtom.ItemInfo info) { switch (info.getContainerInfo().getContainerCase()) { case FOLDER: return info.getContainerInfo().getFolder().getWorkspace().getPageIndex(); case SEARCH_RESULT_CONTAINER: return info.getContainerInfo().getSearchResultContainer().getWorkspace() .getPageIndex(); default: return info.getContainerInfo().getWorkspace().getPageIndex(); } } Loading @@ -411,6 +426,9 @@ public class StatsLogCompatManager extends StatsLogManager { if (info.getContainerInfo().getContainerCase() == FOLDER) { return info.getContainerInfo().getFolder().getParentContainerCase().getNumber() + FOLDER_HIERARCHY_OFFSET; } else if (info.getContainerInfo().getContainerCase() == SEARCH_RESULT_CONTAINER) { return info.getContainerInfo().getSearchResultContainer().getParentContainerCase() .getNumber() + SEARCH_RESULT_HIERARCHY_OFFSET; } else { return info.getContainerInfo().getContainerCase().getNumber(); } Loading
src/com/android/launcher3/model/GridSizeMigrationTaskV2.java +20 −11 Original line number Diff line number Diff line Loading @@ -248,10 +248,10 @@ public class GridSizeMigrationTaskV2 { /** Return what's in the src but not in the dest */ private static List<DbEntry> calcDiff(List<DbEntry> src, List<DbEntry> dest) { Set<String> destIntentSet = new HashSet<>(); Set<Set<String>> destFolderIntentSet = new HashSet<>(); Set<Map<String, Integer>> destFolderIntentSet = new HashSet<>(); for (DbEntry entry : dest) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { destFolderIntentSet.add(entry.mFolderItems.keySet()); destFolderIntentSet.add(getFolderIntents(entry)); } else { destIntentSet.add(entry.mIntent); } Loading @@ -259,7 +259,7 @@ public class GridSizeMigrationTaskV2 { List<DbEntry> diff = new ArrayList<>(); for (DbEntry entry : src) { if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { if (!destFolderIntentSet.contains(entry.mFolderItems.keySet())) { if (!destFolderIntentSet.contains(getFolderIntents(entry))) { diff.add(entry); } } else { Loading @@ -271,16 +271,26 @@ public class GridSizeMigrationTaskV2 { return diff; } private static Map<String, Integer> getFolderIntents(DbEntry entry) { Map<String, Integer> folder = new HashMap<>(); for (String intent : entry.mFolderItems.keySet()) { folder.put(intent, entry.mFolderItems.get(intent).size()); } return folder; } private static void insertEntryInDb(SQLiteDatabase db, Context context, DbEntry entry, String srcTableName, String destTableName) { int id = copyEntryAndUpdate(db, context, entry, srcTableName, destTableName); if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { for (int itemId : entry.mFolderItems.values()) { for (Set<Integer> itemIds : entry.mFolderItems.values()) { for (int itemId : itemIds) { copyEntryAndUpdate(db, context, itemId, id, srcTableName, destTableName); } } } } private static int copyEntryAndUpdate(SQLiteDatabase db, Context context, DbEntry entry, String srcTableName, String destTableName) { Loading Loading @@ -675,7 +685,10 @@ public class GridSizeMigrationTaskV2 { String intent = c.getString(1); verifyIntent(intent); total++; entry.mFolderItems.put(intent, id); if (!entry.mFolderItems.containsKey(intent)) { entry.mFolderItems.put(intent, new HashSet<>()); } entry.mFolderItems.get(intent).add(id); } catch (Exception e) { removeEntryFromDb(mDb, mTableName, IntArray.wrap(c.getInt(0))); } Loading Loading @@ -714,7 +727,7 @@ public class GridSizeMigrationTaskV2 { private String mIntent; private String mProvider; private Map<String, Integer> mFolderItems = new HashMap<>(); private Map<String, Set<Integer>> mFolderItems = new HashMap<>(); /** Comparator according to the reading order */ @Override Loading Loading @@ -748,9 +761,5 @@ public class GridSizeMigrationTaskV2 { values.put(LauncherSettings.Favorites.SPANX, spanX); values.put(LauncherSettings.Favorites.SPANY, spanY); } public String getIntentStr() { return mIntent; } } }