From b02e3cb07a08d5e3256e90fc362c4501834bc404 Mon Sep 17 00:00:00 2001 From: tvmon-dev Date: Thu, 16 Apr 2026 21:07:35 +0900 Subject: [PATCH] =?UTF-8?q?v1.0.7=20-=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20On/Off=20=EC=84=A4=EC=A0=95,=20REQUEST=5FINSTALL=5F?= =?UTF-8?q?PACKAGES=20=EA=B6=8C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tvmon-app/app/build.gradle | 4 +- tvmon-app/app/src/main/AndroidManifest.xml | 1 + .../com/example/tvmon/ui/main/MainFragment.kt | 18 ++++++--- .../tvmon/ui/settings/SettingsActivity.kt | 37 +++++++++++++++++++ .../example/tvmon/util/CategoryPreferences.kt | 36 ++++++++++++++++++ .../src/main/res/layout/activity_settings.xml | 18 +++++++++ .../main/res/layout/item_category_toggle.xml | 24 ++++++++++++ 7 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 tvmon-app/app/src/main/java/com/example/tvmon/util/CategoryPreferences.kt create mode 100644 tvmon-app/app/src/main/res/layout/item_category_toggle.xml diff --git a/tvmon-app/app/build.gradle b/tvmon-app/app/build.gradle index 081ed67..d959035 100644 --- a/tvmon-app/app/build.gradle +++ b/tvmon-app/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "com.example.tvmon" minSdk 28 targetSdk 34 - versionCode 7 - versionName "1.0.6" + versionCode 8 + versionName "1.0.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/tvmon-app/app/src/main/AndroidManifest.xml b/tvmon-app/app/src/main/AndroidManifest.xml index 0b197b6..113e60e 100644 --- a/tvmon-app/app/src/main/AndroidManifest.xml +++ b/tvmon-app/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + - Log.w(TAG, "Loading category: ${category.key} - ${category.name}") - async { - val row = loadCategoryRow(category) - category.key to row + TvmonScraper.CATEGORIES.values + .filter { enabledCategories.contains(it.key) } + .map { category -> + Log.w(TAG, "Loading category: ${category.key} - ${category.name}") + async { + val row = loadCategoryRow(category) + category.key to row + } } - } } for (deferred in deferredRows) { diff --git a/tvmon-app/app/src/main/java/com/example/tvmon/ui/settings/SettingsActivity.kt b/tvmon-app/app/src/main/java/com/example/tvmon/ui/settings/SettingsActivity.kt index dcdae59..2bd3122 100644 --- a/tvmon-app/app/src/main/java/com/example/tvmon/ui/settings/SettingsActivity.kt +++ b/tvmon-app/app/src/main/java/com/example/tvmon/ui/settings/SettingsActivity.kt @@ -4,12 +4,15 @@ import android.app.AlertDialog import android.os.Bundle import android.view.WindowManager import android.widget.Button +import android.widget.LinearLayout +import android.widget.Switch import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.example.tvmon.R import com.example.tvmon.util.ApkDownloader +import com.example.tvmon.util.CategoryPreferences import com.example.tvmon.util.UpdateChecker import kotlinx.coroutines.launch import org.koin.android.ext.android.inject @@ -28,9 +31,25 @@ class SettingsActivity : AppCompatActivity() { private lateinit var btnClearCache: Button private lateinit var btnCheckUpdate: Button private lateinit var btnBack: Button + private lateinit var categoryTogglesContainer: LinearLayout private var latestVersionInfo: com.example.tvmon.util.VersionInfo? = null + private val categories = listOf( + "popular" to "인기영상", + "movie" to "영화", + "kor_movie" to "한국영화", + "drama" to "드라마", + "ent" to "예능프로그램", + "sisa" to "시사/다큐", + "world" to "해외드라마", + "ott_ent" to "해외 (예능/다큐)", + "ani_movie" to "[극장판] 애니메이션", + "animation" to "일반 애니메이션", + "old_ent" to "추억의 예능", + "old_drama" to "추억의 드라마" + ) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -43,6 +62,7 @@ class SettingsActivity : AppCompatActivity() { setContentView(R.layout.activity_settings) initViews() + setupCategoryToggles() loadSettings() setupListeners() } @@ -53,6 +73,23 @@ class SettingsActivity : AppCompatActivity() { btnClearCache = findViewById(R.id.btn_clear_cache) btnCheckUpdate = findViewById(R.id.btn_check_update) btnBack = findViewById(R.id.btn_back) + categoryTogglesContainer = findViewById(R.id.category_toggles_container) + } + + private fun setupCategoryToggles() { + for ((key, name) in categories) { + val toggleView = layoutInflater.inflate(R.layout.item_category_toggle, categoryTogglesContainer, false) + val toggle = toggleView.findViewById(R.id.switch_category) + val label = toggleView.findViewById(R.id.tv_category_name) + + label.text = name + toggle.isChecked = CategoryPreferences.isCategoryEnabled(this, key) + toggle.setOnCheckedChangeListener { _, isChecked -> + CategoryPreferences.setCategoryEnabled(this, key, isChecked) + } + + categoryTogglesContainer.addView(toggleView) + } } private fun loadSettings() { diff --git a/tvmon-app/app/src/main/java/com/example/tvmon/util/CategoryPreferences.kt b/tvmon-app/app/src/main/java/com/example/tvmon/util/CategoryPreferences.kt new file mode 100644 index 0000000..dcad441 --- /dev/null +++ b/tvmon-app/app/src/main/java/com/example/tvmon/util/CategoryPreferences.kt @@ -0,0 +1,36 @@ +package com.example.tvmon.util + +import android.content.Context +import android.content.SharedPreferences + +object CategoryPreferences { + private const val PREFS_NAME = "category_prefs" + private const val KEY_PREFIX = "category_enabled_" + + private fun getPrefs(context: Context): SharedPreferences { + return context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + } + + fun isCategoryEnabled(context: Context, categoryKey: String): Boolean { + return getPrefs(context).getBoolean(KEY_PREFIX + categoryKey, true) + } + + fun setCategoryEnabled(context: Context, categoryKey: String, enabled: Boolean) { + getPrefs(context).edit().putBoolean(KEY_PREFIX + categoryKey, enabled).apply() + } + + fun getEnabledCategories(context: Context): Set { + val prefs = getPrefs(context) + val enabled = mutableSetOf() + + val categories = listOf("popular", "movie", "kor_movie", "drama", "ent", "sisa", + "world", "ott_ent", "ani_movie", "animation", "old_ent", "old_drama") + + for (key in categories) { + if (prefs.getBoolean(KEY_PREFIX + key, true)) { + enabled.add(key) + } + } + return enabled + } +} \ No newline at end of file diff --git a/tvmon-app/app/src/main/res/layout/activity_settings.xml b/tvmon-app/app/src/main/res/layout/activity_settings.xml index af8621d..3efbf87 100644 --- a/tvmon-app/app/src/main/res/layout/activity_settings.xml +++ b/tvmon-app/app/src/main/res/layout/activity_settings.xml @@ -67,6 +67,24 @@ + + + + + + + + + + + + + \ No newline at end of file