From 5f1fe4da68a86e7aaf02c91aaf63bb3818a7eac7 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 16 Jan 2020 15:15:08 +1100 Subject: [PATCH] Clean --- .../mention_candidate_view_background.xml | 9 ++++ .../cell_mention_candidate_selection_view.xml | 51 ------------------- res/layout/conversation_activity.xml | 21 +++++++- res/layout/view_mention_candidate.xml | 42 +++++++++++++++ .../view_mention_candidate_selection.xml | 3 +- res/values/dimens.xml | 1 + .../conversation/ConversationActivity.java | 9 +++- .../views}/MentionCandidateSelectionView.kt | 13 +++-- .../views/MentionCandidateView.kt} | 31 +++++------ 9 files changed, 103 insertions(+), 77 deletions(-) create mode 100644 res/drawable/mention_candidate_view_background.xml delete mode 100644 res/layout/cell_mention_candidate_selection_view.xml create mode 100644 res/layout/view_mention_candidate.xml rename src/org/thoughtcrime/securesms/loki/{ => redesign/views}/MentionCandidateSelectionView.kt (83%) rename src/org/thoughtcrime/securesms/loki/{MentionCandidateSelectionViewCell.kt => redesign/views/MentionCandidateView.kt} (56%) diff --git a/res/drawable/mention_candidate_view_background.xml b/res/drawable/mention_candidate_view_background.xml new file mode 100644 index 0000000000..af9549d111 --- /dev/null +++ b/res/drawable/mention_candidate_view_background.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/res/layout/cell_mention_candidate_selection_view.xml b/res/layout/cell_mention_candidate_selection_view.xml deleted file mode 100644 index 3ea8ade842..0000000000 --- a/res/layout/cell_mention_candidate_selection_view.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml index 3cbe6d6a93..64525f43cf 100644 --- a/res/layout/conversation_activity.xml +++ b/res/layout/conversation_activity.xml @@ -126,7 +126,26 @@ android:clipChildren="false" android:clipToPadding="false"> - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/view_mention_candidate_selection.xml b/res/layout/view_mention_candidate_selection.xml index 152e0d95f9..d96c222d63 100644 --- a/res/layout/view_mention_candidate_selection.xml +++ b/res/layout/view_mention_candidate_selection.xml @@ -1,8 +1,7 @@ - \ No newline at end of file diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 5891ca6bcb..f8dd2e4723 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -15,6 +15,7 @@ 34dp 44dp 4dp + 26dp 36dp 46dp 76dp diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 6b29b16d59..65da3cbd7b 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -159,7 +159,7 @@ import org.thoughtcrime.securesms.loki.LokiMessageDatabase; import org.thoughtcrime.securesms.loki.LokiThreadDatabase; import org.thoughtcrime.securesms.loki.LokiThreadDatabaseDelegate; import org.thoughtcrime.securesms.loki.LokiUserDatabase; -import org.thoughtcrime.securesms.loki.MentionCandidateSelectionView; +import org.thoughtcrime.securesms.loki.redesign.views.MentionCandidateSelectionView; import org.thoughtcrime.securesms.loki.MultiDeviceUtilities; import org.thoughtcrime.securesms.loki.redesign.activities.HomeActivity; import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate; @@ -355,6 +355,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private String messageStatus = null; // Mentions + private View mentionCandidateSelectionViewContainer; private MentionCandidateSelectionView mentionCandidateSelectionView; private int currentMentionStartIndex = -1; private ArrayList mentions = new ArrayList<>(); @@ -420,6 +421,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } composeText.setSelection(composeText.length(), composeText.length()); composeText.addTextChangedListener(mentionTextWatcher); + mentionCandidateSelectionView.setGlide(glideRequests); mentionCandidateSelectionView.setOnMentionCandidateSelected( mentionCandidate -> { mentions.add(mentionCandidate); String oldText = composeText.getText().toString(); @@ -1617,6 +1619,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity inlineAttachmentToggle = ViewUtil.findById(this, R.id.inline_attachment_container); inputPanel = ViewUtil.findById(this, R.id.bottom_panel); searchNav = ViewUtil.findById(this, R.id.conversation_search_nav); + mentionCandidateSelectionViewContainer = ViewUtil.findById(this, R.id.mentionCandidateSelectionViewContainer); mentionCandidateSelectionView = ViewUtil.findById(this, R.id.userSelectionView); messageStatusProgressBar = ViewUtil.findById(this, R.id.messageStatusProgressBar); actionBarSubtitleTextView = ViewUtil.findById(this, R.id.subtitleTextView); @@ -2865,6 +2868,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity if (isBackspace) { currentMentionStartIndex = -1; mentionCandidateSelectionView.hide(); + mentionCandidateSelectionViewContainer.setVisibility(View.GONE); ArrayList mentionsToRemove = new ArrayList<>(); for (Mention mention : mentions) { if (!text.contains(mention.getDisplayName())) { @@ -2889,14 +2893,17 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity if (lastCharacter == '@' && Character.isWhitespace(secondToLastCharacter)) { List mentionCandidates = LokiAPI.Companion.getMentionCandidates("", threadId, userHexEncodedPublicKey, threadDatabase, userDatabase); currentMentionStartIndex = lastCharacterIndex; + mentionCandidateSelectionViewContainer.setVisibility(View.VISIBLE); mentionCandidateSelectionView.show(mentionCandidates, threadId); } else if (Character.isWhitespace(lastCharacter)) { currentMentionStartIndex = -1; mentionCandidateSelectionView.hide(); + mentionCandidateSelectionViewContainer.setVisibility(View.GONE); } else { if (currentMentionStartIndex != -1) { String query = text.substring(currentMentionStartIndex + 1); // + 1 to get rid of the @ List mentionCandidates = LokiAPI.Companion.getMentionCandidates(query, threadId, userHexEncodedPublicKey, threadDatabase, userDatabase); + mentionCandidateSelectionViewContainer.setVisibility(View.VISIBLE); mentionCandidateSelectionView.show(mentionCandidates, threadId); } } diff --git a/src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionView.kt b/src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateSelectionView.kt similarity index 83% rename from src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionView.kt rename to src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateSelectionView.kt index fd01cb778e..4810ff6a5b 100644 --- a/src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionView.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateSelectionView.kt @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.loki +package org.thoughtcrime.securesms.loki.redesign.views import android.content.Context import android.util.AttributeSet @@ -8,11 +8,15 @@ import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.ListView import org.thoughtcrime.securesms.database.DatabaseFactory +import org.thoughtcrime.securesms.loki.toPx +import org.thoughtcrime.securesms.mms.GlideRequests import org.whispersystems.signalservice.loki.messaging.Mention class MentionCandidateSelectionView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : ListView(context, attrs, defStyleAttr) { private var mentionCandidates = listOf() set(newValue) { field = newValue; mentionCandidateSelectionViewAdapter.mentionCandidates = newValue } + var glide: GlideRequests? = null + set(newValue) { field = newValue; mentionCandidateSelectionViewAdapter.glide = newValue } var publicChatServer: String? = null set(newValue) { field = newValue; mentionCandidateSelectionViewAdapter.publicChatServer = publicChatServer } var publicChatChannel: Long? = null @@ -24,6 +28,7 @@ class MentionCandidateSelectionView(context: Context, attrs: AttributeSet?, defS private class Adapter(private val context: Context) : BaseAdapter() { var mentionCandidates = listOf() set(newValue) { field = newValue; notifyDataSetChanged() } + var glide: GlideRequests? = null var publicChatServer: String? = null var publicChatChannel: Long? = null @@ -40,8 +45,9 @@ class MentionCandidateSelectionView(context: Context, attrs: AttributeSet?, defS } override fun getView(position: Int, cellToBeReused: View?, parent: ViewGroup): View { - val cell = cellToBeReused as MentionCandidateSelectionViewCell? ?: MentionCandidateSelectionViewCell.inflate(LayoutInflater.from(context), parent) + val cell = cellToBeReused as MentionCandidateView? ?: MentionCandidateView.inflate(LayoutInflater.from(context), parent) val mentionCandidate = getItem(position) + cell.glide = glide cell.mentionCandidate = mentionCandidate cell.publicChatServer = publicChatServer cell.publicChatChannel = publicChatChannel @@ -53,6 +59,7 @@ class MentionCandidateSelectionView(context: Context, attrs: AttributeSet?, defS constructor(context: Context) : this(context, null) init { + clipToOutline = true adapter = mentionCandidateSelectionViewAdapter mentionCandidateSelectionViewAdapter.mentionCandidates = mentionCandidates setOnItemClickListener { _, _, position, _ -> @@ -68,7 +75,7 @@ class MentionCandidateSelectionView(context: Context, attrs: AttributeSet?, defS } this.mentionCandidates = mentionCandidates val layoutParams = this.layoutParams as ViewGroup.LayoutParams - layoutParams.height = toPx(6 + Math.min(mentionCandidates.count(), 4) * 52, resources) + layoutParams.height = toPx(Math.min(mentionCandidates.count(), 4) * 44, resources) this.layoutParams = layoutParams } diff --git a/src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionViewCell.kt b/src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateView.kt similarity index 56% rename from src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionViewCell.kt rename to src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateView.kt index c8bfcc1f81..831590d61c 100644 --- a/src/org/thoughtcrime/securesms/loki/MentionCandidateSelectionViewCell.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/views/MentionCandidateView.kt @@ -1,21 +1,21 @@ -package org.thoughtcrime.securesms.loki +package org.thoughtcrime.securesms.loki.redesign.views import android.content.Context -import android.graphics.Outline import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.ViewOutlineProvider import android.widget.LinearLayout -import kotlinx.android.synthetic.main.cell_mention_candidate_selection_view.view.* +import kotlinx.android.synthetic.main.view_mention_candidate.view.* import network.loki.messenger.R +import org.thoughtcrime.securesms.mms.GlideRequests import org.whispersystems.signalservice.loki.api.LokiPublicChatAPI import org.whispersystems.signalservice.loki.messaging.Mention -class MentionCandidateSelectionViewCell(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : LinearLayout(context, attrs, defStyleAttr) { +class MentionCandidateView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : LinearLayout(context, attrs, defStyleAttr) { var mentionCandidate = Mention("", "") set(newValue) { field = newValue; update() } + var glide: GlideRequests? = null var publicChatServer: String? = null var publicChatChannel: Long? = null @@ -24,25 +24,18 @@ class MentionCandidateSelectionViewCell(context: Context, attrs: AttributeSet?, companion object { - fun inflate(layoutInflater: LayoutInflater, parent: ViewGroup): MentionCandidateSelectionViewCell { - return layoutInflater.inflate(R.layout.cell_mention_candidate_selection_view, parent, false) as MentionCandidateSelectionViewCell + fun inflate(layoutInflater: LayoutInflater, parent: ViewGroup): MentionCandidateView { + return layoutInflater.inflate(R.layout.view_mention_candidate, parent, false) as MentionCandidateView } } - override fun onFinishInflate() { - super.onFinishInflate() - profilePictureImageViewContainer.outlineProvider = object : ViewOutlineProvider() { - - override fun getOutline(view: View, outline: Outline) { - outline.setOval(0, 0, view.width, view.height) - } - } - profilePictureImageViewContainer.clipToOutline = true - } - private fun update() { displayNameTextView.text = mentionCandidate.displayName - profilePictureImageView.update(mentionCandidate.hexEncodedPublicKey) + profilePictureView.hexEncodedPublicKey = mentionCandidate.hexEncodedPublicKey + profilePictureView.additionalHexEncodedPublicKey = null + profilePictureView.isRSSFeed = false + profilePictureView.glide = glide!! + profilePictureView.update() if (publicChatServer != null && publicChatChannel != null) { val isUserModerator = LokiPublicChatAPI.isUserModerator(mentionCandidate.hexEncodedPublicKey, publicChatChannel!!, publicChatServer!!) moderatorIconImageView.visibility = if (isUserModerator) View.VISIBLE else View.GONE