aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2019-03-24 03:01:42 +0900
committerKazuki Yamaguchi <k@rhe.jp>2019-03-24 03:01:42 +0900
commit7a71e7f6baed6c329b2df654cdcc4cb430de66ee (patch)
tree9cefa5070233490c8962e61a640742764be4e7ef
parent73a7ab78a51b8a24f52201fa703c9076020b0be5 (diff)
downloadSmileEssence-7a71e7f6baed6c329b2df654cdcc4cb430de66ee.tar.gz
design tweaks
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/User.kt6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/EmbeddedMenuLayout.kt13
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/Partials.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt27
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/ComposePageFragment.kt2
-rw-r--r--app/src/main/res/drawable/status_item_accent.xml4
-rw-r--r--app/src/main/res/drawable/status_item_accent_light.xml2
-rw-r--r--app/src/main/res/drawable/tweet_background.xml5
-rw-r--r--app/src/main/res/drawable/tweet_background_light.xml5
-rw-r--r--app/src/main/res/layout/menu_item_simple_text.xml29
-rw-r--r--app/src/main/res/values/colors.xml1
-rw-r--r--app/src/main/res/values/styles.xml4
15 files changed, 65 insertions, 43 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
index 1c4b34c1..3140ed9e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
@@ -45,13 +45,13 @@ class Tweet private constructor(
private val storage = HashMap<Long, Tweet>()
@Synchronized
- fun fetch(statusId: Long): Tweet? {
+ fun cached(statusId: Long): Tweet? {
return storage[statusId]
}
@Synchronized
fun fromTwitter(st: twitter4j.Status, myUserId: Long): Tweet {
- var t = fetch(st.id)
+ var t = cached(st.id)
if (t == null) {
val retweetedTweet = st.retweetedStatus?.let { Tweet.fromTwitter(it, myUserId) }
val entities = retweetedTweet?.entities ?: Entities.fromTwitter(st)
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 098faf56..8ea8fdc7 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/User.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/User.kt
@@ -57,13 +57,13 @@ class User private constructor(override val id: Long, screenName: String, rawPro
private val storage = HashMap<Long, User>()
@Synchronized
- fun fetch(userId: Long): User? {
+ fun cached(userId: Long): User? {
return storage[userId]
}
@Synchronized
fun fromTwitter(t4juser: twitter4j.User): User {
- var user = fetch(t4juser.id)
+ var user = cached(t4juser.id)
if (user == null) {
user = User(t4juser.id, t4juser.screenName, "<not set>")
storage[t4juser.id] = user
@@ -91,7 +91,7 @@ class User private constructor(override val id: Long, screenName: String, rawPro
@Synchronized
fun makeSkeletonForInternalUseOnly(id: Long, screenName: String, profileImageUrl: String) =
- fetch(id) ?: User(id, screenName, profileImageUrl).apply { storage[id] = this }
+ cached(id) ?: User(id, screenName, profileImageUrl).apply { storage[id] = this }
const val DEFAULT_PROFILE_IMAGE_URL =
"https://abs.twimg.com/sticky/default_profile_images/default_profile.png"
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 3cf94271..aa76eb02 100644
--- a/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/twitter/Tweets.kt
@@ -8,7 +8,7 @@ import java.io.InputStream
fun World.getTweetAsync(id: Long, fetchAlways: Boolean = true) = bg {
if (!fetchAlways) {
- Tweet.fetch(id)
+ Tweet.cached(id)
} else {
null
} ?: TwitterTaskException.wrap {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/EmbeddedMenuLayout.kt b/app/src/main/java/net/lacolaco/smileessence/view/EmbeddedMenuLayout.kt
index b0df97c9..726bc68b 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/EmbeddedMenuLayout.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/EmbeddedMenuLayout.kt
@@ -3,11 +3,11 @@ package net.lacolaco.smileessence.view
import android.annotation.TargetApi
import android.content.Context
import android.os.Build
-import androidx.appcompat.widget.AppCompatTextView
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
+import kotlinx.android.synthetic.main.menu_item_simple_text.view.*
import net.lacolaco.smileessence.R
class EmbeddedMenuLayout : LinearLayout {
@@ -23,11 +23,12 @@ class EmbeddedMenuLayout : LinearLayout {
orientation = VERTICAL
}
- fun add(name: String, cb: (View) -> Unit) {
+ fun add(name: String, title: String, cb: (View) -> Unit) {
val layoutInflater = LayoutInflater.from(context)
- val textView = layoutInflater.inflate(R.layout.menu_item_simple_text, this, false) as AppCompatTextView
- textView.text = name
- textView.setOnClickListener { cb(it) }
- addView(textView)
+ val layout = layoutInflater.inflate(R.layout.menu_item_simple_text, this, false)
+ layout.text_view_content.text = name
+ layout.text_view_title.text = title
+ layout.setOnClickListener { cb(it) }
+ addView(layout)
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
index 0853354a..6eecf81e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt
@@ -79,7 +79,7 @@ object Partials {
tweet.embeddedStatusIDs.forEachIndexed { i, id ->
val itemView = layout.getChildAt(i)
- val cached = Tweet.fetch(id)
+ val cached = Tweet.cached(id)
if (cached != null) {
getTweetView(cached, world, activity, itemView, maxRecursion - 1)
itemView.visibility = View.VISIBLE
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
index 29d273f8..733c7c9c 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.kt
@@ -21,7 +21,7 @@ class StatusDetailDialogFragment : StackableDialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val id = arguments.getLong(KEY_STATUS_ID)
- val found = Tweet.fetch(id)
+ val found = Tweet.cached(id)
if (found == null) {
world.notifyError("Tweet id=$id not found")
dismissAllowingStateLoss()
@@ -47,7 +47,7 @@ class StatusDetailDialogFragment : StackableDialogFragment() {
if (tweet.inReplyToStatusId != null) {
view.tweet_in_reply_to.visibility = View.VISIBLE
view.detail_dialog_divider_top.visibility = View.VISIBLE
- val cached = Tweet.fetch(tweet.inReplyToStatusId!!)
+ val cached = Tweet.cached(tweet.inReplyToStatusId!!)
if (cached != null)
Partials.getTweetView(cached, world, activity, view.tweet_in_reply_to)
else {
@@ -167,12 +167,8 @@ class StatusDetailDialogFragment : StackableDialogFragment() {
}
private fun setupViewMenu(view: View) {
- val users = mutableListOf<String>()
- if (tweet.user !== tweet.originalTweet.user)
- users += tweet.user.screenName
- users += tweet.entities.mentions
- for (screenName in users.distinct())
- view.embedded_menu_items.add("@$screenName") {
+ val addUserItem = { screenName: String, title: String ->
+ view.embedded_menu_items.add("@$screenName", title) {
val ref = ref(activity as MainActivity)
launchUi {
try {
@@ -183,13 +179,22 @@ class StatusDetailDialogFragment : StackableDialogFragment() {
}
}
}
+ }
+ if (tweet.user !== tweet.originalTweet.user)
+ addUserItem(tweet.user.screenName, "RT by")
+ for (screenName in tweet.entities.mentions.distinct().minus(tweet.user.screenName))
+ addUserItem(screenName, "Mention")
for (hashtag in tweet.entities.hashtags)
- view.embedded_menu_items.add("#$hashtag") {
+ view.embedded_menu_items.add("#$hashtag", "Hashtag") {
// XXX
(activity as MainActivity).openPostPageAndAppendText(" #$hashtag")
}
- for (url in tweet.entities.urlsExpanded + tweet.entities.mediaUrls)
- view.embedded_menu_items.add(url) {
+ for (url in tweet.entities.urlsExpanded)
+ view.embedded_menu_items.add(url, "URL") {
+ activity.browse(url)
+ }
+ for (url in tweet.entities.mediaUrls)
+ view.embedded_menu_items.add(url, "Media") {
activity.browse(url)
}
if (view.embedded_menu_items.childCount == 0) {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.kt
index 6692f8f9..0ae6b049 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.kt
@@ -31,7 +31,7 @@ class UserDetailDialogFragment : StackableDialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- val found = User.fetch(arguments.getLong(KEY_USER_ID))
+ val found = User.cached(arguments.getLong(KEY_USER_ID))
if (found == null) {
world.notify(R.string.notice_error_show_user)
dismiss()
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 e8e3737b..43836482 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
@@ -211,7 +211,7 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche
var selectionEnd: Int = 0
) : Parcelable {
var inReplyTo: Tweet?
- get() = if (inReplyToId != -1L) Tweet.fetch(inReplyToId) else null
+ get() = if (inReplyToId != -1L) Tweet.cached(inReplyToId) else null
set(value) {
inReplyToId = value?.id ?: -1
}
diff --git a/app/src/main/res/drawable/status_item_accent.xml b/app/src/main/res/drawable/status_item_accent.xml
index 7ebdce1b..3c0dfcbd 100644
--- a/app/src/main/res/drawable/status_item_accent.xml
+++ b/app/src/main/res/drawable/status_item_accent.xml
@@ -1,4 +1,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
- <item android:drawable="@color/app_material_amber_700" app:state_tweet_mine="true" />
+ <item android:drawable="@color/app_material_blue_500" app:state_tweet_mine="true" />
+ <item android:drawable="@color/app_material_orange_600" app:state_tweet_retweet="true" />
+ <item android:drawable="@color/app_material_deep_purple_600" app:state_tweet_mention="true" />
<item android:drawable="@color/transparent" />
</selector>
diff --git a/app/src/main/res/drawable/status_item_accent_light.xml b/app/src/main/res/drawable/status_item_accent_light.xml
index 8224cb60..d2ee4113 100644
--- a/app/src/main/res/drawable/status_item_accent_light.xml
+++ b/app/src/main/res/drawable/status_item_accent_light.xml
@@ -1,4 +1,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:drawable="@color/app_material_deep_orange_700" app:state_tweet_mine="true" />
+ <item android:drawable="@color/app_material_orange_600" app:state_tweet_retweet="true" />
+ <item android:drawable="@color/app_material_orange_50" app:state_tweet_mention="true" />
<item android:drawable="@color/transparent" />
</selector>
diff --git a/app/src/main/res/drawable/tweet_background.xml b/app/src/main/res/drawable/tweet_background.xml
deleted file mode 100644
index e68ea33a..00000000
--- a/app/src/main/res/drawable/tweet_background.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
- <item android:drawable="@color/app_material_brown_850" app:state_tweet_mention="true" />
- <item android:drawable="@color/app_material_grey_850" app:state_tweet_retweet="true" />
- <item android:drawable="@color/app_material_grey_900" />
-</selector>
diff --git a/app/src/main/res/drawable/tweet_background_light.xml b/app/src/main/res/drawable/tweet_background_light.xml
deleted file mode 100644
index 226dd36b..00000000
--- a/app/src/main/res/drawable/tweet_background_light.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
- <item android:drawable="@color/app_material_orange_50" app:state_tweet_mention="true" />
- <item android:drawable="@color/app_material_brown_50" app:state_tweet_retweet="true" />
- <item android:drawable="@color/app_material_white" />
-</selector>
diff --git a/app/src/main/res/layout/menu_item_simple_text.xml b/app/src/main/res/layout/menu_item_simple_text.xml
index e0d4d4f1..8ff0be8f 100644
--- a/app/src/main/res/layout/menu_item_simple_text.xml
+++ b/app/src/main/res/layout/menu_item_simple_text.xml
@@ -1,7 +1,28 @@
-<TextView
+<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:foreground="?android:selectableItemBackground"
- android:padding="10dp"
- android:textSize="@dimen/status_text_size" />
+ android:foreground="?android:selectableItemBackground">
+ <TextView
+ android:id="@+id/text_view_content"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_alignParentStart="true"
+ android:layout_toStartOf="@id/text_view_title"
+ android:padding="10dp"
+ android:textSize="@dimen/status_text_size"
+ tools:text="@tools:sample/lorem" />
+ <TextView
+ android:id="@+id/text_view_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="6dp"
+ android:layout_centerVertical="true"
+ android:layout_alignParentEnd="true"
+ android:background="@color/transparent_badge_background"
+ android:padding="4dp"
+ android:textSize="@dimen/status_meta_text_size"
+ tools:text="@tools:sample/lorem" />
+</RelativeLayout> \ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 1185590e..619a0cc7 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -300,5 +300,6 @@
<!-- App colors -->
<color name="transparent">#00000000</color>
+ <color name="transparent_badge_background">#22ffffff</color>
<color name="user_protected_overlay">#c0212121</color>
</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 682bdf1d..724801d5 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -7,7 +7,7 @@
<!-- Application specific styles -->
<item name="app_divider">#1fffffff</item>
- <item name="status_item_background">@drawable/tweet_background</item>
+ <item name="status_item_background">@color/app_material_grey_900</item>
<item name="status_item_header">@color/status_item_header</item>
<item name="status_item_accent">@drawable/status_item_accent</item>
</style>
@@ -19,7 +19,7 @@
<!-- Application specific styles -->
<item name="app_divider">#1f000000</item>
- <item name="status_item_background">@drawable/tweet_background_light</item>
+ <item name="status_item_background">@color/app_material_white</item>
<item name="status_item_header">@color/status_item_header_light</item>
<item name="status_item_accent">@drawable/status_item_accent_light</item>
</style>