diff options
Diffstat (limited to 'core')
64 files changed, 1029 insertions, 309 deletions
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java index 20b27c5..3e8af60 100644 --- a/core/java/android/app/Presentation.java +++ b/core/java/android/app/Presentation.java @@ -50,6 +50,93 @@ import android.util.TypedValue; * whenever the activity itself is paused or resumed. * </p> * + * <h3>Choosing a presentation display</h3> + * <p> + * Before showing a {@link Presentation} it's important to choose the {@link Display} + * on which it will appear. Choosing a presentation display is sometimes difficult + * because there may be multiple displays attached. Rather than trying to guess + * which display is best, an application should let the system choose a suitable + * presentation display. + * </p><p> + * There are two main ways to choose a {@link Display}. + * </p> + * + * <h4>Using the media router to choose a presentation display</h4> + * <p> + * The easiest way to choose a presentation display is to use the + * {@link android.media.MediaRouter MediaRouter} API. The media router service keeps + * track of which audio and video routes are available on the system. + * The media router sends notifications whenever routes are selected or unselected + * or when the preferred presentation display of a route changes. + * So an application can simply watch for these notifications and show or dismiss + * a presentation on the preferred presentation display automatically. + * </p><p> + * The preferred presentation display is the display that the media router recommends + * that the application should use if it wants to show content on the secondary display. + * Sometimes there may not be a preferred presentation display in which + * case the application should show its content locally without using a presentation. + * </p><p> + * Here's how to use the media router to create and show a presentation on the preferred + * presentation display using {@link android.media.MediaRouter.RouteInfo#getPresentationDisplay()}. + * </p> + * {@samplecode + * MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); + * MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(); + * if (route != null) ${ + * Display presentationDisplay = route.getPresentationDisplay(); + * if (presentationDisplay != null) ${ + * Presentation presentation = new MyPresentation(context, presentationDisplay); + * presentation.show(); + * $} + * $} + * } + * <p> + * The following sample code from <code>ApiDemos</code> demonstrates how to use the media + * router to automatically switch between showing content in the main activity and showing + * the content in a presentation when a presentation display is available. + * </p> + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/PresentationWithMediaRouterActivity.java + * activity} + * + * <h4>Using the display manager to choose a presentation display</h4> + * <p> + * Another way to choose a presentation display is to use the {@link DisplayManager} API + * directly. The display manager service provides functions to enumerate and describe all + * displays that are attached to the system including displays that may be used + * for presentations. + * </p><p> + * The display manager keeps track of all displays in the system. However, not all + * displays are appropriate for showing presentations. For example, if an activity + * attempted to show a presentation on the main display it might obscure its own content + * (it's like opening a dialog on top of your activity). + * </p><p> + * Here's how to identify suitable displays for showing presentations using + * {@link DisplayManager#getDisplays(String)} and the + * {@link DisplayManager#DISPLAY_CATEGORY_PRESENTATION} category. + * </p> + * {@samplecode + * DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); + * Display[] presentationDisplays = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION); + * if (presentationDisplays.length > 0) ${ + * // If there is more than one suitable presentation display, then we could consider + * // giving the user a choice. For this example, we simply choose the first display + * // which is the one the system recommends as the preferred presentation display. + * Display display = presentationDisplays[0]; + * Presentation presentation = new MyPresentation(context, presentationDisplay); + * presentation.show(); + * $} + * } + * <p> + * The following sample code from <code>ApiDemos</code> demonstrates how to use the display + * manager to enumerate displays and show content on multiple presentation displays + * simultaneously. + * </p> + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/PresentationActivity.java + * activity} + * + * @see android.media.MediaRouter#ROUTE_TYPE_LIVE_VIDEO for information on about live + * video routes and how to obtain the preferred presentation display for the + * current media route. * @see DisplayManager for information on how to enumerate displays and receive * notifications when displays are added or removed. */ @@ -121,7 +208,7 @@ public class Presentation extends Dialog { @Override protected void onStart() { super.onStart(); - mDisplayManager.registerDisplayListener(mDisplayListener, null); + mDisplayManager.registerDisplayListener(mDisplayListener, mHandler); // Since we were not watching for display changes until just now, there is a // chance that the display metrics have changed. If so, we will need to diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 28e320b..0a7a2e7 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -21,6 +21,8 @@ import android.os.Handler; import android.util.SparseArray; import android.view.Display; +import java.util.ArrayList; + /** * Manages the properties of attached displays. * <p> @@ -40,6 +42,8 @@ public final class DisplayManager { private final Object mLock = new Object(); private final SparseArray<Display> mDisplays = new SparseArray<Display>(); + private final ArrayList<Display> mTempDisplays = new ArrayList<Display>(); + /** * Broadcast receiver that indicates when the Wifi display status changes. * <p> @@ -60,6 +64,20 @@ public final class DisplayManager { public static final String EXTRA_WIFI_DISPLAY_STATUS = "android.hardware.display.extra.WIFI_DISPLAY_STATUS"; + /** + * Display category: Presentation displays. + * <p> + * This category can be used to identify secondary displays that are suitable for + * use as presentation displays. + * </p> + * + * @see android.app.Presentation for information about presenting content + * on secondary displays. + * @see #getDisplays(String) + */ + public static final String DISPLAY_CATEGORY_PRESENTATION = + "android.hardware.display.category.PRESENTATION"; + /** @hide */ public DisplayManager(Context context) { mContext = context; @@ -87,24 +105,52 @@ public final class DisplayManager { * @return An array containing all displays. */ public Display[] getDisplays() { - int[] displayIds = mGlobal.getDisplayIds(); - int expectedCount = displayIds.length; - Display[] displays = new Display[expectedCount]; + return getDisplays(null); + } + + /** + * Gets all currently valid logical displays of the specified category. + * <p> + * When there are multiple displays in a category the returned displays are sorted + * of preference. For example, if the requested category is + * {@link #DISPLAY_CATEGORY_PRESENTATION} and there are multiple presentation displays + * then the displays are sorted so that the first display in the returned array + * is the most preferred presentation display. The application may simply + * use the first display or allow the user to choose. + * </p> + * + * @param category The requested display category or null to return all displays. + * @return An array containing all displays sorted by order of preference. + * + * @see #DISPLAY_CATEGORY_PRESENTATION + */ + public Display[] getDisplays(String category) { + final int[] displayIds = mGlobal.getDisplayIds(); synchronized (mLock) { - int actualCount = 0; - for (int i = 0; i < expectedCount; i++) { - Display display = getOrCreateDisplayLocked(displayIds[i], true /*assumeValid*/); - if (display != null) { - displays[actualCount++] = display; + try { + if (category == null) { + addMatchingDisplaysLocked(mTempDisplays, displayIds, -1); + } else if (category.equals(DISPLAY_CATEGORY_PRESENTATION)) { + addMatchingDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_WIFI); + addMatchingDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_HDMI); + addMatchingDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_OVERLAY); } + return mTempDisplays.toArray(new Display[mTempDisplays.size()]); + } finally { + mTempDisplays.clear(); } - if (actualCount != expectedCount) { - Display[] oldDisplays = displays; - displays = new Display[actualCount]; - System.arraycopy(oldDisplays, 0, displays, 0, actualCount); + } + } + + private void addMatchingDisplaysLocked( + ArrayList<Display> displays, int[] displayIds, int matchType) { + for (int i = 0; i < displayIds.length; i++) { + Display display = getOrCreateDisplayLocked(displayIds[i], true /*assumeValid*/); + if (display != null + && (matchType < 0 || display.getType() == matchType)) { + displays.add(display); } } - return displays; } private Display getOrCreateDisplayLocked(int displayId, boolean assumeValid) { diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 898c766..d73f99a 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -122,7 +122,7 @@ public class UserManager { * @param userHandle the user handle of the user whose information is being requested. * @return the UserInfo object for a specific user. * @hide - * */ + */ public UserInfo getUserInfo(int userHandle) { try { return mService.getUserInfo(userHandle); @@ -134,10 +134,11 @@ public class UserManager { /** * Return the serial number for a user. This is a device-unique - * number assigned to that user; if the user is deleted and new users - * created, the new users will not be given the same serial number. + * number assigned to that user; if the user is deleted and then a new + * user created, the new users will not be given the same serial number. * @param user The user whose serial number is to be retrieved. - * @return The serial number of the given user. + * @return The serial number of the given user; returns -1 if the + * given UserHandle does not exist. * @see #getUserForSerialNumber(long) */ public long getSerialNumberForUser(UserHandle user) { @@ -179,6 +180,14 @@ public class UserManager { } /** + * Return the number of users currently created on the device. + */ + public int getUserCount() { + List<UserInfo> users = getUsers(); + return users != null ? users.size() : 1; + } + + /** * Returns information for all users on this device. * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. * @return the list of users that were created. diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 8897039..cda0f36 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -3222,18 +3222,11 @@ public final class Settings { public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info"; /** - * Id of the time appwidget on the lockscreen, or -1 if none - * @hide - */ - public static final String LOCK_SCREEN_STATUS_APPWIDGET_ID = - "lock_screen_status_appwidget_id"; - - /** * Id of the user-selected appwidget on the lockscreen, or -1 if none * @hide */ - public static final String LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID = - "lock_screen_user_selected_appwidget_id"; + public static final String LOCK_SCREEN_APPWIDGET_IDS = + "lock_screen_appwidget_ids"; /** * This preference enables showing the owner info on LockScren. diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 1cd3e05..758abb5 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -54,7 +54,9 @@ public final class Display { private final DisplayManagerGlobal mGlobal; private final int mDisplayId; private final int mLayerStack; - private final String mName; + private final int mFlags; + private final int mType; + private final String mAddress; private final CompatibilityInfoHolder mCompatibilityInfo; private DisplayInfo mDisplayInfo; // never null @@ -141,6 +143,36 @@ public final class Display { public static final int FLAG_SECURE = 1 << 1; /** + * Display type: Unknown display type. + * @hide + */ + public static final int TYPE_UNKNOWN = 0; + + /** + * Display type: Built-in display. + * @hide + */ + public static final int TYPE_BUILT_IN = 1; + + /** + * Display type: HDMI display. + * @hide + */ + public static final int TYPE_HDMI = 2; + + /** + * Display type: WiFi display. + * @hide + */ + public static final int TYPE_WIFI = 3; + + /** + * Display type: Overlay display. + * @hide + */ + public static final int TYPE_OVERLAY = 4; + + /** * Internal method to create a display. * Applications should use {@link android.view.WindowManager#getDefaultDisplay()} * or {@link android.hardware.display.DisplayManager#getDisplay} @@ -154,10 +186,14 @@ public final class Display { mGlobal = global; mDisplayId = displayId; mDisplayInfo = displayInfo; - mLayerStack = displayInfo.layerStack; // can never change as long as the display is valid - mName = displayInfo.name; // cannot change as long as the display is valid mCompatibilityInfo = compatibilityInfo; mIsValid = true; + + // Cache properties that cannot change as long as the display is valid. + mLayerStack = displayInfo.layerStack; + mFlags = displayInfo.flags; + mType = displayInfo.type; + mAddress = displayInfo.address; } /** @@ -228,10 +264,34 @@ public final class Display { * @see #FLAG_SECURE */ public int getFlags() { - synchronized (this) { - updateDisplayInfoLocked(); - return mDisplayInfo.flags; - } + return mFlags; + } + + /** + * Gets the display type. + * + * @return The display type. + * + * @see #TYPE_UNKNOWN + * @see #TYPE_BUILT_IN + * @see #TYPE_HDMI + * @see #TYPE_WIFI + * @see #TYPE_OVERLAY + * @hide + */ + public int getType() { + return mType; + } + + /** + * Gets the display address, or null if none. + * Interpretation varies by display type. + * + * @return The display address. + * @hide + */ + public String getAddress() { + return mAddress; } /** @@ -246,10 +306,17 @@ public final class Display { /** * Gets the name of the display. + * <p> + * Note that some displays may be renamed by the user. + * </p> + * * @return The display's name. */ public String getName() { - return mName; + synchronized (this) { + updateDisplayInfoLocked(); + return mDisplayInfo.name; + } } /** @@ -527,5 +594,25 @@ public final class Display { + ", " + mTempMetrics + ", isValid=" + mIsValid; } } + + /** + * @hide + */ + public static String typeToString(int type) { + switch (type) { + case TYPE_UNKNOWN: + return "UNKNOWN"; + case TYPE_BUILT_IN: + return "BUILT_IN"; + case TYPE_HDMI: + return "HDMI"; + case TYPE_WIFI: + return "WIFI"; + case TYPE_OVERLAY: + return "OVERLAY"; + default: + return Integer.toString(type); + } + } } diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java index ead5ff4..f3841d5 100644 --- a/core/java/android/view/DisplayInfo.java +++ b/core/java/android/view/DisplayInfo.java @@ -39,6 +39,17 @@ public final class DisplayInfo implements Parcelable { public int flags; /** + * Display type. + */ + public int type; + + /** + * Display address, or null if none. + * Interpretation varies by display type. + */ + public String address; + + /** * The human-readable name of the display. */ public String name; @@ -143,10 +154,12 @@ public final class DisplayInfo implements Parcelable { public float physicalYDpi; public static final Creator<DisplayInfo> CREATOR = new Creator<DisplayInfo>() { + @Override public DisplayInfo createFromParcel(Parcel source) { return new DisplayInfo(source); } + @Override public DisplayInfo[] newArray(int size) { return new DisplayInfo[size]; } @@ -171,6 +184,9 @@ public final class DisplayInfo implements Parcelable { public boolean equals(DisplayInfo other) { return other != null && layerStack == other.layerStack + && flags == other.flags + && type == other.type + && Objects.equal(address, other.address) && Objects.equal(name, other.name) && appWidth == other.appWidth && appHeight == other.appHeight @@ -195,6 +211,8 @@ public final class DisplayInfo implements Parcelable { public void copyFrom(DisplayInfo other) { layerStack = other.layerStack; flags = other.flags; + type = other.type; + address = other.address; name = other.name; appWidth = other.appWidth; appHeight = other.appHeight; @@ -214,6 +232,8 @@ public final class DisplayInfo implements Parcelable { public void readFromParcel(Parcel source) { layerStack = source.readInt(); flags = source.readInt(); + type = source.readInt(); + address = source.readString(); name = source.readString(); appWidth = source.readInt(); appHeight = source.readInt(); @@ -234,6 +254,8 @@ public final class DisplayInfo implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(layerStack); dest.writeInt(this.flags); + dest.writeInt(type); + dest.writeString(address); dest.writeString(name); dest.writeInt(appWidth); dest.writeInt(appHeight); @@ -294,7 +316,10 @@ public final class DisplayInfo implements Parcelable { + ", rotation " + rotation + ", density " + logicalDensityDpi + ", " + physicalXDpi + " x " + physicalYDpi + " dpi" - + ", layerStack " + layerStack + flagsToString(flags) + "}"; + + ", layerStack " + layerStack + + ", type " + Display.typeToString(type) + + ", address " + address + + flagsToString(flags) + "}"; } private static String flagsToString(int flags) { diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 59f941d..1c613245 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -1526,30 +1526,6 @@ public abstract class HardwareRenderer { } @Override - void destroyLayers(View view) { - if (view != null && isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) { - if (mCanvas != null) { - mCanvas.clearLayerUpdates(); - } - destroyHardwareLayer(view); - GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS); - } - } - - private static void destroyHardwareLayer(View view) { - view.destroyLayer(true); - - if (view instanceof ViewGroup) { - ViewGroup group = (ViewGroup) view; - - int count = group.getChildCount(); - for (int i = 0; i < count; i++) { - destroyHardwareLayer(group.getChildAt(i)); - } - } - } - - @Override boolean safelyRun(Runnable action) { boolean needsContext = true; if (isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) needsContext = false; @@ -1574,6 +1550,35 @@ public abstract class HardwareRenderer { } @Override + void destroyLayers(final View view) { + if (view != null) { + safelyRun(new Runnable() { + @Override + public void run() { + if (mCanvas != null) { + mCanvas.clearLayerUpdates(); + } + destroyHardwareLayer(view); + GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS); + } + }); + } + } + + private static void destroyHardwareLayer(View view) { + view.destroyLayer(true); + + if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup) view; + + int count = group.getChildCount(); + for (int i = 0; i < count; i++) { + destroyHardwareLayer(group.getChildAt(i)); + } + } + } + + @Override void destroyHardwareResources(final View view) { if (view != null) { safelyRun(new Runnable() { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 6b4e64c..9d0d4f0 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -1864,7 +1864,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Default horizontal layout direction. - * @hide */ private static final int LAYOUT_DIRECTION_DEFAULT = LAYOUT_DIRECTION_INHERIT; @@ -1914,7 +1913,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Default text direction is inherited */ - public static int TEXT_DIRECTION_DEFAULT = TEXT_DIRECTION_INHERIT; + private static final int TEXT_DIRECTION_DEFAULT = TEXT_DIRECTION_INHERIT; /** * Bit shift to get the horizontal layout direction. (bits after LAYOUT_DIRECTION_RESOLVED) @@ -2024,7 +2023,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Default text alignment is inherited */ - public static int TEXT_ALIGNMENT_DEFAULT = TEXT_ALIGNMENT_GRAVITY; + private static final int TEXT_ALIGNMENT_DEFAULT = TEXT_ALIGNMENT_GRAVITY; /** * Bit shift to get the horizontal layout direction. (bits after DRAG_HOVERED) @@ -3224,7 +3223,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mContext = context; mResources = context != null ? context.getResources() : null; mViewFlags = SOUND_EFFECTS_ENABLED | HAPTIC_FEEDBACK_ENABLED; - // Set layout and text direction defaults + // Set some flags defaults mPrivateFlags2 = (LAYOUT_DIRECTION_DEFAULT << PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT) | (TEXT_DIRECTION_DEFAULT << PFLAG2_TEXT_DIRECTION_MASK_SHIFT) | diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 3f40f20..50e0a47 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -16,10 +16,6 @@ package com.android.internal.widget; -import com.android.internal.R; -import com.android.internal.telephony.ITelephony; -import com.google.android.collect.Lists; - import android.app.ActivityManagerNative; import android.app.admin.DevicePolicyManager; import android.content.ContentResolver; @@ -29,7 +25,6 @@ import android.content.pm.PackageManager; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; -import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -43,6 +38,10 @@ import android.util.Log; import android.view.View; import android.widget.Button; +import com.android.internal.R; +import com.android.internal.telephony.ITelephony; +import com.google.android.collect.Lists; + import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; @@ -125,6 +124,11 @@ public class LockPatternUtils { */ public static final int FLAG_BIOMETRIC_WEAK_LIVELINESS = 0x1; + /** + * Pseudo-appwidget id we use to represent the default clock status widget + */ + public static final int ID_DEFAULT_STATUS_WIDGET = -2; + protected final static String LOCKOUT_PERMANENT_KEY = "lockscreen.lockedoutpermanently"; protected final static String LOCKOUT_ATTEMPT_DEADLINE = "lockscreen.lockoutattemptdeadline"; protected final static String PATTERN_EVER_CHOSEN_KEY = "lockscreen.patterneverchosen"; @@ -1045,28 +1049,116 @@ public class LockPatternUtils { } } - public int[] getUserDefinedWidgets() { - int appWidgetId = -1; + public int[] getAppWidgets() { String appWidgetIdString = Settings.Secure.getStringForUser( - mContentResolver, Settings.Secure.LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID, + mContentResolver, Settings.Secure.LOCK_SCREEN_APPWIDGET_IDS, UserHandle.USER_CURRENT); - if (appWidgetIdString != null) { - appWidgetId = (int) Integer.decode(appWidgetIdString); + String delims = ","; + if (appWidgetIdString != null && appWidgetIdString.length() > 0) { + String[] appWidgetStringIds = appWidgetIdString.split(delims); + int[] appWidgetIds = new int[appWidgetStringIds.length]; + for (int i = 0; i < appWidgetStringIds.length; i++) { + String appWidget = appWidgetStringIds[i]; + try { + appWidgetIds[i] = Integer.decode(appWidget); + } catch (NumberFormatException e) { + Log.d(TAG, "Error when parsing widget id " + appWidget); + return null; + } + } + return appWidgetIds; + } + if (appWidgetIdString == null) { + return new int[] { LockPatternUtils.ID_DEFAULT_STATUS_WIDGET }; + } else { + return new int[0]; + } + } + + private static String combineStrings(int[] list, String separator) { + int listLength = list.length; + + switch (listLength) { + case 0: { + return ""; + } + case 1: { + return Integer.toString(list[0]); + } + } + + int strLength = 0; + int separatorLength = separator.length(); + + String[] stringList = new String[list.length]; + for (int i = 0; i < listLength; i++) { + stringList[i] = Integer.toString(list[i]); + strLength += stringList[i].length(); + if (i < listLength - 1) { + strLength += separatorLength; + } + } + + StringBuilder sb = new StringBuilder(strLength); + + for (int i = 0; i < listLength; i++) { + sb.append(list[i]); + if (i < listLength - 1) { + sb.append(separator); + } } - return new int[] { appWidgetId }; + return sb.toString(); } - public int getStatusWidget() { - int appWidgetId = -1; - String appWidgetIdString = Settings.Secure.getStringForUser( - mContentResolver, Settings.Secure.LOCK_SCREEN_STATUS_APPWIDGET_ID, - UserHandle.USER_CURRENT); - if (appWidgetIdString != null) { - appWidgetId = (int) Integer.decode(appWidgetIdString); + private void writeAppWidgets(int[] appWidgetIds) { + Settings.Secure.putStringForUser(mContentResolver, + Settings.Secure.LOCK_SCREEN_APPWIDGET_IDS, + combineStrings(appWidgetIds, ","), + UserHandle.USER_CURRENT); + } + + // TODO: log an error if this returns false + public boolean addAppWidget(int widgetId, int index) { + int[] widgets = getAppWidgets(); + if (widgets == null) { + return false; } + if (index < 0 || index >= widgets.length) { + return false; + } + int[] newWidgets = new int[widgets.length + 1]; + for (int i = 0, j = 0; i < newWidgets.length; i++) { + if (index == i) { + newWidgets[i] = widgetId; + i++; + } + if (i < newWidgets.length) { + newWidgets[i] = widgets[j]; + j++; + } + } + writeAppWidgets(newWidgets); + return true; + } - return appWidgetId; + public boolean removeAppWidget(int widgetId) { + int[] widgets = getAppWidgets(); + + int[] newWidgets = new int[widgets.length - 1]; + for (int i = 0, j = 0; i < widgets.length; i++) { + if (widgets[i] == widgetId) { + // continue... + } else if (j >= newWidgets.length) { + // we couldn't find the widget + return false; + } else { + newWidgets[j] = widgets[i]; + j++; + } + } + writeAppWidgets(newWidgets); + return true; } private long getLong(String secureSettingKey, long defaultValue) { diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java index 0f49776..b7f64ec 100644 --- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java @@ -256,11 +256,8 @@ public class GlowPadView extends View { setDirectionDescriptionsResourceId(resourceId); } - a.recycle(); + mGravity = a.getInt(R.styleable.GlowPadView_gravity, Gravity.TOP); - // Use gravity attribute from LinearLayout - a = context.obtainStyledAttributes(attrs, android.R.styleable.LinearLayout); - mGravity = a.getInt(android.R.styleable.LinearLayout_gravity, Gravity.TOP); a.recycle(); setVibrateEnabled(mVibrationDuration > 0); diff --git a/core/res/res/anim/keyguard_security_fade_in.xml b/core/res/res/anim/keyguard_security_fade_in.xml index 7d5516a..6293432 100644 --- a/core/res/res/anim/keyguard_security_fade_in.xml +++ b/core/res/res/anim/keyguard_security_fade_in.xml @@ -15,8 +15,8 @@ --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/decelerate_quad" + android:interpolator="@android:interpolator/decelerate_quad" android:fromAlpha="0.0" android:toAlpha="1.0" - android:duration="@integer/kg_security_fade_duration" /> + android:duration="@*android:integer/kg_security_fade_duration" /> diff --git a/core/res/res/anim/keyguard_security_fade_out.xml b/core/res/res/anim/keyguard_security_fade_out.xml index 08c8b2b..4ab0229 100644 --- a/core/res/res/anim/keyguard_security_fade_out.xml +++ b/core/res/res/anim/keyguard_security_fade_out.xml @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. --> -<alpha xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/accelerate_quad" +<alpha xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@android:interpolator/accelerate_quad" android:fromAlpha="1.0" android:toAlpha="0.0" - android:duration="@integer/kg_security_fade_duration" + android:duration="@*android:integer/kg_security_fade_duration" /> diff --git a/core/res/res/drawable-hdpi/add_widget.png b/core/res/res/drawable-hdpi/add_widget.png Binary files differnew file mode 100644 index 0000000..9cf9b60 --- /dev/null +++ b/core/res/res/drawable-hdpi/add_widget.png diff --git a/core/res/res/drawable-hdpi/kg_bouncer_bg_white.9.png b/core/res/res/drawable-hdpi/kg_bouncer_bg_white.9.png Binary files differnew file mode 100644 index 0000000..c34fe20 --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-hdpi/kg_security_grip.9.png b/core/res/res/drawable-hdpi/kg_security_grip.9.png Binary files differnew file mode 100644 index 0000000..fb1c866 --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-hdpi/kg_security_lock.png b/core/res/res/drawable-hdpi/kg_security_lock.png Binary files differnew file mode 100644 index 0000000..136d3ad --- /dev/null +++ b/core/res/res/drawable-hdpi/kg_security_lock.png diff --git a/core/res/res/drawable-hdpi/security_frame.9.png b/core/res/res/drawable-hdpi/security_frame.9.png Binary files differnew file mode 100644 index 0000000..9eeadc4 --- /dev/null +++ b/core/res/res/drawable-hdpi/security_frame.9.png diff --git a/core/res/res/drawable-hdpi/security_handle.png b/core/res/res/drawable-hdpi/security_handle.png Binary files differnew file mode 100644 index 0000000..bd4640f --- /dev/null +++ b/core/res/res/drawable-hdpi/security_handle.png diff --git a/core/res/res/drawable-hdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-hdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..f1bcf48 --- /dev/null +++ b/core/res/res/drawable-hdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/drawable-mdpi/add_widget.png b/core/res/res/drawable-mdpi/add_widget.png Binary files differnew file mode 100644 index 0000000..9cf9b60 --- /dev/null +++ b/core/res/res/drawable-mdpi/add_widget.png diff --git a/core/res/res/drawable-mdpi/kg_bouncer_bg_white.9.png b/core/res/res/drawable-mdpi/kg_bouncer_bg_white.9.png Binary files differnew file mode 100644 index 0000000..f636524 --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-mdpi/kg_security_grip.9.png b/core/res/res/drawable-mdpi/kg_security_grip.9.png Binary files differnew file mode 100644 index 0000000..25beb2b --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-mdpi/kg_security_lock.png b/core/res/res/drawable-mdpi/kg_security_lock.png Binary files differnew file mode 100644 index 0000000..861760d --- /dev/null +++ b/core/res/res/drawable-mdpi/kg_security_lock.png diff --git a/core/res/res/drawable-mdpi/security_frame.9.png b/core/res/res/drawable-mdpi/security_frame.9.png Binary files differnew file mode 100644 index 0000000..9eeadc4 --- /dev/null +++ b/core/res/res/drawable-mdpi/security_frame.9.png diff --git a/core/res/res/drawable-mdpi/security_handle.png b/core/res/res/drawable-mdpi/security_handle.png Binary files differnew file mode 100644 index 0000000..bd4640f --- /dev/null +++ b/core/res/res/drawable-mdpi/security_handle.png diff --git a/core/res/res/drawable-mdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-mdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..d5a7708 --- /dev/null +++ b/core/res/res/drawable-mdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..f1bcf48 --- /dev/null +++ b/core/res/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..d5a7708 --- /dev/null +++ b/core/res/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..55174e0 --- /dev/null +++ b/core/res/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/drawable-xhdpi/add_widget.png b/core/res/res/drawable-xhdpi/add_widget.png Binary files differnew file mode 100644 index 0000000..9cf9b60 --- /dev/null +++ b/core/res/res/drawable-xhdpi/add_widget.png diff --git a/core/res/res/drawable-xhdpi/default_wallpaper.jpg b/core/res/res/drawable-xhdpi/default_wallpaper.jpg Binary files differindex 5b8d1d5..da9fa91 100644 --- a/core/res/res/drawable-xhdpi/default_wallpaper.jpg +++ b/core/res/res/drawable-xhdpi/default_wallpaper.jpg diff --git a/core/res/res/drawable-xhdpi/kg_bouncer_bg_white.9.png b/core/res/res/drawable-xhdpi/kg_bouncer_bg_white.9.png Binary files differnew file mode 100644 index 0000000..9c4a603 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_bouncer_bg_white.9.png diff --git a/core/res/res/drawable-xhdpi/kg_security_grip.9.png b/core/res/res/drawable-xhdpi/kg_security_grip.9.png Binary files differnew file mode 100644 index 0000000..b5cd134 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_security_grip.9.png diff --git a/core/res/res/drawable-xhdpi/kg_security_lock.png b/core/res/res/drawable-xhdpi/kg_security_lock.png Binary files differnew file mode 100644 index 0000000..4544584 --- /dev/null +++ b/core/res/res/drawable-xhdpi/kg_security_lock.png diff --git a/core/res/res/drawable-xhdpi/security_frame.9.png b/core/res/res/drawable-xhdpi/security_frame.9.png Binary files differnew file mode 100644 index 0000000..9eeadc4 --- /dev/null +++ b/core/res/res/drawable-xhdpi/security_frame.9.png diff --git a/core/res/res/drawable-xhdpi/security_handle.png b/core/res/res/drawable-xhdpi/security_handle.png Binary files differnew file mode 100644 index 0000000..bd4640f --- /dev/null +++ b/core/res/res/drawable-xhdpi/security_handle.png diff --git a/core/res/res/drawable-xhdpi/sym_keyboard_return_holo.png b/core/res/res/drawable-xhdpi/sym_keyboard_return_holo.png Binary files differnew file mode 100644 index 0000000..55174e0 --- /dev/null +++ b/core/res/res/drawable-xhdpi/sym_keyboard_return_holo.png diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/core/res/res/layout-land/keyguard_host_view.xml index 521853f..980f699 100644 --- a/core/res/res/layout-land/keyguard_host_view.xml +++ b/core/res/res/layout-land/keyguard_host_view.xml @@ -21,30 +21,53 @@ and the security view. --> <com.android.internal.policy.impl.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/android" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="center_vertical" android:orientation="horizontal"> - <include layout="@layout/keyguard_widget_region" - android:layout_width="0dp" + <com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout + android:id="@+id/multi_pane_challenge" + android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_weight="@integer/kg_widget_region_weight" /> + android:clipChildren="false"> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper - android:id="@+id/view_flipper" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="@integer/kg_security_flipper_weight" - android:clipChildren="false" - android:clipToPadding="false" - android:paddingLeft="@dimen/keyguard_security_view_margin" - android:paddingTop="@dimen/keyguard_security_view_margin" - android:paddingRight="@dimen/keyguard_security_view_margin" - android:paddingBottom="@dimen/keyguard_security_view_margin" - android:gravity="center"> + <include layout="@layout/keyguard_widget_pager" + android:layout_width="match_parent" + android:layout_height="match_parent" + androidprv:layout_centerWithinArea="0.55" + androidprv:layout_childType="widget" + androidprv:layout_maxWidth="480dp" + androidprv:layout_maxHeight="480dp" /> + + <include layout="@layout/keyguard_multi_user_selector"/> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + <View android:layout_width="match_parent" + android:layout_height="match_parent" + androidprv:layout_childType="scrim" + android:background="#99000000" /> + <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + android:id="@+id/keyguard_security_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + androidprv:layout_childType="challenge" + androidprv:layout_centerWithinArea="0.55"> + <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + android:id="@+id/view_flipper" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clipChildren="false" + android:clipToPadding="false" + android:paddingLeft="@dimen/keyguard_security_view_margin" + android:paddingTop="@dimen/keyguard_security_view_margin" + android:paddingRight="@dimen/keyguard_security_view_margin" + android:paddingBottom="@dimen/keyguard_security_view_margin" + android:gravity="center"> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + + </com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout> </com.android.internal.policy.impl.keyguard.KeyguardHostView> + diff --git a/core/res/res/layout-port/keyguard_host_view.xml b/core/res/res/layout-port/keyguard_host_view.xml index 981fe6d..ccc1692 100644 --- a/core/res/res/layout-port/keyguard_host_view.xml +++ b/core/res/res/layout-port/keyguard_host_view.xml @@ -21,28 +21,56 @@ and the security view. --> <com.android.internal.policy.impl.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/android" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> - <include layout="@layout/keyguard_widget_region" + <com.android.internal.policy.impl.keyguard.SlidingChallengeLayout + android:id="@+id/sliding_layout" android:layout_width="match_parent" - android:layout_height="153dp" /> + android:layout_height="match_parent" + androidprv:dragHandle="@drawable/kg_security_grip" + androidprv:dragIcon="@drawable/kg_security_lock"> - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper - android:id="@+id/view_flipper" - android:layout_width="match_parent" - android:layout_height="0dip" - android:clipChildren="false" - android:clipToPadding="false" - android:layout_weight="1" - android:paddingLeft="@dimen/keyguard_security_view_margin" - android:paddingTop="@dimen/keyguard_security_view_margin" - android:paddingRight="@dimen/keyguard_security_view_margin" - android:paddingBottom="@dimen/keyguard_security_view_margin" - android:gravity="center"> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + <FrameLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + <include layout="@layout/keyguard_widget_pager" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center"/> + </FrameLayout> + + <View android:layout_width="match_parent" + android:layout_height="match_parent" + androidprv:layout_childType="scrim" + android:background="#99000000" /> + + <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + android:id="@+id/keyguard_security_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + androidprv:layout_childType="challenge" + android:layout_marginLeft="@dimen/kg_edge_swipe_region_size" + android:layout_marginRight="@dimen/kg_edge_swipe_region_size" + android:background="@drawable/kg_bouncer_bg_white" + android:gravity="bottom|center_horizontal"> + <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + android:id="@+id/view_flipper" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clipChildren="false" + android:clipToPadding="false" + android:paddingLeft="@dimen/keyguard_security_view_margin" + android:paddingTop="@dimen/keyguard_security_view_margin" + android:paddingRight="@dimen/keyguard_security_view_margin" + android:paddingBottom="@dimen/keyguard_security_view_margin" + android:gravity="center"> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + </com.android.internal.policy.impl.keyguard.SlidingChallengeLayout> </com.android.internal.policy.impl.keyguard.KeyguardHostView> diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml index 23c1e9c..9e5fc48 100644 --- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml +++ b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml @@ -21,33 +21,53 @@ and the security view. --> <com.android.internal.policy.impl.keyguard.KeyguardHostView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/android" android:id="@+id/keyguard_host_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="center_horizontal" - android:orientation="vertical"> + android:orientation="horizontal"> - <include layout="@layout/keyguard_widget_region" + <com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout + android:id="@+id/multi_pane_challenge" android:layout_width="match_parent" - android:layout_height="0dip" - android:layout_weight="@integer/kg_widget_region_weight" /> - - <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper - android:id="@+id/view_flipper" - android:layout_width="match_parent" - android:layout_height="0dip" - android:layout_weight="@integer/kg_security_flipper_weight" + android:layout_height="match_parent" android:clipChildren="false" - android:clipToPadding="false" - android:paddingLeft="@dimen/keyguard_security_view_margin" - android:paddingTop="@dimen/keyguard_security_view_margin" - android:paddingRight="@dimen/keyguard_security_view_margin" - android:paddingBottom="@dimen/keyguard_security_view_margin" - android:layout_gravity="center"> + android:orientation="vertical"> + <include layout="@layout/keyguard_widget_pager" + android:layout_width="match_parent" + android:layout_height="match_parent" + androidprv:layout_centerWithinArea="0.55" + androidprv:layout_childType="widget" + androidprv:layout_maxWidth="480dp" + androidprv:layout_maxHeight="480dp" /> + <include layout="@layout/keyguard_multi_user_selector"/> - </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + <View android:layout_width="match_parent" + android:layout_height="match_parent" + androidprv:layout_childType="scrim" + android:background="#99000000" /> -</com.android.internal.policy.impl.keyguard.KeyguardHostView> + <com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer + android:id="@+id/keyguard_security_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + androidprv:layout_childType="challenge" + android:layout_gravity="center_horizontal|bottom"> + <com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper + android:id="@+id/view_flipper" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clipChildren="false" + android:clipToPadding="false" + android:paddingLeft="@dimen/keyguard_security_view_margin" + android:paddingTop="@dimen/keyguard_security_view_margin" + android:paddingRight="@dimen/keyguard_security_view_margin" + android:paddingBottom="@dimen/keyguard_security_view_margin" + android:gravity="center"> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityViewFlipper> + </com.android.internal.policy.impl.keyguard.KeyguardSecurityContainer> + </com.android.internal.policy.impl.keyguard.MultiPaneChallengeLayout> +</com.android.internal.policy.impl.keyguard.KeyguardHostView> diff --git a/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml b/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml index 1eef099..930b14e 100644 --- a/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml +++ b/core/res/res/layout-sw600dp/keyguard_glow_pad_container.xml @@ -18,7 +18,7 @@ --> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <include layout="@layout/keyguard_glow_pad_view" - android:layout_width="@dimen/kg_glow_pad_size" - android:layout_height="@dimen/kg_glow_pad_size" + android:layout_width="wrap_content" + android:layout_height="wrap_content" android:layout_gravity="center" /> </merge>
\ No newline at end of file diff --git a/core/res/res/layout/keyguard_add_widget.xml b/core/res/res/layout/keyguard_add_widget.xml new file mode 100644 index 0000000..6345e89 --- /dev/null +++ b/core/res/res/layout/keyguard_add_widget.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2009, 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. +*/ +--> + +<!-- This is a view that shows general status information in Keyguard. --> +<com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/keyguard_add_widget" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_horizontal"> + <ImageView + android:id="@+id/keyguard_add_widget_view" + android:clickable="true" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@drawable/add_widget" /> +</com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame>
\ No newline at end of file diff --git a/core/res/res/layout/keyguard_emergency_carrier_area_and_recovery.xml b/core/res/res/layout/keyguard_emergency_carrier_area_and_recovery.xml index 68840ab..eeb4178 100644 --- a/core/res/res/layout/keyguard_emergency_carrier_area_and_recovery.xml +++ b/core/res/res/layout/keyguard_emergency_carrier_area_and_recovery.xml @@ -61,7 +61,7 @@ android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" - android:drawableLeft="@drawable/lockscreen_forgot_password_button" + android:drawableLeft="@*android:drawable/lockscreen_forgot_password_button" style="?android:attr/buttonBarButtonStyle" android:textSize="@dimen/kg_status_line_font_size" android:textColor="?android:attr/textColorSecondary" diff --git a/core/res/res/layout/keyguard_face_unlock_view.xml b/core/res/res/layout/keyguard_face_unlock_view.xml index 845c265..00f14f5 100644 --- a/core/res/res/layout/keyguard_face_unlock_view.xml +++ b/core/res/res/layout/keyguard_face_unlock_view.xml @@ -39,7 +39,7 @@ android:id="@+id/spotlightMask" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/facelock_spotlight_mask" + android:background="@*android:color/facelock_spotlight_mask" /> <ImageButton @@ -50,7 +50,7 @@ android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:background="#00000000" - android:src="@drawable/ic_facial_backup" + android:src="@*android:drawable/ic_facial_backup" /> </RelativeLayout> diff --git a/core/res/res/layout/keyguard_multi_user_avatar.xml b/core/res/res/layout/keyguard_multi_user_avatar.xml index 0e851e3..2d8f02d 100644 --- a/core/res/res/layout/keyguard_multi_user_avatar.xml +++ b/core/res/res/layout/keyguard_multi_user_avatar.xml @@ -20,35 +20,26 @@ <!-- This is a view that shows general status information in Keyguard. --> <com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="125dp" - android:layout_height="125dp" - android:background="#000000" + android:layout_width="@dimen/keyguard_avatar_size" + android:layout_height="@dimen/keyguard_avatar_size" + android:background="#00000000" android:gravity="center_horizontal"> <ImageView android:id="@+id/keyguard_user_avatar" - android:scaleType="centerCrop" + android:scaleType="center" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"/> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="0.78" /> - <TextView - android:id="@+id/keyguard_user_name" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="0.22" - android:paddingLeft="6dp" - android:layout_gravity="center_vertical|left" - android:textSize="16sp" - android:textColor="#ffffff" - android:singleLine="true" - android:ellipsize="end" - android:background="#808080" /> - </LinearLayout> -</com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar>
\ No newline at end of file + <TextView + android:id="@+id/keyguard_user_name" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:gravity="center" + android:textSize="@dimen/keyguard_avatar_name_size" + android:textColor="#ffffff" + android:singleLine="true" + android:ellipsize="end" + android:paddingLeft="2dp" + android:paddingRight="2dp" /> +</com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar> diff --git a/core/res/res/layout/keyguard_multi_user_selector.xml b/core/res/res/layout/keyguard_multi_user_selector.xml index 5a6e998..ee01285 100644 --- a/core/res/res/layout/keyguard_multi_user_selector.xml +++ b/core/res/res/layout/keyguard_multi_user_selector.xml @@ -17,18 +17,23 @@ */ --> <com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView + xmlns:androidprv="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" + androidprv:layout_childType="userSwitcher" + android:id="@+id/keyguard_user_selector" android:orientation="horizontal" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center" - android:contentDescription="@string/keyguard_accessibility_user_selector"> + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:contentDescription="@*android:string/keyguard_accessibility_user_selector" + android:visibility="gone"> - <com.android.internal.policy.impl.keyguard.KeyguardSubdivisionLayout + <com.android.internal.policy.impl.keyguard.KeyguardLinearLayout android:id="@+id/keyguard_users_grid" android:orientation="horizontal" - android:layout_width="300dp" - android:layout_height="300dp" - android:layout_gravity="center" /> + android:layout_width="wrap_content" + android:layout_marginBottom="@dimen/keyguard_muliuser_selector_margin" + android:layout_height="@dimen/keyguard_avatar_size" + android:layout_gravity="center|bottom" /> -</com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView>
\ No newline at end of file +</com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView> diff --git a/core/res/res/layout/keyguard_multi_user_selector_widget.xml b/core/res/res/layout/keyguard_multi_user_selector_widget.xml index ad9fdfe..fc126fe 100644 --- a/core/res/res/layout/keyguard_multi_user_selector_widget.xml +++ b/core/res/res/layout/keyguard_multi_user_selector_widget.xml @@ -23,7 +23,4 @@ android:id="@+id/keyguard_multi_user_selector" android:layout_width="match_parent" android:layout_height="match_parent"> - - <include layout="@layout/keyguard_multi_user_selector"/> - </com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame>
\ No newline at end of file diff --git a/core/res/res/layout/keyguard_password_view.xml b/core/res/res/layout/keyguard_password_view.xml index 81916f7..e28f2ac 100644 --- a/core/res/res/layout/keyguard_password_view.xml +++ b/core/res/res/layout/keyguard_password_view.xml @@ -77,18 +77,6 @@ android:imeOptions="flagForceAscii|actionDone" /> - <!-- This delete button is only visible for numeric PIN entry --> - <ImageButton android:id="@+id/delete_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:src="@*android:drawable/ic_input_delete" - android:clickable="true" - android:padding="8dip" - android:background="?android:attr/selectableItemBackground" - android:visibility="gone" - /> - <ImageView android:id="@+id/switch_ime_button" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -101,20 +89,6 @@ /> </LinearLayout> - - <!-- Numeric keyboard --> - <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginStart="4dip" - android:layout_marginEnd="4dip" - android:paddingTop="4dip" - android:paddingBottom="4dip" - android:background="#40000000" - android:keyBackground="@*android:drawable/btn_keyboard_key_ics" - android:visibility="gone" - android:clickable="true" - /> </LinearLayout> </LinearLayout> </FrameLayout> diff --git a/core/res/res/layout/keyguard_pin_view.xml b/core/res/res/layout/keyguard_pin_view.xml new file mode 100644 index 0000000..9b883af --- /dev/null +++ b/core/res/res/layout/keyguard_pin_view.xml @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2012, 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. +*/ +--> + +<com.android.internal.policy.impl.keyguard.KeyguardPINView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/res/android" + android:id="@+id/keyguard_pin_view" + android:layout_width="350dp" + android:layout_height="350dp" + android:orientation="vertical" + > + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:orientation="horizontal" + android:layout_weight="1" + > + <TextView android:id="@+id/passwordEntry" + android:editable="true" + android:layout_width="0dip" + android:layout_height="match_parent" + android:layout_weight="1" + android:gravity="center" + android:layout_marginStart="@*android:dimen/keyguard_lockscreen_pin_margin_left" + android:singleLine="true" + android:cursorVisible="false" + android:background="@null" + android:textAppearance="@android:style/TextAppearance.NumPadKey" + android:imeOptions="flagForceAscii|actionDone" + /> + <ImageButton android:id="@+id/delete_button" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:src="@*android:drawable/ic_input_delete" + android:clickable="true" + android:paddingTop="8dip" + android:paddingBottom="8dip" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:background="?android:attr/selectableItemBackground" + /> + </LinearLayout> + <View + android:layout_width="wrap_content" + android:layout_height="1dp" + android:background="#55FFFFFF" + /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="horizontal" + > + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key1" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="1" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key2" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="2" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key3" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="3" + /> + </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="horizontal" + > + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key4" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="4" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key5" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="5" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key6" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="6" + /> + </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:orientation="horizontal" + android:layout_weight="1" + > + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key7" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="7" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key8" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="8" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key9" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="9" + /> + </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="horizontal" + > + <Space + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + /> + <view class="com.android.internal.policy.impl.keyguard.NumPadKey" + android:id="@+id/key0" + style="@style/Widget.Button.NumPadKey" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + androidprv:textView="@+id/passwordEntry" + androidprv:digit="0" + /> + <ImageButton + android:id="@+id/key_enter" + style="@android:style/Widget.Button.NumPadKey" + android:gravity="center" + android:layout_width="0px" + android:layout_height="match_parent" + android:layout_weight="1" + android:src="@drawable/sym_keyboard_return_holo" + /> + </LinearLayout> + + <include layout="@layout/keyguard_emergency_carrier_area_and_recovery" + android:id="@+id/keyguard_selector_fade_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_gravity="bottom|center_horizontal" + android:gravity="center_horizontal" /> + +</com.android.internal.policy.impl.keyguard.KeyguardPINView> diff --git a/core/res/res/layout/keyguard_status_view.xml b/core/res/res/layout/keyguard_status_view.xml index 1de0f6c..9532a88 100644 --- a/core/res/res/layout/keyguard_status_view.xml +++ b/core/res/res/layout/keyguard_status_view.xml @@ -35,7 +35,7 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" + android:layout_gravity="center_horizontal|top" android:orientation="vertical"> <com.android.internal.policy.impl.keyguard.ClockView android:id="@+id/clock_view" diff --git a/core/res/res/layout/keyguard_transport_control_view.xml b/core/res/res/layout/keyguard_transport_control_view.xml index 5a6083a..532322c 100644 --- a/core/res/res/layout/keyguard_transport_control_view.xml +++ b/core/res/res/layout/keyguard_transport_control_view.xml @@ -26,8 +26,8 @@ <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" - android:foreground="@drawable/ic_lockscreen_player_background" - android:contentDescription="@string/keygaurd_accessibility_media_controls"> + android:foreground="@*android:drawable/ic_lockscreen_player_background" + android:contentDescription="@*android:string/keygaurd_accessibility_media_controls"> <!-- Use ImageView for its cropping features; otherwise could be android:background --> <ImageView android:id="@+id/albumart" @@ -70,11 +70,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:src="@drawable/ic_media_previous" + android:src="@*android:drawable/ic_media_previous" android:clickable="true" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_prev_description"/> + android:contentDescription="@*android:string/lockscreen_transport_prev_description"/> </FrameLayout> <FrameLayout android:layout_width="wrap_content" @@ -86,10 +86,10 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:clickable="true" - android:src="@drawable/ic_media_play" + android:src="@*android:drawable/ic_media_play" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_play_description"/> + android:contentDescription="@*android:string/lockscreen_transport_play_description"/> </FrameLayout> <FrameLayout android:layout_width="wrap_content" @@ -101,10 +101,10 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:clickable="true" - android:src="@drawable/ic_media_next" + android:src="@*android:drawable/ic_media_next" android:background="?android:attr/selectableItemBackground" android:padding="10dip" - android:contentDescription="@string/lockscreen_transport_next_description"/> + android:contentDescription="@*android:string/lockscreen_transport_next_description"/> </FrameLayout> </LinearLayout> </LinearLayout> diff --git a/core/res/res/layout/keyguard_widget_pager.xml b/core/res/res/layout/keyguard_widget_pager.xml new file mode 100644 index 0000000..6662f83 --- /dev/null +++ b/core/res/res/layout/keyguard_widget_pager.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2012, 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. +*/ +--> + +<!-- This is the selector widget that allows the user to select an action. --> +<com.android.internal.policy.impl.keyguard.KeyguardWidgetPager + xmlns:androidprv="http://schemas.android.com/apk/res/android" + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/app_widget_container" + android:paddingLeft="25dp" + android:paddingRight="25dp" + android:paddingTop="25dp" + android:paddingBottom="25dp" + android:clipChildren="false" + android:clipToPadding="false" + androidprv:pageSpacing="10dp"> +</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> diff --git a/core/res/res/layout/keyguard_widget_region.xml b/core/res/res/layout/keyguard_widget_region.xml deleted file mode 100644 index ed10c2b..0000000 --- a/core/res/res/layout/keyguard_widget_region.xml +++ /dev/null @@ -1,71 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -** -** Copyright 2012, 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. -*/ ---> - -<!-- This is the selector widget that allows the user to select an action. --> -<com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion - xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android" - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/kg_widget_region" - android:visibility="gone" - android:gravity="center" - android:orientation="vertical"> - <com.android.internal.policy.impl.keyguard.KeyguardWidgetPager - android:id="@+id/app_widget_container" - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:clipChildren="false" - android:clipToPadding="false"> - </com.android.internal.policy.impl.keyguard.KeyguardWidgetPager> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="10dp" - android:orientation="horizontal" - android:paddingLeft="@dimen/kg_widget_pager_horizontal_padding" - android:paddingRight="@dimen/kg_widget_pager_horizontal_padding" - android:layout_marginTop="@dimen/kg_runway_lights_top_margin" - android:visibility="gone"> - <com.android.internal.policy.impl.keyguard.KeyguardGlowStripView - android:id="@+id/left_strip" - android:paddingTop="@dimen/kg_runway_lights_vertical_padding" - android:paddingBottom="@dimen/kg_runway_lights_vertical_padding" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - prvandroid:numDots="5" - prvandroid:dotSize="@dimen/kg_runway_lights_height" - prvandroid:leftToRight="false" - prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" /> - <Space - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1.6"/> - <com.android.internal.policy.impl.keyguard.KeyguardGlowStripView - android:id="@+id/right_strip" - android:paddingTop="@dimen/kg_runway_lights_vertical_padding" - android:paddingBottom="@dimen/kg_runway_lights_vertical_padding" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" - prvandroid:numDots="5" - prvandroid:dotSize="@dimen/kg_runway_lights_height" - prvandroid:leftToRight="true" - prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" /> - </LinearLayout> -</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion> diff --git a/core/res/res/values-land/bools.xml b/core/res/res/values-land/bools.xml index b0630ad..85c64d9 100644 --- a/core/res/res/values-land/bools.xml +++ b/core/res/res/values-land/bools.xml @@ -15,6 +15,7 @@ --> <resources> + <bool name="kg_enable_camera_default_widget">false</bool> <bool name="kg_share_status_area">false</bool> <bool name="kg_sim_puk_account_full_screen">false</bool> </resources> diff --git a/core/res/res/values-sw600dp/bools.xml b/core/res/res/values-sw600dp/bools.xml index 3753aba..eae4f87 100644 --- a/core/res/res/values-sw600dp/bools.xml +++ b/core/res/res/values-sw600dp/bools.xml @@ -19,4 +19,6 @@ <bool name="show_ongoing_ime_switcher">true</bool> <bool name="kg_share_status_area">false</bool> <bool name="kg_sim_puk_account_full_screen">false</bool> + <!-- No camera for you, tablet user --> + <bool name="kg_enable_camera_default_widget">false</bool> </resources> diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml index 564545a..0d01df4 100644 --- a/core/res/res/values-sw600dp/dimens.xml +++ b/core/res/res/values-sw600dp/dimens.xml @@ -108,5 +108,9 @@ <dimen name="kg_runway_lights_top_margin">-10dp</dimen> <!-- Margin around the various security views --> - <dimen name="keyguard_security_view_margin">24dp</dimen> + <dimen name="keyguard_security_view_margin">12dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_muliuser_selector_margin">12dp</dimen> + </resources> diff --git a/core/res/res/values-sw720dp/dimens.xml b/core/res/res/values-sw720dp/dimens.xml index 6144961..d6d2b66 100644 --- a/core/res/res/values-sw720dp/dimens.xml +++ b/core/res/res/values-sw720dp/dimens.xml @@ -101,5 +101,15 @@ <dimen name="kg_runway_lights_top_margin">-30dp</dimen> <!-- Margin around the various security views --> - <dimen name="keyguard_security_view_margin">100dp</dimen> + <dimen name="keyguard_muliuser_selector_margin">24dp</dimen> + + <!-- Stroke width of the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_stroke_width">3dp</dimen> + + <!-- Size of the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_size">88dp</dimen> + + <!-- Size of the text under the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_name_size">12sp</dimen> + </resources> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 8615476..8744bfe 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -398,4 +398,17 @@ <item>@null</item> </array> + <!-- list of 3- or 4-letter mnemonics for a 10-key numeric keypad --> + <string-array translatable="false" name="lockscreen_num_pad_klondike"> + <item></item><!-- 0 --> + <item></item><!-- 1 --> + <item>ABC</item><!-- 2 --> + <item>DEF</item><!-- 3 --> + <item>GHI</item><!-- 4 --> + <item>JKL</item><!-- 5 --> + <item>MNO</item><!-- 6 --> + <item>PQRS</item><!-- 7 --> + <item>TUV</item><!-- 8 --> + <item>WXYZ</item><!-- 9 --> + </string-array> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 3550df9..48d4745 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5464,6 +5464,8 @@ <!-- Used when the handle shouldn't wait to be hit before following the finger --> <attr name="alwaysTrackFinger"/> + + <attr name="gravity" /> </declare-styleable> <!-- =============================== --> @@ -5759,14 +5761,6 @@ <!-- PagedView specific attributes. These attributes are used to customize a PagedView view in XML files. --> <declare-styleable name="PagedView"> - <!-- A spacing override for the icons within a page --> - <attr name="pageLayoutWidthGap" format="dimension" /> - <attr name="pageLayoutHeightGap" format="dimension" /> - <!-- The padding of the pages that are dynamically created per page --> - <attr name="pageLayoutPaddingTop" format="dimension" /> - <attr name="pageLayoutPaddingBottom" format="dimension" /> - <attr name="pageLayoutPaddingLeft" format="dimension" /> - <attr name="pageLayoutPaddingRight" format="dimension" /> <!-- The space between adjacent pages of the PagedView. --> <attr name="pageSpacing" format="dimension" /> <!-- The padding for the scroll indicator area --> @@ -5781,10 +5775,58 @@ <attr name="leftToRight" format="boolean" /> </declare-styleable> + <!-- Some child types have special behavior. --> + <attr name="layout_childType"> + <!-- No special behavior. Layout will proceed as normal. --> + <enum name="none" value="0" /> + <!-- Widget container. + This will be resized in response to certain events. --> + <enum name="widget" value="1" /> + <!-- Security challenge container. + This will be dismissed/shown in response to certain events, + possibly obscuring widget elements. --> + <enum name="challenge" value="2" /> + <!-- User switcher. + This will consume space from the total layout area. --> + <enum name="userSwitcher" value="3" /> + <!-- Scrim. This will block access to child views that + come before it in the child list in bouncer mode. --> + <enum name="scrim" value="4" /> + </attr> + + <declare-styleable name="SlidingChallengeLayout"> + <attr name="dragHandle" format="reference" /> + <attr name="dragIcon" format="reference" /> + </declare-styleable> + + <declare-styleable name="SlidingChallengeLayout_Layout"> + <attr name="layout_childType" /> + </declare-styleable> + <!-- Attributes that can be used with <code><FragmentBreadCrumbs></code> tags. --> <declare-styleable name="FragmentBreadCrumbs"> <attr name="gravity" /> </declare-styleable> + <declare-styleable name="MultiPaneChallengeLayout"> + <!-- Influences how layout_centerWithinArea behaves --> + <attr name="orientation" /> + </declare-styleable> + + <declare-styleable name="MultiPaneChallengeLayout_Layout"> + <!-- Percentage of the screen this child should consume or center within. + If 0/default, the view will be measured by standard rules + as if this were a FrameLayout. --> + <attr name="layout_centerWithinArea" format="float" /> + <attr name="layout_childType" /> + <attr name="layout_gravity" /> + <attr name="layout_maxWidth" format="dimension" /> + <attr name="layout_maxHeight" /> + </declare-styleable> + + <declare-styleable name="NumPadKey"> + <attr name="digit" format="integer" /> + <attr name="textView" format="reference" /> + </declare-styleable> </resources> diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index f9762b1..d4ead01 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -15,6 +15,7 @@ --> <resources> + <bool name="kg_enable_camera_default_widget">true</bool> <bool name="action_bar_embed_tabs">true</bool> <bool name="action_bar_embed_tabs_pre_jb">false</bool> <bool name="split_action_bar_is_narrow">true</bool> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 6a93f30..b19e23d 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -190,5 +190,10 @@ <drawable name="notification_template_icon_bg">#3333B5E5</drawable> <drawable name="notification_template_icon_low_bg">#0cffffff</drawable> + <!-- Keyguard colors --> + <color name="keyguard_avatar_frame_color">#ffffffff</color> + <color name="keyguard_avatar_frame_shadow_color">#80000000</color> + <color name="keyguard_avatar_nick_color">#ffffffff</color> + <color name="keyguard_avatar_frame_pressed_color">#ff35b5e5</color> </resources> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 948a3d3..8671ee8 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -242,8 +242,8 @@ <dimen name="notification_subtext_size">12dp</dimen> <!-- Keyguard dimensions --> - <!-- Width of security view in keyguard. --> - <dimen name="kg_glow_pad_size">500dp</dimen> + <!-- TEMP --> + <dimen name="kg_security_panel_height">600dp</dimen> <!-- Height of security view in keyguard. --> <dimen name="kg_security_view_height">0dp</dimen> @@ -305,4 +305,23 @@ <!-- Margin around the various security views --> <dimen name="keyguard_security_view_margin">8dp</dimen> + + <!-- Margin around the various security views --> + <dimen name="keyguard_muliuser_selector_margin">8dp</dimen> + + <!-- Stroke width of the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_stroke_width">2dp</dimen> + + <!-- Shadow radius under the frame for the circular avatars. --> + <dimen name="keyguard_avatar_frame_shadow_radius">1dp</dimen> + + <!-- Size of the avator on hte multiuser lockscreen. --> + <dimen name="keyguard_avatar_size">66dp</dimen> + + <!-- Size of the text under the avator on the multiuser lockscreen. --> + <dimen name="keyguard_avatar_name_size">10sp</dimen> + + <!-- Size of the region along the edge of the screen that will accept + swipes to scroll the widget area. --> + <dimen name="kg_edge_swipe_region_size">16dp</dimen> </resources> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 4371aec..da26e6a 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -2478,4 +2478,29 @@ please see styles_device_defaults.xml. <item name="android:contentDescription">@android:string/media_route_button_content_description</item> </style> + <!-- Keyguard PIN pad styles --> + <style name="Widget.Button.NumPadKey" + parent="@android:style/Widget.Button"> + <item name="android:singleLine">true</item> + <item name="android:padding">6dip</item> + <item name="android:gravity">left|center_vertical</item> + <item name="android:background">?android:attr/selectableItemBackground</item> + <item name="android:textSize">34dp</item> + <item name="android:fontFamily">sans-serif</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#ffffff</item> + </style> + <style name="TextAppearance.NumPadKey" + parent="@android:style/TextAppearance"> + <item name="android:textSize">34dp</item> + <item name="android:fontFamily">sans-serif</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#ffffff</item> + </style> + <style name="TextAppearance.NumPadKey.Klondike"> + <item name="android:textSize">20dp</item> + <item name="android:fontFamily">sans-serif-condensed</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">#80ffffff</item> + </style> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 8ef91df..f518e7f 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -962,6 +962,7 @@ <java-symbol type="drawable" name="status_bar_background" /> <java-symbol type="drawable" name="sym_keyboard_shift" /> <java-symbol type="drawable" name="sym_keyboard_shift_locked" /> + <java-symbol type="drawable" name="sym_keyboard_return_holo" /> <java-symbol type="drawable" name="tab_bottom_left" /> <java-symbol type="drawable" name="tab_bottom_left_v4" /> <java-symbol type="drawable" name="tab_bottom_right" /> @@ -1086,8 +1087,8 @@ <java-symbol type="layout" name="notification_template_inbox" /> <java-symbol type="layout" name="keyguard_multi_user_avatar" /> <java-symbol type="layout" name="keyguard_multi_user_selector_widget" /> - <java-symbol type="layout" name="keyguard_widget_region" /> <java-symbol type="layout" name="sms_short_code_confirmation_dialog" /> + <java-symbol type="layout" name="keyguard_add_widget" /> <java-symbol type="anim" name="slide_in_child_bottom" /> <java-symbol type="anim" name="slide_in_right" /> @@ -1177,6 +1178,7 @@ <java-symbol type="array" name="lockscreen_targets_when_silent" /> <java-symbol type="array" name="lockscreen_targets_when_soundon" /> <java-symbol type="array" name="lockscreen_targets_with_camera" /> + <java-symbol type="array" name="lockscreen_num_pad_klondike" /> <java-symbol type="attr" name="actionModePopupWindowStyle" /> <java-symbol type="attr" name="dialogCustomTitleDecorLayout" /> <java-symbol type="attr" name="dialogTitleDecorLayout" /> @@ -1191,12 +1193,17 @@ <java-symbol type="bool" name="config_lidControlsSleep" /> <java-symbol type="bool" name="config_reverseDefaultRotation" /> <java-symbol type="bool" name="config_showNavigationBar" /> + <java-symbol type="bool" name="kg_enable_camera_default_widget" /> <java-symbol type="bool" name="kg_share_status_area" /> - <java-symbol type="bool" name="kg_sim_puk_account_full_screen" /> + <java-symbol type="bool" name="kg_sim_puk_account_full_screen" /> <java-symbol type="bool" name="target_honeycomb_needs_options_menu" /> <java-symbol type="color" name="kg_multi_user_text_active" /> <java-symbol type="color" name="kg_multi_user_text_inactive" /> <java-symbol type="color" name="kg_widget_pager_gradient" /> + <java-symbol type="color" name="keyguard_avatar_frame_color" /> + <java-symbol type="color" name="keyguard_avatar_frame_pressed_color" /> + <java-symbol type="color" name="keyguard_avatar_frame_shadow_color" /> + <java-symbol type="color" name="keyguard_avatar_nick_color" /> <java-symbol type="dimen" name="navigation_bar_height" /> <java-symbol type="dimen" name="navigation_bar_height_landscape" /> <java-symbol type="dimen" name="navigation_bar_width" /> @@ -1204,6 +1211,10 @@ <java-symbol type="dimen" name="kg_widget_pager_horizontal_padding" /> <java-symbol type="dimen" name="kg_widget_pager_top_padding" /> <java-symbol type="dimen" name="kg_widget_pager_bottom_padding" /> + <java-symbol type="dimen" name="keyguard_avatar_size" /> + <java-symbol type="dimen" name="keyguard_avatar_frame_stroke_width" /> + <java-symbol type="dimen" name="keyguard_avatar_frame_shadow_radius" /> + <java-symbol type="dimen" name="kg_edge_swipe_region_size" /> <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_unlock" /> @@ -1222,6 +1233,7 @@ <java-symbol type="drawable" name="magnified_region_frame" /> <java-symbol type="drawable" name="menu_background" /> <java-symbol type="drawable" name="stat_sys_secure" /> + <java-symbol type="drawable" name="security_frame" /> <java-symbol type="id" name="action_mode_bar_stub" /> <java-symbol type="id" name="alarm_status" /> <java-symbol type="id" name="backspace" /> @@ -1280,6 +1292,7 @@ <java-symbol type="id" name="keyguard_selector_view" /> <java-symbol type="id" name="keyguard_pattern_view" /> <java-symbol type="id" name="keyguard_password_view" /> + <java-symbol type="id" name="keyguard_pin_view" /> <java-symbol type="id" name="keyguard_face_unlock_view" /> <java-symbol type="id" name="keyguard_sim_pin_view" /> <java-symbol type="id" name="keyguard_sim_puk_view" /> @@ -1304,12 +1317,15 @@ <java-symbol type="id" name="keyguard_users_grid" /> <java-symbol type="id" name="clock_text" /> <java-symbol type="id" name="clock_view" /> - <java-symbol type="id" name="kg_widget_region" /> - <java-symbol type="id" name="left_strip" /> - <java-symbol type="id" name="right_strip" /> <java-symbol type="id" name="keyguard_multi_user_selector" /> <java-symbol type="id" name="status_security_message" /> - + <java-symbol type="id" name="sliding_layout" /> + <java-symbol type="id" name="keyguard_add_widget" /> + <java-symbol type="id" name="keyguard_add_widget_view" /> + <java-symbol type="id" name="sliding_layout" /> + <java-symbol type="id" name="multi_pane_challenge" /> + <java-symbol type="id" name="keyguard_user_selector" /> + <java-symbol type="id" name="key_enter" /> <java-symbol type="integer" name="config_carDockRotation" /> <java-symbol type="integer" name="config_defaultUiModeType" /> <java-symbol type="integer" name="config_deskDockRotation" /> @@ -1334,6 +1350,7 @@ <java-symbol type="layout" name="keyguard_selector_view" /> <java-symbol type="layout" name="keyguard_pattern_view" /> <java-symbol type="layout" name="keyguard_password_view" /> + <java-symbol type="layout" name="keyguard_pin_view" /> <java-symbol type="layout" name="keyguard_face_unlock_view" /> <java-symbol type="layout" name="keyguard_sim_pin_view" /> <java-symbol type="layout" name="keyguard_sim_puk_view" /> @@ -1403,6 +1420,9 @@ <java-symbol type="style" name="Animation.LockScreen" /> <java-symbol type="style" name="Theme.Dialog.RecentApplications" /> <java-symbol type="style" name="Theme.ExpandedMenu" /> + <java-symbol type="style" name="Widget.Button.NumPadKey" /> + <java-symbol type="style" name="TextAppearance.NumPadKey" /> + <java-symbol type="style" name="TextAppearance.NumPadKey.Klondike" /> <java-symbol type="string" name="kg_emergency_call_label" /> <java-symbol type="string" name="kg_forgot_pattern_button_text" /> <java-symbol type="string" name="kg_wrong_pattern" /> |
