aboutsummaryrefslogtreecommitdiff
path: root/Client
diff options
context:
space:
mode:
authorJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-05 23:21:11 +0100
committerJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-05 23:21:11 +0100
commit813c9ea0531300e6acb0add5ca8bb6bf9083ba41 (patch)
tree816337747c3bf75d406b856cf3585707e52868e1 /Client
parentfddf235aaf67921c654757f22a63e1500f0b7bbd (diff)
parent6e35afaee3e18d9c69e3ed90d0786f6b9d9dccb3 (diff)
Merge branch 'develop' of http://gitlab.pmf.kg.ac.rs/BrzoDoLokacije2022/odyssey/brzodolokacije into develop
Diffstat (limited to 'Client')
-rw-r--r--Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml7
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPassword.kt56
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPasswordVerify.kt56
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddLocation.kt60
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddNew.kt59
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddPost.kt15
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt5
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt39
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt8
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentRegister.kt6
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IAuthApi.kt15
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt27
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt42
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Auth/ResetPass.kt4
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt23
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt (renamed from Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/File.kt)2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt15
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_location.xml14
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_new.xml69
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml22
21 files changed, 463 insertions, 83 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
index f6e0fc5..870fa98 100644
--- a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
+++ b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
@@ -16,6 +16,13 @@
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
+ android:name=".ActivityAddPost"
+ android:exported="false">
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="" />
+ </activity>
+ <activity
android:name=".Activities.SplashPage"
android:exported="true">
<intent-filter>
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPassword.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPassword.kt
index e7c9836..b0b7f5e 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPassword.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPassword.kt
@@ -1,27 +1,73 @@
package com.example.brzodolokacije.Activities
import android.content.Intent
+import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.util.Log
import android.view.View
import android.widget.Button
+import android.widget.EditText
import android.widget.Toast
+import com.example.brzodolokacije.Models.Auth.JustMail
+import com.example.brzodolokacije.Models.Auth.Login
import com.example.brzodolokacije.R
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.Response
class ActivityForgottenPassword : AppCompatActivity() {
private lateinit var sendCode: Button
+ private lateinit var email: EditText
+ private lateinit var emailString:String
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_forgotten_password)
sendCode=findViewById<View>(R.id.forgottenPasswordSendCode) as Button
-
+ email=findViewById<View>(R.id.editTextTextPersonName) as EditText
sendCode.setOnClickListener{
- intent= Intent(this, ActivityForgottenPasswordVerify::class.java)
- startActivity(intent)
- }
+ emailString=email.text.toString().trim()
- }
+ if(!emailString.isEmpty() && checkEmail(emailString)==true) {
+
+ var emailData= JustMail(emailString)
+ val authApi= RetrofitHelper.getInstance()
+ val request=authApi.forgotpass(emailData)
+ val cont=this
+ request.enqueue(object : retrofit2.Callback<ResponseBody?> {
+ override fun onResponse(call: Call<ResponseBody?>, response: Response<ResponseBody?>) {
+ Log.d("main",response.code().toString())
+ Log.d("main",response.body().toString())
+ if(response.code()==200){
+ val intent = Intent(cont, ActivityForgottenPasswordVerify::class.java)
+ intent.putExtra("email", emailString)
+ startActivity(intent)
+ }
+ }
+ override fun onFailure(call: Call<ResponseBody?>, t: Throwable) {
+ }
+ })
+ }
+ }
+ }
+ //from fragment login
+ fun checkEmail(emailString:String):Boolean{
+ val emailRegex = "^[A-Za-z](.*)([@]{1})(.{1,})(\\.)(.{1,})"
+ if(!(emailRegex.toRegex().matches(emailString))){
+ Toast.makeText(
+ this, "Email adresa nije validna, pokušajte ponovo", Toast.LENGTH_LONG
+ ).show();
+ email.setHintTextColor(Color.RED)
+ return false
+ }
+ else{
+ return true
+ }
+ }
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPasswordVerify.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPasswordVerify.kt
index 6533237..a1db97f 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPasswordVerify.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityForgottenPasswordVerify.kt
@@ -5,24 +5,72 @@ import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
+import android.widget.EditText
import android.widget.Toast
import com.example.brzodolokacije.MainActivity
+import com.example.brzodolokacije.Models.Auth.Login
+import com.example.brzodolokacije.Models.Auth.ResetPass
import com.example.brzodolokacije.R
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.Response
class ActivityForgottenPasswordVerify : AppCompatActivity() {
private lateinit var changePassword: Button
+ private lateinit var pw:EditText
+ private lateinit var pwchk:EditText
+ private lateinit var kod:EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_forgotten_password_verify)
+ kod=findViewById<View>(R.id.editTextTextPersonName) as EditText
+ pw=findViewById<View>(R.id.editTextoldPassword) as EditText
+ pwchk =findViewById<View>(R.id.editTextTextPassword) as EditText
changePassword=findViewById<View>(R.id.btnChangePassword) as Button
changePassword.setOnClickListener{
+
+ var email =intent.getStringExtra("email")
+ var pwstr=pw.text.toString().trim()
+ var pwchkstr=pwchk.text.toString().trim()
+ var kodstr=kod.text.toString().trim()
+
+ if(!kodstr.isEmpty() && checkPassword(pwstr,pwchkstr)){
+ var resetData= ResetPass(email!!,kodstr,pwstr)
+ val authApi= RetrofitHelper.getInstance()
+ val request=authApi.resetpass(resetData)
+ val cont=this
+ request.enqueue(object : retrofit2.Callback<ResponseBody?> {
+ override fun onResponse(call: Call<ResponseBody?>, response: Response<ResponseBody?>) {
+ if(response.code()==200){
+ intent = Intent(cont, ActivityLoginRegister::class.java)
+ startActivity(intent)
+ }
+ }
+ override fun onFailure(call: Call<ResponseBody?>, t: Throwable) {
+ }
+ })
+ }
+ }
+ }
+
+ //from fragment login
+ fun checkPassword(passwordString:String,passwordConfirm:String):Boolean{
+
+ if(passwordString.length<6){
Toast.makeText(
- this, "Lozinka je uspešno promenjena.", Toast.LENGTH_LONG
+ this, "Lozinke su prekratke", Toast.LENGTH_LONG
).show();
-
- intent= Intent(this, ActivityLoginRegister::class.java)
- startActivity(intent)
+ return false
+ }
+ if(!passwordString.equals(passwordConfirm)){
+ Toast.makeText(
+ this, "Lozinke su se ne poklapaju", Toast.LENGTH_LONG
+ ).show();
+ return false
}
+ return true
}
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt
index d36dbae..baa83ee 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt
@@ -16,7 +16,7 @@ class NavigationActivity : AppCompatActivity() {
val fragmentShowPosts=FragmentShowPosts()
val browseFragment=FragmentBrowse()
- val addPostFragment=FragmentAddPost()
+ val addPostFragment= FragmentAddNew()
val profileFragment=FragmentProfile()
val bottomNav=findViewById<View>(R.id.bottomNavigationView) as BottomNavigationView
setCurrentFragment(fragmentShowPosts)
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddLocation.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddLocation.kt
new file mode 100644
index 0000000..2d0a3bd
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddLocation.kt
@@ -0,0 +1,60 @@
+package com.example.brzodolokacije.Fragments
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.example.brzodolokacije.R
+
+// 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 [FragmentAddLocation.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class FragmentAddLocation : Fragment() {
+ // 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)
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_add_location, container, false)
+ }
+
+ companion object {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment FragmentAddLocation.
+ */
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ FragmentAddLocation().apply {
+ arguments = Bundle().apply {
+ putString(ARG_PARAM1, param1)
+ putString(ARG_PARAM2, param2)
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddNew.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddNew.kt
new file mode 100644
index 0000000..b1b257b
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddNew.kt
@@ -0,0 +1,59 @@
+package com.example.brzodolokacije.Fragments
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import androidx.fragment.app.FragmentTransaction
+import com.example.brzodolokacije.R
+
+// 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 [FragmentAddNew.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class FragmentAddNew : Fragment() {
+ // TODO: Rename and change types of parameters
+
+ private lateinit var addNewPost: Button
+ private lateinit var addNewLocation: Button
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ val view:View=inflater.inflate(R.layout.fragment_add_new, container, false)
+ addNewPost=view.findViewById<View>(R.id.btnFragmentAddNewNewPost) as Button
+ addNewLocation=view.findViewById<View>(R.id.btnFragmentAddNewNewLocation) as Button
+
+
+ addNewPost.setOnClickListener{
+
+ var fm: FragmentTransaction =childFragmentManager.beginTransaction()
+
+ fm.replace(R.id.flFragmentAddNewFragmentContainer, FragmentAddPost())
+ fm.commit()
+ }
+
+
+ addNewLocation.setOnClickListener{
+
+ var fm: FragmentTransaction =childFragmentManager.beginTransaction()
+
+ fm.replace(R.id.flFragmentAddNewFragmentContainer, FragmentAddLocation())
+ fm.commit()
+ }
+
+ return view
+ }
+
+
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddPost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddPost.kt
index 7fca83b..936d755 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddPost.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddPost.kt
@@ -7,6 +7,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
+import androidx.core.content.ContextCompat.startActivity
import com.example.brzodolokacije.Activities.ActivityLoginRegister
import com.example.brzodolokacije.Activities.NavigationActivity
import com.example.brzodolokacije.R
@@ -28,21 +29,11 @@ class FragmentAddPost : Fragment(R.layout.fragment_add_post) {
savedInstanceState: Bundle?
): View? {
val view:View=inflater.inflate(R.layout.fragment_add_post, container, false)
- // Inflate the layout for this fragment
- /*val logOutButton=view.findViewById<View>(R.id.btnFragmentAddLogOut) as Button
- logOutButton.setOnClickListener{
- logOut()
- }*/
+
return view;
}
- fun logOut(){
- if(SharedPreferencesHelper.removeValue("jwt",requireActivity()))
- {
- val intent= Intent(requireActivity(), ActivityLoginRegister::class.java)
- startActivity(intent)
- }
- }
+
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt
index b9568df..9092700 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt
@@ -12,13 +12,11 @@ import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
-import com.example.brzodolokacije.Activities.ActivityLoginRegister
import com.example.brzodolokacije.Activities.NavigationActivity
import com.example.brzodolokacije.Activities.ActivityForgottenPassword
-import com.example.brzodolokacije.Interfaces.IAuthApi
import com.example.brzodolokacije.Models.Auth.Login
import com.example.brzodolokacije.R
import com.example.brzodolokacije.Services.RetrofitHelper
@@ -84,7 +82,7 @@ class FragmentLogin : Fragment() {
if(!emailString.isEmpty() && !passwordString.isEmpty()&& checkPassword(passwordString)==true && checkEmail(emailString)==true) {
var loginData= Login(emailString,passwordString)
- val authApi= RetrofitHelper.getInstance().create(IAuthApi::class.java)
+ val authApi= RetrofitHelper.getInstance()
val request=authApi.login(loginData)
request.enqueue(object : retrofit2.Callback<String?> {
@@ -94,7 +92,6 @@ class FragmentLogin : Fragment() {
Toast.makeText(
activity, token, Toast.LENGTH_LONG
).show();
- //TODO(navigate to main page)
SharedPreferencesHelper.addValue("jwt",token,activity!!)
val intent= Intent(activity!!, NavigationActivity::class.java)
startActivity(intent)
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 9c4c370..45cd0fe 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
@@ -1,11 +1,15 @@
package com.example.brzodolokacije.Fragments
+import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Button
+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
@@ -18,6 +22,7 @@ private const val ARG_PARAM2 = "param2"
* 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
@@ -28,6 +33,7 @@ class FragmentMyProfileInfo : Fragment() {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
+
}
override fun onCreateView(
@@ -35,26 +41,21 @@ class FragmentMyProfileInfo : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_my_profile_info, container, false)
+ var view=inflater.inflate(R.layout.fragment_my_profile_info, container, false)
+
+ logout=view.findViewById<View>(R.id.buttonLogOut) as Button
+ logout.setOnClickListener{
+ logOut()
+ }
+
+ return view
}
- companion object {
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment FragmentMyProfileInfo.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- FragmentMyProfileInfo().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
- }
- }
+ fun logOut(){
+ if(SharedPreferencesHelper.removeValue("jwt",requireActivity()))
+ {
+ val intent= Intent(requireActivity(), ActivityLoginRegister::class.java)
+ startActivity(intent)
+ }
}
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
index c9ce8cc..243cab0 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
@@ -1,21 +1,14 @@
package com.example.brzodolokacije.Fragments
import android.os.Bundle
-import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
-import android.widget.EditText
import android.widget.TextView
import androidx.fragment.app.FragmentTransaction
import com.example.brzodolokacije.R
-import retrofit2.Call
-import retrofit2.Callback
-import retrofit2.Response
-import retrofit2.Retrofit
-import retrofit2.converter.gson.GsonConverterFactory
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
@@ -53,7 +46,6 @@ class FragmentProfile : Fragment(R.layout.fragment_profile) {
postsCount = view.findViewById<View>(R.id.tvFragmentProfilePostsNo) as TextView
followersCount = view.findViewById<View>(R.id.tvFragmentProfileFollowersNo) as TextView
followingCount = view.findViewById<View>(R.id.tvFragmentProfileFollowNo) as TextView
-
showMyPosts=view.findViewById<View>(R.id.btnFragmentProfileShowMyPosts) as Button
showMyData=view.findViewById<View>(R.id.btnFragmentProfileShowMyData) as Button
showMyRecensions=view.findViewById<View>(R.id.btnFragmentProfileShowMyRecensions) as Button
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentRegister.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentRegister.kt
index c9102ab..e166d38 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentRegister.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentRegister.kt
@@ -1,9 +1,7 @@
package com.example.brzodolokacije.Fragments
-import android.graphics.BitmapFactory
import android.graphics.Color
import android.os.Bundle
-import android.util.Base64
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
@@ -11,14 +9,12 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
-import com.example.brzodolokacije.Interfaces.IAuthApi
import com.example.brzodolokacije.Models.Auth.Register
import com.example.brzodolokacije.R
import com.example.brzodolokacije.Services.RetrofitHelper
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Response
-import javax.security.auth.callback.Callback
class FragmentRegister : Fragment() {
// TODO: Rename and change types of parameters
@@ -81,7 +77,7 @@ class FragmentRegister : Fragment() {
var registerData=Register(nameString,usernameString,emailString,passwordString)
- val authApi=RetrofitHelper.getInstance().create(IAuthApi::class.java)
+ val authApi=RetrofitHelper.getInstance()
val request=authApi.register(registerData)
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IAuthApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IAuthApi.kt
deleted file mode 100644
index bd430a8..0000000
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IAuthApi.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.example.brzodolokacije.Interfaces
-
-import com.example.brzodolokacije.Models.Auth.Login
-import com.example.brzodolokacije.Models.Auth.Register
-import okhttp3.ResponseBody
-import retrofit2.Call
-import retrofit2.http.Body
-import retrofit2.http.POST
-
-interface IAuthApi {
- @POST("/api/auth/login")
- fun login(@Body obj:Login): Call<String>
- @POST("/api/auth/register")
- fun register(@Body obj:Register):Call<ResponseBody>
-} \ 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
new file mode 100644
index 0000000..0bbf72e
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
@@ -0,0 +1,27 @@
+package com.example.brzodolokacije.Interfaces
+
+import com.example.brzodolokacije.Models.Auth.JustMail
+import com.example.brzodolokacije.Models.Auth.Login
+import com.example.brzodolokacije.Models.Auth.Register
+import com.example.brzodolokacije.Models.Auth.ResetPass
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.http.Body
+import retrofit2.http.Header
+import retrofit2.http.POST
+
+interface IBackendApi {
+ @POST("/api/auth/login")
+ fun login(@Body obj:Login): Call<String>
+ @POST("/api/auth/register")
+ fun register(@Body obj:Register):Call<ResponseBody>
+ @POST("/api/auth/refreshJwt")
+ fun refreshJwt(@Header("Authorization") authHeader:String): Call<String>
+ @POST("/api/auth/forgotpass")
+ fun forgotpass(@Body obj:JustMail):Call<ResponseBody>
+ @POST("/api/auth/resetpass")
+ fun resetpass(@Body obj:ResetPass):Call<ResponseBody>
+
+ //@POST("putanja")
+ //fun add(@Body obj:Post,@Header("Authorization") authHeader:String):Call<Post>
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt
index 1208564..e55da11 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt
@@ -3,10 +3,15 @@ package com.example.brzodolokacije
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
import com.auth0.android.jwt.JWT
import com.example.brzodolokacije.Activities.ActivityLoginRegister
import com.example.brzodolokacije.Activities.NavigationActivity
+import com.example.brzodolokacije.Services.RetrofitHelper
import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import retrofit2.Call
+import retrofit2.Response
class MainActivity : AppCompatActivity() {
@@ -17,8 +22,9 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
val intent:Intent
- if(checkLoggedIn())
- intent= Intent(this, NavigationActivity::class.java)
+ if(checkLoggedIn()) {
+ intent = Intent(this, NavigationActivity::class.java)
+ }
else
intent= Intent(this, ActivityLoginRegister::class.java)
@@ -33,10 +39,42 @@ class MainActivity : AppCompatActivity() {
var jwt:JWT=JWT(jwtString)
if(jwt.isExpired(30))
return false
+ refreshJwt(jwtString)
return true
}
+
+ fun refreshJwt(token:String){
+ Log.d("Main","RIPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP")
+ if(token==null)
+ return
+ var refreshJwt= RetrofitHelper.getInstance().refreshJwt("Bearer "+token)
+ refreshJwt.enqueue(object : retrofit2.Callback<String?> {
+ override fun onResponse(call: Call<String?>, response: Response<String?>) {
+ if(response.isSuccessful()){
+ val newToken=response.body().toString()
+ Toast.makeText(
+ applicationContext, token, Toast.LENGTH_LONG
+ ).show();
+ SharedPreferencesHelper.addValue("jwt",newToken,this@MainActivity)
+ }else{
+ if(response.errorBody()!=null)
+ Toast.makeText(applicationContext, response.errorBody()!!.string(), Toast.LENGTH_LONG).show();
+ }
+
+
+ }
+
+ override fun onFailure(call: Call<String?>, t: Throwable) {
+ Toast.makeText(
+ applicationContext, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ }
+ })
+
+
+ }
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Auth/ResetPass.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Auth/ResetPass.kt
new file mode 100644
index 0000000..945c8d1
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Auth/ResetPass.kt
@@ -0,0 +1,4 @@
+package com.example.brzodolokacije.Models.Auth
+
+data class ResetPass(var email:String,var kod:String,var newpass:String)
+data class JustMail(var email:String) \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt
index 3fa1f70..2ac2619 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt
@@ -1,7 +1,7 @@
package com.example.brzodolokacije.Models
+import okhttp3.MultipartBody
import java.time.LocalDateTime
-import java.util.*
data class Post (
var _id:String,
@@ -12,10 +12,29 @@ data class Post (
var reports:List<String>,
var ratings:List<Rating>,
var comments:List<Comment>,
- var images:List<File>
+ var images:List<PostImage>
)
+data class PostSend(
+ var _id:String,
+ var locationId:String,
+ var description:String,
+ var images: List<MultipartBody.Part>
+
+)
+data class PostPreview(
+ var _id:String,
+ var ownerId:String,
+ var location:Location,
+ var description:String,
+ var views:Int,
+ var ratings:Float,
+ var comments:List<Comment>,
+ var images:List<PostImage>
+)
+
+
data class Comment (
var userId:String,
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/File.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt
index 030f658..d024272 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/File.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt
@@ -1,6 +1,6 @@
package com.example.brzodolokacije.Models
-data class File (
+data class PostImage (
var _id:String,
var path:String
) \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt
index cc7eb56..afe93c9 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt
@@ -1,5 +1,6 @@
package com.example.brzodolokacije.Services
+import com.example.brzodolokacije.Interfaces.IBackendApi
import com.google.gson.GsonBuilder
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
@@ -7,13 +8,23 @@ import retrofit2.converter.gson.GsonConverterFactory
object RetrofitHelper {
val baseUrl="http://10.0.2.2:5279"
- fun getInstance():Retrofit{
+
+ private var retrofit_noauth: IBackendApi? = null
+ private var retrofit_auth: IBackendApi? = null
+
+ fun getInstance():IBackendApi{
+ if(retrofit_noauth==null)
+ retrofit_noauth= createInstance()
+ return retrofit_noauth as IBackendApi
+ }
+ private fun createInstance():IBackendApi{
val gson = GsonBuilder()
.setLenient()
.create()
return Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
- .build()
+ .build().create(IBackendApi::class.java)
+
}
}
//Usage
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_location.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_location.xml
new file mode 100644
index 0000000..bfc1edb
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_location.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".Fragments.FragmentAddLocation">
+
+ <!-- TODO: Update blank fragment layout -->
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/hello_blank_fragment" />
+
+</FrameLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_new.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_new.xml
new file mode 100644
index 0000000..5cfda04
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_new.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".Fragments.FragmentAddNew">
+
+ <!-- TODO: Update blank fragment layout -->
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Button
+ android:id="@+id/btnFragmentAddNewNewLocation"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:backgroundTint="#FFFFFF"
+ android:stateListAnimator="@null"
+ android:text="Nova lokacija"
+ android:textColor="@color/cardview_dark_background"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/btnFragmentAddNewNewPost"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.00999999" />
+
+ <Button
+ android:id="@+id/btnFragmentAddNewNewPost"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:backgroundTint="#FFFFFF"
+ android:stateListAnimator="@null"
+
+ android:text="Nova objava"
+ android:textColor="@color/cardview_dark_background"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/btnFragmentAddNewNewLocation"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.00999999" />
+
+ <View
+ android:id="@+id/divider3"
+ android:layout_width="409dp"
+ android:layout_height="1dp"
+ android:background="?android:attr/listDivider"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/btnFragmentAddNewNewPost" />
+
+ <FrameLayout
+ android:id="@+id/flFragmentAddNewFragmentContainer"
+ android:layout_width="409dp"
+ android:layout_height="673dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent">
+
+ </FrameLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+
+</FrameLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml
index d20c569..4a91f49 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml
@@ -1,14 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragments.FragmentMyProfileInfo">
<!-- TODO: Update blank fragment layout -->
+
<TextView
+ android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:text="Moji podaci" />
+ android:text="Moji podaci"
+ tools:layout_editor_absoluteX="0dp"
+ tools:layout_editor_absoluteY="0dp" />
+
+ <Button
+ android:id="@+id/buttonLogOut"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Log out"
+ app:layout_constraintBottom_toBottomOf="@+id/textView5"
+ app:layout_constraintEnd_toEndOf="@+id/textView5"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/textView5" />
+
-</FrameLayout> \ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file