Loading res/layout/app_details.xml +9 −3 Original line number Diff line number Diff line Loading @@ -26,17 +26,23 @@ android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:paddingTop="24dp" android:paddingBottom="24dp" > android:paddingBottom="24dp" android:clipChildren="false" android:clipToPadding="false"> <!-- App snippet with buttons --> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="8dp"> android:paddingStart="8dp" android:clipChildren="false" android:clipToPadding="false"> <FrameLayout android:id="@+id/app_icon_frame" android:layout_width="80dp" android:layout_height="80dp"> android:layout_height="80dp" android:clipChildren="false" android:clipToPadding="false"> <ImageView android:id="@+id/app_detail_icon" android:layout_width="match_parent" Loading res/values/dimens.xml +2 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,8 @@ <dimen name="mdm_app_name_padding_left">16dp</dimen> <dimen name="mdm_app_icon_width_height">56dp</dimen> <!-- Launcher Icons --> <dimen name="launcher_icon_elevation">6dp</dimen> <dimen name="shortcut_size_maskable">120dp</dimen> <dimen name="shortcut_size">40dp</dimen> <dimen name="shortcut_icon_size">16dp</dimen> Loading src/com/android/settings/applications/AppHeaderController.java +23 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.Outline; import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.support.annotation.IntDef; Loading @@ -31,6 +33,7 @@ import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; Loading Loading @@ -61,12 +64,23 @@ public class AppHeaderController { public static final String PREF_KEY_APP_HEADER = "pref_app_header"; public static final ViewOutlineProvider OUTLINE_PROVIDER = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { Drawable background = ((ImageView)view).getDrawable(); if (background != null) { background.getOutline(outline); } } }; private static final String TAG = "AppDetailFeature"; private final Context mContext; private final Fragment mFragment; private final int mMetricsCategory; private final View mAppHeader; private final int mIconElevation; private Drawable mIcon; private CharSequence mLabel; Loading @@ -93,6 +107,8 @@ public class AppHeaderController { mAppHeader = LayoutInflater.from(fragment.getContext()) .inflate(R.layout.app_details, null /* root */); } mIconElevation = mContext.getResources() .getDimensionPixelSize(R.dimen.launcher_icon_elevation); } public AppHeaderController setIcon(Drawable icon) { Loading Loading @@ -212,6 +228,13 @@ public class AppHeaderController { ImageView iconView = (ImageView) mAppHeader.findViewById(R.id.app_detail_icon); if (iconView != null) { iconView.setImageDrawable(mIcon); if (mIcon instanceof AdaptiveIconDrawable) { iconView.setElevation(mIconElevation); iconView.setOutlineProvider(OUTLINE_PROVIDER); } else { iconView.setElevation(0); iconView.setOutlineProvider(null); } ImageView badgeView = mAppHeader.findViewById(R.id.app_icon_instant_apps_badge); if (badgeView != null) { badgeView.setVisibility(mIsInstantApp ? View.VISIBLE : View.GONE); Loading src/com/android/settings/applications/ManageApplications.java +8 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.graphics.drawable.AdaptiveIconDrawable; import android.icu.text.AlphabeticIndex; import android.os.Bundle; import android.os.Environment; Loading @@ -34,6 +35,7 @@ import android.preference.PreferenceFrameLayout; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.ArraySet; import android.util.LauncherIcons; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; Loading Loading @@ -90,7 +92,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.Set; Loading Loading @@ -812,6 +813,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment private final AppStateBaseBridge mExtraInfoBridge; private final Handler mBgHandler; private final Handler mFgHandler; private final LauncherIcons mLauncherIcons; private int mFilterMode; private ArrayList<ApplicationsState.AppEntry> mBaseEntries; private ArrayList<ApplicationsState.AppEntry> mEntries; Loading Loading @@ -866,6 +869,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment mContext = manageApplications.getActivity(); mPm = mContext.getPackageManager(); mFilterMode = filterMode; mLauncherIcons = new LauncherIcons(mContext); if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) { mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this, manageApplications.mNotifBackend); Loading Loading @@ -1300,6 +1304,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment } mState.ensureIcon(entry); if (entry.icon != null) { if (entry.icon instanceof AdaptiveIconDrawable) { entry.icon = mLauncherIcons.wrapIconDrawableWithShadow(entry.icon); } holder.appIcon.setImageDrawable(entry.icon); } updateSummary(holder); Loading tests/robotests/src/android/util/LauncherIcons.java 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; import android.content.Context; import android.graphics.drawable.Drawable; /** * This class is only needed to get around RoboElectric issue. */ public final class LauncherIcons { public LauncherIcons(Context context) { } public Drawable wrapIconDrawableWithShadow(Drawable drawable) { return drawable; } } Loading
res/layout/app_details.xml +9 −3 Original line number Diff line number Diff line Loading @@ -26,17 +26,23 @@ android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:paddingTop="24dp" android:paddingBottom="24dp" > android:paddingBottom="24dp" android:clipChildren="false" android:clipToPadding="false"> <!-- App snippet with buttons --> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="8dp"> android:paddingStart="8dp" android:clipChildren="false" android:clipToPadding="false"> <FrameLayout android:id="@+id/app_icon_frame" android:layout_width="80dp" android:layout_height="80dp"> android:layout_height="80dp" android:clipChildren="false" android:clipToPadding="false"> <ImageView android:id="@+id/app_detail_icon" android:layout_width="match_parent" Loading
res/values/dimens.xml +2 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,8 @@ <dimen name="mdm_app_name_padding_left">16dp</dimen> <dimen name="mdm_app_icon_width_height">56dp</dimen> <!-- Launcher Icons --> <dimen name="launcher_icon_elevation">6dp</dimen> <dimen name="shortcut_size_maskable">120dp</dimen> <dimen name="shortcut_size">40dp</dimen> <dimen name="shortcut_icon_size">16dp</dimen> Loading
src/com/android/settings/applications/AppHeaderController.java +23 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.Outline; import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.support.annotation.IntDef; Loading @@ -31,6 +33,7 @@ import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; Loading Loading @@ -61,12 +64,23 @@ public class AppHeaderController { public static final String PREF_KEY_APP_HEADER = "pref_app_header"; public static final ViewOutlineProvider OUTLINE_PROVIDER = new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { Drawable background = ((ImageView)view).getDrawable(); if (background != null) { background.getOutline(outline); } } }; private static final String TAG = "AppDetailFeature"; private final Context mContext; private final Fragment mFragment; private final int mMetricsCategory; private final View mAppHeader; private final int mIconElevation; private Drawable mIcon; private CharSequence mLabel; Loading @@ -93,6 +107,8 @@ public class AppHeaderController { mAppHeader = LayoutInflater.from(fragment.getContext()) .inflate(R.layout.app_details, null /* root */); } mIconElevation = mContext.getResources() .getDimensionPixelSize(R.dimen.launcher_icon_elevation); } public AppHeaderController setIcon(Drawable icon) { Loading Loading @@ -212,6 +228,13 @@ public class AppHeaderController { ImageView iconView = (ImageView) mAppHeader.findViewById(R.id.app_detail_icon); if (iconView != null) { iconView.setImageDrawable(mIcon); if (mIcon instanceof AdaptiveIconDrawable) { iconView.setElevation(mIconElevation); iconView.setOutlineProvider(OUTLINE_PROVIDER); } else { iconView.setElevation(0); iconView.setOutlineProvider(null); } ImageView badgeView = mAppHeader.findViewById(R.id.app_icon_instant_apps_badge); if (badgeView != null) { badgeView.setVisibility(mIsInstantApp ? View.VISIBLE : View.GONE); Loading
src/com/android/settings/applications/ManageApplications.java +8 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.graphics.drawable.AdaptiveIconDrawable; import android.icu.text.AlphabeticIndex; import android.os.Bundle; import android.os.Environment; Loading @@ -34,6 +35,7 @@ import android.preference.PreferenceFrameLayout; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.ArraySet; import android.util.LauncherIcons; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; Loading Loading @@ -90,7 +92,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.Set; Loading Loading @@ -812,6 +813,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment private final AppStateBaseBridge mExtraInfoBridge; private final Handler mBgHandler; private final Handler mFgHandler; private final LauncherIcons mLauncherIcons; private int mFilterMode; private ArrayList<ApplicationsState.AppEntry> mBaseEntries; private ArrayList<ApplicationsState.AppEntry> mEntries; Loading Loading @@ -866,6 +869,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment mContext = manageApplications.getActivity(); mPm = mContext.getPackageManager(); mFilterMode = filterMode; mLauncherIcons = new LauncherIcons(mContext); if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) { mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this, manageApplications.mNotifBackend); Loading Loading @@ -1300,6 +1304,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment } mState.ensureIcon(entry); if (entry.icon != null) { if (entry.icon instanceof AdaptiveIconDrawable) { entry.icon = mLauncherIcons.wrapIconDrawableWithShadow(entry.icon); } holder.appIcon.setImageDrawable(entry.icon); } updateSummary(holder); Loading
tests/robotests/src/android/util/LauncherIcons.java 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; import android.content.Context; import android.graphics.drawable.Drawable; /** * This class is only needed to get around RoboElectric issue. */ public final class LauncherIcons { public LauncherIcons(Context context) { } public Drawable wrapIconDrawableWithShadow(Drawable drawable) { return drawable; } }