From 8ae0fc78185351e1649b48c7cb8d7b28b157dae0 Mon Sep 17 00:00:00 2001 From: Santiago Etchebehere Date: Tue, 16 Jul 2019 13:19:56 -0700 Subject: Only read Themes Stub from system Make sure themes stub is a system app before parsing Bug: 137652108 Change-Id: Ibe11f84d1f8bb698711f71308b7398af4d0759dc --- src/com/android/customization/model/ResourcesApkProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/customization/model/ResourcesApkProvider.java b/src/com/android/customization/model/ResourcesApkProvider.java index f770dbc7..92e03b92 100644 --- a/src/com/android/customization/model/ResourcesApkProvider.java +++ b/src/com/android/customization/model/ResourcesApkProvider.java @@ -25,8 +25,8 @@ public abstract class ResourcesApkProvider { Resources apkResources = null; try { PackageManager pm = mContext.getPackageManager(); - ApplicationInfo stubAppInfo = pm.getApplicationInfo( - mStubPackageName, PackageManager.GET_META_DATA); + ApplicationInfo stubAppInfo = pm.getApplicationInfo(mStubPackageName, + PackageManager.GET_META_DATA | PackageManager.MATCH_SYSTEM_ONLY); if (stubAppInfo != null) { apkResources = pm.getResourcesForApplication(stubAppInfo); } -- cgit v1.2.3 From 6da5b98055c42d5bb4ad45aaf8d08a774f430033 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Wed, 17 Jul 2019 00:08:04 -0700 Subject: Make ThemePicker unbundled and not crash when sideloaded Bug: 136199516 1. source: qt-r1-dev branch 2. command: stats-log-api-gen --java WallpaperStatsLog.java --module style --javaPackage com.android.customization.module --javaClass "WallpaperStatsLog" Change-Id: Ibddba41ccc4922944262df739c621e99aa39f3cb --- .../module/StatsLogUserEventLogger.java | 25 ++-- .../customization/module/WallpaperStatsLog.java | 147 +++++++++++++++++++++ 2 files changed, 160 insertions(+), 12 deletions(-) create mode 100644 src/com/android/customization/module/WallpaperStatsLog.java diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java index b77d7dc7..37c64ac4 100644 --- a/src/com/android/customization/module/StatsLogUserEventLogger.java +++ b/src/com/android/customization/module/StatsLogUserEventLogger.java @@ -39,32 +39,33 @@ import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY public class StatsLogUserEventLogger extends NoOpUserEventLogger implements ThemesUserEventLogger { private static final String TAG = "StatsLogUserEventLogger"; + private static final int CODE = 179; @Override public void logResumed(boolean provisioned, boolean wallpaper) { - StatsLogCompat.write(StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0); + WallpaperStatsLog.write(CODE, StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0); } @Override public void logStopped() { - StatsLogCompat.write(StyleEnums.ONSTOP, 0, 0, 0, 0, 0, 0, 0, 0, 0); + WallpaperStatsLog.write(CODE, StyleEnums.ONSTOP, 0, 0, 0, 0, 0, 0, 0, 0, 0); } @Override public void logActionClicked(String collectionId, int actionLabelResId) { - StatsLogCompat.write(StyleEnums.WALLPAPER_EXPLORE, 0, 0, 0, 0, 0, collectionId.hashCode(), + WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_EXPLORE, 0, 0, 0, 0, 0, collectionId.hashCode(), 0, 0, 0); } @Override public void logIndividualWallpaperSelected(String collectionId) { - StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, 0, + WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, 0, collectionId.hashCode(), 0, 0); } @Override public void logCategorySelected(String collectionId) { - StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT, + WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, collectionId.hashCode(), 0, 0, 0); @@ -72,7 +73,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logWallpaperSet(String collectionId, @Nullable String wallpaperId) { - StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT, + WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, collectionId.hashCode(), 0, 0, 0); @@ -86,7 +87,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) { - StatsLogCompat.write(StyleEnums.PICKER_SELECT, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT, Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)), Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)), Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)), @@ -95,7 +96,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) { - StatsLogCompat.write(StyleEnums.PICKER_APPLIED, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED, Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)), Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)), Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)), @@ -104,7 +105,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logClockSelected(Clockface clock) { - StatsLogCompat.write(StyleEnums.PICKER_SELECT, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT, 0, 0, 0, Objects.hashCode(clock.getId()), 0, 0, 0, 0, 0); @@ -112,7 +113,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logClockApplied(Clockface clock) { - StatsLogCompat.write(StyleEnums.PICKER_APPLIED, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED, 0, 0, 0, Objects.hashCode(clock.getId()), 0, 0, 0, 0, 0); @@ -120,7 +121,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logGridSelected(GridOption grid) { - StatsLogCompat.write(StyleEnums.PICKER_SELECT, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT, 0, 0, 0, 0, grid.cols, 0, 0, 0, 0); @@ -128,7 +129,7 @@ public class StatsLogUserEventLogger extends NoOpUserEventLogger implements Them @Override public void logGridApplied(GridOption grid) { - StatsLogCompat.write(StyleEnums.PICKER_APPLIED, + WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED, 0, 0, 0, 0, grid.cols, 0, 0, 0, 0); diff --git a/src/com/android/customization/module/WallpaperStatsLog.java b/src/com/android/customization/module/WallpaperStatsLog.java new file mode 100644 index 00000000..9f5761f8 --- /dev/null +++ b/src/com/android/customization/module/WallpaperStatsLog.java @@ -0,0 +1,147 @@ +// This file is autogenerated + +package com.android.customization.module; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import android.util.StatsLog; +import android.os.SystemClock; + +import java.util.ArrayList; + + +/** + * Utility class for logging statistics events. + */ +public class WallpaperStatsLog { + private static final int LOGGER_ENTRY_MAX_PAYLOAD = 4068; + private static final int MAX_EVENT_PAYLOAD = LOGGER_ENTRY_MAX_PAYLOAD - 4; + private static final byte INT_TYPE = 0; + private static final byte LONG_TYPE = 1; + private static final byte STRING_TYPE = 2; + private static final byte LIST_TYPE = 3; + private static final byte FLOAT_TYPE = 4; + private static final int INT_TYPE_SIZE = 5; + private static final int FLOAT_TYPE_SIZE = 5; + private static final int LONG_TYPE_SIZE = 9; + private static final int STRING_TYPE_OVERHEAD = 5; + private static final int LIST_TYPE_OVERHEAD = 2; + // Constants for atom codes. + + /** + * StyleUIChanged style_ui_changed
+ * Usage: StatsLog.write(StatsLog.STYLE_UI_CHANGED, int action, int color_package_hash, int font_package_hash, int shape_package_hash, int clock_package_hash, int launcher_grid, int wallpaper_category_hash, int wallpaper_id_hash, int color_preference, int location_preference);
+ */ + public static final int STYLE_UI_CHANGED = 179; + + // Constants for enum values. + + // Values for StyleUIChanged.action + public static final int STYLE_UICHANGED__ACTION__DEFAULT_ACTION = 0; + public static final int STYLE_UICHANGED__ACTION__ONRESUME = 1; + public static final int STYLE_UICHANGED__ACTION__ONSTOP = 2; + public static final int STYLE_UICHANGED__ACTION__PICKER_SELECT = 3; + public static final int STYLE_UICHANGED__ACTION__PICKER_APPLIED = 4; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_OPEN_CATEGORY = 5; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_SELECT = 6; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_APPLIED = 7; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_EXPLORE = 8; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_DOWNLOAD = 9; + public static final int STYLE_UICHANGED__ACTION__WALLPAPER_REMOVE = 10; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_SUCCESS = 11; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_FAILED = 12; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_CANCELLED = 13; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DELETE_SUCCESS = 14; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DELETE_FAILED = 15; + public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_APPLIED = 16; + + // Values for StyleUIChanged.location_preference + public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_PREFERENCE_UNSPECIFIED = 0; + public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_UNAVAILABLE = 1; + public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_CURRENT = 2; + public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_MANUAL = 3; + + // Write methods + public static void write(int code, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10) { + // Initial overhead of the list, timestamp, and atom tag. + int needed = LIST_TYPE_OVERHEAD + LONG_TYPE_SIZE + INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + needed += INT_TYPE_SIZE; + if (needed > MAX_EVENT_PAYLOAD) { + return; + } + byte[] buff = new byte[needed]; + int pos = 0; + buff[pos] = LIST_TYPE; + buff[pos + 1] = 12; + pos += LIST_TYPE_OVERHEAD; + long elapsedRealtime = SystemClock.elapsedRealtimeNanos(); + buff[pos] = LONG_TYPE; + copyLong(buff, pos + 1, elapsedRealtime); + pos += LONG_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, code); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg1); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg2); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg3); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg4); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg5); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg6); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg7); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg8); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg9); + pos += INT_TYPE_SIZE; + buff[pos] = INT_TYPE; + copyInt(buff, pos + 1, arg10); + pos += INT_TYPE_SIZE; + StatsLog.writeRaw(buff, pos); + } + + // Helper methods for copying primitives + private static void copyInt(byte[] buff, int pos, int val) { + buff[pos] = (byte) (val); + buff[pos + 1] = (byte) (val >> 8); + buff[pos + 2] = (byte) (val >> 16); + buff[pos + 3] = (byte) (val >> 24); + return; + } + + private static void copyLong(byte[] buff, int pos, long val) { + buff[pos] = (byte) (val); + buff[pos + 1] = (byte) (val >> 8); + buff[pos + 2] = (byte) (val >> 16); + buff[pos + 3] = (byte) (val >> 24); + buff[pos + 4] = (byte) (val >> 32); + buff[pos + 5] = (byte) (val >> 40); + buff[pos + 6] = (byte) (val >> 48); + buff[pos + 7] = (byte) (val >> 56); + return; + } + +} -- cgit v1.2.3