From 8e563f959c168a9778658c5fa2a2b143730d44fa Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Tue, 6 Dec 2022 04:17:14 +0100 Subject: Dodate funkcije za izmenu korisničkog imena i imena na back-u. Dodata aktivnost za izmenu korisničkog naloga. Izmenjen fragment myProfileInfo. Izmenjen FragmentProfile. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/Api/Api/Controllers/UserController.cs | 18 +++ Backend/Api/Api/Interfaces/IUserService.cs | 4 + Backend/Api/Api/Services/UserService.cs | 50 ++++++ .../.idea/deploymentTargetDropDown.xml | 2 +- .../Activities/ActivityChangeUserData.kt | 116 ++++++++++++++ .../Activities/ActivitySinglePost.kt | 6 +- .../Fragments/FragmentMyProfileInfo.kt | 31 ++-- .../brzodolokacije/Interfaces/IBackendApi.kt | 3 + .../main/res/drawable/ic_baseline_logout_24.xml | 5 + .../res/drawable/ic_outline_account_circle_24.xml | 6 + .../res/drawable/ic_outline_change_circle_24.xml | 5 + .../src/main/res/drawable/ic_outline_share_24.xml | 5 + .../src/main/res/drawable/ic_outline_stats_24.xml | 5 + .../src/main/res/drawable/ic_round_check_24.xml | 5 + .../res/drawable/ic_round_favorite_border_24.xml | 5 + .../main/res/layout/activity_change_user_data.xml | 71 ++++++++- .../src/main/res/layout/activity_user_profile.xml | 47 +++--- .../main/res/layout/fragment_my_profile_info.xml | 65 ++++++-- .../app/src/main/res/layout/fragment_profile.xml | 175 +++++++++++---------- .../app/src/main/res/values/styles.xml | 17 ++ 20 files changed, 489 insertions(+), 152 deletions(-) create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_logout_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_account_circle_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_change_circle_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_share_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_stats_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_check_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_favorite_border_24.xml diff --git a/Backend/Api/Api/Controllers/UserController.cs b/Backend/Api/Api/Controllers/UserController.cs index 97f2f8b..4937467 100644 --- a/Backend/Api/Api/Controllers/UserController.cs +++ b/Backend/Api/Api/Controllers/UserController.cs @@ -146,5 +146,23 @@ namespace Api.Controllers return Ok(tosend); return BadRequest(); } + + [HttpGet("{newUsername}/profile/changeMyUsername")] + [Authorize(Roles = "User")] + public async Task> ChangeMyProfileUsername(string newUsername) + { + return await _userService.ChangeMyProfileUsername(newUsername); + } + + + [HttpGet("{id}/changeMyName")] + [Authorize(Roles = "User")] + public async Task> ChangeMyProfileName(string newName) + { + return Ok(await _userService.ChangeMyProfileName(newName)); + } + + + } } diff --git a/Backend/Api/Api/Interfaces/IUserService.cs b/Backend/Api/Api/Interfaces/IUserService.cs index 95dd46d..f4954e0 100644 --- a/Backend/Api/Api/Interfaces/IUserService.cs +++ b/Backend/Api/Api/Interfaces/IUserService.cs @@ -37,5 +37,9 @@ namespace Api.Interfaces Task> GetMyFollowers(); + Task ChangeMyProfileUsername(String newUsername); + Task ChangeMyProfileName(String newUsername); + + } } diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs index 666dd98..8597503 100644 --- a/Backend/Api/Api/Services/UserService.cs +++ b/Backend/Api/Api/Services/UserService.cs @@ -664,6 +664,56 @@ namespace Api.Services return null; } + public async Task ChangeMyProfileUsername(string newUsername) + { + string myId = null; + + if (_httpContext.HttpContext.User.FindFirstValue("id") != null) + { + myId = _httpContext.HttpContext.User.FindFirstValue("id").ToString(); + } + User u = await _users.Find(user => user._id == myId).FirstOrDefaultAsync(); + if (u != null) + { + + //da li username vec postoji? + if (await _users.Find(x => x.username == newUsername).FirstOrDefaultAsync() != null) + { + //vec postoji korisnik sa navedenim korisnickim imenom + return -1; + } + else + { + u.username = newUsername; + await _users.ReplaceOneAsync(x => x._id == u._id, u); + return 1; + } + + } + return -2; + + } + + public async Task ChangeMyProfileName(string newName) + { + string myId = null; + if (_httpContext.HttpContext.User.FindFirstValue("id") != null) + { + myId = _httpContext.HttpContext.User.FindFirstValue("id").ToString(); + } + User u = await _users.Find(user => user._id == myId).FirstOrDefaultAsync(); + if (u != null) + { + + u.name = newName; + await _users.ReplaceOneAsync(x => x._id == u._id, u); + return true; + + } + return false; + } + + } } diff --git a/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml b/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml index 394c76a..883083b 100644 --- a/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml +++ b/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file 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 820ccfc..3dee6ac 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,11 +1,127 @@ package com.example.brzodolokacije.Activities +import android.graphics.Color import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.util.Log +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.core.view.isGone +import androidx.core.view.isVisible +import com.example.brzodolokacije.Models.UserReceive +import com.example.brzodolokacije.R +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response class ActivityChangeUserData : AppCompatActivity() { + private lateinit var username:EditText + private lateinit var name:EditText + private lateinit var editName:ImageView + private lateinit var editUsername:ImageView + private lateinit var confirmName:ImageView + private lateinit var confirmUsername:ImageView + private lateinit var errorName:TextView + private lateinit var errorUsername:TextView + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_change_user_data) + + username=findViewById(R.id.tvActivityChangeUserDataUsername) + name=findViewById(R.id.tvActivityChangeUserDataName) + editName=findViewById(R.id.btnActivityChangeUserDataName) + editUsername=findViewById(R.id.btnActivityChangeUserDataUsername) + confirmName=findViewById(R.id.btnActivityChangeUserDataNameConfirm) + confirmUsername=findViewById(R.id.btnActivityChangeUserDataUsernameConfirm) + errorName=findViewById(R.id.btnActivityChangeUserDataNameError) + errorUsername=findViewById(R.id.btnActivityChangeUserDataUsernameError) + + editUsername.isClickable=true + editUsername.isVisible=true + editUsername.isEnabled=true + editUsername.isGone=false + confirmUsername.isClickable=false + confirmUsername.isVisible=false + confirmUsername.isEnabled=false + confirmUsername.isGone=true + + getUser() + + editUsername.setOnClickListener{ + username.setText("") + editUsername.isClickable=false + editUsername.isVisible=false + editUsername.isEnabled=false + editUsername.isGone=true + confirmUsername.isClickable=true + confirmUsername.isVisible=true + confirmUsername.isEnabled=true + 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 + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.d("changeUsername","failllllllllllllllllllllll") + + } + }) + + } + + } + + + } + + fun getUser(){ + val api = RetrofitHelper.getInstance() + val token = SharedPreferencesHelper.getValue("jwt", this@ActivityChangeUserData) + var data = api.selfProfile("Bearer " + token); + data.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + var user=response.body()!! + username.setText(user.username) + name.setText(user.name) + } + + 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/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt index c5e30d3..2483e7e 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 @@ -7,14 +7,14 @@ import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.preference.PreferenceManager import android.util.Log -<<<<<<< HEAD + import android.view.ViewGroup import android.view.ViewGroup.LayoutParams import android.widget.Button -======= + import android.view.inputmethod.InputMethodManager import android.widget.EditText ->>>>>>> 951b36b54b106178200cfa4fb2bbc499ca1a2de0 + import android.widget.ImageView import android.widget.TextView import android.widget.Toast diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt index 9cce17f..d6e345b 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt @@ -6,36 +6,19 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button +import androidx.core.content.ContextCompat.startActivity import androidx.fragment.app.Fragment import com.exam.DBHelper +import com.example.brzodolokacije.Activities.ActivityChangeUserData +import com.example.brzodolokacije.Activities.ActivityForgottenPassword import com.example.brzodolokacije.Activities.ActivityLoginRegister import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.SharedPreferencesHelper -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" -/** - * A simple [Fragment] subclass. - * Use the [FragmentMyProfileInfo.newInstance] factory method to - * create an instance of this fragment. - */ class FragmentMyProfileInfo : Fragment() { private lateinit var logout:Button - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } - - } + private lateinit var changeAccount:Button override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -45,9 +28,15 @@ class FragmentMyProfileInfo : Fragment() { var view=inflater.inflate(R.layout.fragment_my_profile_info, container, false) logout=view.findViewById(R.id.buttonLogOut) as Button + changeAccount=view.findViewById(R.id.changeAccountData) + logout.setOnClickListener{ logOut() + } + changeAccount.setOnClickListener { + val intent = Intent (getActivity(), ActivityChangeUserData::class.java) + getActivity()?.startActivity(intent) } return view 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 60f243d..39527f2 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 @@ -112,4 +112,7 @@ interface IBackendApi { @GET("/api/Post/favourite/{id}") fun addRemoveFavourite(@Header("Authorization") authHeader:String,@Path("id") id:String):Call + @GET("/api/user/{newUsername}/changeMyUsername") + fun changeMyUsername(@Header("Authorization") authHeader:String,@Path("newUsername") newUsername:String):Call + } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_logout_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_logout_24.xml new file mode 100644 index 0000000..ac81ab8 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_logout_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_account_circle_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_account_circle_24.xml new file mode 100644 index 0000000..b5e6c8c --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_account_circle_24.xml @@ -0,0 +1,6 @@ + + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_change_circle_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_change_circle_24.xml new file mode 100644 index 0000000..1a36910 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_change_circle_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_share_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_share_24.xml new file mode 100644 index 0000000..e95b628 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_share_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_stats_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_stats_24.xml new file mode 100644 index 0000000..05eb65f --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_outline_stats_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_check_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_check_24.xml new file mode 100644 index 0000000..a8e2c6e --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_check_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_favorite_border_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_favorite_border_24.xml new file mode 100644 index 0000000..0444f34 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_round_favorite_border_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 43bad3c..39362b7 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 @@ -90,14 +90,13 @@ app:layout_constraintTop_toBottomOf="@+id/cvFragmentHomePageProfile" /> @@ -105,22 +104,22 @@ android:id="@+id/changeDataUsername" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="24dp" + android:layout_marginTop="40dp" android:layout_marginEnd="333dp" android:text="Korisničko ime" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2" /> + app:layout_constraintTop_toBottomOf="@+id/tvActivityChangeUserDataName" /> @@ -134,7 +133,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName3" /> + app:layout_constraintTop_toBottomOf="@+id/tvActivityChangeUserDataUsername" />