From 323347afccd338c8b9a1daa317669a93526114c4 Mon Sep 17 00:00:00 2001 From: Tsung-Mao Fang Date: Thu, 6 Feb 2020 13:46:05 +0800 Subject: [PATCH] Use system-api lib to get badged, shadowed icons In order to prevent DoS attack from icon size, we're using a system lib to help convert any loaded drawable into a flattened bitmap with an appropriate size. Test: Open recent app screen and then no crash Change-Id: Ie148890fbbbf71f42863a8fe727a90615158b8c1 Fix: 33646131 --- .../applications/RecentAppsPreferenceController.java | 6 ++---- .../applications/manageapplications/ManageApplications.java | 2 +- .../manageapplications/ManageApplicationsTest.java | 3 +++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index 7e02065c73f..28a88a200f1 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -22,7 +22,6 @@ import android.app.usage.UsageStats; import android.content.Context; import android.icu.text.RelativeDateTimeFormatter; import android.os.UserHandle; -import android.util.IconDrawableFactory; import android.view.View; import androidx.annotation.NonNull; @@ -37,6 +36,7 @@ import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.SubSettingLauncher; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.Utils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.utils.StringUtil; @@ -65,7 +65,6 @@ public class RecentAppsPreferenceController extends BasePreferenceController private final ApplicationsState mApplicationsState; private final int mUserId; - private final IconDrawableFactory mIconDrawableFactory; private final MetricsFeatureProvider mMetricsFeatureProvider; private Fragment mHost; @@ -76,7 +75,6 @@ public class RecentAppsPreferenceController extends BasePreferenceController mApplicationsState = ApplicationsState.getInstance( (Application) mContext.getApplicationContext()); mUserId = UserHandle.myUserId(); - mIconDrawableFactory = IconDrawableFactory.newInstance(mContext); mMetricsFeatureProvider = FeatureFactory.getFactory(mContext).getMetricsFeatureProvider(); } @@ -161,7 +159,7 @@ public class RecentAppsPreferenceController extends BasePreferenceController } return new AppEntityInfo.Builder() - .setIcon(mIconDrawableFactory.getBadgedIcon(appEntry.info)) + .setIcon(Utils.getBadgedIcon(mContext, appEntry.info)) .setTitle(appEntry.label) .setSummary(StringUtil.formatRelativeTime(mContext, System.currentTimeMillis() - stat.getLastTimeUsed(), false, diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 2597665229b..0f7a8c259eb 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -1460,7 +1460,7 @@ public class ManageApplications extends InstrumentedFragment ApplicationsState.AppEntry entry = mEntries.get(position); synchronized (entry) { holder.setTitle(entry.label); - holder.setIcon(mIconDrawableFactory.getBadgedIcon(entry.info)); + holder.setIcon(Utils.getBadgedIcon(mContext, entry.info)); updateSummary(holder, entry); updateSwitch(holder, entry); holder.updateDisableView(entry.info); diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java index 3d864cc79cf..074df7671a3 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java @@ -366,6 +366,7 @@ public class ManageApplicationsTest { appEntry.extraInfo = mock(AppFilterItem.class); appList.add(appEntry); ReflectionHelpers.setField(adapter, "mEntries", appList); + ReflectionHelpers.setField(adapter, "mContext", mContext); adapter.onBindViewHolder(holder, 0); // no crash? yay! @@ -387,6 +388,7 @@ public class ManageApplicationsTest { appEntry.info = mock(ApplicationInfo.class); appList.add(appEntry); ReflectionHelpers.setField(adapter, "mEntries", appList); + ReflectionHelpers.setField(adapter, "mContext", mContext); adapter.onBindViewHolder(holder, 0); verify(holder).updateSwitch(any(), anyBoolean(), anyBoolean()); @@ -406,6 +408,7 @@ public class ManageApplicationsTest { appEntry.info = mock(ApplicationInfo.class); appList.add(appEntry); ReflectionHelpers.setField(adapter, "mEntries", appList); + ReflectionHelpers.setField(adapter, "mContext", mContext); adapter.onBindViewHolder(holder, 0); verify(holder, never()).updateSwitch(any(), anyBoolean(), anyBoolean());