diff --git a/apps/Tag/Android.mk b/apps/Tag/Android.mk
new file mode 100644
index 000000000..949cd3f6b
--- /dev/null
+++ b/apps/Tag/Android.mk
@@ -0,0 +1,17 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := TagApp
+# LOCAL_PROGUARD_EABLED := disabled
+
+# LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/apps/Tag/AndroidManifest.xml b/apps/Tag/AndroidManifest.xml
new file mode 100644
index 000000000..44c96c205
--- /dev/null
+++ b/apps/Tag/AndroidManifest.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/Tag/res/drawable/ic_tab_artists.xml b/apps/Tag/res/drawable/ic_tab_artists.xml
new file mode 100644
index 000000000..a100b7cc2
--- /dev/null
+++ b/apps/Tag/res/drawable/ic_tab_artists.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/apps/Tag/res/drawable/ic_tab_artists_grey.png b/apps/Tag/res/drawable/ic_tab_artists_grey.png
new file mode 100644
index 000000000..9baa30eac
Binary files /dev/null and b/apps/Tag/res/drawable/ic_tab_artists_grey.png differ
diff --git a/apps/Tag/res/drawable/ic_tab_artists_white.png b/apps/Tag/res/drawable/ic_tab_artists_white.png
new file mode 100644
index 000000000..3b010d536
Binary files /dev/null and b/apps/Tag/res/drawable/ic_tab_artists_white.png differ
diff --git a/apps/Tag/res/layout/hello_activity.xml b/apps/Tag/res/layout/hello_activity.xml
new file mode 100644
index 000000000..d4f5fe669
--- /dev/null
+++ b/apps/Tag/res/layout/hello_activity.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
diff --git a/apps/Tag/res/layout/main.xml b/apps/Tag/res/layout/main.xml
new file mode 100644
index 000000000..dd8a07cbe
--- /dev/null
+++ b/apps/Tag/res/layout/main.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/apps/Tag/res/menu/mailbox_menu.xml b/apps/Tag/res/menu/mailbox_menu.xml
new file mode 100644
index 000000000..8bb8d7b4d
--- /dev/null
+++ b/apps/Tag/res/menu/mailbox_menu.xml
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/apps/Tag/res/values/strings.xml b/apps/Tag/res/values/strings.xml
new file mode 100644
index 000000000..3d0432765
--- /dev/null
+++ b/apps/Tag/res/values/strings.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Hello, World!
+ help and info
+ Saved
+
+
diff --git a/apps/Tag/src/com/android/apps/tag/TagDBHelper.java b/apps/Tag/src/com/android/apps/tag/TagDBHelper.java
new file mode 100644
index 000000000..15c18f3ba
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/TagDBHelper.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+/**
+ * @author nnk@google.com (Nick Kralevich)
+ */
+public class TagDBHelper extends SQLiteOpenHelper {
+
+ private static final int DATABASE_VERSION = 1;
+ private static final String TABLE_CREATE = "create table Tags ("
+ + "_id INTEGER PRIMARY KEY ASC, "
+ + "description TEXT, "
+ + "date TEXT"
+ + ")";
+
+ private static final String FAKE_DATA =
+ "INSERT INTO Tags (description) values ('hello world')";
+
+ private static final String FAKE_DATA2 =
+ "INSERT INTO Tags (description) values ('hi world')";
+
+
+ public TagDBHelper(Context context) {
+ super(context, "Tags.db", null, DATABASE_VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(TABLE_CREATE);
+ db.execSQL(FAKE_DATA);
+ db.execSQL(FAKE_DATA2);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ }
+}
diff --git a/apps/Tag/src/com/android/apps/tag/TagList.java b/apps/Tag/src/com/android/apps/tag/TagList.java
new file mode 100644
index 000000000..5abd35bf9
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/TagList.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ListActivity;
+import android.content.DialogInterface;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Bundle;
+import android.provider.Contacts;
+import android.view.Menu;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.SimpleCursorAdapter;
+import com.trustedlogic.trustednfc.android.NfcManager;
+
+/**
+ * @author nnk@google.com (Nick Kralevich)
+ */
+public class TagList extends ListActivity implements DialogInterface.OnClickListener {
+
+ private NfcManager mManager;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ SQLiteDatabase db = new TagDBHelper(this.getBaseContext()).getReadableDatabase();
+ Cursor c = db.query("Tags", new String[] { "_id", "description" }, null, null, null, null, null);
+ SimpleCursorAdapter sca =
+ new SimpleCursorAdapter(this,
+ android.R.layout.two_line_list_item,
+ c,
+ new String[] { "description" },
+ new int[] { android.R.id.text1 });
+
+ setListAdapter(sca);
+ registerForContextMenu(getListView());
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ menu.add("hello world");
+ return true;
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle args) {
+ String[] stuff = new String[] { "a", "b" };
+ return new AlertDialog.Builder(this)
+ .setTitle("blah")
+ .setItems(stuff, this)
+ .setPositiveButton("Delete", null)
+ .setNegativeButton("Cancel", null)
+ .create();
+ }
+
+ @Override
+ protected void onListItemClick(ListView l, View v, int position, long id) {
+ showDialog(1);
+ super.onListItemClick(l, v, position, id);
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) { }
+
+}
diff --git a/apps/Tag/src/com/android/apps/tag/TagListAdapter.java b/apps/Tag/src/com/android/apps/tag/TagListAdapter.java
new file mode 100644
index 000000000..45a8a1178
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/TagListAdapter.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+/**
+ * @author nnk@google.com (Nick Kralevich)
+ */
+public class TagListAdapter extends BaseAdapter {
+
+ private Context context;
+
+ TagListAdapter(Context context) {
+ this.context = context;
+ }
+
+ private static final String[] listItems = {
+ "Welcome! T2000 Festival",
+ "Free songs by Hula 88",
+ "Welcome to FreeBucks",
+ "BooBox Movie Coupons"
+ };
+
+ @Override
+ public int getCount() {
+ return listItems.length;
+ }
+
+ @Override
+ public String getItem(int position) {
+ return listItems[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TextView tv = new TextView(context);
+ tv.setText(getItem(position));
+ return tv;
+ }
+}
diff --git a/apps/Tag/src/com/android/apps/tag/TagSelector.java b/apps/Tag/src/com/android/apps/tag/TagSelector.java
new file mode 100644
index 000000000..a6c034547
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/TagSelector.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * A minimal "Hello, World!" application.
+ */
+public class TagSelector extends Activity {
+ private static final int DIALOG = 1;
+ private static final String[] elements = { "hello world" };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ final TextView tv = new TextView(this);
+ tv.setText("hello world");
+ tv.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ tv.setText("clicked!");
+ showAlert();
+ }
+ });
+
+ setContentView(tv);
+
+ // Set the layout for this activity. You can find it
+ // in res/layout/hello_activity.xml
+ // setContentView(R.layout.hello_activity);
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle bundle) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Welcome ");
+ builder.setCancelable(true);
+ builder.setItems(elements, null);
+ return builder.create();
+ }
+
+
+ private void showAlert() {
+ showDialog(DIALOG);
+ }
+}
+
diff --git a/apps/Tag/src/com/android/apps/tag/TagUi.java b/apps/Tag/src/com/android/apps/tag/TagUi.java
new file mode 100644
index 000000000..98f384244
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/TagUi.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+
+/**
+ * @author nnk@google.com (Nick Kralevich)
+ */
+public class TagUi {
+
+
+}
diff --git a/apps/Tag/src/com/android/apps/tag/Tags.java b/apps/Tag/src/com/android/apps/tag/Tags.java
new file mode 100644
index 000000000..781e05e21
--- /dev/null
+++ b/apps/Tag/src/com/android/apps/tag/Tags.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.app.TabActivity;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.widget.TabHost;
+
+/**
+ * A minimal "Hello, World!" application.
+ */
+public class Tags extends TabActivity {
+ /**
+ * Called with the activity is first created.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ Resources res = getResources();
+ TabHost tabHost = getTabHost();
+ Intent i = new Intent().setClass(this, TagList.class);
+
+ Intent iSavedList = new Intent().setClass(this, TagList.class);
+ Intent iRecentList = new Intent().setClass(this, TagList.class);
+ Intent iMyTagList = new Intent().setClass(this, TagList.class);
+
+
+ TabHost.TabSpec spec1 = tabHost.newTabSpec("1")
+ .setIndicator("Saved", res.getDrawable(R.drawable.ic_tab_artists))
+ .setContent(iSavedList);
+ tabHost.addTab(spec1);
+
+ TabHost.TabSpec spec2 = tabHost.newTabSpec("2")
+ .setIndicator("Recent", res.getDrawable(R.drawable.ic_tab_artists))
+ .setContent(iRecentList);
+ tabHost.addTab(spec2);
+
+ TabHost.TabSpec spec3 = tabHost.newTabSpec("3")
+ .setIndicator("My Tag", res.getDrawable(R.drawable.ic_tab_artists))
+ .setContent(iMyTagList);
+ tabHost.addTab(spec3);
+
+ }
+}
+
diff --git a/apps/Tag/tests/Android.mk b/apps/Tag/tests/Android.mk
new file mode 100644
index 000000000..d0a36d7c6
--- /dev/null
+++ b/apps/Tag/tests/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_PACKAGE_NAME := TagAppTests
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_INSTRUMENTATION_FOR := TagApp
+
+include $(BUILD_PACKAGE)
diff --git a/apps/Tag/tests/AndroidManifest.xml b/apps/Tag/tests/AndroidManifest.xml
new file mode 100644
index 000000000..f4e79ed34
--- /dev/null
+++ b/apps/Tag/tests/AndroidManifest.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/Tag/tests/build.properties b/apps/Tag/tests/build.properties
new file mode 100644
index 000000000..e0c39def1
--- /dev/null
+++ b/apps/Tag/tests/build.properties
@@ -0,0 +1 @@
+tested.project.dir=..
diff --git a/apps/Tag/tests/src/com/android/apps/tag/TagsTest.java b/apps/Tag/tests/src/com/android/apps/tag/TagsTest.java
new file mode 100644
index 000000000..a0bc2247c
--- /dev/null
+++ b/apps/Tag/tests/src/com/android/apps/tag/TagsTest.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2010 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 com.android.apps.tag;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Make sure that the main launcher activity opens up properly, which will be
+ * verified by {@link #testActivityTestCaseSetUpProperly}.
+ */
+public class TagsTest extends ActivityInstrumentationTestCase2 {
+
+ /**
+ * Creates an {@link ActivityInstrumentationTestCase2} for the {@link Tags} activity.
+ */
+ public TagsTest() {
+ super(Tags.class);
+ }
+
+ /**
+ * Verifies that the activity under test can be launched.
+ */
+ public void testActivityTestCaseSetUpProperly() {
+ assertNotNull("activity should be launched successfully", getActivity());
+ }
+}
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
index ba48da0c6..9a3eb655a 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
@@ -158,21 +158,20 @@ public class TouchPaint extends GraphicsActivity {
public class MyView extends View {
private static final int FADE_ALPHA = 0x06;
private static final int MAX_FADE_STEPS = 256/FADE_ALPHA + 4;
+ private static final int TRACKBALL_SCALE = 10;
+
private Bitmap mBitmap;
private Canvas mCanvas;
private final Rect mRect = new Rect();
private final Paint mPaint;
private final Paint mFadePaint;
- private boolean mCurDown;
- private int mCurX;
- private int mCurY;
- private float mCurPressure;
- private float mCurSize;
- private int mCurWidth;
+ private float mCurX;
+ private float mCurY;
private int mFadeSteps = MAX_FADE_STEPS;
public MyView(Context c) {
super(c);
+ setFocusable(true);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setARGB(255, 255, 255, 255);
@@ -228,61 +227,59 @@ public class TouchPaint extends GraphicsActivity {
}
@Override public boolean onTrackballEvent(MotionEvent event) {
- boolean oldDown = mCurDown;
- mCurDown = true;
int N = event.getHistorySize();
- int baseX = mCurX;
- int baseY = mCurY;
- final float scaleX = event.getXPrecision();
- final float scaleY = event.getYPrecision();
+ final float scaleX = event.getXPrecision() * TRACKBALL_SCALE;
+ final float scaleY = event.getYPrecision() * TRACKBALL_SCALE;
for (int i=0; i