diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/IntentRouter.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/IntentRouter.kt | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/IntentRouter.kt b/app/src/main/java/net/lacolaco/smileessence/IntentRouter.kt deleted file mode 100644 index 2c202f37..00000000 --- a/app/src/main/java/net/lacolaco/smileessence/IntentRouter.kt +++ /dev/null @@ -1,138 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2012-2014 lacolaco.net - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.lacolaco.smileessence - -import android.app.Activity -import android.content.Intent -import android.net.Uri -import android.os.Bundle -import android.text.TextUtils -import android.widget.Toast -import net.lacolaco.smileessence.activity.MainActivity -import net.lacolaco.smileessence.command.CommandOpenUserDetail -import net.lacolaco.smileessence.entity.Tweet -import net.lacolaco.smileessence.logging.Logger -import net.lacolaco.smileessence.util.UIHandler -import net.lacolaco.smileessence.view.DialogHelper -import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment - -import java.util.regex.Matcher -import java.util.regex.Pattern - -object IntentRouter { - - // ------------------------------ FIELDS ------------------------------ - - private val TWITTER_HOST = "twitter.com" - private val TWITTER_STATUS_PATTERN = Pattern.compile("\\A(?:/#!)?/(?:\\w{1,15})/status(?:es)?/(\\d+)\\z", Pattern.CASE_INSENSITIVE) - private val TWITTER_USER_PATTERN = Pattern.compile("\\A(?:/#!)?/(\\w{1,15})/?\\z", Pattern.CASE_INSENSITIVE) - private val TWITTER_POST_PATTERN = Pattern.compile("\\A/(intent/tweet|share)\\z", Pattern.CASE_INSENSITIVE) - - // -------------------------- STATIC METHODS -------------------------- - - fun onNewIntent(activity: MainActivity, intent: Intent) { - Logger.debug("onNewIntent") - val uri = intent.data - if (uri != null) { - onUriIntent(activity, uri) - } else if (intent.action != null) { - when (intent.action) { - Intent.ACTION_SEND -> { - if ("text/plain" == intent.type) { - val extra = intent.extras - if (extra != null) { - val text = getText(extra) - openPostPage(activity, text) - } - } else if (intent.type.startsWith("image/")) { - val imageUri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM) - openPostPageWithImage(activity, imageUri) - } - } - } - } - } - - private fun onUriIntent(activity: MainActivity, uri: Uri) { - Logger.debug(uri.toString()) - - if (uri.host == TWITTER_HOST) { - val postMatcher = TWITTER_POST_PATTERN.matcher(uri.path) // /share and /intent/tweet: don't accept status parameter - if (postMatcher.find()) { - openPostPage(activity, extractText(uri)) - return - } - val statusMatcher = TWITTER_STATUS_PATTERN.matcher(uri.path) - if (statusMatcher.find()) { - Tweet.fetchTask(java.lang.Long.parseLong(statusMatcher.group(1)), activity.world.account) - .onDoneUI { tweet -> DialogHelper.showDialog(activity, StatusDetailDialogFragment.newInstance(tweet)) } - .onFail { x -> Application.toast(R.string.error_intent_status_cannot_load) } - .execute() - return - } - val userMatcher = TWITTER_USER_PATTERN.matcher(uri.path) - if (userMatcher.find()) { - showUserDialog(activity, userMatcher.group(1)) - } - } - } - - private fun getText(extra: Bundle): String { - val builder = StringBuilder() - if (!TextUtils.isEmpty(extra.getCharSequence(Intent.EXTRA_SUBJECT))) { - builder.append(extra.getCharSequence(Intent.EXTRA_SUBJECT)).append(" ") - } - builder.append(extra.getCharSequence(Intent.EXTRA_TEXT)) - return builder.toString() - } - - private fun extractText(uri: Uri): String { - var result = "" - val text = uri.getQueryParameter("text") - val url = uri.getQueryParameter("url") - val via = uri.getQueryParameter("via") - val hashtags = uri.getQueryParameter("hashtags") - - if (!TextUtils.isEmpty(text)) result += text - if (!TextUtils.isEmpty(url)) result += " " + url - if (!TextUtils.isEmpty(hashtags)) result += " " + hashtags.trim { it <= ' ' }.replace(",".toRegex(), " #") - if (!TextUtils.isEmpty(via)) result += " via @" + via - - return result - } - - private fun showUserDialog(activity: MainActivity, screenName: String) { - val openUserDetail = CommandOpenUserDetail(activity, screenName) - openUserDetail.execute() - } - - private fun openPostPage(activity: MainActivity, str: String) { - UIHandler().post { activity.world.postState.beginTransaction().setText(str).commitWithOpen(activity) } - } - - private fun openPostPageWithImage(activity: MainActivity, imageUri: Uri) { - UIHandler().post { activity.openPostPageWithImage(imageUri) } - } -} |