Loading src/com/android/settings/applications/managedomainurls/DomainAppPreference.java +7 −23 Original line number Diff line number Diff line Loading @@ -20,52 +20,35 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.UserHandle; import android.util.ArraySet; import android.util.IconDrawableFactory; import android.view.View; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.widget.AppPreference; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; @VisibleForTesting public class DomainAppPreference extends AppPreference { private final AppEntry mEntry; private final PackageManager mPm; private final ApplicationsState mApplicationsState; private final IconDrawableFactory mIconDrawableFactory; public DomainAppPreference(final Context context, ApplicationsState applicationsState, public DomainAppPreference(final Context context, IconDrawableFactory iconFactory, AppEntry entry) { super(context); mApplicationsState = applicationsState; mIconDrawableFactory = iconFactory; mPm = context.getPackageManager(); mEntry = entry; mEntry.ensureLabel(getContext()); setState(); if (mEntry.icon != null) { setIcon(mEntry.icon); } } @Override public void onBindViewHolder(PreferenceViewHolder holder) { if (mEntry.icon == null) { holder.itemView.post(new Runnable() { @Override public void run() { // Ensure we have an icon before binding. if (mApplicationsState != null) { mApplicationsState.ensureIcon(mEntry); } // This might trigger us to bind again, but it gives an easy way to only // load the icon once its needed, so its probably worth it. setIcon(mEntry.icon); } }); } super.onBindViewHolder(holder); holder.itemView.findViewById(R.id.appendix).setVisibility(View.GONE); } Loading @@ -81,6 +64,7 @@ public class DomainAppPreference extends AppPreference { private void setState() { setTitle(mEntry.label); setIcon(mIconDrawableFactory.getBadgedIcon(mEntry.info)); setSummary(getDomainsSummary(mEntry.info.packageName)); } Loading src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java +6 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.Application; import android.content.Context; import android.text.TextUtils; import android.util.ArrayMap; import android.util.IconDrawableFactory; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; Loading Loading @@ -154,12 +155,14 @@ public class DomainAppPreferenceController extends BasePreferenceController impl private void rebuildAppList(PreferenceGroup group, ArrayList<AppEntry> apps) { 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++) { AppEntry entry = apps.get(i); String key = entry.info.packageName + "|" + entry.info.uid; 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(group.getContext(), mApplicationsState, entry); preference = new DomainAppPreference(context, iconDrawableFactory, entry); preference.setKey(key); group.addPreference(preference); } else { Loading tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java +21 −13 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import android.graphics.drawable.Drawable; import android.util.IconDrawableFactory; import android.view.View; import android.widget.ProgressBar; Loading @@ -34,40 +34,39 @@ import com.android.settingslib.applications.ApplicationsState; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.UUID; import androidx.preference.PreferenceViewHolder; @RunWith(SettingsRobolectricTestRunner.class) public class DomainAppPreferenceControllerTest { @Mock private ApplicationsState.AppEntry mAppEntry; private Context mContext; private IconDrawableFactory mIconDrawableFactory; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mIconDrawableFactory = IconDrawableFactory.newInstance(mContext); mAppEntry = new ApplicationsState.AppEntry( mContext, createApplicationInfo(mContext.getPackageName()), 0); } @Test public void domainAppPreferenceShouldUseAppPreferenceLayout() { mAppEntry.info = new ApplicationInfo(); mAppEntry.info.packageName = "com.android.settings.test"; final DomainAppPreference pref = new DomainAppPreference(mContext, null, mAppEntry); public void getLayoutResource_shouldUseAppPreferenceLayout() { final DomainAppPreference pref = new DomainAppPreference( mContext, mIconDrawableFactory, mAppEntry); assertThat(pref.getLayoutResource()).isEqualTo(R.layout.preference_app); } @Test public void onBindViewHolder_shouldSetAppendixViewToGone() { mAppEntry.info = new ApplicationInfo(); mAppEntry.info.packageName = "com.android.settings.test"; mAppEntry.icon = mock(Drawable.class); final DomainAppPreference pref = new DomainAppPreference(mContext, null, mAppEntry); final DomainAppPreference pref = new DomainAppPreference( mContext, mIconDrawableFactory, mAppEntry); final View holderView = mock(View.class); final View appendixView = mock(View.class); when(holderView.findViewById(R.id.summary_container)).thenReturn(mock(View.class)); Loading @@ -78,4 +77,13 @@ public class DomainAppPreferenceControllerTest { verify(appendixView).setVisibility(View.GONE); } private ApplicationInfo createApplicationInfo(String packageName) { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.sourceDir = "foo"; appInfo.flags |= ApplicationInfo.FLAG_INSTALLED; appInfo.storageUuid = UUID.randomUUID(); appInfo.packageName = packageName; return appInfo; } } Loading
src/com/android/settings/applications/managedomainurls/DomainAppPreference.java +7 −23 Original line number Diff line number Diff line Loading @@ -20,52 +20,35 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.UserHandle; import android.util.ArraySet; import android.util.IconDrawableFactory; import android.view.View; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.widget.AppPreference; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceViewHolder; @VisibleForTesting public class DomainAppPreference extends AppPreference { private final AppEntry mEntry; private final PackageManager mPm; private final ApplicationsState mApplicationsState; private final IconDrawableFactory mIconDrawableFactory; public DomainAppPreference(final Context context, ApplicationsState applicationsState, public DomainAppPreference(final Context context, IconDrawableFactory iconFactory, AppEntry entry) { super(context); mApplicationsState = applicationsState; mIconDrawableFactory = iconFactory; mPm = context.getPackageManager(); mEntry = entry; mEntry.ensureLabel(getContext()); setState(); if (mEntry.icon != null) { setIcon(mEntry.icon); } } @Override public void onBindViewHolder(PreferenceViewHolder holder) { if (mEntry.icon == null) { holder.itemView.post(new Runnable() { @Override public void run() { // Ensure we have an icon before binding. if (mApplicationsState != null) { mApplicationsState.ensureIcon(mEntry); } // This might trigger us to bind again, but it gives an easy way to only // load the icon once its needed, so its probably worth it. setIcon(mEntry.icon); } }); } super.onBindViewHolder(holder); holder.itemView.findViewById(R.id.appendix).setVisibility(View.GONE); } Loading @@ -81,6 +64,7 @@ public class DomainAppPreference extends AppPreference { private void setState() { setTitle(mEntry.label); setIcon(mIconDrawableFactory.getBadgedIcon(mEntry.info)); setSummary(getDomainsSummary(mEntry.info.packageName)); } Loading
src/com/android/settings/applications/managedomainurls/DomainAppPreferenceController.java +6 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.Application; import android.content.Context; import android.text.TextUtils; import android.util.ArrayMap; import android.util.IconDrawableFactory; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; Loading Loading @@ -154,12 +155,14 @@ public class DomainAppPreferenceController extends BasePreferenceController impl private void rebuildAppList(PreferenceGroup group, ArrayList<AppEntry> apps) { 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++) { AppEntry entry = apps.get(i); String key = entry.info.packageName + "|" + entry.info.uid; 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(group.getContext(), mApplicationsState, entry); preference = new DomainAppPreference(context, iconDrawableFactory, entry); preference.setKey(key); group.addPreference(preference); } else { Loading
tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java +21 −13 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import android.graphics.drawable.Drawable; import android.util.IconDrawableFactory; import android.view.View; import android.widget.ProgressBar; Loading @@ -34,40 +34,39 @@ import com.android.settingslib.applications.ApplicationsState; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import java.util.UUID; import androidx.preference.PreferenceViewHolder; @RunWith(SettingsRobolectricTestRunner.class) public class DomainAppPreferenceControllerTest { @Mock private ApplicationsState.AppEntry mAppEntry; private Context mContext; private IconDrawableFactory mIconDrawableFactory; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mIconDrawableFactory = IconDrawableFactory.newInstance(mContext); mAppEntry = new ApplicationsState.AppEntry( mContext, createApplicationInfo(mContext.getPackageName()), 0); } @Test public void domainAppPreferenceShouldUseAppPreferenceLayout() { mAppEntry.info = new ApplicationInfo(); mAppEntry.info.packageName = "com.android.settings.test"; final DomainAppPreference pref = new DomainAppPreference(mContext, null, mAppEntry); public void getLayoutResource_shouldUseAppPreferenceLayout() { final DomainAppPreference pref = new DomainAppPreference( mContext, mIconDrawableFactory, mAppEntry); assertThat(pref.getLayoutResource()).isEqualTo(R.layout.preference_app); } @Test public void onBindViewHolder_shouldSetAppendixViewToGone() { mAppEntry.info = new ApplicationInfo(); mAppEntry.info.packageName = "com.android.settings.test"; mAppEntry.icon = mock(Drawable.class); final DomainAppPreference pref = new DomainAppPreference(mContext, null, mAppEntry); final DomainAppPreference pref = new DomainAppPreference( mContext, mIconDrawableFactory, mAppEntry); final View holderView = mock(View.class); final View appendixView = mock(View.class); when(holderView.findViewById(R.id.summary_container)).thenReturn(mock(View.class)); Loading @@ -78,4 +77,13 @@ public class DomainAppPreferenceControllerTest { verify(appendixView).setVisibility(View.GONE); } private ApplicationInfo createApplicationInfo(String packageName) { ApplicationInfo appInfo = new ApplicationInfo(); appInfo.sourceDir = "foo"; appInfo.flags |= ApplicationInfo.FLAG_INSTALLED; appInfo.storageUuid = UUID.randomUUID(); appInfo.packageName = packageName; return appInfo; } }