summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/AppOpsManager.java3
-rw-r--r--core/java/android/app/INotificationManager.aidl4
-rw-r--r--core/java/android/hardware/input/InputManager.java6
-rw-r--r--core/java/android/view/GLES20Canvas.java8
-rw-r--r--core/java/android/view/GLES20RecordingCanvas.java2
-rw-r--r--core/java/android/view/HardwareCanvas.java27
-rw-r--r--core/java/android/view/HardwareRenderer.java15
-rw-r--r--core/java/android/view/ViewRootImpl.java1
-rw-r--r--core/java/android/widget/AbsSeekBar.java4
-rw-r--r--core/java/android/widget/ProgressBar.java8
-rw-r--r--core/java/com/android/internal/util/ProcFileReader.java50
11 files changed, 111 insertions, 17 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index b1d0305..a1fdef8 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -47,6 +47,7 @@ public class AppOpsManager {
public static final int OP_READ_CALENDAR = 8;
public static final int OP_WRITE_CALENDAR = 9;
public static final int OP_WIFI_SCAN = 10;
+ public static final int OP_POST_NOTIFICATION = 11;
private static String[] sOpNames = new String[] {
"COARSE_LOCATION",
@@ -60,6 +61,7 @@ public class AppOpsManager {
"READ_CALENDAR",
"WRITE_CALENDAR",
"WIFI_SCAN",
+ "POST_NOTIFICATION",
};
private static String[] sOpPerms = new String[] {
@@ -74,6 +76,7 @@ public class AppOpsManager {
android.Manifest.permission.READ_CALENDAR,
android.Manifest.permission.WRITE_CALENDAR,
android.Manifest.permission.ACCESS_WIFI_STATE,
+ null, // no permission required for notifications
};
public static String opToName(int op) {
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 62d4962..b4c222f 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -32,7 +32,7 @@ interface INotificationManager
in Notification notification, inout int[] idReceived, int userId);
void cancelNotificationWithTag(String pkg, String tag, int id, int userId);
- void setNotificationsEnabledForPackage(String pkg, boolean enabled);
- boolean areNotificationsEnabledForPackage(String pkg);
+ void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled);
+ boolean areNotificationsEnabledForPackage(String pkg, int uid);
}
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 262d87d..6b00c58 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -212,8 +212,10 @@ public final class InputManager {
} catch (RemoteException ex) {
throw new RuntimeException("Could not get input device information.", ex);
}
+ if (inputDevice != null) {
+ mInputDevices.setValueAt(index, inputDevice);
+ }
}
- mInputDevices.setValueAt(index, inputDevice);
return inputDevice;
}
}
@@ -241,6 +243,8 @@ public final class InputManager {
inputDevice = mIm.getInputDevice(id);
} catch (RemoteException ex) {
// Ignore the problem for the purposes of this method.
+ }
+ if (inputDevice == null) {
continue;
}
mInputDevices.setValueAt(i, inputDevice);
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index e0cf3b2..8051923 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -144,6 +144,14 @@ class GLES20Canvas extends HardwareCanvas {
}
}
+ @Override
+ public void setName(String name) {
+ super.setName(name);
+ nSetName(mRenderer, name);
+ }
+
+ private static native void nSetName(int renderer, String name);
+
///////////////////////////////////////////////////////////////////////////
// Hardware layers
///////////////////////////////////////////////////////////////////////////
diff --git a/core/java/android/view/GLES20RecordingCanvas.java b/core/java/android/view/GLES20RecordingCanvas.java
index 168ae81..7da2451 100644
--- a/core/java/android/view/GLES20RecordingCanvas.java
+++ b/core/java/android/view/GLES20RecordingCanvas.java
@@ -43,7 +43,7 @@ class GLES20RecordingCanvas extends GLES20Canvas {
private GLES20DisplayList mDisplayList;
private GLES20RecordingCanvas() {
- super(true /*record*/, true /*translucent*/);
+ super(true, true);
}
static GLES20RecordingCanvas obtain(GLES20DisplayList displayList) {
diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java
index eeae3ed..3d19260 100644
--- a/core/java/android/view/HardwareCanvas.java
+++ b/core/java/android/view/HardwareCanvas.java
@@ -27,6 +27,8 @@ import android.graphics.Rect;
* @hide
*/
public abstract class HardwareCanvas extends Canvas {
+ private String mName;
+
@Override
public boolean isHardwareAccelerated() {
return true;
@@ -36,7 +38,30 @@ public abstract class HardwareCanvas extends Canvas {
public void setBitmap(Bitmap bitmap) {
throw new UnsupportedOperationException();
}
-
+
+ /**
+ * Specifies the name of this canvas. Naming the canvas is entirely
+ * optional but can be useful for debugging purposes.
+ *
+ * @param name The name of the canvas, can be null
+ *
+ * @see #getName()
+ */
+ public void setName(String name) {
+ mName = name;
+ }
+
+ /**
+ * Returns the name of this canvas.
+ *
+ * @return The name of the canvas or null
+ *
+ * @see #setName(String)
+ */
+ public String getName() {
+ return mName;
+ }
+
/**
* Invoked before any drawing operation is performed in this canvas.
*
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 5e6125f..e0d48a4 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -543,6 +543,13 @@ public abstract class HardwareRenderer {
}
/**
+ * Optional, sets the name of the renderer. Useful for debugging purposes.
+ *
+ * @param name The name of this renderer, can be null
+ */
+ abstract void setName(String name);
+
+ /**
* Creates a hardware renderer using OpenGL.
*
* @param glVersion The version of OpenGL to use (1 for OpenGL 1, 11 for OpenGL 1.1, etc.)
@@ -756,6 +763,8 @@ public abstract class HardwareRenderer {
GL mGl;
HardwareCanvas mCanvas;
+ String mName;
+
long mFrameCount;
Paint mDebugPaint;
@@ -963,6 +972,7 @@ public abstract class HardwareRenderer {
} else {
if (mCanvas == null) {
mCanvas = createCanvas();
+ mCanvas.setName(mName);
}
if (mCanvas != null) {
setEnabled(true);
@@ -1277,6 +1287,11 @@ public abstract class HardwareRenderer {
return mCanvas;
}
+ @Override
+ void setName(String name) {
+ mName = name;
+ }
+
boolean canDraw() {
return mGl != null && mCanvas != null;
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index ba9eb89..c3321ea 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -739,6 +739,7 @@ public final class ViewRootImpl implements ViewParent,
final boolean translucent = attrs.format != PixelFormat.OPAQUE;
mAttachInfo.mHardwareRenderer = HardwareRenderer.createGlRenderer(2, translucent);
+ mAttachInfo.mHardwareRenderer.setName(attrs.getTitle().toString());
mAttachInfo.mHardwareAccelerated = mAttachInfo.mHardwareAccelerationRequested
= mAttachInfo.mHardwareRenderer != null;
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 3b5e75b..7674837 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -305,7 +305,7 @@ public abstract class AbsSeekBar extends ProgressBar {
}
// Canvas will be translated, so 0,0 is where we start drawing
- final int left = isLayoutRtl() ? available - thumbPos : thumbPos;
+ final int left = (isLayoutRtl() && mMirrorForRtl) ? available - thumbPos : thumbPos;
thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);
}
@@ -426,7 +426,7 @@ public abstract class AbsSeekBar extends ProgressBar {
int x = (int)event.getX();
float scale;
float progress = 0;
- if (isLayoutRtl()) {
+ if (isLayoutRtl() && mMirrorForRtl) {
if (x > width - mPaddingRight) {
scale = 0.0f;
} else if (x < mPaddingLeft) {
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index f2d2c65..d816200 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -223,6 +223,8 @@ public class ProgressBar extends View {
private boolean mAttached;
private boolean mRefreshIsPosted;
+ boolean mMirrorForRtl = false;
+
private final ArrayList<RefreshData> mRefreshData = new ArrayList<RefreshData>();
private AccessibilityEventSender mAccessibilityEventSender;
@@ -302,6 +304,8 @@ public class ProgressBar extends View {
setIndeterminate(mOnlyIndeterminate || a.getBoolean(
R.styleable.ProgressBar_indeterminate, mIndeterminate));
+ mMirrorForRtl = a.getBoolean(R.styleable.ProgressBar_mirrorForRtl, mMirrorForRtl);
+
a.recycle();
}
@@ -1004,7 +1008,7 @@ public class ProgressBar extends View {
}
}
}
- if (isLayoutRtl()) {
+ if (isLayoutRtl() && mMirrorForRtl) {
int tempLeft = left;
left = w - right;
right = w - tempLeft;
@@ -1026,7 +1030,7 @@ public class ProgressBar extends View {
// Translate canvas so a indeterminate circular progress bar with padding
// rotates properly in its animation
canvas.save();
- if(isLayoutRtl()) {
+ if(isLayoutRtl() && mMirrorForRtl) {
canvas.translate(getWidth() - mPaddingRight, mPaddingTop);
canvas.scale(-1.0f, 1.0f);
} else {
diff --git a/core/java/com/android/internal/util/ProcFileReader.java b/core/java/com/android/internal/util/ProcFileReader.java
index 72e1f0f..81571fe 100644
--- a/core/java/com/android/internal/util/ProcFileReader.java
+++ b/core/java/com/android/internal/util/ProcFileReader.java
@@ -19,6 +19,7 @@ package com.android.internal.util;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
+import java.net.ProtocolException;
import java.nio.charset.Charsets;
/**
@@ -82,12 +83,15 @@ public class ProcFileReader implements Closeable {
}
/**
- * Find buffer index of next token delimiter, usually space or newline. Will
- * fill buffer as needed.
+ * Find buffer index of next token delimiter, usually space or newline.
+ * Fills buffer as needed.
+ *
+ * @return Index of next delimeter, otherwise -1 if no tokens remain on
+ * current line.
*/
private int nextTokenIndex() throws IOException {
if (mLineFinished) {
- throw new IOException("no tokens remaining on current line");
+ return -1;
}
int i = 0;
@@ -105,7 +109,7 @@ public class ProcFileReader implements Closeable {
}
} while (fillBuf() > 0);
- throw new IOException("end of stream while looking for token boundary");
+ throw new ProtocolException("End of stream while looking for token boundary");
}
/**
@@ -136,7 +140,7 @@ public class ProcFileReader implements Closeable {
}
} while (fillBuf() > 0);
- throw new IOException("end of stream while looking for line boundary");
+ throw new ProtocolException("End of stream while looking for line boundary");
}
/**
@@ -144,9 +148,11 @@ public class ProcFileReader implements Closeable {
*/
public String nextString() throws IOException {
final int tokenIndex = nextTokenIndex();
- final String s = new String(mBuffer, 0, tokenIndex, Charsets.US_ASCII);
- consumeBuf(tokenIndex + 1);
- return s;
+ if (tokenIndex == -1) {
+ throw new ProtocolException("Missing required string");
+ } else {
+ return parseAndConsumeString(tokenIndex);
+ }
}
/**
@@ -154,6 +160,33 @@ public class ProcFileReader implements Closeable {
*/
public long nextLong() throws IOException {
final int tokenIndex = nextTokenIndex();
+ if (tokenIndex == -1) {
+ throw new ProtocolException("Missing required long");
+ } else {
+ return parseAndConsumeLong(tokenIndex);
+ }
+ }
+
+ /**
+ * Parse and return next token as base-10 encoded {@code long}, or return
+ * the given default value if no remaining tokens on current line.
+ */
+ public long nextOptionalLong(long def) throws IOException {
+ final int tokenIndex = nextTokenIndex();
+ if (tokenIndex == -1) {
+ return def;
+ } else {
+ return parseAndConsumeLong(tokenIndex);
+ }
+ }
+
+ private String parseAndConsumeString(int tokenIndex) throws IOException {
+ final String s = new String(mBuffer, 0, tokenIndex, Charsets.US_ASCII);
+ consumeBuf(tokenIndex + 1);
+ return s;
+ }
+
+ private long parseAndConsumeLong(int tokenIndex) throws IOException {
final boolean negative = mBuffer[0] == '-';
// TODO: refactor into something like IntegralToString
@@ -193,6 +226,7 @@ public class ProcFileReader implements Closeable {
return (int) value;
}
+ @Override
public void close() throws IOException {
mStream.close();
}