aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt87
1 files changed, 85 insertions, 2 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
index 28a95a27..cdbc94d4 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
@@ -31,6 +31,7 @@ import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.support.v4.view.ViewPager
+import android.text.TextUtils
import android.view.Menu
import android.view.MenuItem
import android.view.WindowManager
@@ -38,15 +39,21 @@ import android.widget.ImageView
import de.keyboardsurfer.android.widget.crouton.Crouton
import kotlinx.android.synthetic.main.layout_main.*
import net.lacolaco.smileessence.*
+import net.lacolaco.smileessence.command.CommandOpenUserDetail
import net.lacolaco.smileessence.data.ExtractionWord
+import net.lacolaco.smileessence.entity.Tweet
import net.lacolaco.smileessence.logging.Logger
import net.lacolaco.smileessence.twitter.task.Users
import net.lacolaco.smileessence.util.BitmapURLTask
+import net.lacolaco.smileessence.view.DialogHelper
import net.lacolaco.smileessence.view.adapter.PageListAdapter
import net.lacolaco.smileessence.view.dialog.ConfirmDialogFragment
+import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment
+import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment
import net.lacolaco.smileessence.view.page.*
import org.jetbrains.anko.browse
import org.jetbrains.anko.startActivity;
+import java.util.regex.Pattern
class MainActivity : Activity(), ViewPager.OnPageChangeListener {
val world: World by lazy {
@@ -111,6 +118,65 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
BitmapURLTask(world.account.user.profileImageUrl, currentAccountIconImageView).execute()
}
+ private fun processIntent(intent: Intent) {
+ val uri = intent.getParcelableExtra<Uri>(KEY_ORIGINAL_DATA)
+ if (uri != null){
+ if (uri.host == "twitter.com") {
+ // /share and /intent/tweet: don't accept status parameter
+ val postMatcher = TWITTER_POST_PATTERN.matcher(uri.path)
+ if (postMatcher.find()) {
+ var text = uri.getQueryParameter("text") ?: ""
+ val url = uri.getQueryParameter("url")
+ if (!TextUtils.isEmpty(url))
+ text += " " + url
+ val hashtags = uri.getQueryParameter("hashtags")
+ if (!TextUtils.isEmpty(hashtags))
+ text += " " + hashtags.trim { it <= ' ' }.replace(",".toRegex(), " #")
+ val via = uri.getQueryParameter("via")
+ if (!TextUtils.isEmpty(via))
+ text += " via @" + via
+ world.postState.beginTransaction().setText(text).commitWithOpen(this)
+ return
+ }
+ val statusMatcher = TWITTER_STATUS_PATTERN.matcher(uri.path)
+ if (statusMatcher.find()) {
+ Tweet.fetchTask(java.lang.Long.parseLong(statusMatcher.group(1)), world.account)
+ .onDoneUI { tweet -> DialogHelper.showDialog(this, StatusDetailDialogFragment.newInstance(tweet)) }
+ .onFail { _ -> world.notifyError(R.string.error_intent_status_cannot_load) }
+ .execute()
+ return
+ }
+ val userMatcher = TWITTER_USER_PATTERN.matcher(uri.path)
+ if (userMatcher.find()) {
+ Users.GetTask(world.account, userMatcher.group(1))
+ .onDoneUI { user ->
+ DialogHelper.showDialog(this, UserDetailDialogFragment.newInstance(user))
+ }
+ .onFail { _ -> world.notifyError(R.string.notice_error_show_user) }
+ .execute()
+ return
+ }
+ }
+ } else when (intent.action) {
+ Intent.ACTION_SEND -> {
+ val type = intent.getStringExtra(KEY_ORIGINAL_TYPE)
+ if (type == "text/plain") {
+ val extra = intent.extras
+ if (extra != null) {
+ var text = extra.getCharSequence(Intent.EXTRA_TEXT).toString()
+ if (!TextUtils.isEmpty(extra.getCharSequence(Intent.EXTRA_SUBJECT))) {
+ text = extra.getCharSequence(Intent.EXTRA_SUBJECT).toString() + " " + text
+ }
+ world.postState.beginTransaction().setText(text).commitWithOpen(this)
+ return
+ }
+ } else if (type != null && type.startsWith("image/")) {
+ openPostPageWithImage(intent.getParcelableExtra(Intent.EXTRA_STREAM))
+ }
+ }
+ }
+ }
+
// ------------------------ OVERRIDE METHODS ------------------------
override fun onBackPressed() {
@@ -183,7 +249,7 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
setTitle()
// refresh all pages
- for (i in 0..pagerAdapter.count - 1) {
+ for (i in 0 until pagerAdapter.count) {
val pf = pagerAdapter.getCachedFragment(i)
if (pf != null && pf.isAdded) {
Logger.debug(String.format("PageFragment %s is already attached; refreshing", pf.javaClass.name))
@@ -194,7 +260,7 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
// start user stream
world.setupStreaming()
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
override fun onDestroy() {
@@ -248,6 +314,17 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
super.onResume()
Application.currentWorld = world
world.setMainActivityActive(true)
+ val intent = world.mainActivityIntent
+ if (intent != null) {
+ world.mainActivityIntent = null
+ processIntent(intent)
+ }
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ // With the current releases (~ 7) of Android, onNewIntent() doesn't seem to be called properly
+ if (false) processIntent(intent)
}
// --------------------- Interface OnPageChangeListener ---------------------
@@ -263,5 +340,11 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
companion object {
val REQUEST_GET_PICTURE_FROM_GALLERY = 11
+ val KEY_ORIGINAL_DATA = "originalData"
+ val KEY_ORIGINAL_TYPE = "originalType"
+ private val TWITTER_POST_PATTERN = Pattern.compile("\\A/(intent/tweet|share)\\z", Pattern.CASE_INSENSITIVE)
+ 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)
+
}
}