diff --git a/app/src/main/java/org/myhush/silentdragon/Addressbook.kt b/app/src/main/java/org/myhush/silentdragon/Addressbook.kt new file mode 100644 index 0000000..3787d2f --- /dev/null +++ b/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() + + constructor(nickname: String, addressIn: String, addressOut: String) { + this.nickname = nickname + this.addressIn = addressIn + this.addressOut = addressOut + } + } + + val contactList = ArrayList() + + 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() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/myhush/silentdragon/DataModel.kt b/app/src/main/java/org/myhush/silentdragon/DataModel.kt index 01736e9..babe5e9 100644 --- a/app/src/main/java/org/myhush/silentdragon/DataModel.kt +++ b/app/src/main/java/org/myhush/silentdragon/DataModel.kt @@ -10,6 +10,7 @@ import com.beust.klaxon.json import okhttp3.WebSocket import org.libsodium.jni.NaCl import org.libsodium.jni.Sodium +import org.myhush.silentdragon.chat.Message import java.math.BigInteger object DataModel { @@ -20,6 +21,7 @@ object DataModel { class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String?, val addr: String, val txid: String?, val confirmations: Long) + var mainResponseData : MainResponse? = null var transactions : List? = null diff --git a/app/src/main/java/org/myhush/silentdragon/MainActivity.kt b/app/src/main/java/org/myhush/silentdragon/MainActivity.kt index b199f48..bf32e2a 100644 --- a/app/src/main/java/org/myhush/silentdragon/MainActivity.kt +++ b/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.connStatus import org.myhush.silentdragon.chat.ChatActivity +import org.myhush.silentdragon.chat.Message +import org.myhush.silentdragon.chat.MessageType import java.text.DecimalFormat @@ -75,10 +77,10 @@ class MainActivity : AppCompatActivity(), if(DataModel.selectedCurrency == "BTC") Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat(" #,##0.00000000") .format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show() - else( + else 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 { @@ -108,6 +110,18 @@ class MainActivity : AppCompatActivity(), loadSharedPref() updateUI(false) + + /*/////////////////////////// + // CREATE SAMPLE CONTACTS // + + Addressbook.clear() + Addressbook.addContact("", "N1CK145", "zN1CK145") + Addressbook.addContact("", "Denio", "zDenio") + Addressbook.addContact("", "Max Mustermann", "zMaxMust") + + // // + /////////////////////////// */ + } private fun loadSharedPref() { @@ -214,6 +228,11 @@ class MainActivity : AppCompatActivity(), runOnUiThread { val fragTx = supportFragmentManager.beginTransaction() + // clear past messages + txns?.forEach { + Addressbook.findContactByInAddress(it.addr)?.messageList?.clear() + } + for (fr in supportFragmentManager.fragments) { fragTx.remove(fr) } @@ -226,19 +245,37 @@ class MainActivity : AppCompatActivity(), return@runOnUiThread } + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + val fixAdd= "zs12ehfu3pzj23z88up5wefn2psl5akc3m3ctpnmxmyxm4qx3vghlnq98dnu7sv0hdqgn3e20jq2rr" + val fixName = "Netterdon" + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Split all the transactions into confirmations = 0 and confirmations > 0 // Unconfirmed first val unconfirmed = txns.filter { t -> t.confirmations == 0L } if (unconfirmed.isNotEmpty()) { for (tx in unconfirmed) { - fragTx.add( - txList.id , - UnconfirmedTxItemFragment.newInstance( - Klaxon().toJsonString(tx), - "" - ), - "tag1" - ) + if(tx.memo?.length == 0){ + fragTx.add( + txList.id , + UnconfirmedTxItemFragment.newInstance( + Klaxon().toJsonString(tx), + "" + ), + "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()) { var oddeven = "odd" for (tx in confirmed) { - fragTx.add( - txList.id, - TransactionItemFragment.newInstance( - Klaxon().toJsonString(tx), - oddeven - ), - "tag1" - ) - oddeven = if (oddeven == "odd") "even" else "odd" + if(tx.memo?.length == 0){ + fragTx.add( + txList.id, + TransactionItemFragment.newInstance( + Klaxon().toJsonString(tx), + oddeven + ), + "tag1" + ) + 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() diff --git a/app/src/main/java/org/myhush/silentdragon/SendActivity.kt b/app/src/main/java/org/myhush/silentdragon/SendActivity.kt index dcdc58b..16eff7e 100644 --- a/app/src/main/java/org/myhush/silentdragon/SendActivity.kt +++ b/app/src/main/java/org/myhush/silentdragon/SendActivity.kt @@ -67,9 +67,7 @@ class SendActivity : AppCompatActivity() { if (DataModel.selectedCurrency == "BTC") amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00000000").format(0) else - { amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("0.00").format(0) - } textViewFee.text = DecimalFormat("0.0000").format(0.0001) + " HUSH" diff --git a/app/src/main/java/org/myhush/silentdragon/chat/AddContactActivity.kt b/app/src/main/java/org/myhush/silentdragon/chat/AddContactActivity.kt index 78b55b4..92138ab 100644 --- a/app/src/main/java/org/myhush/silentdragon/chat/AddContactActivity.kt +++ b/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.os.Bundle import kotlinx.android.synthetic.main.activity_add_contact.* +import org.myhush.silentdragon.Addressbook import org.myhush.silentdragon.R class AddContactActivity : AppCompatActivity() { @@ -18,7 +19,8 @@ class AddContactActivity : AppCompatActivity() { var fullname = editText_FullName.text.toString() var zAddr = editTextZAddress.text.toString() - Addressbook.contactList.add(Addressbook.Contact(fullname, nickName, zAddr)) + Addressbook.addContact(fullname, nickName, zAddr) + this.finish() } } diff --git a/app/src/main/java/org/myhush/silentdragon/chat/Addressbook.kt b/app/src/main/java/org/myhush/silentdragon/chat/Addressbook.kt deleted file mode 100644 index 942d504..0000000 --- a/app/src/main/java/org/myhush/silentdragon/chat/Addressbook.kt +++ /dev/null @@ -1,27 +0,0 @@ -package org.myhush.silentdragon.chat - -object Addressbook { - class Contact { - var addressList: ArrayList = ArrayList() - val messageList: ArrayList = 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){ - this.fullname = fullname - this.nickname = nickname - this.addressList = addressList - } - } - - val contactList = ArrayList() -} \ No newline at end of file diff --git a/app/src/main/java/org/myhush/silentdragon/chat/ChatActivity.kt b/app/src/main/java/org/myhush/silentdragon/chat/ChatActivity.kt index bcfaa4c..762b0ae 100644 --- a/app/src/main/java/org/myhush/silentdragon/chat/ChatActivity.kt +++ b/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.view.Menu import android.view.MenuItem -import android.view.View import android.widget.LinearLayout -import android.widget.TableLayout import kotlinx.android.synthetic.main.activity_chat.* -import kotlinx.android.synthetic.main.content_chat_list.view.* import org.myhush.silentdragon.* class ChatActivity : AppCompatActivity() { @@ -19,7 +16,7 @@ class ChatActivity : AppCompatActivity() { setContentView(R.layout.activity_chat) initListener() - restoreLastChats() + refresh() swiperefreshChat.setOnRefreshListener { 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(){ nav_view.setOnNavigationItemSelectedListener { when(it.itemId) { @@ -62,7 +50,7 @@ class ChatActivity : AppCompatActivity() { } } - fun refresh(){ + private fun refresh(){ findViewById(R.id.ChatTable).removeAllViews() Addressbook.contactList.forEach { @@ -74,9 +62,8 @@ class ChatActivity : AppCompatActivity() { val fragment = ChatItemFragment() val fragTx: FragmentTransaction = supportFragmentManager.beginTransaction() - fragment.fullname = contact.fullname fragment.nickname = contact.nickname - fragment.lastMessage = contact.addressList[0] + fragment.contactAddress = contact.addressIn fragTx.add(R.id.ChatTable, fragment) fragTx.commit() diff --git a/app/src/main/java/org/myhush/silentdragon/chat/ChatItemFragment.kt b/app/src/main/java/org/myhush/silentdragon/chat/ChatItemFragment.kt index bb543bc..e45564f 100644 --- a/app/src/main/java/org/myhush/silentdragon/chat/ChatItemFragment.kt +++ b/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.ViewGroup import android.widget.TextView +import kotlinx.android.synthetic.main.content_receive.* import org.myhush.silentdragon.R class ChatItemFragment : Fragment() { - var fullname: String = "" var nickname: String = "" var lastMessage: String = "" + var contactAddress: String = "" var v: View? = null override fun onCreateView (inflater: LayoutInflater, container: ViewGroup?, @@ -30,6 +31,7 @@ class ChatItemFragment : Fragment() { val intent = Intent(activity, ConversationActivity::class.java) intent.putExtra("displayName", nickname) // Send some information + intent.putExtra("contactAddress", contactAddress) startActivity(intent) } diff --git a/app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt b/app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt index 41ebecf..c7208fe 100644 --- a/app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt +++ b/app/src/main/java/org/myhush/silentdragon/chat/ConversationActivity.kt @@ -1,15 +1,13 @@ package org.myhush.silentdragon.chat -import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v4.app.FragmentTransaction -import android.widget.EditText -import android.widget.ImageButton import android.widget.TextView import kotlinx.android.synthetic.main.activity_conversation.* import org.myhush.silentdragon.* + class ConversationActivity : AppCompatActivity() { var displayName = "" var contact: Addressbook.Contact? = null @@ -17,32 +15,32 @@ class ConversationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_conversation) + val address = intent.extras.getString("contactAddress") displayName = intent.extras.getString("displayName") + contact = Addressbook.findContactByInAddress(address) + + findViewById(R.id.textViewContactName2).text = displayName + findViewById(R.id.textView_zAddress).text = contact?.addressIn buttonSend.setOnClickListener{ sendMessage() } - - contact = Addressbook.contactList[0] // FOR TESTING!!! restoreChat() } - private fun sendMessage(){ - // FOR TESTING!!! - val memo = findViewById(R.id.userInput).text.toString() - findViewById(R.id.userInput).text.clear() - var tx = DataModel.TransactionItem("send", 99, "0.00", memo, contact!!.addressList[0], "asdasdasd", 0) - val m = Message("addr", tx) - attachMessage(m) - m.messageType = MessageType.RECIEVE - attachMessage(m) + private fun sendMessage() { + val memo = findViewById(R.id.userInput).text.toString() + val tx = DataModel.TransactionItem("", 0, "0", memo, contact!!.addressOut, "0", 0) + DataModel.sendTx(tx) + + findViewById(R.id.userInput).text = "" } private fun restoreChat() { - contact?.messageList?.forEach { + contact?.messageList?.asReversed()?.forEach { attachMessage(it) } } diff --git a/app/src/main/java/org/myhush/silentdragon/chat/Message.kt b/app/src/main/java/org/myhush/silentdragon/chat/Message.kt index b83a6e0..d6c0340 100644 --- a/app/src/main/java/org/myhush/silentdragon/chat/Message.kt +++ b/app/src/main/java/org/myhush/silentdragon/chat/Message.kt @@ -11,12 +11,12 @@ class Message { var txID = "" var txHeight: Int = -1 - constructor(fromAddress: String, tx: DataModel.TransactionItem){ + constructor(fromAddress: String, tx: DataModel.TransactionItem, messageType: MessageType){ this.memo = tx.memo.toString() this.txID = tx.txid.toString() this.dateTime = tx.datetime this.toAddress = tx.addr this.fromAddress = fromAddress + this.messageType = messageType } - } \ No newline at end of file diff --git a/app/src/main/java/org/myhush/silentdragon/conversation_item_recive.kt b/app/src/main/java/org/myhush/silentdragon/conversation_item_recive.kt index d2d5295..778c62f 100644 --- a/app/src/main/java/org/myhush/silentdragon/conversation_item_recive.kt +++ b/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.widget.TextView import org.myhush.silentdragon.chat.Message +import java.text.SimpleDateFormat +import java.util.* class conversation_item_recive : Fragment() { 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) v.findViewById(R.id.message).text = msg?.memo + v.findViewById(R.id.Time2).text = SimpleDateFormat("MM-dd, HH:mm").format(Date(msg!!.dateTime)) return v } } diff --git a/app/src/main/java/org/myhush/silentdragon/conversation_item_send.kt b/app/src/main/java/org/myhush/silentdragon/conversation_item_send.kt index 37dd301..539c0ab 100644 --- a/app/src/main/java/org/myhush/silentdragon/conversation_item_send.kt +++ b/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.widget.TextView import org.myhush.silentdragon.chat.Message +import java.text.SimpleDateFormat +import java.util.* class conversation_item_send : Fragment() { var msg: Message? = null @@ -16,6 +18,7 @@ class conversation_item_send : Fragment() { // Inflate the layout for this fragment var v: View = inflater.inflate(R.layout.fragment_conversation_item_send, container, false) v.findViewById(R.id.message).text = msg?.memo + v.findViewById(R.id.Time).text = SimpleDateFormat("MM-dd, HH:mm").format(Date(msg!!.dateTime)) return v } } diff --git a/app/src/main/res/layout/activity_conversation.xml b/app/src/main/res/layout/activity_conversation.xml index 86850be..5a8688c 100644 --- a/app/src/main/res/layout/activity_conversation.xml +++ b/app/src/main/res/layout/activity_conversation.xml @@ -40,9 +40,11 @@ app:layout_constraintTop_toTopOf="parent" tools:src="@mipmap/ic_launcher_dragon_foreground" tools:visibility="visible" /> + + android:orientation="vertical" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chat_item.xml b/app/src/main/res/layout/fragment_chat_item.xml index b85da9f..d9b1798 100644 --- a/app/src/main/res/layout/fragment_chat_item.xml +++ b/app/src/main/res/layout/fragment_chat_item.xml @@ -76,6 +76,7 @@ android:text="10min" android:textColor="#fff" android:textSize="10sp" + android:visibility="invisible" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/fragment_conversation_item_recive.xml b/app/src/main/res/layout/fragment_conversation_item_recive.xml index 361ba94..cfbbfb0 100644 --- a/app/src/main/res/layout/fragment_conversation_item_recive.xml +++ b/app/src/main/res/layout/fragment_conversation_item_recive.xml @@ -25,7 +25,7 @@ app:layout_constraintTop_toTopOf="parent" />