diff options
| author | 2011-01-26 17:22:20 -0800 | |
|---|---|---|
| committer | 2011-01-26 19:43:27 -0800 | |
| commit | 5ef44b7566566db08b62245cbb9002b548071603 (patch) | |
| tree | 2f188ab727e987f0d9f0b38b3ad7d795bdf879f0 | |
| parent | 0f2e2b8b82c7b589bcc603ce57f8ff3d1c947784 (diff) | |
Add API for preferred Launcher icon size and density
Applications that create an icon for launcher to use couldn't determine
which size or density the icon should be created.
Bug: 3224340
Change-Id: Iee96113a4092696a9bd18eecbd2593b38f952a16
| -rw-r--r-- | api/current.xml | 22 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 66 |
2 files changed, 87 insertions, 1 deletions
diff --git a/api/current.xml b/api/current.xml index 8b9f3812f943..5c3a8e4fa7cb 100644 --- a/api/current.xml +++ b/api/current.xml @@ -24777,6 +24777,28 @@ visibility="public" > </method> +<method name="getLauncherLargeIconDensity" + return="int" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="getLauncherLargeIconSize" + return="int" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> <method name="getMemoryClass" return="int" abstract="false" diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 133a7d04003f..d76b67d3ef2a 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -22,6 +22,8 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.ConfigurationInfo; import android.content.pm.IPackageDataObserver; +import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Bitmap; import android.os.Debug; import android.os.RemoteException; @@ -30,6 +32,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.SystemProperties; import android.text.TextUtils; +import android.util.DisplayMetrics; + import java.util.List; /** @@ -1145,7 +1149,67 @@ public class ActivityManager { } return null; } - + + /** + * Get the preferred density of icons for the launcher. This is used when + * custom drawables are created (e.g., for shortcuts). + * + * @return density in terms of DPI + */ + public int getLauncherLargeIconDensity() { + final Resources res = mContext.getResources(); + final int density = res.getDisplayMetrics().densityDpi; + + if ((res.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) + != Configuration.SCREENLAYOUT_SIZE_XLARGE) { + return density; + } + + switch (density) { + case DisplayMetrics.DENSITY_LOW: + return DisplayMetrics.DENSITY_MEDIUM; + case DisplayMetrics.DENSITY_MEDIUM: + return DisplayMetrics.DENSITY_HIGH; + case DisplayMetrics.DENSITY_HIGH: + return DisplayMetrics.DENSITY_XHIGH; + case DisplayMetrics.DENSITY_XHIGH: + return DisplayMetrics.DENSITY_MEDIUM * 2; + default: + return density; + } + } + + /** + * Get the preferred launcher icon size. This is used when custom drawables + * are created (e.g., for shortcuts). + * + * @return dimensions of square icons in terms of pixels + */ + public int getLauncherLargeIconSize() { + final Resources res = mContext.getResources(); + final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size); + + if ((res.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) + != Configuration.SCREENLAYOUT_SIZE_XLARGE) { + return size; + } + + final int density = res.getDisplayMetrics().densityDpi; + + switch (density) { + case DisplayMetrics.DENSITY_LOW: + return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW; + case DisplayMetrics.DENSITY_MEDIUM: + return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM; + case DisplayMetrics.DENSITY_HIGH: + return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH; + case DisplayMetrics.DENSITY_XHIGH: + return (size * DisplayMetrics.DENSITY_MEDIUM * 2) / DisplayMetrics.DENSITY_XHIGH; + default: + return size; + } + } + /** * Returns "true" if the user interface is currently being messed with * by a monkey. |