Skip to content

Commit 5ce2e31

Browse files
committed
Merge branch 'dev'
2 parents ead68a2 + f6aef0d commit 5ce2e31

File tree

23 files changed

+567
-358
lines changed

23 files changed

+567
-358
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ android {
1919
applicationId = "org.nsh07.wikireader"
2020
minSdk = 26
2121
targetSdk = 36
22-
versionCode = 44
23-
versionName = "2.4.0"
22+
versionCode = 45
23+
versionName = "2.4.1"
2424

2525
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2626
vectorDrawables {
@@ -91,7 +91,6 @@ dependencies {
9191
implementation(libs.androidx.ui.graphics)
9292
implementation(libs.androidx.ui.tooling.preview)
9393

94-
implementation(libs.androidx.datastore.preferences)
9594
implementation(libs.androidx.room.runtime)
9695
implementation(libs.androidx.room.ktx)
9796
ksp(libs.androidx.room.compiler)

app/src/main/java/org/nsh07/wikireader/data/AppContainer.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ class DefaultAppContainer(context: Context) : AppContainer {
6060

6161
override val appPreferencesRepository: AppPreferencesRepository by lazy {
6262
AppPreferencesRepository(
63-
context,
6463
Dispatchers.IO,
6564
AppDatabase.getDatabase(context).preferenceDao()
6665
)

app/src/main/java/org/nsh07/wikireader/data/LanguageData.kt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.nsh07.wikireader.data
22

3+
import java.util.Locale
4+
35
object LanguageData {
46
val langCodes = listOf(
57
"ab",
@@ -1015,4 +1017,81 @@ object LanguageData {
10151017
"Traditional Chinese : 粵文維基百科",
10161018
"Wikipedia isiZulu"
10171019
)
1020+
1021+
val fifaCodeToAlpha3CodeMap = mapOf(
1022+
"ALG" to "DZA",
1023+
"ASA" to "ASM",
1024+
"ANG" to "AGO",
1025+
"ARU" to "ABW",
1026+
"BAH" to "BHS",
1027+
"BAN" to "BGD",
1028+
"BER" to "BMU",
1029+
"BHU" to "BTN",
1030+
"BOT" to "BWA",
1031+
"BRU" to "BRN",
1032+
"BUL" to "BGR",
1033+
"CAM" to "KHM",
1034+
"CAY" to "CYM",
1035+
"CTA" to "CAF",
1036+
"CHA" to "TCD",
1037+
"CHI" to "CHL",
1038+
"CGO" to "COG",
1039+
"CRC" to "CRI",
1040+
"CRO" to "HRV",
1041+
"DEN" to "DNK",
1042+
"EQG" to "GNQ",
1043+
"TAH" to "PYF",
1044+
"GAM" to "GMB",
1045+
"GER" to "DEU",
1046+
"GRE" to "GRC",
1047+
"GRN" to "GRD",
1048+
"GUA" to "GTM",
1049+
"GUI" to "GIN",
1050+
"HAI" to "HTI",
1051+
"HON" to "HND",
1052+
"KUW" to "KWT",
1053+
"LES" to "LSO",
1054+
"MAD" to "MDG",
1055+
"MAS" to "MYS",
1056+
"MTN" to "MRT",
1057+
"MRI" to "MUS",
1058+
"MYA" to "MMR",
1059+
"NEP" to "NPL",
1060+
"NED" to "NLD",
1061+
"NCA" to "NIC",
1062+
"NIG" to "NER",
1063+
"OMA" to "OMN",
1064+
"PLE" to "PSE",
1065+
"PAR" to "PRY",
1066+
"PHI" to "PHL",
1067+
"POR" to "PRT",
1068+
"PUR" to "PRI",
1069+
"SKN" to "KNA",
1070+
"VIN" to "VCT",
1071+
"SAM" to "WSM",
1072+
"KSA" to "SAU",
1073+
"SEY" to "SYC",
1074+
"SIN" to "SGP",
1075+
"SOL" to "SLB",
1076+
"RSA" to "ZAF",
1077+
"SRI" to "LKA",
1078+
"SUI" to "CHE",
1079+
"TPE" to "TWN",
1080+
"TAN" to "TZA",
1081+
"TOG" to "TGO",
1082+
"TGA" to "TON",
1083+
"TRI" to "TTO",
1084+
"UAE" to "ARE",
1085+
"URU" to "URY",
1086+
"VAN" to "VUT",
1087+
"VIE" to "VNM",
1088+
"ZAM" to "ZMB",
1089+
"ZIM" to "ZWE"
1090+
)
1091+
1092+
val countryNameToAlpha2CodeMap = Locale.getISOCountries()
1093+
.associateBy { Locale.Builder().setRegion(it).build().displayCountry }
1094+
1095+
val alpha3CodeToAlpha2CodeMap = Locale.getISOCountries()
1096+
.associateBy { Locale.Builder().setRegion(it).build().isO3Country }
10181097
}
Lines changed: 0 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
11
package org.nsh07.wikireader.data
22

3-
import android.content.Context
4-
import androidx.datastore.core.DataStore
5-
import androidx.datastore.preferences.core.Preferences
6-
import androidx.datastore.preferences.core.booleanPreferencesKey
7-
import androidx.datastore.preferences.core.edit
8-
import androidx.datastore.preferences.core.intPreferencesKey
9-
import androidx.datastore.preferences.core.stringPreferencesKey
10-
import androidx.datastore.preferences.core.stringSetPreferencesKey
11-
import androidx.datastore.preferences.preferencesDataStore
123
import kotlinx.coroutines.CoroutineDispatcher
13-
import kotlinx.coroutines.flow.first
144
import kotlinx.coroutines.withContext
155

166
interface PreferencesRepository {
@@ -22,33 +12,14 @@ interface PreferencesRepository {
2212
suspend fun readIntPreference(key: String): Int?
2313
suspend fun readBooleanPreference(key: String): Boolean?
2414

25-
suspend fun readOldStringPreference(key: String): String?
26-
suspend fun readOldIntPreference(key: String): Int?
27-
suspend fun readOldBooleanPreference(key: String): Boolean?
28-
suspend fun readOldHistory(): Set<String>?
29-
3015
suspend fun resetSettings()
31-
suspend fun eraseOldStringPreference(key: String)
32-
suspend fun eraseOldIntPreference(key: String)
33-
suspend fun eraseOldBooleanPreference(key: String)
34-
suspend fun eraseOldHistory()
3516
}
3617

3718
class AppPreferencesRepository(
38-
private val context: Context,
3919
private val ioDispatcher: CoroutineDispatcher,
4020
private val preferenceDao: PreferenceDao
4121
) : PreferencesRepository {
42-
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "preferences")
4322

44-
/**
45-
* Saves a preference key-value pair into the app's [DataStore]
46-
*
47-
* @param key The key of the key-value pair
48-
* @param value The value of the key-value pair
49-
*
50-
* @return a [String] with the same value as [value]
51-
*/
5223
override suspend fun saveStringPreference(key: String, value: String) =
5324
withContext(ioDispatcher) {
5425
preferenceDao.insertStringPreference(StringPreference(key, value))
@@ -82,77 +53,11 @@ class AppPreferencesRepository(
8253
preferenceDao.getBooleanPreference(key)?.value
8354
}
8455

85-
/**
86-
* Reads the preference value for a given key in the app's [DataStore]
87-
*
88-
* @param key The key of the required associated value
89-
*
90-
* @return a [String] with the value corresponding to the [key]
91-
*/
92-
override suspend fun readOldStringPreference(key: String): String? =
93-
withContext(ioDispatcher) {
94-
val dataStoreKey = stringPreferencesKey(key)
95-
context.dataStore.data.first()[dataStoreKey]
96-
}
97-
98-
override suspend fun readOldIntPreference(key: String): Int? =
99-
withContext(ioDispatcher) {
100-
val dataStoreKey = intPreferencesKey(key)
101-
context.dataStore.data.first()[dataStoreKey]
102-
}
103-
104-
override suspend fun readOldBooleanPreference(key: String): Boolean? =
105-
withContext(ioDispatcher) {
106-
val dataStoreKey = booleanPreferencesKey(key)
107-
context.dataStore.data.first()[dataStoreKey]
108-
}
109-
110-
override suspend fun readOldHistory(): Set<String>? =
111-
withContext(ioDispatcher) {
112-
val dataStoreKey = stringSetPreferencesKey("history")
113-
context.dataStore.data.first()[dataStoreKey]
114-
}
115-
11656
override suspend fun resetSettings() =
11757
withContext(ioDispatcher) {
11858
preferenceDao.resetStringPreferences()
11959
preferenceDao.resetIntPreferences()
12060
preferenceDao.resetBooleanPreferences()
12161
}
12262

123-
override suspend fun eraseOldStringPreference(key: String) =
124-
withContext(ioDispatcher) {
125-
val dataStoreKey = stringPreferencesKey(key)
126-
context.dataStore.edit { preferences ->
127-
preferences.remove(dataStoreKey)
128-
}
129-
Unit
130-
}
131-
132-
override suspend fun eraseOldIntPreference(key: String) =
133-
withContext(ioDispatcher) {
134-
val dataStoreKey = intPreferencesKey(key)
135-
context.dataStore.edit { preferences ->
136-
preferences.remove(dataStoreKey)
137-
}
138-
Unit
139-
}
140-
141-
override suspend fun eraseOldBooleanPreference(key: String) =
142-
withContext(ioDispatcher) {
143-
val dataStoreKey = booleanPreferencesKey(key)
144-
context.dataStore.edit { preferences ->
145-
preferences.remove(dataStoreKey)
146-
}
147-
Unit
148-
}
149-
150-
override suspend fun eraseOldHistory() =
151-
withContext(ioDispatcher) {
152-
val dataStoreKey = stringSetPreferencesKey("history")
153-
context.dataStore.edit { preferences ->
154-
preferences.remove(dataStoreKey)
155-
}
156-
Unit
157-
}
15863
}

app/src/main/java/org/nsh07/wikireader/data/misc.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,22 @@ fun langCodeToWikiName(langCode: String): String {
111111
*/
112112
fun isRtl(langCode: String): Boolean {
113113
return langCode in LanguageData.rtlLangCodes
114-
}
114+
}
115+
116+
/**
117+
* Converts an ISO 3166-1 alpha-2 country code to a flag emoji. Taken from
118+
* [Gist by asissuthar on GitHub](https://gist.github.com/asissuthar/cf8fcf0b3be968b1f341e537eb423163)
119+
*
120+
* @param code The ISO 3166-1 alpha-2 country code
121+
* @return Flag emoji of the country specified by [code]
122+
*
123+
* ```kotlin
124+
* countryFlag("in")
125+
* ```
126+
*/
127+
fun countryFlag(code: String) = code
128+
.uppercase()
129+
.split("")
130+
.filter { it.isNotBlank() }
131+
.map { it.codePointAt(0) + 0x1F1A5 }
132+
.joinToString("") { String(Character.toChars(it)) }

0 commit comments

Comments
 (0)