Browse Source

Merge pull request #66 from N1CK145/chat

Chat
chat v0.6.0-beta0
Duke Leto 4 years ago
committed by GitHub
parent
commit
9195d17536
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 44
      app/src/main/java/org/myhush/silentdragon/Addressbook.kt
  2. 2
      app/src/main/java/org/myhush/silentdragon/DataModel.kt
  3. 89
      app/src/main/java/org/myhush/silentdragon/MainActivity.kt
  4. 2
      app/src/main/java/org/myhush/silentdragon/SendActivity.kt
  5. 4
      app/src/main/java/org/myhush/silentdragon/chat/AddContactActivity.kt
  6. 27
      app/src/main/java/org/myhush/silentdragon/chat/Addressbook.kt
  7. 19
      app/src/main/java/org/myhush/silentdragon/chat/ChatActivity.kt
  8. 4
      app/src/main/java/org/myhush/silentdragon/chat/ChatItemFragment.kt
  9. 28
      app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt
  10. 4
      app/src/main/java/org/myhush/silentdragon/chat/Message.kt
  11. 3
      app/src/main/java/org/myhush/silentdragon/conversation_item_recive.kt
  12. 3
      app/src/main/java/org/myhush/silentdragon/conversation_item_send.kt
  13. 17
      app/src/main/res/layout/activity_conversation.xml
  14. 1
      app/src/main/res/layout/fragment_chat_item.xml
  15. 2
      app/src/main/res/layout/fragment_conversation_item_recive.xml

44
app/src/main/java/org/myhush/silentdragon/Addressbook.kt

@ -0,0 +1,44 @@
package org.myhush.silentdragon
import org.myhush.silentdragon.chat.Message
object Addressbook {
class Contact {
var nickname = ""
var addressIn = ""
var addressOut = ""
val messageList = ArrayList<Message>()
constructor(nickname: String, addressIn: String, addressOut: String) {
this.nickname = nickname
this.addressIn = addressIn
this.addressOut = addressOut
}
}
val contactList = ArrayList<Contact>()
fun addContact(nickname: String, addressIn: String, addressOut: String) {
contactList.add(Contact(nickname, addressIn, addressOut))
}
fun findContactByInAddress(address: String): Contact? {
contactList.forEach {
if(it.addressIn == address)
return it
}
return null
}
fun findContactByOutAddress(address: String): Contact? {
contactList.forEach {
if (it.addressOut == address)
return it
}
return null
}
fun clear() {
contactList.clear()
}
}

2
app/src/main/java/org/myhush/silentdragon/DataModel.kt

