Refactoring , editactivity and state level added

This commit is contained in:
soraefir 2024-02-07 16:21:37 +01:00
parent 3c1080e8c2
commit b03cbcf457
Signed by: sora
GPG Key ID: A362EA0491E2EEA0
28 changed files with 574 additions and 405 deletions

View File

@ -44,13 +44,14 @@ dependencies {
implementation 'androidx.navigation:navigation-fragment-ktx:2.7.6' implementation 'androidx.navigation:navigation-fragment-ktx:2.7.6'
implementation 'androidx.navigation:navigation-ui-ktx:2.7.6' implementation 'androidx.navigation:navigation-ui-ktx:2.7.6'
implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.core:core-ktx:1.12.0'
implementation "androidx.preference:preference-ktx:1.2.1" implementation 'androidx.preference:preference-ktx:1.2.1'
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'com.caverock:androidsvg-aar:1.4' implementation 'com.caverock:androidsvg-aar:1.4'
implementation "com.mikepenz:aboutlibraries:10.10.0" implementation 'com.github.chrisbanes:PhotoView:2.0.0'
implementation 'com.mikepenz:aboutlibraries:10.10.0'
} }

View File

@ -14,6 +14,7 @@
tools:targetApi="31" tools:targetApi="31"
tools:replace="android:allowBackup" tools:replace="android:allowBackup"
> >
<profileable android:shell="true"/>
<activity <activity
android:name=".activity.MainActivity" android:name=".activity.MainActivity"
android:exported="true" > android:exported="true" >
@ -22,6 +23,13 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activity.EditActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity <activity
android:name=".activity.SettingsActivity" android:name=".activity.SettingsActivity"
android:exported="true" > android:exported="true" >

View File

@ -0,0 +1,30 @@
package net.helcel.beendroid.activity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import net.helcel.beendroid.R
import net.helcel.beendroid.countries.Visited
import net.helcel.beendroid.countries.World
class EditActivity : AppCompatActivity() {
private lateinit var list : RecyclerView
private lateinit var visited : Visited
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit)
visited = Visited(this)
visited.load()
list = findViewById(R.id.list)
list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
list.adapter = FoldingListAdapter(this, World.WWW.children, visited) { }
}
}

View File

@ -14,7 +14,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.checkbox.MaterialCheckBox import com.google.android.material.checkbox.MaterialCheckBox
import net.helcel.beendroid.R import net.helcel.beendroid.R
import net.helcel.beendroid.countries.GeoLoc import net.helcel.beendroid.countries.GeoLoc
import net.helcel.beendroid.countries.LocType
import net.helcel.beendroid.countries.Visited import net.helcel.beendroid.countries.Visited
import java.util.* import java.util.*
@ -61,6 +60,7 @@ class FoldingListAdapter(
private val visited: Visited, private val visited: Visited,
) : RecyclerView.ViewHolder(itemView) { ) : RecyclerView.ViewHolder(itemView) {
private val textView: TextView = itemView.findViewById(R.id.textView) private val textView: TextView = itemView.findViewById(R.id.textView)
private val progressView: TextView = itemView.findViewById(R.id.progressView)
private val checkBox: MaterialCheckBox = itemView.findViewById(R.id.checkBox) private val checkBox: MaterialCheckBox = itemView.findViewById(R.id.checkBox)
private val subItemView: View = itemView.findViewById(R.id.sub_item) private val subItemView: View = itemView.findViewById(R.id.sub_item)
private val list: RecyclerView = itemView.findViewById(R.id.list_list) private val list: RecyclerView = itemView.findViewById(R.id.list_list)
@ -72,27 +72,37 @@ class FoldingListAdapter(
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
textView.text = el.first.fullName textView.text = el.first.fullName
if (el.first.type == LocType.GROUP) { if (el.first.children.isEmpty()) {
textView.setTypeface(null, Typeface.BOLD)
val colorGrayTyped = TypedValue()
ctx.theme.resolveAttribute(android.R.attr.panelColorBackground, colorGrayTyped, true)
val color = Color.valueOf(colorGrayTyped.data)
textView.setBackgroundColor(Color.valueOf(color.red(), color.green(), color.blue(), 0.5f).toArgb())
list.adapter = FoldingListAdapter(ctx, el.first.children,visited, parentLambda)
textView.parent.parent.requestChildFocus(textView,textView)
} else {
val colorBackgroundTyped = TypedValue() val colorBackgroundTyped = TypedValue()
ctx.theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true) ctx.theme.resolveAttribute(
android.R.attr.colorBackground,
colorBackgroundTyped,
true
)
textView.backgroundTintList = null textView.backgroundTintList = null
textView.background = ColorDrawable(colorBackgroundTyped.data) textView.background = ColorDrawable(colorBackgroundTyped.data)
textView.isActivated = false textView.isActivated = false
}else {
textView.setTypeface(null, Typeface.BOLD)
progressView.text = "${(el.first.children.map { visited.visited(it) }.count { it })}/${el.first.children.size}"
val layoutParam = checkBox.layoutParams val colorGrayTyped = TypedValue()
layoutParam.width = 125 ctx.theme.resolveAttribute(
checkBox.layoutParams = layoutParam android.R.attr.panelColorBackground,
checkBox.visibility = View.VISIBLE colorGrayTyped,
true
)
val color = Color.valueOf(colorGrayTyped.data)
textView.setBackgroundColor(
Color.valueOf(
color.red(),
color.green(),
color.blue(),
0.5f
).toArgb()
)
list.adapter = FoldingListAdapter(ctx, el.first.children, visited, parentLambda)
textView.parent.parent.requestChildFocus(textView, textView)
} }
checkBox.checkedState = checkBox.checkedState =
if (visited.visited(el.first)) MaterialCheckBox.STATE_CHECKED if (visited.visited(el.first)) MaterialCheckBox.STATE_CHECKED

View File

@ -1,53 +1,50 @@
package net.helcel.beendroid.activity package net.helcel.beendroid.activity
import kotlinx.coroutines.*
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.PictureDrawable
import android.os.Bundle import android.os.Bundle
import android.util.TypedValue
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.MenuProvider import androidx.core.view.MenuProvider
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.caverock.androidsvg.RenderOptions import com.caverock.androidsvg.RenderOptions
import com.caverock.androidsvg.SVGImageView import com.github.chrisbanes.photoview.PhotoView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.helcel.beendroid.R import net.helcel.beendroid.R
import net.helcel.beendroid.activity.fragment.SettingsFragment
import net.helcel.beendroid.countries.Visited import net.helcel.beendroid.countries.Visited
import net.helcel.beendroid.countries.World
import net.helcel.beendroid.svg.CSSWrapper import net.helcel.beendroid.svg.CSSWrapper
import net.helcel.beendroid.svg.PSVGWrapper import net.helcel.beendroid.svg.PSVGWrapper
import net.helcel.beendroid.helper.*
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var sharedPreferences: SharedPreferences private lateinit var sharedPreferences: SharedPreferences
private lateinit var map : SVGImageView private lateinit var photoView : PhotoView
private lateinit var list : RecyclerView
private lateinit var visited : Visited private lateinit var visited : Visited
private lateinit var psvg : PSVGWrapper private lateinit var psvg : PSVGWrapper
private lateinit var css : CSSWrapper private lateinit var css : CSSWrapper
private var processor: ImageProcessor = ImageProcessor({ refreshMapCompute() },{ refreshMapDisplay(it) }) override fun onActivityReenter(resultCode: Int, data: Intent?) {
super.onActivityReenter(resultCode, data)
private val bitmap: Bitmap = Bitmap.createBitmap(1200,900, Bitmap.Config.ARGB_8888) refreshMap()
private val canvas = Canvas(bitmap) }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// Create action bar // Create action bar
val colorPrimaryTyped = TypedValue() supportActionBar?.setBackgroundDrawable(colorPrimary(this))
theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true)
supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data))
// Fetch shared preferences to restore app theme upon startup // Fetch shared preferences to restore app theme upon startup
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
@ -62,7 +59,7 @@ class MainActivity : AppCompatActivity() {
override fun onMenuItemSelected(menuItem: MenuItem): Boolean { override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) { return when (menuItem.itemId) {
R.id.action_edit -> { R.id.action_edit -> {
// TODO: Enable editing selected countries startActivity(Intent(this@MainActivity, EditActivity::class.java))
true true
} }
R.id.action_stats -> { R.id.action_stats -> {
@ -92,47 +89,21 @@ class MainActivity : AppCompatActivity() {
// Populate map from list of countries // Populate map from list of countries
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
map = findViewById(R.id.map)
map.setImageBitmap(bitmap)
refreshMapDisplay(refreshMapCompute())
// Populate list below the map photoView = findViewById(R.id.photo_view)
list = findViewById(R.id.list) photoView.minimumScale = 1f
list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false) photoView.maximumScale = 30f
list.adapter = FoldingListAdapter(this, World.WWW.children, visited) { processor.process() }
refreshMap()
} }
private fun refreshMapDisplay(css_value: String){ private fun refreshMap() {
// Set or reset background (replaces canvas.drawColor(0, 0, 0)) val opt : RenderOptions = RenderOptions.create()
val colorBackgroundTyped = TypedValue() CoroutineScope(Dispatchers.IO).launch {
theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true) opt.css(css.get())
canvas.drawColor(colorBackgroundTyped.data)
// Render all countries and visited ones
psvg.getFill().renderToCanvas(canvas, RenderOptions.create().css(css_value))
// Render all contours in the same color as the background to make them much clearer
psvg.getDraw().renderToCanvas(canvas)
}
private fun refreshMapCompute() : String {
return css.get()
}
class ImageProcessor(private val refreshMapCompute: ()->String, private val refreshMapDisplay: (String)->Unit) {
private var currentJob : Job? = null
fun process() {
currentJob?.cancel()
currentJob = CoroutineScope(Dispatchers.Main).launch {
try {
refreshMapDisplay(refreshMapCompute())
} catch (_: CancellationException) {
}
}
} }
photoView.setImageLevel(1)
photoView.setImageDrawable(PictureDrawable(psvg.getFill().renderToPicture(opt)))
} }
} }

