diff --git a/android-integration/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java b/android-integration/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
index 4eb5681d2..45feb2d79 100644
--- a/android-integration/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
+++ b/android-integration/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
@@ -138,6 +138,10 @@ public class IntentIntegrator {
BS_PACKAGE // Barcode Scanner
// What else supports this intent?
);
+
+ // Should be FLAG_ACTIVITY_NEW_DOCUMENT in API 21+.
+ // Defined once here because the current value is deprecated, so generates just one warning
+ private static final int FLAG_NEW_DOC = Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
private final Activity activity;
private final Fragment fragment;
@@ -320,7 +324,7 @@ public class IntentIntegrator {
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intentScan.addFlags(FLAG_NEW_DOC);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);
return null;
@@ -466,7 +470,7 @@ public class IntentIntegrator {
}
intent.setPackage(targetAppPackage);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(FLAG_NEW_DOC);
attachMoreExtras(intent);
if (fragment == null) {
activity.startActivity(intent);
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 5bb5eefaa..8d1851af2 100755
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -31,7 +31,7 @@
-
+
diff --git a/android/src/com/google/zxing/client/android/BeepManager.java b/android/src/com/google/zxing/client/android/BeepManager.java
index 39779a0a0..0baa34d25 100644
--- a/android/src/com/google/zxing/client/android/BeepManager.java
+++ b/android/src/com/google/zxing/client/android/BeepManager.java
@@ -86,13 +86,8 @@ final class BeepManager implements MediaPlayer.OnErrorListener, Closeable {
private MediaPlayer buildMediaPlayer(Context activity) {
MediaPlayer mediaPlayer = new MediaPlayer();
- try {
- AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
- try {
- mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
- } finally {
- file.close();
- }
+ try (AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep)) {
+ mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setLooping(false);
diff --git a/android/src/com/google/zxing/client/android/CaptureActivity.java b/android/src/com/google/zxing/client/android/CaptureActivity.java
index e1a27a944..ca01d7263 100755
--- a/android/src/com/google/zxing/client/android/CaptureActivity.java
+++ b/android/src/com/google/zxing/client/android/CaptureActivity.java
@@ -361,7 +361,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
switch (item.getItemId()) {
case R.id.menu_share:
intent.setClassName(this, ShareActivity.class.getName());
@@ -642,7 +642,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
// 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());
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra(Intents.Scan.RESULT, rawResult.toString());
intent.putExtra(Intents.Scan.RESULT_FORMAT, rawResult.getBarcodeFormat().toString());
byte[] rawBytes = rawResult.getRawBytes();
diff --git a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java
index 85aaf291b..c5bddd9e3 100755
--- a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java
+++ b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java
@@ -110,7 +110,7 @@ public final class CaptureActivityHandler extends Handler {
String url = (String) message.obj;
Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.setData(Uri.parse(url));
ResolveInfo resolveInfo =
@@ -122,10 +122,13 @@ public final class CaptureActivityHandler extends Handler {
}
// Needed for default Android browser / Chrome only apparently
- if ("com.android.browser".equals(browserPackageName) || "com.android.chrome".equals(browserPackageName)) {
- intent.setPackage(browserPackageName);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(Browser.EXTRA_APPLICATION_ID, browserPackageName);
+ switch (browserPackageName) {
+ case "com.android.browser":
+ case "com.android.chrome":
+ intent.setPackage(browserPackageName);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra(Browser.EXTRA_APPLICATION_ID, browserPackageName);
+ break;
}
try {
diff --git a/android/src/com/google/zxing/client/android/HttpHelper.java b/android/src/com/google/zxing/client/android/HttpHelper.java
index b4fe7e13f..3f85bebb6 100644
--- a/android/src/com/google/zxing/client/android/HttpHelper.java
+++ b/android/src/com/google/zxing/client/android/HttpHelper.java
@@ -144,22 +144,12 @@ public final class HttpHelper {
private static CharSequence consume(URLConnection connection, int maxChars) throws IOException {
String encoding = getEncoding(connection);
StringBuilder out = new StringBuilder();
- Reader in = null;
- try {
- in = new InputStreamReader(connection.getInputStream(), encoding);
+ try (Reader in = new InputStreamReader(connection.getInputStream(), encoding)) {
char[] buffer = new char[1024];
int charsRead;
while (out.length() < maxChars && (charsRead = in.read(buffer)) > 0) {
out.append(buffer, 0, charsRead);
}
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException | NullPointerException ioe) {
- // continue
- }
- }
}
return out;
}
diff --git a/android/src/com/google/zxing/client/android/Intents.java b/android/src/com/google/zxing/client/android/Intents.java
index 4ed483c4b..c11963cdc 100755
--- a/android/src/com/google/zxing/client/android/Intents.java
+++ b/android/src/com/google/zxing/client/android/Intents.java
@@ -16,6 +16,8 @@
package com.google.zxing.client.android;
+import android.content.Intent;
+
/**
* This class provides the constants to use when sending an Intent to Barcode Scanner.
* These strings are effectively API and cannot be changed.
@@ -128,14 +130,14 @@ public final class Intents {
public static final String RESULT = "SCAN_RESULT";
/**
- * Call {@link android.content.Intent#getStringExtra(String)} with {@link #RESULT_FORMAT}
+ * Call {@link android.content.Intent#getStringExtra(String)} with {@code RESULT_FORMAT}
* to determine which barcode format was found.
* See {@link com.google.zxing.BarcodeFormat} for possible values.
*/
public static final String RESULT_FORMAT = "SCAN_RESULT_FORMAT";
/**
- * Call {@link android.content.Intent#getStringExtra(String)} with {@link #RESULT_UPC_EAN_EXTENSION}
+ * Call {@link android.content.Intent#getStringExtra(String)} with {@code RESULT_UPC_EAN_EXTENSION}
* to return the content of any UPC extension barcode that was also found. Only applicable
* to {@link com.google.zxing.BarcodeFormat#UPC_A} and {@link com.google.zxing.BarcodeFormat#EAN_13}
* formats.
@@ -143,20 +145,20 @@ public final class Intents {
public static final String RESULT_UPC_EAN_EXTENSION = "SCAN_RESULT_UPC_EAN_EXTENSION";
/**
- * Call {@link android.content.Intent#getByteArrayExtra(String)} with {@link #RESULT_BYTES}
+ * Call {@link android.content.Intent#getByteArrayExtra(String)} with {@code RESULT_BYTES}
* to get a {@code byte[]} of raw bytes in the barcode, if available.
*/
public static final String RESULT_BYTES = "SCAN_RESULT_BYTES";
/**
* Key for the value of {@link com.google.zxing.ResultMetadataType#ORIENTATION}, if available.
- * Call {@link android.content.Intent#getIntArrayExtra(String)} with {@link #RESULT_ORIENTATION}.
+ * Call {@link android.content.Intent#getIntArrayExtra(String)} with {@code RESULT_ORIENTATION}.
*/
public static final String RESULT_ORIENTATION = "SCAN_RESULT_ORIENTATION";
/**
* Key for the value of {@link com.google.zxing.ResultMetadataType#ERROR_CORRECTION_LEVEL}, if available.
- * Call {@link android.content.Intent#getStringExtra(String)} with {@link #RESULT_ERROR_CORRECTION_LEVEL}.
+ * Call {@link android.content.Intent#getStringExtra(String)} with {@code RESULT_ERROR_CORRECTION_LEVEL}.
*/
public static final String RESULT_ERROR_CORRECTION_LEVEL = "SCAN_RESULT_ERROR_CORRECTION_LEVEL";
@@ -293,4 +295,9 @@ public final class Intents {
private Share() {
}
}
+
+ // Not the best place for this, but, better than a new class
+ // Should be FLAG_ACTIVITY_NEW_DOCUMENT in API 21+.
+ // Defined once here because the current value is deprecated, so generates just one warning
+ public static final int FLAG_NEW_DOC = Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET;
}
diff --git a/android/src/com/google/zxing/client/android/book/BrowseBookListener.java b/android/src/com/google/zxing/client/android/book/BrowseBookListener.java
index c00bd6e93..c52aad084 100644
--- a/android/src/com/google/zxing/client/android/book/BrowseBookListener.java
+++ b/android/src/com/google/zxing/client/android/book/BrowseBookListener.java
@@ -20,6 +20,7 @@ import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.widget.AdapterView;
+import com.google.zxing.client.android.Intents;
import com.google.zxing.client.android.LocaleManager;
import java.util.List;
@@ -54,7 +55,7 @@ final class BrowseBookListener implements AdapterView.OnItemClickListener {
LocaleManager.getBookSearchCountryTLD(activity) +
"/books?id=" + volumeId + "&pg=" + pageId + "&vq=" + query;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(readBookURI));
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
activity.startActivity(intent);
}
}
diff --git a/android/src/com/google/zxing/client/android/book/SearchBookContentsActivity.java b/android/src/com/google/zxing/client/android/book/SearchBookContentsActivity.java
index 48a2a66a0..6dbe4c973 100644
--- a/android/src/com/google/zxing/client/android/book/SearchBookContentsActivity.java
+++ b/android/src/com/google/zxing/client/android/book/SearchBookContentsActivity.java
@@ -175,12 +175,9 @@ public final class SearchBookContentsActivity extends Activity {
}
CharSequence content = HttpHelper.downloadViaHttp(uri, HttpHelper.ContentType.JSON);
return new JSONObject(content.toString());
- } catch (IOException ioe) {
+ } catch (IOException | JSONException ioe) {
Log.w(TAG, "Error accessing book search", ioe);
return null;
- } catch (JSONException je) {
- Log.w(TAG, "Error accessing book search", je);
- return null;
}
}
diff --git a/android/src/com/google/zxing/client/android/encode/ContactEncoder.java b/android/src/com/google/zxing/client/android/encode/ContactEncoder.java
index 41639a976..d1a38a602 100644
--- a/android/src/com/google/zxing/client/android/encode/ContactEncoder.java
+++ b/android/src/com/google/zxing/client/android/encode/ContactEncoder.java
@@ -16,6 +16,8 @@
package com.google.zxing.client.android.encode;
+import android.telephony.PhoneNumberUtils;
+
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
@@ -93,4 +95,9 @@ abstract class ContactEncoder {
}
}
+ static String formatPhone(String phoneData) {
+ // Just collect the call to a deprecated method in one place
+ return PhoneNumberUtils.formatNumber(phoneData);
+ }
+
}
diff --git a/android/src/com/google/zxing/client/android/encode/EncodeActivity.java b/android/src/com/google/zxing/client/android/encode/EncodeActivity.java
index cc433dd51..3488dfd3b 100755
--- a/android/src/com/google/zxing/client/android/encode/EncodeActivity.java
+++ b/android/src/com/google/zxing/client/android/encode/EncodeActivity.java
@@ -40,7 +40,6 @@ import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.regex.Pattern;
@@ -150,22 +149,12 @@ public final class EncodeActivity extends Activity {
Log.w(TAG, "Could not delete " + barcodeFile);
// continue anyway
}
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(barcodeFile);
+ try (FileOutputStream fos = new FileOutputStream(barcodeFile)) {
bitmap.compress(Bitmap.CompressFormat.PNG, 0, fos);
- } catch (FileNotFoundException fnfe) {
- Log.w(TAG, "Couldn't access file " + barcodeFile + " due to " + fnfe);
+ } catch (IOException ioe) {
+ Log.w(TAG, "Couldn't access file " + barcodeFile + " due to " + ioe);
showErrorMessage(R.string.msg_unmount_usb);
return;
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException ioe) {
- // do nothing
- }
- }
}
Intent intent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
@@ -173,7 +162,7 @@ public final class EncodeActivity extends Activity {
intent.putExtra(Intent.EXTRA_TEXT, contents);
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + barcodeFile.getAbsolutePath()));
intent.setType("image/png");
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
startActivity(Intent.createChooser(intent, null));
}
diff --git a/android/src/com/google/zxing/client/android/encode/MECARDContactEncoder.java b/android/src/com/google/zxing/client/android/encode/MECARDContactEncoder.java
index c7b810e9e..c6cd35538 100644
--- a/android/src/com/google/zxing/client/android/encode/MECARDContactEncoder.java
+++ b/android/src/com/google/zxing/client/android/encode/MECARDContactEncoder.java
@@ -16,8 +16,6 @@
package com.google.zxing.client.android.encode;
-import android.telephony.PhoneNumberUtils;
-
import java.util.List;
import java.util.regex.Pattern;
@@ -82,7 +80,7 @@ final class MECARDContactEncoder extends ContactEncoder {
private static final Pattern NOT_DIGITS_OR_PLUS = Pattern.compile("[^0-9+]+");
@Override
public CharSequence format(CharSequence value, int index) {
- return NOT_DIGITS_OR_PLUS.matcher(PhoneNumberUtils.formatNumber(value.toString())).replaceAll("");
+ return NOT_DIGITS_OR_PLUS.matcher(ContactEncoder.formatPhone(value.toString())).replaceAll("");
}
}
diff --git a/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java b/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java
index 58003c70c..bd84b8fda 100755
--- a/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java
+++ b/android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java
@@ -35,7 +35,6 @@ import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
-import android.telephony.PhoneNumberUtils;
import android.util.Log;
import java.io.ByteArrayOutputStream;
@@ -185,9 +184,7 @@ final class QRCodeEncoder {
}
byte[] vcard;
String vcardString;
- InputStream stream = null;
- try {
- stream = activity.getContentResolver().openInputStream(uri);
+ try (InputStream stream = activity.getContentResolver().openInputStream(uri)) {
if (stream == null) {
throw new WriterException("Can't open stream for " + uri);
}
@@ -201,14 +198,6 @@ final class QRCodeEncoder {
vcardString = new String(vcard, 0, vcard.length, "UTF-8");
} catch (IOException ioe) {
throw new WriterException(ioe);
- } finally {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- // continue
- }
- }
}
Log.d(TAG, "Encoding share intent content:");
Log.d(TAG, vcardString);
@@ -247,7 +236,7 @@ final class QRCodeEncoder {
String phoneData = ContactEncoder.trim(intent.getStringExtra(Intents.Encode.DATA));
if (phoneData != null) {
contents = "tel:" + phoneData;
- displayContents = PhoneNumberUtils.formatNumber(phoneData);
+ displayContents = ContactEncoder.formatPhone(phoneData);
title = activity.getString(R.string.contents_phone);
}
break;
@@ -256,7 +245,7 @@ final class QRCodeEncoder {
String smsData = ContactEncoder.trim(intent.getStringExtra(Intents.Encode.DATA));
if (smsData != null) {
contents = "sms:" + smsData;
- displayContents = PhoneNumberUtils.formatNumber(smsData);
+ displayContents = ContactEncoder.formatPhone(smsData);
title = activity.getString(R.string.contents_sms);
}
break;
diff --git a/android/src/com/google/zxing/client/android/encode/VCardTelDisplayFormatter.java b/android/src/com/google/zxing/client/android/encode/VCardTelDisplayFormatter.java
index f5eec9b02..fd59b02a8 100644
--- a/android/src/com/google/zxing/client/android/encode/VCardTelDisplayFormatter.java
+++ b/android/src/com/google/zxing/client/android/encode/VCardTelDisplayFormatter.java
@@ -16,8 +16,6 @@
package com.google.zxing.client.android.encode;
-import android.telephony.PhoneNumberUtils;
-
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -40,7 +38,7 @@ final class VCardTelDisplayFormatter implements Formatter {
@Override
public CharSequence format(CharSequence value, int index) {
- value = PhoneNumberUtils.formatNumber(value.toString());
+ value = ContactEncoder.formatPhone(value.toString());
Map> metadata =
metadataForIndex == null || metadataForIndex.size() <= index ? null : metadataForIndex.get(index);
value = formatMetadata(value, metadata);
diff --git a/android/src/com/google/zxing/client/android/history/HistoryActivity.java b/android/src/com/google/zxing/client/android/history/HistoryActivity.java
index 2c63c2e26..4eff161c5 100644
--- a/android/src/com/google/zxing/client/android/history/HistoryActivity.java
+++ b/android/src/com/google/zxing/client/android/history/HistoryActivity.java
@@ -128,7 +128,7 @@ public final class HistoryActivity extends ListActivity {
builder.show();
} else {
Intent intent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
String subject = getResources().getString(R.string.history_email_title);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, subject);
diff --git a/android/src/com/google/zxing/client/android/history/HistoryManager.java b/android/src/com/google/zxing/client/android/history/HistoryManager.java
index 913c310ef..a429fd406 100644
--- a/android/src/com/google/zxing/client/android/history/HistoryManager.java
+++ b/android/src/com/google/zxing/client/android/history/HistoryManager.java
@@ -39,7 +39,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
@@ -81,29 +81,24 @@ public final class HistoryManager {
public boolean hasHistoryItems() {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getReadableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME, COUNT_COLUMN, null, null, null, null, null);
+ try (SQLiteDatabase db = helper.getReadableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME, COUNT_COLUMN, null, null, null, null, null)) {
cursor.moveToFirst();
return cursor.getInt(0) > 0;
} catch (SQLException sqle) {
Log.w(TAG, sqle);
return false;
- } finally {
- close(cursor, db);
}
}
public List buildHistoryItems() {
SQLiteOpenHelper helper = new DBHelper(activity);
List items = new ArrayList<>();
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getReadableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME, COLUMNS, null, null, null, null, DBHelper.TIMESTAMP_COL + " DESC");
+ try (SQLiteDatabase db = helper.getReadableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ COLUMNS,
+ null, null, null, null,
+ DBHelper.TIMESTAMP_COL + " DESC")) {
while (cursor.moveToNext()) {
String text = cursor.getString(0);
String display = cursor.getString(1);
@@ -115,20 +110,17 @@ public final class HistoryManager {
}
} catch (CursorIndexOutOfBoundsException cioobe) {
Log.w(TAG, cioobe);
- // continue
- } finally {
- close(cursor, db);
}
return items;
}
public HistoryItem buildHistoryItem(int number) {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getReadableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME, COLUMNS, null, null, null, null, DBHelper.TIMESTAMP_COL + " DESC");
+ try (SQLiteDatabase db = helper.getReadableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ COLUMNS,
+ null, null, null, null,
+ DBHelper.TIMESTAMP_COL + " DESC")) {
cursor.move(number + 1);
String text = cursor.getString(0);
String display = cursor.getString(1);
@@ -137,27 +129,20 @@ public final class HistoryManager {
String details = cursor.getString(4);
Result result = new Result(text, null, null, BarcodeFormat.valueOf(format), timestamp);
return new HistoryItem(result, display, details);
- } finally {
- close(cursor, db);
}
}
public void deleteHistoryItem(int number) {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getWritableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME,
- ID_COL_PROJECTION,
- null, null, null, null,
- DBHelper.TIMESTAMP_COL + " DESC");
+ try (SQLiteDatabase db = helper.getWritableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ ID_COL_PROJECTION,
+ null, null, null, null,
+ DBHelper.TIMESTAMP_COL + " DESC")) {
cursor.move(number + 1);
db.delete(DBHelper.TABLE_NAME, DBHelper.ID_COL + '=' + cursor.getString(0), null);
} catch (SQLException sqle) {
Log.w(TAG, sqle);
- } finally {
- close(cursor, db);
}
}
@@ -181,13 +166,9 @@ public final class HistoryManager {
values.put(DBHelper.TIMESTAMP_COL, System.currentTimeMillis());
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- try {
- db = helper.getWritableDatabase();
+ try (SQLiteDatabase db = helper.getWritableDatabase()) {
// Insert the new entry into the DB.
db.insert(DBHelper.TABLE_NAME, DBHelper.TIMESTAMP_COL, values);
- } finally {
- close(null, db);
}
}
@@ -195,18 +176,15 @@ public final class HistoryManager {
// As we're going to do an update only we don't need need to worry
// about the preferences; if the item wasn't saved it won't be udpated
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getWritableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME,
- ID_DETAIL_COL_PROJECTION,
- DBHelper.TEXT_COL + "=?",
- new String[] { itemID },
- null,
- null,
- DBHelper.TIMESTAMP_COL + " DESC",
- "1");
+ try (SQLiteDatabase db = helper.getWritableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ ID_DETAIL_COL_PROJECTION,
+ DBHelper.TEXT_COL + "=?",
+ new String[] { itemID },
+ null,
+ null,
+ DBHelper.TIMESTAMP_COL + " DESC",
+ "1")) {
String oldID = null;
String oldDetails = null;
if (cursor.moveToNext()) {
@@ -229,35 +207,25 @@ public final class HistoryManager {
db.update(DBHelper.TABLE_NAME, values, DBHelper.ID_COL + "=?", new String[] { oldID });
}
}
-
- } finally {
- close(cursor, db);
}
}
private void deletePrevious(String text) {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- try {
- db = helper.getWritableDatabase();
+ try (SQLiteDatabase db = helper.getWritableDatabase()) {
db.delete(DBHelper.TABLE_NAME, DBHelper.TEXT_COL + "=?", new String[] { text });
} catch (SQLException sqle) {
Log.w(TAG, sqle);
- } finally {
- close(null, db);
}
}
public void trimHistory() {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getWritableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME,
- ID_COL_PROJECTION,
- null, null, null, null,
- DBHelper.TIMESTAMP_COL + " DESC");
+ try (SQLiteDatabase db = helper.getWritableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ ID_COL_PROJECTION,
+ null, null, null, null,
+ DBHelper.TIMESTAMP_COL + " DESC")) {
cursor.move(MAX_ITEMS);
while (cursor.moveToNext()) {
String id = cursor.getString(0);
@@ -265,12 +233,7 @@ public final class HistoryManager {
db.delete(DBHelper.TABLE_NAME, DBHelper.ID_COL + '=' + id, null);
}
} catch (SQLException sqle) {
- // We're seeing an error here when called in CaptureActivity.onCreate() in rare cases
- // and don't understand it. First theory is that it's transient so can be safely ignored.
Log.w(TAG, sqle);
- // continue
- } finally {
- close(cursor, db);
}
}
@@ -291,15 +254,11 @@ public final class HistoryManager {
*/
CharSequence buildHistory() {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- Cursor cursor = null;
- try {
- db = helper.getWritableDatabase();
- cursor = db.query(DBHelper.TABLE_NAME,
- COLUMNS,
- null, null, null, null,
- DBHelper.TIMESTAMP_COL + " DESC");
-
+ try (SQLiteDatabase db = helper.getWritableDatabase();
+ Cursor cursor = db.query(DBHelper.TABLE_NAME,
+ COLUMNS,
+ null, null, null, null,
+ DBHelper.TIMESTAMP_COL + " DESC")) {
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
StringBuilder historyText = new StringBuilder(1000);
while (cursor.moveToNext()) {
@@ -318,21 +277,15 @@ public final class HistoryManager {
historyText.append('"').append(massageHistoryField(cursor.getString(4))).append("\"\r\n");
}
return historyText;
- } finally {
- close(cursor, db);
}
}
void clearHistory() {
SQLiteOpenHelper helper = new DBHelper(activity);
- SQLiteDatabase db = null;
- try {
- db = helper.getWritableDatabase();
+ try (SQLiteDatabase db = helper.getWritableDatabase()) {
db.delete(DBHelper.TABLE_NAME, null, null);
} catch (SQLException sqle) {
Log.w(TAG, sqle);
- } finally {
- close(null, db);
}
}
@@ -344,36 +297,17 @@ public final class HistoryManager {
return null;
}
File historyFile = new File(historyRoot, "history-" + System.currentTimeMillis() + ".csv");
- OutputStreamWriter out = null;
- try {
- out = new OutputStreamWriter(new FileOutputStream(historyFile), Charset.forName("UTF-8"));
+ try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(historyFile), StandardCharsets.UTF_8)) {
out.write(history);
return Uri.parse("file://" + historyFile.getAbsolutePath());
} catch (IOException ioe) {
Log.w(TAG, "Couldn't access file " + historyFile + " due to " + ioe);
return null;
- } finally {
- if (out != null) {
- try {
- out.close();
- } catch (IOException ioe) {
- // do nothing
- }
- }
}
}
private static String massageHistoryField(String value) {
return value == null ? "" : DOUBLE_QUOTE.matcher(value).replaceAll("\"\"");
}
-
- private static void close(Cursor cursor, SQLiteDatabase database) {
- if (cursor != null) {
- cursor.close();
- }
- if (database != null) {
- database.close();
- }
- }
}
diff --git a/android/src/com/google/zxing/client/android/result/AddressBookResultHandler.java b/android/src/com/google/zxing/client/android/result/AddressBookResultHandler.java
index 70db5d9ff..034f67e1e 100644
--- a/android/src/com/google/zxing/client/android/result/AddressBookResultHandler.java
+++ b/android/src/com/google/zxing/client/android/result/AddressBookResultHandler.java
@@ -22,7 +22,6 @@ import com.google.zxing.client.result.ParsedResult;
import android.app.Activity;
import android.graphics.Typeface;
-import android.telephony.PhoneNumberUtils;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.StyleSpan;
@@ -183,7 +182,7 @@ public final class AddressBookResultHandler extends ResultHandler {
if (numbers != null) {
for (String number : numbers) {
if (number != null) {
- ParsedResult.maybeAppend(PhoneNumberUtils.formatNumber(number), contents);
+ ParsedResult.maybeAppend(formatPhone(number), contents);
}
}
}
diff --git a/android/src/com/google/zxing/client/android/result/ResultHandler.java b/android/src/com/google/zxing/client/android/result/ResultHandler.java
index 74a120e60..7de8d84f9 100644
--- a/android/src/com/google/zxing/client/android/result/ResultHandler.java
+++ b/android/src/com/google/zxing/client/android/result/ResultHandler.java
@@ -16,6 +16,7 @@
package com.google.zxing.client.android.result;
+import android.telephony.PhoneNumberUtils;
import com.google.zxing.Result;
import com.google.zxing.client.android.Contents;
import com.google.zxing.client.android.Intents;
@@ -450,7 +451,7 @@ public abstract class ResultHandler {
*/
final void rawLaunchIntent(Intent intent) {
if (intent != null) {
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
Log.d(TAG, "Launching intent: " + intent + " with extras: " + intent.getExtras());
activity.startActivity(intent);
}
@@ -510,4 +511,9 @@ public abstract class ResultHandler {
return url.replace("%s", text);
}
+ static String formatPhone(String phoneData) {
+ // Just collect the call to a deprecated method in one place
+ return PhoneNumberUtils.formatNumber(phoneData);
+ }
+
}
diff --git a/android/src/com/google/zxing/client/android/result/SMSResultHandler.java b/android/src/com/google/zxing/client/android/result/SMSResultHandler.java
index 8a95943c9..4e303de69 100644
--- a/android/src/com/google/zxing/client/android/result/SMSResultHandler.java
+++ b/android/src/com/google/zxing/client/android/result/SMSResultHandler.java
@@ -21,7 +21,6 @@ import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.SMSParsedResult;
import android.app.Activity;
-import android.telephony.PhoneNumberUtils;
/**
* Handles SMS addresses, offering a choice of composing a new SMS or MMS message.
@@ -69,7 +68,7 @@ public final class SMSResultHandler extends ResultHandler {
String[] rawNumbers = smsResult.getNumbers();
String[] formattedNumbers = new String[rawNumbers.length];
for (int i = 0; i < rawNumbers.length; i++) {
- formattedNumbers[i] = PhoneNumberUtils.formatNumber(rawNumbers[i]);
+ formattedNumbers[i] = formatPhone(rawNumbers[i]);
}
StringBuilder contents = new StringBuilder(50);
ParsedResult.maybeAppend(formattedNumbers, contents);
diff --git a/android/src/com/google/zxing/client/android/result/TelResultHandler.java b/android/src/com/google/zxing/client/android/result/TelResultHandler.java
index 325eb6b93..23b395a3e 100644
--- a/android/src/com/google/zxing/client/android/result/TelResultHandler.java
+++ b/android/src/com/google/zxing/client/android/result/TelResultHandler.java
@@ -21,7 +21,6 @@ import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.TelParsedResult;
import android.app.Activity;
-import android.telephony.PhoneNumberUtils;
/**
* Offers relevant actions for telephone numbers.
@@ -72,7 +71,7 @@ public final class TelResultHandler extends ResultHandler {
public CharSequence getDisplayContents() {
String contents = getResult().getDisplayResult();
contents = contents.replace("\r", "");
- return PhoneNumberUtils.formatNumber(contents);
+ return formatPhone(contents);
}
@Override
diff --git a/android/src/com/google/zxing/client/android/share/AppPickerActivity.java b/android/src/com/google/zxing/client/android/share/AppPickerActivity.java
index 2b05c2bd8..8b45fc501 100644
--- a/android/src/com/google/zxing/client/android/share/AppPickerActivity.java
+++ b/android/src/com/google/zxing/client/android/share/AppPickerActivity.java
@@ -22,6 +22,7 @@ import android.os.AsyncTask;
import android.view.View;
import android.widget.Adapter;
import android.widget.ListView;
+import com.google.zxing.client.android.Intents;
import java.util.List;
@@ -55,7 +56,7 @@ public final class AppPickerActivity extends ListActivity {
if (position >= 0 && position < adapter.getCount()) {
String packageName = ((AppInfo) adapter.getItem(position)).getPackageName();
Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra("url", "market://details?id=" + packageName); // Browser.BookmarkColumns.URL
setResult(RESULT_OK, intent);
} else {
diff --git a/android/src/com/google/zxing/client/android/share/BookmarkPickerActivity.java b/android/src/com/google/zxing/client/android/share/BookmarkPickerActivity.java
index ddc98901b..e7d2c112e 100644
--- a/android/src/com/google/zxing/client/android/share/BookmarkPickerActivity.java
+++ b/android/src/com/google/zxing/client/android/share/BookmarkPickerActivity.java
@@ -26,6 +26,7 @@ import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
+import com.google.zxing.client.android.Intents;
/**
* This class is only needed because I can't successfully send an ACTION_PICK intent to
@@ -52,19 +53,16 @@ public final class BookmarkPickerActivity extends ListActivity {
protected void onResume() {
super.onResume();
titleURLs.clear();
- Cursor cursor = getContentResolver().query(BOOKMARKS_URI, BOOKMARK_PROJECTION,
- BOOKMARK_SELECTION, null, null);
- if (cursor == null) {
- Log.w(TAG, "No cursor returned for bookmark query");
- finish();
- return;
- }
- try {
+ try (Cursor cursor = getContentResolver().query(BOOKMARKS_URI, BOOKMARK_PROJECTION,
+ BOOKMARK_SELECTION, null, null)) {
+ if (cursor == null) {
+ Log.w(TAG, "No cursor returned for bookmark query");
+ finish();
+ return;
+ }
while (cursor.moveToNext()) {
titleURLs.add(new String[] { cursor.getString(0), cursor.getString(1) });
}
- } finally {
- cursor.close();
}
setListAdapter(new BookmarkAdapter(this, titleURLs));
}
@@ -74,7 +72,7 @@ public final class BookmarkPickerActivity extends ListActivity {
protected void onListItemClick(ListView l, View view, int position, long id) {
String[] titleURL = titleURLs.get(position);
Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra("title", titleURL[0]); // Browser.BookmarkColumns.TITLE
intent.putExtra("url", titleURL[1]); // Browser.BookmarkColumns.URL
setResult(RESULT_OK, intent);
diff --git a/android/src/com/google/zxing/client/android/share/ShareActivity.java b/android/src/com/google/zxing/client/android/share/ShareActivity.java
index 38edb8871..dc42bdf15 100755
--- a/android/src/com/google/zxing/client/android/share/ShareActivity.java
+++ b/android/src/com/google/zxing/client/android/share/ShareActivity.java
@@ -56,7 +56,7 @@ public final class ShareActivity extends Activity {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
startActivityForResult(intent, PICK_CONTACT);
}
};
@@ -65,7 +65,7 @@ public final class ShareActivity extends Activity {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.setClassName(ShareActivity.this, BookmarkPickerActivity.class.getName());
startActivityForResult(intent, PICK_BOOKMARK);
}
@@ -75,7 +75,7 @@ public final class ShareActivity extends Activity {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.setClassName(ShareActivity.this, AppPickerActivity.class.getName());
startActivityForResult(intent, PICK_APP);
}
@@ -108,7 +108,7 @@ public final class ShareActivity extends Activity {
private void launchSearch(String text) {
Intent intent = new Intent(Intents.Encode.ACTION);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);
intent.putExtra(Intents.Encode.DATA, text);
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());
@@ -161,7 +161,7 @@ public final class ShareActivity extends Activity {
return; // Show error?
}
Intent intent = new Intent(Intents.Encode.ACTION);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);
intent.putExtra(Intents.Encode.DATA, text);
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());
@@ -181,32 +181,16 @@ public final class ShareActivity extends Activity {
}
ContentResolver resolver = getContentResolver();
- Cursor cursor;
- try {
- // We're seeing about six reports a week of this exception although I don't understand why.
- cursor = resolver.query(contactUri, null, null, null, null);
- } catch (IllegalArgumentException ignored) {
- return;
- }
- if (cursor == null) {
- return;
- }
-
String id;
String name;
boolean hasPhone;
- try {
- if (!cursor.moveToFirst()) {
+ try (Cursor cursor = resolver.query(contactUri, null, null, null, null)) {
+ if (cursor == null || !cursor.moveToFirst()) {
return;
}
-
id = cursor.getString(cursor.getColumnIndex(BaseColumns._ID));
name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
hasPhone = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0;
-
-
- } finally {
- cursor.close();
}
// Don't require a name to be present, this contact might be just a phone number.
@@ -216,13 +200,12 @@ public final class ShareActivity extends Activity {
}
if (hasPhone) {
- Cursor phonesCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.Phone.CONTACT_ID + '=' + id,
- null,
- null);
- if (phonesCursor != null) {
- try {
+ try (Cursor phonesCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
+ null,
+ ContactsContract.CommonDataKinds.Phone.CONTACT_ID + '=' + id,
+ null,
+ null)) {
+ if (phonesCursor != null) {
int foundPhone = 0;
int phonesNumberColumn = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int phoneTypeColumn = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
@@ -235,38 +218,30 @@ public final class ShareActivity extends Activity {
bundle.putInt(Contents.PHONE_TYPE_KEYS[foundPhone], type);
foundPhone++;
}
- } finally {
- phonesCursor.close();
}
}
}
- Cursor methodsCursor = resolver.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + '=' + id,
- null,
- null);
- if (methodsCursor != null) {
- try {
- if (methodsCursor.moveToNext()) {
- String data = methodsCursor.getString(
- methodsCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
- if (data != null && !data.isEmpty()) {
- bundle.putString(ContactsContract.Intents.Insert.POSTAL, massageContactData(data));
- }
+ try (Cursor methodsCursor = resolver.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
+ null,
+ ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + '=' + id,
+ null,
+ null)) {
+ if (methodsCursor != null && methodsCursor.moveToNext()) {
+ String data = methodsCursor.getString(
+ methodsCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
+ if (data != null && !data.isEmpty()) {
+ bundle.putString(ContactsContract.Intents.Insert.POSTAL, massageContactData(data));
}
- } finally {
- methodsCursor.close();
}
}
- Cursor emailCursor = resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.Email.CONTACT_ID + '=' + id,
- null,
- null);
- if (emailCursor != null) {
- try {
+ try (Cursor emailCursor = resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
+ null,
+ ContactsContract.CommonDataKinds.Email.CONTACT_ID + '=' + id,
+ null,
+ null)) {
+ if (emailCursor != null) {
int foundEmail = 0;
int emailColumn = emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
while (emailCursor.moveToNext() && foundEmail < Contents.EMAIL_KEYS.length) {
@@ -276,13 +251,11 @@ public final class ShareActivity extends Activity {
}
foundEmail++;
}
- } finally {
- emailCursor.close();
}
}
Intent intent = new Intent(Intents.Encode.ACTION);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.addFlags(Intents.FLAG_NEW_DOC);
intent.putExtra(Intents.Encode.TYPE, Contents.Type.CONTACT);
intent.putExtra(Intents.Encode.DATA, bundle);
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());
diff --git a/android/src/com/google/zxing/client/android/wifi/NetworkType.java b/android/src/com/google/zxing/client/android/wifi/NetworkType.java
index 6a9e5a468..18a9199a2 100644
--- a/android/src/com/google/zxing/client/android/wifi/NetworkType.java
+++ b/android/src/com/google/zxing/client/android/wifi/NetworkType.java
@@ -26,17 +26,17 @@ enum NetworkType {
if (networkTypeString == null) {
return NO_PASSWORD;
}
- if ("WPA".equals(networkTypeString) ||
- "WPA2".equals(networkTypeString)) {
- return WPA;
+ switch (networkTypeString) {
+ case "WPA":
+ case "WPA2":
+ return WPA;
+ case "WEP":
+ return WEP;
+ case "nopass":
+ return NO_PASSWORD;
+ default:
+ throw new IllegalArgumentException(networkTypeString);
}
- if ("WEP".equals(networkTypeString)) {
- return WEP;
- }
- if ("nopass".equals(networkTypeString)) {
- return NO_PASSWORD;
- }
- throw new IllegalArgumentException(networkTypeString);
}
}
diff --git a/core/src/main/java/com/google/zxing/aztec/AztecWriter.java b/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
index 9eb4190e3..79bca7b41 100644
--- a/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
+++ b/core/src/main/java/com/google/zxing/aztec/AztecWriter.java
@@ -24,6 +24,7 @@ import com.google.zxing.aztec.encoder.Encoder;
import com.google.zxing.common.BitMatrix;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
@@ -31,8 +32,6 @@ import java.util.Map;
*/
public final class AztecWriter implements Writer {
- private static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
-
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height) {
return encode(contents, format, width, height, null);
@@ -40,7 +39,7 @@ public final class AztecWriter implements Writer {
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map hints) {
- Charset charset = DEFAULT_CHARSET;
+ Charset charset = StandardCharsets.ISO_8859_1;
int eccPercent = Encoder.DEFAULT_EC_PERCENT;
int layers = Encoder.DEFAULT_AZTEC_LAYERS;
if (hints != null) {
diff --git a/core/src/main/java/com/google/zxing/client/result/VCardResultParser.java b/core/src/main/java/com/google/zxing/client/result/VCardResultParser.java
index 5e6423e8a..14545fa52 100644
--- a/core/src/main/java/com/google/zxing/client/result/VCardResultParser.java
+++ b/core/src/main/java/com/google/zxing/client/result/VCardResultParser.java
@@ -21,7 +21,7 @@ import com.google.zxing.Result;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -256,12 +256,12 @@ public final class VCardResultParser extends ResultParser {
byte[] fragmentBytes = fragmentBuffer.toByteArray();
String fragment;
if (charset == null) {
- fragment = new String(fragmentBytes, Charset.forName("UTF-8"));
+ fragment = new String(fragmentBytes, StandardCharsets.UTF_8);
} else {
try {
fragment = new String(fragmentBytes, charset);
} catch (UnsupportedEncodingException e) {
- fragment = new String(fragmentBytes, Charset.forName("UTF-8"));
+ fragment = new String(fragmentBytes, StandardCharsets.UTF_8);
}
}
fragmentBuffer.reset();
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/EncoderContext.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/EncoderContext.java
index 25b5a4cd8..cc0b0cb16 100644
--- a/core/src/main/java/com/google/zxing/datamatrix/encoder/EncoderContext.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/EncoderContext.java
@@ -18,7 +18,7 @@ package com.google.zxing.datamatrix.encoder;
import com.google.zxing.Dimension;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
final class EncoderContext {
@@ -34,7 +34,7 @@ final class EncoderContext {
EncoderContext(String msg) {
//From this point on Strings are not Unicode anymore!
- byte[] msgBinary = msg.getBytes(Charset.forName("ISO-8859-1"));
+ byte[] msgBinary = msg.getBytes(StandardCharsets.ISO_8859_1);
StringBuilder sb = new StringBuilder(msgBinary.length);
for (int i = 0, c = msgBinary.length; i < c; i++) {
char ch = (char) (msgBinary[i] & 0xff);
diff --git a/core/src/main/java/com/google/zxing/multi/qrcode/QRCodeMultiReader.java b/core/src/main/java/com/google/zxing/multi/qrcode/QRCodeMultiReader.java
index 083fcf3e4..49d350293 100644
--- a/core/src/main/java/com/google/zxing/multi/qrcode/QRCodeMultiReader.java
+++ b/core/src/main/java/com/google/zxing/multi/qrcode/QRCodeMultiReader.java
@@ -168,13 +168,7 @@ public final class QRCodeMultiReader extends QRCodeReader implements MultipleBar
public int compare(Result a, Result b) {
int aNumber = (int) a.getResultMetadata().get(ResultMetadataType.STRUCTURED_APPEND_SEQUENCE);
int bNumber = (int) b.getResultMetadata().get(ResultMetadataType.STRUCTURED_APPEND_SEQUENCE);
- if (aNumber < bNumber) {
- return -1;
- }
- if (aNumber > bNumber) {
- return 1;
- }
- return 0;
+ return Integer.compare(aNumber, bNumber);
}
}
diff --git a/core/src/main/java/com/google/zxing/oned/UPCEANExtension5Support.java b/core/src/main/java/com/google/zxing/oned/UPCEANExtension5Support.java
index bde090cf0..cb55eeb1f 100644
--- a/core/src/main/java/com/google/zxing/oned/UPCEANExtension5Support.java
+++ b/core/src/main/java/com/google/zxing/oned/UPCEANExtension5Support.java
@@ -153,16 +153,15 @@ final class UPCEANExtension5Support {
break;
case '9':
// Reference: http://www.jollytech.com
- if ("90000".equals(raw)) {
- // No suggested retail price
- return null;
- }
- if ("99991".equals(raw)) {
- // Complementary
- return "0.00";
- }
- if ("99990".equals(raw)) {
- return "Used";
+ switch (raw) {
+ case "90000":
+ // No suggested retail price
+ return null;
+ case "99991":
+ // Complementary
+ return "0.00";
+ case "99990":
+ return "Used";
}
// Otherwise... unknown currency?
currency = "";
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
index 7cc8fbccf..94a7b9db5 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java
@@ -24,6 +24,7 @@ import com.google.zxing.pdf417.PDF417ResultMetadata;
import java.io.ByteArrayOutputStream;
import java.math.BigInteger;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
@@ -70,8 +71,6 @@ final class DecodedBitStreamParser {
private static final char[] MIXED_CHARS =
"0123456789&\r\t,:#-.$/+%*=^".toCharArray();
- private static final Charset DEFAULT_ENCODING = Charset.forName("ISO-8859-1");
-
/**
* Table containing values for the exponent of 900.
* This is used in the numeric compaction decode algorithm.
@@ -94,7 +93,7 @@ final class DecodedBitStreamParser {
static DecoderResult decode(int[] codewords, String ecLevel) throws FormatException {
StringBuilder result = new StringBuilder(codewords.length * 2);
- Charset encoding = DEFAULT_ENCODING;
+ Charset encoding = StandardCharsets.ISO_8859_1;
// Get compaction mode
int codeIndex = 1;
int code = codewords[codeIndex++];
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
index dea45f607..0eeba30ee 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResult.java
@@ -271,26 +271,25 @@ final class DetectionResult {
if (rowIndicatorColumn == null) {
rowIndicatorColumn = detectionResultColumns[barcodeColumnCount + 1];
}
- Formatter formatter = new Formatter();
- for (int codewordsRow = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {
- formatter.format("CW %3d:", codewordsRow);
- for (int barcodeColumn = 0; barcodeColumn < barcodeColumnCount + 2; barcodeColumn++) {
- if (detectionResultColumns[barcodeColumn] == null) {
- formatter.format(" | ");
- continue;
+ try (Formatter formatter = new Formatter()) {
+ for (int codewordsRow = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {
+ formatter.format("CW %3d:", codewordsRow);
+ for (int barcodeColumn = 0; barcodeColumn < barcodeColumnCount + 2; barcodeColumn++) {
+ if (detectionResultColumns[barcodeColumn] == null) {
+ formatter.format(" | ");
+ continue;
+ }
+ Codeword codeword = detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];
+ if (codeword == null) {
+ formatter.format(" | ");
+ continue;
+ }
+ formatter.format(" %3d|%3d", codeword.getRowNumber(), codeword.getValue());
}
- Codeword codeword = detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];
- if (codeword == null) {
- formatter.format(" | ");
- continue;
- }
- formatter.format(" %3d|%3d", codeword.getRowNumber(), codeword.getValue());
+ formatter.format("%n");
}
- formatter.format("%n");
+ return formatter.toString();
}
- String result = formatter.toString();
- formatter.close();
- return result;
}
}
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultColumn.java b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultColumn.java
index e0ea96d98..bcf5119ef 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultColumn.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/DetectionResultColumn.java
@@ -79,18 +79,17 @@ class DetectionResultColumn {
@Override
public String toString() {
- Formatter formatter = new Formatter();
- int row = 0;
- for (Codeword codeword : codewords) {
- if (codeword == null) {
- formatter.format("%3d: | %n", row++);
- continue;
+ try (Formatter formatter = new Formatter()) {
+ int row = 0;
+ for (Codeword codeword : codewords) {
+ if (codeword == null) {
+ formatter.format("%3d: | %n", row++);
+ continue;
+ }
+ formatter.format("%3d: %3d|%3d%n", row++, codeword.getRowNumber(), codeword.getValue());
}
- formatter.format("%3d: %3d|%3d%n", row++, codeword.getRowNumber(), codeword.getValue());
+ return formatter.toString();
}
- String result = formatter.toString();
- formatter.close();
- return result;
}
}
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
index 4504355de..704c7db0d 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
@@ -610,23 +610,22 @@ public final class PDF417ScanningDecoder {
}
public static String toString(BarcodeValue[][] barcodeMatrix) {
- Formatter formatter = new Formatter();
- for (int row = 0; row < barcodeMatrix.length; row++) {
- formatter.format("Row %2d: ", row);
- for (int column = 0; column < barcodeMatrix[row].length; column++) {
- BarcodeValue barcodeValue = barcodeMatrix[row][column];
- if (barcodeValue.getValue().length == 0) {
- formatter.format(" ", (Object[]) null);
- } else {
- formatter.format("%4d(%2d)", barcodeValue.getValue()[0],
- barcodeValue.getConfidence(barcodeValue.getValue()[0]));
+ try (Formatter formatter = new Formatter()) {
+ for (int row = 0; row < barcodeMatrix.length; row++) {
+ formatter.format("Row %2d: ", row);
+ for (int column = 0; column < barcodeMatrix[row].length; column++) {
+ BarcodeValue barcodeValue = barcodeMatrix[row][column];
+ if (barcodeValue.getValue().length == 0) {
+ formatter.format(" ", (Object[]) null);
+ } else {
+ formatter.format("%4d(%2d)", barcodeValue.getValue()[0],
+ barcodeValue.getConfidence(barcodeValue.getValue()[0]));
+ }
}
+ formatter.format("%n");
}
- formatter.format("%n");
+ return formatter.toString();
}
- String result = formatter.toString();
- formatter.close();
- return result;
}
}
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
index 9c8847bd4..3ed0ecf4a 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
@@ -26,6 +26,7 @@ import com.google.zxing.common.CharacterSetECI;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
@@ -126,7 +127,7 @@ final class PDF417HighLevelEncoder {
private static final byte[] MIXED = new byte[128];
private static final byte[] PUNCTUATION = new byte[128];
- private static final Charset DEFAULT_ENCODING = Charset.forName("ISO-8859-1");
+ private static final Charset DEFAULT_ENCODING = StandardCharsets.ISO_8859_1;
private PDF417HighLevelEncoder() {
}
diff --git a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
index 61fe3c146..b62a16f6e 100755
--- a/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
+++ b/core/src/main/java/com/google/zxing/qrcode/detector/FinderPatternFinder.java
@@ -651,9 +651,8 @@ public class FinderPatternFinder {
}
@Override
public int compare(FinderPattern center1, FinderPattern center2) {
- float dA = Math.abs(center2.getEstimatedModuleSize() - average);
- float dB = Math.abs(center1.getEstimatedModuleSize() - average);
- return dA < dB ? -1 : dA > dB ? 1 : 0;
+ return Float.compare(Math.abs(center2.getEstimatedModuleSize() - average),
+ Math.abs(center1.getEstimatedModuleSize() - average));
}
}
@@ -667,13 +666,12 @@ public class FinderPatternFinder {
}
@Override
public int compare(FinderPattern center1, FinderPattern center2) {
- if (center2.getCount() == center1.getCount()) {
- float dA = Math.abs(center2.getEstimatedModuleSize() - average);
- float dB = Math.abs(center1.getEstimatedModuleSize() - average);
- return dA < dB ? 1 : dA > dB ? -1 : 0;
- } else {
- return center2.getCount() - center1.getCount();
+ int countCompare = Integer.compare(center2.getCount(), center1.getCount());
+ if (countCompare == 0) {
+ return Float.compare(Math.abs(center1.getEstimatedModuleSize() - average),
+ Math.abs(center2.getEstimatedModuleSize() - average));
}
+ return countCompare;
}
}