Initial check in of rough, experimental iPhone code. Not to be used just yet; just...
[zxing.git] / android / src / com / google / zxing / client / android / ResultHandler.java
1 /*
2  * Copyright (C) 2008 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.google.zxing.client.android;
18
19 import android.content.Intent;
20 import android.net.ContentURI;
21 import android.os.Handler;
22 import android.os.Message;
23 import android.provider.Contacts;
24 import com.google.zxing.client.result.AddressBookDoCoMoResult;
25 import com.google.zxing.client.result.BookmarkDoCoMoResult;
26 import com.google.zxing.client.result.EmailAddressResult;
27 import com.google.zxing.client.result.EmailDoCoMoResult;
28 import com.google.zxing.client.result.ParsedReaderResult;
29 import com.google.zxing.client.result.ParsedReaderResultType;
30 import com.google.zxing.client.result.UPCParsedResult;
31 import com.google.zxing.client.result.URIParsedResult;
32
33 import java.net.URISyntaxException;
34
35 /**
36  * Handles the result of barcode decoding in the context of the Android platform,
37  * by dispatching the proper intents and so on.
38  *
39  * @author srowen@google.com (Sean Owen)
40  * @author dswitkin@google.com (Daniel Switkin)
41  */
42 final class ResultHandler extends Handler {
43
44   private final ParsedReaderResult result;
45   private final BarcodeReaderCaptureActivity captureActivity;
46
47   ResultHandler(BarcodeReaderCaptureActivity captureActivity, ParsedReaderResult result) {
48     this.captureActivity = captureActivity;
49     this.result = result;
50   }
51
52   @Override
53   public void handleMessage(Message message) {
54     if (message.what == R.string.button_yes) {
55       Intent intent = null;
56       ParsedReaderResultType type = result.getType();
57       if (type == ParsedReaderResultType.ADDRESSBOOK) {
58         AddressBookDoCoMoResult addressResult = (AddressBookDoCoMoResult) result;
59         intent = new Intent(Contacts.Intents.Insert.ACTION, Contacts.People.CONTENT_URI);
60         putExtra(intent, Contacts.Intents.Insert.NAME, addressResult.getName());
61         putExtra(intent, Contacts.Intents.Insert.PHONE, addressResult.getPhoneNumbers()[0]);
62         putExtra(intent, Contacts.Intents.Insert.EMAIL, addressResult.getEmail());
63         putExtra(intent, Contacts.Intents.Insert.NOTES, addressResult.getNote());
64         putExtra(intent, Contacts.Intents.Insert.POSTAL, addressResult.getAddress());
65       } else if (type == ParsedReaderResultType.BOOKMARK) {
66         // For now, we can only open the browser, and not actually add a bookmark
67         try {
68           intent = new Intent(Intent.VIEW_ACTION,
69               new ContentURI(((BookmarkDoCoMoResult) result).getURI()));
70         } catch (URISyntaxException e) {
71           return;
72         }
73       } else if (type == ParsedReaderResultType.EMAIL) {
74         EmailDoCoMoResult emailResult = (EmailDoCoMoResult) result;
75         try {
76           intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getTo()));
77         } catch (URISyntaxException e) {
78           return;
79         }
80         putExtra(intent, "subject", emailResult.getSubject());
81         putExtra(intent, "body", emailResult.getBody());
82       } else if (type == ParsedReaderResultType.EMAIL_ADDRESS) {
83         EmailAddressResult emailResult = (EmailAddressResult) result;
84         try {
85           intent = new Intent(Intent.SENDTO_ACTION, new ContentURI(emailResult.getEmailAddress()));
86         } catch (URISyntaxException e) {
87           return;
88         }
89       } else if (type == ParsedReaderResultType.UPC) {
90         UPCParsedResult upcResult = (UPCParsedResult) result;
91         try {
92           ContentURI uri = new ContentURI("http://www.upcdatabase.com/item.asp?upc=" +
93               upcResult.getUPC());
94           intent = new Intent(Intent.VIEW_ACTION, uri);
95         } catch (URISyntaxException e) {
96           return;
97         }
98       } else if (type == ParsedReaderResultType.URI) {
99         URIParsedResult uriResult = (URIParsedResult) result;
100         try {
101           intent = new Intent(Intent.VIEW_ACTION, new ContentURI(uriResult.getURI()));
102         } catch (URISyntaxException e) {
103           return;
104         }
105       }
106       if (intent != null) {
107         captureActivity.startActivity(intent);
108       }
109     } else {
110       captureActivity.restartPreview();
111     }
112   }
113
114   private static void putExtra(Intent intent, String key, String value) {
115     if (key != null && key.length() > 0) {
116       intent.putExtra(key, value);
117     }
118   }
119
120 }