From a18cd1c5439780e84fa983b62cdaef8445df4542 Mon Sep 17 00:00:00 2001 From: Jelena Petrovic Date: Mon, 5 Dec 2022 07:15:23 +0100 Subject: Prepravljen izgled četa i liste četova, omogućeno vraćanje na pritisak dugmeta u uglu ekrana, dodat prikaz zadnje poruke i njenog datuma/vremena u listi četova #70 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/src/main/AndroidManifest.xml | 2 +- .../brzodolokacije/Activities/ChatActivity.kt | 6 +- .../Activities/ChatActivityConversation.kt | 161 +++++++++++---------- .../brzodolokacije/Adapters/ChatPreviewsAdapter.kt | 42 +++++- .../java/com/example/brzodolokacije/Models/Chat.kt | 3 +- .../com/example/brzodolokacije/chat/DBHelper.kt | 88 +++++++++-- .../app/src/main/res/drawable/expand.png | Bin 0 -> 2326 bytes .../app/src/main/res/drawable/shrink.png | Bin 0 -> 2322 bytes .../app/src/main/res/layout/activity_chat.xml | 31 ++-- .../main/res/layout/activity_chat_conversation.xml | 134 ++++++++++------- .../app/src/main/res/layout/chat_message.xml | 61 +++----- .../app/src/main/res/layout/chat_message_other.xml | 62 +++----- .../app/src/main/res/layout/chat_preview.xml | 61 ++++++-- .../app/src/main/res/values/dimens.xml | 1 + 14 files changed, 408 insertions(+), 244 deletions(-) create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/expand.png create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/shrink.png (limited to 'Client') diff --git a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml index 2241c80..4555917 100644 --- a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml +++ b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml @@ -56,7 +56,7 @@ android:name=".Activities.ChatActivityConversation" android:exported="false" android:screenOrientation="portrait" - android:windowSoftInputMode="stateVisible|adjustPan"> + android:windowSoftInputMode="stateAlwaysHidden|adjustResize"> 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 951cbb4..14a4ba5 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 @@ -20,6 +20,7 @@ import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.chat.SignalRListener import com.example.brzodolokacije.databinding.ActivityChatBinding import retrofit2.Call +import retrofit2.Callback import retrofit2.Response import java.util.* @@ -64,6 +65,9 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { intent.putExtra("receiverId","") startActivity(intent) } + findViewById(R.id.btnBack).setOnClickListener { + finish() + } } fun requestForChats(){ @@ -77,7 +81,7 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { val api=RetrofitHelper.getInstance() val token=SharedPreferencesHelper.getValue("jwt",this@ChatActivity) val request2=api?.getNewMessages("Bearer "+token) - request2?.enqueue(object : retrofit2.Callback?> { + request2?.enqueue(object : Callback?> { override fun onResponse(call: Call?>, response: Response?>) { if(response.isSuccessful()){ var messages=response.body() 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 19fd836..985735f 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 @@ -1,5 +1,6 @@ package com.example.brzodolokacije.Activities +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View @@ -37,6 +38,7 @@ class ChatActivityConversation : AppCompatActivity() { var dbConnection: DBHelper?=null var webSocketConnection:SignalRListener?=null var items:MutableList?=mutableListOf() + var userImage:Bitmap?=null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -44,6 +46,7 @@ class ChatActivityConversation : AppCompatActivity() { setContentView(binding.root) userId=intent.extras?.get("userId").toString() receiverUsername=intent.extras?.get("username").toString() + userImage=intent.extras?.get("pfp") as Bitmap? dbConnection=DBHelper.getInstance(this@ChatActivityConversation) setHeader() setRecyclerView() @@ -56,85 +59,89 @@ class ChatActivityConversation : AppCompatActivity() { private fun setListeners() { findViewById(R.id.btnSendMessage).setOnClickListener { var token=SharedPreferencesHelper.getValue("jwt",this@ChatActivityConversation) - var messageContent=findViewById(R.id.etNewMessage).text.toString() + var messageContent=findViewById(R.id.etNewMessage).text.trim().toString() val Api= RetrofitHelper.getInstance() - if(userId.isNullOrEmpty() || userId.equals("null")){ - //zahtev sa username=om - receiverUsername=findViewById(R.id.etReceiverUsername).text.toString() - val request=Api.getProfile("Bearer "+token, - receiverUsername!! - ) - request.enqueue(object : retrofit2.Callback { - override fun onResponse(call: Call, response: Response) { - if(response.isSuccessful()){ - //zahtev da se posalje poruka - userId=response.body()?._id - setHeader() - var message= MessageSend(userId!!,messageContent) - val request2=Api.sendMessage("Bearer "+token, - message - ) - request2.enqueue(object : retrofit2.Callback { - override fun onResponse(call: Call, response: Response) { - 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() + if(!messageContent.isNullOrEmpty()){ + if(userId.isNullOrEmpty() || userId.equals("null")){ + //zahtev sa username=om + receiverUsername=findViewById(R.id.etReceiverUsername).text.toString() + val request=Api.getProfile("Bearer "+token, + receiverUsername!! + ) + request.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + if(response.isSuccessful()){ + //zahtev da se posalje poruka + var user:UserReceive=response.body()!! + userId=user._id + setHeader() + var message= MessageSend(userId!!,messageContent) + val request2=Api.sendMessage("Bearer "+token, + message + ) + request2.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + 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!!,username=user.username) + requestMessages() + binding.etNewMessage.text?.clear() + } + else{ + Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime1.",Toast.LENGTH_LONG).show() + } } - else{ - Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime1.",Toast.LENGTH_LONG).show() + + override fun onFailure(call: Call, t: Throwable) { + Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime2.",Toast.LENGTH_LONG).show() } - } + }) + } + else{ + Log.d("main",response.message()) + //Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime3.",Toast.LENGTH_LONG).show() + } + } - override fun onFailure(call: Call, t: Throwable) { - Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime2.",Toast.LENGTH_LONG).show() - } - }) + override fun onFailure(call: Call, t: Throwable) { + Toast.makeText(this@ChatActivityConversation,"fail.",Toast.LENGTH_LONG).show() } - else{ - Log.d("main",response.message()) - //Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime3.",Toast.LENGTH_LONG).show() + }) + } + else{ + //zahtev da se posalje poruka + var message= MessageSend(userId!!,messageContent) + val request2=Api.sendMessage("Bearer "+token, + message + ) + request2.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + 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!!,username=receiverUsername) + requestMessages() + binding.etNewMessage.text?.clear() + } + else{ + Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime.",Toast.LENGTH_LONG).show() + } } - } - override fun onFailure(call: Call, t: Throwable) { - Toast.makeText(this@ChatActivityConversation,"fail.",Toast.LENGTH_LONG).show() - } - }) - } - else{ - //zahtev da se posalje poruka - var message= MessageSend(userId!!,messageContent) - val request2=Api.sendMessage("Bearer "+token, - message - ) - request2.enqueue(object : retrofit2.Callback { - override fun onResponse(call: Call, response: Response) { - 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() - } - else{ + override fun onFailure(call: Call, t: Throwable) { Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime.",Toast.LENGTH_LONG).show() } - } + }) + } - override fun onFailure(call: Call, t: Throwable) { - Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime.",Toast.LENGTH_LONG).show() - } - }) } } @@ -144,19 +151,24 @@ class ChatActivityConversation : AppCompatActivity() { if(userId.isNullOrEmpty() || userId.equals("null")){ binding.cvParentUsername.visibility= View.VISIBLE binding.cvParentUsername.forceLayout() - binding.tvFragmentTitle.visibility= View.GONE - binding.tvFragmentTitle.invalidate() - binding.tvFragmentTitle.forceLayout() + binding.llHeader.visibility= View.GONE + binding.llHeader.invalidate() + binding.llHeader.forceLayout() } else{ - binding.tvFragmentTitle.visibility= View.VISIBLE - binding.tvFragmentTitle.invalidate() - binding.tvFragmentTitle.forceLayout() + binding.llHeader.visibility= View.VISIBLE + binding.llHeader.invalidate() + binding.llHeader.forceLayout() binding.tvFragmentTitle.text=receiverUsername binding.tvFragmentTitle.invalidate() binding.cvParentUsername.visibility= View.GONE binding.cvParentUsername.forceLayout() } + binding.btnBack.setOnClickListener { + finish() + } + if(userImage!=null) + binding.ivUserImage.setImageBitmap(userImage) } fun setRecyclerView(setParams:Boolean=true){ MainScope().launch { @@ -173,6 +185,7 @@ class ChatActivityConversation : AppCompatActivity() { } catch (e: Exception) { Log.d("error", e.message!!) } + recyclerView?.addOnLayoutChangeListener { _, i, i2, i3, i4, i5, i6, i7, i8 -> recyclerView?.scrollToPosition(items?.size?.minus(1) ?: 0) } recyclerView?.scrollToPosition(items?.size?.minus(1) ?: 0) } } 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 6e62180..be564f4 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 @@ -5,6 +5,8 @@ import android.graphics.Typeface import android.view.LayoutInflater import android.view.ViewGroup import android.widget.Toast +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.exam.DBHelper @@ -13,12 +15,14 @@ import com.example.brzodolokacije.Activities.ChatActivityConversation import com.example.brzodolokacije.Interfaces.IBackendApi import com.example.brzodolokacije.Models.ChatPreview import com.example.brzodolokacije.Models.UserReceive +import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.databinding.ChatPreviewBinding import kotlinx.android.synthetic.main.chat_preview.view.* import retrofit2.Call import retrofit2.Response +import java.util.* class ChatPreviewsAdapter (val items : MutableList,val activity:ChatActivity) : RecyclerView.Adapter(){ @@ -42,6 +46,7 @@ class ChatPreviewsAdapter (val items : MutableList,val activity:Cha val intent: Intent = Intent(activity, ChatActivityConversation::class.java) intent.putExtra("userId",items[position].userId) intent.putExtra("username",holder.itemView.tvUsername.text) + intent.putExtra("pfp",holder.itemView.ivUserImage.drawable.toBitmap(200,200)) db.readContact(items[position].userId) items[position].read=true holder.itemView.tvUsername.typeface= Typeface.DEFAULT @@ -61,11 +66,12 @@ class ChatPreviewsAdapter (val items : MutableList,val activity:Cha //zahtev da se posalje poruka var user=response.body()!! if(!item.read) - tvUsername.typeface= Typeface.DEFAULT_BOLD + setUnread() tvUsername.text=user.username if(user.pfp!=null) { Glide.with(activity) .load(RetrofitHelper.baseUrl + "/api/post/image/" + user.pfp!!._id) + .circleCrop() .into(ivUserImage) } } @@ -81,7 +87,41 @@ class ChatPreviewsAdapter (val items : MutableList,val activity:Cha Toast.LENGTH_LONG).show() } }) + var lastMessage=db.getLastMessage(item.userId) + tvUsername.text=item.username + if(lastMessage!=null){ + tvLastMessage.text=lastMessage.messagge + if(layoutPosition==0 || isDifferentDays(lastMessage.usableTimeStamp,Calendar.getInstance())){ + tvLastMessageDate.text=lastMessage.usableTimeStamp.get(Calendar.HOUR_OF_DAY).toString() + ":" + lastMessage.usableTimeStamp.get( + Calendar.MINUTE).toString() + } + else{ + tvLastMessageDate.text=lastMessage.usableTimeStamp.get(Calendar.DAY_OF_MONTH).toString()+"/"+ + (lastMessage.usableTimeStamp.get(Calendar.MONTH)+1).toString()+"/"+ + lastMessage.usableTimeStamp.get(Calendar.YEAR).toString() + } + + } } } + 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 + } + fun setUnread(){ + itemView.tvUsername.typeface= Typeface.DEFAULT_BOLD + itemView.tvUsername.invalidate() + itemView.tvLastMessage.typeface= Typeface.DEFAULT_BOLD + itemView.tvLastMessage.invalidate() + itemView.tvLastMessageDate.typeface= Typeface.DEFAULT_BOLD + itemView.tvLastMessageDate.invalidate() + itemView.readIndicator.background= ContextCompat.getDrawable(activity,R.color.dark_blue_transparent) + itemView.readIndicator.invalidate() + } } } \ No newline at end of file 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 6725c15..f3af84c 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 @@ -24,5 +24,6 @@ data class Message( data class ChatPreview( var userId:String, - var read:Boolean + var read:Boolean, + var username:String ) \ No newline at end of file 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 a3d5a13..041eebb 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 @@ -9,6 +9,11 @@ import android.database.sqlite.SQLiteOpenHelper import android.util.Log import com.example.brzodolokacije.Models.ChatPreview import com.example.brzodolokacije.Models.Message +import com.example.brzodolokacije.Models.UserReceive +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper +import retrofit2.Call +import retrofit2.Response import java.util.* @@ -17,7 +22,7 @@ class DBHelper : var db:SQLiteDatabase?=null - constructor(context: Context, factory: SQLiteDatabase.CursorFactory?):super(context, DATABASE_NAME, factory,3){ + constructor(context: Context, factory: SQLiteDatabase.CursorFactory?):super(context, DATABASE_NAME, factory,5){ db=readableDatabase } @@ -28,8 +33,10 @@ class DBHelper : //database tables val CONTACTS_TABLE_NAME = "contacts" val MESSAGES_TABLE_NAME = "messages" + var activity:Activity?=null private var instance:DBHelper?=null fun getInstance(activity: Activity):DBHelper{ + this.activity =activity if(instance==null){ instance= DBHelper(activity,null) } @@ -41,7 +48,8 @@ class DBHelper : if(!doesTableExist(CONTACTS_TABLE_NAME,db)){ var sql:String="CREATE TABLE "+ CONTACTS_TABLE_NAME+" (" + "userId " +"TEXT PRIMARY KEY,"+ - "read " +"INTEGER"+ + "read " +"INTEGER,"+ + "username "+"TEXT"+ ")" db?.execSQL(sql) } @@ -77,7 +85,7 @@ class DBHelper : onCreate(db) } - fun addMessage(message: Message, sent:Boolean=true){ + fun addMessage(message: Message, sent:Boolean=true,username:String?=null){ onCreate(db) if(!message._id.isNullOrEmpty() && message.senderId==message.receiverId){ Log.d("main", "ne zapisuje se dupla poruka") @@ -101,9 +109,41 @@ class DBHelper : var id:String id = if(sent) message.receiverId else message.senderId var read:Int=if(sent) 1 else 0 - sql="INSERT INTO "+ CONTACTS_TABLE_NAME+"(userId,read) VALUES('"+id+"','"+ - read+"')" - db?.execSQL(sql) + if(username==null){ + //request + var api=RetrofitHelper.getInstance() + var token= activity?.let { SharedPreferencesHelper.getValue("jwt", it) } + val request2=api.getProfileFromId("Bearer "+token, + message.senderId + ) + request2?.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + if(response.isSuccessful()){ + var user=response.body()!! + sql="INSERT INTO "+ CONTACTS_TABLE_NAME+"(userId,read,username) VALUES('"+id+"','"+ + read+"','"+user.username+"')" + db?.execSQL(sql) + } + else{ + sql="INSERT INTO "+ CONTACTS_TABLE_NAME+"(userId,read) VALUES('"+id+"','"+ + read+"')" + db?.execSQL(sql) + } + } + + override fun onFailure(call: Call, t: Throwable) { + sql="INSERT INTO "+ CONTACTS_TABLE_NAME+"(userId,read) VALUES('"+id+"','"+ + read+"')" + db?.execSQL(sql) + } + }) + } + else{ + sql="INSERT INTO "+ CONTACTS_TABLE_NAME+"(userId,read,username) VALUES('"+id+"','"+ + read+"','"+username+"')" + db?.execSQL(sql) + } + } else{ if(!sent) @@ -111,7 +151,36 @@ class DBHelper : } } } - fun getMessages(userId:String, self:Boolean=false): MutableList? { + fun getLastMessage(userId:String): Message? { + onCreate(db) + var sql:String = "SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"'"+" OR receiverId='"+userId+"'"+" ORDER BY timestamp DESC LIMIT 1" + var cursor=db?.rawQuery(sql,null) + if(cursor?.count!! >0){ + var msg:Message + var idIndex=cursor.getColumnIndexOrThrow("_id") + var senderIdIndex=cursor.getColumnIndexOrThrow("senderId") + var receiverIdIndex=cursor.getColumnIndexOrThrow("receiverId") + var messageIndex=cursor.getColumnIndexOrThrow("messagge") + var timestampIndex=cursor.getColumnIndexOrThrow("timestamp") + cursor.moveToNext() + var cal:Calendar= Calendar.getInstance() + cal.timeInMillis=cursor.getLong(timestampIndex) + msg=Message( + cursor.getString(idIndex), + cursor.getString(senderIdIndex), + cursor.getString(receiverIdIndex), + cursor.getString(messageIndex), + cal.time, + cal + ) + + Log.d("main",cal.time.toString()) + readContact(userId) + return msg + } + return null + } + fun getMessages(userId:String,self:Boolean=false): MutableList? { onCreate(db) var sql:String if(!self) @@ -137,8 +206,8 @@ class DBHelper : cursor.getString(messageIndex), cal.time, cal - ) ) + ) Log.d("main",cal.time.toString()) } readContact(userId) @@ -155,8 +224,9 @@ class DBHelper : var contactList:MutableList =mutableListOf() var userIdIndex=cursor.getColumnIndexOrThrow("userId") var readIndex=cursor.getColumnIndexOrThrow("read") + var usernameIndex=cursor.getColumnIndexOrThrow("username") while(cursor.moveToNext()){ - contactList.add(ChatPreview(cursor.getString(userIdIndex),cursor.getInt(readIndex)==1)) + contactList.add(ChatPreview(cursor.getString(userIdIndex),cursor.getInt(readIndex)==1,cursor.getString(usernameIndex))) } Log.d("main",contactList.size.toString()) return contactList diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/expand.png b/Client/BrzoDoLokacije/app/src/main/res/drawable/expand.png new file mode 100644 index 0000000..2051733 Binary files /dev/null and b/Client/BrzoDoLokacije/app/src/main/res/drawable/expand.png differ diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/shrink.png b/Client/BrzoDoLokacije/app/src/main/res/drawable/shrink.png new file mode 100644 index 0000000..d4c07e1 Binary files /dev/null and b/Client/BrzoDoLokacije/app/src/main/res/drawable/shrink.png differ diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat.xml index 680bada..acdab4a 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat.xml @@ -18,16 +18,20 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + - @@ -36,13 +40,20 @@ android:id="@+id/tvActivityShowFollowersOrFollowingShow" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:layout_marginEnd="268dp" + android:layout_gravity="center_vertical" + android:layout_weight="1" android:text="Poruke" android:textSize="25dp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml index 72060f7..4dcab31 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml @@ -1,69 +1,94 @@ - - - - - - - - + + android:layout_gravity="center_vertical" + android:clickable="true" + android:src="@drawable/ic_baseline_arrow_back" + android:background="@null" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" /> + + + + + + + + + + + + + + - - + android:animateLayoutChanges="true" + android:layout_weight="1"> + app:layout_constraintBottom_toBottomOf="parent"> @@ -72,14 +97,12 @@ android:id="@+id/cvParentMessageEdit" android:layout_width="match_parent" android:layout_height="40dp" + android:layout_marginBottom="5dp" android:layout_marginStart="16dp" android:layout_marginTop="10dp" android:layout_marginEnd="16dp" android:elevation="0dp" - app:cardCornerRadius="20dp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent"> + app:cardCornerRadius="20dp"> + android:paddingLeft="15dp" + tools:ignore="TouchTargetSizeCheck" + android:autofillHints="emailAddress"/> + app:cornerRadius="16dp" + tools:ignore="SpeakableTextPresentCheck" /> - \ No newline at end of file + \ No newline at end of file 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 7858e94..f7ef08c 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml @@ -1,42 +1,15 @@ - - - - - + android:layout_width="match_parent"> + app:layout_constraintTop_toTopOf="parent"/> - - - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvDate"> + + + android:layout_width="match_parent"> + app:layout_constraintTop_toTopOf="parent"/> - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvDate"> - - - - - + android:backgroundTint="#eef1f6" + android:padding="5dp" + android:paddingHorizontal="15dp" + android:text="blabla" + app:layout_constraintEnd_toEndOf="parent" /> - + app:layout_constraintBottom_toBottomOf="@+id/cvContainer" + app:layout_constraintStart_toEndOf="@+id/cvContainer" /> \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml index 35431ff..c995b4b 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml @@ -1,19 +1,54 @@ - - + - + - - \ No newline at end of file + android:layout_weight="1" + android:orientation="vertical"> + + + + + + + \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml b/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml index 181591b..5f0b4e1 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml @@ -2,6 +2,7 @@ 16dp 5dp 20dp + 18dp 10dp 16dp 8dp -- cgit v1.2.3