summaryrefslogtreecommitdiffstats
path: root/quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java')
-rw-r--r--quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java238
1 files changed, 238 insertions, 0 deletions
diff --git a/quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java b/quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java
new file mode 100644
index 000000000..c8fa500c1
--- /dev/null
+++ b/quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2017 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.lineageos.quickreader;
+
+import android.app.AlertDialog;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.CalendarContract;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.codeaurora.snapcam.R;
+
+class ScannerIntentHelper {
+ private static final String EVENT_SUMMARY = "SUMMARY:";
+ private static final String EVENT_DESCRIPTION = "DESCRIPTION:";
+ private static final String EVENT_START = "DTSTART:";
+ private static final String EVENT_END = "DTEND:";
+ private static final String EVENT_LOCATION = "LOCATION:";
+ private static final String EVENT_DATE_FORMAT = "yyyyMMdd";
+
+ private static final String SMS_URI = "smsto:";
+ private static final String SMS_BODY = "sms_body";
+
+ private static final String CONTACT_NAME = "N:";
+ private static final String CONTACT_ORG = "ORG:";
+ private static final String CONTACT_TITLE = "TITLE:";
+ private static final String CONTACT_TEL = "TEL:";
+ private static final String CONTACT_EMAIL = "EMAIL:";
+ private static final String CONTACT_NOTE = "NOTE:";
+
+ private static final String MEBKM_URL = "URL:";
+
+ private static ScannerIntentHelper INSTANCE;
+
+ private Intent mIntent;
+
+ private String mScannedText;
+
+ private ScannerIntentHelper() {
+ }
+
+ static ScannerIntentHelper getInstance() {
+ if (INSTANCE == null) {
+ INSTANCE = new ScannerIntentHelper();
+ }
+
+ return INSTANCE;
+ }
+
+ void run(Context context) {
+ if (mIntent == null) {
+ showScannedText(context);
+ } else {
+ runIntent(context);
+ }
+ }
+
+ void reset() {
+ mIntent = null;
+ mScannedText = null;
+ }
+
+ boolean isValid() {
+ return mIntent != null || !TextUtils.isEmpty(mScannedText);
+ }
+
+ void setUriIntent(String uri) {
+ mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
+ }
+
+ void setCalendarIntent(String text) {
+ String[] data = text.split("\n");
+ String summary = "";
+ String description = "";
+ String location = "";
+ Date start = new Date();
+ Date end = new Date();
+
+ for (String item : data) {
+ if (item.startsWith(EVENT_SUMMARY)) {
+ summary = item.replace(EVENT_SUMMARY, "");
+ } else if (item.startsWith(EVENT_DESCRIPTION)) {
+ summary = item.replace(EVENT_DESCRIPTION, "");
+ } else if (item.startsWith(EVENT_LOCATION)) {
+ location = item.replace(EVENT_LOCATION, "");
+ } else if (item.startsWith(EVENT_START)) {
+ start = parseDate(item.replace(EVENT_START, ""));
+ } else if (item.startsWith(EVENT_END)) {
+ start = parseDate(item.replace(EVENT_END, ""));
+ }
+ }
+
+ mIntent = new Intent(Intent.ACTION_INSERT, CalendarContract.Events.CONTENT_URI);
+ mIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start)
+ .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)
+ .putExtra(CalendarContract.Events.TITLE, summary)
+ .putExtra(CalendarContract.Events.DESCRIPTION, description)
+ .putExtra(CalendarContract.Events.EVENT_LOCATION, location);
+ }
+
+ void setSMSIntent(String text) {
+ String[] data = text.split(":");
+
+ mIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(SMS_URI + data[1]));
+ if (data.length > 2) {
+ mIntent.putExtra(SMS_BODY, data[2]);
+ }
+ }
+
+ void setContactIntent(String text, boolean isVCard) {
+ String[] data = text.split(isVCard ? "\n" : ";");
+ String name = "";
+ String org = "";
+ String title = "";
+ String telephone = "";
+ String email = "";
+ String notes = "";
+
+
+ for (String item : data) {
+ if (item.startsWith(CONTACT_NAME)) {
+ name = item.replace(CONTACT_NAME, "");
+ } else if (item.startsWith(CONTACT_ORG)) {
+ org = item.replace(CONTACT_ORG, "");
+ } else if (item.startsWith(CONTACT_TITLE)) {
+ title = item.replace(CONTACT_TITLE, "");
+ } else if (item.startsWith(CONTACT_TEL)) {
+ telephone = item.replace(CONTACT_TEL, "");
+ } else if (item.startsWith(CONTACT_EMAIL)) {
+ email = item.replace(CONTACT_EMAIL, "");
+ } else if (item.startsWith(CONTACT_NOTE)) {
+ notes = item.replace(CONTACT_NOTE, "");
+ }
+ }
+
+ mIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
+ mIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE)
+ .putExtra(ContactsContract.Intents.Insert.NAME, name)
+ .putExtra(ContactsContract.Intents.Insert.COMPANY, org)
+ .putExtra(ContactsContract.Intents.Insert.JOB_TITLE, title)
+ .putExtra(ContactsContract.Intents.Insert.PHONE, telephone)
+ .putExtra(ContactsContract.Intents.Insert.PHONE_TYPE,
+ ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
+ .putExtra(ContactsContract.Intents.Insert.EMAIL, email)
+ .putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE,
+ ContactsContract.CommonDataKinds.Email.TYPE_WORK)
+ .putExtra(ContactsContract.Intents.Insert.NOTES, notes);
+ }
+
+ void setMeBkmUrl(String text) {
+ String[] data = text.split(":");
+
+ for (String item : data) {
+ if (!item.startsWith(MEBKM_URL)) {
+ continue;
+ }
+
+ setUriIntent(item.replace(MEBKM_URL, "").replace("\\", "").replace(";", ""));
+ }
+ }
+
+ void setText(String text) {
+ mScannedText = text;
+ }
+
+ private Date parseDate(String item) {
+ SimpleDateFormat format = new SimpleDateFormat(EVENT_DATE_FORMAT, Locale.getDefault());
+ String formattedDate = item.split("T")[0];
+
+ try {
+ return format.parse(formattedDate);
+ } catch (ParseException e) {
+ return new Date();
+ }
+ }
+
+ private void runIntent(Context context) {
+ if (mIntent.resolveActivity(context.getPackageManager()) == null) {
+ Toast.makeText(context, context.getString(R.string.quick_reader_no_activity_found),
+ Toast.LENGTH_LONG).show();
+ } else {
+ context.startActivity(mIntent);
+ }
+ }
+
+ private void showScannedText(Context context) {
+ new AlertDialog.Builder(context)
+ .setTitle(R.string.quick_reader_scanned_text_title)
+ .setMessage(mScannedText)
+ .setNeutralButton(R.string.quick_reader_action_dismiss, null)
+ .setPositiveButton(R.string.quick_reader_scanned_text_positive,
+ (dialog, i) -> copyScanned(context))
+ .setNegativeButton(R.string.quick_reader_scanned_text_negative,
+ (dialog, i) -> shareScanned(context))
+ .show();
+ }
+
+ private void copyScanned(Context context) {
+ ClipboardManager manager = (ClipboardManager)
+ context.getSystemService(Context.CLIPBOARD_SERVICE);
+ if (manager != null) {
+ manager.setPrimaryClip(ClipData.newPlainText("", mScannedText));
+ Toast.makeText(context, context.getString(R.string.quick_reader_copied_message),
+ Toast.LENGTH_LONG).show();
+ }
+ }
+
+ private void shareScanned(Context context) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, mScannedText);
+ context.startActivity(Intent.createChooser(intent,
+ context.getString(R.string.quick_reader_share_title)));
+ }
+} \ No newline at end of file