diff options
Diffstat (limited to 'quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java')
-rw-r--r-- | quickReader/src/org/lineageos/quickreader/ScannerIntentHelper.java | 238 |
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 |