Loading src/com/android/settings/applications/managedomainurls/DomainAppPreference.java +29 −7 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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)); } Loading @@ -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); } } src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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 { Loading src/com/android/settings/applications/managedomainurls/ManageDomainUrls.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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(); } } tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java +1 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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); } Loading Loading
src/com/android/settings/applications/managedomainurls/DomainAppPreference.java +29 −7 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -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)); } Loading @@ -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); } }
src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java +6 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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 { Loading
src/com/android/settings/applications/managedomainurls/ManageDomainUrls.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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(); } }
tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java +1 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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( Loading @@ -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); } Loading