diff options
Diffstat (limited to 'Client')
4 files changed, 154 insertions, 75 deletions
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 5f99766..c9ed2f7 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 @@ -1,11 +1,14 @@  package com.example.brzodolokacije.Activities +import android.content.Context  import android.content.Intent  import android.graphics.Color  import android.graphics.drawable.ColorDrawable  import android.os.Bundle  import android.preference.PreferenceManager  import android.util.Log +import android.view.inputmethod.InputMethodManager +import android.widget.EditText  import android.widget.ImageView  import android.widget.TextView  import android.widget.Toast @@ -155,6 +158,10 @@ class ActivitySinglePost : AppCompatActivity() {          recyclerViewComments!!.layoutManager=layoutManagerComments          recyclerViewComments!!.adapter= adapterComments      } +    fun hideKeyboard(item: EditText){ +        var imm: InputMethodManager =this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager +        imm.hideSoftInputFromWindow(item.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) +    }      fun setRatingListeners() {              val emptyStar = R.drawable.empty_star @@ -255,6 +262,7 @@ class ActivitySinglePost : AppCompatActivity() {                      var newComment=response.body()!!                      requestGetComments(newComment)                      binding.NewComment.text.clear() +                    hideKeyboard(binding.NewComment)                  }else{                      if(response.errorBody()!=null)                          Log.d("main1",response.message().toString()) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt index 06713ec..731566f 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt @@ -8,15 +8,19 @@ import android.view.View  import android.view.ViewGroup  import android.view.inputmethod.InputMethodManager  import android.widget.EditText +import android.widget.Toast  import androidx.recyclerview.widget.LinearLayoutManager  import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide  import com.example.brzodolokacije.Activities.ActivitySinglePost +import com.example.brzodolokacije.Interfaces.IBackendApi  import com.example.brzodolokacije.Models.CommentReceive  import com.example.brzodolokacije.Models.CommentSend -import com.example.brzodolokacije.R +import com.example.brzodolokacije.Models.UserReceive  import com.example.brzodolokacije.Services.RetrofitHelper  import com.example.brzodolokacije.Services.SharedPreferencesHelper  import com.example.brzodolokacije.databinding.SingleCommentBinding +import kotlinx.android.synthetic.main.single_comment.view.*  import retrofit2.Call  import retrofit2.Response @@ -24,10 +28,14 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi      : RecyclerView.Adapter<CommentsAdapter.ViewHolder>(){      //constructer has one argument - list of objects that need to be displayed      //it is bound to xml of single item +    private var api: IBackendApi?=null +    private var token:String?=null      private lateinit var binding: SingleCommentBinding      override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {          val inflater = LayoutInflater.from(parent.context)          binding=SingleCommentBinding.inflate(inflater,parent,false) +        api=RetrofitHelper.getInstance() +        token=SharedPreferencesHelper.getValue("jwt",activity)          return ViewHolder(binding)      }      override fun onBindViewHolder(holder: ViewHolder, position: Int){ @@ -46,24 +54,37 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi              binding.apply {                  tvCommentAuthor.text=item.username                  tvCommentText.text=item.comment -                etReply.visibility= View.GONE -                etReply.forceLayout() +                Log.d("info",tvCommentText.text.toString()+binding.toString()) +                requestProfilePic(item) +                llReply.visibility=View.GONE +                llReply.forceLayout() +                if(item.parentId!=""){ +                    btnReply.visibility=View.GONE +                    btnReply.forceLayout() +                } +                else{ +                    btnReply.setOnClickListener { +                        llReply.visibility=View.VISIBLE +                        llReply.forceLayout() +                        etReply.requestFocus() +                    } +                }                  etReply.showSoftInputOnFocus=true                  etReply.setOnFocusChangeListener { _, focused ->                      if(!focused){ -                        etReply.visibility= View.GONE -                        etReply.forceLayout() -                        btnReply.setImageResource(R.drawable.reply) +                        llReply.visibility= View.GONE +                        llReply.forceLayout() +                        //btnReply.setImageResource(R.drawable.)                          hideKeyboard(etReply)                      }                      else{                          showKeyboard(etReply) -                        btnReply.setImageResource(R.drawable.post_comment) -                        btnReply.setOnClickListener{ +                        btnPostReply.setOnClickListener{                              if(etReply.text.isNotEmpty()){                                  val postId=(activity as ActivitySinglePost).post._id +                                Log.d("main",binding.toString())                                  val comment= CommentReceive(etReply.text.toString(),item._id) -                                requestAddComment(binding,comment,postId) +                                requestAddComment(comment,postId)                              }                              else{                                Log.d("komentari","greska") @@ -71,14 +92,10 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi                          }                      }                  } -                btnReply.setOnClickListener { -                    etReply.visibility=View.VISIBLE -                    etReply.forceLayout() -                    etReply.requestFocus() -                } +                  var rv: RecyclerView = rvReplies -                rv.setHasFixedSize(false) +                rv.setHasFixedSize(true)                  rv.layoutManager=LinearLayoutManager(activity,LinearLayoutManager.VERTICAL,false)                  if(item.replies!=null)                      rv.adapter=CommentsAdapter(item.replies as MutableList<CommentSend>,activity) @@ -88,14 +105,14 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi          }          fun showKeyboard(item:EditText){              var imm:InputMethodManager=activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager -            imm.showSoftInput(item,InputMethodManager.SHOW_FORCED) +            imm.showSoftInput(item,InputMethodManager.SHOW_IMPLICIT)          }          fun hideKeyboard(item: EditText){              var imm:InputMethodManager=activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager -            imm.hideSoftInputFromWindow(item.windowToken,InputMethodManager.HIDE_IMPLICIT_ONLY) +            imm.hideSoftInputFromWindow(item.windowToken,InputMethodManager.HIDE_NOT_ALWAYS)          } -        fun requestAddComment(binding:SingleCommentBinding,comment:CommentReceive,postId:String){ +        fun requestAddComment(comment:CommentReceive,postId:String){              val postApi= RetrofitHelper.getInstance()              val token= SharedPreferencesHelper.getValue("jwt", activity)              val request=postApi.addComment("Bearer "+token,postId,comment) @@ -103,9 +120,10 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi                  override fun onResponse(call: Call<CommentSend?>, response: Response<CommentSend?>) {                      if(response.isSuccessful){                          var newComment=response.body()!! -                        requestGetComments(binding,newComment) -                        binding.etReply.text.clear() -                        hideKeyboard(binding.etReply) +                        requestGetComments(newComment) +                        itemView.etReply.text.clear() +                        hideKeyboard(itemView.etReply) +                        itemView.etReply.clearFocus()                      }else{                          if(response.errorBody()!=null)                              Log.d("main1",response.message().toString()) @@ -120,12 +138,47 @@ class CommentsAdapter (val items : MutableList<CommentSend>,val activity: Activi              })          } -        private fun requestGetComments(binding:SingleCommentBinding,newComment: CommentSend) { -            var rv: RecyclerView = binding.rvReplies +        private fun requestGetComments(newComment: CommentSend) { +            var rv: RecyclerView = itemView.rvReplies              var adapter:CommentsAdapter=rv.adapter as CommentsAdapter              adapter.items.add(0,newComment)              rv.adapter=adapter              (activity as ActivitySinglePost).addedComment()          } + +        private fun requestProfilePic(item:CommentSend){ +            val request2=api?.getProfileFromId("Bearer "+token, +                item.userId +            ) +            request2?.enqueue(object : retrofit2.Callback<UserReceive?> { +                override fun onResponse( +                    call: Call<UserReceive?>, +                    response: Response<UserReceive?> +                ) { +                    if (response.isSuccessful) { +                        var user = response.body()!! +                        if (user.pfp != null) { +                            Glide.with(activity) +                                .load(RetrofitHelper.baseUrl + "/api/post/image/compress/" + user.pfp!!._id) +                                .circleCrop() +                                .into(itemView.ivPfp) +                        } +                    } else { +                        Toast.makeText( +                            activity, "los id", +                            Toast.LENGTH_LONG +                        ).show() +                        itemView.tvCommentAuthor.text = "nije nadjen korisnik" +                    } +                } + +                override fun onFailure(call: Call<UserReceive?>, t: Throwable) { +                    Toast.makeText( +                        activity, "neuspesan zahtev", +                        Toast.LENGTH_LONG +                    ).show() +                } +            }) +        }      }  }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml index e07345b..3824f69 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml @@ -5,17 +5,17 @@      xmlns:tools="http://schemas.android.com/tools"      android:orientation="vertical"      android:layout_width="match_parent" -    android:layout_height="match_parent" +    android:layout_height="wrap_content"      android:padding="@dimen/component_padding"      xmlns:app="http://schemas.android.com/apk/res-auto"      tools:context=".Activities.ActivitySinglePost"> -    <ScrollView +    <androidx.core.widget.NestedScrollView          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:fillViewport="true">      <androidx.constraintlayout.widget.ConstraintLayout          android:layout_width="match_parent" -        android:layout_height="match_parent"> +        android:layout_height="wrap_content">          <androidx.recyclerview.widget.RecyclerView          android:id="@+id/rvMain"          android:layout_width="match_parent" @@ -30,7 +30,6 @@  <androidx.constraintlayout.widget.ConstraintLayout      android:layout_width="match_parent"      android:layout_height="wrap_content" -    android:gravity="bottom"      app:layout_constraintTop_toBottomOf="@id/rvMain"      tools:layout_editor_absoluteX="0dp"> @@ -310,7 +309,7 @@              <androidx.recyclerview.widget.RecyclerView                  android:id="@+id/rvComments"                  android:layout_width="match_parent" -                android:layout_height="wrap_content" +                android:layout_height="0dp"                  android:nestedScrollingEnabled="false"                  app:layout_constraintTop_toBottomOf="@id/tvCommentLabel"> @@ -319,5 +318,5 @@      </androidx.constraintlayout.widget.ConstraintLayout>  </androidx.constraintlayout.widget.ConstraintLayout>  </androidx.constraintlayout.widget.ConstraintLayout> -</ScrollView> +</androidx.core.widget.NestedScrollView>  </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml index 51d9079..5e0dc03 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml @@ -3,66 +3,85 @@      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="wrap_content" +    android:orientation="vertical"      android:padding="@dimen/component_padding"      xmlns:app="http://schemas.android.com/apk/res-auto"> - -    <ImageView -        android:layout_width="50dp" -        android:layout_height="50dp" -        android:src="@drawable/ic_nav_profile" -        app:layout_constraintEnd_toStartOf="@+id/tvCommentText" -        app:layout_constraintHorizontal_bias="0.0" -        app:layout_constraintStart_toStartOf="parent" -        tools:layout_editor_absoluteY="27dp" /> -      <androidx.appcompat.widget.LinearLayoutCompat -        android:layout_width="wrap_content" +        android:layout_width="match_parent"          android:layout_height="wrap_content" -        android:orientation="vertical" -        android:layout_weight="1"> +        android:orientation="horizontal"> -        <TextView -            android:id="@+id/tvCommentAuthor" +        <ImageView +            android:id="@+id/ivPfp" +            android:layout_width="50dp" +            android:layout_height="50dp" +            android:src="@drawable/ic_nav_profile" +            app:layout_constraintEnd_toStartOf="@+id/tvCommentText" +            app:layout_constraintHorizontal_bias="0.0" +            app:layout_constraintStart_toStartOf="parent" +            android:scaleType="centerCrop" +            tools:layout_editor_absoluteY="27dp" /> +        <androidx.appcompat.widget.LinearLayoutCompat              android:layout_width="wrap_content"              android:layout_height="wrap_content" -            android:text="autor" -            android:textStyle="bold" -            android:padding="@dimen/text_padding"/> +            android:orientation="vertical" +            android:layout_weight="1"> -        <TextView -            android:id="@+id/tvCommentText" -            android:layout_width="match_parent" -            android:layout_height="wrap_content" -            android:padding="@dimen/text_padding" -            app:layout_constraintTop_toBottomOf="@id/tvCommentAuthor" -            tools:layout_editor_absoluteX="54dp" /> -        <androidx.appcompat.widget.LinearLayoutCompat -            android:layout_width="match_parent" -            android:layout_height="wrap_content" -            android:orientation="horizontal" -            android:layoutDirection="rtl"> -            <ImageButton -                android:layout_width="50dp" -                android:layout_height="50dp" -                android:src="@drawable/reply" -                android:layout_weight="0" -                android:id="@+id/btnReply" -                android:layout_gravity="end" -                android:backgroundTint="@color/white" -                android:scaleType="centerCrop"/> +            <TextView +                android:id="@+id/tvCommentAuthor" +                android:layout_width="wrap_content" +                android:layout_height="wrap_content" +                android:text="autor" +                android:textStyle="bold" +                android:padding="@dimen/text_padding"/> -            <EditText +            <TextView +                android:id="@+id/tvCommentText"                  android:layout_width="match_parent"                  android:layout_height="wrap_content" -                android:layout_weight="1" -                android:id="@+id/etReply" -                android:layoutDirection="ltr" -                android:hint="odgovor na komentar"/> +                android:padding="@dimen/text_padding" +                app:layout_constraintTop_toBottomOf="@id/tvCommentAuthor" +                tools:layout_editor_absoluteX="54dp" /> +          </androidx.appcompat.widget.LinearLayoutCompat> -        <androidx.recyclerview.widget.RecyclerView +        <ImageButton +            android:id="@+id/btnReply" +            android:layout_width="50dp" +            android:layout_height="50dp" +            android:layout_gravity="end" +            android:layout_weight="0" +            android:backgroundTint="@color/white" +            android:scaleType="centerCrop" +            android:src="@drawable/reply" /> + + + +    </androidx.appcompat.widget.LinearLayoutCompat> +    <androidx.appcompat.widget.LinearLayoutCompat +        android:layout_width="match_parent" +        android:layout_height="wrap_content" +        android:orientation="horizontal" +        android:id="@+id/llReply"> + +        <EditText              android:layout_width="match_parent"              android:layout_height="wrap_content" -            android:id="@+id/rvReplies"/> +            android:layout_weight="1" +            android:id="@+id/etReply" +            android:hint="odgovor na komentar"/> +        <ImageButton +            android:id="@+id/btnPostReply" +            android:layout_width="50dp" +            android:layout_height="50dp" +            android:layout_gravity="end" +            android:layout_weight="0" +            android:backgroundTint="@color/white" +            android:scaleType="centerCrop" +            android:src="@drawable/post_comment" />      </androidx.appcompat.widget.LinearLayoutCompat> +    <androidx.recyclerview.widget.RecyclerView +        android:layout_width="match_parent" +        android:layout_height="wrap_content" +        android:id="@+id/rvReplies"/>  </androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file  | 