@ -10,6 +10,7 @@ import com.beust.klaxon.json
import okhttp3.WebSocket import okhttp3.WebSocket
import org.libsodium.jni.NaCl import org.libsodium.jni.NaCl
import org.libsodium.jni.Sodium import org.libsodium.jni.Sodium
import org.myhush.silentdragon.chat.Message
import java.math.BigInteger import java.math.BigInteger
object DataModel { object DataModel {
@ -20,6 +21,7 @@ object DataModel {
class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String?, class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String?,
val addr: String, val txid: String?, val confirmations: Long) val addr: String, val txid: String?, val confirmations: Long)
var mainResponseData : MainResponse? = null var mainResponseData : MainResponse? = null
var transactions : List<TransactionItem>? = null var transactions : List<TransactionItem>? = null

89
app/src/main/java/org/myhush/silentdragon/MainActivity.kt

@ -25,6 +25,8 @@ import kotlinx.android.synthetic.main.content_main.*
import org.myhush.silentdragon.DataModel.ConnectionStatus import org.myhush.silentdragon.DataModel.ConnectionStatus
import org.myhush.silentdragon.DataModel.connStatus import org.myhush.silentdragon.DataModel.connStatus
import org.myhush.silentdragon.chat.ChatActivity import org.myhush.silentdragon.chat.ChatActivity
import org.myhush.silentdragon.chat.Message
import org.myhush.silentdragon.chat.MessageType
import java.text.DecimalFormat import java.text.DecimalFormat
@ -75,10 +77,10 @@ class MainActivity : AppCompatActivity(),
if(DataModel.selectedCurrency == "BTC") if(DataModel.selectedCurrency == "BTC")
Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat(" #,##0.00000000") Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat(" #,##0.00000000")
.format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show() .format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show()
else( else
Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat("#,##0.00") Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat("#,##0.00")
.format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show() .format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show()
)
} }
bottomNav.setOnNavigationItemSelectedListener { bottomNav.setOnNavigationItemSelectedListener {
@ -108,6 +110,18 @@ class MainActivity : AppCompatActivity(),
loadSharedPref() loadSharedPref()
updateUI(false) updateUI(false)
/*///////////////////////////
// CREATE SAMPLE CONTACTS //
Addressbook.clear()
Addressbook.addContact("", "N1CK145", "zN1CK145")
Addressbook.addContact("", "Denio", "zDenio")
Addressbook.addContact("", "Max Mustermann", "zMaxMust")
// //
/////////////////////////// */
} }
private fun loadSharedPref() { private fun loadSharedPref() {
@ -214,6 +228,11 @@ class MainActivity : AppCompatActivity(),
runOnUiThread { runOnUiThread {
val fragTx = supportFragmentManager.beginTransaction() val fragTx = supportFragmentManager.beginTransaction()
// clear past messages
txns?.forEach {
Addressbook.findContactByInAddress(it.addr)?.messageList?.clear()
}
for (fr in supportFragmentManager.fragments) { for (fr in supportFragmentManager.fragments) {
fragTx.remove(fr) fragTx.remove(fr)
} }
@ -226,19 +245,37 @@ class MainActivity : AppCompatActivity(),
return@runOnUiThread return@runOnUiThread
} }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
val fixAdd= "zs12ehfu3pzj23z88up5wefn2psl5akc3m3ctpnmxmyxm4qx3vghlnq98dnu7sv0hdqgn3e20jq2rr"
val fixName = "Netterdon"
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Split all the transactions into confirmations = 0 and confirmations > 0 // Split all the transactions into confirmations = 0 and confirmations > 0
// Unconfirmed first // Unconfirmed first
val unconfirmed = txns.filter { t -> t.confirmations == 0L } val unconfirmed = txns.filter { t -> t.confirmations == 0L }
if (unconfirmed.isNotEmpty()) { if (unconfirmed.isNotEmpty()) {
for (tx in unconfirmed) { for (tx in unconfirmed) {
fragTx.add( if(tx.memo?.length == 0){
txList.id , fragTx.add(
UnconfirmedTxItemFragment.newInstance( txList.id ,
Klaxon().toJsonString(tx), UnconfirmedTxItemFragment.newInstance(
"" Klaxon().toJsonString(tx),
), ""
"tag1" ),
) "tag1"
)
} else {
// test if contact exists
if(Addressbook.findContactByInAddress(tx.addr) == null)
Addressbook.addContact(fixName, tx.addr, fixAdd)
// add message
if(tx.type == "send")
Addressbook.findContactByInAddress(tx.addr)!!.messageList.add(Message(tx.addr, tx, MessageType.SEND))
else
Addressbook.findContactByInAddress(tx.addr)!!.messageList.add(Message(tx.addr, tx, MessageType.RECIEVE))
}
} }
} }
@ -247,15 +284,27 @@ class MainActivity : AppCompatActivity(),
if (confirmed.isNotEmpty()) { if (confirmed.isNotEmpty()) {
var oddeven = "odd" var oddeven = "odd"
for (tx in confirmed) { for (tx in confirmed) {
fragTx.add( if(tx.memo?.length == 0){
txList.id, fragTx.add(
TransactionItemFragment.newInstance( txList.id,
Klaxon().toJsonString(tx), TransactionItemFragment.newInstance(
oddeven Klaxon().toJsonString(tx),
), oddeven
"tag1" ),
) "tag1"
oddeven = if (oddeven == "odd") "even" else "odd" )
oddeven = if (oddeven == "odd") "even" else "odd"
} else {
// test if contact exists
if(Addressbook.findContactByInAddress(tx.addr) == null)
Addressbook.addContact(fixName, tx.addr, fixAdd)
// add message
if(tx.type == "send")
Addressbook.findContactByInAddress(tx.addr)!!.messageList.add(Message(tx.addr, tx, MessageType.SEND))
else
Addressbook.findContactByInAddress(tx.addr)!!.messageList.add(Message(tx.addr, tx, MessageType.RECIEVE))
}
} }
} }
fragTx.commitAllowingStateLoss() fragTx.commitAllowingStateLoss()

2
app/src/main/java/org/myhush/silentdragon/SendActivity.kt

@ -67,9 +67,7 @@ class SendActivity : AppCompatActivity() {
if (DataModel.selectedCurrency == "BTC") if (DataModel.selectedCurrency == "BTC")
amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00000000").format(0) amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00000000").format(0)
else else
{
amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00").format(0) amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00").format(0)
}
textViewFee.text = DecimalFormat("0.0000").format(0.0001) + " HUSH" textViewFee.text = DecimalFormat("0.0000").format(0.0001) + " HUSH"

4
app/src/main/java/org/myhush/silentdragon/chat/AddContactActivity.kt

@ -4,6 +4,7 @@ import android.app.AlertDialog
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import kotlinx.android.synthetic.main.activity_add_contact.* import kotlinx.android.synthetic.main.activity_add_contact.*
import org.myhush.silentdragon.Addressbook
import org.myhush.silentdragon.R import org.myhush.silentdragon.R
class AddContactActivity : AppCompatActivity() { class AddContactActivity : AppCompatActivity() {
@ -18,7 +19,8 @@ class AddContactActivity : AppCompatActivity() {
var fullname = editText_FullName.text.toString() var fullname = editText_FullName.text.toString()
var zAddr = editTextZAddress.text.toString() var zAddr = editTextZAddress.text.toString()
Addressbook.contactList.add(Addressbook.Contact(fullname, nickName, zAddr)) Addressbook.addContact(fullname, nickName, zAddr)
this.finish() this.finish()
} }
} }

