Loading core/java/com/android/internal/util/cm/LockscreenTargetUtils.java +89 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.internal.util.cm; package com.android.internal.util.cm; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; Loading @@ -33,9 +35,12 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PaintDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable; import android.text.TextUtils; import android.util.Log; import android.util.Log; import com.android.internal.R; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.TargetDrawable; import com.android.internal.widget.multiwaveview.TargetDrawable; Loading Loading @@ -137,6 +142,21 @@ public final class LockscreenTargetUtils { LockscreenTargetUtils.getRoundedCornerBitmap(BitmapFactory.decodeFile(fileName))); LockscreenTargetUtils.getRoundedCornerBitmap(BitmapFactory.decodeFile(fileName))); } } public static int getInsetForIconType(Context context, String type) { if (TextUtils.equals(type, GlowPadView.ICON_RESOURCE)) { return 0; } final Resources res = context.getResources(); int inset = res.getDimensionPixelSize(R.dimen.lockscreen_target_inset); if (TextUtils.equals(type, GlowPadView.ICON_FILE)) { inset += res.getDimensionPixelSize(R.dimen.lockscreen_target_icon_file_inset); } return inset; } public static Drawable getDrawableFromResources(Context context, public static Drawable getDrawableFromResources(Context context, String packageName, String identifier, boolean activated) { String packageName, String identifier, boolean activated) { Resources res; Resources res; Loading Loading @@ -167,4 +187,73 @@ public final class LockscreenTargetUtils { return null; return null; } } public static Drawable getDrawableFromIntent(Context context, Intent intent) { final Resources res = context.getResources(); final PackageManager pm = context.getPackageManager(); ActivityInfo info = intent.resolveActivityInfo(pm, PackageManager.GET_ACTIVITIES); if (info == null) { return res.getDrawable(android.R.drawable.sym_def_app_icon); } Drawable icon = info.loadIcon(pm); return new BitmapDrawable(res, resizeIconTarget(context, icon)); } private static Bitmap resizeIconTarget(Context context, Drawable icon) { Resources res = context.getResources(); int size = (int) res.getDimension(android.R.dimen.app_icon_size); int width = size; int height = size; if (icon instanceof PaintDrawable) { PaintDrawable painter = (PaintDrawable) icon; painter.setIntrinsicWidth(width); painter.setIntrinsicHeight(height); } else if (icon instanceof BitmapDrawable) { // Ensure the bitmap has a density. BitmapDrawable bitmapDrawable = (BitmapDrawable) icon; Bitmap bitmap = bitmapDrawable.getBitmap(); if (bitmap.getDensity() == Bitmap.DENSITY_NONE) { bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics()); } } int sourceWidth = icon.getIntrinsicWidth(); int sourceHeight = icon.getIntrinsicHeight(); if (sourceWidth > 0 && sourceHeight > 0) { // There are intrinsic sizes. if (width < sourceWidth || height < sourceHeight) { // It's too big, scale it down. final float ratio = (float) sourceWidth / sourceHeight; if (sourceWidth > sourceHeight) { height = (int) (width / ratio); } else if (sourceHeight > sourceWidth) { width = (int) (height * ratio); } } else if (sourceWidth < width && sourceHeight < height) { // Don't scale up the icon width = sourceWidth; height = sourceHeight; } } final Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(); canvas.setBitmap(bitmap); final int left = (size - width) / 2; final int top = (size - height) / 2; Rect oldBounds = new Rect(); oldBounds.set(icon.getBounds()); icon.setBounds(left, top, left + width, top + height); icon.draw(canvas); icon.setBounds(oldBounds); canvas.setBitmap(null); return bitmap; } } } core/res/res/values/dimens.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -243,6 +243,8 @@ <!-- Lockscreen target insets --> <!-- Lockscreen target insets --> <item type="dimen" name="lockscreen_target_inset">30dp</item> <item type="dimen" name="lockscreen_target_inset">30dp</item> <!-- Additional inset used for targets with icons loaded from files --> <item type="dimen" name="lockscreen_target_icon_file_inset">2dp</item> <!-- Keyguard dimensions --> <!-- Keyguard dimensions --> <!-- TEMP --> <!-- TEMP --> Loading core/res/res/values/symbols.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1287,6 +1287,7 @@ <java-symbol type="dimen" name="kg_squashed_layout_threshold" /> <java-symbol type="dimen" name="kg_squashed_layout_threshold" /> <java-symbol type="dimen" name="kg_small_widget_height" /> <java-symbol type="dimen" name="kg_small_widget_height" /> <java-symbol type="dimen" name="lockscreen_target_inset" /> <java-symbol type="dimen" name="lockscreen_target_inset" /> <java-symbol type="dimen" name="lockscreen_target_icon_file_inset" /> <java-symbol type="drawable" name="ic_jog_dial_sound_off" /> <java-symbol type="drawable" name="ic_jog_dial_sound_off" /> <java-symbol type="drawable" name="ic_jog_dial_sound_on" /> <java-symbol type="drawable" name="ic_jog_dial_sound_on" /> <java-symbol type="drawable" name="ic_jog_dial_unlock" /> <java-symbol type="drawable" name="ic_jog_dial_unlock" /> Loading policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +8 −16 Original line number Original line Diff line number Diff line Loading @@ -25,10 +25,10 @@ import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.InsetDrawable; import android.os.UserHandle; import android.os.UserHandle; Loading Loading @@ -283,10 +283,6 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri ArrayList<TargetDrawable> storedDrawables = new ArrayList<TargetDrawable>(); ArrayList<TargetDrawable> storedDrawables = new ArrayList<TargetDrawable>(); final Resources res = getResources(); final Resources res = getResources(); final int targetInset = res.getDimensionPixelSize( com.android.internal.R.dimen.lockscreen_target_inset); final PackageManager pm = mContext.getPackageManager(); final Drawable blankActiveDrawable = res.getDrawable( final Drawable blankActiveDrawable = res.getDrawable( R.drawable.ic_lockscreen_target_activated); R.drawable.ic_lockscreen_target_activated); final InsetDrawable activeBack = new InsetDrawable(blankActiveDrawable, 0, 0, 0, 0); final InsetDrawable activeBack = new InsetDrawable(blankActiveDrawable, 0, 0, 0, 0); Loading @@ -310,7 +306,6 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri res.getDrawable(R.drawable.ic_lockscreen_unlock))); res.getDrawable(R.drawable.ic_lockscreen_unlock))); for (int i = 0; i < 8 - mTargetOffset - 1; i++) { for (int i = 0; i < 8 - mTargetOffset - 1; i++) { int inset = targetInset; if (i >= mStoredTargets.length) { if (i >= mStoredTargets.length) { storedDrawables.add(new TargetDrawable(res, 0)); storedDrawables.add(new TargetDrawable(res, 0)); continue; continue; Loading @@ -319,7 +314,8 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri String uri = mStoredTargets[i]; String uri = mStoredTargets[i]; if (uri.equals(GlowPadView.EMPTY_TARGET)) { if (uri.equals(GlowPadView.EMPTY_TARGET)) { Drawable d = LockscreenTargetUtils.getLayeredDrawable( Drawable d = LockscreenTargetUtils.getLayeredDrawable( mContext, unlockActiveDrawable, blankInActiveDrawable, inset, true); mContext, unlockActiveDrawable, blankInActiveDrawable, LockscreenTargetUtils.getInsetForIconType(mContext, null), true); storedDrawables.add(new TargetDrawable(res, d)); storedDrawables.add(new TargetDrawable(res, d)); continue; continue; } } Loading @@ -329,11 +325,12 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri Drawable front = null; Drawable front = null; Drawable back = activeBack; Drawable back = activeBack; boolean frontBlank = false; boolean frontBlank = false; String type = null; if (intent.hasExtra(GlowPadView.ICON_FILE)) { if (intent.hasExtra(GlowPadView.ICON_FILE)) { type = GlowPadView.ICON_FILE; front = LockscreenTargetUtils.getDrawableFromFile(mContext, front = LockscreenTargetUtils.getDrawableFromFile(mContext, intent.getStringExtra(GlowPadView.ICON_FILE)); intent.getStringExtra(GlowPadView.ICON_FILE)); inset += 5; } else if (intent.hasExtra(GlowPadView.ICON_RESOURCE)) { } else if (intent.hasExtra(GlowPadView.ICON_RESOURCE)) { String source = intent.getStringExtra(GlowPadView.ICON_RESOURCE); String source = intent.getStringExtra(GlowPadView.ICON_RESOURCE); String packageName = intent.getStringExtra(GlowPadView.ICON_PACKAGE); String packageName = intent.getStringExtra(GlowPadView.ICON_PACKAGE); Loading @@ -343,20 +340,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri packageName, source, false); packageName, source, false); back = LockscreenTargetUtils.getDrawableFromResources(mContext, back = LockscreenTargetUtils.getDrawableFromResources(mContext, packageName, source, true); packageName, source, true); inset = 0; type = GlowPadView.ICON_RESOURCE; frontBlank = true; frontBlank = true; } } } } if (front == null || back == null) { if (front == null || back == null) { ActivityInfo activityInfo = intent.resolveActivityInfo(pm, front = LockscreenTargetUtils.getDrawableFromIntent(mContext, intent); PackageManager.GET_ACTIVITIES); if (activityInfo != null) { front = activityInfo.loadIcon(pm); } else { front = res.getDrawable(android.R.drawable.sym_def_app_icon); } } } int inset = LockscreenTargetUtils.getInsetForIconType(mContext, type); Drawable drawable = LockscreenTargetUtils.getLayeredDrawable(mContext, Drawable drawable = LockscreenTargetUtils.getLayeredDrawable(mContext, back,front, inset, frontBlank); back,front, inset, frontBlank); TargetDrawable targetDrawable = new TargetDrawable(res, drawable); TargetDrawable targetDrawable = new TargetDrawable(res, drawable); Loading Loading
core/java/com/android/internal/util/cm/LockscreenTargetUtils.java +89 −0 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.internal.util.cm; package com.android.internal.util.cm; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; Loading @@ -33,9 +35,12 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PaintDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable; import android.text.TextUtils; import android.util.Log; import android.util.Log; import com.android.internal.R; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.TargetDrawable; import com.android.internal.widget.multiwaveview.TargetDrawable; Loading Loading @@ -137,6 +142,21 @@ public final class LockscreenTargetUtils { LockscreenTargetUtils.getRoundedCornerBitmap(BitmapFactory.decodeFile(fileName))); LockscreenTargetUtils.getRoundedCornerBitmap(BitmapFactory.decodeFile(fileName))); } } public static int getInsetForIconType(Context context, String type) { if (TextUtils.equals(type, GlowPadView.ICON_RESOURCE)) { return 0; } final Resources res = context.getResources(); int inset = res.getDimensionPixelSize(R.dimen.lockscreen_target_inset); if (TextUtils.equals(type, GlowPadView.ICON_FILE)) { inset += res.getDimensionPixelSize(R.dimen.lockscreen_target_icon_file_inset); } return inset; } public static Drawable getDrawableFromResources(Context context, public static Drawable getDrawableFromResources(Context context, String packageName, String identifier, boolean activated) { String packageName, String identifier, boolean activated) { Resources res; Resources res; Loading Loading @@ -167,4 +187,73 @@ public final class LockscreenTargetUtils { return null; return null; } } public static Drawable getDrawableFromIntent(Context context, Intent intent) { final Resources res = context.getResources(); final PackageManager pm = context.getPackageManager(); ActivityInfo info = intent.resolveActivityInfo(pm, PackageManager.GET_ACTIVITIES); if (info == null) { return res.getDrawable(android.R.drawable.sym_def_app_icon); } Drawable icon = info.loadIcon(pm); return new BitmapDrawable(res, resizeIconTarget(context, icon)); } private static Bitmap resizeIconTarget(Context context, Drawable icon) { Resources res = context.getResources(); int size = (int) res.getDimension(android.R.dimen.app_icon_size); int width = size; int height = size; if (icon instanceof PaintDrawable) { PaintDrawable painter = (PaintDrawable) icon; painter.setIntrinsicWidth(width); painter.setIntrinsicHeight(height); } else if (icon instanceof BitmapDrawable) { // Ensure the bitmap has a density. BitmapDrawable bitmapDrawable = (BitmapDrawable) icon; Bitmap bitmap = bitmapDrawable.getBitmap(); if (bitmap.getDensity() == Bitmap.DENSITY_NONE) { bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics()); } } int sourceWidth = icon.getIntrinsicWidth(); int sourceHeight = icon.getIntrinsicHeight(); if (sourceWidth > 0 && sourceHeight > 0) { // There are intrinsic sizes. if (width < sourceWidth || height < sourceHeight) { // It's too big, scale it down. final float ratio = (float) sourceWidth / sourceHeight; if (sourceWidth > sourceHeight) { height = (int) (width / ratio); } else if (sourceHeight > sourceWidth) { width = (int) (height * ratio); } } else if (sourceWidth < width && sourceHeight < height) { // Don't scale up the icon width = sourceWidth; height = sourceHeight; } } final Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(); canvas.setBitmap(bitmap); final int left = (size - width) / 2; final int top = (size - height) / 2; Rect oldBounds = new Rect(); oldBounds.set(icon.getBounds()); icon.setBounds(left, top, left + width, top + height); icon.draw(canvas); icon.setBounds(oldBounds); canvas.setBitmap(null); return bitmap; } } }
core/res/res/values/dimens.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -243,6 +243,8 @@ <!-- Lockscreen target insets --> <!-- Lockscreen target insets --> <item type="dimen" name="lockscreen_target_inset">30dp</item> <item type="dimen" name="lockscreen_target_inset">30dp</item> <!-- Additional inset used for targets with icons loaded from files --> <item type="dimen" name="lockscreen_target_icon_file_inset">2dp</item> <!-- Keyguard dimensions --> <!-- Keyguard dimensions --> <!-- TEMP --> <!-- TEMP --> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -1287,6 +1287,7 @@ <java-symbol type="dimen" name="kg_squashed_layout_threshold" /> <java-symbol type="dimen" name="kg_squashed_layout_threshold" /> <java-symbol type="dimen" name="kg_small_widget_height" /> <java-symbol type="dimen" name="kg_small_widget_height" /> <java-symbol type="dimen" name="lockscreen_target_inset" /> <java-symbol type="dimen" name="lockscreen_target_inset" /> <java-symbol type="dimen" name="lockscreen_target_icon_file_inset" /> <java-symbol type="drawable" name="ic_jog_dial_sound_off" /> <java-symbol type="drawable" name="ic_jog_dial_sound_off" /> <java-symbol type="drawable" name="ic_jog_dial_sound_on" /> <java-symbol type="drawable" name="ic_jog_dial_sound_on" /> <java-symbol type="drawable" name="ic_jog_dial_unlock" /> <java-symbol type="drawable" name="ic_jog_dial_unlock" /> Loading
policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +8 −16 Original line number Original line Diff line number Diff line Loading @@ -25,10 +25,10 @@ import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.InsetDrawable; import android.os.UserHandle; import android.os.UserHandle; Loading Loading @@ -283,10 +283,6 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri ArrayList<TargetDrawable> storedDrawables = new ArrayList<TargetDrawable>(); ArrayList<TargetDrawable> storedDrawables = new ArrayList<TargetDrawable>(); final Resources res = getResources(); final Resources res = getResources(); final int targetInset = res.getDimensionPixelSize( com.android.internal.R.dimen.lockscreen_target_inset); final PackageManager pm = mContext.getPackageManager(); final Drawable blankActiveDrawable = res.getDrawable( final Drawable blankActiveDrawable = res.getDrawable( R.drawable.ic_lockscreen_target_activated); R.drawable.ic_lockscreen_target_activated); final InsetDrawable activeBack = new InsetDrawable(blankActiveDrawable, 0, 0, 0, 0); final InsetDrawable activeBack = new InsetDrawable(blankActiveDrawable, 0, 0, 0, 0); Loading @@ -310,7 +306,6 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri res.getDrawable(R.drawable.ic_lockscreen_unlock))); res.getDrawable(R.drawable.ic_lockscreen_unlock))); for (int i = 0; i < 8 - mTargetOffset - 1; i++) { for (int i = 0; i < 8 - mTargetOffset - 1; i++) { int inset = targetInset; if (i >= mStoredTargets.length) { if (i >= mStoredTargets.length) { storedDrawables.add(new TargetDrawable(res, 0)); storedDrawables.add(new TargetDrawable(res, 0)); continue; continue; Loading @@ -319,7 +314,8 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri String uri = mStoredTargets[i]; String uri = mStoredTargets[i]; if (uri.equals(GlowPadView.EMPTY_TARGET)) { if (uri.equals(GlowPadView.EMPTY_TARGET)) { Drawable d = LockscreenTargetUtils.getLayeredDrawable( Drawable d = LockscreenTargetUtils.getLayeredDrawable( mContext, unlockActiveDrawable, blankInActiveDrawable, inset, true); mContext, unlockActiveDrawable, blankInActiveDrawable, LockscreenTargetUtils.getInsetForIconType(mContext, null), true); storedDrawables.add(new TargetDrawable(res, d)); storedDrawables.add(new TargetDrawable(res, d)); continue; continue; } } Loading @@ -329,11 +325,12 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri Drawable front = null; Drawable front = null; Drawable back = activeBack; Drawable back = activeBack; boolean frontBlank = false; boolean frontBlank = false; String type = null; if (intent.hasExtra(GlowPadView.ICON_FILE)) { if (intent.hasExtra(GlowPadView.ICON_FILE)) { type = GlowPadView.ICON_FILE; front = LockscreenTargetUtils.getDrawableFromFile(mContext, front = LockscreenTargetUtils.getDrawableFromFile(mContext, intent.getStringExtra(GlowPadView.ICON_FILE)); intent.getStringExtra(GlowPadView.ICON_FILE)); inset += 5; } else if (intent.hasExtra(GlowPadView.ICON_RESOURCE)) { } else if (intent.hasExtra(GlowPadView.ICON_RESOURCE)) { String source = intent.getStringExtra(GlowPadView.ICON_RESOURCE); String source = intent.getStringExtra(GlowPadView.ICON_RESOURCE); String packageName = intent.getStringExtra(GlowPadView.ICON_PACKAGE); String packageName = intent.getStringExtra(GlowPadView.ICON_PACKAGE); Loading @@ -343,20 +340,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri packageName, source, false); packageName, source, false); back = LockscreenTargetUtils.getDrawableFromResources(mContext, back = LockscreenTargetUtils.getDrawableFromResources(mContext, packageName, source, true); packageName, source, true); inset = 0; type = GlowPadView.ICON_RESOURCE; frontBlank = true; frontBlank = true; } } } } if (front == null || back == null) { if (front == null || back == null) { ActivityInfo activityInfo = intent.resolveActivityInfo(pm, front = LockscreenTargetUtils.getDrawableFromIntent(mContext, intent); PackageManager.GET_ACTIVITIES); if (activityInfo != null) { front = activityInfo.loadIcon(pm); } else { front = res.getDrawable(android.R.drawable.sym_def_app_icon); } } } int inset = LockscreenTargetUtils.getInsetForIconType(mContext, type); Drawable drawable = LockscreenTargetUtils.getLayeredDrawable(mContext, Drawable drawable = LockscreenTargetUtils.getLayeredDrawable(mContext, back,front, inset, frontBlank); back,front, inset, frontBlank); TargetDrawable targetDrawable = new TargetDrawable(res, drawable); TargetDrawable targetDrawable = new TargetDrawable(res, drawable); Loading