From bf6c3e1de8cff9af42d7a5f3edf1ee2f159c434b Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Thu, 24 Nov 2022 20:52:57 +0100 Subject: Napravljen kontroler i servis za preuzimanje kompresovanih slika. --- Backend/Api/Api/Api.csproj | 1 + Backend/Api/Api/Controllers/PostController.cs | 9 +++++++++ Backend/Api/Api/Interfaces/IFileService.cs | 1 + Backend/Api/Api/Services/FileService.cs | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/Backend/Api/Api/Api.csproj b/Backend/Api/Api/Api.csproj index 24c41b7..0e541f9 100644 --- a/Backend/Api/Api/Api.csproj +++ b/Backend/Api/Api/Api.csproj @@ -10,6 +10,7 @@ + diff --git a/Backend/Api/Api/Controllers/PostController.cs b/Backend/Api/Api/Controllers/PostController.cs index dc48c73..3fe1b3f 100644 --- a/Backend/Api/Api/Controllers/PostController.cs +++ b/Backend/Api/Api/Controllers/PostController.cs @@ -66,6 +66,15 @@ namespace Api.Controllers return BadRequest("Slika ne postoji"); return File(System.IO.File.ReadAllBytes(f.path), "image/*", Path.GetFileName(f.path)); } + [HttpGet("image/compress/{id}")] + //[Authorize(Roles = "User")] + public async Task getCompressedImage(string id) + { + Byte[] f = await _fileService.getCompressedImage(id); + if (f == null) + return BadRequest("Slika ne postoji"); + return File(f, "image/*", "tempcompress"); + } [HttpPost("posts/{id}/addrating")] [Authorize(Roles = "User")] diff --git a/Backend/Api/Api/Interfaces/IFileService.cs b/Backend/Api/Api/Interfaces/IFileService.cs index e736305..33ff5d9 100644 --- a/Backend/Api/Api/Interfaces/IFileService.cs +++ b/Backend/Api/Api/Interfaces/IFileService.cs @@ -4,5 +4,6 @@ { Task add(Models.File file); Task getById(string id); + Task getCompressedImage(string id); } } \ No newline at end of file diff --git a/Backend/Api/Api/Services/FileService.cs b/Backend/Api/Api/Services/FileService.cs index 1937c10..b951efc 100644 --- a/Backend/Api/Api/Services/FileService.cs +++ b/Backend/Api/Api/Services/FileService.cs @@ -1,5 +1,6 @@ using Api.Interfaces; using Api.Models; +using ImageMagick; using MongoDB.Driver; using File = Api.Models.File; @@ -24,5 +25,22 @@ namespace Api.Services { return await _files.Find(file => file._id == id).FirstOrDefaultAsync(); } + public async Task getCompressedImage(string id) + { + Byte[] res = null; + Models.File f = await getById(id); + if (f == null || !System.IO.File.Exists(f.path)) + return res; + using (MagickImage image = new MagickImage(f.path)) + { + image.Format = image.Format; + image.Quality = 30; + res= image.ToByteArray(); + } + + + return res; + + } } } -- cgit v1.2.3 From b82100be223288538c4cd1d617733ffd053a1bb8 Mon Sep 17 00:00:00 2001 From: Jelena Petrovic Date: Fri, 25 Nov 2022 01:33:46 +0100 Subject: Automatsko brisanje ceta kada se korisnik izloguje ili obrise aplikaciju #47 --- .../brzodolokacije/Fragments/FragmentMyProfileInfo.kt | 4 +++- .../main/java/com/example/brzodolokacije/chat/DBHelper.kt | 12 +++++++++++- .../java/com/example/brzodolokacije/chat/SignalRListener.kt | 3 +-- Client/BrzoDoLokacije/app/src/main/res/xml/backup_rules.xml | 5 +++-- 4 files changed, 18 insertions(+), 6 deletions(-) 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 928a128..9cce17f 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 @@ -2,11 +2,12 @@ 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 androidx.fragment.app.Fragment +import com.exam.DBHelper import com.example.brzodolokacije.Activities.ActivityLoginRegister import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.SharedPreferencesHelper @@ -55,6 +56,7 @@ class FragmentMyProfileInfo : Fragment() { fun logOut(){ if(SharedPreferencesHelper.removeValue("jwt",requireActivity())) { + DBHelper.getInstance(requireActivity()).deleteDB(); val intent= Intent(requireActivity(), ActivityLoginRegister::class.java) startActivity(intent) requireActivity().finish() diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt index 479b9cb..191df3c 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt @@ -59,7 +59,7 @@ class DBHelper : fun doesTableExist(tableName:String,db: SQLiteDatabase?):Boolean{ if(db!=null){ - var sqlString:String="select DISTINCT tbl_name from sqlite_master where tbl_name = '\"+tableName+\"'" + var sqlString:String="select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'" var cursor: Cursor=db.rawQuery(sqlString,null) if(cursor!=null){ if(cursor.count>0){ @@ -78,6 +78,7 @@ class DBHelper : } fun addMessage(message: Message, sent:Boolean=true){ + onCreate(db) if(!message._id.isNullOrEmpty() && message.senderId==message.receiverId){ Log.d("main", "ne zapisuje se dupla poruka") } else { @@ -107,6 +108,7 @@ class DBHelper : } } fun getMessages(userId:String, self:Boolean=false): MutableList? { + onCreate(db) var sql:String if(!self) sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' OR receiverId='"+userId+"'" @@ -138,6 +140,7 @@ class DBHelper : } fun getContacts(): MutableList? { + onCreate(db) var sql="SELECT * FROM "+ CONTACTS_TABLE_NAME var cursor=db?.rawQuery(sql,null) if(cursor?.count!! >0){ @@ -152,4 +155,11 @@ class DBHelper : } return null } + + fun deleteDB() { + var sql="DROP TABLE IF EXISTS "+ CONTACTS_TABLE_NAME + db?.execSQL(sql) + sql="DROP TABLE IF EXISTS "+ MESSAGES_TABLE_NAME + db?.execSQL(sql) + } } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt index d091c5d..567271d 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt @@ -15,7 +15,7 @@ import com.microsoft.signalr.HubConnectionState class SignalRListener private constructor(val activity: Activity){ - private var hubConnection:HubConnection + public var hubConnection:HubConnection private var dbHelper:DBHelper init{ dbHelper= DBHelper.getInstance(activity) @@ -31,7 +31,6 @@ class SignalRListener private constructor(val activity: Activity){ MessageReceive::class.java ) hubConnection.start().blockingAwait() - Log.d("main", hubConnection.connectionState.toString()) } diff --git a/Client/BrzoDoLokacije/app/src/main/res/xml/backup_rules.xml b/Client/BrzoDoLokacije/app/src/main/res/xml/backup_rules.xml index fa0f996..83368ad 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/xml/backup_rules.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/xml/backup_rules.xml @@ -8,6 +8,7 @@ + --> + + \ No newline at end of file -- cgit v1.2.3 From 58ec6770e075ace89d3bba9bc75b0a44673c36c7 Mon Sep 17 00:00:00 2001 From: Jelena Petrovic Date: Fri, 25 Nov 2022 14:20:01 +0100 Subject: Podeseno stranicenje tako da ucitava nove strane samo kada korisnik skroluje #48 --- .../example/brzodolokacije/Adapters/ShowPostsAdapter.kt | 9 --------- .../brzodolokacije/paging/SearchPostsPagingSource.kt | 15 ++++++++++++--- .../brzodolokacije/paging/SearchPostsRepository.kt | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) 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 index 0bd625f..216f859 100644 --- 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 @@ -2,8 +2,6 @@ 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 @@ -13,18 +11,11 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.example.brzodolokacije.Activities.ActivitySinglePost -import com.example.brzodolokacije.Activities.NavigationActivity 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?=null) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt index b1c89db..cee39ce 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt @@ -2,9 +2,10 @@ package com.example.brzodolokacije.paging import android.app.Activity import android.util.Log +import androidx.paging.ExperimentalPagingApi import androidx.paging.PagingSource +import androidx.paging.PagingState import com.example.brzodolokacije.Interfaces.IBackendApi -import com.example.brzodolokacije.Models.PagedPosts import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.Models.SearchParams import com.example.brzodolokacije.Services.SharedPreferencesHelper @@ -23,10 +24,10 @@ class SearchPostsPagingSource( val response=backend.getPagedPosts("Bearer "+token,searchParams.locationId, page,searchParams.sorttype,searchParams.filterdate ) - Log.d("main",page.toString()) + Log.d("main","stranicenje: "+page.toString()) LoadResult.Page( response.posts,prevKey=if(page==0) null else page-1, - nextKey=if(response.posts.isEmpty()) null else page+1 + nextKey=if(page==response.totalpages) null else page+1 ) }catch(exception:IOException){ return LoadResult.Error(exception) @@ -35,4 +36,12 @@ class SearchPostsPagingSource( } } + @ExperimentalPagingApi + override fun getRefreshKey(state: PagingState): Int? { + return state.anchorPosition?.let{ anchorPosition-> + val anchorPage=state.closestPageToPosition(anchorPosition) + anchorPage?.prevKey?.plus(1)?:anchorPage?.nextKey?.minus(1) + } + } + } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt index 4eeb85b..f43bc31 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt @@ -4,7 +4,6 @@ import android.app.Activity import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData -import androidx.paging.cachedIn import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.Models.SearchParams import com.example.brzodolokacije.Services.RetrofitHelper @@ -14,6 +13,7 @@ class SearchPostsRepository(val activity: Activity,val searchParams: SearchParam companion object{ const val DEFAULT_PAGE_SIZE=20 const val DEFAULT_PAGE_INDEX=1 + const val PREFETCH_DISTANCE=6 fun getInstance(activity: Activity,searchParams: SearchParams)=SearchPostsRepository(activity,searchParams) } @@ -26,6 +26,6 @@ class SearchPostsRepository(val activity: Activity,val searchParams: SearchParam } private fun getDefaultPageConfig(): PagingConfig { - return PagingConfig(pageSize= DEFAULT_PAGE_SIZE, enablePlaceholders = false) + return PagingConfig(pageSize= DEFAULT_PAGE_SIZE, prefetchDistance = PREFETCH_DISTANCE, enablePlaceholders = false) } } \ No newline at end of file -- cgit v1.2.3 From 19b29a7941105ec6ca66b3a8e9cfbd72358dd449 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Sat, 26 Nov 2022 00:37:55 +0100 Subject: Izmenjen prikaz objava na početnoj strani. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Adapters/ShowPostsHomePageAdapter.kt | 5 + .../Fragments/FragmentHomePageMainScroll.kt | 21 +++- .../res/drawable/ic_baseline_location_on_24.xml | 5 + .../main/res/drawable/ic_baseline_star_rate_24.xml | 5 + .../app/src/main/res/layout/fragment_home_page.xml | 36 +++---- .../res/layout/fragment_home_page_main_scroll.xml | 45 +++++++- .../src/main/res/layout/post_item_home_page.xml | 113 ++++++++++++++++----- .../app/src/main/res/values/styles.xml | 1 + 8 files changed, 183 insertions(+), 48 deletions(-) create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_location_on_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_star_rate_24.xml diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsHomePageAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsHomePageAdapter.kt index 3391355..acea646 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsHomePageAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsHomePageAdapter.kt @@ -47,6 +47,8 @@ class ShowPostsHomePageAdapter(var postPreview:MutableList,val acti inner class PostViewHolder(view: View):RecyclerView.ViewHolder(view){ private val background:com.google.android.material.imageview.ShapeableImageView=view.findViewById(R.id.ivPIHPBackground) private val locationName:TextView=view.findViewById(R.id.tvPIHPLocationName) + private val locationDetail:TextView=view.findViewById(R.id.tvPIHPLocationDetail) + private val rating:TextView=view.findViewById(R.id.tvPIHPRecension) fun bindView(postPreview:PostPreview){ //background.setImageURI(postPreview.images[0]._id.to) @@ -56,6 +58,9 @@ inner class PostViewHolder(view: View):RecyclerView.ViewHolder(view){ .into(background) } locationName.text=postPreview.location.name + rating.text=postPreview.ratings.toString() + locationDetail.text="Srbija, Kragujevac" + } } } \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt index cf811df..3846d6c 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt @@ -4,8 +4,11 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.ImageButton +import android.widget.LinearLayout import android.widget.Toast +import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager @@ -17,6 +20,7 @@ import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper +import kotlinx.android.synthetic.main.fragment_home_page_main_scroll.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -42,9 +46,11 @@ class FragmentHomePageMainScroll : Fragment() { private lateinit var location_amusement_park: ImageButton private lateinit var location_attraction: ImageButton private lateinit var location_landmark: ImageButton - +private lateinit var change:Button private lateinit var filter: LocationType private lateinit var filterString: String + private lateinit var ll1: LinearLayout + private lateinit var ll2:LinearLayout override fun onCreateView( @@ -59,7 +65,9 @@ class FragmentHomePageMainScroll : Fragment() { rvPopular=view.findViewById(R.id.rvFragmentHomePagePopular) rvNewest=view.findViewById(R.id.rvFragmentHomePageNewest) rvBestRated=view.findViewById(R.id.rvFragmentHomePageBestRated) - + //change=view.findViewById(R.id.change) + ll1=view.findViewById(R.id.ll1) + ll2=view.findViewById(R.id.ll2) location_amusement_park=view.findViewById(R.id.btnFragmentHomePagelocation_amusement_park) location_attraction=view.findViewById(R.id.btnFragmentHomePagelocation_attraction) location_beach=view.findViewById(R.id.btnFragmentHomePagelocation_beach) @@ -174,9 +182,14 @@ class FragmentHomePageMainScroll : Fragment() { parentFrag.setBtnBackVisible() } + /* ll1.isVisible=true + ll2.isVisible=false + change.setOnClickListener { + ll1.isVisible=true + ll2.isVisible=false + } - - +*/ return view } diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_location_on_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_location_on_24.xml new file mode 100644 index 0000000..c0bbc95 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_location_on_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_star_rate_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_star_rate_24.xml new file mode 100644 index 0000000..cdafe07 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_star_rate_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml index 5d9e62c..cbde9c6 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="#f6f6f6" tools:context=".Fragments.FragmentHomePage"> @@ -11,13 +12,12 @@ android:id="@+id/tvFragmentHomePageHelloName" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="20dp" android:layout_marginTop="56dp" - android:layout_marginEnd="107dp" android:text="Zdravo, Mia" - app:layout_constraintEnd_toStartOf="@+id/cvFragmentHomePageProfile" - app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/cvFragmentHomePageProfile" app:layout_constraintTop_toTopOf="parent" /> + tools:ignore="ContentDescription" + tools:layout_editor_absoluteX="9dp" + tools:layout_editor_absoluteY="15dp" /> - + android:backgroundTint="@color/white" + android:hint=" Pretraži lokacije" + android:inputType="textPersonName" + android:paddingLeft="15dp" /> + + \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml index 90d1037..2883291 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml @@ -12,9 +12,14 @@ + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + > + + + + + + + + - \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/post_item_home_page.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/post_item_home_page.xml index 441f97b..9d26ddc 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/post_item_home_page.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/post_item_home_page.xml @@ -2,46 +2,109 @@ + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + app:shapeAppearanceOverlay="@style/Circular" /> + android:layout_height="180dp" + android:layout_marginStart="16dp" + android:layout_marginTop="14dp" + android:layout_marginEnd="12dp" + android:elevation="3dp" + android:scaleType="fitXY" + app:layout_constraintBottom_toBottomOf="@+id/imageView9" + app:layout_constraintEnd_toEndOf="@+id/imageView9" + app:layout_constraintHorizontal_bias="1.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.04" + app:shapeAppearanceOverlay="@style/Circular" + app:srcCompat="@drawable/b1" /> + android:textSize="14sp" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/ivPIHPBackground" /> + + + + + + + + + " /> \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/values/styles.xml b/Client/BrzoDoLokacije/app/src/main/res/values/styles.xml index d8a3730..cad0a8a 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/values/styles.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/values/styles.xml @@ -12,6 +12,7 @@ + + \ No newline at end of file -- cgit v1.2.3 From b85387e159eba45e56f83c9752003a4b0986df08 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 28 Nov 2022 10:41:48 +0100 Subject: Omogucen prikaz autocompleta kada korisnik trazi lokacije ili da doda novu lokaciju. --- .gitignore | 1 + .../brzodolokacije/Activities/ActivityAddPost.kt | 4 -- .../brzodolokacije/Activities/MapsActivity.kt | 69 ++++++++++++++++++++-- .../app/src/main/res/layout/activity_maps.xml | 20 ++++++- 4 files changed, 84 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 6609d29..1261eaf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ demoProjekat/MyApplication/.gitignore demoProjekat/ +Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml 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 index 995ef4d..f29db17 100644 --- 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 @@ -107,8 +107,6 @@ class ActivityAddPost : AppCompatActivity() { imgView} addLocation.setOnClickListener { val myIntent = Intent(this, MapsActivity::class.java) - if(location.text!=null && !location.text.trim().equals("")) - myIntent.putExtra("search",location.text.toString()) startActivityForResult(myIntent,LOCATIONREQCODE) } addDescription.setOnClickListener { @@ -254,8 +252,6 @@ class ActivityAddPost : AppCompatActivity() { longitude=bundle!!.getDouble("longitude",incorectCoord) latitude=bundle!!.getDouble("latitude",incorectCoord) var locName=bundle!!.getString("name") - if(location.text.toString().trim().equals("") && locName!=null && !locName.toString().trim().equals("")) - location.setText(locName,TextView.BufferType.EDITABLE) } } private fun sendPost(){ diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt index 1ff07f6..af3384d 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt @@ -3,6 +3,7 @@ package com.example.brzodolokacije.Activities import android.Manifest import android.content.Context import android.content.pm.PackageManager +import android.graphics.Color import android.location.Location import android.location.LocationManager import android.os.Build @@ -15,17 +16,17 @@ import android.util.Log import android.view.KeyEvent import android.view.MotionEvent import android.view.View -import android.widget.TextView -import android.widget.Toast +import android.widget.* +import android.widget.AdapterView.OnItemClickListener import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.widget.addTextChangedListener import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.GeocoderHelper import com.google.android.gms.location.* import com.google.android.material.button.MaterialButton import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.google.android.material.textfield.TextInputEditText import org.osmdroid.config.Configuration import org.osmdroid.tileprovider.tilesource.TileSourceFactory import org.osmdroid.util.GeoPoint @@ -40,6 +41,8 @@ import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider import org.osmdroid.views.overlay.gestures.RotationGestureOverlay import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay +import java.util.* +import kotlin.collections.ArrayList class MapsActivity : AppCompatActivity() { @@ -52,7 +55,9 @@ class MapsActivity : AppCompatActivity() { private lateinit var searchButton: MaterialButton private lateinit var gpsButton: FloatingActionButton private lateinit var confirmButton: FloatingActionButton - private lateinit var searchBar: TextInputEditText + private lateinit var searchBar: AutoCompleteTextView + //private lateinit var seachSpinner:Spinner + //private lateinit var autoText:AutoCompleteTextView var client: FusedLocationProviderClient? = null var locLongitude:Double?=null var locLatitude:Double?=null @@ -68,7 +73,8 @@ class MapsActivity : AppCompatActivity() { searchButton=findViewById(R.id.ActivityMapsSearchButton) as MaterialButton gpsButton=findViewById(R.id.ActivityMapsMyLocation) as FloatingActionButton confirmButton=findViewById(R.id.ActivityMapsConfirmLocation) as FloatingActionButton - searchBar=findViewById(R.id.ActivityMapsSearchBar) as TextInputEditText + searchBar=findViewById(R.id.ActivityMapsSearchBar) as AutoCompleteTextView + //autoText=findViewById(R.id.ActivityMapsAutoCompleteTextView) as AutoCompleteTextView client= LocationServices.getFusedLocationProviderClient(this) searchButton.setOnClickListener{ searchMap() @@ -91,6 +97,9 @@ class MapsActivity : AppCompatActivity() { } false }) + searchBar.addTextChangedListener{ + onTextEnter() + } val extras = intent.extras if (extras != null) { val value = extras.getString("search") @@ -98,10 +107,59 @@ class MapsActivity : AppCompatActivity() { searchBar.setText(value,TextView.BufferType.EDITABLE) searchMap() } + setUpSpinner() + + + + } + var arraySpinner :MutableList?=null + var spinnerAdapter: ArrayAdapter?=null + fun setUpSpinner() { + arraySpinner=mutableListOf() + arraySpinner!!.add("test") +// spinnerAdapter= ArrayAdapter( +// this, +// android.R.layout.simple_list_item_1, arraySpinner!!) + spinnerAdapter= ArrayAdapter( + this, + android.R.layout.simple_list_item_1, arraySpinner!!) + searchBar.threshold=1 + searchBar.setAdapter(spinnerAdapter) + searchBar.setOnItemClickListener(OnItemClickListener { parent, view, position, id -> + val selected = parent.getItemAtPosition(position) as String + Log.d("Main",selected) + }) + + + //spinnerAdapter!!.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) +// seachSpinner.setAdapter(spinnerAdapter) +// seachSpinner.setOnItemSelectedListener(object : OnItemSelectedListener { +// override fun onItemSelected( +// arg0: AdapterView<*>?, +// arg1: View, +// position: Int, +// id: Long +// ) { +// // TODO Auto-generated method stub +// Toast.makeText(baseContext, arraySpinner!!.get(position), Toast.LENGTH_SHORT).show() +// } +// +// override fun onNothingSelected(arg0: AdapterView<*>?) { +// // TODO Auto-generated method stub +// } +// }) } + var test=1 + fun onTextEnter(){ + test++ + spinnerAdapter!!.add("test"+test) + spinnerAdapter!!.notifyDataSetChanged() + Log.d("Main","test123") + //seachSpinner.performClick() + } fun returnValue(){ val intent = intent val bundle = Bundle() @@ -224,6 +282,7 @@ class MapsActivity : AppCompatActivity() { } } fun searchMap(){ + var geocoder= GeocoderHelper.getInstance() //Log.d("Main",geocoder!!.getFromLocationName("Paris",1)[0].countryName) var locString=searchBar.text.toString().trim() diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_maps.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_maps.xml index 8d37c29..0051893 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_maps.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_maps.xml @@ -33,6 +33,7 @@ app:rippleColor="#FFFFFF" app:srcCompat="@android:drawable/ic_menu_mylocation" /> + - + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3 From ec9fac41c863a0b6c7d83452521f8ce0ead14c30 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 28 Nov 2022 10:42:40 +0100 Subject: Obrisani kometari. --- .../brzodolokacije/Activities/MapsActivity.kt | 26 ---------------------- 1 file changed, 26 deletions(-) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt index af3384d..d8c874c 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt @@ -56,8 +56,6 @@ class MapsActivity : AppCompatActivity() { private lateinit var gpsButton: FloatingActionButton private lateinit var confirmButton: FloatingActionButton private lateinit var searchBar: AutoCompleteTextView - //private lateinit var seachSpinner:Spinner - //private lateinit var autoText:AutoCompleteTextView var client: FusedLocationProviderClient? = null var locLongitude:Double?=null var locLatitude:Double?=null @@ -74,7 +72,6 @@ class MapsActivity : AppCompatActivity() { gpsButton=findViewById(R.id.ActivityMapsMyLocation) as FloatingActionButton confirmButton=findViewById(R.id.ActivityMapsConfirmLocation) as FloatingActionButton searchBar=findViewById(R.id.ActivityMapsSearchBar) as AutoCompleteTextView - //autoText=findViewById(R.id.ActivityMapsAutoCompleteTextView) as AutoCompleteTextView client= LocationServices.getFusedLocationProviderClient(this) searchButton.setOnClickListener{ searchMap() @@ -119,9 +116,6 @@ class MapsActivity : AppCompatActivity() { arraySpinner=mutableListOf() arraySpinner!!.add("test") -// spinnerAdapter= ArrayAdapter( -// this, -// android.R.layout.simple_list_item_1, arraySpinner!!) spinnerAdapter= ArrayAdapter( this, android.R.layout.simple_list_item_1, arraySpinner!!) @@ -133,32 +127,12 @@ class MapsActivity : AppCompatActivity() { }) - //spinnerAdapter!!.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) -// seachSpinner.setAdapter(spinnerAdapter) -// seachSpinner.setOnItemSelectedListener(object : OnItemSelectedListener { -// override fun onItemSelected( -// arg0: AdapterView<*>?, -// arg1: View, -// position: Int, -// id: Long -// ) { -// // TODO Auto-generated method stub -// Toast.makeText(baseContext, arraySpinner!!.get(position), Toast.LENGTH_SHORT).show() -// } -// -// override fun onNothingSelected(arg0: AdapterView<*>?) { -// // TODO Auto-generated method stub -// } -// }) - } var test=1 fun onTextEnter(){ test++ spinnerAdapter!!.add("test"+test) spinnerAdapter!!.notifyDataSetChanged() - Log.d("Main","test123") - //seachSpinner.performClick() } fun returnValue(){ val intent = intent -- cgit v1.2.3 From d945204fba909a2dfeb25cae2d320ab6e62eaf51 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 28 Nov 2022 11:23:53 +0100 Subject: Promenjen zahtev za pretragu lokacije na backendu. Omogucena pretraga lokacija na clientu, prikazuje se naziv lokacije. --- Backend/Api/Api/Controllers/LocationController.cs | 9 +++-- .../brzodolokacije/Activities/MapsActivity.kt | 42 ++++++++++++++++++---- .../brzodolokacije/Interfaces/IBackendApi.kt | 3 ++ 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/Backend/Api/Api/Controllers/LocationController.cs b/Backend/Api/Api/Controllers/LocationController.cs index c9ef9ba..ba9c9a8 100644 --- a/Backend/Api/Api/Controllers/LocationController.cs +++ b/Backend/Api/Api/Controllers/LocationController.cs @@ -51,10 +51,15 @@ namespace Api.Controllers return BadRequest(); } - [HttpPost("search")] + [HttpGet("search")] [Authorize(Roles = "User")] - public async Task>> searchLocation(int searchtype ,string? query,Coords? coords) + public async Task>> searchLocation(int searchtype ,string? query,double? latitude,double? longitude) { + Coords coords = new Coords(); + if (latitude!=null && longitude!=null) { + coords.latitude = (double)latitude; + coords.longitude = (double)longitude; + } List ret = new List(); switch (searchtype) { diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt index d8c874c..46cc5fe 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt @@ -22,8 +22,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener +import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.GeocoderHelper +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.google.android.gms.location.* import com.google.android.material.button.MaterialButton import com.google.android.material.floatingactionbutton.FloatingActionButton @@ -41,6 +44,8 @@ import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider import org.osmdroid.views.overlay.gestures.RotationGestureOverlay import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay +import retrofit2.Call +import retrofit2.Response import java.util.* import kotlin.collections.ArrayList @@ -59,6 +64,8 @@ class MapsActivity : AppCompatActivity() { var client: FusedLocationProviderClient? = null var locLongitude:Double?=null var locLatitude:Double?=null + var selectedLocation:com.example.brzodolokacije.Models.Location?=null + var responseLocations:MutableList?=null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_maps) @@ -114,8 +121,6 @@ class MapsActivity : AppCompatActivity() { fun setUpSpinner() { arraySpinner=mutableListOf() - arraySpinner!!.add("test") - spinnerAdapter= ArrayAdapter( this, android.R.layout.simple_list_item_1, arraySpinner!!) @@ -128,11 +133,36 @@ class MapsActivity : AppCompatActivity() { } - var test=1 fun onTextEnter(){ - test++ - spinnerAdapter!!.add("test"+test) - spinnerAdapter!!.notifyDataSetChanged() + var api=RetrofitHelper.getInstance() + var jwtString= SharedPreferencesHelper.getValue("jwt",this) + var text=searchBar.text + if(text==null ||text.toString().trim()=="") + return + var data=api.searchLocationsQuery("Bearer "+jwtString,text.toString()) + data.enqueue(object : retrofit2.Callback> { + override fun onResponse(call: Call?>, response: Response>) { + if(response.isSuccessful){ + var existingLocation=responseLocations + responseLocations=response.body()!! + var tempList=mutableListOf() + if(existingLocation!=null && existingLocation.size>0) + for(loc in existingLocation!!){ + spinnerAdapter!!.remove(loc.name) + } + for(loc in responseLocations!!){ + spinnerAdapter!!.add(loc.name) + } + spinnerAdapter!!.notifyDataSetChanged() + } + } + + override fun onFailure(call: Call>, t: Throwable) { + + } + }) + + } fun returnValue(){ val intent = intent diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt index e4bfbc8..8556047 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt @@ -92,4 +92,7 @@ interface IBackendApi { @GET("/api/Post/posts/get10Newest") fun get10Newest(@Header("Authorization") authHeader:String):Call> + @GET("api/Location/search") + fun searchLocationsQuery(@Header("Authorization") authHeader:String,@Query("query") query: String):Call> + } \ No newline at end of file -- cgit v1.2.3 From 9c3cebe6f89586d2abd5f854cf5baa079d839b39 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 28 Nov 2022 11:54:31 +0100 Subject: Napravljen dialog za dodavanje imena lokacije. Dodata logika dodavanje lokacije. Uplodovanje lokacije. Dodata provera na backu ukoliko nema tagova. Omoguceno dodavanje objave pomocu novog dodavanja lokacije. --- Backend/Api/Api/Services/PostService.cs | 7 +- .../brzodolokacije/Activities/ActivityAddPost.kt | 74 ++------------- .../brzodolokacije/Activities/MapsActivity.kt | 102 ++++++++++++++++++--- 3 files changed, 101 insertions(+), 82 deletions(-) diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs index b75656e..e2e4e40 100644 --- a/Backend/Api/Api/Services/PostService.cs +++ b/Backend/Api/Api/Services/PostService.cs @@ -39,8 +39,11 @@ namespace Api.Services p.comments = new List(); p.images = new List(); p.createdAt = DateTime.Now.ToUniversalTime(); - var tags = post.tags.Split("|").ToList(); - p.tags = tags; + if (post.tags != null) + { + var tags = post.tags.Split("|").ToList(); + p.tags = tags; + } var folderPath = Path.Combine(Directory.GetCurrentDirectory(), "Files", p.ownerId); if (!Directory.Exists(folderPath)) { 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 index f29db17..c2abf37 100644 --- 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 @@ -53,33 +53,27 @@ class ActivityAddPost : AppCompatActivity() { private lateinit var tagButtonAdd:Button private lateinit var tagList: MutableList private var tagidcounter:Int = 0 - val incorectCoord:Double=1000.0 val LOCATIONREQCODE=123 - var longitude:Double=incorectCoord - var latitude:Double=incorectCoord + var locationId:String?=null var progressDialog:ProgressDialog?=null private lateinit var addDescription:Button - //private var paths :ArrayList?=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() tagList = mutableListOf() tagButtons= mutableListOf() tagidcounter = 0 - //paths= ArrayList() uploadFromGallery=findViewById(R.id.btnActivityAddPostUploadFromGalleryVisible) as Button showNextImage=findViewById(R.id.nextImage) as Button showPreviousImage=findViewById(R.id.previousImage) as Button switcher=findViewById(R.id.isActivityAddPostSwitcher) as ImageSwitcher - //location=findViewById(R.id.etActivityAddPostLocation) as EditText description=findViewById(R.id.etActivityAddPostDescription) as EditText post=findViewById(R.id.btnActivityAddPostPost) as Button addLocation=findViewById(R.id.btnActivityAddPostAddLocation) as Button @@ -205,11 +199,11 @@ class ActivityAddPost : AppCompatActivity() { description.hint="Unesite opis" description.setHintTextColor(Color.RED) } - if(longitude!=incorectCoord && latitude!=incorectCoord){ + if(locationId==null || locationId!!.trim()==""){ Toast.makeText(this,"Unesite lokaciju klikom na dugme",Toast.LENGTH_LONG) } - if(!locationString.isEmpty() && !descriptionString.isEmpty() && longitude!=incorectCoord && latitude!=incorectCoord && uploadedImages!!.size>0){ + if(!descriptionString.isEmpty() && uploadedImages!!.size>0){ sendPost() } } @@ -249,9 +243,7 @@ class ActivityAddPost : AppCompatActivity() { } if(requestCode==LOCATIONREQCODE && resultCode== RESULT_OK){ var bundle=data!!.extras - longitude=bundle!!.getDouble("longitude",incorectCoord) - latitude=bundle!!.getDouble("latitude",incorectCoord) - var locName=bundle!!.getString("name") + locationId=bundle!!.getString("locationId") } } private fun sendPost(){ @@ -259,58 +251,8 @@ class ActivityAddPost : AppCompatActivity() { } fun uploadLocation() { - //TO DO SEARCH EXISTING LOCATION FROM DB - //IF NOT EXISTS ADD NEW LOCATION - progressDialog!!.show() - val api =RetrofitHelper.getInstance() - var geocoder=GeocoderHelper.getInstance() - var loc1=geocoder!!.getFromLocation(latitude,longitude,1) - if(loc1==null ||loc1.size<=0) - { - progressDialog!!.dismiss() - Toast.makeText(this,"Lokacija ne postoji",Toast.LENGTH_LONG); - return - } - var countryName=loc1[0].countryName - var address="todo not possible in query" - var city="its null" - if(loc1[0].adminArea!=null) - city=loc1[0].adminArea//not possible - var loc:Location=Location("",locationString,city,countryName,address,latitude,longitude,LocationType.GRAD) - var jwtString= SharedPreferencesHelper.getValue("jwt",this) - var data=api.addLocation("Bearer "+jwtString,loc) - - data.enqueue(object : retrofit2.Callback { - override fun onResponse(call: Call, response: Response) { - if(response.isSuccessful()){ - - uploadPost(response.body()!!._id) - Toast.makeText( - applicationContext, "USPEH", Toast.LENGTH_LONG - ).show(); - - }else { - progressDialog!!.dismiss() - - if (response.errorBody() != null) { - Log.d("Main",response.errorBody()!!.string()) - Log.d("Main",response.message()) - } - Log.d("Main",response.errorBody()!!.string()) - Log.d("Main",response.message()) - } - - - } - - override fun onFailure(call: Call, t: Throwable) { - Toast.makeText( - applicationContext, t.toString(), Toast.LENGTH_LONG - ).show(); - Log.d("Main",t.toString()) - progressDialog!!.dismiss() - } - }) + if(locationId!=null && locationId!!.trim()!="") + uploadPost(locationId!!) } fun uploadPost(loc:String){ val api =RetrofitHelper.getInstance() diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt index 46cc5fe..faaa3b4 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/MapsActivity.kt @@ -1,7 +1,9 @@ package com.example.brzodolokacije.Activities import android.Manifest +import android.app.AlertDialog import android.content.Context +import android.content.DialogInterface import android.content.pm.PackageManager import android.graphics.Color import android.location.Location @@ -22,6 +24,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.widget.addTextChangedListener +import com.example.brzodolokacije.Models.LocationType import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.GeocoderHelper @@ -88,8 +91,12 @@ class MapsActivity : AppCompatActivity() { getLocation() } confirmButton.setOnClickListener{ - if(locLatitude!=null && locLatitude!=null) + if(selectedLocation!=null) returnValue() + else{ + addLocation() + + } } searchBar.setOnKeyListener(View.OnKeyListener { v1, keyCode, event -> // If the event is a key-down event on the "enter" button if (event.action === KeyEvent.ACTION_DOWN && @@ -115,6 +122,73 @@ class MapsActivity : AppCompatActivity() { + } + fun addLocation(){ + var editText=EditText(this) + var dialog=AlertDialog.Builder(this).setTitle("Naziv").setMessage("Unesite naziv") + .setView(editText) + dialog.setPositiveButton("Dodaj") { dialog, which -> + uploadLocation(editText.text.toString()) + } + dialog.setNegativeButton("Prekini") { dialog, which -> + + } + dialog.show() + + } + fun uploadLocation(locationName:String){ + val api =RetrofitHelper.getInstance() + var geocoder=GeocoderHelper.getInstance() + var loc1=geocoder!!.getFromLocation(locLatitude!!,locLongitude!!,1) + if(loc1==null ||loc1.size<=0) + { + return + } + var countryName=loc1[0].countryName + var address="todo not possible in query" + var city="its null" + if(loc1[0].adminArea!=null) + city=loc1[0].adminArea//not possible + var loc: com.example.brzodolokacije.Models.Location = + com.example.brzodolokacije.Models.Location( + "", + locationName, + city, + countryName, + address, + locLatitude!!, + locLongitude!!, + LocationType.GRAD + ) + var jwtString= SharedPreferencesHelper.getValue("jwt",this) + var data=api.addLocation("Bearer "+jwtString,loc) + + data.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + if(response.isSuccessful()){ + selectedLocation=response.body() + returnValue() + + }else { + + if (response.errorBody() != null) { + Log.d("Main",response.errorBody()!!.string()) + Log.d("Main",response.message()) + } + Log.d("Main",response.errorBody()!!.string()) + Log.d("Main",response.message()) + } + + + } + + override fun onFailure(call: Call, t: Throwable) { + Toast.makeText( + applicationContext, t.toString(), Toast.LENGTH_LONG + ).show(); + Log.d("Main",t.toString()) + } + }) } var arraySpinner :MutableList?=null var spinnerAdapter: ArrayAdapter?=null @@ -128,10 +202,22 @@ class MapsActivity : AppCompatActivity() { searchBar.setAdapter(spinnerAdapter) searchBar.setOnItemClickListener(OnItemClickListener { parent, view, position, id -> val selected = parent.getItemAtPosition(position) as String - Log.d("Main",selected) + selectedLocation=responseLocations!!.find { location -> location.name==selected } + Log.d("main",selectedLocation.toString()) + confirmButton.visibility=View.VISIBLE }) + } + fun returnValue(){ + val intent = intent + val bundle = Bundle() + if(selectedLocation==null) + return + bundle.putString("locationId",selectedLocation!!._id) + intent.putExtras(bundle) + setResult(RESULT_OK, intent) + finish() } fun onTextEnter(){ var api=RetrofitHelper.getInstance() @@ -164,18 +250,6 @@ class MapsActivity : AppCompatActivity() { } - fun returnValue(){ - val intent = intent - val bundle = Bundle() - bundle.putDouble("longitude", locLongitude!!) - bundle.putDouble("latitude", locLatitude!!) - if(searchBar.text!=null && !searchBar.text.toString().equals("")) - bundle.putString("name", searchBar.text.toString()) - intent.putExtras(bundle) - setResult(RESULT_OK, intent) - finish() - } - override fun onResume() { super.onResume() map!!.onResume() -- cgit v1.2.3 From 5b1191e73914cdb9e307c1763beaecbfa60b8acc Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 28 Nov 2022 12:00:49 +0100 Subject: Prilagodjeno uplodanje objave slikom za kamere za novo dopremanje lokacije. --- .../brzodolokacije/Activities/ActivityAddPost.kt | 1 + .../Activities/ActivityCapturePost.kt | 76 +++------------------- 2 files changed, 9 insertions(+), 68 deletions(-) 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 index c2abf37..6835e6e 100644 --- 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 @@ -255,6 +255,7 @@ class ActivityAddPost : AppCompatActivity() { uploadPost(locationId!!) } fun uploadPost(loc:String){ + progressDialog!!.show() val api =RetrofitHelper.getInstance() var desc=descriptionString description.text.clear() 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 index 2321f18..94b5574 100644 --- 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 @@ -41,13 +41,10 @@ import java.io.InputStream class ActivityCapturePost : AppCompatActivity() { 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: Uri? = null private lateinit var addLocation:Button private lateinit var tagLayout:LinearLayout private lateinit var tagButtons:MutableList