Merge "Fixed several bugs introduced by the new background views."
diff --git a/api/current.txt b/api/current.txt
index eda087d..8cf132d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -10908,7 +10908,6 @@
method public void applyTheme(android.content.res.Resources.Theme);
method public boolean canApplyTheme();
method public void clearColorFilter();
- method public void clearHotspots();
method public final void copyBounds(android.graphics.Rect);
method public final android.graphics.Rect copyBounds();
method public static android.graphics.drawable.Drawable createFromPath(java.lang.String);
@@ -10951,7 +10950,6 @@
method protected void onBoundsChange(android.graphics.Rect);
method protected boolean onLevelChange(int);
method protected boolean onStateChange(int[]);
- method public void removeHotspot(int);
method public static int resolveOpacity(int, int);
method public void scheduleSelf(java.lang.Runnable, long);
method public abstract void setAlpha(int);
@@ -10964,11 +10962,11 @@
method public void setColorFilter(int, android.graphics.PorterDuff.Mode);
method public void setDither(boolean);
method public void setFilterBitmap(boolean);
- method public void setHotspot(int, float, float);
+ method public void setHotspot(float, float);
+ method public void setHotspotBounds(int, int, int, int);
method public final boolean setLevel(int);
method public boolean setState(int[]);
method public boolean setVisible(boolean, boolean);
- method public boolean supportsHotspots();
method public void unscheduleSelf(java.lang.Runnable);
}
@@ -11027,30 +11025,6 @@
method public final void setVariablePadding(boolean);
}
- public class DrawableWrapper extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
- ctor public DrawableWrapper();
- method public void draw(android.graphics.Canvas);
- method public android.graphics.Rect getDirtyBounds();
- method protected final android.graphics.drawable.Drawable getDrawable();
- method public int getOpacity();
- method public final int[] getState();
- method public void invalidateDrawable(android.graphics.drawable.Drawable);
- method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
- method public void setAlpha(int);
- method public final void setBounds(int, int, int, int);
- method public final void setBounds(android.graphics.Rect);
- method public void setColorFilter(android.graphics.ColorFilter);
- method protected void setConstantState(android.graphics.drawable.DrawableWrapper.WrapperState, android.content.res.Resources);
- method protected final void setDrawable(android.graphics.drawable.Drawable, android.content.res.Resources);
- method public final boolean setState(int[]);
- method public void setXfermode(android.graphics.Xfermode);
- method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
- }
-
- public static abstract class DrawableWrapper.WrapperState extends android.graphics.drawable.Drawable.ConstantState {
- method public int getChangingConfigurations();
- }
-
public class GradientDrawable extends android.graphics.drawable.Drawable {
ctor public GradientDrawable();
ctor public GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation, int[]);
@@ -11174,6 +11148,13 @@
method public void setPicture(android.graphics.Picture);
}
+ public class RippleDrawable extends android.graphics.drawable.LayerDrawable {
+ method public android.graphics.Rect getDirtyBounds();
+ method public android.content.res.ColorStateList getTint();
+ method public void setTint(android.content.res.ColorStateList);
+ method public void setTintMode(android.graphics.PorterDuff.Mode);
+ }
+
public class RotateDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
ctor public RotateDrawable();
method public void draw(android.graphics.Canvas);
@@ -11243,13 +11224,6 @@
method public void addState(int[], android.graphics.drawable.Drawable);
}
- public class TouchFeedbackDrawable extends android.graphics.drawable.LayerDrawable {
- method public android.graphics.Rect getDirtyBounds();
- method public android.content.res.ColorStateList getTint();
- method public void setTint(android.content.res.ColorStateList);
- method public void setTintMode(android.graphics.PorterDuff.Mode);
- }
-
public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback {
ctor public TransitionDrawable(android.graphics.drawable.Drawable[]);
method public boolean isCrossFadeEnabled();
@@ -14065,6 +14039,34 @@
field public static final int H263ProfileISWV3 = 16; // 0x10
field public static final int H263ProfileInterlace = 128; // 0x80
field public static final int H263ProfileInternet = 64; // 0x40
+ field public static final int HEVCHighTierLevel1 = 2; // 0x2
+ field public static final int HEVCHighTierLevel2 = 8; // 0x8
+ field public static final int HEVCHighTierLevel21 = 32; // 0x20
+ field public static final int HEVCHighTierLevel3 = 128; // 0x80
+ field public static final int HEVCHighTierLevel31 = 512; // 0x200
+ field public static final int HEVCHighTierLevel4 = 2048; // 0x800
+ field public static final int HEVCHighTierLevel41 = 8192; // 0x2000
+ field public static final int HEVCHighTierLevel5 = 32768; // 0x8000
+ field public static final int HEVCHighTierLevel51 = 131072; // 0x20000
+ field public static final int HEVCHighTierLevel52 = 524288; // 0x80000
+ field public static final int HEVCHighTierLevel6 = 2097152; // 0x200000
+ field public static final int HEVCHighTierLevel61 = 8388608; // 0x800000
+ field public static final int HEVCHighTierLevel62 = 33554432; // 0x2000000
+ field public static final int HEVCMainTierLevel1 = 1; // 0x1
+ field public static final int HEVCMainTierLevel2 = 4; // 0x4
+ field public static final int HEVCMainTierLevel21 = 16; // 0x10
+ field public static final int HEVCMainTierLevel3 = 64; // 0x40
+ field public static final int HEVCMainTierLevel31 = 256; // 0x100
+ field public static final int HEVCMainTierLevel4 = 1024; // 0x400
+ field public static final int HEVCMainTierLevel41 = 4096; // 0x1000
+ field public static final int HEVCMainTierLevel5 = 16384; // 0x4000
+ field public static final int HEVCMainTierLevel51 = 65536; // 0x10000
+ field public static final int HEVCMainTierLevel52 = 262144; // 0x40000
+ field public static final int HEVCMainTierLevel6 = 1048576; // 0x100000
+ field public static final int HEVCMainTierLevel61 = 4194304; // 0x400000
+ field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000
+ field public static final int HEVCProfileMain = 1; // 0x1
+ field public static final int HEVCProfileMain10 = 2; // 0x2
field public static final int MPEG4Level0 = 1; // 0x1
field public static final int MPEG4Level0b = 2; // 0x2
field public static final int MPEG4Level1 = 4; // 0x4
@@ -23625,7 +23627,7 @@
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned";
field public static final java.lang.String HTTP_PROXY = "http_proxy";
- field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+ field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
field public static final java.lang.String MODE_RINGER = "mode_ringer";
field public static final java.lang.String NETWORK_PREFERENCE = "network_preference";
field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth";
@@ -23695,7 +23697,7 @@
field public static final java.lang.String ENABLED_INPUT_METHODS = "enabled_input_methods";
field public static final deprecated java.lang.String HTTP_PROXY = "http_proxy";
field public static final java.lang.String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility";
- field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+ field public static final java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
field public static final java.lang.String LOCATION_MODE = "location_mode";
field public static final int LOCATION_MODE_BATTERY_SAVING = 2; // 0x2
field public static final int LOCATION_MODE_HIGH_ACCURACY = 3; // 0x3
@@ -30662,6 +30664,7 @@
field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
field public static final int SOURCE_DPAD = 513; // 0x201
field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+ field public static final int SOURCE_HDMI = 33554433; // 0x2000001
field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
field public static final int SOURCE_KEYBOARD = 257; // 0x101
field public static final int SOURCE_MOUSE = 8194; // 0x2002
@@ -30830,6 +30833,8 @@
field public static final deprecated int FLAG_WOKE_HERE = 1; // 0x1
field public static final int KEYCODE_0 = 7; // 0x7
field public static final int KEYCODE_1 = 8; // 0x8
+ field public static final int KEYCODE_11 = 227; // 0xe3
+ field public static final int KEYCODE_12 = 228; // 0xe4
field public static final int KEYCODE_2 = 9; // 0x9
field public static final int KEYCODE_3 = 10; // 0xa
field public static final int KEYCODE_3D_MODE = 206; // 0xce
@@ -30949,6 +30954,7 @@
field public static final int KEYCODE_KATAKANA_HIRAGANA = 215; // 0xd7
field public static final int KEYCODE_L = 40; // 0x28
field public static final int KEYCODE_LANGUAGE_SWITCH = 204; // 0xcc
+ field public static final int KEYCODE_LAST_CHANNEL = 229; // 0xe5
field public static final int KEYCODE_LEFT_BRACKET = 71; // 0x47
field public static final int KEYCODE_M = 41; // 0x29
field public static final int KEYCODE_MANNER_MODE = 205; // 0xcd
@@ -30964,6 +30970,7 @@
field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59
field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56
+ field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2
field public static final int KEYCODE_MENU = 82; // 0x52
field public static final int KEYCODE_META_LEFT = 117; // 0x75
field public static final int KEYCODE_META_RIGHT = 118; // 0x76
@@ -31036,6 +31043,7 @@
field public static final int KEYCODE_T = 48; // 0x30
field public static final int KEYCODE_TAB = 61; // 0x3d
field public static final int KEYCODE_TV = 170; // 0xaa
+ field public static final int KEYCODE_TV_DATA_SERVICE = 230; // 0xe6
field public static final int KEYCODE_TV_INPUT = 178; // 0xb2
field public static final int KEYCODE_TV_POWER = 177; // 0xb1
field public static final int KEYCODE_U = 49; // 0x31
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e896063..2d03e1d 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1088,6 +1088,9 @@
MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT);
MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS);
MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS);
+
+ // At one time in System, then Global, but now back in Secure
+ MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS);
}
private static final HashSet<String> MOVED_TO_GLOBAL;
@@ -1102,7 +1105,6 @@
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.BLUETOOTH_ON);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DATA_ROAMING);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.DEVICE_PROVISIONED);
- MOVED_TO_SECURE_THEN_GLOBAL.add(Global.INSTALL_NON_MARKET_APPS);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.USB_MASS_STORAGE_ENABLED);
MOVED_TO_SECURE_THEN_GLOBAL.add(Global.HTTP_PROXY);
@@ -2573,10 +2575,10 @@
public static final String HTTP_PROXY = Global.HTTP_PROXY;
/**
- * @deprecated Use {@link android.provider.Settings.Global#INSTALL_NON_MARKET_APPS} instead
+ * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
*/
@Deprecated
- public static final String INSTALL_NON_MARKET_APPS = Global.INSTALL_NON_MARKET_APPS;
+ public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
/**
* @deprecated Use {@link android.provider.Settings.Secure#LOCATION_PROVIDERS_ALLOWED}
@@ -2814,7 +2816,6 @@
MOVED_TO_GLOBAL.add(Settings.Global.DISPLAY_SIZE_FORCED);
MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE);
MOVED_TO_GLOBAL.add(Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE);
- MOVED_TO_GLOBAL.add(Settings.Global.INSTALL_NON_MARKET_APPS);
MOVED_TO_GLOBAL.add(Settings.Global.MOBILE_DATA);
MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_BUCKET_DURATION);
MOVED_TO_GLOBAL.add(Settings.Global.NETSTATS_DEV_DELETE_AGE);
@@ -3404,10 +3405,13 @@
public static final String HTTP_PROXY = Global.HTTP_PROXY;
/**
- * @deprecated Use {@link android.provider.Settings.Global#INSTALL_NON_MARKET_APPS} instead
+ * Whether applications can be installed for this user via the system's
+ * {@link Intent#ACTION_INSTALL_PACKAGE} mechanism.
+ *
+ * <p>1 = permit app installation via the system package installer intent
+ * <p>0 = do not allow use of the package installer
*/
- @Deprecated
- public static final String INSTALL_NON_MARKET_APPS = Global.INSTALL_NON_MARKET_APPS;
+ public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
/**
* Comma-separated list of location providers that activities may access. Do not rely on
@@ -5066,13 +5070,10 @@
"download_manager_recommended_max_bytes_over_mobile";
/**
- * Whether the package installer should allow installation of apps downloaded from
- * sources other than Google Play.
- *
- * 1 = allow installing from other sources
- * 0 = only allow installing from Google Play
+ * @deprecated Use {@link android.provider.Settings.Secure#INSTALL_NON_MARKET_APPS} instead
*/
- public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+ @Deprecated
+ public static final String INSTALL_NON_MARKET_APPS = Secure.INSTALL_NON_MARKET_APPS;
/**
* Whether mobile data connections are allowed by the user. See
@@ -6238,6 +6239,13 @@
CALL_METHOD_GET_GLOBAL,
CALL_METHOD_PUT_GLOBAL);
+ // Certain settings have been moved from global to the per-user secure namespace
+ private static final HashSet<String> MOVED_TO_SECURE;
+ static {
+ MOVED_TO_SECURE = new HashSet<String>(1);
+ MOVED_TO_SECURE.add(Settings.Global.INSTALL_NON_MARKET_APPS);
+ }
+
/**
* Look up a name in the database.
* @param resolver to access the database with
@@ -6251,6 +6259,11 @@
/** @hide */
public static String getStringForUser(ContentResolver resolver, String name,
int userHandle) {
+ if (MOVED_TO_SECURE.contains(name)) {
+ Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
+ + " to android.provider.Settings.Secure, returning read-only value.");
+ return Secure.getStringForUser(resolver, name, userHandle);
+ }
return sNameValueCache.getStringForUser(resolver, name, userHandle);
}
@@ -6273,6 +6286,12 @@
Log.v(TAG, "Global.putString(name=" + name + ", value=" + value
+ " for " + userHandle);
}
+ // Global and Secure have the same access policy so we can forward writes
+ if (MOVED_TO_SECURE.contains(name)) {
+ Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
+ + " to android.provider.Settings.Secure, value is unchanged.");
+ return Secure.putStringForUser(resolver, name, value, userHandle);
+ }
return sNameValueCache.putStringForUser(resolver, name, value, userHandle);
}
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index ae5f37e..358ae8a 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -234,6 +234,14 @@
public static final int SOURCE_JOYSTICK = 0x01000000 | SOURCE_CLASS_JOYSTICK;
/**
+ * The input source is a device connected through HDMI-based bus.
+ *
+ * The key comes in through HDMI-CEC or MHL signal line, and is treated as if it were
+ * generated by a locally connected DPAD or keyboard.
+ */
+ public static final int SOURCE_HDMI = 0x02000000 | SOURCE_CLASS_BUTTON;
+
+ /**
* A special input source constant that is used when filtering input devices
* to match devices that provide any type of input source.
*/
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index b8e1b89..8a996d2 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -644,14 +644,26 @@
* devices or game controllers, especially if no other input mode is
* available. */
public static final int KEYCODE_PAIRING = 225;
+ /** Key code constant: Media Top Menu key.
+ * Goes to the top of media menu. */
+ public static final int KEYCODE_MEDIA_TOP_MENU = 226;
+ /** Key code constant: '11' key. */
+ public static final int KEYCODE_11 = 227;
+ /** Key code constant: '12' key. */
+ public static final int KEYCODE_12 = 228;
+ /** Key code constant: Last Channel key.
+ * Goes to the last viewed channel. */
+ public static final int KEYCODE_LAST_CHANNEL = 229;
+ /** Key code constant: TV data service key.
+ * Displays data services like weather, sports. */
+ public static final int KEYCODE_TV_DATA_SERVICE = 230;
- private static final int LAST_KEYCODE = KEYCODE_PAIRING;
+ private static final int LAST_KEYCODE = KEYCODE_TV_DATA_SERVICE;
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()
// frameworks/native/include/android/keycodes.h
- // frameworks/base/include/androidfw/InputEventAttributes.h
- // external/webkit/WebKit/android/plugins/ANPKeyCodes.h
+ // frameworks/native/include/input/InputEventLabels.h
// frameworks/base/core/res/res/values/attrs.xml
// emulator?
// LAST_KEYCODE
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index fb7d57d..6dc7286 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4789,25 +4789,23 @@
* @param v previous or the next focus holder, or null if none
*/
private void manageFocusHotspot(boolean focused, View v) {
- if (mBackground != null && mBackground.supportsHotspots()) {
- final Rect r = new Rect();
- if (!focused && v != null) {
- v.getBoundsOnScreen(r);
- final int[] location = new int[2];
- getLocationOnScreen(location);
- r.offset(-location[0], -location[1]);
- } else {
- r.set(0, 0, mRight - mLeft, mBottom - mTop);
- }
-
- final float x = r.exactCenterX();
- final float y = r.exactCenterY();
- mBackground.setHotspot(R.attr.state_focused, x, y);
-
- if (!focused) {
- mBackground.removeHotspot(R.attr.state_focused);
- }
+ if (mBackground == null) {
+ return;
}
+
+ final Rect r = new Rect();
+ if (!focused && v != null) {
+ v.getBoundsOnScreen(r);
+ final int[] location = new int[2];
+ getLocationOnScreen(location);
+ r.offset(-location[0], -location[1]);
+ } else {
+ r.set(0, 0, mRight - mLeft, mBottom - mTop);
+ }
+
+ final float x = r.exactCenterX();
+ final float y = r.exactCenterY();
+ mBackground.setHotspot(x, y);
}
/**
@@ -6763,7 +6761,7 @@
*/
private void setPressed(boolean pressed, float x, float y) {
if (pressed) {
- setHotspot(R.attr.state_pressed, x, y);
+ setHotspot(x, y);
}
setPressed(pressed);
@@ -6787,10 +6785,6 @@
mPrivateFlags &= ~PFLAG_PRESSED;
}
- if (!pressed) {
- clearHotspot(R.attr.state_pressed);
- }
-
if (needsRefresh) {
refreshDrawableState();
}
@@ -9106,21 +9100,20 @@
postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout());
} else {
// Not inside a scrolling container, so show the feedback right away
- setHotspot(R.attr.state_pressed, x, y);
+ setHotspot(x, y);
setPressed(true);
checkForLongClick(0);
}
break;
case MotionEvent.ACTION_CANCEL:
- clearHotspot(R.attr.state_pressed);
setPressed(false);
removeTapCallback();
removeLongPressCallback();
break;
case MotionEvent.ACTION_MOVE:
- setHotspot(R.attr.state_pressed, x, y);
+ setHotspot(x, y);
// Be lenient about moving outside of buttons
if (!pointInView(x, y, mTouchSlop)) {
@@ -9142,17 +9135,9 @@
return false;
}
- private void setHotspot(int id, float x, float y) {
- final Drawable bg = mBackground;
- if (bg != null && bg.supportsHotspots()) {
- bg.setHotspot(id, x, y);
- }
- }
-
- private void clearHotspot(int id) {
- final Drawable bg = mBackground;
- if (bg != null && bg.supportsHotspots()) {
- bg.removeHotspot(id);
+ private void setHotspot(float x, float y) {
+ if (mBackground != null) {
+ mBackground.setHotspot(x, y);
}
}
@@ -12903,10 +12888,6 @@
mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
- if (mBackground != null) {
- mBackground.clearHotspots();
- }
-
removeUnsetPressCallback();
removeLongPressCallback();
removePerformClickCallback();
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index f91ef1a..c9eb130 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2502,22 +2502,16 @@
positionSelector(position, sel);
final Drawable selector = mSelector;
- if (selector != null && selector.supportsHotspots() && position != INVALID_POSITION) {
+ if (selector != null && position != INVALID_POSITION) {
final Rect bounds = mSelectorRect;
final float x = bounds.exactCenterX();
final float y = bounds.exactCenterY();
- selector.setHotspot(R.attr.state_focused, x, y);
+ selector.setHotspot(x, y);
}
}
void positionSelector(int position, View sel) {
if (position != INVALID_POSITION) {
- if (mSelectorPosition != position) {
- final Drawable selector = mSelector;
- if (selector != null && selector.supportsHotspots()) {
- selector.clearHotspots();
- }
- }
mSelectorPosition = position;
}
@@ -3245,9 +3239,7 @@
((TransitionDrawable) d).resetTransition();
}
}
- if (d.supportsHotspots()) {
- d.setHotspot(R.attr.state_pressed, x, y);
- }
+ d.setHotspot(x, y);
}
if (longClickable) {
@@ -3783,9 +3775,7 @@
if (d != null && d instanceof TransitionDrawable) {
((TransitionDrawable) d).resetTransition();
}
- if (mSelector.supportsHotspots()) {
- mSelector.setHotspot(R.attr.state_pressed, x, ev.getY());
- }
+ mSelector.setHotspot(x, ev.getY());
}
if (mTouchModeReset != null) {
removeCallbacks(mTouchModeReset);
@@ -3797,9 +3787,6 @@
mTouchMode = TOUCH_MODE_REST;
child.setPressed(false);
setPressed(false);
- if (mSelector != null && mSelector.supportsHotspots()) {
- mSelector.removeHotspot(R.attr.state_pressed);
- }
if (!mDataChanged && !mIsDetaching && isAttachedToWindow()) {
performClick.run();
}
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 4f2d9c6..1152e17 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -31,8 +31,6 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
-import com.android.internal.R;
-
public abstract class AbsSeekBar extends ProgressBar {
private final Rect mTempRect = new Rect();
@@ -348,7 +346,7 @@
final int right = left + thumbWidth;
final Drawable background = getBackground();
- if (background != null && background.supportsHotspots()) {
+ if (background != null) {
final Rect bounds = mThumb.getBounds();
final int offsetX = mPaddingLeft - mThumbOffset;
final int offsetY = mPaddingTop;
@@ -499,17 +497,10 @@
return true;
}
- private void setHotspot(int id, float x, float y) {
+ private void setHotspot(float x, float y) {
final Drawable bg = getBackground();
- if (bg != null && bg.supportsHotspots()) {
- bg.setHotspot(id, x, y);
- }
- }
-
- private void clearHotspot(int id) {
- final Drawable bg = getBackground();
- if (bg != null && bg.supportsHotspots()) {
- bg.removeHotspot(id);
+ if (bg != null) {
+ bg.setHotspot(x, y);
}
}
@@ -541,7 +532,7 @@
final int max = getMax();
progress += scale * max;
- setHotspot(R.attr.state_pressed, x, (int) event.getY());
+ setHotspot(x, (int) event.getY());
setProgress((int) progress, true);
}
@@ -567,7 +558,6 @@
* canceled.
*/
void onStopTrackingTouch() {
- clearHotspot(R.attr.state_pressed);
mIsDragging = false;
}
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index 9e17cca..6aff4f4 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -285,7 +285,7 @@
buttonDrawable.setBounds(left, top, right, bottom);
final Drawable background = getBackground();
- if (background != null && background.supportsHotspots()) {
+ if (background != null) {
background.setHotspotBounds(left, top, right, bottom);
}
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 74a3eec..ad1a023 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -828,7 +828,7 @@
thumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
final Drawable background = getBackground();
- if (background != null && background.supportsHotspots()) {
+ if (background != null) {
background.setHotspotBounds(thumbLeft, switchTop, thumbRight, switchBottom);
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 8f073de..a4a9680 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8194,7 +8194,7 @@
final boolean isPassword = hasPasswordTransformationMethod();
info.setPassword(isPassword);
- if (!isPassword) {
+ if (!isPassword || shouldSpeakPasswordsForAccessibility()) {
info.setText(getTextForAccessibility());
}
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 43e80dc..8418162 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -853,7 +853,7 @@
}
else {
SkScalar sigma = android::uirenderer::Blur::convertRadiusToSigma(radius);
- paint->setLooper(new SkBlurDrawLooper((SkColor)color, sigma, dx, dy))->unref();
+ paint->setLooper(SkBlurDrawLooper::Create((SkColor)color, sigma, dx, dy))->unref();
}
}
diff --git a/core/res/res/drawable/btn_borderless_quantum.xml b/core/res/res/drawable/btn_borderless_quantum.xml
index 2e3c515..eaf2550 100644
--- a/core/res/res/drawable/btn_borderless_quantum.xml
+++ b/core/res/res/drawable/btn_borderless_quantum.xml
@@ -14,8 +14,8 @@
limitations under the License.
-->
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorButtonPressed">
<item android:id="@id/mask"
android:drawable="@drawable/btn_qntm_alpha" />
-</touch-feedback>
+</ripple>
diff --git a/core/res/res/drawable/btn_default_quantum.xml b/core/res/res/drawable/btn_default_quantum.xml
index c6a3a33..d8ab667 100644
--- a/core/res/res/drawable/btn_default_quantum.xml
+++ b/core/res/res/drawable/btn_default_quantum.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorButtonPressed">
<item>
<selector>
@@ -31,4 +31,4 @@
</item>
</selector>
</item>
-</touch-feedback>
+</ripple>
diff --git a/core/res/res/drawable/edit_text_quantum.xml b/core/res/res/drawable/edit_text_quantum.xml
index c42c7b7..67339e8 100644
--- a/core/res/res/drawable/edit_text_quantum.xml
+++ b/core/res/res/drawable/edit_text_quantum.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorControlActivated">
<item>
<selector>
@@ -36,4 +36,4 @@
</item>
</selector>
</item>
-</touch-feedback>
+</ripple>
diff --git a/core/res/res/drawable/item_background_quantum.xml b/core/res/res/drawable/item_background_quantum.xml
index 11e1f67..631d3e4 100644
--- a/core/res/res/drawable/item_background_quantum.xml
+++ b/core/res/res/drawable/item_background_quantum.xml
@@ -14,6 +14,6 @@
limitations under the License.
-->
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorButtonPressed"
android:pinned="true" />
diff --git a/core/res/res/drawable/list_selector_quantum.xml b/core/res/res/drawable/list_selector_quantum.xml
index c007117..0e185aa 100644
--- a/core/res/res/drawable/list_selector_quantum.xml
+++ b/core/res/res/drawable/list_selector_quantum.xml
@@ -14,9 +14,9 @@
limitations under the License.
-->
-<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorButtonPressed">
<item android:id="@id/mask">
<color android:color="@color/white" />
</item>
-</touch-feedback>
+</ripple>
diff --git a/core/res/res/drawable/notification_bg_dim.xml b/core/res/res/drawable/notification_bg_dim.xml
index ec20368..ae03d82 100644
--- a/core/res/res/drawable/notification_bg_dim.xml
+++ b/core/res/res/drawable/notification_bg_dim.xml
@@ -15,9 +15,9 @@
~ limitations under the License
-->
-<touch-feedback
+<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="#ff444444"
>
<item android:drawable="@drawable/notification_bg_normal" />
-</touch-feedback>
\ No newline at end of file
+</ripple>
\ No newline at end of file
diff --git a/core/res/res/drawable/notification_quantum_bg_dim.xml b/core/res/res/drawable/notification_quantum_bg_dim.xml
index ab0e049..eb9a4ab 100644
--- a/core/res/res/drawable/notification_quantum_bg_dim.xml
+++ b/core/res/res/drawable/notification_quantum_bg_dim.xml
@@ -15,7 +15,7 @@
~ limitations under the License
-->
-<touch-feedback
+<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="#ffffffff"
android:tintMode="src_over"
@@ -26,4 +26,4 @@
<corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
</shape>
</item>
-</touch-feedback>
\ No newline at end of file
+</ripple>
\ No newline at end of file
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 9fba1bf..55e2983 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1669,6 +1669,11 @@
<enum name="KEYCODE_MEDIA_SLEEP" value="223" />
<enum name="KEYCODE_MEDIA_WAKEUP" value="224" />
<enum name="KEYCODE_PAIRING" value="225" />
+ <enum name="KEYCODE_MEDIA_TOP_MENU" value="226" />
+ <enum name="KEYCODE_11" value="227" />
+ <enum name="KEYCODE_12" value="228" />
+ <enum name="KEYCODE_LAST_CHANNEL" value="229" />
+ <enum name="KEYCODE_TV_DATA_SERVICE" value="230" />
</attr>
<!-- ***************************************************************** -->
@@ -4647,7 +4652,7 @@
</declare-styleable>
<!-- Drawable used to show animated touch feedback. -->
- <declare-styleable name="TouchFeedbackDrawable">
+ <declare-styleable name="RippleDrawable">
<!-- The tint to use for feedback ripples. This attribute is required. -->
<attr name="tint" />
<!-- Specifies the Porter-Duff blending mode used to apply the tint. The default vlaue is src_atop, which draws over the opaque parts of the drawable. -->
@@ -4753,11 +4758,6 @@
<!-- ========================== -->
<eat-comment />
- <!-- Drawable used to draw Vector Drawables. -->
- <declare-styleable name="VectorDrawable">
- <attr name="versionCode" />
- </declare-styleable>
-
<!-- Define the virtual size of the drawing surface paths will draw to. -->
<declare-styleable name="VectorDrawableViewport">
<!-- The width of the canvas the drawing is on. -->
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index b939636..c78096a 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -484,55 +484,28 @@
}
/**
- * Indicates whether the drawable supports hotspots. Hotspots are uniquely
- * identifiable coordinates the may be added, updated and removed within a
- * drawable.
+ * Specifies the hotspot's location within the drawable.
*
- * @return true if hotspots are supported
- * @see #setHotspot(int, float, float)
- * @see #removeHotspot(int)
- * @see #clearHotspots()
- */
- public boolean supportsHotspots() {
- return false;
- }
-
- /**
- * Specifies a hotspot's location within the drawable.
- * <p>
- * The specified key should be an id declared in the resources of the
- * application to ensure it is unique (see the <a
- * href={@docRoot}guide/topics/resources/more-resources.html#Id">ID resource type</a>).
- *
- * @param key The key identifying the hotspot
* @param x The X coordinate of the center of the hotspot
* @param y The Y coordinate of the center of the hotspot
*/
- public void setHotspot(int key, float x, float y) {}
+ public void setHotspot(float x, float y) {}
/**
- * Removes the hotspot with the specified key from the drawable.
- *
- * @param key The key identifying the hotspot
- */
- public void removeHotspot(int key) {}
-
- /**
- * Immediately removes all hotspots from the drawable.
- */
- public void clearHotspots() {}
-
- /**
- * Sets the bounds to which hotspots are constrained.
- *
- * @hide until we finalize these APIs
+ * Sets the bounds to which the hotspot is constrained, if they should be
+ * different from the drawable bounds.
+ *
+ * @param left
+ * @param top
+ * @param right
+ * @param bottom
*/
public void setHotspotBounds(int left, int top, int right, int bottom) {}
/**
* Whether this drawable requests projection.
*
- * @hide until we finalize these APIs
+ * @hide magic!
*/
public boolean isProjected() {
return false;
@@ -1047,8 +1020,8 @@
drawable = new LayerDrawable();
} else if (name.equals("transition")) {
drawable = new TransitionDrawable();
- } else if (name.equals("touch-feedback")) {
- drawable = new TouchFeedbackDrawable();
+ } else if (name.equals("ripple")) {
+ drawable = new RippleDrawable();
} else if (name.equals("color")) {
drawable = new ColorDrawable();
} else if (name.equals("shape")) {
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index 08fc99d..ec5c6c6 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -238,35 +238,13 @@
}
@Override
- public void setHotspot(int key, float x, float y) {
+ public void setHotspot(float x, float y) {
if (mCurrDrawable != null) {
- mCurrDrawable.setHotspot(key, x, y);
+ mCurrDrawable.setHotspot(x, y);
}
}
@Override
- public void removeHotspot(int key) {
- if (mCurrDrawable != null) {
- mCurrDrawable.removeHotspot(key);
- }
- }
-
- @Override
- public void clearHotspots() {
- if (mCurrDrawable != null) {
- mCurrDrawable.clearHotspots();
- }
- }
-
- @Override
- public boolean supportsHotspots() {
- if (mCurrDrawable != null) {
- return mCurrDrawable.supportsHotspots();
- }
- return false;
- }
-
- @Override
protected boolean onStateChange(int[] state) {
if (mLastDrawable != null) {
return mLastDrawable.setState(state);
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
deleted file mode 100644
index 6ab33f8..0000000
--- a/graphics/java/android/graphics/drawable/DrawableWrapper.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.graphics.drawable;
-
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.Rect;
-import android.graphics.Xfermode;
-
-/**
- * A Drawable that wraps another Drawable.
- */
-public class DrawableWrapper extends Drawable implements Drawable.Callback {
- private WrapperState mWrapperState;
-
- /** Local drawable backed by its own constant state. */
- private Drawable mWrappedDrawable;
-
- private boolean mMutated;
-
- /** @hide */
- @Override
- public boolean isProjected() {
- return mWrappedDrawable.isProjected();
- }
-
- @Override
- public void setAutoMirrored(boolean mirrored) {
- mWrappedDrawable.setAutoMirrored(mirrored);
- }
-
- @Override
- public boolean isAutoMirrored() {
- return mWrappedDrawable.isAutoMirrored();
- }
-
- @Override
- public int getMinimumWidth() {
- return mWrappedDrawable.getMinimumWidth();
- }
-
- @Override
- public int getMinimumHeight() {
- return mWrappedDrawable.getMinimumHeight();
- }
-
- @Override
- public int getIntrinsicWidth() {
- return mWrappedDrawable.getIntrinsicWidth();
- }
-
- @Override
- public int getIntrinsicHeight() {
- return mWrappedDrawable.getIntrinsicHeight();
- }
-
- @Override
- public Drawable getCurrent() {
- return mWrappedDrawable.getCurrent();
- }
-
- @Override
- public void invalidateDrawable(Drawable who) {
- final Callback callback = getCallback();
- if (callback != null) {
- callback.invalidateDrawable(this);
- }
- }
-
- @Override
- public void scheduleDrawable(Drawable who, Runnable what, long when) {
- final Callback callback = getCallback();
- if (callback != null) {
- callback.scheduleDrawable(this, what, when);
- }
- }
-
- @Override
- public void unscheduleDrawable(Drawable who, Runnable what) {
- final Callback callback = getCallback();
- if (callback != null) {
- callback.unscheduleDrawable(this, what);
- }
- }
-
- @Override
- public void draw(Canvas canvas) {
- mWrappedDrawable.draw(canvas);
- }
-
- @Override
- public int getChangingConfigurations() {
- return mWrappedDrawable.getChangingConfigurations();
- }
-
- @Override
- public boolean getPadding(Rect padding) {
- return mWrappedDrawable.getPadding(padding);
- }
-
- @Override
- public Rect getDirtyBounds() {
- return mWrappedDrawable.getDirtyBounds();
- }
-
- @Override
- public boolean supportsHotspots() {
- return mWrappedDrawable.supportsHotspots();
- }
-
- @Override
- public void setHotspot(int id, float x, float y) {
- mWrappedDrawable.setHotspot(id, x, y);
- }
-
- @Override
- public void removeHotspot(int id) {
- mWrappedDrawable.removeHotspot(id);
- }
-
- @Override
- public void clearHotspots() {
- mWrappedDrawable.clearHotspots();
- }
-
- @Override
- public boolean setVisible(boolean visible, boolean restart) {
- // Must call through to super().
- super.setVisible(visible, restart);
- return mWrappedDrawable.setVisible(visible, restart);
- }
-
- @Override
- public void setAlpha(int alpha) {
- mWrappedDrawable.setAlpha(alpha);
- }
-
- @Override
- public int getAlpha() {
- return mWrappedDrawable.getAlpha();
- }
-
- /** {@hide} */
- @Override
- public void setLayoutDirection(int layoutDirection) {
- mWrappedDrawable.setLayoutDirection(layoutDirection);
- }
-
- /** {@hide} */
- @Override
- public int getLayoutDirection() {
- return mWrappedDrawable.getLayoutDirection();
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- mWrappedDrawable.setColorFilter(cf);
- }
-
- @Override
- public ColorFilter getColorFilter() {
- return mWrappedDrawable.getColorFilter();
- }
-
- @Override
- public void setFilterBitmap(boolean filter) {
- mWrappedDrawable.setFilterBitmap(filter);
- }
-
- @Override
- public void setXfermode(Xfermode mode) {
- mWrappedDrawable.setXfermode(mode);
- }
-
- @Override
- public int getOpacity() {
- return mWrappedDrawable.getOpacity();
- }
-
- @Override
- public boolean isStateful() {
- return mWrappedDrawable.isStateful();
- }
-
- @Override
- public final boolean setState(int[] stateSet) {
- return super.setState(stateSet);
- }
-
- @Override
- public final int[] getState() {
- return super.getState();
- }
-
- @Override
- protected boolean onStateChange(int[] state) {
- // Don't override setState(), getState().
- return mWrappedDrawable.setState(state);
- }
-
- @Override
- protected boolean onLevelChange(int level) {
- // Don't override setLevel(), getLevel().
- return mWrappedDrawable.setLevel(level);
- }
-
- @Override
- public final void setBounds(int left, int top, int right, int bottom) {
- super.setBounds(left, top, right, bottom);
- }
-
- @Override
- public final void setBounds(Rect bounds) {
- super.setBounds(bounds);
- }
-
- @Override
- protected void onBoundsChange(Rect bounds) {
- // Don't override setBounds(), getBounds().
- mWrappedDrawable.setBounds(bounds);
- }
-
- protected void setConstantState(WrapperState wrapperState, Resources res) {
- mWrapperState = wrapperState;
-
- // Load a new drawable from the constant state.
- if (wrapperState == null || wrapperState.mWrappedConstantState == null) {
- mWrappedDrawable = null;
- } else if (res != null) {
- mWrappedDrawable = wrapperState.mWrappedConstantState.newDrawable(res);
- } else {
- mWrappedDrawable = wrapperState.mWrappedConstantState.newDrawable();
- }
- }
-
- @Override
- public ConstantState getConstantState() {
- return mWrapperState;
- }
-
- @Override
- public Drawable mutate() {
- if (!mMutated) {
- mWrappedDrawable = mWrappedDrawable.mutate();
- mMutated = true;
- }
- return this;
- }
-
- /**
- * Sets the wrapped drawable and update the constant state.
- *
- * @param drawable
- * @param res
- */
- protected final void setDrawable(Drawable drawable, Resources res) {
- if (mWrappedDrawable != null) {
- mWrappedDrawable.setCallback(null);
- }
-
- mWrappedDrawable = drawable;
-
- if (drawable != null) {
- drawable.setCallback(this);
-
- mWrapperState.mWrappedConstantState = drawable.getConstantState();
- } else {
- mWrapperState.mWrappedConstantState = null;
- }
- }
-
- protected final Drawable getDrawable() {
- return mWrappedDrawable;
- }
-
- public static abstract class WrapperState extends ConstantState {
- ConstantState mWrappedConstantState;
-
- WrapperState(WrapperState orig) {
- if (orig != null) {
- mWrappedConstantState = orig.mWrappedConstantState;
- }
- }
-
- @Override
- public int getChangingConfigurations() {
- return mWrappedConstantState.getChangingConfigurations();
- }
- }
-}
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 9384caf..3749339 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -131,6 +131,7 @@
// overrides from Drawable.Callback
+ @Override
public void invalidateDrawable(Drawable who) {
final Callback callback = getCallback();
if (callback != null) {
@@ -138,6 +139,7 @@
}
}
+ @Override
public void scheduleDrawable(Drawable who, Runnable what, long when) {
final Callback callback = getCallback();
if (callback != null) {
@@ -145,6 +147,7 @@
}
}
+ @Override
public void unscheduleDrawable(Drawable who, Runnable what) {
final Callback callback = getCallback();
if (callback != null) {
@@ -184,23 +187,8 @@
}
@Override
- public boolean supportsHotspots() {
- return mInsetState.mDrawable.supportsHotspots();
- }
-
- @Override
- public void setHotspot(int id, float x, float y) {
- mInsetState.mDrawable.setHotspot(id, x, y);
- }
-
- @Override
- public void removeHotspot(int id) {
- mInsetState.mDrawable.removeHotspot(id);
- }
-
- @Override
- public void clearHotspots() {
- mInsetState.mDrawable.clearHotspots();
+ public void setHotspot(float x, float y) {
+ mInsetState.mDrawable.setHotspot(x, y);
}
@Override
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 7847aad..373d894 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -569,42 +569,11 @@
}
@Override
- public boolean supportsHotspots() {
+ public void setHotspot(float x, float y) {
final ChildDrawable[] array = mLayerState.mChildren;
final int N = mLayerState.mNum;
for (int i = 0; i < N; i++) {
- if (array[i].mDrawable.supportsHotspots()) {
- return true;
- }
- }
-
- return false;
- }
-
- @Override
- public void setHotspot(int id, float x, float y) {
- final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
- for (int i = 0; i < N; i++) {
- array[i].mDrawable.setHotspot(id, x, y);
- }
- }
-
- @Override
- public void removeHotspot(int id) {
- final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
- for (int i = 0; i < N; i++) {
- array[i].mDrawable.removeHotspot(id);
- }
- }
-
- @Override
- public void clearHotspots() {
- final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
- for (int i = 0; i < N; i++) {
- array[i].mDrawable.clearHotspots();
+ array[i].mDrawable.setHotspot(x, y);
}
}
diff --git a/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
similarity index 91%
rename from graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java
rename to graphics/java/android/graphics/drawable/RippleDrawable.java
index a55a4b2..6776e66 100644
--- a/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -22,6 +22,7 @@
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PointF;
@@ -44,7 +45,7 @@
/**
* Drawable that shows a ripple effect in response to state changes. The
* anchoring position of the ripple for a given state may be specified by
- * calling {@link #setHotspot(int, float, float)} with the corresponding state
+ * calling {@link #setHotspot(float, float)} with the corresponding state
* attribute identifier.
* <p>
* A touch feedback drawable may contain multiple child layers, including a
@@ -56,19 +57,19 @@
* <p>
* If no mask layer is set, the ripple effect is simply blended onto the
* composite of the child layers using the specified
- * {@link android.R.styleable#TouchFeedbackDrawable_tintMode}.
+ * {@link android.R.styleable#RippleDrawable_tintMode}.
* <p>
* If no child layers or mask is specified and the ripple is set as a View
* background, the ripple will be blended onto the first available parent
* background within the View's hierarchy using the specified
- * {@link android.R.styleable#TouchFeedbackDrawable_tintMode}. In this case, the
+ * {@link android.R.styleable#RippleDrawable_tintMode}. In this case, the
* drawing region may extend outside of the Drawable bounds.
*
* @attr ref android.R.styleable#DrawableStates_state_focused
* @attr ref android.R.styleable#DrawableStates_state_pressed
*/
-public class TouchFeedbackDrawable extends LayerDrawable {
- private static final String LOG_TAG = TouchFeedbackDrawable.class.getSimpleName();
+public class RippleDrawable extends LayerDrawable {
+ private static final String LOG_TAG = RippleDrawable.class.getSimpleName();
private static final PorterDuffXfermode DST_IN = new PorterDuffXfermode(Mode.DST_IN);
private static final PorterDuffXfermode DST_ATOP = new PorterDuffXfermode(Mode.DST_ATOP);
private static final PorterDuffXfermode SRC_ATOP = new PorterDuffXfermode(Mode.SRC_ATOP);
@@ -88,17 +89,17 @@
/** Current dirty bounds, union of current and previous drawing bounds. */
private final Rect mDirtyBounds = new Rect();
- private final TouchFeedbackState mState;
+ private final RippleState mState;
/**
* Lazily-created map of pending hotspot locations. These may be modified by
- * calls to {@link #setHotspot(int, float, float)}.
+ * calls to {@link #setHotspot(float, float)}.
*/
private SparseArray<PointF> mPendingHotspots;
/**
* Lazily-created map of active hotspot locations. These may be modified by
- * calls to {@link #setHotspot(int, float, float)}.
+ * calls to {@link #setHotspot(float, float)}.
*/
private SparseArray<Ripple> mActiveHotspots;
@@ -121,8 +122,18 @@
/** Whether bounds are being overridden. */
private boolean mOverrideBounds;
- TouchFeedbackDrawable() {
- this(new TouchFeedbackState(null, null, null), null, null);
+ RippleDrawable() {
+ this(new RippleState(null, null, null), null, null);
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter cf) {
+
}
@Override
@@ -233,7 +244,7 @@
public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
throws XmlPullParserException, IOException {
final TypedArray a = obtainAttributes(
- r, theme, attrs, R.styleable.TouchFeedbackDrawable);
+ r, theme, attrs, R.styleable.RippleDrawable);
updateStateFromTypedArray(a);
a.recycle();
@@ -267,22 +278,22 @@
* Initializes the constant state from the values in the typed array.
*/
private void updateStateFromTypedArray(TypedArray a) {
- final TouchFeedbackState state = mState;
+ final RippleState state = mState;
// Extract the theme attributes, if any.
state.mTouchThemeAttrs = a.extractThemeAttrs();
- final ColorStateList tint = a.getColorStateList(R.styleable.TouchFeedbackDrawable_tint);
+ final ColorStateList tint = a.getColorStateList(R.styleable.RippleDrawable_tint);
if (tint != null) {
mState.mTint = tint;
}
- final int tintMode = a.getInt(R.styleable.TouchFeedbackDrawable_tintMode, -1);
+ final int tintMode = a.getInt(R.styleable.RippleDrawable_tintMode, -1);
if (tintMode != -1) {
mState.setTintMode(Drawable.parseTintMode(tintMode, Mode.SRC_ATOP));
}
- mState.mPinned = a.getBoolean(R.styleable.TouchFeedbackDrawable_pinned, mState.mPinned);
+ mState.mPinned = a.getBoolean(R.styleable.RippleDrawable_pinned, mState.mPinned);
}
/**
@@ -301,13 +312,13 @@
public void applyTheme(Theme t) {
super.applyTheme(t);
- final TouchFeedbackState state = mState;
+ final RippleState state = mState;
if (state == null || state.mTouchThemeAttrs == null) {
return;
}
final TypedArray a = t.resolveAttributes(state.mTouchThemeAttrs,
- R.styleable.TouchFeedbackDrawable);
+ R.styleable.RippleDrawable);
updateStateFromTypedArray(a);
a.recycle();
}
@@ -318,17 +329,14 @@
}
@Override
- public boolean supportsHotspots() {
- return true;
- }
-
- @Override
- public void setHotspot(int id, float x, float y) {
+ public void setHotspot(float x, float y) {
if (mState.mPinned && !circleContains(mHotspotBounds, x, y)) {
x = mHotspotBounds.exactCenterX();
y = mHotspotBounds.exactCenterY();
}
+ // TODO: We should only have a single pending/active hotspot.
+ final int id = R.attr.state_pressed;
final int[] stateSet = getState();
if (!Arrays.contains(stateSet, id)) {
// The hotspot is not active, so just modify the pending location.
@@ -423,8 +431,7 @@
mActiveHotspots.put(id, newRipple);
}
- @Override
- public void removeHotspot(int id) {
+ private void removeHotspot(int id) {
if (mActiveHotspots == null) {
return;
}
@@ -437,8 +444,7 @@
}
}
- @Override
- public void clearHotspots() {
+ private void clearHotspots() {
if (mActiveHotspots != null) {
mActiveHotspots.clear();
}
@@ -632,7 +638,7 @@
return mState;
}
- static class TouchFeedbackState extends LayerState {
+ static class RippleState extends LayerState {
int[] mTouchThemeAttrs;
ColorStateList mTint = null;
PorterDuffXfermode mTintXfermode = SRC_ATOP;
@@ -640,8 +646,8 @@
Drawable mMask;
boolean mPinned = false;
- public TouchFeedbackState(
- TouchFeedbackState orig, TouchFeedbackDrawable owner, Resources res) {
+ public RippleState(
+ RippleState orig, RippleDrawable owner, Resources res) {
super(orig, owner, res);
if (orig != null) {
@@ -655,7 +661,7 @@
}
public void setTintMode(Mode mode) {
- final Mode invertedMode = TouchFeedbackState.invertPorterDuffMode(mode);
+ final Mode invertedMode = RippleState.invertPorterDuffMode(mode);
mTintXfermodeInverse = new PorterDuffXfermode(invertedMode);
mTintXfermode = new PorterDuffXfermode(mode);
}
@@ -675,17 +681,17 @@
@Override
public Drawable newDrawable() {
- return new TouchFeedbackDrawable(this, null, null);
+ return new RippleDrawable(this, null, null);
}
@Override
public Drawable newDrawable(Resources res) {
- return new TouchFeedbackDrawable(this, res, null);
+ return new RippleDrawable(this, res, null);
}
@Override
public Drawable newDrawable(Resources res, Theme theme) {
- return new TouchFeedbackDrawable(this, res, theme);
+ return new RippleDrawable(this, res, theme);
}
/**
@@ -716,20 +722,20 @@
}
}
- private TouchFeedbackDrawable(TouchFeedbackState state, Resources res, Theme theme) {
+ private RippleDrawable(RippleState state, Resources res, Theme theme) {
boolean needsTheme = false;
- final TouchFeedbackState ns;
+ final RippleState ns;
if (theme != null && state != null && state.canApplyTheme()) {
- ns = new TouchFeedbackState(state, this, res);
+ ns = new RippleState(state, this, res);
needsTheme = true;
} else if (state == null) {
- ns = new TouchFeedbackState(null, this, res);
+ ns = new RippleState(null, this, res);
} else {
// We always need a new state since child drawables contain local
// state but live within the parent's constant state.
// TODO: Move child drawables into local state.
- ns = new TouchFeedbackState(state, this, res);
+ ns = new RippleState(state, this, res);
}
if (res != null) {
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index 05658f5..e3ed75e 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -50,8 +50,7 @@
* <p/>
* <dl>
* <dt><code><vector></code></dt>
- * <dd>The attribute <code>android:versionCode</code> defines the version of
- * VectorDrawable</dd>
+ * <dd>Used to defined a vector drawable</dd>
* <dt><code><size></code></dt>
* <dd>Used to defined the intrinsic Width Height size of the drawable using
* <code>android:width</code> and <code>android:height</code></dd>
@@ -284,20 +283,6 @@
} else if (SHAPE_VIEWPORT.equals(tagName)) {
pathRenderer.parseViewport(res, attrs);
noViewportTag = false;
- } else if (SHAPE_VECTOR.equals(tagName)) {
- final TypedArray a = res.obtainAttributes(attrs, R.styleable.VectorDrawable);
-
- // Parsing the version information.
- // Right now, we only support version "1".
- // If the xml didn't specify the version number, the default
- // version is "1".
- final int versionCode = a.getInt(R.styleable.VectorDrawable_versionCode, 1);
- if (versionCode != 1) {
- throw new IllegalArgumentException(
- "So far, VectorDrawable only support version 1");
- }
-
- a.recycle();
}
}
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 7993c0f..826d988 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -662,7 +662,9 @@
// When the layer is not an FBO, we may use glCopyTexImage so we
// need to make sure the layer does not extend outside the bounds
// of the framebuffer
- if (!bounds.intersect(Rect(0, 0, getViewportWidth(), getViewportHeight()))) {
+ const Snapshot& previous = *(currentSnapshot()->previous);
+ Rect previousViewport(0, 0, previous.getViewportWidth(), previous.getViewportHeight());
+ if (!bounds.intersect(previousViewport)) {
bounds.setEmpty();
} else if (fboLayer) {
clip.set(bounds);
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 485dbf6..5426e89 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -271,7 +271,7 @@
private:
struct ViewportData {
- ViewportData() : mWidth(0), mHeight() {}
+ ViewportData() : mWidth(0), mHeight(0) {}
void initialize(int width, int height) {
mWidth = width;
mHeight = height;
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 34c5520..c7b3fc9 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -212,6 +212,7 @@
* <li>"video/x-vnd.on2.vp8" - VP8 video (i.e. video in .webm)
* <li>"video/x-vnd.on2.vp9" - VP9 video (i.e. video in .webm)
* <li>"video/avc" - H.264/AVC video
+ * <li>"video/hevc" - H.265/HEVC video
* <li>"video/mp4v-es" - MPEG4 video
* <li>"video/3gpp" - H.263 video
* <li>"audio/3gpp" - AMR narrowband audio
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 90c12c6..b5d0a57 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -264,6 +264,37 @@
// from OMX_VIDEO_VP8PROFILETYPE
public static final int VP8ProfileMain = 0x01;
+ // from OMX_VIDEO_HEVCPROFILETYPE
+ public static final int HEVCProfileMain = 0x01;
+ public static final int HEVCProfileMain10 = 0x02;
+
+ // from OMX_VIDEO_HEVCLEVELTYPE
+ public static final int HEVCMainTierLevel1 = 0x1;
+ public static final int HEVCHighTierLevel1 = 0x2;
+ public static final int HEVCMainTierLevel2 = 0x4;
+ public static final int HEVCHighTierLevel2 = 0x8;
+ public static final int HEVCMainTierLevel21 = 0x10;
+ public static final int HEVCHighTierLevel21 = 0x20;
+ public static final int HEVCMainTierLevel3 = 0x40;
+ public static final int HEVCHighTierLevel3 = 0x80;
+ public static final int HEVCMainTierLevel31 = 0x100;
+ public static final int HEVCHighTierLevel31 = 0x200;
+ public static final int HEVCMainTierLevel4 = 0x400;
+ public static final int HEVCHighTierLevel4 = 0x800;
+ public static final int HEVCMainTierLevel41 = 0x1000;
+ public static final int HEVCHighTierLevel41 = 0x2000;
+ public static final int HEVCMainTierLevel5 = 0x4000;
+ public static final int HEVCHighTierLevel5 = 0x8000;
+ public static final int HEVCMainTierLevel51 = 0x10000;
+ public static final int HEVCHighTierLevel51 = 0x20000;
+ public static final int HEVCMainTierLevel52 = 0x40000;
+ public static final int HEVCHighTierLevel52 = 0x80000;
+ public static final int HEVCMainTierLevel6 = 0x100000;
+ public static final int HEVCHighTierLevel6 = 0x200000;
+ public static final int HEVCMainTierLevel61 = 0x400000;
+ public static final int HEVCHighTierLevel61 = 0x800000;
+ public static final int HEVCMainTierLevel62 = 0x1000000;
+ public static final int HEVCHighTierLevel62 = 0x2000000;
/**
* Defined in the OpenMAX IL specs, depending on the type of media
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 909c32e..286921e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -70,7 +70,7 @@
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 102;
+ private static final int DATABASE_VERSION = 103;
private Context mContext;
private int mUserHandle;
@@ -1632,6 +1632,34 @@
upgradeVersion = 102;
}
+ if (upgradeVersion == 102) {
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ // The INSTALL_NON_MARKET_APPS setting is becoming per-user rather
+ // than device-global.
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ // In the owner user, the global table exists so we can migrate the
+ // entry from there to the secure table, preserving its value.
+ String[] globalToSecure = {
+ Settings.Secure.INSTALL_NON_MARKET_APPS
+ };
+ moveSettingsToNewTable(db, TABLE_GLOBAL, TABLE_SECURE, globalToSecure, true);
+ } else {
+ // Secondary users' dbs don't have the global table, so institute the
+ // default.
+ stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ + " VALUES(?,?);");
+ loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
+ R.bool.def_install_non_market_apps);
+ }
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
+ upgradeVersion = 103;
+ }
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
@@ -2191,6 +2219,9 @@
loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
R.string.def_immersive_mode_confirmations);
+ loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
+ R.bool.def_install_non_market_apps);
+
} finally {
if (stmt != null) stmt.close();
}
@@ -2289,9 +2320,6 @@
loadBooleanSetting(stmt, Settings.Global.NETSTATS_ENABLED,
R.bool.def_netstats_enabled);
- loadBooleanSetting(stmt, Settings.Global.INSTALL_NON_MARKET_APPS,
- R.bool.def_install_non_market_apps);
-
loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED,
R.bool.def_usb_mass_storage_enabled);
diff --git a/packages/SystemUI/res/drawable/recents_dismiss_dark.xml b/packages/SystemUI/res/drawable/recents_dismiss_dark.xml
index 744795e..9c1165d 100644
--- a/packages/SystemUI/res/drawable/recents_dismiss_dark.xml
+++ b/packages/SystemUI/res/drawable/recents_dismiss_dark.xml
@@ -13,8 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:versionCode="1" >
+<vector xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:height="16dp"
diff --git a/packages/SystemUI/res/drawable/recents_dismiss_light.xml b/packages/SystemUI/res/drawable/recents_dismiss_light.xml
index 96bfbe1..a8afeb3 100644
--- a/packages/SystemUI/res/drawable/recents_dismiss_light.xml
+++ b/packages/SystemUI/res/drawable/recents_dismiss_light.xml
@@ -13,8 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:versionCode="1" >
+<vector xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:height="16dp"
diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml
index b24d4ad..85de645 100644
--- a/packages/SystemUI/res/layout/qs_panel.xml
+++ b/packages/SystemUI/res/layout/qs_panel.xml
@@ -23,6 +23,7 @@
android:background="@drawable/qs_panel_background" >
<com.android.systemui.qs.QSPanel
android:id="@+id/quick_settings_panel"
+ android:background="#0000"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index 591b175..bae8a99 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -249,6 +249,9 @@
mRecentsView.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
+ mRecentsView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
// Create the empty view
LayoutInflater inflater = LayoutInflater.from(this);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 2821052..c63e688 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -30,6 +30,7 @@
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.WindowInsets;
import android.widget.FrameLayout;
import com.android.systemui.recents.Console;
import com.android.systemui.recents.Constants;
@@ -288,16 +289,16 @@
}
@Override
- protected boolean fitSystemWindows(Rect insets) {
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
Console.log(Constants.Log.UI.MeasureAndLayout,
"[RecentsView|fitSystemWindows]", "insets: " + insets, Console.AnsiGreen);
// Update the configuration with the latest system insets and trigger a relayout
RecentsConfiguration config = RecentsConfiguration.getInstance();
- config.updateSystemInsets(insets);
+ config.updateSystemInsets(insets.getSystemWindowInsets());
requestLayout();
- return true;
+ return insets.consumeSystemWindowInsets(false, false, false, true);
}
/** Closes any open info panes */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java
index f1c362a..7b6572b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java
@@ -25,7 +25,7 @@
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.Rect;
-import android.graphics.drawable.TouchFeedbackDrawable;
+import android.graphics.drawable.RippleDrawable;
import android.util.AttributeSet;
import android.widget.Button;
import android.widget.FrameLayout;
@@ -156,8 +156,8 @@
// Workaround: The button currently doesn't support setting a custom background tint
// not defined in the theme. Just lower the alpha on the button to make it blend more
// into the background.
- if (mAppInfoButton.getBackground() instanceof TouchFeedbackDrawable) {
- TouchFeedbackDrawable d = (TouchFeedbackDrawable) mAppInfoButton.getBackground();
+ if (mAppInfoButton.getBackground() instanceof RippleDrawable) {
+ RippleDrawable d = (RippleDrawable) mAppInfoButton.getBackground();
if (d != null) {
d.setAlpha(96);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 2bc6f9c..f5d4889 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
@@ -167,7 +168,7 @@
}
private void applyInetProblem(ImageView iv) {
- iv.setColorFilter(mInetProblem ? PROBLEM_FILTER : null);
+ iv.setColorFilter(Build.IS_DEBUGGABLE && mInetProblem ? PROBLEM_FILTER : null);
}
// Run after each indicator change.
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index be20616..bfa0402 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -1253,7 +1253,10 @@
public void removeUser(int userHandle) throws RemoteException {
checkSystemUid("removeUser");
mOpRestrictions.remove(userHandle);
- mProfileOwnerUids.removeAt(mProfileOwnerUids.indexOfKey(userHandle));
+ final int index = mProfileOwnerUids.indexOfKey(userHandle);
+ if (index >= 0) {
+ mProfileOwnerUids.removeAt(index);
+ }
}
private void checkSystemUid(String function) {
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index 007032e..dbfb1cf 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -88,6 +88,8 @@
for (int i = 0; i < mRecords.size(); i++) {
pw.print(" "); pw.println(mRecords.get(i));
}
+ pw.print(" mCountdownHelper: ");
+ pw.println(mCountdownHelper.getCurrentConditionDescription());
}
}
@@ -474,6 +476,16 @@
}
}
+ public String getCurrentConditionDescription() {
+ if (mCurrent == 0) return null;
+ final long time = mCurrent;
+ final long now = System.currentTimeMillis();
+ final CharSequence span =
+ DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
+ return String.format("Scheduled for %s, %s in the future (%s), now=%s",
+ ts(time), time - now, span, ts(now));
+ }
+
private String ts(long time) {
return new Date(time) + " (" + time + ")";
}
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 131d05b..fd180bf 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -511,8 +511,16 @@
* Check if we've hit the limit of how many users can be created.
*/
private boolean isUserLimitReachedLocked() {
- int nUsers = mUsers.size();
- return nUsers >= UserManager.getMaxSupportedUsers();
+ int aliveUserCount = 0;
+ final int totalUserCount = mUsers.size();
+ // Skip over users being removed
+ for (int i = 0; i < totalUserCount; i++) {
+ UserInfo user = mUsers.valueAt(i);
+ if (!mRemovingUserIds.get(user.id)) {
+ aliveUserCount++;
+ }
+ }
+ return aliveUserCount >= UserManager.getMaxSupportedUsers();
}
/**
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index c1b9a33..efaa91b 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -324,8 +324,6 @@
mTrustListeners.get(i).onTrustChanged(enabled, userId);
} catch (RemoteException e) {
Slog.e(TAG, "Exception while notifying TrustListener. Removing listener.", e);
- mTrustListeners.get(i);
- i--;
}
}
}
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
index c90b626..08d7667 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
@@ -16,9 +16,6 @@
package com.android.test.hwuicompare;
-import com.android.test.hwuicompare.R;
-import com.android.test.hwuicompare.ScriptC_errorCalculator;
-
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
@@ -52,7 +49,6 @@
int height = resources.getDimensionPixelSize(R.dimen.layer_height);
mOutputRowRegions = new int[height / REGION_SIZE];
-/*
mRS = RenderScript.create(c);
int[] rowIndices = new int[height / REGION_SIZE];
for (int i = 0; i < rowIndices.length; i++)
@@ -68,15 +64,12 @@
mInputRowsAllocation.copyFrom(rowIndices);
mOutputRegionsAllocation = Allocation.createSized(mRS, Element.I32(mRS),
mOutputRowRegions.length, Allocation.USAGE_SCRIPT);
-*/
}
private static long startMillis, middleMillis;
public float calcErrorRS(Bitmap ideal, Bitmap given) {
- if (true)
- return calcError(ideal, given);
if (LOG_TIMING) {
startMillis = System.currentTimeMillis();
}
@@ -86,8 +79,8 @@
mGivenPixelsAllocation = Allocation.createFromBitmap(mRS, given,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
- mScript.bind_ideal(mIdealPixelsAllocation);
- mScript.bind_given(mGivenPixelsAllocation);
+ mScript.set_ideal(mIdealPixelsAllocation);
+ mScript.set_given(mGivenPixelsAllocation);
mScript.forEach_countInterestingRegions(mInputRowsAllocation, mOutputRegionsAllocation);
mOutputRegionsAllocation.copyTo(mOutputRowRegions);
@@ -127,8 +120,8 @@
mGivenPixelsAllocation = Allocation.createFromBitmap(mRS, given,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
- mScript.bind_ideal(mIdealPixelsAllocation);
- mScript.bind_given(mGivenPixelsAllocation);
+ mScript.set_ideal(mIdealPixelsAllocation);
+ mScript.set_given(mGivenPixelsAllocation);
mOutputPixelsAllocation = Allocation.createFromBitmap(mRS, output,
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/errorCalculator.rs b/tests/CanvasCompare/src/com/android/test/hwuicompare/errorCalculator.rs
index 3681784..caa947d 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/errorCalculator.rs
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/errorCalculator.rs
@@ -5,8 +5,8 @@
int WIDTH;
int HEIGHT;
-const uchar4 *ideal;
-const uchar4 *given;
+rs_allocation ideal;
+rs_allocation given;
void countInterestingRegions(const int32_t *v_in, int32_t *v_out) {
int y = v_in[0];
@@ -14,10 +14,10 @@
for (int x = 0; x < HEIGHT; x += REGION_SIZE) {
bool interestingRegion = false;
- int regionColor = (int)ideal[y * WIDTH + x];
+ int regionColor = (int) rsGetElementAt_uchar4(ideal, x, y);
for (int i = 0; i < REGION_SIZE && !interestingRegion; i++) {
for (int j = 0; j < REGION_SIZE && !interestingRegion; j++) {
- interestingRegion |= (int)(ideal[(y + i) * WIDTH + (x + j)]) != regionColor;
+ interestingRegion |= ((int) rsGetElementAt_uchar4(ideal, x + j, y + i)) != regionColor;
}
}
if (interestingRegion) {
@@ -31,8 +31,9 @@
int error = 0;
for (int y = startY; y < startY + REGION_SIZE; y++) {
for (int x = 0; x < HEIGHT; x++) {
- uchar4 idealPixel = ideal[y * WIDTH + x];
- uchar4 givenPixel = given[y * WIDTH + x];
+ uchar4 idealPixel = rsGetElementAt_uchar4(ideal, x, y);
+ uchar4 givenPixel = rsGetElementAt_uchar4(given, x, y);
+
error += abs(idealPixel.x - givenPixel.x);
error += abs(idealPixel.y - givenPixel.y);
error += abs(idealPixel.z - givenPixel.z);
@@ -43,8 +44,8 @@
}
void displayDifference(const uchar4 *v_in, uchar4 *v_out, uint32_t x, uint32_t y) {
- float4 idealPixel = rsUnpackColor8888(ideal[y * WIDTH + x]);
- float4 givenPixel = rsUnpackColor8888(given[y * WIDTH + x]);
+ float4 idealPixel = rsGetElementAt_float4(ideal, x, y);
+ float4 givenPixel = rsGetElementAt_float4(given, x, y);
float4 diff = idealPixel - givenPixel;
float totalDiff = diff.x + diff.y + diff.z + diff.w;
diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java
index b766268..9ea7027 100644
--- a/wifi/java/android/net/wifi/WifiScanner.java
+++ b/wifi/java/android/net/wifi/WifiScanner.java
@@ -783,6 +783,9 @@
FullScanResult result = (FullScanResult) msg.obj;
((ScanListener) listener).onFullResult(result);
return;
+ case CMD_PERIOD_CHANGED:
+ ((ScanListener) listener).onPeriodChanged(msg.arg1);
+ return;
case CMD_AP_FOUND:
((HotlistListener) listener).onFound(
((ParcelableScanResults) msg.obj).getResults());