27
app/src/main/java/org/myhush/silentdragon/chat/Addressbook.kt

@ -1,27 +0,0 @@
package org.myhush.silentdragon.chat
object Addressbook {
class Contact {
var addressList: ArrayList<String> = ArrayList()
val messageList: ArrayList<Message> = ArrayList()
var fullname = ""
var nickname = ""
constructor(fullname: String, nickname: String){
this.fullname = fullname
this.nickname = nickname
}
constructor(fullname: String, nickname: String, address: String){
this.fullname = fullname
this.nickname = nickname
this.addressList.add(address)
}
constructor(fullname: String, nickname: String, addressList: ArrayList<String>){
this.fullname = fullname
this.nickname = nickname
this.addressList = addressList
}
}
val contactList = ArrayList<Contact>()
}

19
app/src/main/java/org/myhush/silentdragon/chat/ChatActivity.kt

@ -6,11 +6,8 @@ import android.support.v4.app.FragmentTransaction
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TableLayout
import kotlinx.android.synthetic.main.activity_chat.* import kotlinx.android.synthetic.main.activity_chat.*
import kotlinx.android.synthetic.main.content_chat_list.view.*
import org.myhush.silentdragon.* import org.myhush.silentdragon.*
class ChatActivity : AppCompatActivity() { class ChatActivity : AppCompatActivity() {
@ -19,7 +16,7 @@ class ChatActivity : AppCompatActivity() {
setContentView(R.layout.activity_chat) setContentView(R.layout.activity_chat)
initListener() initListener()
restoreLastChats() refresh()
swiperefreshChat.setOnRefreshListener { swiperefreshChat.setOnRefreshListener {
refresh() refresh()
@ -27,15 +24,6 @@ class ChatActivity : AppCompatActivity() {
} }
} }
private fun restoreLastChats() {
DataModel.transactions?.forEach { tx ->
if (!tx.memo.isNullOrEmpty()){
// ADD CHAT BY ADDRESS
}
}
refresh()
}
private fun initListener(){ private fun initListener(){
nav_view.setOnNavigationItemSelectedListener { nav_view.setOnNavigationItemSelectedListener {
when(it.itemId) { when(it.itemId) {
@ -62,7 +50,7 @@ class ChatActivity : AppCompatActivity() {
} }
} }
fun refresh(){ private fun refresh(){
findViewById<LinearLayout>(R.id.ChatTable).removeAllViews() findViewById<LinearLayout>(R.id.ChatTable).removeAllViews()
Addressbook.contactList.forEach { Addressbook.contactList.forEach {
@ -74,9 +62,8 @@ class ChatActivity : AppCompatActivity() {
val fragment = ChatItemFragment() val fragment = ChatItemFragment()
val fragTx: FragmentTransaction = supportFragmentManager.beginTransaction() val fragTx: FragmentTransaction = supportFragmentManager.beginTransaction()
fragment.fullname = contact.fullname
fragment.nickname = contact.nickname fragment.nickname = contact.nickname
fragment.lastMessage = contact.addressList[0] fragment.contactAddress = contact.addressIn
fragTx.add(R.id.ChatTable, fragment) fragTx.add(R.id.ChatTable, fragment)
fragTx.commit() fragTx.commit()

4
app/src/main/java/org/myhush/silentdragon/chat/ChatItemFragment.kt

@ -7,12 +7,13 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import kotlinx.android.synthetic.main.content_receive.*
import org.myhush.silentdragon.R import org.myhush.silentdragon.R
class ChatItemFragment : Fragment() { class ChatItemFragment : Fragment() {
var fullname: String = ""
var nickname: String = "" var nickname: String = ""
var lastMessage: String = "" var lastMessage: String = ""
var contactAddress: String = ""
var v: View? = null var v: View? = null
override fun onCreateView (inflater: LayoutInflater, container: ViewGroup?, override fun onCreateView (inflater: LayoutInflater, container: ViewGroup?,
@ -30,6 +31,7 @@ class ChatItemFragment : Fragment() {
val intent = Intent(activity, ConversationActivity::class.java) val intent = Intent(activity, ConversationActivity::class.java)
intent.putExtra("displayName", nickname) // Send some information intent.putExtra("displayName", nickname) // Send some information
intent.putExtra("contactAddress", contactAddress)
startActivity(intent) startActivity(intent)
} }

28
app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt

@ -1,15 +1,13 @@
package org.myhush.silentdragon.chat package org.myhush.silentdragon.chat
import android.content.Intent
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.FragmentTransaction import android.support.v4.app.FragmentTransaction
import android.widget.EditText
import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import kotlinx.android.synthetic.main.activity_conversation.* import kotlinx.android.synthetic.main.activity_conversation.*
import org.myhush.silentdragon.* import org.myhush.silentdragon.*
class ConversationActivity : AppCompatActivity() { class ConversationActivity : AppCompatActivity() {
var displayName = "" var displayName = ""
var contact: Addressbook.Contact? = null var contact: Addressbook.Contact? = null
@ -17,32 +15,32 @@ class ConversationActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_conversation) setContentView(R.layout.activity_conversation)
val address = intent.extras.getString("contactAddress")
displayName = intent.extras.getString("displayName") displayName = intent.extras.getString("displayName")
contact = Addressbook.findContactByInAddress(address)
findViewById<TextView>(R.id.textViewContactName2).text = displayName findViewById<TextView>(R.id.textViewContactName2).text = displayName
findViewById<TextView>(R.id.textView_zAddress).text = contact?.addressIn
buttonSend.setOnClickListener{ buttonSend.setOnClickListener{
sendMessage() sendMessage()
} }
contact = Addressbook.contactList[0] // FOR TESTING!!!
restoreChat() restoreChat()
} }
private fun sendMessage(){ private fun sendMessage() {
// FOR TESTING!!! val memo = findViewById<TextView>(R.id.userInput).text.toString()
val memo = findViewById<EditText>(R.id.userInput).text.toString() val tx = DataModel.TransactionItem("", 0, "0", memo, contact!!.addressOut, "0", 0)
findViewById<EditText>(R.id.userInput).text.clear() DataModel.sendTx(tx)
var tx = DataModel.TransactionItem("send", 99, "0.00", memo, contact!!.addressList[0], "asdasdasd", 0)
val m = Message("addr", tx) findViewById<TextView>(R.id.userInput).text = ""
attachMessage(m)
m.messageType = MessageType.RECIEVE
attachMessage(m)
} }
private fun restoreChat() { private fun restoreChat() {
contact?.messageList?.forEach { contact?.messageList?.asReversed()?.forEach {
attachMessage(it) attachMessage(it)
} }
} }

4
app/src/main/java/org/myhush/silentdragon/chat/Message.kt

@ -11,12 +11,12 @@ class Message {
var txID = "" var txID = ""
var txHeight: Int = -1 var txHeight: Int = -1
constructor(fromAddress: String, tx: DataModel.TransactionItem){ constructor(fromAddress: String, tx: DataModel.TransactionItem, messageType: MessageType){
this.memo = tx.memo.toString() this.memo = tx.memo.toString()
this.txID = tx.txid.toString() this.txID = tx.txid.toString()
this.dateTime = tx.datetime this.dateTime = tx.datetime
this.toAddress = tx.addr this.toAddress = tx.addr
this.fromAddress = fromAddress this.fromAddress = fromAddress
this.messageType = messageType
} }
} }

3
app/src/main/java/org/myhush/silentdragon/conversation_item_recive.kt

@ -7,6 +7,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import org.myhush.silentdragon.chat.Message import org.myhush.silentdragon.chat.Message
import java.text.SimpleDateFormat
import java.util.*
class conversation_item_recive : Fragment() { class conversation_item_recive : Fragment() {
var msg: Message? = null var msg: Message? = null
@ -17,6 +19,7 @@ class conversation_item_recive : Fragment() {
var v: View = inflater.inflate(R.layout.fragment_conversation_item_recive, container, false) var v: View = inflater.inflate(R.layout.fragment_conversation_item_recive, container, false)
v.findViewById<TextView>(R.id.message).text = msg?.memo v.findViewById<TextView>(R.id.message).text = msg?.memo
v.findViewById<TextView>(R.id.Time2).text = SimpleDateFormat("MM-dd, HH:mm").format(Date(msg!!.dateTime))
return v return v
} }
} }

3
app/src/main/java/org/myhush/silentdragon/conversation_item_send.kt

@ -7,6 +7,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import org.myhush.silentdragon.chat.Message import org.myhush.silentdragon.chat.Message
import java.text.SimpleDateFormat
import java.util.*
class conversation_item_send : Fragment() { class conversation_item_send : Fragment() {
var msg: Message? = null var msg: Message? = null
@ -16,6 +18,7 @@ class conversation_item_send : Fragment() {
// Inflate the layout for this fragment // Inflate the layout for this fragment
var v: View = inflater.inflate(R.layout.fragment_conversation_item_send, container, false) var v: View = inflater.inflate(R.layout.fragment_conversation_item_send, container, false)
v.findViewById<TextView>(R.id.message).text = msg?.memo v.findViewById<TextView>(R.id.message).text = msg?.memo
v.findViewById<TextView>(R.id.Time).text = SimpleDateFormat("MM-dd, HH:mm").format(Date(msg!!.dateTime))
return v return v
} }
} }

17
app/src/main/res/layout/activity_conversation.xml

@ -40,9 +40,11 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:src="@mipmap/ic_launcher_dragon_foreground" tools:src="@mipmap/ic_launcher_dragon_foreground"
tools:visibility="visible" /> tools:visibility="visible" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>
<ScrollView <ScrollView
android:id="@+id/scrollView3"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/constraintLayout3" app:layout_constraintBottom_toTopOf="@+id/constraintLayout3"
@ -54,7 +56,7 @@
android:id="@+id/MessageList" android:id="@+id/MessageList"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"/> android:orientation="vertical" />
</ScrollView> </ScrollView>
<android.support.constraint.ConstraintLayout <android.support.constraint.ConstraintLayout
@ -88,6 +90,19 @@
app:layout_constraintEnd_toStartOf="@+id/buttonSend" app:layout_constraintEnd_toStartOf="@+id/buttonSend"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>
<TextView
android:id="@+id/textView_zAddress"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#0AFFFFFF"
android:text="zAddress"
android:textAlignment="center"
android:textSize="8sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraintLayout4" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

1
app/src/main/res/layout/fragment_chat_item.xml

@ -76,6 +76,7 @@
android:text="10min" android:text="10min"
android:textColor="#fff" android:textColor="#fff"
android:textSize="10sp" android:textSize="10sp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

2
app/src/main/res/layout/fragment_conversation_item_recive.xml

@ -25,7 +25,7 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/time2" android:id="@+id/Time2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="10sp" android:layout_marginRight="10sp"

Loading…
Cancel
Save