Added two new preferences: vibrate on scan, and copy contents to clipboard on scan.
authordswitkin <dswitkin@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 11 Dec 2008 17:09:12 +0000 (17:09 +0000)
committerdswitkin <dswitkin@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 11 Dec 2008 17:09:12 +0000 (17:09 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@783 59b500cc-1b3d-0410-9834-0bbf25fbcc57

android/AndroidManifest.xml
android/res/values/strings.xml
android/res/xml/preferences.xml
android/src/com/google/zxing/client/android/CaptureActivity.java
android/src/com/google/zxing/client/android/PreferencesActivity.java

index 559b031..6f70dd1 100755 (executable)
@@ -98,4 +98,5 @@ versionName is 2.31, 2.4, or 3.0. -->
   <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
   <uses-permission android:name="android.permission.INTERNET"/>
   <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
+  <uses-permission android:name="android.permission.VIBRATE"/>
 </manifest>
index c5f119a..25b2f9e 100755 (executable)
     your screen and scanning it with another phone.</string>
   <string name="msg_share_subject_line">Here\'s the contents of a barcode I scanned</string>
 
+  <string name="preferences_actions_title">When a barcode is found\u2026</string>
+  <string name="preferences_copy_to_clipboard_title">Copy contents to clipboard</string>
   <string name="preferences_decode_1D_title">Decode 1D barcodes</string>
   <string name="preferences_decode_QR_title">Decode QR Codes</string>
   <string name="preferences_general_title">General settings</string>
   <string name="preferences_name">Settings</string>
-  <string name="preferences_play_beep_title">Beep when a barcode is found</string>
-  <string name="preferences_sounds_title">Sounds</string>
+  <string name="preferences_play_beep_title">Beep</string>
+  <string name="preferences_vibrate_title">Vibrate</string>
 
   <string name="result_address_book">Found contact info</string>
   <string name="result_calendar">Found calendar event</string>
index 8ddd682..ac6d883 100755 (executable)
         android:defaultValue="true"
         android:title="@string/preferences_decode_QR_title"/>
   </PreferenceCategory>
-  <PreferenceCategory android:title="@string/preferences_sounds_title">
+  <PreferenceCategory android:title="@string/preferences_actions_title">
     <CheckBoxPreference
         android:key="preferences_play_beep"
         android:defaultValue="true"
         android:title="@string/preferences_play_beep_title"/>
+    <CheckBoxPreference
+        android:key="preferences_vibrate"
+        android:defaultValue="false"
+        android:title="@string/preferences_vibrate_title"/>
+    <CheckBoxPreference
+        android:key="preferences_copy_to_clipboard"
+        android:defaultValue="true"
+        android:title="@string/preferences_copy_to_clipboard_title"/>
   </PreferenceCategory>
 </PreferenceScreen>
index 107367c..f306530 100755 (executable)
@@ -18,6 +18,7 @@ package com.google.zxing.client.android;
 
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -35,8 +36,10 @@ import android.media.MediaPlayer.OnCompletionListener;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Message;
+import android.os.Vibrator;
 import android.preference.PreferenceManager;
 import android.text.SpannableStringBuilder;
+import android.text.ClipboardManager;
 import android.text.style.UnderlineSpan;
 import android.view.Gravity;
 import android.view.KeyEvent;
@@ -73,6 +76,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
   private static final int MAX_RESULT_IMAGE_SIZE = 150;
   private static final int INTENT_RESULT_DURATION = 1500;
   private static final float BEEP_VOLUME = 0.15f;
+  private static final long VIBRATE_DURATION = 200;
 
   private static final String PACKAGE_NAME = "com.google.zxing.client.android";
 
@@ -85,6 +89,8 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
   private Result mLastResult;
   private boolean mHasSurface;
   private boolean mPlayBeep;
+  private boolean mVibrate;
+  private boolean mCopyToClipboard;
   private boolean mScanIntent;
   private String mDecodeMode;
 
@@ -141,6 +147,8 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
     mPlayBeep = prefs.getBoolean(PreferencesActivity.KEY_PLAY_BEEP, true);
+    mVibrate = prefs.getBoolean(PreferencesActivity.KEY_VIBRATE, false);
+    mCopyToClipboard = prefs.getBoolean(PreferencesActivity.KEY_COPY_TO_CLIPBOARD, true);
     initBeepSound();
   }
 
@@ -266,7 +274,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
    */
   public void handleDecode(Result rawResult, Bitmap barcode, int duration) {
     mLastResult = rawResult;
-    playBeepSound();
+    playBeepSoundAndVibrate();
     drawResultPoints(barcode, rawResult);
 
     if (mScanIntent) {
@@ -294,7 +302,8 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
       CharSequence title = getString(resultHandler.getDisplayTitle());
       SpannableStringBuilder styled = new SpannableStringBuilder(title + "\n\n");
       styled.setSpan(new UnderlineSpan(), 0, title.length(), 0);
-      styled.append(resultHandler.getDisplayContents());
+      CharSequence displayContents = resultHandler.getDisplayContents();
+      styled.append(displayContents);
       contentsTextView.setText(styled);
 
       int buttonCount = resultHandler.getButtonCount();
@@ -310,6 +319,11 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
           button.setVisibility(View.GONE);
         }
       }
+
+      if (mCopyToClipboard) {
+        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+        clipboard.setText(displayContents);
+      }
     }
   }
 
@@ -358,6 +372,11 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
 
     mStatusView.setBackgroundColor(getResources().getColor(R.color.transparent));
 
+    if (mCopyToClipboard) {
+      ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+      clipboard.setText(resultHandler.getDisplayContents());
+    }
+
     // Hand back whatever action they requested - this can be changed to Intents.Scan.ACTION when
     // the deprecated intent is retired.
     Intent intent = new Intent(getIntent().getAction());
@@ -413,10 +432,14 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
     }
   }
 
-  private void playBeepSound() {
+  private void playBeepSoundAndVibrate() {
     if (mPlayBeep && mMediaPlayer != null) {
       mMediaPlayer.start();
     }
+    if (mVibrate) {
+      Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+      vibrator.vibrate(VIBRATE_DURATION);
+    }
   }
 
   private void initCamera(SurfaceHolder surfaceHolder) {
index ee1f0e2..98542ee 100755 (executable)
@@ -27,12 +27,15 @@ public final class PreferencesActivity extends android.preference.PreferenceActi
 
   static final String KEY_DECODE_1D = "preferences_decode_1D";
   static final String KEY_DECODE_QR = "preferences_decode_QR";
+
   static final String KEY_PLAY_BEEP = "preferences_play_beep";
+  static final String KEY_VIBRATE = "preferences_vibrate";
+  static final String KEY_COPY_TO_CLIPBOARD = "preferences_copy_to_clipboard";
+
   static final String KEY_HELP_VERSION_SHOWN = "preferences_help_version_shown";
 
   CheckBoxPreference mDecode1D;
   CheckBoxPreference mDecodeQR;
-  CheckBoxPreference mPlayBeep;
 
   @Override
   protected void onCreate(Bundle icicle) {
@@ -43,7 +46,6 @@ public final class PreferencesActivity extends android.preference.PreferenceActi
     preferences.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
     mDecode1D = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_1D);
     mDecodeQR = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_QR);
-    mPlayBeep = (CheckBoxPreference) preferences.findPreference(KEY_PLAY_BEEP);
   }
 
   // Prevent the user from turning off both decode options