View File

@ -1,11 +1,13 @@
package net.helcel.beendroid.activity package net.helcel.beendroid.activity
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.util.TypedValue
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import net.helcel.beendroid.R import net.helcel.beendroid.R
import net.helcel.beendroid.activity.fragment.AboutFragment
import net.helcel.beendroid.activity.fragment.LicenseFragment
import net.helcel.beendroid.activity.fragment.SettingsFragment
import net.helcel.beendroid.helper.*
class SettingsActivity: AppCompatActivity() { class SettingsActivity: AppCompatActivity() {
@ -16,9 +18,7 @@ class SettingsActivity: AppCompatActivity() {
setContentView(R.layout.activity_settings) setContentView(R.layout.activity_settings)
// Create action bar // Create action bar
val colorPrimaryTyped = TypedValue() supportActionBar?.setBackgroundDrawable(colorPrimary(this))
theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true)
supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data))
supportActionBar?.title = getString(R.string.action_settings) supportActionBar?.title = getString(R.string.action_settings)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)

View File

@ -1,4 +1,4 @@
package net.helcel.beendroid.activity package net.helcel.beendroid.activity.fragment
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater

View File

@ -1,4 +1,4 @@
package net.helcel.beendroid.activity package net.helcel.beendroid.activity.fragment
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater

View File

@ -1,4 +1,4 @@
package net.helcel.beendroid.activity package net.helcel.beendroid.activity.fragment
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle

View File

