From 287662ae7ad688229c222d5d81d1c4386faf0e71 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Tue, 6 Dec 2022 09:58:07 +0100 Subject: Povezana promena korisničkog imena, imena i profilne slike. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Activities/ActivityChangeUserData.kt | 214 ++++++++++++++++++--- .../brzodolokacije/Interfaces/IBackendApi.kt | 3 + .../main/res/drawable/ic_outline_password_24.xml | 5 + .../main/res/layout/activity_change_user_data.xml | 38 ++-- 4 files changed, 207 insertions(+), 53 deletions(-) create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_password_24.xml (limited to 'Client') diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangeUserData.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangeUserData.kt index 3dee6ac..d84b850 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangeUserData.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangeUserData.kt @@ -1,6 +1,8 @@ package com.example.brzodolokacije.Activities +import android.content.Intent import android.graphics.Color +import android.net.Uri import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log @@ -10,13 +12,20 @@ import android.widget.TextView import android.widget.Toast import androidx.core.view.isGone import androidx.core.view.isVisible +import com.bumptech.glide.Glide +import com.exam.DBHelper.Companion.activity import com.example.brzodolokacije.Models.UserReceive import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.ResponseBody import retrofit2.Call import retrofit2.Callback import retrofit2.Response +import java.io.File class ActivityChangeUserData : AppCompatActivity() { private lateinit var username:EditText @@ -27,11 +36,15 @@ class ActivityChangeUserData : AppCompatActivity() { private lateinit var confirmUsername:ImageView private lateinit var errorName:TextView private lateinit var errorUsername:TextView + private lateinit var back:ImageView + private lateinit var profilePicture:ImageView + private lateinit var changeProfilePicture:ImageView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_change_user_data) + //finish() username=findViewById(R.id.tvActivityChangeUserDataUsername) name=findViewById(R.id.tvActivityChangeUserDataName) editName=findViewById(R.id.btnActivityChangeUserDataName) @@ -40,6 +53,9 @@ class ActivityChangeUserData : AppCompatActivity() { confirmUsername=findViewById(R.id.btnActivityChangeUserDataUsernameConfirm) errorName=findViewById(R.id.btnActivityChangeUserDataNameError) errorUsername=findViewById(R.id.btnActivityChangeUserDataUsernameError) + back=findViewById(R.id.btnBackToUser) + profilePicture=findViewById(R.id.tvActivityChangeUserDataProfilePicture) + changeProfilePicture=findViewById(R.id.ChangeProfileEditImageEdit) editUsername.isClickable=true editUsername.isVisible=true @@ -49,7 +65,17 @@ class ActivityChangeUserData : AppCompatActivity() { confirmUsername.isVisible=false confirmUsername.isEnabled=false confirmUsername.isGone=true + errorUsername.isVisible=false + editName.isClickable=true + editName.isVisible=true + editName.isEnabled=true + editName.isGone=false + confirmName.isClickable=false + confirmName.isVisible=false + confirmName.isEnabled=false + confirmName.isGone=true + errorName.isVisible=false getUser() editUsername.setOnClickListener{ @@ -64,44 +90,38 @@ class ActivityChangeUserData : AppCompatActivity() { confirmUsername.isGone=false //dodati on change listener + confirmUsername.setOnClickListener { - val api = RetrofitHelper.getInstance() - val token = SharedPreferencesHelper.getValue("jwt", this@ActivityChangeUserData) - var data = api.changeMyUsername("Bearer " + token,username.toString().trim()); - data.enqueue(object : Callback { - override fun onResponse( - call: Call, - response: Response - ) { - var res=response.body()!! - Log.d("res",res.toString()) - if(res==-1){ - errorUsername.setText("Izaberite drugo korisničko ime") - errorUsername.setTextColor(Color.RED) - } - else if(res==-2){ - errorUsername.setText("Nije moguće promeniti korisničko ime") - errorUsername.setTextColor(Color.RED) - } - else if(res==1){ - errorUsername.setText("Korisničko ime je promenjeno") - errorUsername.setTextColor(Color.GREEN) - confirmUsername.isClickable=false - confirmUsername.isVisible=false - editUsername.isClickable=true - editUsername.isVisible=true - } - } + changeUsername() + getUser() - override fun onFailure(call: Call, t: Throwable) { - Log.d("changeUsername","failllllllllllllllllllllll") + } + } - } - }) + changeProfilePicture.setOnClickListener { + addProfilePicture() + } + + editName.setOnClickListener{ + name.setText("") + editName.isClickable=false + editName.isVisible=false + editName.isEnabled=false + editName.isGone=true + confirmName.isClickable=true + confirmName.isVisible=true + confirmName.isEnabled=true + confirmName.isGone=false + + confirmName.setOnClickListener { + changeName() } } + back.setOnClickListener { + finish() + } } @@ -116,12 +136,144 @@ class ActivityChangeUserData : AppCompatActivity() { response: Response ) { var user=response.body()!! + username.setText(user.username) name.setText(user.name) + if(user.pfp!=null) { + Glide.with(this@ActivityChangeUserData) + .load(RetrofitHelper.baseUrl + "/api/post/image/" + user.pfp!!._id) + .circleCrop()//Round image + .into(profilePicture) + } } override fun onFailure(call: Call, t: Throwable) {} }) } + + fun changeUsername(){ + val api = RetrofitHelper.getInstance() + val token = SharedPreferencesHelper.getValue("jwt", this@ActivityChangeUserData) + var data = api.changeMyUsername("Bearer " + token,username.text.trim().toString()); + data.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + var res=response.body()!! + Log.d("res",res.toString()) + if(res==-1){ + errorUsername.isVisible=true + errorUsername.isVisible=true + errorUsername.setText("Izaberite drugo korisničko ime") + errorUsername.setTextColor(Color.RED) + } + else if(res==-2){ + errorUsername.isVisible=true + errorUsername.isVisible=true + errorUsername.setText("Nije moguće promeniti korisničko ime") + errorUsername.setTextColor(Color.RED) + } + else if(res==1){ + errorUsername.isVisible=true + errorUsername.isVisible=true + errorUsername.setText("Korisničko ime je promenjeno") + errorUsername.setTextColor(Color.GREEN) + confirmUsername.isClickable=false + confirmUsername.isVisible=false + confirmUsername.isEnabled=false + confirmUsername.isGone=true + editUsername.isClickable=true + editUsername.isVisible=true + editUsername.isEnabled=true + editUsername.isGone=false + getUser() + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.d("changeUsername","failllllllllllllllllllllll") + + } + }) + } + + fun changeName(){ + val api = RetrofitHelper.getInstance() + val token = SharedPreferencesHelper.getValue("jwt", this@ActivityChangeUserData) + var data = api.changeMyName("Bearer " + token,name.text.trim().toString()); + data.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + var res=response.body()!! + Log.d("res",res.toString()) + if(res==false){ + errorName.isVisible=true + errorName.isVisible=true + errorName.setText("Nije moguće promeniti ime") + errorName.setTextColor(Color.RED) + } + else if(res){ + errorName.isVisible=true + errorName.isVisible=true + errorName.setText("Ime je promenjeno") + errorName.setTextColor(Color.GREEN) + confirmName.isClickable=false + confirmName.isVisible=false + confirmName.isEnabled=false + confirmName.isGone=true + editName.isClickable=true + editName.isVisible=true + editName.isEnabled=true + editName.isGone=false + getUser() + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.d("changename","faillllllllll") + + } + }) + } + private fun addProfilePicture(){ + val intent= Intent(Intent.ACTION_PICK) + intent.action = Intent.ACTION_GET_CONTENT + intent.type="image/*" + startActivityForResult(Intent.createChooser(intent,"Izaberi profilnu sliku"),201) + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + //nakon otvaranja + if(requestCode==201 && resultCode== AppCompatActivity.RESULT_OK) { + var imageUri = data!!.data + + val api =RetrofitHelper.getInstance() + var inputStream=(imageUri?.let { + this@ActivityChangeUserData.getContentResolver().openInputStream( + it + ) + }) + val file: File = File.createTempFile("temp","pfp") + file!!.writeBytes(inputStream!!.readBytes()) + var imageReq= RequestBody.create("image/*".toMediaTypeOrNull(),file) + val imageBody: MultipartBody.Part = MultipartBody.Part.createFormData("image", file.name, imageReq) + val token= SharedPreferencesHelper.getValue("jwt", this@ActivityChangeUserData) + val req=api.setPfp("Bearer "+token,imageBody) + + req.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + if(response.isSuccessful()){ + getUser() + } + } + override fun onFailure(call: Call, t: Throwable) { + + } + }) + } + } } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt index 39527f2..7ddf047 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt @@ -115,4 +115,7 @@ interface IBackendApi { @GET("/api/user/{newUsername}/changeMyUsername") fun changeMyUsername(@Header("Authorization") authHeader:String,@Path("newUsername") newUsername:String):Call + @GET("/api/user/{newName}/changeMyName") + fun changeMyName(@Header("Authorization") authHeader:String,@Path("newName") newName:String):Call + } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_password_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_password_24.xml new file mode 100644 index 0000000..267f930 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_password_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_user_data.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_user_data.xml index 39362b7..2ade677 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_user_data.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_user_data.xml @@ -8,7 +8,7 @@ tools:context=".Activities.ActivityChangeUserData"> - -