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

Commit e99683f0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix the flashing list on Opening link page" into tm-dev

parents 337cfe6f 93f945d5
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -19,27 +19,30 @@ package com.android.settings.applications.managedomainurls;
import android.content.Context;
import android.content.pm.verify.domain.DomainVerificationManager;
import android.content.pm.verify.domain.DomainVerificationUserState;
import android.util.IconDrawableFactory;
import android.graphics.drawable.Drawable;

import androidx.preference.PreferenceViewHolder;

import com.android.settings.R;
import com.android.settings.applications.intentpicker.IntentPickerUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.AppPreference;

public class DomainAppPreference extends AppPreference {

    private Drawable mCacheIcon;

    private final AppEntry mEntry;
    private final DomainVerificationManager mDomainVerificationManager;
    private final IconDrawableFactory mIconDrawableFactory;

    public DomainAppPreference(final Context context, IconDrawableFactory iconFactory,
            AppEntry entry) {
    public DomainAppPreference(final Context context, AppEntry entry) {
        super(context);
        mIconDrawableFactory = iconFactory;
        mDomainVerificationManager = context.getSystemService(DomainVerificationManager.class);
        mEntry = entry;
        mEntry.ensureLabel(getContext());

        mCacheIcon = AppUtils.getIconFromCache(mEntry);
        setState();
    }

@@ -54,7 +57,12 @@ public class DomainAppPreference extends AppPreference {

    private void setState() {
        setTitle(mEntry.label);
        setIcon(mIconDrawableFactory.getBadgedIcon(mEntry.info));

        if (mCacheIcon != null) {
            setIcon(mCacheIcon);
        } else {
            setIcon(R.drawable.empty_icon);
        }
        setSummary(getDomainsSummary(mEntry.info.packageName));
    }

@@ -69,4 +77,18 @@ public class DomainAppPreference extends AppPreference {
                        packageName);
        return userState == null ? false : userState.isLinkHandlingAllowed();
    }

    @Override
    public void onBindViewHolder(PreferenceViewHolder view) {
        if (mCacheIcon == null) {
            ThreadUtils.postOnBackgroundThread(() -> {
                final Drawable icon = AppUtils.getIcon(getContext(), mEntry);
                ThreadUtils.postOnMainThread(() -> {
                    setIcon(icon);
                    mCacheIcon = icon;
                });
            });
        }
        super.onBindViewHolder(view);
    }
}
+6 −3
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.app.Application;
import android.content.Context;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.IconDrawableFactory;

import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
@@ -30,6 +29,7 @@ import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.intentpicker.AppLaunchSettings;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;

@@ -98,6 +98,10 @@ public class DomainAppPreferenceController extends BasePreferenceController impl
        if (mContext == null) {
            return;
        }
        // Preload top visible icons of app list.
        AppUtils.preloadTopIcons(mContext, apps,
                mContext.getResources().getInteger(R.integer.config_num_visible_app_icons));

        rebuildAppList(mDomainAppList, apps);
    }

@@ -157,13 +161,12 @@ public class DomainAppPreferenceController extends BasePreferenceController impl
        cacheAllPrefs(group);
        final int size = apps.size();
        final Context context = group.getContext();
        final IconDrawableFactory iconDrawableFactory = IconDrawableFactory.newInstance(context);
        for (int i = 0; i < size; i++) {
            final AppEntry entry = apps.get(i);
            final String key = entry.info.packageName + "|" + entry.info.uid;
            DomainAppPreference preference = (DomainAppPreference) getCachedPreference(key);
            if (preference == null) {
                preference = new DomainAppPreference(context, iconDrawableFactory, entry);
                preference = new DomainAppPreference(context, entry);
                preference.setKey(key);
                group.addPreference(preference);
            } else {
+7 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.Context;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.applications.AppIconCacheManager;
import com.android.settingslib.search.SearchIndexable;

/**
@@ -58,4 +59,10 @@ public class ManageDomainUrls extends DashboardFragment {

    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider(R.xml.manage_domain_url_settings);

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        AppIconCacheManager.getInstance().release();
    }
}
+1 −7
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.verify.domain.DomainVerificationManager;
import android.content.pm.verify.domain.DomainVerificationUserState;
import android.util.IconDrawableFactory;

import com.android.settings.R;
import com.android.settingslib.applications.ApplicationsState;
@@ -49,18 +48,14 @@ public class DomainAppPreferenceControllerTest {

    private ApplicationsState.AppEntry mAppEntry;
    private Context mContext;
    private IconDrawableFactory mIconDrawableFactory;

    @Mock
    private DomainVerificationManager mDomainVerificationManager;
    @Mock
    private DomainVerificationUserState mDomainVerificationUserState;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
        mAppEntry = new ApplicationsState.AppEntry(
                mContext, createApplicationInfo(mContext.getPackageName()), 0);
        when(mContext.getSystemService(DomainVerificationManager.class)).thenReturn(
@@ -75,8 +70,7 @@ public class DomainAppPreferenceControllerTest {
        doReturn(domainVerificationUserState).when(
                mDomainVerificationManager).getDomainVerificationUserState(anyString());
        doReturn(true).when(domainVerificationUserState).isLinkHandlingAllowed();
        final DomainAppPreference pref = new DomainAppPreference(
                mContext, mIconDrawableFactory, mAppEntry);
        final DomainAppPreference pref = new DomainAppPreference(mContext, mAppEntry);

        assertThat(pref.getLayoutResource()).isEqualTo(R.layout.preference_app);
    }