mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
Add conversation details page
This commit is contained in:
@@ -141,6 +141,12 @@
|
|||||||
android:label="@string/contact_details"
|
android:label="@string/contact_details"
|
||||||
android:parentActivityName=".activities.ThreadActivity" />
|
android:parentActivityName=".activities.ThreadActivity" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".activities.ConversationDetailsActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:label="@string/conversation_details"
|
||||||
|
android:parentActivityName=".activities.ThreadActivity" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".services.HeadlessSmsSendService"
|
android:name=".services.HeadlessSmsSendService"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
@@ -0,0 +1,87 @@
|
|||||||
|
package com.simplemobiletools.smsmessenger.activities
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.provider.ContactsContract
|
||||||
|
import androidx.core.content.res.ResourcesCompat
|
||||||
|
import com.simplemobiletools.commons.extensions.adjustAlpha
|
||||||
|
import com.simplemobiletools.commons.extensions.applyColorFilter
|
||||||
|
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||||
|
import com.simplemobiletools.commons.extensions.launchViewContactIntent
|
||||||
|
import com.simplemobiletools.commons.helpers.NavigationIcon
|
||||||
|
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.commons.models.SimpleContact
|
||||||
|
import com.simplemobiletools.smsmessenger.R
|
||||||
|
import com.simplemobiletools.smsmessenger.adapters.ContactsAdapter
|
||||||
|
import com.simplemobiletools.smsmessenger.dialogs.RenameConversationDialog
|
||||||
|
import com.simplemobiletools.smsmessenger.extensions.conversationsDB
|
||||||
|
import com.simplemobiletools.smsmessenger.extensions.getThreadParticipants
|
||||||
|
import com.simplemobiletools.smsmessenger.extensions.renameConversation
|
||||||
|
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
|
||||||
|
import com.simplemobiletools.smsmessenger.models.Conversation
|
||||||
|
import kotlinx.android.synthetic.main.activity_conversation_details.*
|
||||||
|
|
||||||
|
class ConversationDetailsActivity : SimpleActivity() {
|
||||||
|
|
||||||
|
private var threadId: Long = 0L
|
||||||
|
private var conversation: Conversation? = null
|
||||||
|
private lateinit var participants: ArrayList<SimpleContact>
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setContentView(R.layout.activity_conversation_details)
|
||||||
|
|
||||||
|
threadId = intent.getLongExtra(THREAD_ID, 0L)
|
||||||
|
ensureBackgroundThread {
|
||||||
|
conversation = conversationsDB.getConversationWithThreadId(threadId)
|
||||||
|
participants = getThreadParticipants(threadId, null)
|
||||||
|
runOnUiThread {
|
||||||
|
setupTextViews()
|
||||||
|
setupParticipants()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
setupToolbar(conversation_details_toolbar, NavigationIcon.Arrow)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupTextViews() {
|
||||||
|
val textColor = getProperTextColor()
|
||||||
|
val headingColor = textColor.adjustAlpha(0.8f)
|
||||||
|
|
||||||
|
members_heading.setTextColor(headingColor)
|
||||||
|
conversation_name_heading.setTextColor(headingColor)
|
||||||
|
conversation_name.apply {
|
||||||
|
setTextColor(textColor)
|
||||||
|
ResourcesCompat.getDrawable(resources, R.drawable.ic_edit_vector, theme)?.apply {
|
||||||
|
applyColorFilter(textColor)
|
||||||
|
setCompoundDrawablesWithIntrinsicBounds(null, null, this, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
text = conversation?.title
|
||||||
|
setOnClickListener {
|
||||||
|
RenameConversationDialog(this@ConversationDetailsActivity, conversation!!) { title ->
|
||||||
|
text = title
|
||||||
|
ensureBackgroundThread {
|
||||||
|
conversation = renameConversation(conversation!!, newTitle = title)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupParticipants() {
|
||||||
|
val adapter = ContactsAdapter(this, participants, participants_recyclerview) {
|
||||||
|
val contact = it as SimpleContact
|
||||||
|
val lookupKey = SimpleContactsHelper(this).getContactLookupKey(contact.rawId.toString())
|
||||||
|
val publicUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
||||||
|
runOnUiThread {
|
||||||
|
launchViewContactIntent(publicUri)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
participants_recyclerview.adapter = adapter
|
||||||
|
}
|
||||||
|
}
|
@@ -188,6 +188,7 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
thread_toolbar.menu.apply {
|
thread_toolbar.menu.apply {
|
||||||
findItem(R.id.delete).isVisible = threadItems.isNotEmpty()
|
findItem(R.id.delete).isVisible = threadItems.isNotEmpty()
|
||||||
findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null
|
findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null
|
||||||
|
findItem(R.id.conversation_details).isVisible = participants.size > 1 && conversation != null
|
||||||
findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number)
|
findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number)
|
||||||
findItem(R.id.block_number).isVisible = isNougatPlus()
|
findItem(R.id.block_number).isVisible = isNougatPlus()
|
||||||
findItem(R.id.dial_number).isVisible = participants.size == 1
|
findItem(R.id.dial_number).isVisible = participants.size == 1
|
||||||
@@ -210,6 +211,7 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
R.id.block_number -> tryBlocking()
|
R.id.block_number -> tryBlocking()
|
||||||
R.id.delete -> askConfirmDelete()
|
R.id.delete -> askConfirmDelete()
|
||||||
R.id.rename_conversation -> renameConversation()
|
R.id.rename_conversation -> renameConversation()
|
||||||
|
R.id.conversation_details -> showConversationDetails()
|
||||||
R.id.add_number_to_contact -> addNumberToContact()
|
R.id.add_number_to_contact -> addNumberToContact()
|
||||||
R.id.dial_number -> dialNumber()
|
R.id.dial_number -> dialNumber()
|
||||||
R.id.manage_people -> managePeople()
|
R.id.manage_people -> managePeople()
|
||||||
@@ -851,6 +853,13 @@ class ThreadActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showConversationDetails() {
|
||||||
|
Intent(this, ConversationDetailsActivity::class.java).apply {
|
||||||
|
putExtra(THREAD_ID, threadId)
|
||||||
|
startActivity(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
private fun getThreadItems(): ArrayList<ThreadItem> {
|
private fun getThreadItems(): ArrayList<ThreadItem> {
|
||||||
val items = ArrayList<ThreadItem>()
|
val items = ArrayList<ThreadItem>()
|
||||||
|
@@ -24,6 +24,7 @@ class RenameConversationDialog(
|
|||||||
val backgroundColor = activity.getProperBackgroundColor()
|
val backgroundColor = activity.getProperBackgroundColor()
|
||||||
|
|
||||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_rename_conversation, null) as ViewGroup).apply {
|
val view = (activity.layoutInflater.inflate(R.layout.dialog_rename_conversation, null) as ViewGroup).apply {
|
||||||
|
rename_conv_info.setTextColor(textColor)
|
||||||
rename_conv_input_layout.apply {
|
rename_conv_input_layout.apply {
|
||||||
setColors(textColor, primaryColor, backgroundColor)
|
setColors(textColor, primaryColor, backgroundColor)
|
||||||
setBoxCornerRadiiResources(R.dimen.medium_margin, R.dimen.medium_margin, R.dimen.medium_margin, R.dimen.medium_margin)
|
setBoxCornerRadiiResources(R.dimen.medium_margin, R.dimen.medium_margin, R.dimen.medium_margin, R.dimen.medium_margin)
|
||||||
|
84
app/src/main/res/layout/activity_conversation_details.xml
Normal file
84
app/src/main/res/layout/activity_conversation_details.xml
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:id="@+id/conversation_details_app_bar_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
android:id="@+id/conversation_details_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:title="@string/conversation_details"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/conversation_name_heading"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="@dimen/normal_margin"
|
||||||
|
android:layout_marginTop="@dimen/activity_margin"
|
||||||
|
android:text="@string/conversation_name"
|
||||||
|
android:textSize="@dimen/normal_text_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/conversation_details_app_bar_layout" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/conversation_name"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/small_margin"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:drawableEnd="@drawable/ic_edit_vector"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:focusable="true"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingHorizontal="@dimen/normal_margin"
|
||||||
|
android:paddingVertical="@dimen/normal_margin"
|
||||||
|
android:text="@string/members"
|
||||||
|
android:textSize="@dimen/big_text_size"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/conversation_name_heading" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/members_heading"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="@dimen/normal_margin"
|
||||||
|
android:layout_marginTop="@dimen/normal_margin"
|
||||||
|
android:text="@string/members"
|
||||||
|
android:textSize="@dimen/normal_text_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/conversation_name" />
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
|
android:id="@+id/participants_recyclerview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/normal_margin"
|
||||||
|
android:overScrollMode="ifContentScrolls"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/members_heading"
|
||||||
|
tools:itemCount="3"
|
||||||
|
tools:listitem="@layout/item_contact_with_number" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@@ -23,6 +23,11 @@
|
|||||||
android:icon="@drawable/ic_edit_vector"
|
android:icon="@drawable/ic_edit_vector"
|
||||||
android:title="@string/rename_conversation"
|
android:title="@string/rename_conversation"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/conversation_details"
|
||||||
|
android:icon="@drawable/ic_info_vector"
|
||||||
|
android:title="@string/conversation_details"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/add_number_to_contact"
|
android:id="@+id/add_number_to_contact"
|
||||||
android:title="@string/add_number_to_contact"
|
android:title="@string/add_number_to_contact"
|
||||||
|
Reference in New Issue
Block a user