From f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61 Mon Sep 17 00:00:00 2001 From: Todd Volkert Date: Thu, 25 Jun 2015 15:15:15 -0700 Subject: Migrate package installer permissions fragments to preference support lib. In order to allow for TV-friendly layouts, this migrates the permissions fragments to the preference support lib, and modifies the necessary layouts and themes to make them work on TV. b/22043727 b/22045650 b/22044940 Change-Id: Ic862effe2c126da78c304983fd06e017c3ee4472 --- .../permission/model/PermissionApps.java | 4 +- .../permission/model/PermissionGroups.java | 2 +- .../permission/ui/AppPermissionsFragment.java | 51 +++----- .../permission/ui/ManagePermissionsFragment.java | 98 +++++++--------- .../permission/ui/PermissionAppsFragment.java | 35 ++---- .../permission/ui/PermissionsFrameFragment.java | 130 +++++++++++++++++++++ .../permission/ui/SettingsWithHeader.java | 15 ++- .../packageinstaller/permission/utils/Utils.java | 4 + 8 files changed, 208 insertions(+), 131 deletions(-) create mode 100644 src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java (limited to 'src') diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java index 417e3274..b8ba650d 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionApps.java +++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java @@ -22,7 +22,6 @@ import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionInfo; -import android.graphics.LightingColorFilter; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.UserHandle; @@ -265,8 +264,7 @@ public class PermissionApps { } else { mIcon = mContext.getDrawable(com.android.internal.R.drawable.ic_perm_device_info); } - LightingColorFilter filter = new LightingColorFilter(0, 0xffffffff); - mIcon.setColorFilter(filter); + mIcon = Utils.applyTint(mContext, mIcon, android.R.attr.colorControlNormal); } public static class PermissionApp implements Comparable { diff --git a/src/com/android/packageinstaller/permission/model/PermissionGroups.java b/src/com/android/packageinstaller/permission/model/PermissionGroups.java index 62477b88..8ed3ebb0 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionGroups.java +++ b/src/com/android/packageinstaller/permission/model/PermissionGroups.java @@ -158,7 +158,7 @@ public final class PermissionGroups implements LoaderCallbacks requestedPermissions = new ArraySet<>(); for (PackageInfo installedPackage : installedPackages) { if (installedPackage.requestedPermissions == null) { - break; + continue; } for (String requestedPermission : installedPackage.requestedPermissions) { requestedPermissions.add(requestedPermission); diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java index d88b9adc..39f4cbaf 100644 --- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java @@ -21,6 +21,7 @@ import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.FragmentTransaction; +import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; @@ -30,21 +31,19 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; import android.provider.Settings; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.Preference; +import android.support.v7.preference.Preference.OnPreferenceChangeListener; +import android.support.v7.preference.Preference.OnPreferenceClickListener; +import android.support.v7.preference.PreferenceScreen; import android.util.Log; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -114,21 +113,6 @@ public final class AppPermissionsFragment extends SettingsWithHeader return super.onOptionsItemSelected(item); } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container, - false); - ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container); - if (prefsContainer == null) { - prefsContainer = rootView; - } - prefsContainer.addView(super.onCreateView(inflater, prefsContainer, savedInstanceState)); - View emptyView = rootView.findViewById(R.id.no_permissions); - ((ListView) rootView.findViewById(android.R.id.list)).setEmptyView(emptyView); - return rootView; - } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -199,25 +183,19 @@ public final class AppPermissionsFragment extends SettingsWithHeader } private void bindPermissionsUi() { - final Activity activity = getActivity(); - - if (activity == null) { + Context context = getPreferenceManager().getContext(); + if (context == null) { return; } PreferenceScreen screen = getPreferenceScreen(); - if (screen == null) { - screen = getPreferenceManager().createPreferenceScreen(activity); - setPreferenceScreen(screen); - } else { - screen.removeAll(); - } + screen.removeAll(); if (mExtraScreen != null) { mExtraScreen.removeAll(); } - final Preference extraPerms = new Preference(activity); + final Preference extraPerms = new Preference(context); extraPerms.setIcon(R.drawable.ic_toc); extraPerms.setTitle(R.string.additional_permissions); @@ -227,10 +205,10 @@ public final class AppPermissionsFragment extends SettingsWithHeader continue; } - SwitchPreference preference = new SwitchPreference(activity); + SwitchPreference preference = new SwitchPreference(context); preference.setOnPreferenceChangeListener(this); preference.setKey(group.getName()); - Drawable icon = Utils.loadDrawable(activity.getPackageManager(), + Drawable icon = Utils.loadDrawable(context.getPackageManager(), group.getIconPkg(), group.getIconResId()); preference.setIcon(Utils.applyTint(getContext(), icon, android.R.attr.colorControlNormal)); @@ -243,7 +221,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader screen.addPreference(preference); } else { if (mExtraScreen == null) { - mExtraScreen = getPreferenceManager().createPreferenceScreen(activity); + mExtraScreen = getPreferenceManager().createPreferenceScreen(context); } mExtraScreen.addPreference(preference); } @@ -375,8 +353,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader public static class AdditionalPermissionsFragment extends SettingsWithHeader { @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { AppPermissionsFragment target = (AppPermissionsFragment) getTargetFragment(); setPreferenceScreen(target.mExtraScreen); // Copy the header. diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java index 00d30d19..ab6144be 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java @@ -20,23 +20,21 @@ import android.app.ActionBar; import android.app.Activity; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceFragment; -import android.preference.PreferenceScreen; +import android.support.v14.preference.PreferenceFragment; +import android.support.v7.preference.Preference; +import android.support.v7.preference.Preference.OnPreferenceClickListener; +import android.support.v7.preference.PreferenceScreen; import android.util.ArraySet; import android.util.Log; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.ListView; import android.widget.TextView; import com.android.packageinstaller.R; @@ -48,7 +46,7 @@ import com.android.packageinstaller.permission.utils.Utils; import java.util.List; -public final class ManagePermissionsFragment extends PreferenceFragment +public final class ManagePermissionsFragment extends PermissionsFrameFragment implements PermissionGroups.PermissionsGroupsChangeCallback, OnPreferenceClickListener { private static final String LOG_TAG = "ManagePermissionsFragment"; @@ -145,61 +143,47 @@ public final class ManagePermissionsFragment extends PreferenceFragment updatePermissionsUi(); } - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container, - false); - ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container); - if (prefsContainer == null) { - prefsContainer = rootView; - } - prefsContainer.addView(super.onCreateView(inflater, prefsContainer, savedInstanceState)); - View emptyView = rootView.findViewById(R.id.no_permissions); - ((ListView) rootView.findViewById(android.R.id.list)).setEmptyView(emptyView); - return rootView; - } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - updatePermissionsUi(); - } - private void updatePermissionsUi() { Activity activity = getActivity(); - if (activity == null) { return; } - final ViewGroup rootView = (ViewGroup) getView(); - if (rootView != null) { - final ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); - if (iconView != null) { - // Set the icon as the background instead of the image because ImageView - // doesn't properly scale vector drawables beyond their intrinsic size - Drawable icon = activity.getDrawable(R.drawable.ic_lock); - icon.setTint(activity.getColor(R.color.off_white)); - iconView.setBackground(icon); - } - final TextView titleView = (TextView) rootView.findViewById(R.id.lb_title); - if (titleView != null) { - titleView.setText(R.string.app_permissions); - } - final TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb); - if (breadcrumbView != null) { - breadcrumbView.setText(R.string.app_permissions_breadcrumb); - } + View rootView = getView(); + if (rootView == null) { + return; + } + + ImageView iconView = (ImageView) rootView.findViewById(R.id.lb_icon); + if (iconView != null) { + // Set the icon as the background instead of the image because ImageView + // doesn't properly scale vector drawables beyond their intrinsic size + Drawable icon = activity.getDrawable(R.drawable.ic_lock); + icon.setTint(activity.getColor(R.color.off_white)); + iconView.setBackground(icon); + } + TextView titleView = (TextView) rootView.findViewById(R.id.lb_title); + if (titleView != null) { + titleView.setText(R.string.app_permissions); + } + TextView breadcrumbView = (TextView) rootView.findViewById(R.id.lb_breadcrumb); + if (breadcrumbView != null) { + breadcrumbView.setText(R.string.app_permissions_breadcrumb); + } + } + + private void updatePermissionsUi() { + Context context = getPreferenceManager().getContext(); + if (context == null) { + return; } List groups = mPermissions.getGroups(); PreferenceScreen screen = getPreferenceScreen(); - if (screen == null) { - screen = getPreferenceManager().createPreferenceScreen(activity); - setPreferenceScreen(screen); - } // Use this to speed up getting the info for all of the PermissionApps below. // Create a new one for each refresh to make sure it has fresh data. @@ -216,10 +200,10 @@ public final class ManagePermissionsFragment extends PreferenceFragment preference = mExtraScreen.findPreference(group.getName()); } if (preference == null) { - preference = new Preference(activity, null); + preference = new Preference(context); preference.setOnPreferenceClickListener(this); preference.setKey(group.getName()); - preference.setIcon(Utils.applyTint(activity, group.getIcon(), + preference.setIcon(Utils.applyTint(context, group.getIcon(), android.R.attr.colorControlNormal)); preference.setTitle(group.getLabel()); // Set blank summary so that no resizing/jumping happens when the summary is loaded. @@ -229,7 +213,7 @@ public final class ManagePermissionsFragment extends PreferenceFragment screen.addPreference(preference); } else { if (mExtraScreen == null) { - mExtraScreen = getPreferenceManager().createPreferenceScreen(activity); + mExtraScreen = getPreferenceManager().createPreferenceScreen(context); } mExtraScreen.addPreference(preference); } @@ -252,9 +236,10 @@ public final class ManagePermissionsFragment extends PreferenceFragment if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0 && screen.findPreference(EXTRA_PREFS_KEY) == null) { - Preference extraScreenPreference = new Preference(activity); + Preference extraScreenPreference = new Preference(context); extraScreenPreference.setKey(EXTRA_PREFS_KEY); - extraScreenPreference.setIcon(R.drawable.ic_toc); + extraScreenPreference.setIcon(Utils.applyTint(context, R.drawable.ic_toc, + android.R.attr.colorControlNormal)); extraScreenPreference.setTitle(R.string.additional_permissions); extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override @@ -279,7 +264,6 @@ public final class ManagePermissionsFragment extends PreferenceFragment public void onCreate(Bundle icicle) { super.onCreate(icicle); getActivity().setTitle(R.string.additional_permissions); - setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen); setHasOptionsMenu(true); } @@ -299,5 +283,9 @@ public final class ManagePermissionsFragment extends PreferenceFragment return super.onOptionsItemSelected(item); } + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen); + } } } diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index ae7560e8..f749089b 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -24,21 +24,18 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceFragment; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; +import android.support.v14.preference.SwitchPreference; import android.support.v4.util.ArrayMap; +import android.support.v7.preference.Preference; +import android.support.v7.preference.Preference.OnPreferenceChangeListener; +import android.support.v7.preference.PreferenceScreen; import android.util.ArraySet; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.ListView; import android.widget.TextView; import com.android.packageinstaller.R; @@ -53,7 +50,7 @@ import com.android.packageinstaller.permission.utils.Utils; import java.util.ArrayList; import java.util.List; -public final class PermissionAppsFragment extends PreferenceFragment implements Callback, +public final class PermissionAppsFragment extends PermissionsFrameFragment implements Callback, OnPreferenceChangeListener { private static final int MENU_SHOW_SYSTEM = Menu.FIRST; @@ -127,19 +124,8 @@ public final class PermissionAppsFragment extends PreferenceFragment implements } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container, - false); - ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container); - if (prefsContainer == null) { - prefsContainer = rootView; - } - prefsContainer.addView(super.onCreateView(inflater, prefsContainer, savedInstanceState)); - TextView emptyView = (TextView) rootView.findViewById(R.id.no_permissions); - emptyView.setText(R.string.no_apps); - ((ListView) rootView.findViewById(android.R.id.list)).setEmptyView(emptyView); - return rootView; + protected void onSetEmptyText(TextView textView) { + textView.setText(R.string.no_apps); } @Override @@ -177,17 +163,13 @@ public final class PermissionAppsFragment extends PreferenceFragment implements @Override public void onPermissionsLoaded(PermissionApps permissionApps) { - Context context = getActivity(); + Context context = getPreferenceManager().getContext(); if (context == null) { return; } PreferenceScreen preferences = getPreferenceScreen(); - if (preferences == null) { - preferences = getPreferenceManager().createPreferenceScreen(getActivity()); - setPreferenceScreen(preferences); - } preferences.removeAll(); for (PermissionApp app : permissionApps.getApps()) { if (!Utils.shouldShowPermission(app)) { @@ -203,7 +185,6 @@ public final class PermissionAppsFragment extends PreferenceFragment implements } if (pref == null) { pref = new SwitchPreference(context); - pref.setLayoutResource(R.layout.preference_app); pref.setOnPreferenceChangeListener(this); pref.setKey(app.getKey()); pref.setIcon(app.getIcon()); diff --git a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java new file mode 100644 index 00000000..2abdbd2a --- /dev/null +++ b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java @@ -0,0 +1,130 @@ +package com.android.packageinstaller.permission.ui; + +import android.annotation.Nullable; +import android.content.res.Configuration; +import android.os.Bundle; +import android.support.v14.preference.PreferenceFragment; +import android.support.v17.leanback.widget.VerticalGridView; +import android.support.v7.preference.PreferenceScreen; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.AdapterDataObserver; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.packageinstaller.R; + +public abstract class PermissionsFrameFragment extends PreferenceFragment { + + private static final float WINDOW_ALIGNMENT_OFFSET_PERCENT = 50; + + private ViewGroup mPreferencesContainer; + + // TV-specific instance variables + @Nullable private VerticalGridView mGridView; + + /** + * Returns the view group that holds the preferences objects. This will + * only be set after {@link #onCreateView} has been called. + */ + protected final ViewGroup getPreferencesContainer() { + return mPreferencesContainer; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container, + false); + ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container); + if (prefsContainer == null) { + prefsContainer = rootView; + } + mPreferencesContainer = (ViewGroup) super.onCreateView( + inflater, prefsContainer, savedInstanceState); + prefsContainer.addView(mPreferencesContainer); + return rootView; + } + + @Override + public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) { + PreferenceScreen preferences = getPreferenceScreen(); + if (preferences == null) { + preferences = getPreferenceManager().createPreferenceScreen(getActivity()); + setPreferenceScreen(preferences); + } + } + + @Override + public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, + Bundle savedInstanceState) { + int uiMode = getResources().getConfiguration().uiMode; + if ((uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION) { + mGridView = (VerticalGridView) inflater.inflate( + R.layout.leanback_preferences_list, parent, false); + mGridView.setWindowAlignmentOffset(0); + mGridView.setWindowAlignmentOffsetPercent(WINDOW_ALIGNMENT_OFFSET_PERCENT); + mGridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE); + mGridView.setFocusScrollStrategy(VerticalGridView.FOCUS_SCROLL_ALIGNED); + return mGridView; + } else { + return super.onCreateRecyclerView(inflater, parent, savedInstanceState); + } + } + + @Override + protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) { + final RecyclerView.Adapter adapter = super.onCreateAdapter(preferenceScreen); + + if (adapter != null) { + final TextView emptyView = (TextView) getView().findViewById(R.id.no_permissions); + onSetEmptyText(emptyView); + final RecyclerView recyclerView = getListView(); + adapter.registerAdapterDataObserver(new AdapterDataObserver() { + @Override + public void onChanged() { + checkEmpty(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + checkEmpty(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + checkEmpty(); + } + + private void checkEmpty() { + boolean isEmpty = adapter.getItemCount() == 0; + emptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE); + recyclerView.setVisibility(isEmpty ? View.GONE : View.VISIBLE); + if (!isEmpty && mGridView != null) { + mGridView.requestFocus(); + } + } + }); + + boolean isEmpty = adapter.getItemCount() == 0; + emptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE); + recyclerView.setVisibility(isEmpty ? View.GONE : View.VISIBLE); + if (!isEmpty && mGridView != null) { + mGridView.requestFocus(); + } + } + + return adapter; + } + + /** + * Hook for subclasses to change the default text of the empty view. + * Base implementation leaves the default empty view text. + * + * @param textView the empty text view + */ + protected void onSetEmptyText(TextView textView) { + } +} + diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java index 74146fe6..4135af97 100644 --- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java +++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java @@ -20,18 +20,17 @@ import android.content.Intent; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.PreferenceFragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import com.android.packageinstaller.R; -public abstract class SettingsWithHeader extends PreferenceFragment implements OnClickListener { +public abstract class SettingsWithHeader extends PermissionsFrameFragment + implements OnClickListener { private View mHeader; protected Intent mInfoIntent; @@ -41,16 +40,16 @@ public abstract class SettingsWithHeader extends PreferenceFragment implements O @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - LinearLayout contentParent = - (LinearLayout) super.onCreateView(inflater, container, savedInstanceState); + ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); + int uiMode = getResources().getConfiguration().uiMode; if ((uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_TELEVISION) { - mHeader = inflater.inflate(R.layout.header, contentParent, false); - contentParent.addView(mHeader, 0); + mHeader = inflater.inflate(R.layout.header, root, false); + getPreferencesContainer().addView(mHeader, 0); updateHeader(); } - return contentParent; + return root; } public void setHeader(Drawable icon, CharSequence label, Intent infoIntent) { diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java index 144ff774..940e3597 100644 --- a/src/com/android/packageinstaller/permission/utils/Utils.java +++ b/src/com/android/packageinstaller/permission/utils/Utils.java @@ -123,6 +123,10 @@ public class Utils { return icon; } + public static Drawable applyTint(Context context, int iconResId, int attr) { + return applyTint(context, context.getDrawable(iconResId), attr); + } + public static ArraySet getLauncherPackages(Context context) { ArraySet launcherPkgs = new ArraySet<>(); for (ResolveInfo info : -- cgit v1.2.3