Standardize and update all copyright statements to name "ZXing authors" as suggested...
[zxing.git] / android / src / com / google / zxing / client / android / ResultHandler.java
1 /*
2  * Copyright 2008 ZXing authors
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.Uri;
21 import android.provider.Contacts;
22 import android.view.View;
23 import android.widget.Button;
24 import com.google.zxing.client.result.AddressBookAUParsedResult;
25 import com.google.zxing.client.result.AddressBookDoCoMoParsedResult;
26 import com.google.zxing.client.result.BookmarkDoCoMoParsedResult;
27 import com.google.zxing.client.result.EmailAddressParsedResult;
28 import com.google.zxing.client.result.EmailDoCoMoParsedResult;
29 import com.google.zxing.client.result.GeoParsedResult;
30 import com.google.zxing.client.result.ParsedReaderResult;
31 import com.google.zxing.client.result.ParsedReaderResultType;
32 import com.google.zxing.client.result.SMSParsedResult;
33 import com.google.zxing.client.result.SMSTOParsedResult;
34 import com.google.zxing.client.result.TelParsedResult;
35 import com.google.zxing.client.result.UPCParsedResult;
36 import com.google.zxing.client.result.URIParsedResult;
37 import com.google.zxing.client.result.URLTOParsedResult;
38
39 /**
40  * Handles the result of barcode decoding in the context of the Android platform,
41  * by dispatching the proper intents to open other activities like GMail, Maps, etc.
42  *
43  * @author srowen@google.com (Sean Owen)
44  * @author dswitkin@google.com (Daniel Switkin)
45  */
46 final class ResultHandler implements Button.OnClickListener {
47
48   private final Intent intent;
49   private final BarcodeReaderCaptureActivity captureActivity;
50
51   ResultHandler(BarcodeReaderCaptureActivity captureActivity, ParsedReaderResult result) {
52     this.captureActivity = captureActivity;
53     this.intent = resultToIntent(result);
54   }
55
56   private static Intent resultToIntent(ParsedReaderResult result) {
57     Intent intent = null;
58     ParsedReaderResultType type = result.getType();
59     if (type.equals(ParsedReaderResultType.ADDRESSBOOK)) {
60       AddressBookDoCoMoParsedResult addressResult = (AddressBookDoCoMoParsedResult) result;
61       intent = new Intent(Contacts.Intents.Insert.ACTION, Contacts.People.CONTENT_URI);
62       putExtra(intent, Contacts.Intents.Insert.NAME, addressResult.getName());
63       putExtra(intent, Contacts.Intents.Insert.PHONE, addressResult.getPhoneNumbers());
64       putExtra(intent, Contacts.Intents.Insert.EMAIL, addressResult.getEmail());
65       putExtra(intent, Contacts.Intents.Insert.NOTES, addressResult.getNote());
66       putExtra(intent, Contacts.Intents.Insert.POSTAL, addressResult.getAddress());
67     } else if (type.equals(ParsedReaderResultType.ADDRESSBOOK_AU)) {
68       AddressBookAUParsedResult addressResult = (AddressBookAUParsedResult) result;
69       intent = new Intent(Contacts.Intents.Insert.ACTION, Contacts.People.CONTENT_URI);
70       putExtra(intent, Contacts.Intents.Insert.NAME, addressResult.getNames());
71       putExtra(intent, Contacts.Intents.Insert.PHONE, addressResult.getPhoneNumbers());
72       putExtra(intent, Contacts.Intents.Insert.EMAIL, addressResult.getEmails());
73       putExtra(intent, Contacts.Intents.Insert.NOTES, addressResult.getNote());
74       putExtra(intent, Contacts.Intents.Insert.POSTAL, addressResult.getAddress());
75     } else if (type.equals(ParsedReaderResultType.BOOKMARK)) {
76       // For now, we can only open the browser, and not actually add a bookmark
77       intent = new Intent(Intent.VIEW_ACTION, Uri.parse(((BookmarkDoCoMoParsedResult) result).getURI()));
78     } else if (type.equals(ParsedReaderResultType.URLTO)) {
79       intent = new Intent(Intent.VIEW_ACTION, Uri.parse(((URLTOParsedResult) result).getURI()));
80     } else if (type.equals(ParsedReaderResultType.EMAIL)) {
81       EmailDoCoMoParsedResult emailResult = (EmailDoCoMoParsedResult) result;
82       intent = new Intent(Intent.SENDTO_ACTION, Uri.parse(emailResult.getMailtoURI()));
83       putExtra(intent, "subject", emailResult.getSubject());
84       putExtra(intent, "body", emailResult.getBody());
85     } else if (type.equals(ParsedReaderResultType.EMAIL_ADDRESS)) {
86       EmailAddressParsedResult emailResult = (EmailAddressParsedResult) result;
87       intent = new Intent(Intent.SENDTO_ACTION, Uri.parse(emailResult.getMailtoURI()));
88       putExtra(intent, "subject", emailResult.getSubject());
89       putExtra(intent, "body", emailResult.getBody());
90     } else if (type.equals(ParsedReaderResultType.SMS)) {
91       SMSParsedResult smsResult = (SMSParsedResult) result;
92       intent = new Intent(Intent.SENDTO_ACTION, Uri.parse(smsResult.getSMSURI()));
93     } else if (type.equals(ParsedReaderResultType.SMSTO)) {
94       SMSTOParsedResult smsToResult = (SMSTOParsedResult) result;
95       intent = new Intent(Intent.SENDTO_ACTION, Uri.parse(smsToResult.getSMSURI()));
96     } else if (type.equals(ParsedReaderResultType.TEL)) {
97       TelParsedResult telResult = (TelParsedResult) result;
98       intent = new Intent(Intent.DIAL_ACTION, Uri.parse(telResult.getTelURI()));
99     } else if (type.equals(ParsedReaderResultType.GEO)) {
100       GeoParsedResult geoResult = (GeoParsedResult) result;
101       intent = new Intent(Intent.VIEW_ACTION, Uri.parse(geoResult.getGeoURI()));
102     } else if (type.equals(ParsedReaderResultType.UPC)) {
103       UPCParsedResult upcResult = (UPCParsedResult) result;
104       Uri uri = Uri.parse("http://www.upcdatabase.com/item.asp?upc=" + upcResult.getUPC());
105       intent = new Intent(Intent.VIEW_ACTION, uri);
106     } else if (type.equals(ParsedReaderResultType.URI)) {
107       URIParsedResult uriResult = (URIParsedResult) result;
108       intent = new Intent(Intent.VIEW_ACTION, Uri.parse(uriResult.getURI()));
109     } else if (type.equals(ParsedReaderResultType.ANDROID_INTENT)) {
110       intent = ((AndroidIntentParsedResult) result).getIntent();
111     }
112     return intent;
113   }
114
115   public void onClick(View view) {
116     if (intent != null) {
117       captureActivity.startActivity(intent);
118     }
119   }
120
121   Intent getIntent() {
122     return intent;
123   }
124
125   private static void putExtra(Intent intent, String key, String value) {
126     if (value != null && value.length() > 0) {
127       intent.putExtra(key, value);
128     }
129   }
130
131   private static void putExtra(Intent intent, String key, String[] value) {
132     if (value != null && value.length > 0) {
133       putExtra(intent, key, value[0]);
134     }
135   }
136
137 }