aboutsummaryrefslogtreecommitdiff
path: root/Client
diff options
context:
space:
mode:
Diffstat (limited to 'Client')
-rw-r--r--Client/BrzoDoLokacije/app/build.gradle7
-rw-r--r--Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml62
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt264
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt149
-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/ActivitySinglePost.kt62
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/NavigationActivity.kt52
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/SplashPage.kt23
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostImageAdapter.kt42
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt74
-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.kt70
-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/FragmentAddRecension.kt60
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt6
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt41
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt14
-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/Fragments/FragmentShowPosts.kt104
-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.kt42
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/MainActivity.kt43
-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/Location.kt16
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationType.kt7
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationTypes.kt4
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt54
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt10
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/MyAppGlideModule.kt8
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/RetrofitHelper.kt15
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/authCheck.kt31
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/filter.pngbin0 -> 1509 bytes
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/grid.pngbin0 -> 661 bytes
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back.xml5
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_forward.xml5
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/list.webpbin0 -> 174 bytes
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/rounded_picture_background.xml12
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/drawable/sort.pngbin0 -> 3953 bytes
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml104
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml94
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_login_register.xml38
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml127
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_splash_page.xml60
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/bottom_sheet_add_new.xml45
-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.xml73
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_post.xml10
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_recension.xml13
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_profile_info.xml22
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml81
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/post_image.xml27
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/post_preview.xml79
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values-land/dimens.xml3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values-w1240dp/dimens.xml3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values-w600dp/dimens.xml3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values/colors.xml2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/values/themes.xml2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/xml/file_paths.xml4
60 files changed, 2168 insertions, 133 deletions
diff --git a/Client/BrzoDoLokacije/app/build.gradle b/Client/BrzoDoLokacije/app/build.gradle
index f6faf0d..72f1f0d 100644
--- a/Client/BrzoDoLokacije/app/build.gradle
+++ b/Client/BrzoDoLokacije/app/build.gradle
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
+ id 'org.jetbrains.kotlin.android.extensions'
}
android {
@@ -34,6 +35,9 @@ android {
buildFeatures {
viewBinding true
}
+ androidExtensions {
+ experimental = true
+ }
}
dependencies {
@@ -52,4 +56,7 @@ dependencies {
//JWT
implementation 'com.auth0.android:jwtdecode:2.0.1'
+ //Glide
+ implementation 'com.github.bumptech.glide:glide:4.12.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
index edf65a2..aa4598b 100644
--- a/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
+++ b/Client/BrzoDoLokacije/app/src/main/AndroidManifest.xml
@@ -2,8 +2,24 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
+ <!--DOZVOLE-->
<uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
+ android:maxSdkVersion="18" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
+ <uses-permission android:name="android.permission.CAMERA"
+ android:required="true"
+ android:requiredFeature="true"/>
+
+ <!--SVOJSTVA-->
+
+ <uses-feature android:name="android.hardware.camera" android:required="true"></uses-feature>
+
+ <!--AKTIVNOSTI-->
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
@@ -15,12 +31,19 @@
android:theme="@style/Theme.BrzoDoLokacije"
android:usesCleartextTraffic="true"
tools:targetApi="31">
- <activity android:name=".Activities.ActivityForgottenPasswordVerify" />
- <activity android:name=".Activities.ActivityForgottenPassword" />
- <activity android:name=".Activities.ActivityLoginRegister" />
- <activity android:name=".Activities.NavigationActivity" />
<activity
- android:name=".MainActivity"
+ android:name=".Activities.ActivityCapturePost"
+ android:exported="false">
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="" />
+ </activity>
+ <activity android:name=".Activities.ActivitySinglePost" />
+ <activity
+ android:name=".Activities.ActivityAddPost"
+/>
+ <activity
+ android:name=".Activities.SplashPage"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -32,6 +55,35 @@
android:name="android.app.lib_name"
android:value="" />
</activity>
+ <activity android:name=".Activities.ActivityForgottenPasswordVerify" />
+ <activity android:name=".Activities.ActivityForgottenPassword" />
+ <activity android:name=".Activities.ActivityLoginRegister" />
+ <activity android:name=".Activities.NavigationActivity" />
+ <activity
+ android:name=".MainActivity"
+ android:exported="false">
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="" />
+ </activity>
+
+ <provider
+ android:name="androidx.core.content.FileProvider"
+ android:authorities="com.example.android.fileprovider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_paths"></meta-data>
+ </provider>
+
+
</application>
+ <queries>
+ <intent>
+ <action android:name="android.media.action.IMAGE_CAPTURE" />
+ </intent>
+ </queries>
+
</manifest> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt
new file mode 100644
index 0000000..40d8f11
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt
@@ -0,0 +1,264 @@
+package com.example.brzodolokacije.Activities
+
+import android.Manifest
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.net.Uri
+import android.os.Bundle
+import android.util.Log
+import android.view.View
+import android.widget.*
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import com.example.brzodolokacije.Models.Location
+import com.example.brzodolokacije.Models.LocationType
+import com.example.brzodolokacije.Models.PostPreview
+import com.example.brzodolokacije.R
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import okhttp3.MediaType
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
+import retrofit2.Call
+import retrofit2.Response
+import java.io.File
+import java.io.IOException
+
+
+class ActivityAddPost : AppCompatActivity() {
+ private lateinit var uploadFromGallery: Button
+ private lateinit var takePhoto: Button
+ private lateinit var showNextImage:Button
+ private lateinit var showPreviousImage:Button
+ private lateinit var switcher: ImageSwitcher
+ private var uploadedImages:ArrayList<Uri?>?=null
+
+ private lateinit var location:EditText
+ private lateinit var description:EditText
+ private lateinit var locationString:String
+ private lateinit var descriptionString:String
+ private lateinit var post:Button
+ //private var paths :ArrayList<String?>?=null
+ private var place=0;
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_add_post)
+// Toast.makeText(
+// applicationContext, "Add new ", Toast.LENGTH_LONG
+// ).show();
+ uploadedImages= ArrayList()
+
+ //paths= ArrayList()
+
+ uploadFromGallery=findViewById<View>(R.id.btnActivityAddPostUploadFromGallery) as Button
+ showNextImage=findViewById<View>(R.id.nextImage) as Button
+ showPreviousImage=findViewById<View>(R.id.previousImage) as Button
+ switcher=findViewById<View>(R.id.isActivityAddPostSwitcher) as ImageSwitcher
+ location=findViewById<View>(R.id.etActivityAddPostLocation) as EditText
+ description=findViewById<View>(R.id.etActivityAddPostDescription) as EditText
+ post=findViewById<View>(R.id.btnActivityAddPostPost) as Button
+
+
+ switcher?.setFactory{
+ val imgView = ImageView(applicationContext)
+ imgView.scaleType = ImageView.ScaleType.CENTER_CROP
+ imgView.setPadding(8, 8, 8, 8)
+ imgView}
+
+ //dodavanje iz galerije
+ uploadFromGallery.setOnClickListener{
+
+ //provera da li je odobrena upotreba galerije
+ if(ContextCompat.checkSelfPermission(this@ActivityAddPost, Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this@ActivityAddPost, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),101)
+ }
+
+ //otvaranje galerije
+ val intent= Intent(Intent.ACTION_PICK)
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
+ intent.action = Intent.ACTION_GET_CONTENT
+ intent.type="image/*"
+ startActivityForResult(Intent.createChooser(intent,"Izaberi fotografije"),0)
+ }
+
+
+ //prikaz ucitanih
+ //
+ showPreviousImage.setOnClickListener{
+ if(place>0){
+ place=place-1
+ switcher.setImageURI(uploadedImages!![place])
+ showNextImage.isEnabled=true
+ }
+ else{
+ showPreviousImage.isEnabled=false
+ }
+ }
+
+
+ showNextImage.setOnClickListener{
+ if(place<uploadedImages!!.size-1){
+ place=place+1
+ switcher.setImageURI(uploadedImages!![place])
+ showPreviousImage.isEnabled=true
+ }
+ else{
+ showNextImage.isEnabled=false
+ }
+ }
+
+ post.setOnClickListener{
+ locationString=location.text.toString().trim()
+ descriptionString=description.text.toString().trim()
+ //prazan unos?
+ if(locationString.isEmpty()) {
+ location.hint="Unesite lokaciju"
+ location.setHintTextColor(Color.RED)
+ }
+ if(descriptionString.isEmpty()) {
+ description.hint="Unesite lokaciju"
+ description.setHintTextColor(Color.RED)
+ }
+
+ if(!locationString.isEmpty() && !descriptionString.isEmpty()){
+ sendPost()
+ }
+ }
+ }
+
+
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ //nakon otvaranja
+ if(requestCode==0 && resultCode== RESULT_OK){
+ //samo jedna slika
+ //image.setImageURI(data?.data)
+
+ //veci broj slika
+ if (data!!.getClipData() != null) {
+ var count = data!!.clipData!!.itemCount
+
+ for (i in 0..count - 1) {
+ var _uri: Uri = data!!.clipData!!.getItemAt(i).uri
+ uploadedImages!!.add(_uri)
+ }
+
+ // prikaz ucitanih
+ switcher.setImageURI(uploadedImages!![0])
+ place=0
+ //jedna slika
+ } else if (data?.getData() != null) {
+ uploadedImages!!.add(data.data!!)
+
+ //prikaz jedne ucitane
+ switcher.setImageURI(data.data!!)
+ }
+ }
+ }
+ private fun sendPost(){
+ uploadLocation()
+
+ }
+ fun uploadLocation() {
+ val api =RetrofitHelper.getInstance()
+ var loc:Location=Location("",locationString,"","","",0.0,0.0,LocationType.GRAD)
+ var jwtString= SharedPreferencesHelper.getValue("jwt",this)
+ var data=api.addLocation("Bearer "+jwtString,loc)
+
+
+ data.enqueue(object : retrofit2.Callback<Location?> {
+ override fun onResponse(call: Call<Location?>, response: Response<Location?>) {
+ if(response.isSuccessful()){
+ Toast.makeText(
+ applicationContext, "USPEH", Toast.LENGTH_LONG
+ ).show();
+ uploadPost(response.body()!!._id)
+ Log.d("MAIN","RADI")
+ Log.d("MAIN","RADI")
+
+ }else {
+
+ if (response.errorBody() != null) {
+ Log.d("Main",response.errorBody()!!.string())
+ Log.d("Main",response.message())
+ }
+ Log.d("Main","sadadsa")
+ Log.d("Main",response.errorBody()!!.string())
+ Log.d("Main",response.message())
+ }
+
+
+ }
+
+ override fun onFailure(call: Call<Location?>, t: Throwable) {
+ Toast.makeText(
+ applicationContext, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ Log.d("Main",t.toString())
+ }
+ })
+ }
+ fun uploadPost(loc:String){
+ val api =RetrofitHelper.getInstance()
+ var desc=descriptionString
+ description.text.clear()
+ //loc
+ //desc
+ var locReq=RequestBody.create(MediaType.parse("text/plain"),loc)
+ var descReq=RequestBody.create(MediaType.parse("text/plain"),desc)
+ var idReq=RequestBody.create(MediaType.parse("text/plain"),"dsa")
+ val imagesParts = arrayOfNulls<MultipartBody.Part>(
+ uploadedImages!!.size
+ )
+
+ //dodavanje u bazu
+ for (i in 0..uploadedImages!!.size - 1){
+ //var file=File(uploadedImages!![i]!!.path)
+ Log.d("Main", uploadedImages!![i]!!.path!!)
+
+ var inputStream=getContentResolver().openInputStream(uploadedImages!![i]!!)
+ val file: File = File.createTempFile("temp",i.toString())
+ file!!.writeBytes(inputStream!!.readBytes())
+
+
+ var imageBody=RequestBody.create(MediaType.parse("image/*"),file)
+ imagesParts[i]=MultipartBody.Part.createFormData("images",file.name,imageBody)
+ }
+ var jwtString= SharedPreferencesHelper.getValue("jwt",this)
+ var data=api.addPost("Bearer "+jwtString,imagesParts,idReq,descReq,locReq)
+
+
+ data.enqueue(object : retrofit2.Callback<PostPreview?> {
+ override fun onResponse(call: Call<PostPreview?>, response: Response<PostPreview?>) {
+ if(response.isSuccessful()){
+ Toast.makeText(
+ applicationContext, "USPEH", Toast.LENGTH_LONG
+ ).show();
+ }else {
+
+ if (response.errorBody() != null) {
+ Toast.makeText(
+ applicationContext,
+ response.errorBody()!!.string(),
+ Toast.LENGTH_LONG
+ ).show();
+ Log.d("Main",response.errorBody()!!.string())
+ }
+ }
+
+
+ }
+
+ override fun onFailure(call: Call<PostPreview?>, t: Throwable) {
+ Toast.makeText(
+ applicationContext, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ Log.d("Main",t.toString())
+ }
+ })
+ }
+
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt
new file mode 100644
index 0000000..951ccf5
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityCapturePost.kt
@@ -0,0 +1,149 @@
+package com.example.brzodolokacije.Activities
+
+import android.Manifest
+import android.app.Activity
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.net.Uri
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.Environment
+import android.os.Environment.getExternalStoragePublicDirectory
+import android.provider.MediaStore
+import android.view.View
+import android.widget.Button
+import android.widget.EditText
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.core.content.FileProvider
+import com.example.brzodolokacije.R
+import kotlinx.android.synthetic.main.fragment_profile.*
+import java.io.File
+import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.*
+import kotlin.collections.ArrayList
+
+class ActivityCapturePost : AppCompatActivity() {
+ lateinit var currentPhotoPath: String
+ private lateinit var takePhoto: Button
+ private lateinit var location: EditText
+ private lateinit var description: EditText
+ private lateinit var locationString:String
+ private lateinit var descriptionString:String
+ private lateinit var post:Button
+ private lateinit var showImage:ImageView
+ private var uploadedImages:ArrayList<Uri?>?=null
+ private lateinit var photoPath:String
+ private lateinit var photoURI:Uri
+
+ @Throws(IOException::class)
+ private fun createImageFile(): File {
+ val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
+ val storageDir: File? = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
+ return File.createTempFile(
+ "JPEG_${timeStamp}_", /* prefix */
+ ".jpg", /* suffix */
+ storageDir /* directory */
+ ).apply {
+ currentPhotoPath = absolutePath
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_capture_post)
+
+ //provera da li je odobrena upotreba skladista
+ if(ContextCompat.checkSelfPermission(this@ActivityCapturePost, Manifest.permission.READ_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this@ActivityCapturePost, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),101)
+ }
+ //provera da li je odobrena upotreba kamere
+ if(ContextCompat.checkSelfPermission(this@ActivityCapturePost, Manifest.permission.CAMERA)
+ != PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this@ActivityCapturePost, arrayOf(Manifest.permission.CAMERA),101)
+ }
+
+ //provera da li je odobren upis u skladiste
+ if(ContextCompat.checkSelfPermission(this@ActivityCapturePost, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this@ActivityCapturePost, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),101)
+ }
+
+ location=findViewById<View>(R.id.etActivityCapturePostLocation) as EditText
+ description=findViewById<View>(R.id.etActivityCapturePostDescription) as EditText
+ post=findViewById<View>(R.id.btnActivityCapturePostPost) as Button
+ showImage=findViewById<View>(R.id.ivActivityCapturePostImage) as ImageView
+ takePhoto=findViewById<View>(R.id.btnActivityCapturePostCapture) as Button
+
+ //dodavanje sa kamere
+ takePhoto.setOnClickListener {
+ Toast.makeText(
+ applicationContext, "camera intent button", Toast.LENGTH_LONG
+ ).show();
+ Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
+ takePictureIntent.resolveActivity(packageManager)?.also {
+ val photoFile: File? = try {
+ createImageFile()
+ } catch (ex: IOException) {
+ null
+ }
+ photoFile?.also {
+ photoURI= FileProvider.getUriForFile(
+ this,
+ "com.example.android.fileprovider",
+ it
+ )
+ takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
+ startActivityForResult(takePictureIntent, 123)
+ }
+ }
+ }
+
+
+ }
+ post.setOnClickListener{
+ locationString=location.text.toString().trim()
+ descriptionString=description.text.toString().trim()
+ //prazan unos?
+ if(locationString.isEmpty()) {
+ location.hint="Unesite lokaciju"
+ location.setHintTextColor(Color.RED)
+ }
+ if(descriptionString.isEmpty()) {
+ description.hint="Unesite lokaciju"
+ description.setHintTextColor(Color.RED)
+ }
+
+ /*if(!locationString.isEmpty() && !descriptionString.isEmpty()){
+
+ //dodaj u bazu
+
+ }*/
+ }
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (resultCode == Activity.RESULT_OK && requestCode == 123 && data != null){
+ Toast.makeText(
+ applicationContext, "camera intent", Toast.LENGTH_LONG
+ ).show();
+
+ showImage.setImageURI(photoURI)
+
+ Toast.makeText(
+ applicationContext, currentPhotoPath, Toast.LENGTH_LONG
+ ).show();
+ /*var photo:Bitmap=data.extras!!.get("data") as Bitmap
+ showImage.setImageBitmap(photo)*/
+ }
+ }
+
+
+} \ No newline at end of file
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/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
new file mode 100644
index 0000000..32cb3ef
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
@@ -0,0 +1,62 @@
+package com.example.brzodolokacije.Activities
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.brzodolokacije.Adapters.PostImageAdapter
+import com.example.brzodolokacije.Models.PostImage
+import com.example.brzodolokacije.Models.PostPreview
+import com.example.brzodolokacije.R
+import com.example.brzodolokacije.databinding.ActivitySinglePostBinding
+
+
+class ActivitySinglePost : AppCompatActivity() {
+ private lateinit var binding: ActivitySinglePostBinding
+ private var layoutManagerVar: RecyclerView.LayoutManager? = null
+ private var adapterVar: RecyclerView.Adapter<PostImageAdapter.ViewHolder>? = null
+ private var recyclerView: RecyclerView?=null
+ private lateinit var post:PostPreview
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding=ActivitySinglePostBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ post= intent.extras?.getParcelable("selectedPost")!!
+ //load data for the list
+
+ //instantiate adapter and linearLayout
+ adapterVar= PostImageAdapter(this@ActivitySinglePost, post.images as MutableList<PostImage>)
+ layoutManagerVar= LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)
+ recyclerView = binding.rvMain
+ // set recyclerView attributes
+ recyclerView?.setHasFixedSize(true)
+ recyclerView?.layoutManager = layoutManagerVar
+ recyclerView?.adapter = adapterVar
+ loadTextComponents()
+ }
+
+ private fun loadImages(){
+
+ }
+
+ private fun loadTextComponents() {
+ binding.apply {
+ tvTitle.text= post.location.name
+ tvTitle.invalidate()
+ tvLocationType.text="TODO"
+ tvLocationType.invalidate()
+ tvLocationParent.text="TODO"
+ tvLocationParent.invalidate()
+ tvRating.text=post.ratings.toString()
+ tvRating.invalidate()
+ tvNumberOfRatings.text=post.ratings.toString()
+ tvNumberOfRatings.invalidate()
+ tvDescription.text=post.description
+ tvDescription.invalidate()
+ }
+ }
+
+} \ 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 0933460..481591d 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
@@ -1,32 +1,37 @@
package com.example.brzodolokacije.Activities
+import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
+import android.widget.Toast
import androidx.fragment.app.Fragment
-import com.example.brzodolokacije.Fragments.FragmentAddPost
-import com.example.brzodolokacije.Fragments.FragmentBrowse
-import com.example.brzodolokacije.Fragments.FragmentHome
-import com.example.brzodolokacije.Fragments.FragmentProfile
+import com.example.brzodolokacije.Fragments.*
import com.example.brzodolokacije.R
import com.google.android.material.bottomnavigation.BottomNavigationView
+import com.google.android.material.bottomsheet.BottomSheetDialog
class NavigationActivity : AppCompatActivity() {
+
+ //lateinit var openAddPost:Button
+ //lateinit var capturePost:Button
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_navigation)
- val homeFragment=FragmentHome()
+ 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(homeFragment)
+ setCurrentFragment(fragmentShowPosts)
bottomNav.setOnNavigationItemSelectedListener {
when(it.itemId){
- R.id.navHome->setCurrentFragment(homeFragment)
- R.id.navAddPost->setCurrentFragment(addPostFragment)
+ R.id.navHome->setCurrentFragment(fragmentShowPosts)
+ //R.id.navAddPost->setCurrentFragment(addPostFragment)
+ R.id.navAddPost->showBottomSheetAddNew()
R.id.navBrowse->setCurrentFragment(browseFragment)
R.id.navProfile->setCurrentFragment(profileFragment)
@@ -42,5 +47,34 @@ class NavigationActivity : AppCompatActivity() {
commit()
}
+ private fun showBottomSheetAddNew(){
+ var bottomSheetDialog:BottomSheetDialog
+ val bottomSheetView = layoutInflater.inflate(R.layout.bottom_sheet_add_new, null)
+ bottomSheetDialog=BottomSheetDialog(this)
+ bottomSheetDialog.setContentView(R.layout.bottom_sheet_add_new)
+ bottomSheetDialog.show()
+
+
+ var openAddPost=bottomSheetDialog.findViewById<View>(R.id.btnBottomSheetAddNewOpenAddPost) as Button
+ var capturePost=bottomSheetDialog.findViewById<View>(R.id.btnBottomSheetAddNewOpenCapturePost) as Button
+
+ openAddPost.setOnClickListener{
+ Toast.makeText(
+ applicationContext, "Open select from gallery ", Toast.LENGTH_LONG
+ ).show();
+ val intent = Intent (this, ActivityAddPost::class.java)
+ startActivity(intent)
+ }
+
+ capturePost.setOnClickListener{
+ Toast.makeText(
+ applicationContext, "Open capture ", Toast.LENGTH_LONG
+ ).show();
+ val intent = Intent (this, ActivityCapturePost::class.java)
+ startActivity(intent)
+ }
+
+ }
+
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/SplashPage.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/SplashPage.kt
new file mode 100644
index 0000000..3d2f923
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/SplashPage.kt
@@ -0,0 +1,23 @@
+package com.example.brzodolokacije.Activities
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.Handler
+import com.example.brzodolokacije.MainActivity
+import com.example.brzodolokacije.R
+
+class SplashPage : AppCompatActivity() {
+ private val time:Long = 4000
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_splash_page)
+
+ Handler().postDelayed({
+ startActivity(Intent(this, MainActivity::class.java))
+
+ // close this activity
+ finish() }, time)
+ }
+}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostImageAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostImageAdapter.kt
new file mode 100644
index 0000000..655b717
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostImageAdapter.kt
@@ -0,0 +1,42 @@
+package com.example.brzodolokacije.Adapters
+
+import android.app.Activity
+import android.graphics.BitmapFactory
+import android.media.Image
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.example.brzodolokacije.Models.Post
+import com.example.brzodolokacije.Models.PostImage
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.databinding.PostImageBinding
+import com.example.brzodolokacije.databinding.PostPreviewBinding
+
+class PostImageAdapter(val activity: Activity, val items : MutableList<PostImage>)
+ : RecyclerView.Adapter<PostImageAdapter.ViewHolder>(){
+ //constructer has one argument - list of objects that need to be displayed
+ //it is bound to xml of single item
+ private lateinit var binding: PostImageBinding
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val inflater = LayoutInflater.from(parent.context)
+ binding= PostImageBinding.inflate(inflater,parent,false)
+ return ViewHolder(binding)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int){
+ //sets components of particular item
+ holder.bind(items[position])
+ }
+ override fun getItemCount() = items.size
+ inner class ViewHolder(itemView : PostImageBinding) : RecyclerView.ViewHolder(itemView.root){
+ fun bind(item : PostImage){
+ binding.apply {
+ if(item!=null) {
+ Glide.with(activity)
+ .load(RetrofitHelper.baseUrl + "/api/post/image/" + item._id)
+ .into(locationImage)
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt
new file mode 100644
index 0000000..bbcf9e4
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt
@@ -0,0 +1,74 @@
+package com.example.brzodolokacije.Adapters
+
+import android.app.Activity
+import android.content.Intent
+import android.graphics.BitmapFactory
+import android.os.AsyncTask
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.example.brzodolokacije.Activities.ActivitySinglePost
+import com.example.brzodolokacije.Interfaces.IBackendApi
+import com.example.brzodolokacije.Models.LocationType
+import com.example.brzodolokacije.Models.PostPreview
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import com.example.brzodolokacije.databinding.PostPreviewBinding
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.Response
+
+
+class ShowPostsAdapter (val activity:Activity,val items : MutableList<PostPreview>)
+ : RecyclerView.Adapter<ShowPostsAdapter.ViewHolder>() {
+ private lateinit var token: String
+ private lateinit var imageApi: IBackendApi
+
+ //constructer has one argument - list of objects that need to be displayed
+ //it is bound to xml of single item
+ private lateinit var binding: PostPreviewBinding
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val inflater = LayoutInflater.from(parent.context)
+ imageApi= RetrofitHelper.getInstance()
+ token= SharedPreferencesHelper.getValue("jwt", activity).toString()
+ binding = PostPreviewBinding.inflate(inflater, parent, false)
+ return ViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ //sets components of particular item
+ holder.bind(items[position])
+ holder.itemView.setOnClickListener {
+ //Toast.makeText(activity,item._id,Toast.LENGTH_LONG).show()
+ val intent:Intent = Intent(activity,ActivitySinglePost::class.java)
+ var b=Bundle()
+ items[position].location.type=LocationType.ADA
+ b.putParcelable("selectedPost", items[position])
+ intent.putExtras(b)
+ activity.startActivity(intent)
+ }
+ }
+
+
+ override fun getItemCount() = items.size
+ inner class ViewHolder(itemView: PostPreviewBinding) : RecyclerView.ViewHolder(itemView.root) {
+ fun bind(item: PostPreview) {
+ binding.apply {
+ tvTitle.text = item.location.name
+ tvLocationParent.text = item.location.country
+ tvLocationType.text = "TODO"
+ if(item.images.isNotEmpty()) {
+ Glide.with(activity)
+ .load(RetrofitHelper.baseUrl + "/api/post/image/" + item.images[0]._id)
+ .into(locationImage)
+ }
+
+ }
+ }
+ }
+} \ No newline at end of file
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..8eaa469
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddNew.kt
@@ -0,0 +1,70 @@
+package com.example.brzodolokacije.Fragments
+
+import android.content.Intent
+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.Toast
+import androidx.fragment.app.FragmentTransaction
+import com.example.brzodolokacije.Activities.ActivityAddPost
+import com.example.brzodolokacije.Activities.ActivityForgottenPassword
+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{
+ Toast.makeText(
+ activity, "Add new post", Toast.LENGTH_LONG
+ ).show();
+ val intent = Intent (getActivity(), ActivityAddPost::class.java)
+ getActivity()?.startActivity(intent)
+
+/*
+ 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 b6452e9..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/FragmentAddRecension.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddRecension.kt
new file mode 100644
index 0000000..16709f7
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentAddRecension.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 [FragmentAddRecension.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class FragmentAddRecension : 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_recension, 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 FragmentAddRecension.
+ */
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ FragmentAddRecension().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/FragmentLogin.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentLogin.kt
index b9568df..01b3f1d 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,10 +92,10 @@ 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)
+ activity!!.finish()
}else{
if(response.errorBody()!=null)
Toast.makeText(activity, response.errorBody()!!.string(), Toast.LENGTH_LONG).show();
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..928a128 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,23 @@ 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)
+ requireActivity().finish()
+ }
}
} \ 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 a8176b0..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
@@ -65,7 +57,7 @@ class FragmentProfile : Fragment(R.layout.fragment_profile) {
var fm: FragmentTransaction =childFragmentManager.beginTransaction()
- fm.replace(R.id.flFragmentProfileFragmentContainer,FragmentUserPosts())
+ fm.replace(R.id.flFragmentProfileFragmentContainer, FragmentUserPosts())
fm.commit()
}
@@ -74,7 +66,7 @@ class FragmentProfile : Fragment(R.layout.fragment_profile) {
var fm: FragmentTransaction =childFragmentManager.beginTransaction()
- fm.replace(R.id.flFragmentProfileFragmentContainer,FragmentMyProfileInfo())
+ fm.replace(R.id.flFragmentProfileFragmentContainer, FragmentMyProfileInfo())
fm.commit()
}
@@ -82,7 +74,7 @@ class FragmentProfile : Fragment(R.layout.fragment_profile) {
var fm: FragmentTransaction =childFragmentManager.beginTransaction()
- fm.replace(R.id.flFragmentProfileFragmentContainer,FragmentMyRecensions())
+ fm.replace(R.id.flFragmentProfileFragmentContainer, FragmentMyRecensions())
fm.commit()
}
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/Fragments/FragmentShowPosts.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt
new file mode 100644
index 0000000..73744d4
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPosts.kt
@@ -0,0 +1,104 @@
+package com.example.brzodolokacije.Fragments
+
+import android.content.Context
+import android.content.Intent
+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.Toast
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.brzodolokacije.Activities.NavigationActivity
+import com.example.brzodolokacije.Adapters.SampleAdapter
+import com.example.brzodolokacije.Adapters.ShowPostsAdapter
+import com.example.brzodolokacije.Models.*
+import com.example.brzodolokacije.R
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import com.example.brzodolokacije.databinding.FragmentHomeBinding
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.Response
+
+
+class FragmentShowPosts : Fragment() {
+
+ private lateinit var binding: FragmentShowPosts
+ private var posts : MutableList<PostPreview> = mutableListOf()
+ private var layoutManagerVar: RecyclerView.LayoutManager? = null
+ private var adapterVar: RecyclerView.Adapter<ShowPostsAdapter.ViewHolder>? = null
+ private var recyclerView: RecyclerView?=null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ //load data for the list
+ loadData()
+ Log.d("main","greska")
+ //instantiate adapter and linearLayout
+ val postApi= RetrofitHelper.getInstance()
+ val token=SharedPreferencesHelper.getValue("jwt", requireActivity())
+ val request=postApi.getPosts("Bearer "+token)
+
+ request.enqueue(object : retrofit2.Callback<MutableList<PostPreview>?> {
+ override fun onResponse(call: Call<MutableList<PostPreview>?>, response: Response<MutableList<PostPreview>?>) {
+ if(response.isSuccessful){
+ posts=response.body()!!
+ recyclerView?.adapter=ShowPostsAdapter(requireActivity(),posts)
+ Toast.makeText(
+ activity, "prosao zahtev", Toast.LENGTH_LONG
+ ).show()
+ }else{
+ if(response.errorBody()!=null)
+ Toast.makeText(activity, response.errorBody()!!.string(), Toast.LENGTH_LONG).show();
+ }
+
+
+ }
+
+ override fun onFailure(call: Call<MutableList<PostPreview>?>, t: Throwable) {
+ Toast.makeText(
+ activity, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ }
+ })
+
+ adapterVar=ShowPostsAdapter(requireActivity(),posts)
+ layoutManagerVar= LinearLayoutManager(activity)
+ }
+
+ private fun loadData() {
+ posts.add(PostPreview("123","asdasd",
+ Location("asd","Ajfelov toranj","Pariz",
+ "Francuska","idk",1.1,1.1, LocationType.GRAD),"opsiopsaid",13,
+ 4.3f,mutableListOf(),mutableListOf()))
+ posts.add(PostPreview("123","asdasd",
+ Location("asd","Ajfelov toranj","Pariz",
+ "Francuska","idk",1.1,1.1, LocationType.GRAD),"opsiopsaid",13,
+ 4.3f,mutableListOf(),mutableListOf()))
+ posts.add(PostPreview("123","asdasd",
+ Location("asd","Ajfelov toranj","Pariz",
+ "Francuska","idk",1.1,1.1, LocationType.GRAD),"opsiopsaid",13,
+ 4.3f,mutableListOf(),mutableListOf()))
+ posts.add(PostPreview("123","asdasd",
+ Location("asd","Ajfelov toranj","Pariz",
+ "Francuska","idk",1.1,1.1, LocationType.GRAD),"opsiopsaid",13,
+ 4.3f,mutableListOf(),mutableListOf()))
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ val rootView = inflater?.inflate(R.layout.fragment_show_posts, container, false)
+ recyclerView = rootView?.findViewById(R.id.rvMain)
+ // set recyclerView attributes
+ recyclerView?.setHasFixedSize(true)
+ recyclerView?.layoutManager = layoutManagerVar
+ recyclerView?.adapter = adapterVar
+ return rootView
+ }
+
+} \ No newline at end of file
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..c712597
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
@@ -0,0 +1,42 @@
+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 com.example.brzodolokacije.Models.Location
+import com.example.brzodolokacije.Models.PostPreview
+import okhttp3.MultipartBody
+import okhttp3.Request
+import okhttp3.RequestBody
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.http.*
+
+
+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>
+ @GET("/api/post")
+ fun getPosts(@Header("Authorization") authHeader:String):Call<MutableList<PostPreview>>
+ @POST("/api/Location/add")
+ fun addLocation(@Header("Authorization") authHeader:String,@Body obj: Location ):Call<Location>
+ @Multipart
+ @POST("/api/Post/add")
+ fun addPost(@Header("Authorization") authHeader:String, @Part images: Array<MultipartBody.Part?>?
+ ,@Part("_id") _id:RequestBody
+ ,@Part("description") description:RequestBody
+ ,@Part("locationId") locationId:RequestBody
+ ):Call<PostPreview>
+
+ //@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..0c43088 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,16 @@ 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 com.example.brzodolokacije.Services.authCheck
+import retrofit2.Call
+import retrofit2.Response
class MainActivity : AppCompatActivity() {
@@ -17,13 +23,15 @@ 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)
startActivity(intent)
+ finish()
}
fun checkLoggedIn():Boolean{
@@ -33,10 +41,41 @@ class MainActivity : AppCompatActivity() {
var jwt:JWT=JWT(jwtString)
if(jwt.isExpired(30))
return false
+ refreshJwt(jwtString)
return true
}
+
+ fun refreshJwt(token:String){
+ 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/Location.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Location.kt
new file mode 100644
index 0000000..c5fe48a
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Location.kt
@@ -0,0 +1,16 @@
+package com.example.brzodolokacije.Models
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class Location (
+ var _id:String,
+ var name:String,
+ var city:String,
+ var country:String,
+ var address:String,
+ var latitude:Double,
+ var longitude:Double,
+ var type:LocationType?
+): Parcelable
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationType.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationType.kt
new file mode 100644
index 0000000..a078863
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationType.kt
@@ -0,0 +1,7 @@
+package com.example.brzodolokacije.Models
+
+enum class LocationType {
+ GRAD,ULICA,JEZERO,REKA,PLAZA,OKEAN, MORE, MOREUZ, MOST,BANJA,
+ PLANINA, VISORAVAN, PIRAMIDA, LIVADA, SELO, OSTRVO, POLUOSTRVO, KLISURA, ARHIPELAG,
+ ADA, DELTA, FJORD, GEJZIR, IZVOR, KOTLINA, MINERALNI_IZVOR, PECINA ,SUMA, VODOPAD,VULKAN
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationTypes.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationTypes.kt
deleted file mode 100644
index c599dae..0000000
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/LocationTypes.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.example.brzodolokacije.Models
-
-enum class LocationTypes {
-} \ 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 9c0eae1..9b9afaa 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,12 +1,52 @@
package com.example.brzodolokacije.Models
-import java.util.*
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+import okhttp3.MultipartBody
+import java.time.LocalDateTime
data class Post (
var _id:String,
- var creationDate: Date,
- var country:String,//drzava
- var city:String,
- var location:String,//naziv grada/naziv planine/naziv jezera/.......
- var type:LocationTypes //tip lokacije
- ) \ No newline at end of file
+ var location:Location,
+ var ownerId:String,
+ var description:String,
+ var views:List<String>,
+ var reports:List<String>,
+ var ratings:List<Rating>,
+ var comments:List<Comment>,
+ var images:List<PostImage>
+
+
+ )
+data class PostSend(
+ var _id:String,
+ var locationId:String,
+ var description:String,
+ var images: List<MultipartBody.Part>
+
+)
+@Parcelize
+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>
+):Parcelable
+
+
+@Parcelize
+data class Comment (
+ var userId:String,
+ var comment:String,
+ var parent:Comment,
+ var timeStamp: LocalDateTime
+):Parcelable
+
+data class Rating(
+ var useridval :String,
+ var rating:Int
+) \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt
new file mode 100644
index 0000000..93326b3
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/PostImage.kt
@@ -0,0 +1,10 @@
+package com.example.brzodolokacije.Models
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class PostImage (
+ var _id:String,
+ var path:String
+ ): Parcelable \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/MyAppGlideModule.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/MyAppGlideModule.kt
new file mode 100644
index 0000000..cee5f12
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/MyAppGlideModule.kt
@@ -0,0 +1,8 @@
+package com.example.brzodolokacije.Services
+
+import com.bumptech.glide.annotation.GlideModule
+import com.bumptech.glide.module.AppGlideModule
+@GlideModule
+class MyAppGlideModule: AppGlideModule() {
+
+} \ 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/java/com/example/brzodolokacije/Services/authCheck.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/authCheck.kt
new file mode 100644
index 0000000..bfd3975
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/authCheck.kt
@@ -0,0 +1,31 @@
+package com.example.brzodolokacije.Services
+
+import android.app.Activity
+import androidx.fragment.app.FragmentActivity
+import com.auth0.android.jwt.JWT
+
+object authCheck {
+
+
+
+ fun isLoggedIn(act:Activity):Boolean{
+ var jwtString=SharedPreferencesHelper.getValue("jwt",act)
+ if(jwtString==null)
+ return false
+ var jwt: JWT = JWT(jwtString)
+ if(jwt.isExpired(30))
+ return false
+ return true
+
+ }
+ fun isLoggedIn(act:FragmentActivity):Boolean{
+ var jwtString=SharedPreferencesHelper.getValue("jwt",act)
+ if(jwtString==null)
+ return false
+ var jwt: JWT = JWT(jwtString)
+ if(jwt.isExpired(30))
+ return false
+ return true
+
+ }
+} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/filter.png b/Client/BrzoDoLokacije/app/src/main/res/drawable/filter.png
new file mode 100644
index 0000000..4342c2c
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/filter.png
Binary files differ
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/grid.png b/Client/BrzoDoLokacije/app/src/main/res/drawable/grid.png
new file mode 100644
index 0000000..03d9ef9
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/grid.png
Binary files differ
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back.xml
new file mode 100644
index 0000000..d9b7ee0
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+ android:tint="#274352" android:viewportHeight="24"
+ android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@android:color/white" android:pathData="M11.67,3.87L9.9,2.1 0,12l9.9,9.9 1.77,-1.77L3.54,12z"/>
+</vector>
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_forward.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_forward.xml
new file mode 100644
index 0000000..80b796f
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_forward.xml
@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+ android:tint="#274352" android:viewportHeight="24"
+ android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@android:color/white" android:pathData="M6.23,20.23l1.77,1.77l10,-10l-10,-10l-1.77,1.77l8.23,8.23z"/>
+</vector>
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/list.webp b/Client/BrzoDoLokacije/app/src/main/res/drawable/list.webp
new file mode 100644
index 0000000..608932f
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/list.webp
Binary files differ
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/rounded_picture_background.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/rounded_picture_background.xml
new file mode 100644
index 0000000..0a8e933
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/rounded_picture_background.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <corners android:radius="20dp"/>
+ <solid android:color="#FFFFFF"></solid>
+<!-- <padding-->
+<!-- android:left="10dp"-->
+<!-- android:top="5dp"-->
+<!-- android:right="10dp"-->
+<!-- android:bottom="5dp" >-->
+
+<!-- </padding>-->
+</shape>
diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/sort.png b/Client/BrzoDoLokacije/app/src/main/res/drawable/sort.png
new file mode 100644
index 0000000..828cd01
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/sort.png
Binary files differ
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml
new file mode 100644
index 0000000..5af0c1f
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_add_post.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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=".Activities.ActivityAddPost">
+
+ <ImageSwitcher
+ android:id="@+id/isActivityAddPostSwitcher"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ app:layout_constraintBottom_toTopOf="@+id/btnActivityAddPostUploadFromGallery"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <Button
+ android:id="@+id/nextImage"
+ android:layout_width="78dp"
+ android:layout_height="499dp"
+ android:background="@drawable/rounded_transparent_button"
+ android:gravity="right"
+ android:padding="30dp"
+ app:icon="@drawable/ic_baseline_arrow_forward"
+ app:iconTint="#072242"
+ app:layout_constraintBottom_toBottomOf="@+id/isActivityAddPostSwitcher"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:ignore="SpeakableTextPresentCheck" />
+
+ <Button
+ android:id="@+id/previousImage"
+ android:layout_width="70dp"
+ android:layout_height="497dp"
+
+ android:background="@drawable/rounded_transparent_button"
+ android:gravity="left"
+ android:padding="30dp"
+ app:icon="@drawable/ic_baseline_arrow_back"
+ app:iconTint="#0E283C"
+ app:layout_constraintBottom_toBottomOf="@+id/isActivityAddPostSwitcher"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:ignore="SpeakableTextPresentCheck" />
+
+ <Button
+ android:id="@+id/btnActivityAddPostUploadFromGallery"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Otvori galeriju"
+ app:layout_constraintBottom_toTopOf="@+id/tvActivityAddPostLocationtext"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+
+ <TextView
+ android:id="@+id/tvActivityAddPostLocationtext"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Lokacija"
+ app:layout_constraintBottom_toTopOf="@+id/etActivityAddPostLocation"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <EditText
+ android:id="@+id/etActivityAddPostLocation"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:ems="10"
+ android:hint="Reykjavik, Iceland"
+ android:inputType="textEmailAddress"
+ app:layout_constraintBottom_toTopOf="@+id/tvActivityAddPostDescriptiontext"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <TextView
+ android:id="@+id/tvActivityAddPostDescriptiontext"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Opis"
+ app:layout_constraintBottom_toTopOf="@+id/etActivityAddPostDescription"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <EditText
+ android:id="@+id/etActivityAddPostDescription"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:ems="10"
+ android:hint="Reykjavik, Iceland"
+ android:inputType="textEmailAddress"
+ app:layout_constraintBottom_toTopOf="@+id/btnActivityAddPostPost"
+ app:layout_constraintEnd_toEndOf="parent" />
+
+ <Button
+ android:id="@+id/btnActivityAddPostPost"
+ android:layout_width="200dp"
+ android:layout_height="40dp"
+ android:background="@drawable/rounded_cyan_button"
+ android:backgroundTint="#1C789A"
+ android:text="Objavi"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml
new file mode 100644
index 0000000..91517a7
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_capture_post.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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=".Activities.ActivityCapturePost">
+
+ <ImageView
+ android:id="@+id/ivActivityCapturePostImage"
+ android:layout_width="408dp"
+ android:layout_height="319dp"
+ android:layout_marginTop="4dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:srcCompat="@tools:sample/avatars" />
+
+ <Button
+ android:id="@+id/btnActivityCapturePostCapture"
+ android:layout_width="60dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="68dp"
+ app:cornerRadius="30dp"
+ app:icon="@android:drawable/ic_menu_camera"
+ app:layout_constraintBottom_toTopOf="@+id/tvActivityCapturePostLocationtext"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.498"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/ivActivityCapturePostImage" />
+
+ <TextView
+ android:id="@+id/tvActivityCapturePostLocationtext"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="464dp"
+ android:text="Lokacija"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <EditText
+ android:id="@+id/etActivityCapturePostLocation"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:layout_marginTop="4dp"
+ android:ems="10"
+ android:hint="Reykjavik, Iceland"
+ android:inputType="textEmailAddress"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tvActivityCapturePostLocationtext" />
+
+ <TextView
+ android:id="@+id/tvActivityCapturePostDescriptiontext"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="Opis"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/etActivityCapturePostLocation" />
+
+ <EditText
+ android:id="@+id/etActivityCapturePostDescription"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ android:layout_marginTop="4dp"
+ android:ems="10"
+ android:hint="Reykjavik, Iceland"
+ android:inputType="textEmailAddress"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tvActivityCapturePostDescriptiontext" />
+
+
+ <Button
+ android:id="@+id/btnActivityCapturePostPost"
+ android:layout_width="200dp"
+ android:layout_height="40dp"
+ android:background="@drawable/rounded_cyan_button"
+ android:backgroundTint="#1C789A"
+ android:text="Objavi"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintDimensionRatio="w,1:1"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.431"
+ app:layout_constraintStart_toStartOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_login_register.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_login_register.xml
index 0f82285..115fff5 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_login_register.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_login_register.xml
@@ -16,40 +16,37 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="1.0"
+ app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/gradient" />
<androidx.constraintlayout.widget.ConstraintLayout
- android:background="@drawable/login_register_background_top_radius"
-
android:id="@+id/linearLayout"
android:layout_width="0dp"
- android:layout_height="65dp"
+ android:layout_height="wrap_content"
android:layout_marginStart="50dp"
+ android:layout_marginTop="150dp"
android:layout_marginEnd="50dp"
- android:gravity="center|center_horizontal"
+ android:background="@drawable/login_register_background_top_radius"
android:orientation="horizontal"
- app:layout_constraintBottom_toTopOf="@+id/flFragmentActivityLRFragmentsView"
+ android:padding="20dp"
app:layout_constraintEnd_toEndOf="@+id/imageView2"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="1.0">
+ app:layout_constraintTop_toTopOf="@+id/imageView2">
<ImageView
android:id="@+id/imageView5"
- android:layout_width="280dp"
+ android:layout_width="250dp"
android:layout_height="40dp"
android:background="@drawable/rounded_white_button_login"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.37"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="1.0"></ImageView>
+ app:layout_constraintTop_toTopOf="parent"></ImageView>
<android.widget.Button
android:id="@+id/btnFragmentActivityLRLogin"
- android:layout_width="139dp"
+ android:layout_width="120dp"
android:layout_height="40dp"
android:background="@drawable/rounded_cyan_button"
android:elevation="25dp"
@@ -59,19 +56,20 @@
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/imageView5"
app:layout_constraintEnd_toStartOf="@+id/btnFragmentActivityLRRegister"
- app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/imageView5"
- app:layout_constraintTop_toTopOf="@+id/imageView5" />
+ app:layout_constraintTop_toTopOf="@+id/imageView5"
+ app:layout_constraintVertical_bias="0.0" />
<android.widget.Button
android:id="@+id/btnFragmentActivityLRRegister"
- android:layout_width="140dp"
+ android:layout_width="120dp"
android:layout_height="40dp"
- android:textColor="#FF1C789A"
android:background="@drawable/rounded_transparent_button"
android:elevation="25dp"
android:padding="0dp"
android:text="Registruj se"
+ android:textColor="#FF1C789A"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/imageView5"
app:layout_constraintTop_toTopOf="@+id/imageView5"
@@ -87,12 +85,10 @@
android:layout_marginEnd="50dp"
android:background="@drawable/login_register_background_bottom_radius"
android:elevation="20dp"
- android:foregroundGravity="center_vertical|center"
- app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="@+id/imageView2"
- app:layout_constraintVertical_bias="0.411">
+ app:layout_constraintTop_toBottomOf="@+id/linearLayout">
</FrameLayout>
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml
new file mode 100644
index 0000000..00d3460
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ tools:context=".Activities.ActivitySinglePost">
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/rvMain"
+ android:layout_width="match_parent"
+ android:layout_height="443dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+ </androidx.recyclerview.widget.RecyclerView>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/tvTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Naslov" />
+
+ <TextView
+ android:id="@+id/tvLocationType"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="11dp"
+ android:text="tip lokacije" />
+
+ <TextView
+ android:id="@+id/tvLocationParent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Drzava, grad" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:layout_width="213dp"
+ android:layout_height="27dp"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/star1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:src="@android:drawable/btn_star_big_on" />
+
+ <ImageView
+ android:id="@+id/star2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:src="@android:drawable/btn_star_big_on" />
+
+ <ImageView
+ android:id="@+id/star3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:src="@android:drawable/btn_star_big_on" />
+
+ <ImageView
+ android:id="@+id/star4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:src="@android:drawable/btn_star_big_on" />
+
+ <ImageView
+ android:id="@+id/star5"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:src="@android:drawable/btn_star_big_on" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/tvRating"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:text="4.2"
+ app:layout_constraintEnd_toStartOf="@+id/textView10"
+ tools:layout_editor_absoluteY="0dp" />
+
+ <TextView
+ android:id="@+id/tvNumberOfRatings"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="(10,500)"
+ app:layout_constraintEnd_toEndOf="parent"
+ tools:layout_editor_absoluteY="0dp" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:padding="10dp"
+ android:background="@drawable/rounded_picture_background"
+ android:elevation="5dp">
+
+ <TextView
+ android:id="@+id/tvDescription"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextViewTextView"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.048"
+ app:layout_constraintStart_toStartOf="parent"
+ tools:layout_editor_absoluteY="4dp" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </LinearLayout>
+
+
+</LinearLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_splash_page.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_splash_page.xml
new file mode 100644
index 0000000..7035b22
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_splash_page.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+ android:background="#FFFFFF"
+ android:backgroundTint="#388DAC"
+ tools:context=".Activities.SplashPage">
+
+ <ImageView
+ android:id="@+id/imageView6"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0"
+ app:srcCompat="@drawable/gradient" />
+
+ <ImageView
+ android:id="@+id/imageView7"
+ android:layout_width="0dp"
+ android:layout_height="326dp"
+ android:layout_marginTop="70dp"
+ app:layout_constraintBottom_toTopOf="@+id/textView"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="1.0"
+ app:srcCompat="@mipmap/ic_launcher_foreground" />
+
+ <TextView
+ android:id="@+id/textView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="BRZO DO LOKACIJE"
+ android:textColor="#FFE4E2C9"
+ android:textSize="25dp"
+ app:layout_constraintBottom_toTopOf="@+id/textView3"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.613" />
+
+ <TextView
+ android:id="@+id/textView3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dp"
+ android:text="by ODYSSEY"
+ android:textColor="#FFE4E2C9"
+ android:textSize="20dp"
+ app:layout_constraintBottom_toBottomOf="@+id/imageView6"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/bottom_sheet_add_new.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/bottom_sheet_add_new.xml
new file mode 100644
index 0000000..8f9700e
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/bottom_sheet_add_new.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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:id="@+id/bottomSheetAddNewForNav"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/textView6"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Dodaj novu objavu"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <Button
+ android:id="@+id/btnBottomSheetAddNewOpenAddPost"
+ android:layout_width="165dp"
+ android:layout_height="88dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="8dp"
+ android:text="Izaberi fotografije iz galerije"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/textView6"
+ app:layout_constraintVertical_bias="1.0" />
+
+ <Button
+ android:id="@+id/btnBottomSheetAddNewOpenCapturePost"
+
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:text="Nova fotografija"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.862"
+ app:layout_constraintStart_toEndOf="@+id/btnBottomSheetAddNewOpenAddPost"
+ app:layout_constraintTop_toBottomOf="@+id/textView6"
+ app:layout_constraintVertical_bias="0.666" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
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..579afdb
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_new.xml
@@ -0,0 +1,73 @@
+<?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_toTopOf="@+id/flFragmentAddNewFragmentContainer"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/btnFragmentAddNewNewPost"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.997" />
+
+ <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_toTopOf="@+id/flFragmentAddNewFragmentContainer"
+ app:layout_constraintEnd_toStartOf="@+id/btnFragmentAddNewNewLocation"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.997" />
+
+ <View
+ android:id="@+id/divider3"
+ android:layout_width="409dp"
+ android:layout_height="1dp"
+ android:background="?android:attr/listDivider"
+ app:layout_constraintBottom_toTopOf="@+id/flFragmentAddNewFragmentContainer"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/btnFragmentAddNewNewPost"
+ app:layout_constraintVertical_bias="1.0" />
+
+ <FrameLayout
+ android:id="@+id/flFragmentAddNewFragmentContainer"
+ android:layout_width="411dp"
+ android:layout_height="309dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ 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_add_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_post.xml
index 2cf3c8c..c106fcd 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_post.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_post.xml
@@ -6,10 +6,14 @@
tools:context=".Fragments.FragmentAddPost">
<!-- TODO: Update blank fragment layout -->
+
<TextView
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:text="Post Add" />
+ android:layout_height="20dp"/>
+
+
+
+ <!--
<Button
android:id="@+id/btnFragmentAddLogOut"
@@ -18,6 +22,6 @@
android:layout_marginTop="40dp"
android:background="@drawable/rounded_cyan_button"
android:backgroundTint="#1C789A"
- android:text="Log Out" />
+ android:text="Log Out" />-->
</FrameLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_recension.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_recension.xml
new file mode 100644
index 0000000..433ae0e
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_add_recension.xml
@@ -0,0 +1,13 @@
+<?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.FragmentAddRecension">
+
+ <!-- TODO: Update blank fragment layout -->
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+</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
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml
new file mode 100644
index 0000000..02512d4
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ tools:context=".Fragments.FragmentShowPosts">
+
+ <EditText
+ android:id="@+id/editTextTextPersonName2"
+ android:layout_width="wrap_content"
+ android:layout_height="50dp"
+ android:layout_gravity="center_horizontal"
+ android:ems="10"
+ android:inputType="textPersonName"
+ android:text="Name" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="match_parent"
+ android:layout_height="50dp">
+
+
+ <ImageButton
+ android:id="@+id/button3"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:layout_alignParentRight="true"
+ android:src="@drawable/filter"
+ android:scaleType="centerCrop"
+ android:background="@color/white"/>
+
+ <ImageButton
+ android:id="@+id/imageButton1"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:layout_marginStart="8dp"
+ android:layout_weight="1"
+ android:scaleType="centerCrop"
+ android:src="@drawable/sort"
+ app:layout_constraintStart_toEndOf="@+id/button3"
+ tools:layout_editor_absoluteY="0dp"
+ android:background="@color/white"/>
+
+ <ImageButton
+ android:id="@+id/imageButton2"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:layout_marginEnd="16dp"
+ android:layout_weight="1"
+ android:background="@color/white"
+ android:scaleType="centerCrop"
+ android:src="@drawable/list"
+ app:layout_constraintEnd_toStartOf="@+id/imageButton3"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toEndOf="@+id/imageButton1"
+ tools:layout_editor_absoluteY="0dp" />
+
+ <ImageButton
+ android:id="@+id/imageButton3"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:layout_marginStart="248dp"
+ android:layout_weight="1"
+ android:background="@color/white"
+ android:scaleType="centerCrop"
+ android:src="@drawable/grid"
+ app:layout_constraintStart_toEndOf="@+id/imageButton1"
+ tools:layout_editor_absoluteY="0dp" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/rvMain"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" >
+
+ </androidx.recyclerview.widget.RecyclerView>
+
+</LinearLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/post_image.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/post_image.xml
new file mode 100644
index 0000000..c2a999d
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/post_image.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="380dp"
+ android:layout_height="wrap_content"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_margin="10dp"
+ android:background="@drawable/rounded_picture_background"
+ android:clipToOutline="true"
+ android:clickable="true">
+
+ <ImageView
+ android:id="@+id/locationImage"
+ android:layout_width="match_parent"
+ android:layout_height="420dp"
+ android:outlineProvider="background"
+ android:scaleType="centerCrop"
+ android:src="@drawable/b1"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0" />
+
+
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/post_preview.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/post_preview.xml
new file mode 100644
index 0000000..dafd3b9
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/post_preview.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="wrap_content"
+ android:layout_margin="0dp"
+ android:background="@drawable/rounded_picture_background"
+ android:clipToOutline="true"
+>
+
+
+ <ImageView
+ android:id="@+id/locationImage"
+ android:layout_width="match_parent"
+ android:layout_height="250dp"
+ android:outlineProvider="background"
+ android:scaleType="centerCrop"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0" />
+
+ <View
+ android:id="@+id/vBanner"
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:background="@color/dark_blue_transparent"
+ android:outlineProvider="background"
+ app:layout_constraintBottom_toBottomOf="@+id/locationImage"
+ tools:layout_editor_absoluteX="10dp">
+
+
+ </View>
+
+ <TextView
+ android:id="@+id/tvTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="top|left"
+ android:text="Naslov"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.076"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBanner"
+ app:layout_constraintVertical_bias="0.18" />
+
+ <TextView
+ android:id="@+id/tvLocationType"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Tip lokacije"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="@+id/vBanner"
+ app:layout_constraintEnd_toStartOf="@+id/tvLocationParent"
+ app:layout_constraintHorizontal_bias="0.112"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBanner"
+ app:layout_constraintVertical_bias="0.721" />
+
+ <TextView
+ android:id="@+id/tvLocationParent"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="grad, drzava"
+ android:textAlignment="viewEnd"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.952"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBanner"
+ app:layout_constraintVertical_bias="0.737" />
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values-land/dimens.xml b/Client/BrzoDoLokacije/app/src/main/res/values-land/dimens.xml
new file mode 100644
index 0000000..10125a3
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/values-land/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">48dp</dimen>
+ </resources> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values-w1240dp/dimens.xml b/Client/BrzoDoLokacije/app/src/main/res/values-w1240dp/dimens.xml
new file mode 100644
index 0000000..ec434d3
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/values-w1240dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">200dp</dimen>
+ </resources> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values-w600dp/dimens.xml b/Client/BrzoDoLokacije/app/src/main/res/values-w600dp/dimens.xml
new file mode 100644
index 0000000..10125a3
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/values-w600dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">48dp</dimen>
+ </resources> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values/colors.xml b/Client/BrzoDoLokacije/app/src/main/res/values/colors.xml
index 588b9cf..0d4da4f 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/values/colors.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/values/colors.xml
@@ -7,5 +7,5 @@
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
-
+ <color name="dark_blue_transparent">#DE093A4C</color>
</resources> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml b/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..b789d50
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/values/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">16dp</dimen>
+ </resources> \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/values/themes.xml b/Client/BrzoDoLokacije/app/src/main/res/values/themes.xml
index 6193009..0b453e2 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/values/themes.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/values/themes.xml
@@ -1,5 +1,5 @@
<resources xmlns:tools="http://schemas.android.com/tools">
- <style name="Theme.BrzoDoLokacije" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <style name="Theme.BrzoDoLokacije" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
diff --git a/Client/BrzoDoLokacije/app/src/main/res/xml/file_paths.xml b/Client/BrzoDoLokacije/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..3d98544
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+ <external-files-path name="my_images" path="Pictures" />
+</paths> \ No newline at end of file