diff --git a/app/build.gradle b/app/build.gradle index 76f07ce..114dc80 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,8 @@ plugins { id 'com.android.application' id 'kotlin-android' + id 'kotlin-android-extensions' + id 'kotlin-kapt' } android { @@ -14,6 +16,14 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + javaCompileOptions { + annotationProcessorOptions { + arguments = + ["room.schemaLocation": "$projectDir/schemas".toString()] + } + } + } buildTypes { @@ -36,9 +46,18 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'com.google.android.material:material:1.2.1' + implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.room:room-runtime:2.2.6' + implementation 'androidx.preference:preference:1.1.1' + implementation 'androidx.room:room-runtime:2.2.6' + implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'com.squareup.okhttp:okhttp:2.2.0' + implementation 'com.squareup.okhttp:okhttp-urlconnection:2.2.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + annotationProcessor 'androidx.room:room-compiler:2.2.6' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3235640..709a25a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,8 @@ - + + - + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/ca_contest/Country.kt b/app/src/main/java/com/example/ca_contest/Country.kt new file mode 100644 index 0000000..4dc5f10 --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/Country.kt @@ -0,0 +1,14 @@ +package com.example.ca_contest + +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.text.SimpleDateFormat + +@Entity(tableName = "country") +class Country( + @PrimaryKey(autoGenerate = true) + val countryId: Long = 0, + val country: String? = null, + val capitalCity: String? = null, + val continent: String? = null, + val date: SimpleDateFormat? = null) \ No newline at end of file diff --git a/app/src/main/java/com/example/ca_contest/CountryAdapter.kt b/app/src/main/java/com/example/ca_contest/CountryAdapter.kt new file mode 100644 index 0000000..8093f14 --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/CountryAdapter.kt @@ -0,0 +1,40 @@ +package com.example.ca_contest + +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView + +class CountryAdapter(private var listCountry: MutableList) : + RecyclerView.Adapter() +{ + // Crée chaque vue item à afficher : + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CountryViewHolder + { + val viewCourse = LayoutInflater.from(parent.context) + .inflate(R.layout.item_list, parent, false) + return CountryViewHolder(viewCourse) + } + + // Renseigne le contenu de chaque vue item : + override fun onBindViewHolder(holder: CountryViewHolder, position: Int) + { + holder.textViewLibelleCourse.text = listCountry[position].country + } + + override fun getItemCount(): Int = listCountry.size + // ViewHolder : + inner class CountryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) + { + val textViewLibelleCourse: TextView = itemView.findViewById(R.id.list_country) + init + { + textViewLibelleCourse.setOnClickListener { + val country = listCountry[adapterPosition] + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ca_contest/ListCountryActivity.kt b/app/src/main/java/com/example/ca_contest/ListCountryActivity.kt new file mode 100644 index 0000000..3dddf02 --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/ListCountryActivity.kt @@ -0,0 +1,61 @@ +package com.example.ca_contest + +import android.annotation.SuppressLint +import android.content.ContextWrapper +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.ImageView +import androidx.recyclerview.widget.LinearLayoutManager +import com.example.ca_contest.dao.AppDatabaseHelper +import com.squareup.picasso.Picasso; +import kotlinx.android.synthetic.main.activity_list_country.* +import java.io.File +import java.text.SimpleDateFormat +import java.util.* +import kotlin.collections.ArrayList + +class ListCountryActivity : AppCompatActivity() { + private lateinit var countryAdapter: CountryAdapter +// private lateinit var imageView: ImageView + @SuppressLint("SimpleDateFormat") + override fun onCreate(savedInstanceState: Bundle?) + { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_list_country) + +// imageView = findViewById(R.id.image) + // à ajouter pour de meilleures performances : + list_country.setHasFixedSize(true) + + // layout manager, décrivant comment les items sont disposés : + val layoutManager = LinearLayoutManager(this) + list_country.layoutManager = layoutManager + // contenu d'exemple : + val listCountry: List = AppDatabaseHelper + .getDatabase(this) + .countryDAO() + .getListCountry() + +// Picasso.get() +// .load("http://www.geognos.com/api/en/countries/flag/FR.png") +// .fit() +// .centerCrop() // ou centerInside() +// .into(imageView) + + } + + fun addCountry(view: View) { +// val intent = Intent(this, CountrySelectorActivity::class.java) +// startActivity(intent) +// +// finish() + } + + fun deleteCountry(view: View) { + + } + +} diff --git a/app/src/main/java/com/example/ca_contest/dao/AppDatabase.kt b/app/src/main/java/com/example/ca_contest/dao/AppDatabase.kt new file mode 100644 index 0000000..4747b00 --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/dao/AppDatabase.kt @@ -0,0 +1,11 @@ +package com.example.ca_contest.dao + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.example.ca_contest.Country + +@Database(entities = [Country::class], version = 1) +abstract class AppDatabase : RoomDatabase() +{ + abstract fun countryDAO(): CountryDAO +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ca_contest/dao/AppDatabaseHelper.kt b/app/src/main/java/com/example/ca_contest/dao/AppDatabaseHelper.kt new file mode 100644 index 0000000..475bc4b --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/dao/AppDatabaseHelper.kt @@ -0,0 +1,28 @@ +package com.example.ca_contest.dao + +import android.content.Context +import androidx.room.Room + +class AppDatabaseHelper(context: Context) +{ + // Bloc de code "static" : + companion object + { + // Helper : + private lateinit var databaseHelper: AppDatabaseHelper + // Getter instance : + fun getDatabase(context: Context): AppDatabase + { + if (!::databaseHelper.isInitialized) + { + databaseHelper = AppDatabaseHelper(context) + } + return databaseHelper.database + } + } + // Base de données : + val database: AppDatabase = Room + .databaseBuilder(context.applicationContext, AppDatabase::class.java, "courses.db") + .allowMainThreadQueries() + .build() +} diff --git a/app/src/main/java/com/example/ca_contest/dao/CountryDAO.kt b/app/src/main/java/com/example/ca_contest/dao/CountryDAO.kt new file mode 100644 index 0000000..cba6e64 --- /dev/null +++ b/app/src/main/java/com/example/ca_contest/dao/CountryDAO.kt @@ -0,0 +1,16 @@ +package com.example.ca_contest.dao + +import androidx.room.* +import com.example.ca_contest.Country + +@Dao +abstract class CountryDAO { + @Query("SELECT * FROM country") + abstract fun getListCountry(): List + @Insert + abstract fun insert(vararg country: Country) + @Update + abstract fun update(vararg country: Country) + @Delete + abstract fun delete(vararg country: Country) +} \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi/ic_trash.xml b/app/src/main/res/drawable-anydpi/ic_trash.xml new file mode 100644 index 0000000..e55d0dd --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_trash.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable-hdpi/ic_trash.png b/app/src/main/res/drawable-hdpi/ic_trash.png new file mode 100644 index 0000000..c3c4959 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_trash.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_trash.png b/app/src/main/res/drawable-mdpi/ic_trash.png new file mode 100644 index 0000000..6c885e5 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_trash.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_trash.png b/app/src/main/res/drawable-xhdpi/ic_trash.png new file mode 100644 index 0000000..4634a35 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_trash.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_trash.png b/app/src/main/res/drawable-xxhdpi/ic_trash.png new file mode 100644 index 0000000..f8cbf92 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_trash.png differ diff --git a/app/src/main/res/layout/activity_list_country.xml b/app/src/main/res/layout/activity_list_country.xml new file mode 100644 index 0000000..027d9e3 --- /dev/null +++ b/app/src/main/res/layout/activity_list_country.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + +