diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2019-03-26 00:17:31 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2019-03-26 00:17:31 +0900 |
commit | 12638e2e17ed84c6cc12cb836cea53d87703cd24 (patch) | |
tree | c0e41b5368b4890b5cfd1c3f01681790f4da93ea | |
parent | fedd5082d627a9f732887be26ce0a8f95eb5ca20 (diff) | |
download | SmileEssence-master.tar.gz |
10 files changed, 286 insertions, 263 deletions
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 fd73b447..b2c6a6cf 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/Partials.kt @@ -3,30 +3,37 @@ package net.lacolaco.smileessence.view import android.text.Html import android.view.LayoutInflater import android.view.View -import androidx.fragment.app.FragmentActivity import com.bumptech.glide.Glide import kotlinx.android.synthetic.main.item_status_base.view.* +import kotlinx.android.synthetic.main.list_item_tweet_rich.view.* import net.lacolaco.smileessence.R import net.lacolaco.smileessence.World import net.lacolaco.smileessence.activity.MainActivity import net.lacolaco.smileessence.entity.Tweet -import net.lacolaco.smileessence.twitter.TwitterTaskException -import net.lacolaco.smileessence.twitter.getTweetAsync -import net.lacolaco.smileessence.util.launchUi -import net.lacolaco.smileessence.util.toCompactString +import net.lacolaco.smileessence.twitter.* +import net.lacolaco.smileessence.util.* object Partials { - fun getTweetView(tweet: Tweet, world: World, activity: FragmentActivity, view: View, - maxRecursion: Int = 2): View { + fun getTweetView(tweet: Tweet, world: World, activity: MainActivity, view: View, + maxRecursion: Int = 2, defaultExpanded: Boolean = false): View { + var isExpanded = defaultExpanded + val updateExpansionVisibility = { + view.layout_status_expansion?.visibility = if (isExpanded) View.VISIBLE else View.GONE + } view.setOnClickListener { - (activity as MainActivity).addEphemeralTweetPage(tweet.id) + isExpanded = !isExpanded + updateExpansionVisibility() + } + view.setOnLongClickListener { + activity.addEphemeralTweetPage(tweet.id) + true } // Display source val user = tweet.originalTweet.user Glide.with(view).load(user.profileImageUrl).into(view.imageview_status_icon) view.imageview_status_icon.setOnClickListener { - (activity as MainActivity).addEphemeralUserPage(user.id) + activity.addEphemeralUserPage(user.id) } view.source_user_protected.visibility = if (user.isProtected) View.VISIBLE else View.INVISIBLE @@ -103,6 +110,155 @@ object Partials { } else layout.visibility = View.GONE + // Expansions + if (view.layout_status_expansion != null) { + view.button_status_detail_favorite.isActivated = world.id in tweet.favoriters + view.button_status_detail_retweet.isActivated = world.id in tweet.retweets + updateViewButtons(tweet, world, activity, view) + setupViewMenu(tweet, world, activity, view) + updateExpansionVisibility() + } + return view } + + private fun updateViewButtons(tweet: Tweet, world: World, activity: MainActivity, view: View) { + view.button_status_detail_reply.setOnClickListener { + val originalTweet = tweet.originalTweet + + val builder = StringBuilder() + builder.append("@${originalTweet.user.screenName} ") + + originalTweet.entities.mentions + .filter { it != world.user.screenName } + .forEach { builder.append("@$it ") } + val text = builder.toString() + val selStart = originalTweet.user.screenName.length + 2 // "@" and " " + + activity.openPostPageAndReplyTo(originalTweet, text) + } + view.button_status_detail_retweet.setOnClickListener { + activity.confirm(R.string.dialog_confirm_commands) { + if (world.id in tweet.retweets) { + launchUi { + try { + world.deleteTweetAsync(tweet.retweets[world.id]!!).await() + world.notify(R.string.notice_status_delete_succeeded) + updateViewButtons(tweet, world, activity, view) + } catch (e: TwitterTaskException) { + world.notifyError(R.string.notice_status_delete_failed) + } + } + } else { + launchUi { + try { + world.retweetAsync(tweet.id).await() + world.notify(R.string.notice_retweet_succeeded) + updateViewButtons(tweet, world, activity, view) + } catch (e: TwitterTaskException) { + world.notifyError(R.string.notice_retweet_failed) + } + } + } + } + } + view.button_status_detail_favorite.setOnClickListener { + val favoriting = world.id !in tweet.favoriters + + launchUi { + try { + if (favoriting) { + world.favoriteAsync(tweet.id).await() + world.notify(R.string.notice_favorite_succeeded) + } else { + world.unfavoriteAsync(tweet.id).await() + world.notify(R.string.notice_unfavorite_succeeded) + } + } catch (e: TwitterTaskException) { + if (favoriting) + world.notifyError(R.string.notice_favorite_failed) + else + world.notifyError(R.string.notice_unfavorite_failed) + } + } + } + if (tweet.originalTweet.user === world.user) + view.button_status_detail_delete.visibility = View.VISIBLE + else + view.button_status_detail_delete.visibility = View.GONE + view.button_status_detail_delete.setOnClickListener { + activity.confirm(R.string.dialog_confirm_commands) { + launchBg { + try { + world.deleteTweetAsync(tweet.originalTweet.id).await() + world.notify(R.string.notice_status_delete_succeeded) + } catch (e: TwitterTaskException) { + world.notifyError(R.string.notice_status_delete_failed) + } + } + activity.closeCurrentEphemeralPage() + } + } + view.button_status_detail_menu.setOnClickListener { + val popup = PopupMenu(activity, view.button_status_detail_menu) + popup.add(R.string.command_status_add_to_reply) { + val text = String.format("@%s ", tweet.originalTweet.user.screenName) + activity.openPostPageAndAppendText(text) + world.notify(R.string.notice_add_to_reply) + } + popup.add(R.string.command_status_open_in_browser) { + activity.browse("https://twitter.com/${tweet.originalTweet.user.screenName}/status/${tweet.originalTweet.id}") + } + popup.add(R.string.command_status_copy_text_to_clipboard) { + SystemServiceHelper.copyToClipboard(activity, "tweet text", tweet.originalTweet.text) + world.notify(R.string.notice_copy_clipboard) + } + popup.add(R.string.command_status_copy_url_to_clipboard) { + SystemServiceHelper.copyToClipboard(activity, "tweet url", "https://twitter.com/${tweet.originalTweet.user.screenName}/status/${tweet.originalTweet.id}") + world.notify(R.string.notice_copy_clipboard) + } + popup.show() + } + } + + private fun setupViewMenu(tweet: Tweet, world: World, activity: MainActivity, view: View) { + view.embedded_menu_items.removeAllViews() + val addUserItem = { screenName: String, title: String -> + view.embedded_menu_items.add("@$screenName", title) { + val ref = ref(activity) + launchUi { + try { + val user = world.getUserAsync(screenName).await() + ref.get().addEphemeralUserPage(user.id) + } catch (e: TwitterTaskException) { + world.notifyError(R.string.notice_error_show_user) + } + } + } + } + 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", "Hashtag") { + // XXX + activity.openPostPageAndAppendText(" #$hashtag") + } + 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) { + view.detail_dialog_divider_bottom.visibility = View.VISIBLE + view.embedded_menu_items.visibility = View.VISIBLE + } else { + view.detail_dialog_divider_bottom.visibility = View.GONE + view.embedded_menu_items.visibility = View.GONE + } + } } 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 417e6174..81ffda73 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 @@ -88,7 +88,7 @@ class ComposePageFragment : PageFragment<PageInfo.ComposePageInfo>(), TextWatche if (postState.inReplyTo != null) { layout_post_reply_status.visibility = View.VISIBLE button_post_reply_delete.visibility = View.VISIBLE - val header = Partials.getTweetView(postState.inReplyTo!!, world, activity!!, + val header = Partials.getTweetView(postState.inReplyTo!!, world, mainActivity, layout_post_reply_status) header.isClickable = false } else { diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt index 9b7b1708..6c282c5a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/page/ListPageFragment.kt @@ -67,12 +67,12 @@ class ListPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.ListPag } override fun onBindItemView(item: Tweet, itemView: View) { - Partials.getTweetView(item, world, activity!!, itemView) + Partials.getTweetView(item, world, mainActivity, itemView) } override fun onCreateItemView(parent: ViewGroup): View { val layoutInflater = LayoutInflater.from(parent.context) - return layoutInflater.inflate(R.layout.list_item_tweet, parent, false) + return layoutInflater.inflate(R.layout.list_item_tweet_rich, parent, false) } private fun runRefreshTask(task: Deferred<List<Tweet>>, onFinish: () -> Unit) = launchUi { diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/PageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/PageFragment.kt index 49ffad87..37bbfd4a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/page/PageFragment.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/page/PageFragment.kt @@ -20,7 +20,7 @@ abstract class PageFragment<out T : PageInfo> : Fragment() { world.getPageById(uid) as T } - val mainActivity + protected val mainActivity get() = super.getActivity() as MainActivity // Invoked when user click the refresh button. 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 32b9a2aa..5a61db51 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 @@ -125,12 +125,12 @@ class SearchPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.Searc } override fun onBindItemView(item: Tweet, itemView: View) { - Partials.getTweetView(item, world, activity!!, itemView) + Partials.getTweetView(item, world, mainActivity, itemView) } override fun onCreateItemView(parent: ViewGroup): View { val layoutInflater = LayoutInflater.from(parent.context) - return layoutInflater.inflate(R.layout.list_item_tweet, parent, false) + return layoutInflater.inflate(R.layout.list_item_tweet_rich, parent, false) } private fun saveQuery() = launchUi { diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetPageFragment.kt index cbe8ea80..f748f68b 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetPageFragment.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetPageFragment.kt @@ -6,14 +6,11 @@ import android.view.View import android.view.ViewGroup import kotlinx.android.synthetic.main.page_fragment_tweet.view.* import net.lacolaco.smileessence.R -import net.lacolaco.smileessence.activity.MainActivity import net.lacolaco.smileessence.data.PageInfo import net.lacolaco.smileessence.entity.Tweet import net.lacolaco.smileessence.twitter.* import net.lacolaco.smileessence.util.* import net.lacolaco.smileessence.view.Partials -import net.lacolaco.smileessence.view.PopupMenu -import net.lacolaco.smileessence.view.confirm class TweetPageFragment : PageFragment<PageInfo.TweetPageInfo>() { private lateinit var tweet: Tweet @@ -36,27 +33,22 @@ class TweetPageFragment : PageFragment<PageInfo.TweetPageInfo>() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val statusHeader = Partials.getTweetView(tweet, world, activity!!, view.detail_current_status) + val statusHeader = Partials.getTweetView(tweet, world, mainActivity, view.detail_current_status, + defaultExpanded = true) statusHeader.isClickable = false - // XXX - view.button_status_detail_favorite.isActivated = world.id in tweet.favoriters - view.button_status_detail_retweet.isActivated = world.id in tweet.retweets - updateViewButtons(view) - setupViewMenu(view) - if (tweet.inReplyToStatusId != null) { view.tweet_in_reply_to.visibility = View.VISIBLE view.detail_dialog_divider_top.visibility = View.VISIBLE val cached = Tweet.cached(tweet.inReplyToStatusId!!) if (cached != null) - Partials.getTweetView(cached, world, activity!!, view.tweet_in_reply_to) + Partials.getTweetView(cached, world, mainActivity, view.tweet_in_reply_to) else { - Partials.getTweetView(Tweet.placeHolder, world, activity!!, view.tweet_in_reply_to) + Partials.getTweetView(Tweet.placeHolder, world, mainActivity, view.tweet_in_reply_to) launchUi { try { val tweet = world.getTweetAsync(tweet.inReplyToStatusId!!, false).await() - Partials.getTweetView(tweet, world, activity!!, view.tweet_in_reply_to) + Partials.getTweetView(tweet, world, mainActivity, view.tweet_in_reply_to) } catch (e: TwitterTaskException) { } } @@ -66,140 +58,4 @@ class TweetPageFragment : PageFragment<PageInfo.TweetPageInfo>() { view.detail_dialog_divider_top.visibility = View.GONE } } - - private fun updateViewButtons(view: View) { - view.button_status_detail_reply.setOnClickListener { - val originalTweet = tweet.originalTweet - - val builder = StringBuilder() - builder.append("@${originalTweet.user.screenName} ") - - originalTweet.entities.mentions - .filter { it != world.user.screenName } - .forEach { builder.append("@$it ") } - val text = builder.toString() - val selStart = originalTweet.user.screenName.length + 2 // "@" and " " - - (activity as MainActivity).openPostPageAndReplyTo(originalTweet, text) - } - view.button_status_detail_retweet.setOnClickListener { - confirm(R.string.dialog_confirm_commands) { - if (world.id in tweet.retweets) { - launchUi { - try { - world.deleteTweetAsync(tweet.retweets[world.id]!!).await() - world.notify(R.string.notice_status_delete_succeeded) - updateViewButtons(view) - } catch (e: TwitterTaskException) { - world.notifyError(R.string.notice_status_delete_failed) - } - } - } else { - launchUi { - try { - world.retweetAsync(tweet.id).await() - world.notify(R.string.notice_retweet_succeeded) - updateViewButtons(view) - } catch (e: TwitterTaskException) { - world.notifyError(R.string.notice_retweet_failed) - } - } - } - } - } - view.button_status_detail_favorite.setOnClickListener { - val favoriting = world.id !in tweet.favoriters - - launchUi { - try { - if (favoriting) { - world.favoriteAsync(tweet.id).await() - world.notify(R.string.notice_favorite_succeeded) - } else { - world.unfavoriteAsync(tweet.id).await() - world.notify(R.string.notice_unfavorite_succeeded) - } - } catch (e: TwitterTaskException) { - if (favoriting) - world.notifyError(R.string.notice_favorite_failed) - else - world.notifyError(R.string.notice_unfavorite_failed) - } - } - } - if (tweet.originalTweet.user === world.user) - view.button_status_detail_delete.visibility = View.VISIBLE - else - view.button_status_detail_delete.visibility = View.GONE - view.button_status_detail_delete.setOnClickListener { - confirm(R.string.dialog_confirm_commands) { - launchBg { - try { - world.deleteTweetAsync(tweet.originalTweet.id).await() - world.notify(R.string.notice_status_delete_succeeded) - } catch (e: TwitterTaskException) { - world.notifyError(R.string.notice_status_delete_failed) - } - } - (activity as MainActivity).closeCurrentEphemeralPage() - } - } - view.button_status_detail_menu.setOnClickListener { - val popup = PopupMenu(activity!!, view.button_status_detail_menu) - popup.add(R.string.command_status_add_to_reply) { - val text = String.format("@%s ", tweet.originalTweet.user.screenName) - (activity as MainActivity).openPostPageAndAppendText(text) - world.notify(R.string.notice_add_to_reply) - } - popup.add(R.string.command_status_open_in_browser) { - browse("https://twitter.com/${tweet.originalTweet.user.screenName}/status/${tweet.originalTweet.id}") - } - popup.add(R.string.command_status_copy_text_to_clipboard) { - SystemServiceHelper.copyToClipboard(activity!!, "tweet text", tweet.originalTweet.text) - world.notify(R.string.notice_copy_clipboard) - } - popup.add(R.string.command_status_copy_url_to_clipboard) { - SystemServiceHelper.copyToClipboard(activity!!, "tweet url", "https://twitter.com/${tweet.originalTweet.user.screenName}/status/${tweet.originalTweet.id}") - world.notify(R.string.notice_copy_clipboard) - } - popup.show() - } - } - - private fun setupViewMenu(view: View) { - val addUserItem = { screenName: String, title: String -> - view.embedded_menu_items.add("@$screenName", title) { - val ref = ref(activity as MainActivity) - launchUi { - try { - val user = world.getUserAsync(screenName).await() - (activity as MainActivity).addEphemeralUserPage(user.id) - } catch (e: TwitterTaskException) { - world.notifyError(R.string.notice_error_show_user) - } - } - } - } - 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", "Hashtag") { - // XXX - (activity as MainActivity).openPostPageAndAppendText(" #$hashtag") - } - 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) { - view.detail_dialog_divider_bottom.visibility = View.GONE - view.embedded_menu_items.visibility = View.GONE - } - } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt index f2ad1998..f9a58ca0 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/page/TweetsPageFragment.kt @@ -26,11 +26,11 @@ class TweetsPageFragment : TimelinePageFragment<Tweet, PageInfo.TweetsPageInfo>( } override fun onBindItemView(item: Tweet, itemView: View) { - Partials.getTweetView(item, world, activity!!, itemView) + Partials.getTweetView(item, world, mainActivity, itemView) } override fun onCreateItemView(parent: ViewGroup): View { val layoutInflater = LayoutInflater.from(parent.context) - return layoutInflater.inflate(R.layout.list_item_tweet, parent, false) + return layoutInflater.inflate(R.layout.list_item_tweet_rich, parent, false) } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/UserPageFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/page/UserPageFragment.kt index f417aeb8..703ca9b3 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/page/UserPageFragment.kt +++ b/app/src/main/java/net/lacolaco/smileessence/view/page/UserPageFragment.kt @@ -221,11 +221,11 @@ class UserPageFragment : RefreshableTimelinePageFragment<Tweet, PageInfo.UserPag } override fun onBindItemView(item: Tweet, itemView: View) { - Partials.getTweetView(item, world, activity!!, itemView) + Partials.getTweetView(item, world, mainActivity, itemView) } override fun onCreateItemView(parent: ViewGroup): View { val layoutInflater = LayoutInflater.from(parent.context) - return layoutInflater.inflate(R.layout.list_item_tweet, parent, false) + return layoutInflater.inflate(R.layout.list_item_tweet_rich, parent, false) } } diff --git a/app/src/main/res/layout/list_item_tweet_rich.xml b/app/src/main/res/layout/list_item_tweet_rich.xml new file mode 100644 index 00000000..0aa8dcc8 --- /dev/null +++ b/app/src/main/res/layout/list_item_tweet_rich.xml @@ -0,0 +1,104 @@ +<net.lacolaco.smileessence.view.TweetStateFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?status_item_background" + android:descendantFocusability="blocksDescendants" + android:foreground="?attr/selectableItemBackground"> + + <FrameLayout + android:layout_width="2dp" + android:layout_height="match_parent" + android:background="?status_item_accent" + android:duplicateParentState="true" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:duplicateParentState="true" + android:orientation="vertical"> + + <include + android:id="@+id/layout_status_header" + layout="@layout/item_status_base" /> + + <LinearLayout + android:id="@+id/layout_status_expansion" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="end"> + + <ImageButton + android:id="@+id/button_status_detail_reply" + android:layout_width="32dp" + android:layout_height="32dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="8dp" + android:background="?selectableItemBackgroundBorderless" + app:srcCompat="@drawable/ic_reply_all_black_24dp" + android:tint="?android:textColorSecondary" /> + + <ImageButton + android:id="@+id/button_status_detail_retweet" + android:layout_width="32dp" + android:layout_height="32dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="8dp" + android:background="?selectableItemBackgroundBorderless" + app:srcCompat="@drawable/ic_repeat_black_24dp" + android:tint="@color/green_activatable" /> + + <ImageButton + android:id="@+id/button_status_detail_favorite" + android:layout_width="32dp" + android:layout_height="32dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="8dp" + android:background="?selectableItemBackgroundBorderless" + app:srcCompat="@drawable/ic_star_black_24dp" + android:tint="@color/orange_activatable" /> + + <ImageButton + android:id="@+id/button_status_detail_delete" + android:layout_width="32dp" + android:layout_height="32dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="8dp" + android:background="?selectableItemBackgroundBorderless" + app:srcCompat="@drawable/ic_delete_forever_black_24dp" + android:tint="?android:textColorSecondary" /> + + <ImageButton + android:id="@+id/button_status_detail_menu" + android:layout_width="32dp" + android:layout_height="32dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:layout_marginTop="8dp" + android:background="?selectableItemBackgroundBorderless" + app:srcCompat="@drawable/ic_more_vert_black_24dp" + android:tint="?android:textColorSecondary" /> + </LinearLayout> + + <FrameLayout + android:id="@+id/detail_dialog_divider_bottom" + android:layout_width="match_parent" + android:layout_height="1dp" + android:background="?app_divider" /> + + <net.lacolaco.smileessence.view.EmbeddedMenuLayout + android:id="@+id/embedded_menu_items" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </LinearLayout> + </LinearLayout> +</net.lacolaco.smileessence.view.TweetStateFrameLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/page_fragment_tweet.xml b/app/src/main/res/layout/page_fragment_tweet.xml index 41fcac1f..7038f263 100644 --- a/app/src/main/res/layout/page_fragment_tweet.xml +++ b/app/src/main/res/layout/page_fragment_tweet.xml @@ -1,5 +1,4 @@ <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> @@ -20,100 +19,8 @@ android:layout_height="1dp" android:background="?app_divider" /> - <net.lacolaco.smileessence.view.TweetStateFrameLayout + <include android:id="@+id/detail_current_status" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?status_item_background"> - - <FrameLayout - android:layout_width="2dp" - android:layout_height="match_parent" - android:background="?status_item_accent" - android:duplicateParentState="true" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:duplicateParentState="true" - android:orientation="vertical"> - - <include - android:id="@+id/layout_status_header" - layout="@layout/item_status_base" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="end"> - - <ImageButton - android:id="@+id/button_status_detail_reply" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:background="?selectableItemBackgroundBorderless" - app:srcCompat="@drawable/ic_reply_all_black_24dp" - android:tint="?android:textColorSecondary" /> - - <ImageButton - android:id="@+id/button_status_detail_retweet" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:background="?selectableItemBackgroundBorderless" - app:srcCompat="@drawable/ic_repeat_black_24dp" - android:tint="@color/green_activatable" /> - - <ImageButton - android:id="@+id/button_status_detail_favorite" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:background="?selectableItemBackgroundBorderless" - app:srcCompat="@drawable/ic_star_black_24dp" - android:tint="@color/orange_activatable" /> - - <ImageButton - android:id="@+id/button_status_detail_delete" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:background="?selectableItemBackgroundBorderless" - app:srcCompat="@drawable/ic_delete_forever_black_24dp" - android:tint="?android:textColorSecondary" /> - - <ImageButton - android:id="@+id/button_status_detail_menu" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginBottom="8dp" - android:layout_marginEnd="8dp" - android:layout_marginTop="8dp" - android:background="?selectableItemBackgroundBorderless" - app:srcCompat="@drawable/ic_more_vert_black_24dp" - android:tint="?android:textColorSecondary" /> - </LinearLayout> - - <FrameLayout - android:id="@+id/detail_dialog_divider_bottom" - android:layout_width="match_parent" - android:layout_height="1dp" - android:background="?app_divider" /> - - <net.lacolaco.smileessence.view.EmbeddedMenuLayout - android:id="@+id/embedded_menu_items" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - </LinearLayout> - </net.lacolaco.smileessence.view.TweetStateFrameLayout> + layout="@layout/list_item_tweet_rich" /> </LinearLayout> </ScrollView> |