Merge commit 'goog/master' into merge_master
diff --git a/core/java/android/server/BluetoothDeviceService.java b/core/java/android/server/BluetoothDeviceService.java
index dcaede2..75c590d 100644
--- a/core/java/android/server/BluetoothDeviceService.java
+++ b/core/java/android/server/BluetoothDeviceService.java
@@ -809,7 +809,16 @@
}
/* package */ synchronized void addRemoteDeviceProperties(String address, String[] properties) {
- Map<String, String> propertyValues = new HashMap<String, String>();
+ /*
+ * We get a DeviceFound signal every time RSSI changes or name changes.
+ * Don't create a new Map object every time */
+ Map<String, String> propertyValues = mRemoteDeviceProperties.get(address);
+ if (propertyValues != null) {
+ propertyValues.clear();
+ } else {
+ propertyValues = new HashMap<String, String>();
+ }
+
for (int i = 0; i < properties.length; i+=2) {
String value = null;
if (propertyValues.containsKey(properties[i])) {
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index 00c13b7..ed66dce 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -130,12 +130,14 @@
mBluetoothService.addRemoteDeviceProperties(address, properties);
String rssi = mBluetoothService.getRemoteDeviceProperty(address, "RSSI");
String classValue = mBluetoothService.getRemoteDeviceProperty(address, "Class");
+ String name = mBluetoothService.getRemoteDeviceProperty(address, "Name");
if (rssi != null && classValue != null) {
Intent intent = new Intent(BluetoothIntent.REMOTE_DEVICE_FOUND_ACTION);
intent.putExtra(BluetoothIntent.ADDRESS, address);
- intent.putExtra(BluetoothIntent.CLASS, classValue);
+ intent.putExtra(BluetoothIntent.CLASS, Integer.valueOf(classValue));
intent.putExtra(BluetoothIntent.RSSI, (short)Integer.valueOf(rssi).intValue());
+ intent.putExtra(BluetoothIntent.NAME, name);
mContext.sendBroadcast(intent, BLUETOOTH_PERM);
} else {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 5c75af2c..1678f9a 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -416,6 +416,7 @@
boolean singleLine = false;
int maxlength = -1;
CharSequence text = "";
+ CharSequence hint = null;
int shadowcolor = 0;
float dx = 0, dy = 0, r = 0;
boolean password = false;
@@ -543,7 +544,7 @@
break;
case com.android.internal.R.styleable.TextView_hint:
- setHint(a.getText(attr));
+ hint = a.getText(attr);
break;
case com.android.internal.R.styleable.TextView_text:
@@ -873,6 +874,7 @@
}
setText(text, bufferType);
+ if (hint != null) setHint(hint);
/*
* Views are not normally focusable unless specified to be.
@@ -2817,8 +2819,9 @@
checkForRelayout();
}
- if (mText.length() == 0)
+ if (mText.length() == 0) {
invalidate();
+ }
}
/**
@@ -4802,10 +4805,12 @@
alignment = Layout.Alignment.ALIGN_NORMAL;
}
+ boolean shouldEllipsize = mEllipsize != null && mInput == null;
+
if (mText instanceof Spannable) {
mLayout = new DynamicLayout(mText, mTransformed, mTextPaint, w,
alignment, mSpacingMult,
- mSpacingAdd, mIncludePad, mEllipsize,
+ mSpacingAdd, mIncludePad, mInput == null ? mEllipsize : null,
ellipsisWidth);
} else {
if (boring == UNKNOWN_BORING) {
@@ -4832,7 +4837,7 @@
// Log.e("aaa", "Boring: " + mTransformed);
mSavedLayout = (BoringLayout) mLayout;
- } else if (mEllipsize != null && boring.width <= w) {
+ } else if (shouldEllipsize && boring.width <= w) {
if (mSavedLayout != null) {
mLayout = mSavedLayout.
replaceOrMake(mTransformed, mTextPaint,
@@ -4845,7 +4850,7 @@
boring, mIncludePad, mEllipsize,
ellipsisWidth);
}
- } else if (mEllipsize != null) {
+ } else if (shouldEllipsize) {
mLayout = new StaticLayout(mTransformed,
0, mTransformed.length(),
mTextPaint, w, alignment, mSpacingMult,
@@ -4857,7 +4862,7 @@
mIncludePad);
// Log.e("aaa", "Boring but wide: " + mTransformed);
}
- } else if (mEllipsize != null) {
+ } else if (shouldEllipsize) {
mLayout = new StaticLayout(mTransformed,
0, mTransformed.length(),
mTextPaint, w, alignment, mSpacingMult,
@@ -4870,9 +4875,12 @@
}
}
+ shouldEllipsize = mEllipsize != null;
mHintLayout = null;
if (mHint != null) {
+ if (shouldEllipsize) hintWidth = w;
+
if (hintBoring == UNKNOWN_BORING) {
hintBoring = BoringLayout.isBoring(mHint, mTextPaint,
mHintBoring);
@@ -4882,24 +4890,50 @@
}
if (hintBoring != null) {
- if (hintBoring.width <= hintWidth) {
+ if (hintBoring.width <= hintWidth &&
+ (!shouldEllipsize || hintBoring.width <= ellipsisWidth)) {
if (mSavedHintLayout != null) {
mHintLayout = mSavedHintLayout.
replaceOrMake(mHint, mTextPaint,
- hintWidth, alignment, mSpacingMult,
- mSpacingAdd, hintBoring, mIncludePad);
+ hintWidth, alignment, mSpacingMult, mSpacingAdd,
+ hintBoring, mIncludePad);
} else {
mHintLayout = BoringLayout.make(mHint, mTextPaint,
- hintWidth, alignment, mSpacingMult,
- mSpacingAdd, hintBoring, mIncludePad);
+ hintWidth, alignment, mSpacingMult, mSpacingAdd,
+ hintBoring, mIncludePad);
}
mSavedHintLayout = (BoringLayout) mHintLayout;
+ } else if (shouldEllipsize && hintBoring.width <= hintWidth) {
+ if (mSavedHintLayout != null) {
+ mHintLayout = mSavedHintLayout.
+ replaceOrMake(mHint, mTextPaint,
+ hintWidth, alignment, mSpacingMult, mSpacingAdd,
+ hintBoring, mIncludePad, mEllipsize,
+ ellipsisWidth);
+ } else {
+ mHintLayout = BoringLayout.make(mHint, mTextPaint,
+ hintWidth, alignment, mSpacingMult, mSpacingAdd,
+ hintBoring, mIncludePad, mEllipsize,
+ ellipsisWidth);
+ }
+ } else if (shouldEllipsize) {
+ mHintLayout = new StaticLayout(mHint,
+ 0, mHint.length(),
+ mTextPaint, hintWidth, alignment, mSpacingMult,
+ mSpacingAdd, mIncludePad, mEllipsize,
+ ellipsisWidth);
} else {
mHintLayout = new StaticLayout(mHint, mTextPaint,
hintWidth, alignment, mSpacingMult, mSpacingAdd,
mIncludePad);
}
+ } else if (shouldEllipsize) {
+ mHintLayout = new StaticLayout(mHint,
+ 0, mHint.length(),
+ mTextPaint, hintWidth, alignment, mSpacingMult,
+ mSpacingAdd, mIncludePad, mEllipsize,
+ ellipsisWidth);
} else {
mHintLayout = new StaticLayout(mHint, mTextPaint,
hintWidth, alignment, mSpacingMult, mSpacingAdd,
@@ -4983,8 +5017,7 @@
}
}
- private static final BoringLayout.Metrics UNKNOWN_BORING =
- new BoringLayout.Metrics();
+ private static final BoringLayout.Metrics UNKNOWN_BORING = new BoringLayout.Metrics();
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
@@ -5011,8 +5044,7 @@
}
if (des < 0) {
- boring = BoringLayout.isBoring(mTransformed, mTextPaint,
- mBoring);
+ boring = BoringLayout.isBoring(mTransformed, mTextPaint, mBoring);
if (boring != null) {
mBoring = boring;
}
@@ -5022,8 +5054,7 @@
if (boring == null || boring == UNKNOWN_BORING) {
if (des < 0) {
- des = (int) FloatMath.ceil(Layout.
- getDesiredWidth(mTransformed, mTextPaint));
+ des = (int) FloatMath.ceil(Layout.getDesiredWidth(mTransformed, mTextPaint));
}
width = des;
@@ -5041,13 +5072,12 @@
int hintDes = -1;
int hintWidth;
- if (mHintLayout != null) {
+ if (mHintLayout != null && mEllipsize == null) {
hintDes = desired(mHintLayout);
}
if (hintDes < 0) {
- hintBoring = BoringLayout.isBoring(mHint, mTextPaint,
- mHintBoring);
+ hintBoring = BoringLayout.isBoring(mHint, mTextPaint, mHintBoring);
if (hintBoring != null) {
mHintBoring = hintBoring;
}
@@ -5055,8 +5085,8 @@
if (hintBoring == null || hintBoring == UNKNOWN_BORING) {
if (hintDes < 0) {
- hintDes = (int) FloatMath.ceil(Layout.
- getDesiredWidth(mHint, mTextPaint));
+ hintDes = (int) FloatMath.ceil(
+ Layout.getDesiredWidth(mHint, mTextPaint));
}
hintWidth = hintDes;
@@ -5102,20 +5132,18 @@
if (mLayout == null) {
makeNewLayout(want, hintWant, boring, hintBoring,
- width - getCompoundPaddingLeft() - getCompoundPaddingRight(),
- false);
+ width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
} else if ((mLayout.getWidth() != want) || (hintWidth != hintWant) ||
(mLayout.getEllipsizedWidth() !=
width - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
if (mHint == null && mEllipsize == null &&
want > mLayout.getWidth() &&
(mLayout instanceof BoringLayout ||
- (fromexisting && des >= 0 && des <= want))) {
+ (fromexisting && des >= 0 && des <= want))) {
mLayout.increaseWidthTo(want);
} else {
makeNewLayout(want, hintWant, boring, hintBoring,
- width - getCompoundPaddingLeft() - getCompoundPaddingRight(),
- false);
+ width - getCompoundPaddingLeft() - getCompoundPaddingRight(), false);
}
} else {
// Width has not changed.
@@ -5136,11 +5164,9 @@
}
}
- int unpaddedHeight = height - getCompoundPaddingTop() -
- getCompoundPaddingBottom();
+ int unpaddedHeight = height - getCompoundPaddingTop() - getCompoundPaddingBottom();
if (mMaxMode == LINES && mLayout.getLineCount() > mMaximum) {
- unpaddedHeight = Math.min(unpaddedHeight,
- mLayout.getLineTop(mMaximum));
+ unpaddedHeight = Math.min(unpaddedHeight, mLayout.getLineTop(mMaximum));
}
/*
@@ -5159,8 +5185,9 @@
}
private int getDesiredHeight() {
- return Math.max(getDesiredHeight(mLayout, true),
- getDesiredHeight(mHintLayout, false));
+ return Math.max(
+ getDesiredHeight(mLayout, true),
+ getDesiredHeight(mHintLayout, mEllipsize != null));
}
private int getDesiredHeight(Layout layout, boolean cap) {
@@ -5803,6 +5830,9 @@
}
private void startMarquee() {
+ // Do not ellipsize EditText
+ if (mInput != null) return;
+
if (compressText(getWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
return;
}
diff --git a/libs/rs/java/Film/AndroidManifest.xml b/libs/rs/java/Film/AndroidManifest.xml
index 491ee14..a5ce8a1 100644
--- a/libs/rs/java/Film/AndroidManifest.xml
+++ b/libs/rs/java/Film/AndroidManifest.xml
@@ -3,6 +3,7 @@
package="com.android.film">
<application android:label="Film">
<activity android:name="Film"
+ android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/libs/rs/java/Film/res/raw/filmstrip.c b/libs/rs/java/Film/res/raw/filmstrip.c
index 75810c0..a3b3d90 100644
--- a/libs/rs/java/Film/res/raw/filmstrip.c
+++ b/libs/rs/java/Film/res/raw/filmstrip.c
@@ -2,8 +2,8 @@
#pragma version(1)
#pragma stateVertex(PV)
-#pragma stateFragment(default)
-#pragma stateFragmentStore(default)
+#pragma stateFragment(PFBackground)
+#pragma stateFragmentStore(PFSBackground)
/*
typedef struct FilmScriptUserEnvRec {
@@ -19,66 +19,54 @@
// bank1: (r) The position information
// bank2: (rw) The temporary texture state
-int main(void* con, int ft, int index)
+int main(int index)
{
- int f1;
- int f2;
- int f3;
- int f4;
- int f5;
- int f6;
- int f7;
- int f8;
- int f9;
- int f10;
- int f11;
- int f12;
- int f13;
- int f14;
- int f15;
- int f16;
-
+ int f1,f2,f3,f4, f5,f6,f7,f8, f9,f10,f11,f12, f13,f14,f15,f16;
+ int g1,g2,g3,g4, g5,g6,g7,g8, g9,g10,g11,g12, g13,g14,g15,g16;
+ int float_1;
+ int float_0;
+ int float_2;
+ int float_90;
+ int float_0_5;
int trans; // float
int rot; // float
+ int x;
+ float_2 = intToFloat(2);
+ float_1 = intToFloat(1);
+ float_0 = intToFloat(0);
+ float_90= intToFloat(90);
+ float_0_5 = fixedtoFloat(0x8000);
- //trans = loadEnvF(con, 1, 0);
- //rot = loadEnvF(con, 1, 1);
+ trans = loadF(1, 0);
+ rot = loadF(1, 1);
- //matrixLoadTranslate(con, &f1, 0, 0, trans);
- //matrixRotate(con, &f1, rot, 1, 0, 0);
- //matrixScale(con, &f1, 3.0f, 3.0f, 3.0f);
- //storeEnvMatrix(con, 3, RS_PROGRAM_VERTEX_MODELVIEW_OFFSET, &f1);
-
- //rsc_Matrix m;
- //int imgId = 0;
-
- // This should be replaced in the compiler with a
- // smart load of a structure.
- //const FilmScriptUserEnv *env = loadEnvVp(con, 0,0);
+ matrixLoadScale(&f16, float_2, float_2, float_2);
+ matrixTranslate(&f16, 0, 0, trans);
+ matrixRotate(&f16, float_90, 0, 0, float_1);
+ matrixRotate(&f16, rot, float_1, 0, 0);
+ storeEnvMatrix(3, 0, &f16);
//materialDiffuse(con, 0.0f, 0.0f, 0.0f, 1.0f);
//materialSpecular(con, 0.5f, 0.5f, 0.5f, 0.5f);
- //materialShininess(con, 20.0f);
-
-
-
+ //materialShininess(intToFloat(20));
//lightPosition(con, 0.2f, -0.2f, -2.0f, 0.0f);
-
- //contextBindProgramFragmentStore(con, NAMED_PFSBackground);
- //contextBindProgramFragment(con, NAMED_PFBackground);
//enable(con, GL_LIGHTING);
- renderTriangleMesh(con, NAMED_mesh);
+ renderTriangleMesh(NAMED_mesh);
+
+
+
+ //int imgId = 0;
/*
- contextBindProgramFragmentStore(con, env->fsImages);
- contextBindProgramFragment(con, env->fpImages);
- disable(con, GL_LIGHTING);
+ contextBindProgramFragmentStore(env->fsImages);
+ contextBindProgramFragment(env->fpImages);
+ disable(GL_LIGHTING);
- float focusPos = loadEnvF(con, 1, 2);
- int32_t focusID = 0;
- int32_t lastFocusID = loadEnvI32(con, 2, 0);
- int32_t imgCount = 13;
+ float focusPos = loadEnvF(1, 2);
+ int focusID = 0;
+ int lastFocusID = loadEnvI32(2, 0);
+ int imgCount = 13;
if (trans > (-.3)) {
focusID = -1.0 - focusPos;
@@ -127,5 +115,6 @@
renderTriangleMeshRange(con, env->mesh, env->triangleOffsets[start], env->triangleOffsets[end] - env->triangleOffsets[start]);
}
*/
+ return 0;
}
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index b4b5f4b..5c6a6fa 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -51,18 +51,17 @@
public void setFilmStripPosition(int x, int y)
{
- if (x < 0) {
- x = 0;
- }
- if (x > 50) {
+ if (x < 50) {
x = 50;
}
+ if (x > 270) {
+ x = 270;
+ }
- float anim = ((float)x) / 50.f;
- mBufferPos[0] = -2f * anim - .2f; // translation
- mBufferPos[1] = -90 + (anim * 40); // rotation
+ float anim = ((float)x-50) / 270.f;
+ mBufferPos[0] = 2f * anim + 0.5f; // translation
+ mBufferPos[1] = (anim * 40); // rotation
mBufferPos[2] = ((float)y) / 16.f - 8; // focusPos
-
mAllocPos.data(mBufferPos);
}
@@ -166,28 +165,14 @@
mAllocPos = mRS.allocationCreatePredefSized(
RenderScript.ElementPredefined.USER_FLOAT,
mBufferPos.length);
- setFilmStripPosition(0, 0);
mPVA = new ProgramVertexAlloc(mRS);
mPV.bindAllocation(0, mPVA.mAlloc);
mPVA.setupProjectionNormalized(320, 480);
- Matrix m = new Matrix();
- m.loadIdentity();
-
- m.translate(0, 0, 1);
- m.rotate(90, 0, 0, 1);
- m.rotate(20, 1, 0, 0);
- mPVA.loadModelview(m);
-
-
-
-
-
- //mScriptStrip.bindAllocation(mEnvAlloc, 0);
mScriptStrip.bindAllocation(mAllocPos, 1);
- //mScriptStrip.bindAllocation(gStateAlloc, 2);
+ //mScriptStrip.bindAllocation(gStateAlloc, 2);
mScriptStrip.bindAllocation(mPVA.mAlloc, 3);
@@ -234,6 +219,8 @@
mPartAlloc.data(t2);
*/
+ setFilmStripPosition(0, 0);
+
mRS.contextBindRootScript(mScriptStrip);
}
}
diff --git a/libs/rs/java/Film/src/com/android/film/FilmView.java b/libs/rs/java/Film/src/com/android/film/FilmView.java
index 452d522..a743b1b 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmView.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmView.java
@@ -74,7 +74,7 @@
if (act == ev.ACTION_UP) {
ret = false;
}
- //mRender.newTouchPosition((int)ev.getX(), (int)ev.getY());
+ mRender.setFilmStripPosition((int)ev.getX(), (int)ev.getY());
return ret;
}
}
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 557f3ae..e170b8c 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -43,6 +43,16 @@
}
}
+extern "C" float fixedToFloat(int32_t f)
+{
+ return ((float)f) / 0x10000;
+}
+
+extern "C" float intToFloat(int32_t f)
+{
+ return (float)f;
+}
+
extern "C" void matrixLoadIdentity(rsc_Matrix *mat)
{
Matrix *m = reinterpret_cast<Matrix *>(mat);