diff --git a/apps/Development/Android.mk b/apps/Development/Android.mk
index 1cef54881..fa929b6c3 100644
--- a/apps/Development/Android.mk
+++ b/apps/Development/Android.mk
@@ -3,6 +3,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
+LOCAL_STATIC_JAVA_LIBRARIES := android-common
LOCAL_JAVA_LIBRARIES := android.test.runner
LOCAL_SRC_FILES := $(call all-subdir-java-files) \
diff --git a/apps/Development/res/layout/development_settings.xml b/apps/Development/res/layout/development_settings.xml
index 9c04f5d6a..16c2cdf58 100644
--- a/apps/Development/res/layout/development_settings.xml
+++ b/apps/Development/res/layout/development_settings.xml
@@ -54,10 +54,16 @@
android:layout_below="@id/wait_for_debugger"
android:layout_alignParentLeft="true" />
+
+
diff --git a/apps/Development/src/com/android/development/DevelopmentSettings.java b/apps/Development/src/com/android/development/DevelopmentSettings.java
index 9cb6fc639..c01ea59d6 100644
--- a/apps/Development/src/com/android/development/DevelopmentSettings.java
+++ b/apps/Development/src/com/android/development/DevelopmentSettings.java
@@ -52,6 +52,7 @@ public class DevelopmentSettings extends Activity {
private Button mDebugAppButton;
private CheckBox mWaitForDebuggerCB;
private CheckBox mAlwaysFinishCB;
+ private Spinner mPointerLocationSpinner;
private CheckBox mShowLoadCB;
private CheckBox mShowCpuCB;
private CheckBox mEnableGLCB;
@@ -68,6 +69,7 @@ public class DevelopmentSettings extends Activity {
private String mDebugApp;
private boolean mWaitForDebugger;
private boolean mAlwaysFinish;
+ private int mPointerLocation;
private int mProcessLimit;
private boolean mShowSleep;
private boolean mShowXmpp;
@@ -94,6 +96,16 @@ public class DevelopmentSettings extends Activity {
mWaitForDebuggerCB.setOnClickListener(mWaitForDebuggerClicked);
mAlwaysFinishCB = (CheckBox)findViewById(R.id.always_finish);
mAlwaysFinishCB.setOnClickListener(mAlwaysFinishClicked);
+ mPointerLocationSpinner = (Spinner)findViewById(R.id.pointer_location);
+ mPointerLocationSpinner.setOnItemSelectedListener(mPointerLocationChanged);
+ ArrayAdapter adapter = new ArrayAdapter(
+ this,
+ android.R.layout.simple_spinner_item,
+ new String[] {
+ "No Pointer Location",
+ "Pointer Location" });
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ mPointerLocationSpinner.setAdapter(adapter);
mShowLoadCB = (CheckBox)findViewById(R.id.show_load);
mShowLoadCB.setOnClickListener(mShowLoadClicked);
mShowCpuCB = (CheckBox)findViewById(R.id.show_cpu);
@@ -113,7 +125,7 @@ public class DevelopmentSettings extends Activity {
mCompatibilityModeCB.setOnClickListener(mCompatibilityModeClicked);
mMaxProcsSpinner = (Spinner)findViewById(R.id.max_procs);
mMaxProcsSpinner.setOnItemSelectedListener(mMaxProcsChanged);
- ArrayAdapter adapter = new ArrayAdapter(
+ adapter = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
new String[] {
@@ -169,6 +181,7 @@ public class DevelopmentSettings extends Activity {
super.onResume();
updateDebugOptions();
updateFinishOptions();
+ updatePointerLocationOptions();
updateProcessLimitOptions();
updateSharedOptions();
updateFlingerOptions();
@@ -221,6 +234,17 @@ public class DevelopmentSettings extends Activity {
mAlwaysFinishCB.setChecked(mAlwaysFinish);
}
+ private void writePointerLocationOptions() {
+ Settings.System.putInt(getContentResolver(),
+ Settings.System.POINTER_LOCATION, mPointerLocation);
+ }
+
+ private void updatePointerLocationOptions() {
+ mPointerLocation = Settings.System.getInt(getContentResolver(),
+ Settings.System.POINTER_LOCATION, 0);
+ mPointerLocationSpinner.setSelection(mPointerLocation);
+ }
+
private void writeProcessLimitOptions() {
try {
ActivityManagerNative.getDefault().setProcessLimit(mProcessLimit);
@@ -420,6 +444,18 @@ public class DevelopmentSettings extends Activity {
}
};
+ private Spinner.OnItemSelectedListener mPointerLocationChanged
+ = new Spinner.OnItemSelectedListener() {
+ public void onItemSelected(android.widget.AdapterView av, View v,
+ int position, long id) {
+ mPointerLocation = position;
+ writePointerLocationOptions();
+ }
+
+ public void onNothingSelected(android.widget.AdapterView av) {
+ }
+ };
+
private Spinner.OnItemSelectedListener mMaxProcsChanged
= new Spinner.OnItemSelectedListener() {
public void onItemSelected(android.widget.AdapterView av, View v,
diff --git a/apps/Development/src/com/android/development/PointerLocation.java b/apps/Development/src/com/android/development/PointerLocation.java
index 38b4af2dc..88828b095 100644
--- a/apps/Development/src/com/android/development/PointerLocation.java
+++ b/apps/Development/src/com/android/development/PointerLocation.java
@@ -16,20 +16,11 @@
package com.android.development;
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Paint.FontMetricsInt;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.ViewConfiguration;
-import android.view.WindowManager;
-import android.view.VelocityTracker;
-import android.view.View;
+import com.android.common.ui.PointerLocationView;
-import java.util.ArrayList;
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
/**
* Demonstrates wrapping a layout in a ScrollView.
@@ -39,304 +30,11 @@ public class PointerLocation extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- setContentView(new MyView(this));
+ setContentView(new PointerLocationView(this));
// Make the screen full bright for this activity.
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1.0f;
getWindow().setAttributes(lp);
}
-
- public static class PointerState {
- private final ArrayList mXs = new ArrayList();
- private final ArrayList mYs = new ArrayList();
- private boolean mCurDown;
- private int mCurX;
- private int mCurY;
- private float mCurPressure;
- private float mCurSize;
- private int mCurWidth;
- private VelocityTracker mVelocity;
- }
-
- public class MyView extends View {
- private final ViewConfiguration mVC;
- private final Paint mTextPaint;
- private final Paint mTextBackgroundPaint;
- private final Paint mTextLevelPaint;
- private final Paint mPaint;
- private final Paint mTargetPaint;
- private final Paint mPathPaint;
- private final FontMetricsInt mTextMetrics = new FontMetricsInt();
- private int mHeaderBottom;
- private boolean mCurDown;
- private int mCurNumPointers;
- private int mMaxNumPointers;
- private final ArrayList mPointers
- = new ArrayList();
-
- public MyView(Context c) {
- super(c);
- mVC = ViewConfiguration.get(c);
- mTextPaint = new Paint();
- mTextPaint.setAntiAlias(true);
- mTextPaint.setTextSize(10
- * getResources().getDisplayMetrics().density);
- mTextPaint.setARGB(255, 0, 0, 0);
- mTextBackgroundPaint = new Paint();
- mTextBackgroundPaint.setAntiAlias(false);
- mTextBackgroundPaint.setARGB(128, 255, 255, 255);
- mTextLevelPaint = new Paint();
- mTextLevelPaint.setAntiAlias(false);
- mTextLevelPaint.setARGB(192, 255, 0, 0);
- mPaint = new Paint();
- mPaint.setAntiAlias(true);
- mPaint.setARGB(255, 255, 255, 255);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeWidth(2);
- mTargetPaint = new Paint();
- mTargetPaint.setAntiAlias(false);
- mTargetPaint.setARGB(255, 0, 0, 192);
- mPathPaint = new Paint();
- mPathPaint.setAntiAlias(false);
- mPathPaint.setARGB(255, 0, 96, 255);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeWidth(1);
-
- PointerState ps = new PointerState();
- ps.mVelocity = VelocityTracker.obtain();
- mPointers.add(ps);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- mTextPaint.getFontMetricsInt(mTextMetrics);
- mHeaderBottom = -mTextMetrics.ascent+mTextMetrics.descent+2;
- Log.i("foo", "Metrics: ascent=" + mTextMetrics.ascent
- + " descent=" + mTextMetrics.descent
- + " leading=" + mTextMetrics.leading
- + " top=" + mTextMetrics.top
- + " bottom=" + mTextMetrics.bottom);
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- final int w = getWidth();
- final int itemW = w/7;
- final int base = -mTextMetrics.ascent+1;
- final int bottom = mHeaderBottom;
-
- final int NP = mPointers.size();
-
- if (NP > 0) {
- final PointerState ps = mPointers.get(0);
- canvas.drawRect(0, 0, itemW-1, bottom,mTextBackgroundPaint);
- canvas.drawText("P: " + mCurNumPointers + " / " + mMaxNumPointers,
- 1, base, mTextPaint);
-
- final int N = ps.mXs.size();
- if ((mCurDown && ps.mCurDown) || N == 0) {
- canvas.drawRect(itemW, 0, (itemW * 2) - 1, bottom, mTextBackgroundPaint);
- canvas.drawText("X: " + ps.mCurX, 1 + itemW, base, mTextPaint);
- canvas.drawRect(itemW * 2, 0, (itemW * 3) - 1, bottom, mTextBackgroundPaint);
- canvas.drawText("Y: " + ps.mCurY, 1 + itemW * 2, base, mTextPaint);
- } else {
- float dx = ps.mXs.get(N-1) - ps.mXs.get(0);
- float dy = ps.mYs.get(N-1) - ps.mYs.get(0);
- canvas.drawRect(itemW, 0, (itemW * 2) - 1, bottom,
- Math.abs(dx) < mVC.getScaledTouchSlop()
- ? mTextBackgroundPaint : mTextLevelPaint);
- canvas.drawText("dX: " + String.format("%.1f", dx), 1 + itemW, base, mTextPaint);
- canvas.drawRect(itemW * 2, 0, (itemW * 3) - 1, bottom,
- Math.abs(dy) < mVC.getScaledTouchSlop()
- ? mTextBackgroundPaint : mTextLevelPaint);
- canvas.drawText("dY: " + String.format("%.1f", dy), 1 + itemW * 2, base, mTextPaint);
- }
-
- canvas.drawRect(itemW * 3, 0, (itemW * 4) - 1, bottom, mTextBackgroundPaint);
- int velocity = ps.mVelocity == null ? 0 : (int) (ps.mVelocity.getXVelocity() * 1000);
- canvas.drawText("Xv: " + velocity, 1 + itemW * 3, base, mTextPaint);
-
- canvas.drawRect(itemW * 4, 0, (itemW * 5) - 1, bottom, mTextBackgroundPaint);
- velocity = ps.mVelocity == null ? 0 : (int) (ps.mVelocity.getYVelocity() * 1000);
- canvas.drawText("Yv: " + velocity, 1 + itemW * 4, base, mTextPaint);
-
- canvas.drawRect(itemW * 5, 0, (itemW * 6) - 1, bottom, mTextBackgroundPaint);
- canvas.drawRect(itemW * 5, 0, (itemW * 5) + (ps.mCurPressure * itemW) - 1,
- bottom, mTextLevelPaint);
- canvas.drawText("Prs: " + String.format("%.2f", ps.mCurPressure), 1 + itemW * 5,
- base, mTextPaint);
-
- canvas.drawRect(itemW * 6, 0, w, bottom, mTextBackgroundPaint);
- canvas.drawRect(itemW * 6, 0, (itemW * 6) + (ps.mCurSize * itemW) - 1,
- bottom, mTextLevelPaint);
- canvas.drawText("Size: " + String.format("%.2f", ps.mCurSize), 1 + itemW * 6,
- base, mTextPaint);
- }
-
- for (int p=0; p> MotionEvent.ACTION_POINTER_ID_SHIFT;
- while (NP <= id) {
- PointerState ps = new PointerState();
- ps.mVelocity = VelocityTracker.obtain();
- mPointers.add(ps);
- NP++;
- }
- final PointerState ps = mPointers.get(id);
- ps.mVelocity = VelocityTracker.obtain();
- ps.mCurDown = true;
- Log.i("Pointer", "Pointer " + (id+1) + ": DOWN");
- }
-
- final int NI = event.getPointerCount();
-
- mCurDown = action != MotionEvent.ACTION_UP
- && action != MotionEvent.ACTION_CANCEL;
- mCurNumPointers = mCurDown ? NI : 0;
- if (mMaxNumPointers < mCurNumPointers) {
- mMaxNumPointers = mCurNumPointers;
- }
-
- for (int i=0; i> MotionEvent.ACTION_POINTER_ID_SHIFT;
- final PointerState ps = mPointers.get(id);
- ps.mXs.add(Float.NaN);
- ps.mYs.add(Float.NaN);
- ps.mCurDown = false;
- Log.i("Pointer", "Pointer " + (id+1) + ": UP");
- }
-
- if (action == MotionEvent.ACTION_UP) {
- for (int i=0; i