From 767394930e7461bb5c8f74e255daa0b2c8cab729 Mon Sep 17 00:00:00 2001
From: Marvin Stelter <41212885+MarvinStelter@users.noreply.github.com>
Date: Fri, 16 Feb 2024 09:32:19 +0100
Subject: [PATCH] =?UTF-8?q?Filter=20teilweise=20hinzugef=C3=BCgt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/kotlinc.xml | 2 +-
app/src/main/AndroidManifest.xml | 1 +
.../main/assets/offline_list_hoerbuecher.txt | 64 ++++++++
.../msdevs/einschlafhilfe/FilterActivity.kt | 95 ++++++++++++
.../de/msdevs/einschlafhilfe/MainActivity.kt | 27 ++--
.../msdevs/einschlafhilfe/SettingsActivity.kt | 9 +-
.../adapter/AutoCompleteTextViewAdapter.kt | 29 ++++
.../einschlafhilfe/models/JsonResponse.kt | 7 +
.../einschlafhilfe/utils/NetworkUtils.kt | 13 ++
app/src/main/res/layout/activity_filter.xml | 33 ++++
app/src/main/res/layout/activity_main.xml | 4 +-
app/src/main/res/layout/activity_settings.xml | 145 ++++++++++++++++--
.../main/res/layout/layout_autocomplete.xml | 19 +++
app/src/main/res/values/strings.xml | 11 +-
build.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
16 files changed, 422 insertions(+), 41 deletions(-)
create mode 100644 app/src/main/assets/offline_list_hoerbuecher.txt
create mode 100644 app/src/main/java/de/msdevs/einschlafhilfe/FilterActivity.kt
create mode 100644 app/src/main/java/de/msdevs/einschlafhilfe/adapter/AutoCompleteTextViewAdapter.kt
create mode 100644 app/src/main/java/de/msdevs/einschlafhilfe/models/JsonResponse.kt
create mode 100644 app/src/main/java/de/msdevs/einschlafhilfe/utils/NetworkUtils.kt
create mode 100644 app/src/main/res/layout/activity_filter.xml
create mode 100644 app/src/main/res/layout/layout_autocomplete.xml
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 7e340a7..f8467b4 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5d5a584..e95e854 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -36,6 +36,7 @@
+
()
+ private lateinit var networkUtils: NetworkUtils
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityFilterBinding.inflate(layoutInflater)
+ val view = binding.root
+ setContentView(view)
+ iniViews()
+
+ lifecycleScope.launch {
+ withContext(Dispatchers.IO) {
+ apiCall()
+ }
+ }
+
+ }
+ private suspend fun apiCall() {
+ val urlExtraParameter = "folgen.json"
+ episodeList.clear()
+ try {
+ if(networkUtils.isConnected(this)){
+ val client = OkHttpClient.Builder().build()
+ val request =
+ Request.Builder().url(getString(R.string.base_url) + urlExtraParameter)
+ .build()
+
+ val folgenListe = client.newCall(request).await().body()?.string().toString()
+ val jsonObject = JSONObject(folgenListe)
+ val jsonArray = jsonObject.optJSONArray("folgen")
+ if (jsonArray != null) {
+ for (i in 0 until jsonArray.length()) {
+ val jsonObject = jsonArray.getJSONObject(i)
+ episodeList.add(
+ JsonResponse(
+ name = jsonObject.optString("name"),
+ beschreibung = jsonObject.optString("beschreibung"),
+ spotify = jsonObject.optString("spotify")
+ )
+ )
+ }
+ runOnUiThread {
+ iniAutoComplete()
+ }
+ }
+
+ }
+ }catch (e : Exception){
+ Log.e("","Error: " + e.message)
+ }
+ }
+ private fun iniAutoComplete(){
+ val nameArray = episodeList.map { it.name }.toTypedArray()
+
+ val adapter: ArrayAdapter = ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, nameArray)
+ val textView : MaterialAutoCompleteTextView = binding.tvFolge
+ textView.threshold = 3
+ textView.setAdapter(adapter)
+
+ textView.setOnItemClickListener { parent, view, position, id ->
+ val selectedName = parent.getItemAtPosition(position) as String
+
+ }
+ }
+ private fun iniViews(){
+ networkUtils = NetworkUtils()
+ tvInput = binding.tvFolge
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/msdevs/einschlafhilfe/MainActivity.kt b/app/src/main/java/de/msdevs/einschlafhilfe/MainActivity.kt
index 0cd9c39..740e89c 100644
--- a/app/src/main/java/de/msdevs/einschlafhilfe/MainActivity.kt
+++ b/app/src/main/java/de/msdevs/einschlafhilfe/MainActivity.kt
@@ -6,7 +6,6 @@ import android.content.DialogInterface
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager
-import android.net.ConnectivityManager
import android.net.Uri
import android.os.Bundle
import android.view.Menu
@@ -19,6 +18,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import de.msdevs.einschlafhilfe.databinding.ActivityMainBinding
+import de.msdevs.einschlafhilfe.models.JsonResponse
+import de.msdevs.einschlafhilfe.utils.NetworkUtils
import de.msdevs.einschlafhilfe.utils.Utility
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -31,7 +32,7 @@ import java.io.BufferedReader
import java.io.IOException
-class MainActivity : BaseActivity() { //Extends Base Activity
+class MainActivity : BaseActivity() {
private lateinit var binding: ActivityMainBinding
private var urlExtraParameter = "folgen.json"
@@ -41,11 +42,13 @@ class MainActivity : BaseActivity() { //Extends Base Activity
private lateinit var sharedPreferencesEditor: SharedPreferences.Editor
private lateinit var folgenListe : String
private var selectedTheme : Int = 0
- var random : Int = 0
+ private lateinit var networkUtils: NetworkUtils
+ private var random : Int = 0
/*
- Copyright 2017 - 2023 by Marvin Stelter
+ Copyright 2017 - 2024 by Marvin Stelter
*/
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
@@ -54,7 +57,7 @@ class MainActivity : BaseActivity() { //Extends Base Activity
sharedPreferences = getSharedPreferences(packageName,0)
sharedPreferencesEditor = sharedPreferences.edit()
-
+ networkUtils = NetworkUtils()
if(sharedPreferences.getInt("first",0) == 0){
sharedPreferencesEditor.putBoolean("update_list", true)
@@ -235,7 +238,7 @@ class MainActivity : BaseActivity() { //Extends Base Activity
when {
episodeList.isEmpty() -> {
- if(sharedPreferences.getBoolean("update_list",false) && isConnected()){
+ if(sharedPreferences.getBoolean("update_list",false) && networkUtils.isConnected(this)){
val client = OkHttpClient.Builder().build()
val request =
Request.Builder().url(getString(R.string.base_url) + urlExtraParameter)
@@ -351,19 +354,13 @@ class MainActivity : BaseActivity() { //Extends Base Activity
return url
}
private fun loadEpisodeCover(coverUrl : String){
- if(isConnected() && sharedPreferences.getBoolean("update_list",false)){
+ if(networkUtils.isConnected(this) && sharedPreferences.getBoolean("update_list",false)){
Glide.with(this)
.load(coverUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(binding.ivCover)
}
}
- class JsonResponse(
- val name: String,
- val beschreibung: String,
- val spotify: String
- )
-
private fun isSpotifyInstalled() : Boolean{
val packageManager: PackageManager = packageManager
val intent = Intent(Intent.ACTION_VIEW)
@@ -376,10 +373,6 @@ class MainActivity : BaseActivity() { //Extends Base Activity
}
return false
}
- private fun isConnected() : Boolean{
- val currentNetwork = getSystemService(ConnectivityManager::class.java).activeNetwork
- return currentNetwork != null
- }
private fun refresh(){
lifecycleScope.launch {
withContext(Dispatchers.IO) {
diff --git a/app/src/main/java/de/msdevs/einschlafhilfe/SettingsActivity.kt b/app/src/main/java/de/msdevs/einschlafhilfe/SettingsActivity.kt
index 88d6b58..83fa002 100644
--- a/app/src/main/java/de/msdevs/einschlafhilfe/SettingsActivity.kt
+++ b/app/src/main/java/de/msdevs/einschlafhilfe/SettingsActivity.kt
@@ -9,6 +9,7 @@ import android.content.res.Resources
import android.graphics.Color
import android.os.Bundle
import android.view.View
+import android.widget.Button
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
@@ -39,6 +40,7 @@ class SettingsActivity : BaseActivity() {
lateinit var rlJustus : RelativeLayout
lateinit var rlBob : RelativeLayout
lateinit var rlPeter: RelativeLayout
+ lateinit var btnFilter : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -124,6 +126,9 @@ class SettingsActivity : BaseActivity() {
sharedPreferencesEditor.apply()
}
})
+ btnFilter.setOnClickListener {
+ startActivity(Intent(this@SettingsActivity, FilterActivity::class.java))
+ }
rlJustus.setOnClickListener{
@@ -166,6 +171,8 @@ class SettingsActivity : BaseActivity() {
ivCheckPeter = binding.ivCheckPeter
ivCheckBob = binding.ivCheckBob
+ btnFilter = binding.btnFilter
+
rlJustus = binding.rlJustus
rlBob = binding.rlBob
rlPeter = binding.rlPeter
@@ -216,8 +223,6 @@ class SettingsActivity : BaseActivity() {
fun changeViewThemes(){
if(Utility.getTheme(this) == 4){
- // switchUpdatelist.thumbDrawable = getDrawable(R.drawable.thumb_style_white)
-
val thumbTintSelector = ColorStateList(
arrayOf(
intArrayOf(android.R.attr.state_checked),
diff --git a/app/src/main/java/de/msdevs/einschlafhilfe/adapter/AutoCompleteTextViewAdapter.kt b/app/src/main/java/de/msdevs/einschlafhilfe/adapter/AutoCompleteTextViewAdapter.kt
new file mode 100644
index 0000000..b123ff6
--- /dev/null
+++ b/app/src/main/java/de/msdevs/einschlafhilfe/adapter/AutoCompleteTextViewAdapter.kt
@@ -0,0 +1,29 @@
+package de.msdevs.einschlafhilfe.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ArrayAdapter
+import android.widget.TextView
+import de.msdevs.einschlafhilfe.models.JsonResponse
+import de.msdevs.einschlafhilfe.R
+
+class AutoCompleteTextViewAdapter(context: Context, resource: Int, objects: ArrayList) :
+ ArrayAdapter(context, resource, objects) {
+
+ override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
+ val item = getItem(position)
+ val view = convertView ?: LayoutInflater.from(context)
+ .inflate(R.layout.layout_autocomplete, parent, false)
+
+ val textView: TextView = view.findViewById(R.id.tv_folgen_name)
+ textView.text = item?.name
+
+ return view
+ }
+
+ override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
+ return getView(position, convertView, parent)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/msdevs/einschlafhilfe/models/JsonResponse.kt b/app/src/main/java/de/msdevs/einschlafhilfe/models/JsonResponse.kt
new file mode 100644
index 0000000..73872c2
--- /dev/null
+++ b/app/src/main/java/de/msdevs/einschlafhilfe/models/JsonResponse.kt
@@ -0,0 +1,7 @@
+package de.msdevs.einschlafhilfe.models
+
+class JsonResponse(
+ val name: String,
+ val beschreibung: String,
+ val spotify: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/de/msdevs/einschlafhilfe/utils/NetworkUtils.kt b/app/src/main/java/de/msdevs/einschlafhilfe/utils/NetworkUtils.kt
new file mode 100644
index 0000000..3084c45
--- /dev/null
+++ b/app/src/main/java/de/msdevs/einschlafhilfe/utils/NetworkUtils.kt
@@ -0,0 +1,13 @@
+package de.msdevs.einschlafhilfe.utils
+
+import android.content.Context
+import android.net.ConnectivityManager
+
+class NetworkUtils {
+
+ public fun isConnected(context : Context) : Boolean{
+ val currentNetwork = context.getSystemService(ConnectivityManager::class.java).activeNetwork
+ return currentNetwork != null
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_filter.xml b/app/src/main/res/layout/activity_filter.xml
new file mode 100644
index 0000000..762f67c
--- /dev/null
+++ b/app/src/main/res/layout/activity_filter.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d7fc797..bac7ef1 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -62,8 +62,8 @@
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 79aafbf..905b05b 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -130,13 +130,23 @@
android:layout_marginEnd="10dp"
android:orientation="vertical">
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 133d942..0c92bfd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -37,8 +37,8 @@
Die Einschlafhilfe App schlägt dir Folgen der drei Detektive aus Rocky Beach vor.
Die Drei Fragezeichen Kids
Die Dr3i
- Die Drei Fragezeichen Sonderfolgen
- Die Drei Fragezeichen Kids Sonderfolgen
+ Die drei ??? Sonderfolgen
+ Die drei ??? Kids Sonderfolgen
Benutzerdefinierte Einstellungen
Hier kannst du den Bereich selber anpassen um Folgen vorgeschlagen zu bekommen.
Die Drei Fragezeichen
@@ -69,4 +69,11 @@
Justus
Peter
theme
+ Die drei ??? Sonderfolgen
+ Die drei ??? Kids Sonderfolgen
+ Die drei ??? Hörbücher
+ Filterliste
+ Klick auf den Button unten, um Folgen auszublenden, die du z. B. nicht im Besitz hast oder nicht gerne hörst.
+ Folgen auswählen
+ Es wurden noch keine Folgen hinzugefügt
diff --git a/build.gradle b/build.gradle
index 5a91549..0d39da9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
maven { url "https://plugins.gradle.org/m2/"}
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.2.2'
+ classpath 'com.android.tools.build:gradle:8.3.0-rc01'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.10"
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7924f41..7d1279d 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip