Skip to content

Commit c5524d1

Browse files
committed
removed ads + added tr settings
1 parent 4a018c3 commit c5524d1

File tree

8 files changed

+382
-23
lines changed

8 files changed

+382
-23
lines changed

app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ android {
2222
minSdkVersion 21
2323
targetSdkVersion 34
2424
versionCode 55
25-
versionName "3.1.9"
25+
versionName "3.2.0"
2626
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2727
}
2828

app/src/main/java/com/lagradost/quicknovel/APIRepository.kt

+18-1
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,32 @@ import com.lagradost.quicknovel.mvvm.Resource
44
import com.lagradost.quicknovel.mvvm.logError
55
import com.lagradost.quicknovel.mvvm.safeApiCall
66
import com.lagradost.quicknovel.util.Coroutines.threadSafeListOf
7+
import org.jsoup.Jsoup
78

89
data class OnGoingSearch(
910
val apiName: String,
1011
val data: Resource<List<SearchResponse>>
1112
)
1213

14+
// This function is somewhat like preParseHtml
1315
private fun String?.removeAds(): String? {
1416
if (this.isNullOrBlank()) return null
15-
return this.replace("(adsbygoogle = window.adsbygoogle || []).push({});", "")
17+
return try {
18+
val document = Jsoup.parse(this)
19+
//document.select("style").remove() // Style might be good, but is removed in the internal reader
20+
document.select("small.ads-title").remove()
21+
document.select("script").remove()
22+
document.select("iframe").remove()
23+
document.select(".adsbygoogle").remove()
24+
25+
// Remove aside https://html.spec.whatwg.org/multipage/sections.html#the-aside-element?
26+
// https://stackoverflow.com/questions/14384431/html-element-for-ad
27+
28+
document.html()
29+
} catch (t : Throwable) {
30+
logError(t)
31+
this
32+
}
1633
}
1734