@ -1,265 +1,267 @@
package net.helcel.beendroid.countries package net.helcel.beendroid.countries
import net.helcel.beendroid.countries.Country.*
import net.helcel.beendroid.countries.State.*
enum class Country(override val fullName: String, override val area : Int) : GeoLoc { enum class Country(override val fullName: String, override val area : Int, override val children : List<GeoLoc>) : GeoLoc {
AFG("Afghanistan", 652864), AFG("Afghanistan", 652864, emptyList()),
ALA("Åland Islands", 1580), ALA("Åland Islands", 1580, emptyList()),
ALB("Albania", 28748), ALB("Albania", 28748, emptyList()),
DZA("Algeria", 2381741), DZA("Algeria", 2381741, emptyList()),
ASM("American Samoa", 199000), ASM("American Samoa", 199000, emptyList()),
AND("Andorra", 468765), AND("Andorra", 468765, emptyList()),
AGO("Angola", 1246700), AGO("Angola", 1246700, emptyList()),
AIA("Anguilla", 96), AIA("Anguilla", 96, emptyList()),
ATA("Antarctica", 14000000), ATA("Antarctica", 14000000, emptyList()),
ATG("Antigua and Barbuda", 442), ATG("Antigua and Barbuda", 442, emptyList()),
ARG("Argentina", 2780400), ARG("Argentina", 2780400, emptyList()),
ARM("Armenia", 29743), ARM("Armenia", 29743, emptyList()),
ABW("Aruba", 180), ABW("Aruba", 180, emptyList()),
AUS("Australia", 7692024), AUS("Australia", 7692024, emptyList()),
AUT("Austria", 83879), AUT("Austria", 83879, emptyList()),
AZE("Azerbaijan", 86600), AZE("Azerbaijan", 86600, emptyList()),
BHS("Bahamas", 13878), BHS("Bahamas", 13878, emptyList()),
BHR("Bahrain", 778), BHR("Bahrain", 778, emptyList()),
BGD("Bangladesh", 143998), BGD("Bangladesh", 143998, emptyList()),
BRB("Barbados", 430), BRB("Barbados", 430, emptyList()),
BLR("Belarus", 207595), BLR("Belarus", 207595, emptyList()),
BEL("Belgium", 30528), BEL("Belgium", 30528, emptyList()),
BLZ("Belize", 22965), BLZ("Belize", 22965, emptyList()),
BEN("Benin", 114763), BEN("Benin", 114763, emptyList()),
BMU("Bermuda", 54), BMU("Bermuda", 54, emptyList()),
BTN("Bhutan", 38394), BTN("Bhutan", 38394, emptyList()),
BOL("Bolivia (Plurinational State of)", 1098581), BOL("Bolivia (Plurinational State of)", 1098581, emptyList()),
BES("Bonaire, Sint Eustatius and Saba", 294), BES("Bonaire, Sint Eustatius and Saba", 294, emptyList()),
BIH("Bosnia and Herzegovina", 51209), BIH("Bosnia and Herzegovina", 51209, emptyList()),
BWA("Botswana", 581730), BWA("Botswana", 581730, emptyList()),
BVT("Bouvet Island", 49), BVT("Bouvet Island", 49, emptyList()),
BRA("Brazil", 8515767), BRA("Brazil", 8515767, emptyList()),
IOT("British Indian Ocean Territory", 60), IOT("British Indian Ocean Territory", 60, emptyList()),
BRN("Brunei Darussalam", 5765), BRN("Brunei Darussalam", 5765, emptyList()),
BGR("Bulgaria", 110994), BGR("Bulgaria", 110994, emptyList()),
BFA("Burkina Faso", 274200), BFA("Burkina Faso", 274200, emptyList()),
BDI("Burundi", 27834), BDI("Burundi", 27834, emptyList()),
CPV("Cabo Verde", 4033), CPV("Cabo Verde", 4033, emptyList()),
KHM("Cambodia", 181035), KHM("Cambodia", 181035, emptyList()),
CMR("Cameroon", 475442), CMR("Cameroon", 475442, emptyList()),
CAN("Canada", 9984670), CAN("Canada", 9984670, emptyList()),
CYM("Cayman Islands", 264), CYM("Cayman Islands", 264, emptyList()),
CAF("Central African Republic", 622436), CAF("Central African Republic", 622436, emptyList()),
TCD("Chad", 1284000), TCD("Chad", 1284000, emptyList()),
CHL("Chile", 756102), CHL("Chile", 756102, emptyList()),
CHN("China", 9596961), CHN("China", 9596961, emptyList()),
CXR("Christmas Island", 135), CXR("Christmas Island", 135, emptyList()),
CCK("Cocos (Keeling) Islands", 14), CCK("Cocos (Keeling) Islands", 14, emptyList()),
COL("Colombia", 1141748), COL("Colombia", 1141748, emptyList()),
COM("Comoros", 2235), COM("Comoros", 2235, emptyList()),
COG("Congo", 342000), COG("Congo", 342000, emptyList()),
COD("Congo, Democratic Republic of the", 2344858), COD("Congo, Democratic Republic of the", 2344858, emptyList()),
COK("Cook Islands", 237), COK("Cook Islands", 237, emptyList()),
CRI("Costa Rica", 51100), CRI("Costa Rica", 51100, emptyList()),
CIV("Côte d'Ivoire", 322463), CIV("Côte d'Ivoire", 322463, emptyList()),
HRV("Croatia", 56594), HRV("Croatia", 56594, emptyList()),
CUB("Cuba", 109884), CUB("Cuba", 109884, emptyList()),
CUW("Curaçao", 444), CUW("Curaçao", 444, emptyList()),
CYP("Cyprus", 9251), CYP("Cyprus", 9251, emptyList()),
CZE("Czech Republic", 78865), CZE("Czech Republic", 78865, emptyList()),
DNK("Denmark", 42933), DNK("Denmark", 42933, emptyList()),
DJI("Djibouti", 23200), DJI("Djibouti", 23200, emptyList()),
DMA("Dominica", 750), DMA("Dominica", 750, emptyList()),
ECU("Ecuador", 276841), ECU("Ecuador", 276841, emptyList()),
EGY("Egypt", 1002450), EGY("Egypt", 1002450, emptyList()),
SLV("El Salvador", 21041), SLV("El Salvador", 21041, emptyList()),
GNQ("Equatorial Guinea", 28051), GNQ("Equatorial Guinea", 28051, emptyList()),
ERI("Eritrea", 117600), ERI("Eritrea", 117600, emptyList()),
EST("Estonia", 45227), EST("Estonia", 45227, emptyList()),
SWZ("Eswatini", 17364), SWZ("Eswatini", 17364, emptyList()),
ETH("Ethiopia", 1104300), ETH("Ethiopia", 1104300, emptyList()),
FLK("Falkland Islands (Malvinas)", 12173), FLK("Falkland Islands (Malvinas)", 12173, emptyList()),
FRO("Faroe Islands", 1399), FRO("Faroe Islands", 1399, emptyList()),
FJI("Fiji", 18333), FJI("Fiji", 18333, emptyList()),
FIN("Finland", 338424), FIN("Finland", 338424, emptyList()),
FRA("France", 643801), FRA("France", 643801, emptyList()),
GUF("French Guiana", 83534), GUF("French Guiana", 83534, emptyList()),
PYF("French Polynesia", 4167), PYF("French Polynesia", 4167, emptyList()),
ATF("French Southern Territories", 7747), ATF("French Southern Territories", 7747, emptyList()),
GAB("Gabon", 267667), GAB("Gabon", 267667, emptyList()),
GMB("Gambia", 11295), GMB("Gambia", 11295, emptyList()),
GEO("Georgia", 69700), GEO("Georgia", 69700, emptyList()),
DEU("Germany", 357408), DEU("Germany", 357408, listOf(DEU_BY, DEU_BE, DEU_BB, DEU_HB, DEU_HH, DEU_HE, DEU_MV, DEU_NI, DEU_NW, DEU_RP, DEU_SL, DEU_SN, DEU_ST, DEU_SH, DEU_TH)),
GHA("Ghana", 238533), GHA("Ghana", 238533, emptyList()),
GIB("Gibraltar", 6), GIB("Gibraltar", 6, emptyList()),
GRC("Greece", 131957), GRC("Greece", 131957, emptyList()),
GRL("Greenland", 2166086), GRL("Greenland", 2166086, emptyList()),
GRD("Grenada", 344), GRD("Grenada", 344, emptyList()),
GLP("Guadeloupe", 1628), GLP("Guadeloupe", 1628, emptyList()),
GUM("Guam", 541), GUM("Guam", 541, emptyList()),
GTM("Guatemala", 108889), GTM("Guatemala", 108889, emptyList()),
GGY("Guernsey", 78), GGY("Guernsey", 78, emptyList()),
GIN("Guinea", 245857), GIN("Guinea", 245857, emptyList()),
GNB("Guinea-Bissau", 36125), GNB("Guinea-Bissau", 36125, emptyList()),
GUY("Guyana", 214969), GUY("Guyana", 214969, emptyList()),
HTI("Haiti", 27750), HTI("Haiti", 27750, emptyList()),
HMD("Heard Island and McDonald Islands", 412), HMD("Heard Island and McDonald Islands", 412, emptyList()),
VAT("Holy See (Vatican)", 1), VAT("Holy See (Vatican)", 1, emptyList()),
HND("Honduras", 112492), HND("Honduras", 112492, emptyList()),
HKG("Hong Kong", 1104), HKG("Hong Kong", 1104, emptyList()),
HUN("Hungary", 93028), HUN("Hungary", 93028, emptyList()),
ISL("Iceland", 102775), ISL("Iceland", 102775, emptyList()),
IND("India", 3287263), IND("India", 3287263, emptyList()),
IDN("Indonesia", 1904569), IDN("Indonesia", 1904569, emptyList()),
IRN("Iran (Islamic Republic of)", 1648195), IRN("Iran (Islamic Republic of)", 1648195, emptyList()),
IRQ("Iraq", 438317), IRQ("Iraq", 438317, emptyList()),
IRL("Ireland", 70273), IRL("Ireland", 70273, emptyList()),
IMN("Isle of Man", 572), IMN("Isle of Man", 572, emptyList()),
ISR("Israel", 22072), ISR("Israel", 22072, emptyList()),
ITA("Italy", 301340), ITA("Italy", 301340, emptyList()),
JAM("Jamaica", 10991), JAM("Jamaica", 10991, emptyList()),
JPN("Japan", 377915), JPN("Japan", 377915, listOf(JPN_HO, JPN_AO, JPN_IW, JPN_MI, JPN_AK, JPN_YA, JPN_FU, JPN_IB, JPN_TO, JPN_GU, JPN_SA, JPN_CH, JPN_TY, JPN_KA, JPN_NI, JPN_TOY, JPN_ISH, JPN_FK, JPN_YAM, JPN_NG, JPN_GI, JPN_SHI, JPN_AI, JPN_ME, JPN_SG, JPN_KY, JPN_OS, JPN_HY, JPN_NA, JPN_WK, JPN_TO, JPN_SM, JPN_OK, JPN_HR, JPN_YG, JPN_TS, JPN_KG, JPN_EH, JPN_KC, JPN_FK, JPN_SG, JPN_NG, JPN_KM, JPN_OT, JPN_MY, JPN_KG, JPN_OK)),
JEY("Jersey", 118), JEY("Jersey", 118, emptyList()),
JOR("Jordan", 89342), JOR("Jordan", 89342, emptyList()),
KAZ("Kazakhstan", 2724900), KAZ("Kazakhstan", 2724900, emptyList()),
KEN("Kenya", 580367), KEN("Kenya", 580367, emptyList()),
KIR("Kiribati", 811), KIR("Kiribati", 811, emptyList()),
PRK("Korea (Democratic People's Republic of)", 120538), PRK("Korea (Democratic People's Republic of)", 120538, emptyList()),
KOR("Korea, Republic of", 100210), KOR("Korea, Republic of", 100210, emptyList()),
XKO("Kosovo", 10887), XKO("Kosovo", 10887, emptyList()),
KWT("Kuwait", 17818), KWT("Kuwait", 17818, emptyList()),
KGZ("Kyrgyzstan", 199900), KGZ("Kyrgyzstan", 199900, emptyList()),
LAO("Lao People's Democratic Republic", 236800), LAO("Lao People's Democratic Republic", 236800, emptyList()),
LVA("Latvia", 64559), LVA("Latvia", 64559, emptyList()),
LBN("Lebanon", 10452), LBN("Lebanon", 10452, emptyList()),
LSO("Lesotho", 30355), LSO("Lesotho", 30355, emptyList()),
LBR("Liberia", 111369), LBR("Liberia", 111369, emptyList()),
LBY("Libya", 1759540), LBY("Libya", 1759540, emptyList()),
LIE("Liechtenstein", 160), LIE("Liechtenstein", 160, emptyList()),
LTU("Lithuania", 65300), LTU("Lithuania", 65300, emptyList()),
LUX("Luxembourg", 2586), LUX("Luxembourg", 2586, emptyList()),
MAC("Macao", 32), MAC("Macao", 32, emptyList()),
MDG("Madagascar", 587041), MDG("Madagascar", 587041, emptyList()),
MWI("Malawi", 118484), MWI("Malawi", 118484, emptyList()),
MYS("Malaysia", 330803), MYS("Malaysia", 330803, emptyList()),
MDV("Maldives", 300), MDV("Maldives", 300, emptyList()),
MLI("Mali", 1240192), MLI("Mali", 1240192, emptyList()),
MLT("Malta", 316), MLT("Malta", 316, emptyList()),
MHL("Marshall Islands", 181), MHL("Marshall Islands", 181, emptyList()),
MTQ("Martinique", 1128), MTQ("Martinique", 1128, emptyList()),
MRT("Mauritania", 1030700), MRT("Mauritania", 1030700, emptyList()),
MUS("Mauritius", 2040), MUS("Mauritius", 2040, emptyList()),
MYT("Mayotte", 374), MYT("Mayotte", 374, emptyList()),
MEX("Mexico", 1964375), MEX("Mexico", 1964375, emptyList()),
FSM("Micronesia (Federated States of)", 702), FSM("Micronesia (Federated States of)", 702, emptyList()),
MDA("Moldova, Republic of", 33846), MDA("Moldova, Republic of", 33846, emptyList()),
MCO("Monaco", 2), MCO("Monaco", 2, emptyList()),
MNG("Mongolia", 1564116), MNG("Mongolia", 1564116, emptyList()),
MNE("Montenegro", 13812), MNE("Montenegro", 13812, emptyList()),
MSR("Montserrat", 102), MSR("Montserrat", 102, emptyList()),
MAR("Morocco", 446550), MAR("Morocco", 446550, emptyList()),
MOZ("Mozambique", 799380), MOZ("Mozambique", 799380, emptyList()),
MMR("Myanmar", 676578), MMR("Myanmar", 676578, emptyList()),
NAM("Namibia", 824292), NAM("Namibia", 824292, emptyList()),
NRU("Nauru", 21), NRU("Nauru", 21, emptyList()),
NPL("Nepal", 147181), NPL("Nepal", 147181, emptyList()),
NLD("Netherlands", 41526), NLD("Netherlands", 41526, emptyList()),
NCL("New Caledonia", 18575), NCL("New Caledonia", 18575, emptyList()),
NZL("New Zealand", 270467), NZL("New Zealand", 270467, emptyList()),
NIC("Nicaragua", 130373), NIC("Nicaragua", 130373, emptyList()),
NER("Niger", 1267000), NER("Niger", 1267000, emptyList()),
NGA("Nigeria", 923768), NGA("Nigeria", 923768, emptyList()),
NIU("Niue", 261), NIU("Niue", 261, emptyList()),
NFK("Norfolk Island", 35), NFK("Norfolk Island", 35, emptyList()),
MNP("Northern Mariana Islands", 457), MNP("Northern Mariana Islands", 457, emptyList()),
NOR("Norway", 385207), NOR("Norway", 385207, emptyList()),
OMN("Oman", 309500), OMN("Oman", 309500, emptyList()),
PAK("Pakistan", 881913), PAK("Pakistan", 881913, emptyList()),
PLW("Palau", 459), PLW("Palau", 459, emptyList()),
PSE("Palestine, State of", 6220), PSE("Palestine, State of", 6220, emptyList()),
PAN("Panama", 75417), PAN("Panama", 75417, emptyList()),
PNG("Papua New Guinea", 462840), PNG("Papua New Guinea", 462840, emptyList()),
PRY("Paraguay", 406752), PRY("Paraguay", 406752, emptyList()),
PER("Peru", 1285216), PER("Peru", 1285216, emptyList()),
PHL("Philippines", 300000), PHL("Philippines", 300000, emptyList()),
PCN("Pitcairn", 47), PCN("Pitcairn", 47, emptyList()),
POL("Poland", 312696), POL("Poland", 312696, emptyList()),
PRT("Portugal", 92090), PRT("Portugal", 92090, emptyList()),
PRI("Puerto Rico", 9104), PRI("Puerto Rico", 9104, emptyList()),
QAT("Qatar", 11586), QAT("Qatar", 11586, emptyList()),
MKD("Republic of North Macedonia", 25713), MKD("Republic of North Macedonia", 25713, emptyList()),
ROU("Romania", 238391), ROU("Romania", 238391, emptyList()),
RUS("Russian Federation", 17125242), RUS("Russian Federation", 17125242, emptyList()),
RWA("Rwanda", 26338), RWA("Rwanda", 26338, emptyList()),
REU("Réunion", 2511), REU("Réunion", 2511, emptyList()),
BLM("Saint Barthélemy", 21), BLM("Saint Barthélemy", 21, emptyList()),
SHN("Saint Helena, Ascension and Tristan da Cunha", 394), SHN("Saint Helena, Ascension and Tristan da Cunha", 394, emptyList()),
KNA("Saint Kitts and Nevis", 270), KNA("Saint Kitts and Nevis", 270, emptyList()),
LCA("Saint Lucia", 617), LCA("Saint Lucia", 617, emptyList()),
MAF("Saint Martin (French part)", 53), MAF("Saint Martin (French part)", 53, emptyList()),
SPM("Saint Pierre and Miquelon", 242), SPM("Saint Pierre and Miquelon", 242, emptyList()),
VCT("Saint Vincent and the Grenadines", 389), VCT("Saint Vincent and the Grenadines", 389, emptyList()),
WSM("Samoa", 2831), WSM("Samoa", 2831, emptyList()),
SMR("San Marino", 61), SMR("San Marino", 61, emptyList()),
STP("Sao Tome and Principe", 1001), STP("Sao Tome and Principe", 1001, emptyList()),
SAU("Saudi Arabia", 2149690), SAU("Saudi Arabia", 2149690, emptyList()),
SEN("Senegal", 196722), SEN("Senegal", 196722, emptyList()),
SRB("Serbia", 88361), SRB("Serbia", 88361, emptyList()),
SYC("Seychelles", 459), SYC("Seychelles", 459, emptyList()),
SLE("Sierra Leone", 71740), SLE("Sierra Leone", 71740, emptyList()),
SGP("Singapore", 725), SGP("Singapore", 725, emptyList()),
SXM("Sint Maarten (Dutch part)", 34), SXM("Sint Maarten (Dutch part)", 34, emptyList()),
SVK("Slovakia", 49036), SVK("Slovakia", 49036, emptyList()),
SVN("Slovenia", 20273), SVN("Slovenia", 20273, emptyList()),
SLB("Solomon Islands", 28896), SLB("Solomon Islands", 28896, emptyList()),
SOM("Somalia", 637657), SOM("Somalia", 637657, emptyList()),
ZAF("South Africa", 1221037), ZAF("South Africa", 1221037, emptyList()),
SGS("South Georgia and the South Sandwich Islands", 3903), SGS("South Georgia and the South Sandwich Islands", 3903, emptyList()),
SSD("South Sudan", 619745), SSD("South Sudan", 619745, emptyList()),
ESP("Spain", 505990), ESP("Spain", 505990, emptyList()),
LKA("Sri Lanka", 65610), LKA("Sri Lanka", 65610, emptyList()),
SDN("Sudan", 1839542), SDN("Sudan", 1839542, emptyList()),
SUR("Suriname", 163820), SUR("Suriname", 163820, emptyList()),
SJM("Svalbard and Jan Mayen", 61399), SJM("Svalbard and Jan Mayen", 61399, emptyList()),
SWE("Sweden", 450295), SWE("Sweden", 450295, emptyList()),
CHE("Switzerland", 41284), CHE("Switzerland", 41284, listOf(CHE_AG, CHE_AR, CHE_AI, CHE_BL, CHE_BS, CHE_BE, CHE_FR, CHE_GE, CHE_GL, CHE_GR, CHE_JU, CHE_LU, CHE_NE, CHE_NW, CHE_OW, CHE_SH, CHE_SZ, CHE_SO, CHE_SG, CHE_TG, CHE_TI, CHE_UR, CHE_VS, CHE_VD, CHE_ZG, CHE_ZH)),
SYR("Syrian Arab Republic", 185180), SYR("Syrian Arab Republic", 185180, emptyList()),
TWN("Taiwan, Province of China", 36193), TWN("Taiwan, Province of China", 36193, emptyList()),
TJK("Tajikistan", 143100), TJK("Tajikistan", 143100, emptyList()),
TZA("Tanzania, United Republic of", 947300), TZA("Tanzania, United Republic of", 947300, emptyList()),
THA("Thailand", 513120), THA("Thailand", 513120, emptyList()),
TLS("Timor-Leste", 14919), TLS("Timor-Leste", 14919, emptyList()),
TGO("Togo", 56785), TGO("Togo", 56785, emptyList()),
TKL("Tokelau", 12), TKL("Tokelau", 12, emptyList()),
TON("Tonga", 747), TON("Tonga", 747, emptyList()),
TTO("Trinidad and Tobago", 5128), TTO("Trinidad and Tobago", 5128, emptyList()),
TUN("Tunisia", 163610), TUN("Tunisia", 163610, emptyList()),
TUR("Turkey", 783562), TUR("Turkey", 783562, emptyList()),
TKM("Turkmenistan", 488100), TKM("Turkmenistan", 488100, emptyList()),
TCA("Turks and Caicos Islands", 948), TCA("Turks and Caicos Islands", 948, emptyList()),
TUV("Tuvalu", 26), TUV("Tuvalu", 26, emptyList()),
UGA("Uganda", 241551), UGA("Uganda", 241551, emptyList()),
UKR("Ukraine", 603700), UKR("Ukraine", 603700, emptyList()),
ARE("United Arab Emirates", 83600), ARE("United Arab Emirates", 83600, emptyList()),
GBR("United Kingdom of Great Britain and Northern Ireland", 242910), GBR("United Kingdom of Great Britain and Northern Ireland", 242910, emptyList()),
USA("United States of America", 9833517), USA("United States of America", 9833517, emptyList()),
UMI("United States Minor Outlying Islands", 34), UMI("United States Minor Outlying Islands", 34, emptyList()),
URY("Uruguay", 176215), URY("Uruguay", 176215, emptyList()),
UZB("Uzbekistan", 447400), UZB("Uzbekistan", 447400, emptyList()),
VUT("Vanuatu", 12189), VUT("Vanuatu", 12189, emptyList()),
VEN("Venezuela (Bolivarian Republic of)", 912050), VEN("Venezuela (Bolivarian Republic of)", 912050, emptyList()),
VNM("Viet Nam", 331212), VNM("Viet Nam", 331212, emptyList()),
VGB("Virgin Islands (British", 153), VGB("Virgin Islands (British", 153, emptyList()),
VIR("Virgin Islands (U.S.)", 347), VIR("Virgin Islands (U.S.)", 347, emptyList()),
WLF("Wallis and Futuna", 142), WLF("Wallis and Futuna", 142, emptyList()),
ESH("Western Sahara", 266000), ESH("Western Sahara", 266000, emptyList()),
YEM("Yemen", 527968), YEM("Yemen", 527968, emptyList()),
ZMB("Zambia", 752612), ZMB("Zambia", 752612, emptyList()),
ZWE("Zimbabwe", 390757), ZWE("Zimbabwe", 390757, emptyList()),
DOM("Dominican Republic", 48671), DOM("Dominican Republic", 48671, emptyList()),
ANT("Netherlands Antilles", 800), ANT("Netherlands Antilles", 800, emptyList()),
XAD("Akrotiri and Dhekelia", 254), XAD("Akrotiri and Dhekelia", 254, emptyList()),
XCL("Clipperton Island", 6), XCL("Clipperton Island", 6, emptyList()),
ZNC("Nothern Cyprus", 3355), ZNC("Nothern Cyprus", 3355, emptyList()),
; ;
override val code = this.name override val code = this.name
override val type = LocType.COUNTRY override val type = LocType.COUNTRY
override val children = emptyList<GeoLoc>()
} }

