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"> - + + + + - + + + + + + + + + + + + + + + + + + + + + +