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
This commit is contained in:
Tsung-Mao Fang
2020-02-06 13:46:05 +08:00
parent bc5e1646d5
commit 323347afcc
3 changed files with 6 additions and 5 deletions

View File

@@ -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,

View File

@@ -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);

View File

@@ -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());