1835
class APIRepository(val api: MainAPI) {

app/src/main/java/com/lagradost/quicknovel/CommonActivity.kt

+27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lagradost.quicknovel
22

33
import android.app.Activity
4+
import android.content.Context
5+
import android.content.res.Resources
46
import android.os.Build
57
import android.util.Log
68
import android.view.Gravity
@@ -18,6 +20,7 @@ import com.lagradost.quicknovel.mvvm.logError
1820
import com.lagradost.quicknovel.util.UIHelper.colorFromAttribute
1921
import com.lagradost.quicknovel.util.toPx
2022
import java.lang.ref.WeakReference
23+
import java.util.Locale
2124

2225
object CommonActivity {
2326
private var _activity: WeakReference<Activity>? = null
@@ -90,6 +93,30 @@ object CommonActivity {
9093
logError(e)
9194
}
9295
}
96+
fun init(act: Activity) {
97+
this.activity = act
98+
act.updateLocale()
99+
}
100+
101+
fun setLocale(context: Context?, languageCode: String?) {
102+
if (context == null || languageCode == null) return
103+
val locale = Locale(languageCode)
104+
val resources: Resources = context.resources
105+
val config = resources.configuration
106+
Locale.setDefault(locale)
107+
config.setLocale(locale)
108+
109+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
110+
context.createConfigurationContext(config)
111+
resources.updateConfiguration(config, resources.displayMetrics)
112+
}
113+
114+
fun Context?.updateLocale() {
115+
if (this == null) return
116+
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
117+
val localeCode = settingsManager.getString(this.getString(R.string.locale_key), null)
118+
setLocale(this, localeCode)
119+
}
93120

94121
fun loadThemes(act: Activity?) {
95122
if (act == null) return

app/src/main/java/com/lagradost/quicknovel/MainActivity.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.lagradost.quicknovel
33
import android.app.Activity
44
import android.content.Intent
55
import android.content.res.ColorStateList
6+
import android.content.res.Configuration
67
import android.os.Bundle
78
import android.view.Menu
89
import android.view.MenuItem
@@ -19,7 +20,6 @@ import androidx.navigation.NavDestination
1920
import androidx.navigation.NavDestination.Companion.hierarchy
2021
import androidx.navigation.NavGraph.Companion.findStartDestination
2122
import androidx.navigation.NavOptions
22-
import androidx.navigation.findNavController
2323
import androidx.navigation.fragment.NavHostFragment
2424
import androidx.preference.PreferenceManager
2525
import com.fasterxml.jackson.databind.DeserializationFeature
@@ -39,6 +39,7 @@ import com.lagradost.quicknovel.BookDownloader2Helper.createQuickStream
3939
import com.lagradost.quicknovel.BookDownloader2Helper.requestRW
4040
import com.lagradost.quicknovel.CommonActivity.activity
4141
import com.lagradost.quicknovel.CommonActivity.showToast
42+
import com.lagradost.quicknovel.CommonActivity.updateLocale
4243
import com.lagradost.quicknovel.DataStore.getKey
4344
import com.lagradost.quicknovel.DataStore.getKeys
4445
import com.lagradost.quicknovel.NotificationHelper.requestNotifications
@@ -51,7 +52,6 @@ import com.lagradost.quicknovel.mvvm.observeNullable
5152
import com.lagradost.quicknovel.providers.RedditProvider
5253
import com.lagradost.quicknovel.ui.ReadType
5354
import com.lagradost.quicknovel.ui.download.DownloadFragment
54-
import com.lagradost.quicknovel.ui.mainpage.MainPageFragment
5555
import com.lagradost.quicknovel.ui.result.ResultFragment
5656
import com.lagradost.quicknovel.ui.result.ResultViewModel
5757
import com.lagradost.quicknovel.ui.search.SearchFragment
@@ -421,15 +421,20 @@ class MainActivity : AppCompatActivity() {
421421
}
422422
}
423423

424+
override fun onConfigurationChanged(newConfig: Configuration) {
425+
super.onConfigurationChanged(newConfig)
426+
updateLocale() // android fucks me by chaining lang when rotating the phone
427+
}
428+
424429
var binding: ActivityMainBinding? = null
425430
override fun onCreate(savedInstanceState: Bundle?) {
426431
mainActivity = this
427-
activity = this
428432

429433
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
430434

431435
val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
432436
CommonActivity.loadThemes(this)
437+
CommonActivity.init(this)
433438

434439
super.onCreate(savedInstanceState)
435440
binding = ActivityMainBinding.inflate(layoutInflater)
@@ -673,7 +678,7 @@ class MainActivity : AppCompatActivity() {
673678
object : OnBackPressedCallback(true) {
674679
override fun handleOnBackPressed() {
675680
window?.navigationBarColor = colorFromAttribute(R.attr.primaryGrayBackground)
676-
//updateLocale()
681+
updateLocale()
677682

678683
// If we don't disable we end up in a loop with default behavior calling
679684
// this callback as well, so we disable it, run default behavior,

app/src/main/java/com/lagradost/quicknovel/ui/settings/SettingsFragment.kt

+50
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.preference.Preference
1212
import androidx.preference.PreferenceFragmentCompat
1313
import androidx.preference.PreferenceManager
1414
import com.lagradost.quicknovel.APIRepository.Companion.providersActive
15+
import com.lagradost.quicknovel.CommonActivity
1516
import com.lagradost.quicknovel.CommonActivity.showToast
1617
import com.lagradost.quicknovel.R
1718
import com.lagradost.quicknovel.mvvm.logError
@@ -43,7 +44,31 @@ class SettingsFragment : PreferenceFragmentCompat() {
4344
}
4445
}
4546

47+
4648
companion object {
49+
fun getCurrentLocale(context: Context): String {
50+
val res = context.resources
51+
val conf = res.configuration
52+
53+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
54+
conf?.locales?.get(0)?.toString() ?: "en"
55+
} else {
56+
@Suppress("DEPRECATION")
57+
conf?.locale?.toString() ?: "en"
58+
}
59+
}
60+
61+
// idk, if you find a way of automating this it would be great
62+
// https://www.iemoji.com/view/emoji/1794/flags/antarctica
63+
// Emoji Character Encoding Data --> C/C++/Java Src
64+
// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto
65+
val appLanguages = arrayListOf(
66+
/* begin language list */
67+
Triple("", "English", "en"),
68+
Triple("", "Türkçe", "tr"),
69+
/* end language list */
70+
).sortedBy { it.second.lowercase() } //ye, we go alphabetical, so ppl don't put their lang on top
71+
4772
fun showSearchProviders(context: Context?) {
4873
if (context == null) return
4974
val apiNames = apis.map { it.name }
@@ -176,6 +201,31 @@ class SettingsFragment : PreferenceFragmentCompat() {
176201
return@setOnPreferenceChangeListener true
177202
}*/
178203

204+
getPref(R.string.locale_key)?.setOnPreferenceClickListener { pref ->
205+
val tempLangs = appLanguages.toMutableList()
206+
val current = getCurrentLocale(pref.context)
207+
val languageCodes = tempLangs.map { (_, _, iso) -> iso }
208+
val languageNames = tempLangs.map { (emoji, name, iso) ->
209+
val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" }
210+
"$flag $name"
211+
}
212+
val index = languageCodes.indexOf(current)
213+
214+
activity?.showDialog(
215+
languageNames, index, getString(R.string.provider_lang_settings), true, { }
216+
) { languageIndex ->
217+
try {
218+
val code = languageCodes[languageIndex]
219+
CommonActivity.setLocale(activity, code)
220+
settingsManager.edit().putString(getString(R.string.locale_key), code).apply()
221+
activity?.recreate()
222+
} catch (e: Exception) {
223+
logError(e)
224+
}
225+
}
226+
return@setOnPreferenceClickListener true
227+
}
228+
179229
getPref(R.string.backup_key)?.setOnPreferenceClickListener {
180230
activity?.backup()
181231
return@setOnPreferenceClickListener true

0 commit comments

Comments
 (0)