diff --git a/app/build.gradle b/app/build.gradle
index 73d1808..1e4a48e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -37,6 +37,7 @@ android {
}
+
//./gradlew build --refresh-dependencies
dependencies {
//implementation ('org.maplibre.gl:android-sdk:9.5.2')
@@ -47,24 +48,29 @@ dependencies {
implementation "com.squareup.retrofit2:converter-moshi:2.9.0"
implementation "com.squareup.moshi:moshi-kotlin:1.12.0"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
implementation 'androidx.fragment:fragment-ktx:1.5.6'
implementation 'androidx.appcompat:appcompat:1.6.1'
- implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.google.android.material:material:1.8.0'
- kapt 'androidx.room:room-compiler:2.5.1'
- implementation 'androidx.room:room-ktx:2.5.1'
+ implementation "androidx.room:room-ktx:2.5.1"
+ kapt "androidx.room:room-compiler:2.5.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
+ modules {
+ module("org.jetbrains.kotlin:kotlin-stdlib-jdk7") {
+ replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk7 is now part of kotlin-stdlib")
+ }
+ module("org.jetbrains.kotlin:kotlin-stdlib-jdk8") {
+ replacedBy("org.jetbrains.kotlin:kotlin-stdlib", "kotlin-stdlib-jdk8 is now part of kotlin-stdlib")
+ }
+ }
+
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
-
-
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f0df333..adf0b27 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,23 +7,25 @@
+ android:supportsRtl="true">
+
+ android:exported="true"
+ android:theme="@style/Theme.AppCompat.Light">
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/mapping/LikesFrag.kt b/app/src/main/java/fr/iut/mapping/LikesFrag.kt
new file mode 100644
index 0000000..7fe9808
--- /dev/null
+++ b/app/src/main/java/fr/iut/mapping/LikesFrag.kt
@@ -0,0 +1,44 @@
+package fr.iut.mapping
+import android.app.Activity
+import android.content.Entity
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import fr.iut.mapping.Model.RestaurantData
+import fr.iut.mapping.database.DAO.RestaurantDAO
+import fr.iut.mapping.database.Entity.RestaurantEntity
+
+class SecondFragment: Fragment(R.layout.fragment_likes_page) {
+
+ private val restaurantViewModel: RestaurantViewModel by viewModels {
+ RestaurantViewModelFactory((requireActivity().application as MappingApplication).repository)
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ val rootView = inflater.inflate(R.layout.fragment_likes_page, container, false)
+
+ val recyclerView = rootView.findViewById(R.id.recyclerview)
+ val adapter = RestaurantAdapter()
+ recyclerView.adapter = adapter
+ recyclerView.layoutManager = LinearLayoutManager(requireContext())
+
+
+ restaurantViewModel.restaurantLikes.observe(viewLifecycleOwner) { restaurantEntities ->
+ val restaurantDataList: MutableList =
+ restaurantEntities.map { entity ->
+ RestaurantData(entity.lat, entity.lon, entity.name, entity.phone, entity.adress)
+ }.toMutableList()
+ Log.d("debug1", restaurantDataList.toString())
+ adapter.submitList(restaurantDataList)
+ Log.d("debug2", restaurantDataList.toString())
+ }
+ return rootView
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/mapping/LikesPage.kt b/app/src/main/java/fr/iut/mapping/LikesPage.kt
deleted file mode 100644
index 0ecca68..0000000
--- a/app/src/main/java/fr/iut/mapping/LikesPage.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package fr.iut.mapping
-import androidx.fragment.app.Fragment
-
-class SecondFragment:Fragment(R.layout.fragment_likes_page) {
-}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/mapping/MapPage.kt b/app/src/main/java/fr/iut/mapping/MapFrag.kt
similarity index 100%
rename from app/src/main/java/fr/iut/mapping/MapPage.kt
rename to app/src/main/java/fr/iut/mapping/MapFrag.kt
diff --git a/app/src/main/java/fr/iut/mapping/MappingApplication.kt b/app/src/main/java/fr/iut/mapping/MappingApplication.kt
new file mode 100644
index 0000000..19be4e8
--- /dev/null
+++ b/app/src/main/java/fr/iut/mapping/MappingApplication.kt
@@ -0,0 +1,16 @@
+package fr.iut.mapping
+
+
+import android.app.Application
+import fr.iut.mapping.database.RestaurantDatabase
+import fr.iut.mapping.database.RestaurantRepository
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.SupervisorJob
+
+class MappingApplication: Application() {
+ val applicationScope = CoroutineScope(SupervisorJob())
+
+ val database by lazy { RestaurantDatabase.getDatabase(this,applicationScope) }
+ val repository by lazy { RestaurantRepository(database.restaurantDAO()) }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/mapping/RestaurantAdapter.kt b/app/src/main/java/fr/iut/mapping/RestaurantAdapter.kt
new file mode 100644
index 0000000..138ec4a
--- /dev/null
+++ b/app/src/main/java/fr/iut/mapping/RestaurantAdapter.kt
@@ -0,0 +1,70 @@
+package fr.iut.mapping
+
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import fr.iut.mapping.Model.RestaurantData
+
+class RestaurantAdapter : ListAdapter(RESTAURANT_COMPARATOR) {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RestaurantViewHolder {
+ Log.d("debug","onCreateViewHolder")
+ return RestaurantViewHolder.create(parent)
+ }
+
+ override fun onBindViewHolder(holder: RestaurantViewHolder, position: Int) {
+ Log.d("debug","onBindViewHolder")
+ val current = getItem(position)
+ holder.bind(current.name)
+ }
+
+ override fun getItemCount(): Int {
+ Log.d("debug","getItemCount")
+ Log.d("debug",currentList.toString())
+
+ return currentList.size
+ }
+
+ class RestaurantViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val restaurantItemView: TextView = itemView.findViewById(R.id.nameRestaurant)
+
+ fun bind(text: String?) {
+ Log.d("debug","bind")
+
+ restaurantItemView.text = text
+ }
+
+ companion object {
+ fun create(parent: ViewGroup): RestaurantViewHolder {
+ Log.d("debug","create")
+ val view: View = LayoutInflater.from(parent.context).inflate(R.layout.recyclerviewitem, parent, false)
+ return RestaurantViewHolder(view)
+ }
+ }
+ }
+
+ companion object {
+ private val RESTAURANT_COMPARATOR = object : DiffUtil.ItemCallback() {
+ override fun areItemsTheSame(oldItem: RestaurantData, newItem: RestaurantData): Boolean {
+ Log.d("debug","areItemsTheSame")
+
+ return oldItem === newItem
+ }
+
+ override fun areContentsTheSame(oldItem: RestaurantData, newItem: RestaurantData): Boolean {
+ Log.d("debug","areContentsTheSame")
+
+ return oldItem.name == newItem.name &&
+ oldItem.lat == newItem.lat &&
+ oldItem.lon == newItem.lon &&
+ oldItem.adress == newItem.adress &&
+ oldItem.phone == newItem.phone
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/fr/iut/mapping/database/DAO/RestaurantDAO.kt b/app/src/main/java/fr/iut/mapping/database/DAO/RestaurantDAO.kt
index c317cdb..2dab94c 100644
--- a/app/src/main/java/fr/iut/mapping/database/DAO/RestaurantDAO.kt
+++ b/app/src/main/java/fr/iut/mapping/database/DAO/RestaurantDAO.kt
@@ -16,4 +16,7 @@ interface RestaurantDAO {
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun insert(Restaurant: RestaurantEntity)
+ @Query("DELETE FROM restaurant_table")
+ suspend fun deleteAll()
+
}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/mapping/database/Database.kt b/app/src/main/java/fr/iut/mapping/database/Database.kt
index bad601c..6148350 100644
--- a/app/src/main/java/fr/iut/mapping/database/Database.kt
+++ b/app/src/main/java/fr/iut/mapping/database/Database.kt
@@ -4,8 +4,11 @@ import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
+import androidx.sqlite.db.SupportSQLiteDatabase
import fr.iut.mapping.database.DAO.RestaurantDAO
import fr.iut.mapping.database.Entity.RestaurantEntity
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
@Database(entities = arrayOf(RestaurantEntity::class), version = 1, exportSchema = false)
abstract class RestaurantDatabase : RoomDatabase() {
@@ -16,16 +19,41 @@ abstract class RestaurantDatabase : RoomDatabase() {
@Volatile
private var INSTANCE: RestaurantDatabase? = null
- fun getDatabase(context: Context): RestaurantDatabase {
+ fun getDatabase(context: Context, scope: CoroutineScope): RestaurantDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext, RestaurantDatabase::class.java, "restaurant_database"
- ).build()
+ ).addCallback(RestaurantDatabaseCallback(scope)).build()
INSTANCE = instance
instance
}
}
}
+ private class RestaurantDatabaseCallback(private val scope: CoroutineScope) : RoomDatabase.Callback() {
+
+ override fun onCreate(db: SupportSQLiteDatabase) {
+ super.onCreate(db)
+ INSTANCE?.let { database ->
+ scope.launch {
+ populateDatabase(database.restaurantDAO())
+ }
+ }
+ }
+
+ suspend fun populateDatabase(restaurantDao: RestaurantDAO) {
+ // Delete all content here.
+ restaurantDao.deleteAll()
+
+ // Add sample words.
+ var resto = RestaurantEntity(0,0.0,0.0,"SUPER RESTO","0000","11 rue")
+ restaurantDao.insert(resto)
+ resto = RestaurantEntity(0,1.0,1.0,"SUPER RESTO2","00002","22 rue")
+ restaurantDao.insert(resto)
+
+ }
+ }
+
+
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 7fae5ab..97d27ea 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -20,6 +20,7 @@
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="75dp"
+ android:background="@android:color/holo_blue_dark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
diff --git a/app/src/main/res/layout/fragment_likes_page.xml b/app/src/main/res/layout/fragment_likes_page.xml
index 838281e..5d9dcd7 100644
--- a/app/src/main/res/layout/fragment_likes_page.xml
+++ b/app/src/main/res/layout/fragment_likes_page.xml
@@ -2,11 +2,23 @@
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ android:layout_height="wrap_content"
+ android:text="test"/>
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recyclerviewitem.xml b/app/src/main/res/layout/recyclerviewitem.xml
new file mode 100644
index 0000000..3ae62bc
--- /dev/null
+++ b/app/src/main/res/layout/recyclerviewitem.xml
@@ -0,0 +1,12 @@
+
+
+
+
+