diff options
| author | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-05 23:21:11 +0100 | 
|---|---|---|
| committer | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-05 23:21:11 +0100 | 
| commit | 813c9ea0531300e6acb0add5ca8bb6bf9083ba41 (patch) | |
| tree | 816337747c3bf75d406b856cf3585707e52868e1 /Client/BrzoDoLokacije/app | |
| parent | fddf235aaf67921c654757f22a63e1500f0b7bbd (diff) | |
| parent | 6e35afaee3e18d9c69e3ed90d0786f6b9d9dccb3 (diff) | |
Merge branch 'develop' of http://gitlab.pmf.kg.ac.rs/BrzoDoLokacije2022/odyssey/brzodolokacije into develop
Diffstat (limited to 'Client/BrzoDoLokacije/app')
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  | 
