Some refactoring to remove small disconnect between how Results are handled and whether the client thinks it can do anything meaningful with a Result

git-svn-id: https://zxing.googlecode.com/svn/trunk@288 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2008-03-17 18:12:00 +00:00
parent b18107391b
commit c3b3254cf6
2 changed files with 80 additions and 85 deletions

View file

@ -158,8 +158,8 @@ public final class BarcodeReaderCaptureActivity extends Activity {
Context context = getApplication(); Context context = getApplication();
ParsedReaderResult readerResult = parseReaderResult(rawResult); ParsedReaderResult readerResult = parseReaderResult(rawResult);
Handler handler = new ResultHandler(this, readerResult); ResultHandler handler = new ResultHandler(this, readerResult);
if (canBeHandled(readerResult.getType())) { if (handler.getIntent() != null) {
// Can be handled by some external app; ask if the user wants to // Can be handled by some external app; ask if the user wants to
// proceed first though // proceed first though
Message yesMessage = handler.obtainMessage(R.string.button_yes); Message yesMessage = handler.obtainMessage(R.string.button_yes);
@ -193,10 +193,6 @@ public final class BarcodeReaderCaptureActivity extends Activity {
return readerResult; return readerResult;
} }
private static boolean canBeHandled(ParsedReaderResultType type) {
return !type.equals(ParsedReaderResultType.TEXT);
}
private static int getDialogTitleID(ParsedReaderResultType type) { private static int getDialogTitleID(ParsedReaderResultType type) {
if (type.equals(ParsedReaderResultType.ADDRESSBOOK)) { if (type.equals(ParsedReaderResultType.ADDRESSBOOK)) {
return R.string.title_add_contact; return R.string.title_add_contact;

View file

@ -43,17 +43,15 @@ import java.net.URISyntaxException;
*/ */
final class ResultHandler extends Handler { final class ResultHandler extends Handler {
private final ParsedReaderResult result; private final Intent intent;
private final BarcodeReaderCaptureActivity captureActivity; private final BarcodeReaderCaptureActivity captureActivity;
ResultHandler(BarcodeReaderCaptureActivity captureActivity, ParsedReaderResult result) { ResultHandler(BarcodeReaderCaptureActivity captureActivity, ParsedReaderResult result) {
this.captureActivity = captureActivity; this.captureActivity = captureActivity;
this.result = result; this.intent = resultToIntent(result);
} }
@Override private static Intent resultToIntent(ParsedReaderResult result) {
public void handleMessage(Message message) {
if (message.what == R.string.button_yes) {
Intent intent = null; Intent intent = null;
ParsedReaderResultType type = result.getType(); ParsedReaderResultType type = result.getType();
if (type.equals(ParsedReaderResultType.ADDRESSBOOK)) { if (type.equals(ParsedReaderResultType.ADDRESSBOOK)) {
@ -75,24 +73,19 @@ final class ResultHandler extends Handler {
} else if (type.equals(ParsedReaderResultType.BOOKMARK)) { } else if (type.equals(ParsedReaderResultType.BOOKMARK)) {
// For now, we can only open the browser, and not actually add a bookmark // For now, we can only open the browser, and not actually add a bookmark
try { try {
intent = new Intent(Intent.VIEW_ACTION, intent = new Intent(Intent.VIEW_ACTION, new ContentURI(((BookmarkDoCoMoResult) result).getURI()));
new ContentURI(((BookmarkDoCoMoResult) result).getURI()));
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
} else if (type.equals(ParsedReaderResultType.URLTO)) { } else if (type.equals(ParsedReaderResultType.URLTO)) {
try { try {
intent = new Intent(Intent.VIEW_ACTION, intent = new Intent(Intent.VIEW_ACTION, new ContentURI(((URLTOResult) result).getURI()));
new ContentURI(((URLTOResult) result).getURI()));
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
} else if (type.equals(ParsedReaderResultType.EMAIL)) { } else if (type.equals(ParsedReaderResultType.EMAIL)) {
EmailDoCoMoResult emailResult = (EmailDoCoMoResult) result; EmailDoCoMoResult emailResult = (EmailDoCoMoResult) result;
try { try {
intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getTo())); intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getTo()));
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
putExtra(intent, "subject", emailResult.getSubject()); putExtra(intent, "subject", emailResult.getSubject());
putExtra(intent, "body", emailResult.getBody()); putExtra(intent, "body", emailResult.getBody());
@ -101,7 +94,6 @@ final class ResultHandler extends Handler {
try { try {
intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getEmailAddress())); intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getEmailAddress()));
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
//} else if (type.equals(ParsedReaderResultType.GEO)) { //} else if (type.equals(ParsedReaderResultType.GEO)) {
// GeoParsedResult geoResult = (GeoParsedResult) result; // GeoParsedResult geoResult = (GeoParsedResult) result;
@ -115,22 +107,25 @@ final class ResultHandler extends Handler {
} else if (type.equals(ParsedReaderResultType.UPC)) { } else if (type.equals(ParsedReaderResultType.UPC)) {
UPCParsedResult upcResult = (UPCParsedResult) result; UPCParsedResult upcResult = (UPCParsedResult) result;
try { try {
ContentURI uri = new ContentURI("http://www.upcdatabase.com/item.asp?upc=" + ContentURI uri = new ContentURI("http://www.upcdatabase.com/item.asp?upc=" + upcResult.getUPC());
upcResult.getUPC());
intent = new Intent(Intent.VIEW_ACTION, uri); intent = new Intent(Intent.VIEW_ACTION, uri);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
} else if (type.equals(ParsedReaderResultType.URI)) { } else if (type.equals(ParsedReaderResultType.URI)) {
URIParsedResult uriResult = (URIParsedResult) result; URIParsedResult uriResult = (URIParsedResult) result;
try { try {
intent = new Intent(Intent.VIEW_ACTION, new ContentURI(uriResult.getURI())); intent = new Intent(Intent.VIEW_ACTION, new ContentURI(uriResult.getURI()));
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
return;
} }
} else if (type.equals(ParsedReaderResultType.ANDROID_INTENT)) { } else if (type.equals(ParsedReaderResultType.ANDROID_INTENT)) {
intent = ((AndroidIntentParsedResult) result).getIntent(); intent = ((AndroidIntentParsedResult) result).getIntent();
} }
return intent;
}
@Override
public void handleMessage(Message message) {
if (message.what == R.string.button_yes) {
if (intent != null) { if (intent != null) {
captureActivity.startActivity(intent); captureActivity.startActivity(intent);
} }
@ -139,6 +134,10 @@ final class ResultHandler extends Handler {
} }
} }
Intent getIntent() {
return intent;
}
private static void putExtra(Intent intent, String key, String value) { private static void putExtra(Intent intent, String key, String value) {
if (value != null && value.length() > 0) { if (value != null && value.length() > 0) {
intent.putExtra(key, value); intent.putExtra(key, value);