View File

@ -20,6 +20,7 @@ enum class Group(override val fullName: String, override val children: List<Coun
GNQ, ERI, SWZ, ETH, GAB, GMB, GHA, GIN, GNB, KEN, LSO, LBR, LBY, MDG, MWI, MLI, MRT, GNQ, ERI, SWZ, ETH, GAB, GMB, GHA, GIN, GNB, KEN, LSO, LBR, LBY, MDG, MWI, MLI, MRT,
MUS, MYT, MAR, MOZ, NAM, NER, NGA, COD, REU, RWA, STP, SEN, SYC, SLE, SOM, ZAF, SSD, MUS, MYT, MAR, MOZ, NAM, NER, NGA, COD, REU, RWA, STP, SEN, SYC, SLE, SOM, ZAF, SSD,
SHN, SDN, TZA, TGO, TUN, UGA, COD, ZMB, ZWE, SHN, SDN, TZA, TGO, TUN, UGA, COD, ZMB, ZWE,
ESH,
)), )),
NNN("North America", listOf( NNN("North America", listOf(
ABW, AIA, ATG, BHS, BRB, BLZ, BMU, VGB, CAN, CYM, CRI, CUB, CUW, DMA, ABW, AIA, ATG, BHS, BRB, BLZ, BMU, VGB, CAN, CYM, CRI, CUB, CUW, DMA,
@ -56,7 +57,6 @@ enum class Group(override val fullName: String, override val children: List<Coun
SJM, // Svalbard and Jan Mayen: an archipelago administered by Norway SJM, // Svalbard and Jan Mayen: an archipelago administered by Norway
UMI, // United States Minor Outlying Islands: a collection of nine insular areas of the United States UMI, // United States Minor Outlying Islands: a collection of nine insular areas of the United States
VIR, // United States Virgin Islands: an unincorporated territory of the United States in the Caribbean VIR, // United States Virgin Islands: an unincorporated territory of the United States in the Caribbean
ESH // Western Sahara: a disputed territory claimed by both Morocco and the Sahrawi Arab Democratic Republic
)), )),
ZZZ("Undefined", listOf( ZZZ("Undefined", listOf(

View File

@ -1,7 +1,138 @@
package net.helcel.beendroid.countries package net.helcel.beendroid.countries
enum class State(override val fullName: String, override val area: Int,) : GeoLoc { enum class State(override val fullName: String, override val area: Int,) : GeoLoc {
UNDEFINED("",0);
AFG_BD("Badakhshan", 44851),
AFG_BDG("Badghis", 22447),
AFG_BGL("Baghlan", 21397),
AFG_BAL("Balkh", 17430),
AFG_BAM("Bamyan", 14056),
AFG_DAY("Daykundi", 18279),
AFG_FRA("Farah", 48402),
AFG_FYB("Faryab", 20517),
AFG_GHA("Ghazni", 22440),
AFG_GHO("Ghor", 36294),
AFG_HEL("Helmand", 58971),
AFG_HER("Herat", 54588),
AFG_JOW("Jowzjan", 12172),
AFG_KAB("Kabul", 4900),
AFG_KAN("Kandahar", 54610),
AFG_KAP("Kapisa", 1829),
AFG_KHO("Khost", 3869),
AFG_KNR("Kunar", 9423),
AFG_KDZ("Kunduz", 8019),
AFG_LAG("Laghman", 3844),
AFG_LOG("Logar", 3522),
AFG_NAN("Nangarhar", 7387),
AFG_NIM("Nimroz", 41600),
AFG_NUR("Nuristan", 9288),
AFG_PAN("Paktia", 6635),
AFG_PAR("Paktika", 19308),
AFG_PIA("Panjshir", 325),
AFG_PRI("Parwan", 5964),
AFG_SAM("Samangan", 11497),
AFG_SAR("Sar-e Pol", 16392),
AFG_SHA("Shamali Plain", 1272),
AFG_SOL("Sar-e Pol", 25481),
AFG_URO("Urozgan", 12238),
AFG_WAR("Wardak", 8894),
AFG_ZAB("Zabul", 17296),
DEU_BW("Baden-Württemberg", 35752),
DEU_BY("Bavaria", 70552),
DEU_BE("Berlin", 891),
DEU_BB("Brandenburg", 29654),
DEU_HB("Bremen", 419),
DEU_HH("Hamburg", 755),
DEU_HE("Hesse", 21115),
DEU_MV("Mecklenburg-Vorpommern", 23215),
DEU_NI("Lower Saxony", 47709),
DEU_NW("North Rhine-Westphalia", 34085),
DEU_RP("Rhineland-Palatinate", 19854),
DEU_SL("Saarland", 2569),
DEU_SN("Saxony", 18417),
DEU_ST("Saxony-Anhalt", 20452),
DEU_SH("Schleswig-Holstein", 15799),
DEU_TH("Thuringia", 16202),
CHE_AG("Aargau", 1404),
CHE_AR("Appenzell Ausserrhoden", 243),
CHE_AI("Appenzell Innerrhoden", 173),
CHE_BL("Basel-Landschaft", 518),
CHE_BS("Basel-Stadt", 37),
CHE_BE("Bern", 5959),
CHE_FR("Fribourg", 1671),
CHE_GE("Geneva", 282),
CHE_GL("Glarus", 685),
CHE_GR("Graubünden", 7105),
CHE_JU("Jura", 838),
CHE_LU("Lucerne", 1493),
CHE_NE("Neuchâtel", 803),
CHE_NW("Nidwalden", 276),
CHE_OW("Obwalden", 491),
CHE_SH("Schaffhausen", 298),
CHE_SZ("Schwyz", 908),
CHE_SO("Solothurn", 791),
CHE_SG("St. Gallen", 2026),
CHE_TG("Thurgau", 991),
CHE_TI("Ticino", 2812),
CHE_UR("Uri", 1077),
CHE_VS("Valais", 5224),
CHE_VD("Vaud", 3212),
CHE_ZG("Zug", 239),
CHE_ZH("Zurich", 1729),
JPN_HO("Hokkaido", 83424),
JPN_AO("Aomori", 12891),
JPN_IW("Iwate", 15275),
JPN_MI("Miyagi", 7286),
JPN_AK("Akita", 11637),
JPN_YA("Yamagata", 9323),
JPN_FU("Fukushima", 13784),
JPN_IB("Ibaraki", 6095),
JPN_TOC("Tochigi", 6408),
JPN_GU("Gunma", 6362),
JPN_SA("Saitama", 3798),
JPN_CH("Chiba", 5156),
JPN_TY("Tokyo", 2187),
JPN_KA("Kanagawa", 2416),
JPN_NI("Niigata", 12584),
JPN_TOY("Toyama", 4247),
JPN_ISH("Ishikawa", 4186),
JPN_FK("Fukui", 4181),
JPN_YAM("Yamanashi", 4465),
JPN_NG("Nagano", 13562),
JPN_GI("Gifu", 10621),
JPN_SHI("Shizuoka", 7786),
JPN_AI("Aichi", 5172),
JPN_ME("Mie", 5774),
JPN_SHG("Shiga", 4017),
JPN_KY("Kyoto", 4612),
JPN_OS("Osaka", 19014),
JPN_HY("Hyogo", 8395),
JPN_NA("Nara", 3691),
JPN_WK("Wakayama", 4726),
JPN_TO("Tottori", 3507),
JPN_SM("Shimane", 6708),
JPN_OKY("Okayama", 7114),
JPN_HR("Hiroshima", 8479),
JPN_YG("Yamaguchi", 6112),
JPN_TS("Tokushima", 4147),
JPN_KG("Kagawa", 1862),
JPN_EH("Ehime", 5676),
JPN_KC("Kochi", 7105),
JPN_FKK("Fukuoka", 4986),
JPN_SG("Saga", 2433),
JPN_NGS("Nagasaki", 4132),
JPN_KM("Kumamoto", 7409),
JPN_OT("Oita", 6341),
JPN_MY("Miyazaki", 7775),
JPN_KGS("Kagoshima", 9186),
JPN_OK("Okinawa", 2281),
UNDEFINED("?",0),
;
override val code = this.name override val code = this.name
override val children = emptyList<GeoLoc>() override val children = emptyList<GeoLoc>()

View File

@ -1,6 +1,9 @@
package net.helcel.beendroid.countries package net.helcel.beendroid.countries
import android.content.Context import android.content.Context
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class Visited(ctx: Context) { class Visited(ctx: Context) {
@ -24,8 +27,10 @@ class Visited(ctx: Context) {
fun setVisited(key: GeoLoc, b: Boolean){ fun setVisited(key: GeoLoc, b: Boolean){
locs[key] = b locs[key] = b
editor.putBoolean(key.code, b) CoroutineScope(Dispatchers.Main).launch {
editor.apply() editor.putBoolean(key.code, b)
editor.apply()
}
} }
fun visited(key: GeoLoc): Boolean { fun visited(key: GeoLoc): Boolean {

View File

@ -0,0 +1,13 @@
package net.helcel.beendroid.helper
import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.util.TypedValue
fun colorPrimary(ctx : Context): ColorDrawable {
val colorPrimaryTyped = TypedValue()
ctx.theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true)
return ColorDrawable(colorPrimaryTyped.data)
}

View File

@ -34,7 +34,7 @@ class PSVGWrapper(ctx: Context) {
cm[el]?.changeLevel(level) cm[el]?.changeLevel(level)
} }
fun build(){ private fun build(){
fm = World.WWW.children.map { gr -> fm = World.WWW.children.map { gr ->
gr.children.map {c -> gr.children.map {c ->
val cc = cm[c] val cc = cm[c]

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:theme="@style/Theme.Beendroid"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
android:scrollbars="vertical" />
</androidx.core.widget.NestedScrollView>
</LinearLayout>

View File

@ -6,27 +6,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.caverock.androidsvg.SVGImageView
android:id="@+id/map" <com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photo_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"/>
android:layout_weight="0"
app:css="" />
<androidx.core.widget.NestedScrollView
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:nestedScrollingEnabled="false"
android:scrollbars="vertical" />
</androidx.core.widget.NestedScrollView>
</LinearLayout> </LinearLayout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:orientation="vertical"
android:theme="@style/Theme.Beendroid" android:theme="@style/Theme.Beendroid"

View File

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".activity.AboutFragment" > tools:context=".activity.fragment.AboutFragment" >
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".activity.LicenseFragment" > tools:context=".activity.fragment.LicenseFragment" >
<fragment <fragment
android:id="@+id/license_fragment_view" android:id="@+id/license_fragment_view"

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -12,39 +13,35 @@
android:id="@+id/textView" android:id="@+id/textView"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="50dp" android:layout_height="50dp"
app:cornerRadius="0dp"
android:gravity="start|center_vertical"
android:textColor="?attr/colorOnBackground"
android:textAllCaps="false"
android:textAppearance="?attr/textAppearanceBody2"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:paddingStart="20dp" android:gravity="start|center_vertical"
android:paddingEnd="20dp"
android:insetTop="4dp" android:insetTop="4dp"
android:insetBottom="4dp" android:insetBottom="4dp"
app:layout_constraintBottom_toBottomOf="@id/text2checkbox" android:paddingStart="20dp"
app:layout_constraintEnd_toStartOf="@id/text2checkbox" android:paddingEnd="20dp"
app:layout_constraintStart_toStartOf="parent" android:textAllCaps="false"
app:layout_constraintTop_toTopOf="parent" android:textAppearance="?attr/textAppearanceBody2"
app:layout_constraintVertical_bias="1.0" /> android:textColor="?attr/colorOnBackground"
app:cornerRadius="0dp"
<Space app:layout_constraintBottom_toBottomOf="@id/checkBox"
android:id="@+id/text2checkbox"
android:layout_width="0.01dp"
android:layout_height="50dp"
android:gravity="start|center_vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/textView"
app:layout_constraintEnd_toStartOf="@id/checkBox" app:layout_constraintEnd_toStartOf="@id/checkBox"
app:layout_constraintStart_toEndOf="@id/textView" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/progressView"
android:layout_width="wrap_content"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="@id/checkBox"
app:layout_constraintEnd_toStartOf="@id/checkBox"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.checkbox.MaterialCheckBox <com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/checkBox" android:id="@+id/checkBox"
android:layout_width="0.01dp" android:layout_width="50dp"
android:layout_height="50dp" android:layout_height="50dp"
app:checkedState="indeterminate" app:checkedState="indeterminate"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/textView" app:layout_constraintBottom_toBottomOf="@id/textView"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1" app:layout_constraintHorizontal_bias="1"
@ -56,7 +53,7 @@
android:id="@+id/sub_item" android:id="@+id/sub_item"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginStart="0dp" android:layout_marginStart="24dp"
android:orientation="vertical" android:orientation="vertical"
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"

View File

@ -7,7 +7,6 @@
android:id="@+id/action_edit" android:id="@+id/action_edit"
android:orderInCategory="100" android:orderInCategory="100"
android:icon="@drawable/edit" android:icon="@drawable/edit"
android:visible="false"
android:title="@string/action_edit" android:title="@string/action_edit"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
<item <item

View File

@ -1,9 +0,0 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Beendroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="colorPrimary">@color/teal_700</item>
<item name="android:colorPrimary">@color/teal_700</item>
<item name="android:panelColorBackground">@color/darkgray</item>
<item name="android:statusBarColor">?attr/colorPrimary</item>
<item name="colorAccent">?attr/colorPrimary</item>
</style>
</resources>

View File

@ -1,9 +1,16 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Beendroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <style name="Theme.Beendroid" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/teal_700</item> <item name="colorPrimary">@color/teal_700</item>
<item name="android:colorPrimary">@color/teal_700</item> <item name="android:colorPrimary">@color/teal_700</item>
<item name="android:panelColorBackground">@color/lightgray</item> <item name="android:panelColorBackground">@color/lightgray</item>
<item name="android:statusBarColor">?attr/colorPrimary</item> <item name="android:statusBarColor">?attr/colorPrimary</item>
<item name="colorAccent">?attr/colorPrimary</item> <item name="colorAccent">?attr/colorPrimary</item>
<item name="checkboxStyle">@style/Widget.App.CheckBox</item>
</style> </style>
<style name="Widget.App.CheckBox" parent="Widget.Material3.CompoundButton.CheckBox">
</style>
</resources> </resources>

View File

@ -16,14 +16,14 @@
<Preference <Preference
app:enabled="true" app:enabled="true"
app:key="@string/licenses" app:key="@string/licenses"
app:icon="@drawable/checklist" app:icon="@drawable/licenses"
app:title="@string/licenses" app:title="@string/licenses"
android:summary="@string/foss_licenses"/> android:summary="@string/foss_licenses"/>
<Preference <Preference
app:enabled="true" app:enabled="true"
app:key="@string/about" app:key="@string/about"
app:icon="@drawable/info" app:icon="@drawable/about"
app:title="@string/about" app:title="@string/about"
android:summary="@string/about_beendroid"/> android:summary="@string/about_beendroid"/>

View File

@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app's APK # Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn # https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the