aboutsummaryrefslogtreecommitdiffstats
path: root/app/src
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-27 19:12:16 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-27 19:12:16 +0900
commitd784297e8e245a9451b53191b7ff53243ee43f57 (patch)
tree33df57d6d4f4c2593ba66ae7b371da042c05e7d3 /app/src
parent513553c3f9b2fce7c830f499d2477d2847375f9f (diff)
downloadSmileEssence-d784297e8e245a9451b53191b7ff53243ee43f57.tar.gz
cl
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/ManageProfilesActivity.kt9
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/User.kt6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/twitter/Searches.kt21
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt67
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt29
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt38
-rw-r--r--app/src/main/res/values/strings.xml1
7 files changed, 59 insertions, 112 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/ManageProfilesActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/ManageProfilesActivity.kt
index 7b8ff567..5e6c6602 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/ManageProfilesActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/ManageProfilesActivity.kt
@@ -79,7 +79,8 @@ class ManageProfilesActivity : AppCompatActivity() {
goToWorld(Application.currentWorld!!)
}
} else {
- Toast.makeText(this, R.string.notice_error_storage_permission, Toast.LENGTH_LONG).show()
+ Toast.makeText(this, "Write access to external storage is required.",
+ Toast.LENGTH_LONG).show()
finish()
}
}
@@ -153,7 +154,8 @@ class ManageProfilesActivity : AppCompatActivity() {
profiles.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, profiles.size)
- Snackbar.make(fab, "Removed profile ${world.user.screenName}", Snackbar.LENGTH_LONG).show()
+ Snackbar.make(fab, "Removed profile ${world.user.screenName}",
+ Snackbar.LENGTH_LONG).show()
// TODO: Account.unregister(account.id)
// TODO: Stop the world
}
@@ -174,7 +176,8 @@ class ManageProfilesActivity : AppCompatActivity() {
.setIcon(icon)
.setIntent(shortcutIntent)
.build()
- ShortcutManagerCompat.requestPinShortcut(Application.instance, shortcutInfo, null)
+ ShortcutManagerCompat.requestPinShortcut(Application.instance, shortcutInfo,
+ null)
}
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/User.kt b/app/src/main/java/net/lacolaco/smileessence/entity/User.kt
index bbd52322..bb06d510 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/User.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/User.kt
@@ -65,8 +65,10 @@ class User private constructor(override val id: Long, screenName: String, rawPro
val decoratedDescription: String
get() {
var html = description
- html = html.replace("https?://[\\w/:%#$&?()~.=+-]+".toRegex(), "<a href=\"$0\">$0</a>")
- html = html.replace("@([a-zA-Z0-9_]+)".toRegex(), "<a href=\"https://twitter.com/$1\">$0</a>")
+ html = html.replace("https?://[\\w/:%#$&?()~.=+-]+".toRegex(),
+ "<a href=\"$0\">$0</a>")
+ html = html.replace("@([a-zA-Z0-9_]+)".toRegex(),
+ "<a href=\"https://twitter.com/$1\">$0</a>")
html = html.replace("\r\n".toRegex(), "<br />")
return html
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/Searches.kt b/app/src/main/java/net/lacolaco/smileessence/twitter/Searches.kt
index 071c3874..a046e47f 100644
--- a/app/src/main/java/net/lacolaco/smileessence/twitter/Searches.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/twitter/Searches.kt
@@ -7,7 +7,9 @@ import net.lacolaco.smileessence.util.bg
import twitter4j.Query
fun World.createSavedSearchAsync(query: String) = bg {
- SavedSearch.fromTwitter(TwitterTaskException.wrap { twitter.savedSearches().createSavedSearch(query) })
+ SavedSearch.fromTwitter(TwitterTaskException.wrap {
+ twitter.savedSearches().createSavedSearch(query)
+ })
}
fun World.destroySavedSearchAsync(id: Long) = bg {
@@ -15,10 +17,21 @@ fun World.destroySavedSearchAsync(id: Long) = bg {
}
fun World.getSavedSearchesAsync() = bg {
- TwitterTaskException.wrap { twitter.savedSearches().savedSearches }.map { SavedSearch.fromTwitter(it) }
+ TwitterTaskException.wrap {
+ twitter.savedSearches().savedSearches
+ }.map {
+ SavedSearch.fromTwitter(it)
+ }
}
-// XXX
-fun World.doSearch(query: Query) = bg {
+fun World.doSearch(queryString: String, sinceId: Long? = null, maxId: Long? = null) = bg {
+ val query = Query()
+ query.query = queryString
+ query.resultType = Query.RECENT
+ query.count = 200
+ if (sinceId != null)
+ query.sinceId = sinceId
+ if (maxId != null)
+ query.maxId = maxId
Tweet.fromTwitter(TwitterTaskException.wrap { twitter.search(query).tweets }, id)
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt b/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt
index 0b8b57dc..c37b1b25 100644
--- a/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt
@@ -1,19 +1,12 @@
package net.lacolaco.smileessence.twitter
-import android.graphics.Bitmap
-import android.graphics.BitmapFactory
-import android.os.Environment
-import android.text.TextUtils
import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.async
-import net.lacolaco.smileessence.Logger
import net.lacolaco.smileessence.World
import net.lacolaco.smileessence.entity.Tweet
import net.lacolaco.smileessence.util.bg
import twitter4j.StatusUpdate
import java.io.File
-import java.io.FileOutputStream
-import java.io.IOException
fun World.getTweetAsync(id: Long, fetchAlways: Boolean = true) = async(CommonPool) {
if (!fetchAlways) {
@@ -31,57 +24,11 @@ fun World.deleteTweetAsync(id: Long) = async(CommonPool) {
}, id)
}
-// XXX
-fun World.createTweetAsync(update: StatusUpdate, mediaPath: String, resizeFlag: Boolean) = bg {
- val MEDIA_SIZE_LIMIT = 5 * 1024 * 1024
-
- var tempFilePath: String? = null
- try {
- if (!TextUtils.isEmpty(mediaPath)) {
- val mediaFile by lazy compressing@ {
- val file = File(mediaPath)
- if (file.length() >= MEDIA_SIZE_LIMIT && resizeFlag) {
- val opt = BitmapFactory.Options()
- opt.inJustDecodeBounds = true
- BitmapFactory.decodeFile(mediaPath, opt)
- tempFilePath = Environment.getExternalStorageDirectory().toString() + "/temp.jpg"
- val compressedFile = File(tempFilePath)
- var fos: FileOutputStream? = null
- try {
- fos = FileOutputStream(compressedFile)
- val ratio = file.length().toFloat() / MEDIA_SIZE_LIMIT.toFloat()
- val resizeOpt = BitmapFactory.Options()
- resizeOpt.inPurgeable = true
- resizeOpt.inSampleSize = Math.ceil(ratio.toDouble()).toInt()
- val bitmap = BitmapFactory.decodeFile(mediaPath, resizeOpt)
- bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos)
- bitmap.recycle()
- return@compressing compressedFile
- } catch (e: Exception) {
- e.printStackTrace()
- Logger.error(e)
- } finally {
- try {
- if (fos != null) fos.close()
- } catch (e: IOException) {
- e.printStackTrace()
- Logger.error(e)
- }
-
- }
- }
- return@compressing file
- }
- if (mediaFile.exists()) {
- update.setMedia(mediaFile)
- }
- }
- Tweet.fromTwitter(TwitterTaskException.wrap {
- twitter.tweets().updateStatus(update)
- }, id)
- } finally {
- if (tempFilePath != null) {
- File(tempFilePath).delete()
- }
- }
+fun World.createTweetAsync(text: String, inReplyTo: Long?, mediaPath: String?) = bg {
+ val su = StatusUpdate(text)
+ if (inReplyTo != null)
+ su.inReplyToStatusId = inReplyTo
+ if (mediaPath != null)
+ su.setMedia(File(mediaPath))
+ Tweet.fromTwitter(TwitterTaskException.wrap { twitter.tweets().updateStatus(su) }, id)
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt
index 56531aa7..3fbaf027 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt
@@ -10,7 +10,6 @@ import android.provider.MediaStore
import android.support.v4.content.ContextCompat
import android.text.Editable
import android.text.Spannable
-import android.text.TextUtils
import android.text.TextWatcher
import android.text.method.ArrowKeyMovementMethod
import android.view.*
@@ -29,7 +28,6 @@ import net.lacolaco.smileessence.twitter.createTweetAsync
import net.lacolaco.smileessence.util.SystemServiceHelper
import net.lacolaco.smileessence.util.launchUi
import net.lacolaco.smileessence.view.Partials
-import twitter4j.StatusUpdate
import java.io.File
class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatcher {
@@ -97,13 +95,12 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
layout_post_reply_status.visibility = View.GONE
button_post_reply_delete.visibility = View.GONE
}
- if (TextUtils.isEmpty(postState.mediaFilePath)) {
+ if (postState.mediaFilePath == null)
post_media_parent.visibility = View.GONE
- } else {
+ else {
post_media_parent.visibility = View.VISIBLE
-
+ Glide.with(image_post_media).load(File(postState.mediaFilePath!!)).into(image_post_media)
}
- Glide.with(image_post_media).load(File(postState.mediaFilePath)).into(image_post_media)
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
@@ -118,7 +115,7 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
private fun updateTextCount(s: CharSequence) {
val validator = Validator()
var length = validator.getTweetLength(s.toString())
- if (!TextUtils.isEmpty(postState.mediaFilePath))
+ if (postState.mediaFilePath != null)
length += validator.shortUrlLength
post_text_count.text = length.toString()
@@ -148,7 +145,8 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
SystemServiceHelper.showIM(activity, post_edit_text)
}
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.page_fragment_compose, container, false)
}
@@ -171,11 +169,8 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
SystemServiceHelper.hideIM(activity, post_edit_text)
launchUi {
try {
- val su = StatusUpdate(postState.text)
- if (postState.inReplyTo != null) {
- su.inReplyToStatusId = postState.inReplyTo!!.id
- }
- world.createTweetAsync(su, postState.mediaFilePath, false).await()
+ world.createTweetAsync(postState.text, postState.inReplyTo!!.id,
+ postState.mediaFilePath).await()
world.notify(R.string.notice_tweet_succeeded)
postState.clear()
onPostStateChange()
@@ -203,14 +198,14 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
image_post_media.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW)
intent.addCategory(Intent.CATEGORY_DEFAULT)
- intent.setDataAndType(Uri.fromFile(File(postState.mediaFilePath)), "image/*")
+ intent.setDataAndType(Uri.fromFile(File(postState.mediaFilePath!!)), "image/*")
startActivity(intent)
}
button_post_media_delete.setOnClickListener {
SystemServiceHelper.hideIM(activity, post_edit_text)
post_media_parent.visibility = View.GONE
image_post_media.setImageBitmap(null)
- postState.mediaFilePath = ""
+ postState.mediaFilePath = null
onPostStateChange()
}
onPostStateChange()
@@ -234,7 +229,7 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
private class PostState(
var text: String = "",
private var inReplyToId: Long = -1,
- var mediaFilePath: String = "",
+ var mediaFilePath: String? = null,
var selectionStart: Int = 0,
var selectionEnd: Int = 0
) : Parcelable {
@@ -247,7 +242,7 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
fun clear() {
text = ""
inReplyTo = null
- mediaFilePath = ""
+ mediaFilePath = null
selectionStart = 0
selectionEnd = 0
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
index 14b89d8c..ad194225 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchPageFragment.kt
@@ -23,7 +23,6 @@ import net.lacolaco.smileessence.util.launchUi
import net.lacolaco.smileessence.view.Partials
import net.lacolaco.smileessence.view.PopupMenu
import net.lacolaco.smileessence.view.confirm
-import twitter4j.Query
import java.util.*
class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.SearchPageInfo>() {
@@ -32,7 +31,8 @@ class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.Searc
startSearch(pageInfo.query)
}
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View {
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup,
+ savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.page_fragment_search, container, false)
}
@@ -104,27 +104,18 @@ class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.Searc
}
override fun onSwipeDown(view: SwipyRefreshLayout) {
- val query = Query()
- query.query = pageInfo.query
- query.count = 200
- query.resultType = Query.RECENT
- if (adapter.sortedList.size > 0) {
- query.sinceId = adapter.sortedList[0].id
- }
- runRefreshTask(query) {
+ val sinceId = if (adapter.sortedList.size > 0) adapter.sortedList[0].id else null
+ runRefreshTask(pageInfo.query, sinceId = sinceId) {
view.isRefreshing = false
}
}
override fun onSwipeUp(view: SwipyRefreshLayout) {
- val query = Query()
- query.query = pageInfo.query
- query.count = 200
- query.resultType = Query.RECENT
- if (adapter.sortedList.size > 0) {
- query.maxId = adapter.sortedList[adapter.sortedList.size - 1].id - 1
- }
- runRefreshTask(query) {
+ val maxId = if (adapter.sortedList.size > 0)
+ adapter.sortedList[adapter.sortedList.size - 1].id - 1
+ else
+ null
+ runRefreshTask(pageInfo.query, maxId = maxId) {
view.isRefreshing = false
}
}
@@ -159,17 +150,14 @@ class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.Searc
setSwipeRefreshEnabled(queryString.isNotBlank())
adapter.sortedList.clear()
if (queryString.isNotBlank()) {
- val query = Query()
- query.query = queryString
- query.count = 200
- query.resultType = Query.RECENT
- runRefreshTask(query) { }
+ runRefreshTask(queryString) { }
}
}
- private fun runRefreshTask(query: Query, onFinish: () -> Unit) = launchUi {
+ private fun runRefreshTask(query: String, sinceId: Long? = null, maxId: Long? = null,
+ onFinish: () -> Unit) = launchUi {
try {
- val tweets = world.doSearch(query).await()
+ val tweets = world.doSearch(query, sinceId = sinceId, maxId = maxId).await()
adapter.sortedList.addAll(tweets)
onFinish()
} catch (e: TwitterTaskException) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8c4a618b..ba42b19e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -69,6 +69,5 @@
<string name="command_status_add_to_reply">Add to reply</string>
<string name="notice_error_get_user_timeline">Failed to get user timeline</string>
<string name="notice_error_get_list">Failed to get list timeline</string>
- <string name="notice_error_storage_permission">Write access to external storage is required.</string>
<string name="title_activity_page_manage">PageManageActivity</string>
</resources>