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:
@@ -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,
|
||||
|
@@ -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);
|
||||
|
@@ -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());
|
||||
|
Reference in New Issue
Block a user