From 7a10967e3c3aca59e3a61cceeba4ec789d816ad7 Mon Sep 17 00:00:00 2001 From: dswitkin Date: Wed, 12 Nov 2008 15:42:44 +0000 Subject: [PATCH] Wrote a new bookmark picker activity for use by the Share button, because I couldn't get the platform version to work. git-svn-id: http://zxing.googlecode.com/svn/trunk@691 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- android/AndroidManifest.xml | 7 ++ .../res/layout/bookmark_picker_list_item.xml | 37 +++++++++ android/res/values/strings.xml | 1 + .../android/BookmarkPickerActivity.java | 79 +++++++++++++++++++ .../zxing/client/android/ShareActivity.java | 19 +++-- 5 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 android/res/layout/bookmark_picker_list_item.xml create mode 100644 android/src/com/google/zxing/client/android/BookmarkPickerActivity.java diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 59c30adc..83020745 100755 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -78,6 +78,13 @@ versionName is 2.31, 2.4, or 3.0. --> + + + + + + diff --git a/android/res/layout/bookmark_picker_list_item.xml b/android/res/layout/bookmark_picker_list_item.xml new file mode 100644 index 00000000..3508635b --- /dev/null +++ b/android/res/layout/bookmark_picker_list_item.xml @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index b4e01dd9..f357476b 100755 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -16,6 +16,7 @@ --> Barcode Scanner + Bookmarks Add event to calendar Add contact diff --git a/android/src/com/google/zxing/client/android/BookmarkPickerActivity.java b/android/src/com/google/zxing/client/android/BookmarkPickerActivity.java new file mode 100644 index 00000000..f05dcd53 --- /dev/null +++ b/android/src/com/google/zxing/client/android/BookmarkPickerActivity.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2008 ZXing authors + * + * 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.google.zxing.client.android; + +import android.app.ListActivity; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.provider.Browser; +import android.view.View; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.SimpleCursorAdapter; + +/** + * This class is only needed because I can't successfully send an ACTION_PICK intent to + * com.android.browser.BrowserBookmarksPage. It can go away if that starts working in the future. + */ +public class BookmarkPickerActivity extends ListActivity { + + private static final String[] BOOKMARK_PROJECTION = { + Browser.BookmarkColumns.TITLE, + Browser.BookmarkColumns.URL + }; + + private static final int[] TWO_LINE_VIEW_IDS = { + R.id.bookmark_title, + R.id.bookmark_url + }; + + private static final int TITLE_COLUMN = 0; + private static final int URL_COLUMN = 1; + + // Without this selection, we'd get all the history entries too + private static final String BOOKMARK_SELECTION = "bookmark = 1"; + + private Cursor mCursor; + + @Override + protected void onCreate(Bundle icicle) { + super.onCreate(icicle); + + mCursor = getContentResolver().query(Browser.BOOKMARKS_URI, BOOKMARK_PROJECTION, + BOOKMARK_SELECTION, null, null); + startManagingCursor(mCursor); + + ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.bookmark_picker_list_item, + mCursor, BOOKMARK_PROJECTION, TWO_LINE_VIEW_IDS); + setListAdapter(adapter); + } + + @Override + protected void onListItemClick(ListView l, View view, int position, long id) { + if (mCursor.moveToPosition(position)) { + Intent intent = new Intent(); + intent.putExtra(Browser.BookmarkColumns.TITLE, mCursor.getString(TITLE_COLUMN)); + intent.putExtra(Browser.BookmarkColumns.URL, mCursor.getString(URL_COLUMN)); + setResult(RESULT_OK, intent); + } else { + setResult(RESULT_CANCELED); + } + finish(); + } + +} diff --git a/android/src/com/google/zxing/client/android/ShareActivity.java b/android/src/com/google/zxing/client/android/ShareActivity.java index ff825d8e..4cb00ad5 100755 --- a/android/src/com/google/zxing/client/android/ShareActivity.java +++ b/android/src/com/google/zxing/client/android/ShareActivity.java @@ -17,16 +17,15 @@ package com.google.zxing.client.android; import android.app.Activity; -import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import android.provider.Browser; import android.provider.Contacts; import android.text.ClipboardManager; -import android.util.Log; import android.view.View; import android.widget.Button; @@ -90,10 +89,8 @@ public final class ShareActivity extends Activity { private final Button.OnClickListener mBookmarkListener = new Button.OnClickListener() { public void onClick(View v) { - // FIXME: Not working yet - Intent intent = new Intent(); - intent.setComponent(new ComponentName("com.android.browser", - "com.android.browser.BrowserBookmarksPage")); + Intent intent = new Intent(Intent.ACTION_PICK); + intent.setClassName(ShareActivity.this, BookmarkPickerActivity.class.getName()); startActivityForResult(intent, PICK_BOOKMARK); } }; @@ -116,8 +113,7 @@ public final class ShareActivity extends Activity { if (resultCode == RESULT_OK) { switch (requestCode) { case PICK_BOOKMARK: - // FIXME: Implement - Log.v("BOOKMARK", intent.toString()); + showTextAsBarcode(intent.getStringExtra(Browser.BookmarkColumns.URL)); break; case PICK_CONTACT: // Data field is content://contacts/people/984 @@ -127,6 +123,13 @@ public final class ShareActivity extends Activity { } } + private void showTextAsBarcode(String text) { + Intent intent = new Intent(Intents.Encode.ACTION); + intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT); + intent.putExtra(Intents.Encode.DATA, text); + startActivity(intent); + } + /** * Takes a contact Uri and does the necessary database lookups to retrieve that person's info, * then sends an Encode intent to render it as a QR Code. -- 2.20.1