Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbecbe6f authored by Tsung-Mao Fang's avatar Tsung-Mao Fang
Browse files

Use system-api lib to get badged, shadowed icons(2/n)

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
Bug: 33646131
Change-Id: Ib7eae56e19cd86667bd63b6061000c6a92deaf3b
parent 203b9e97
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -21,11 +21,11 @@ import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.IconDrawableFactory;

import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.widget.EntityHeaderController;
@@ -94,8 +94,7 @@ public class AppHeaderPreferenceController extends BasePreferenceController impl
        EntityHeaderController
                .newInstance(activity, mParent, mHeaderPreference.findViewById(R.id.entity_header))
                .setRecyclerView(mParent.getListView(), mLifecycle)
                .setIcon(IconDrawableFactory.newInstance(activity).getBadgedIcon(
                        mPackageInfo.applicationInfo))
                .setIcon(Utils.getBadgedIcon(mParent.getContext(), mPackageInfo.applicationInfo))
                .setLabel(mPackageInfo.applicationInfo.loadLabel(packageManager))
                .setSummary(mPackageInfo)
                .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
+2 −3
Original line number Diff line number Diff line
@@ -20,11 +20,11 @@ import static com.android.settings.widget.EntityHeaderController.ActionType;

import android.app.Activity;
import android.os.Bundle;
import android.util.IconDrawableFactory;
import android.util.Log;

import androidx.preference.Preference;

import com.android.settings.Utils;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;

@@ -47,8 +47,7 @@ public abstract class AppInfoWithHeader extends AppInfoBase {
        final Preference pref = EntityHeaderController
                .newInstance(activity, this, null /* header */)
                .setRecyclerView(getListView(), getSettingsLifecycle())
                .setIcon(IconDrawableFactory.newInstance(getContext())
                        .getBadgedIcon(mPackageInfo.applicationInfo))
                .setIcon(Utils.getBadgedIcon(getContext(), mPackageInfo.applicationInfo))
                .setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
                .setSummary(mPackageInfo)
                .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
+1 −2
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -147,7 +146,7 @@ public class EntityHeaderController {
     * accessibility purposes.
     */
    public EntityHeaderController setIcon(ApplicationsState.AppEntry appEntry) {
        mIcon = IconDrawableFactory.newInstance(mAppContext).getBadgedIcon(appEntry.info);
        mIcon = Utils.getBadgedIcon(mAppContext, appEntry.info);
        return this;
    }

+2 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import androidx.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
@@ -58,7 +59,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowEntityHeaderController.class)
@Config(shadows = {ShadowEntityHeaderController.class, ShadowUtils.class})
public class AppInfoWithHeaderTest {

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.LayoutPreference;
@@ -54,8 +55,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowUtils.class)
public class AppHeaderViewPreferenceControllerTest {

    @Mock
Loading