aboutsummaryrefslogtreecommitdiff
path: root/Client
diff options
context:
space:
mode:
Diffstat (limited to 'Client')
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt96
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt98
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt5
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt8
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt36
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt34
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt8
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Chat.kt3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt33
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt5
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml10
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml10
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml71
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml67
16 files changed, 383 insertions, 107 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt
index efe2ac2..746d8b0 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt
@@ -9,6 +9,7 @@ import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
+import android.view.KeyEvent
import android.view.View
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
@@ -52,6 +53,7 @@ class ActivityAddPost : AppCompatActivity() {
private lateinit var tagText: EditText
private lateinit var tagButtonAdd:Button
private lateinit var tagList: MutableList<String>
+ private lateinit var locText: EditText
private var tagidcounter:Int = 0
val LOCATIONREQCODE=123
var locationId:String?=null
@@ -80,6 +82,7 @@ class ActivityAddPost : AppCompatActivity() {
tagText =findViewById<View>(R.id.acTags) as EditText
tagButtonAdd = findViewById<View>(R.id.btnActivityAddPostAddTag) as Button
tagLayout = findViewById<View>(R.id.llTags) as LinearLayout
+ locText=findViewById<View>(R.id.etActivityAddPostLocationText) as EditText
addDescription=findViewById<View>(R.id.tvActivityAddPostDescriptiontext)as Button
@@ -109,41 +112,18 @@ class ActivityAddPost : AppCompatActivity() {
}
//dodavanje i brisanje tagova
tagButtonAdd.setOnClickListener {
- tagText.isGone=false
- tagText.isVisible=true
-
- if(tagList.count()<4 && tagText.text.toString().length>=3) {
- var tagstr = tagText.text.toString()
- var newbtn = Button(this)
- newbtn.setId(tagidcounter)
- newbtn.text = tagstr
- var layoutParams = LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- 50
- )
- layoutParams.setMargins(3)
- newbtn.layoutParams=layoutParams
- newbtn.setBackgroundColor(Color.parseColor("#1C789A"))
- newbtn.setTextColor(Color.WHITE)
- newbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10F)
- newbtn.setPadding(3,1,3,1)
-
- newbtn.setOnClickListener {
- var btntext = newbtn.text.toString()
- tagList.remove(btntext)
- tagButtons.remove(newbtn)
- tagLayout.removeView(newbtn)
- }
-
- tagList.add(tagstr)
- tagButtons.add(newbtn)
- tagLayout.addView(newbtn)
- tagText.text.clear()
- }
- else{
- Toast.makeText(this,"Maksimalno 4 tagova ( duzine + karaktera)",Toast.LENGTH_LONG)
- }
+ addTag()
}
+ tagText.setOnKeyListener(View.OnKeyListener { v1, keyCode, event -> // If the event is a key-down event on the "enter" button
+ if (event.action === KeyEvent.ACTION_DOWN &&
+ keyCode == KeyEvent.KEYCODE_ENTER
+ ) {
+ // Perform action on key press
+ addTag()
+ return@OnKeyListener true
+ }
+ false
+ })
//dodavanje iz galerije
uploadFromGallery.setOnClickListener{
@@ -208,7 +188,42 @@ class ActivityAddPost : AppCompatActivity() {
}
}
}
+ fun addTag(){
+ tagText.isGone=false
+ tagText.isVisible=true
+
+ if(tagList.count()<4 && tagText.text.toString().length>=3) {
+ var tagstr = tagText.text.toString()
+ var newbtn = Button(this)
+ newbtn.setId(tagidcounter)
+ newbtn.text = tagstr
+ var layoutParams = LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.WRAP_CONTENT,
+ 50
+ )
+ layoutParams.setMargins(3)
+ newbtn.layoutParams=layoutParams
+ newbtn.setBackgroundColor(Color.parseColor("#1C789A"))
+ newbtn.setTextColor(Color.WHITE)
+ newbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10F)
+ newbtn.setPadding(3,1,3,1)
+
+ newbtn.setOnClickListener {
+ var btntext = newbtn.text.toString()
+ tagList.remove(btntext)
+ tagButtons.remove(newbtn)
+ tagLayout.removeView(newbtn)
+ }
+ tagList.add(tagstr)
+ tagButtons.add(newbtn)
+ tagLayout.addView(newbtn)
+ tagText.text.clear()
+ }
+ else{
+ Toast.makeText(this,"Maksimalno 4 tagova ( duzine + karaktera)",Toast.LENGTH_LONG)
+ }
+ }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -244,6 +259,10 @@ class ActivityAddPost : AppCompatActivity() {
if(requestCode==LOCATIONREQCODE && resultCode== RESULT_OK){
var bundle=data!!.extras
locationId=bundle!!.getString("locationId")
+ var name=bundle!!.getString("name")
+ locText.isGone=false
+ locText.isVisible=true
+ locText.setText(name,TextView.BufferType.EDITABLE)
}
}
private fun sendPost(){
@@ -298,9 +317,12 @@ class ActivityAddPost : AppCompatActivity() {
override fun onResponse(call: Call<PostPreview?>, response: Response<PostPreview?>) {
progressDialog!!.dismiss()
if(response.isSuccessful()){
- Toast.makeText(
- applicationContext, "USPEH", Toast.LENGTH_LONG
- ).show();
+ val intent:Intent = Intent(this@ActivityAddPost,ActivitySinglePost::class.java)
+ var b=Bundle()
+ b.putParcelable("selectedPost",response.body())
+ intent.putExtras(b)
+ startActivity(intent)
+ finish()
}else {
if (response.errorBody() != null) {
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt
index 0221241..79062c9 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt
@@ -11,6 +11,7 @@ import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.util.TypedValue
+import android.view.KeyEvent
import android.view.View
import android.widget.*
import androidx.activity.result.contract.ActivityResultContracts
@@ -53,6 +54,7 @@ class ActivityCapturePost : AppCompatActivity() {
private lateinit var tagList: MutableList<String>
private var tagidcounter:Int = 0
private lateinit var addDescription:Button
+ private lateinit var locText: EditText
val LOCATIONREQCODE=123
@@ -77,6 +79,7 @@ class ActivityCapturePost : AppCompatActivity() {
tagLayout = findViewById<View>(R.id.llTagsCap) as LinearLayout
addDescription=findViewById<View>(R.id.tvActivityCapturePostDescriptiontext)as Button
+ locText=findViewById<View>(R.id.etActivityAddPostLocationText) as EditText
progressDialog= ProgressDialog(this)
@@ -95,42 +98,18 @@ class ActivityCapturePost : AppCompatActivity() {
}
//dodavanje i brisanje tagova
tagButtonAdd.setOnClickListener {
- tagText.isGone=false
- tagText.isVisible=true
-
- if(tagList.count()<4 && tagText.text.toString().length>=3) {
- var tagstr = tagText.text.toString()
- var newbtn = Button(this)
- newbtn.setId(tagidcounter)
- newbtn.text = tagstr
- var layoutParams = LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- 50
- )
- layoutParams.setMargins(3)
- newbtn.layoutParams=layoutParams
- newbtn.setBackgroundColor(Color.parseColor("#1C789A"))
- newbtn.setTextColor(Color.WHITE)
- newbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10F)
- newbtn.setPadding(3,1,3,1)
-
- newbtn.setOnClickListener {
- var btntext = newbtn.text.toString()
- tagList.remove(btntext)
- tagButtons.remove(newbtn)
- tagLayout.removeView(newbtn)
- }
-
- tagList.add(tagstr)
- tagButtons.add(newbtn)
- tagLayout.addView(newbtn)
- tagText.text.clear()
- }
- else{
- Toast.makeText(this,"Maksimalno 4 tagova (duzine 3+ karaktera)",Toast.LENGTH_LONG)
- }
+ addTag()
}
-
+ tagText.setOnKeyListener(View.OnKeyListener { v1, keyCode, event -> // If the event is a key-down event on the "enter" button
+ if (event.action === KeyEvent.ACTION_DOWN &&
+ keyCode == KeyEvent.KEYCODE_ENTER
+ ) {
+ // Perform action on key press
+ addTag()
+ return@OnKeyListener true
+ }
+ false
+ })
//dodavanje sa kamere
@@ -225,11 +204,51 @@ class ActivityCapturePost : AppCompatActivity() {
}
}
+ fun addTag(){
+ tagText.isGone=false
+ tagText.isVisible=true
+
+ if(tagList.count()<4 && tagText.text.toString().length>=3) {
+ var tagstr = tagText.text.toString()
+ var newbtn = Button(this)
+ newbtn.setId(tagidcounter)
+ newbtn.text = tagstr
+ var layoutParams = LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.WRAP_CONTENT,
+ 50
+ )
+ layoutParams.setMargins(3)
+ newbtn.layoutParams=layoutParams
+ newbtn.setBackgroundColor(Color.parseColor("#1C789A"))
+ newbtn.setTextColor(Color.WHITE)
+ newbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10F)
+ newbtn.setPadding(3,1,3,1)
+
+ newbtn.setOnClickListener {
+ var btntext = newbtn.text.toString()
+ tagList.remove(btntext)
+ tagButtons.remove(newbtn)
+ tagLayout.removeView(newbtn)
+ }
+
+ tagList.add(tagstr)
+ tagButtons.add(newbtn)
+ tagLayout.addView(newbtn)
+ tagText.text.clear()
+ }
+ else{
+ Toast.makeText(this,"Maksimalno 4 tagova ( duzine + karaktera)",Toast.LENGTH_LONG)
+ }
+ }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode==LOCATIONREQCODE && resultCode== RESULT_OK){
var bundle=data!!.extras
locationId=bundle!!.getString("locationId")
+ var name=bundle!!.getString("name")
+ locText.isGone=false
+ locText.isVisible=true
+ locText.setText(name,TextView.BufferType.EDITABLE)
}
}
var f:File?=null
@@ -291,9 +310,12 @@ class ActivityCapturePost : AppCompatActivity() {
override fun onResponse(call: Call<PostPreview?>, response: Response<PostPreview?>) {
if(response.isSuccessful()){
progressDialog!!.dismiss()
- Toast.makeText(
- applicationContext, "USPEH", Toast.LENGTH_LONG
- ).show();
+ val intent:Intent = Intent(this@ActivityCapturePost,ActivitySinglePost::class.java)
+ var b=Bundle()
+ b.putParcelable("selectedPost",response.body())
+ intent.putExtras(b)
+ startActivity(intent)
+ finish()
}else {
progressDialog!!.dismiss()
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
index e1c2f80..edbec21 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
@@ -317,7 +317,8 @@ class ActivitySinglePost : AppCompatActivity() {
binding.apply {
tvTitle.text= post.location.name
tvTitle.invalidate()
- tvLocationType.text="TODO Click to open map"
+ tvLocationType.text="Otvorite Mapu"
+ tvLocationType.setTextColor(Color.BLUE)
tvLocationType.invalidate()
tvLocationParent.text="TODO"
tvLocationParent.invalidate()
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt
index 25ef88e..951cbb4 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt
@@ -21,6 +21,7 @@ import com.example.brzodolokacije.chat.SignalRListener
import com.example.brzodolokacije.databinding.ActivityChatBinding
import retrofit2.Call
import retrofit2.Response
+import java.util.*
class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {
@@ -83,9 +84,11 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {
if(!messages.isNullOrEmpty()){
var dbHelper= DBHelper.getInstance(this@ChatActivity)
for( message in messages){
+ var cal: Calendar = Calendar.getInstance()
+ cal.time=message.timestamp
dbHelper.addMessage(
Message(message.senderId+message.timestamp,message.senderId,
- JWT(SharedPreferencesHelper.getValue("jwt",this@ChatActivity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false)
+ JWT(SharedPreferencesHelper.getValue("jwt",this@ChatActivity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp,cal),false)
}
}
requestForChats()
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt
index b4722ea..19fd836 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt
@@ -24,6 +24,7 @@ import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import retrofit2.Call
import retrofit2.Response
+import java.util.*
class ChatActivityConversation : AppCompatActivity() {
@@ -78,6 +79,9 @@ class ChatActivityConversation : AppCompatActivity() {
if(response.isSuccessful()){
//zahtev da se posalje poruka
var responseMessage=response.body()
+ var cal: Calendar = Calendar.getInstance()
+ cal.time=responseMessage?.timestamp
+ responseMessage?.usableTimeStamp=cal
dbConnection?.addMessage(responseMessage!!)
requestMessages()
binding.etNewMessage.text?.clear()
@@ -115,6 +119,9 @@ class ChatActivityConversation : AppCompatActivity() {
if(response.isSuccessful()){
//zahtev da se posalje poruka
var responseMessage=response.body()
+ var cal: Calendar = Calendar.getInstance()
+ cal.time=responseMessage?.timestamp
+ responseMessage?.usableTimeStamp=cal
dbConnection?.addMessage(responseMessage!!)
requestMessages()
binding.etNewMessage.text?.clear()
@@ -179,5 +186,6 @@ class ChatActivityConversation : AppCompatActivity() {
}
adapterVar= items?.let { ChatMessagesAdapter(it,this@ChatActivityConversation) }
setRecyclerView(setParams = false)
+ dbConnection?.readContact(userId!!)
}
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt
index fa3f06b..238c7e8 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt
@@ -39,6 +39,7 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.Projection
import org.osmdroid.views.overlay.ItemizedIconOverlay
+import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.Overlay
import org.osmdroid.views.overlay.OverlayItem
import org.osmdroid.views.overlay.ScaleBarOverlay
@@ -205,16 +206,49 @@ class MapsActivity : AppCompatActivity() {
selectedLocation=responseLocations!!.find { location -> location.name==selected }
Log.d("main",selectedLocation.toString())
confirmButton.visibility=View.VISIBLE
+ val locGeopoint=GeoPoint(selectedLocation!!.latitude,selectedLocation!!.longitude)
+ map!!.controller.animateTo(locGeopoint)
+ val marker = ContextCompat.getDrawable(this@MapsActivity, R.drawable.ic_baseline_add_location_24);
+ locLatitude=selectedLocation!!.latitude
+ locLongitude=selectedLocation!!.longitude
+
+
+ val overlayArray = ArrayList<OverlayItem>()
+ val mapItem = OverlayItem(
+ "", "", locGeopoint
+ )
+ mapItem.setMarker(marker)
+ overlayArray.add(mapItem)
+ if (anotherItemizedIconOverlay == null) {
+ anotherItemizedIconOverlay =
+ ItemizedIconOverlay(applicationContext, overlayArray, null)
+ map!!.overlays.add(anotherItemizedIconOverlay)
+ map!!.invalidate()
+ } else {
+ map!!.overlays.remove(anotherItemizedIconOverlay)
+ map!!.invalidate()
+ anotherItemizedIconOverlay =
+ ItemizedIconOverlay(applicationContext, overlayArray, null)
+ map!!.overlays.add(anotherItemizedIconOverlay)
+ }
+
})
}
+ var anotherItemizedIconOverlay: ItemizedIconOverlay<OverlayItem>? = null
fun returnValue(){
val intent = intent
val bundle = Bundle()
if(selectedLocation==null)
return
+ if(selectedLocation!!.latitude!=locLatitude || selectedLocation!!.longitude!=locLongitude)
+ {
+ addLocation()
+ return
+ }
bundle.putString("locationId",selectedLocation!!._id)
+ bundle.putString("name",selectedLocation!!.name)
intent.putExtras(bundle)
setResult(RESULT_OK, intent)
finish()
@@ -296,7 +330,7 @@ class MapsActivity : AppCompatActivity() {
val touchOverlay: Overlay = object : Overlay(this) {
- var anotherItemizedIconOverlay: ItemizedIconOverlay<OverlayItem>? = null
+
override fun onSingleTapConfirmed(e: MotionEvent, mapView: MapView): Boolean {
val marker = ContextCompat.getDrawable(this@MapsActivity, R.drawable.ic_baseline_add_location_24);
val proj: Projection = mapView.projection
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt
index 45ffbf0..403b736 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt
@@ -2,6 +2,7 @@ package com.example.brzodolokacije.Adapters
import android.app.Activity
import android.view.LayoutInflater
+import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.auth0.android.jwt.JWT
@@ -9,6 +10,7 @@ import com.example.brzodolokacije.Models.Message
import com.example.brzodolokacije.Services.SharedPreferencesHelper
import com.example.brzodolokacije.databinding.ChatMessageBinding
import com.example.brzodolokacije.databinding.ChatMessageOtherBinding
+import java.util.*
class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activity)
: RecyclerView.Adapter<RecyclerView.ViewHolder>(){
@@ -49,6 +51,17 @@ class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activi
fun bind(item : Message){
bindingOther?.apply {
tvMessage?.text=item.messagge
+ tvTimestamp.text=item.usableTimeStamp.get(Calendar.HOUR_OF_DAY).toString() + ":" + item.usableTimeStamp.get(Calendar.MINUTE).toString()
+ if(layoutPosition==0 || isDifferentDays(items[layoutPosition].usableTimeStamp,items[layoutPosition-1].usableTimeStamp)){
+
+ tvDate.text=item.usableTimeStamp.get(Calendar.DAY_OF_MONTH).toString()+"/"+
+ (item.usableTimeStamp.get(Calendar.MONTH)+1).toString()+"/"+
+ item.usableTimeStamp.get(Calendar.YEAR).toString()
+ }
+ else{
+ tvDate.visibility= View.GONE
+ tvDate.forceLayout()
+ }
}
}
}
@@ -56,10 +69,31 @@ class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activi
fun bind(item : Message){
binding?.apply {
tvMessage.text=item.messagge
+ tvTimestamp.text=item.usableTimeStamp.get(Calendar.HOUR_OF_DAY).toString() + ":" + item.usableTimeStamp.get(Calendar.MINUTE).toString()
+ if(layoutPosition==0 || isDifferentDays(items[layoutPosition].usableTimeStamp,items[layoutPosition-1].usableTimeStamp)){
+
+ tvDate.text=item.usableTimeStamp.get(Calendar.DAY_OF_MONTH).toString()+"/"+
+ (item.usableTimeStamp.get(Calendar.MONTH)+1).toString()+"/"+
+ item.usableTimeStamp.get(Calendar.YEAR).toString()
+ }
+ else{
+ tvDate.visibility= View.GONE
+ tvDate.forceLayout()
+ }
}
}
}
+ fun isDifferentDays(c1:Calendar,c2:Calendar):Boolean{
+ if(c1.get(Calendar.DAY_OF_YEAR)!=c2.get(Calendar.DAY_OF_YEAR)){
+ return true
+ }
+ else if(c1.get(Calendar.YEAR)!=c2.get(Calendar.YEAR)){
+ return true
+ }
+ return false
+ }
+
override fun getItemViewType(position: Int): Int {
var sender=items.get(position).senderId
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt
index f875366..6e62180 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt
@@ -1,11 +1,13 @@
package com.example.brzodolokacije.Adapters
import android.content.Intent
+import android.graphics.Typeface
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
+import com.exam.DBHelper
import com.example.brzodolokacije.Activities.ChatActivity
import com.example.brzodolokacije.Activities.ChatActivityConversation
import com.example.brzodolokacije.Interfaces.IBackendApi
@@ -25,6 +27,7 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Cha
private var api: IBackendApi?=null
private var token:String?=null
private lateinit var binding: ChatPreviewBinding
+ private var db:DBHelper=DBHelper.getInstance(activity)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
binding=ChatPreviewBinding.inflate(inflater,parent,false)
@@ -39,6 +42,9 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Cha
val intent: Intent = Intent(activity, ChatActivityConversation::class.java)
intent.putExtra("userId",items[position].userId)
intent.putExtra("username",holder.itemView.tvUsername.text)
+ db.readContact(items[position].userId)
+ items[position].read=true
+ holder.itemView.tvUsername.typeface= Typeface.DEFAULT
activity.startActivity(intent)
}
}
@@ -54,6 +60,8 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Cha
if(response.isSuccessful()){
//zahtev da se posalje poruka
var user=response.body()!!
+ if(!item.read)
+ tvUsername.typeface= Typeface.DEFAULT_BOLD
tvUsername.text=user.username
if(user.pfp!=null) {
Glide.with(activity)
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt
index db3fc2e..79f0af2 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt
@@ -13,6 +13,7 @@ import com.example.brzodolokacije.Models.PostPreview
import com.example.brzodolokacije.Services.RetrofitHelper
import com.example.brzodolokacije.Services.SharedPreferencesHelper
import com.example.brzodolokacije.databinding.SinglePostHistoryBinding
+import java.text.SimpleDateFormat
class PostHistoryAdapter (val activity:Activity,val items : MutableList<PostPreview>)
@@ -39,7 +40,7 @@ class PostHistoryAdapter (val activity:Activity,val items : MutableList<PostPrev
fun bind(item: PostPreview) {
binding.apply {
tvTitleSinglePostHistory.text = item.location.name
- tvLocationParentSinglePostHistory.text = "22.11.2022"
+ tvLocationParentSinglePostHistory.text = SimpleDateFormat("dd/MM/yyyy").format(item.lastViewed)
tvLocationTypeSinglePostHistory.text = item.location.country
}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Chat.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Chat.kt
index 3404541..6725c15 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Chat.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Chat.kt
@@ -18,7 +18,8 @@ data class Message(
var senderId: String,
var receiverId: String,
var messagge: String,
- var timestamp: Date
+ var timestamp: Date,
+ var usableTimeStamp:Calendar
)
data class ChatPreview(
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt
index 191df3c..a3d5a13 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt
@@ -41,7 +41,7 @@ class DBHelper :
if(!doesTableExist(CONTACTS_TABLE_NAME,db)){
var sql:String="CREATE TABLE "+ CONTACTS_TABLE_NAME+" (" +
"userId " +"TEXT PRIMARY KEY,"+
- "read " +"INT"+
+ "read " +"INTEGER"+
")"
db?.execSQL(sql)
}
@@ -51,7 +51,7 @@ class DBHelper :
"senderId " +"TEXT,"+
"receiverId "+"TEXT,"+
"messagge " +"TEXT,"+
- "timestamp "+"TEXT"+
+ "timestamp "+"INTEGER"+
")"
db?.execSQL(sql)
}
@@ -88,8 +88,8 @@ class DBHelper :
var sql="INSERT INTO "+ MESSAGES_TABLE_NAME+"(_id,senderId,receiverid,messagge,timestamp) VALUES('"+message._id+"','"+
message.senderId+"','"+
message.receiverId+"','"+
- message.messagge+ "','"+
- message.timestamp+ "')"
+ message.messagge+ "',"+
+ message.usableTimeStamp.timeInMillis+")"
db?.execSQL(sql)
if(sent)
sql="SELECT * FROM "+ CONTACTS_TABLE_NAME+" WHERE userId='"+message.receiverId+"'"
@@ -105,15 +105,19 @@ class DBHelper :
read+"')"
db?.execSQL(sql)
}
+ else{
+ if(!sent)
+ unreadContact(message.senderId)
+ }
}
}
fun getMessages(userId:String, self:Boolean=false): MutableList<Message>? {
onCreate(db)
var sql:String
if(!self)
- sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' OR receiverId='"+userId+"'"
+ sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' OR receiverId='"+userId+"' ORDER BY timestamp ASC"
else
- sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' AND receiverId='"+userId+"'"
+ sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' AND receiverId='"+userId+"' ORDER BY timestamp ASC"
var cursor=db?.rawQuery(sql,null)
if(cursor?.count!! >0){
var messagesList:MutableList<Message> =mutableListOf()
@@ -123,17 +127,21 @@ class DBHelper :
var messageIndex=cursor.getColumnIndexOrThrow("messagge")
var timestampIndex=cursor.getColumnIndexOrThrow("timestamp")
while(cursor.moveToNext()){
+ var cal:Calendar= Calendar.getInstance()
+ cal.timeInMillis=cursor.getLong(timestampIndex)
messagesList.add(
Message(
cursor.getString(idIndex),
cursor.getString(senderIdIndex),
cursor.getString(receiverIdIndex),
cursor.getString(messageIndex),
- Date()
+ cal.time,
+ cal
)
)
+ Log.d("main",cal.time.toString())
}
- Log.d("main",messagesList.size.toString())
+ readContact(userId)
return messagesList
}
return null
@@ -162,4 +170,13 @@ class DBHelper :
sql="DROP TABLE IF EXISTS "+ MESSAGES_TABLE_NAME
db?.execSQL(sql)
}
+
+ fun readContact(userId: String){
+ var sql="UPDATE "+ CONTACTS_TABLE_NAME+" SET read=1 WHERE userId='"+userId+"'"
+ db?.execSQL(sql)
+ }
+ fun unreadContact(userId: String){
+ var sql="UPDATE "+ CONTACTS_TABLE_NAME+" SET read=0 WHERE userId='"+userId+"'"
+ db?.execSQL(sql)
+ }
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt
index 4b16f25..39689c7 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt
@@ -14,6 +14,7 @@ import com.microsoft.signalr.Action1
import com.microsoft.signalr.HubConnection
import com.microsoft.signalr.HubConnectionBuilder
import com.microsoft.signalr.HubConnectionState
+import java.util.*
class SignalRListener private constructor(val activity: Activity){
@@ -62,8 +63,10 @@ class SignalRListener private constructor(val activity: Activity){
}
fun addToDbAndloadMessageIfInChat(message:MessageReceive,activity: Activity){
+ var cal:Calendar= Calendar.getInstance()
+ cal.time=message.timestamp
dbHelper.addMessage(Message(message.senderId+message.timestamp,message.senderId,
- JWT(SharedPreferencesHelper.getValue("jwt",activity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false)
+ JWT(SharedPreferencesHelper.getValue("jwt",activity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp,cal),false)
if(activity is ChatActivity){
if(activity.clickedChat?.userId==message.senderId){
activity.clickedChat?.requestMessages()
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml
index 8e3fbb4..405c221 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml
@@ -73,6 +73,16 @@
app:layout_constraintHorizontal_bias="0.074"
app:layout_constraintStart_toStartOf="parent" />
+ <EditText
+ android:id="@+id/etActivityAddPostLocationText"
+ android:layout_width="wrap_content"
+ android:layout_height="50dp"
+ android:ems="10"
+ android:enabled="false"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="@+id/btnActivityAddPostAddLocation"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/btnActivityAddPostAddLocation" />
<Button
android:id="@+id/tvActivityAddPostDescriptiontext"
android:layout_width="wrap_content"
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml
index e93fd54..cb2c8dc 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml
@@ -50,6 +50,16 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.092"
app:layout_constraintStart_toStartOf="parent" />
+ <EditText
+ android:id="@+id/etActivityAddPostLocationText"
+ android:layout_width="wrap_content"
+ android:layout_height="50dp"
+ android:ems="10"
+ android:enabled="false"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="@+id/btnActivityCapturePostAddLocation"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/btnActivityCapturePostAddLocation" />
<Button
android:id="@+id/tvActivityCapturePostDescriptiontext"
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml
index 57269e7..7858e94 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml
@@ -1,29 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
+
android:id="@+id/clMessage"
android:layout_margin="@dimen/text_padding"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
android:layout_gravity="end">
<androidx.cardview.widget.CardView
- android:elevation="5dp"
+ android:id="@+id/cardView"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:backgroundTint="@color/unfollow"
+ android:elevation="5dp"
app:cardCornerRadius="15dp"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ <com.google.android.material.textview.MaterialTextView
+
+ android:id="@+id/tvMessage"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="16dp"
+ android:background="@drawable/view_corner_radius"
+ android:backgroundTint="@color/unfollow"
+ android:padding="5dp"
+ android:text="blabla"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/tvDate"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="32dp"
+ android:paddingStart="8dp"
+ android:paddingTop="4dp"
+ android:paddingEnd="8dp"
+ android:paddingBottom="4dp"
+ android:text="June 10"
+ android:textColor="#C0C0C0"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.cardview.widget.CardView
+ android:id="@+id/cvContainer"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:cardBackgroundColor="@color/dark_blue_transparent"
+ app:cardCornerRadius="12dp"
+ app:cardElevation="0dp"
+ app:cardPreventCornerOverlap="false"
+ app:cardUseCompatPadding="true"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/tvDate">
+
+
- <com.google.android.material.textview.MaterialTextView
- android:id="@+id/tvMessage"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:text="blabla"
- />
</androidx.cardview.widget.CardView>
+ <TextView
+ android:id="@+id/tvTimestamp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="10:00"
+ android:textColor="#C0C0C0"
+ android:textSize="10sp"
+ app:layout_constraintBottom_toBottomOf="@+id/cvContainer"
+ app:layout_constraintEnd_toStartOf="@+id/cvContainer" />
+
+
</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml
index 56dc09c..aaabd86 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml
@@ -1,25 +1,78 @@
<?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:id="@+id/clMessage"
android:layout_width="wrap_content"
- android:layout_height="35dp">
- >
+ android:layout_height="wrap_content"
+
+ android:layout_marginStart="8dp"
+ android:layout_marginTop="16dp">
+
+ <TextView
+ android:id="@+id/tvDate"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="32dp"
+ android:elevation="10dp"
+
+ android:paddingTop="4dp"
+ android:paddingEnd="8dp"
+ android:paddingBottom="4dp"
+ android:text="June 10"
+ android:textColor="#C0C0C0"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
<androidx.cardview.widget.CardView
+ android:id="@+id/cvContainer"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="5dp"
android:elevation="5dp"
- app:cardCornerRadius="15dp"
+ app:cardCornerRadius="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
- <TextView
- android:id="@+id/tvMessage"
+
+
+ <LinearLayout
+ android:id="@+id/llContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="5dp"
- android:text="blabla" />
+ android:orientation="vertical">
+ <TextView
+ android:id="@+id/tvMessage"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="5dp"
+ android:text="blabla"
+ app:cardBackgroundColor="#eef1f6"
+ app:cardCornerRadius="12dp"
+ app:cardElevation="0dp"
+ app:cardPreventCornerOverlap="false"
+ app:cardUseCompatPadding="true"
+ app:layout_constraintTop_toBottomOf="@+id/tvDate"/>
+
+ </LinearLayout>
+
</androidx.cardview.widget.CardView>
+
+
+ <TextView
+ android:id="@+id/tvTimestamp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="4dp"
+ android:layout_marginTop="-5dp"
+ android:text="8:00"
+ android:textColor="#C0C0C0"
+ android:textSize="10sp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tvDate" />
+
+
</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file