From f0dfb2e67c78f3ea879cb46a75665d9ebb149cee Mon Sep 17 00:00:00 2001 From: camillenaulet03 Date: Fri, 19 Feb 2021 15:23:59 +0100 Subject: [PATCH 1/3] first view --- app/build.gradle | 21 +++++- app/src/main/AndroidManifest.xml | 7 +- .../java/com/example/ca_contest/Country.kt | 14 ++++ .../com/example/ca_contest/CountryAdapter.kt | 40 ++++++++++++ .../example/ca_contest/ListCountryActivity.kt | 61 ++++++++++++++++++ .../com/example/ca_contest/dao/AppDatabase.kt | 11 ++++ .../ca_contest/dao/AppDatabaseHelper.kt | 28 ++++++++ .../com/example/ca_contest/dao/CountryDAO.kt | 16 +++++ app/src/main/res/drawable-anydpi/ic_trash.xml | 11 ++++ app/src/main/res/drawable-hdpi/ic_trash.png | Bin 0 -> 206 bytes app/src/main/res/drawable-mdpi/ic_trash.png | Bin 0 -> 146 bytes app/src/main/res/drawable-xhdpi/ic_trash.png | Bin 0 -> 205 bytes app/src/main/res/drawable-xxhdpi/ic_trash.png | Bin 0 -> 252 bytes .../main/res/layout/activity_list_country.xml | 36 +++++++++++ app/src/main/res/layout/item_list.xml | 38 +++++++++++ 15 files changed, 280 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/example/ca_contest/Country.kt create mode 100644 app/src/main/java/com/example/ca_contest/CountryAdapter.kt create mode 100644 app/src/main/java/com/example/ca_contest/ListCountryActivity.kt create mode 100644 app/src/main/java/com/example/ca_contest/dao/AppDatabase.kt create mode 100644 app/src/main/java/com/example/ca_contest/dao/AppDatabaseHelper.kt create mode 100644 app/src/main/java/com/example/ca_contest/dao/CountryDAO.kt create mode 100644 app/src/main/res/drawable-anydpi/ic_trash.xml create mode 100644 app/src/main/res/drawable-hdpi/ic_trash.png create mode 100644 app/src/main/res/drawable-mdpi/ic_trash.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_trash.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_trash.png create mode 100644 app/src/main/res/layout/activity_list_country.xml create mode 100644 app/src/main/res/layout/item_list.xml 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 0000000000000000000000000000000000000000..c3c49593072c62a4fbb6b63296e94aa593e24ecd GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBrh2+KhE&{2PLN<-oX~K10d z>3NlzJ3eIZH;UV3`D~?k+~MHsdyFeKdfy9LWzF>@xJhhshhtiwRYw}1)E-MN|2!qu zVEynw&0TJ?Ca)F*viDkLTyb2?Cslf3MKe$+M)u1Q)qJ(1z17$E#Jy^r;J(l5LLmEz zQl1F?3p}gLzBul^uspAI-x9Moj#V#it(9X{mSbRG`S?lJW`8%GxuYWahz2CHjFWLmV+51^b7){Fmu3%j())Qrr#VGio)B7IdBHe{$5E=&P-aQlmMk@C1_tSKPqsVAS7`w)VeoYIb6Mw<&;$U=S~Ru* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4634a35be12b804738a8e55f06a313361f6bf797 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtDV{ElAr-gY-q_3ApdjFo_^d!~ zL-ADaoSeA_GGh)f$~fo5IGyMGW9{-e&Z+tntJA__7nl7S(@I5~d)lW>|F(N}J$GSM zv$;3}!%jwx+3KHPhqD7sMFR(xs_8dN9`MfRo6%en#xOURFTyD}VouY!D>pss^k21q nn|!11PiOYx&69HHb-cJ3R%YE+@s``T4rGj{tDnm{r-UW|FMLPs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f8cbf92ced9f3bef9039b2e2eef1bbde3f5e8cdb GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!hdo^!Ln>~)y}gn5kb!_hp#A|F z9U%eUo=L*I(hp4|8Vn1L3b6=qFKChZu$tDj$e+*A;@WW{&ODQ|4I-&SAPmY;ez4Cs + + + + + + + + + + +