diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2019-03-24 03:01:42 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2019-03-24 03:01:42 +0900 |
commit | 7a71e7f6baed6c329b2df654cdcc4cb430de66ee (patch) | |
tree | 9cefa5070233490c8962e61a640742764be4e7ef | |
parent | 73a7ab78a51b8a24f52201fa703c9076020b0be5 (diff) | |
download | SmileEssence-7a71e7f6baed6c329b2df654cdcc4cb430de66ee.tar.gz |
design tweaks
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> |