diff --git a/app/build.gradle b/app/build.gradle index 5988d60..216ffc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,13 +44,14 @@ dependencies { implementation 'androidx.navigation:navigation-fragment-ktx:2.7.6' implementation 'androidx.navigation:navigation-ui-ktx:2.7.6' 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' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 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' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6296b5..41249f9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,7 @@ tools:targetApi="31" tools:replace="android:allowBackup" > + @@ -22,6 +23,13 @@ + + + + + diff --git a/app/src/main/java/net/helcel/beendroid/activity/EditActivity.kt b/app/src/main/java/net/helcel/beendroid/activity/EditActivity.kt new file mode 100644 index 0000000..3c7c9dd --- /dev/null +++ b/app/src/main/java/net/helcel/beendroid/activity/EditActivity.kt @@ -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) { } + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/helcel/beendroid/activity/FoldingListAdapter.kt b/app/src/main/java/net/helcel/beendroid/activity/FoldingListAdapter.kt index 379bbb2..6d9ebae 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/FoldingListAdapter.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/FoldingListAdapter.kt @@ -14,7 +14,6 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.checkbox.MaterialCheckBox import net.helcel.beendroid.R import net.helcel.beendroid.countries.GeoLoc -import net.helcel.beendroid.countries.LocType import net.helcel.beendroid.countries.Visited import java.util.* @@ -61,6 +60,7 @@ class FoldingListAdapter( private val visited: Visited, ) : RecyclerView.ViewHolder(itemView) { 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 subItemView: View = itemView.findViewById(R.id.sub_item) 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 textView.text = el.first.fullName - if (el.first.type == LocType.GROUP) { - 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 { + if (el.first.children.isEmpty()) { 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.background = ColorDrawable(colorBackgroundTyped.data) 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 - layoutParam.width = 125 - checkBox.layoutParams = layoutParam - checkBox.visibility = View.VISIBLE + 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) } checkBox.checkedState = if (visited.visited(el.first)) MaterialCheckBox.STATE_CHECKED diff --git a/app/src/main/java/net/helcel/beendroid/activity/MainActivity.kt b/app/src/main/java/net/helcel/beendroid/activity/MainActivity.kt index 5bb5699..d7e8978 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/MainActivity.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/MainActivity.kt @@ -1,53 +1,50 @@ package net.helcel.beendroid.activity -import kotlinx.coroutines.* import android.content.Intent import android.content.SharedPreferences -import android.graphics.Bitmap -import android.graphics.Canvas import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.PictureDrawable import android.os.Bundle -import android.util.TypedValue import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MenuProvider import androidx.preference.PreferenceManager -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView 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.activity.fragment.SettingsFragment import net.helcel.beendroid.countries.Visited -import net.helcel.beendroid.countries.World + import net.helcel.beendroid.svg.CSSWrapper import net.helcel.beendroid.svg.PSVGWrapper +import net.helcel.beendroid.helper.* class MainActivity : AppCompatActivity() { private lateinit var sharedPreferences: SharedPreferences - private lateinit var map : SVGImageView - private lateinit var list : RecyclerView + private lateinit var photoView : PhotoView private lateinit var visited : Visited private lateinit var psvg : PSVGWrapper private lateinit var css : CSSWrapper - private var processor: ImageProcessor = ImageProcessor({ refreshMapCompute() },{ refreshMapDisplay(it) }) - - private val bitmap: Bitmap = Bitmap.createBitmap(1200,900, Bitmap.Config.ARGB_8888) - private val canvas = Canvas(bitmap) + override fun onActivityReenter(resultCode: Int, data: Intent?) { + super.onActivityReenter(resultCode, data) + refreshMap() + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Create action bar - val colorPrimaryTyped = TypedValue() - theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true) - supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data)) + supportActionBar?.setBackgroundDrawable(colorPrimary(this)) // Fetch shared preferences to restore app theme upon startup sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) @@ -62,7 +59,7 @@ class MainActivity : AppCompatActivity() { override fun onMenuItemSelected(menuItem: MenuItem): Boolean { return when (menuItem.itemId) { R.id.action_edit -> { - // TODO: Enable editing selected countries + startActivity(Intent(this@MainActivity, EditActivity::class.java)) true } R.id.action_stats -> { @@ -92,47 +89,21 @@ class MainActivity : AppCompatActivity() { // Populate map from list of countries setContentView(R.layout.activity_main) - map = findViewById(R.id.map) - map.setImageBitmap(bitmap) - refreshMapDisplay(refreshMapCompute()) - // Populate list below the map - list = findViewById(R.id.list) - list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false) - list.adapter = FoldingListAdapter(this, World.WWW.children, visited) { processor.process() } + photoView = findViewById(R.id.photo_view) + photoView.minimumScale = 1f + photoView.maximumScale = 30f + + refreshMap() } - private fun refreshMapDisplay(css_value: String){ - // Set or reset background (replaces canvas.drawColor(0, 0, 0)) - val colorBackgroundTyped = TypedValue() - theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true) - 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) { - } - } + private fun refreshMap() { + val opt : RenderOptions = RenderOptions.create() + CoroutineScope(Dispatchers.IO).launch { + opt.css(css.get()) } + photoView.setImageLevel(1) + photoView.setImageDrawable(PictureDrawable(psvg.getFill().renderToPicture(opt))) } } \ No newline at end of file diff --git a/app/src/main/java/net/helcel/beendroid/activity/SettingsActivity.kt b/app/src/main/java/net/helcel/beendroid/activity/SettingsActivity.kt index e06fba4..4cd9ef4 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/SettingsActivity.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/SettingsActivity.kt @@ -1,11 +1,13 @@ package net.helcel.beendroid.activity -import android.graphics.drawable.ColorDrawable import android.os.Bundle -import android.util.TypedValue import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity 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() { @@ -16,9 +18,7 @@ class SettingsActivity: AppCompatActivity() { setContentView(R.layout.activity_settings) // Create action bar - val colorPrimaryTyped = TypedValue() - theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true) - supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data)) + supportActionBar?.setBackgroundDrawable(colorPrimary(this)) supportActionBar?.title = getString(R.string.action_settings) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/app/src/main/java/net/helcel/beendroid/activity/AboutFragment.kt b/app/src/main/java/net/helcel/beendroid/activity/fragment/AboutFragment.kt similarity index 94% rename from app/src/main/java/net/helcel/beendroid/activity/AboutFragment.kt rename to app/src/main/java/net/helcel/beendroid/activity/fragment/AboutFragment.kt index 0001d9c..00ca0c0 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/AboutFragment.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/fragment/AboutFragment.kt @@ -1,4 +1,4 @@ -package net.helcel.beendroid.activity +package net.helcel.beendroid.activity.fragment import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/net/helcel/beendroid/activity/LicenseFragment.kt b/app/src/main/java/net/helcel/beendroid/activity/fragment/LicenseFragment.kt similarity index 96% rename from app/src/main/java/net/helcel/beendroid/activity/LicenseFragment.kt rename to app/src/main/java/net/helcel/beendroid/activity/fragment/LicenseFragment.kt index ee964e9..6043924 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/LicenseFragment.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/fragment/LicenseFragment.kt @@ -1,4 +1,4 @@ -package net.helcel.beendroid.activity +package net.helcel.beendroid.activity.fragment import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/net/helcel/beendroid/activity/SettingsFragment.kt b/app/src/main/java/net/helcel/beendroid/activity/fragment/SettingsFragment.kt similarity index 98% rename from app/src/main/java/net/helcel/beendroid/activity/SettingsFragment.kt rename to app/src/main/java/net/helcel/beendroid/activity/fragment/SettingsFragment.kt index 6378e15..4f7685f 100644 --- a/app/src/main/java/net/helcel/beendroid/activity/SettingsFragment.kt +++ b/app/src/main/java/net/helcel/beendroid/activity/fragment/SettingsFragment.kt @@ -1,4 +1,4 @@ -package net.helcel.beendroid.activity +package net.helcel.beendroid.activity.fragment import android.content.Context import android.os.Bundle diff --git a/app/src/main/java/net/helcel/beendroid/countries/Country.kt b/app/src/main/java/net/helcel/beendroid/countries/Country.kt index a6a4cdc..777278a 100644 --- a/app/src/main/java/net/helcel/beendroid/countries/Country.kt +++ b/app/src/main/java/net/helcel/beendroid/countries/Country.kt @@ -1,265 +1,267 @@ 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 { - AFG("Afghanistan", 652864), - ALA("Åland Islands", 1580), - ALB("Albania", 28748), - DZA("Algeria", 2381741), - ASM("American Samoa", 199000), - AND("Andorra", 468765), - AGO("Angola", 1246700), - AIA("Anguilla", 96), - ATA("Antarctica", 14000000), - ATG("Antigua and Barbuda", 442), - ARG("Argentina", 2780400), - ARM("Armenia", 29743), - ABW("Aruba", 180), - AUS("Australia", 7692024), - AUT("Austria", 83879), - AZE("Azerbaijan", 86600), - BHS("Bahamas", 13878), - BHR("Bahrain", 778), - BGD("Bangladesh", 143998), - BRB("Barbados", 430), - BLR("Belarus", 207595), - BEL("Belgium", 30528), - BLZ("Belize", 22965), - BEN("Benin", 114763), - BMU("Bermuda", 54), - BTN("Bhutan", 38394), - BOL("Bolivia (Plurinational State of)", 1098581), - BES("Bonaire, Sint Eustatius and Saba", 294), - BIH("Bosnia and Herzegovina", 51209), - BWA("Botswana", 581730), - BVT("Bouvet Island", 49), - BRA("Brazil", 8515767), - IOT("British Indian Ocean Territory", 60), - BRN("Brunei Darussalam", 5765), - BGR("Bulgaria", 110994), - BFA("Burkina Faso", 274200), - BDI("Burundi", 27834), - CPV("Cabo Verde", 4033), - KHM("Cambodia", 181035), - CMR("Cameroon", 475442), - CAN("Canada", 9984670), - CYM("Cayman Islands", 264), - CAF("Central African Republic", 622436), - TCD("Chad", 1284000), - CHL("Chile", 756102), - CHN("China", 9596961), - CXR("Christmas Island", 135), - CCK("Cocos (Keeling) Islands", 14), - COL("Colombia", 1141748), - COM("Comoros", 2235), - COG("Congo", 342000), - COD("Congo, Democratic Republic of the", 2344858), - COK("Cook Islands", 237), - CRI("Costa Rica", 51100), - CIV("Côte d'Ivoire", 322463), - HRV("Croatia", 56594), - CUB("Cuba", 109884), - CUW("Curaçao", 444), - CYP("Cyprus", 9251), - CZE("Czech Republic", 78865), - DNK("Denmark", 42933), - DJI("Djibouti", 23200), - DMA("Dominica", 750), - ECU("Ecuador", 276841), - EGY("Egypt", 1002450), - SLV("El Salvador", 21041), - GNQ("Equatorial Guinea", 28051), - ERI("Eritrea", 117600), - EST("Estonia", 45227), - SWZ("Eswatini", 17364), - ETH("Ethiopia", 1104300), - FLK("Falkland Islands (Malvinas)", 12173), - FRO("Faroe Islands", 1399), - FJI("Fiji", 18333), - FIN("Finland", 338424), - FRA("France", 643801), - GUF("French Guiana", 83534), - PYF("French Polynesia", 4167), - ATF("French Southern Territories", 7747), - GAB("Gabon", 267667), - GMB("Gambia", 11295), - GEO("Georgia", 69700), - DEU("Germany", 357408), - GHA("Ghana", 238533), - GIB("Gibraltar", 6), - GRC("Greece", 131957), - GRL("Greenland", 2166086), - GRD("Grenada", 344), - GLP("Guadeloupe", 1628), - GUM("Guam", 541), - GTM("Guatemala", 108889), - GGY("Guernsey", 78), - GIN("Guinea", 245857), - GNB("Guinea-Bissau", 36125), - GUY("Guyana", 214969), - HTI("Haiti", 27750), - HMD("Heard Island and McDonald Islands", 412), - VAT("Holy See (Vatican)", 1), - HND("Honduras", 112492), - HKG("Hong Kong", 1104), - HUN("Hungary", 93028), - ISL("Iceland", 102775), - IND("India", 3287263), - IDN("Indonesia", 1904569), - IRN("Iran (Islamic Republic of)", 1648195), - IRQ("Iraq", 438317), - IRL("Ireland", 70273), - IMN("Isle of Man", 572), - ISR("Israel", 22072), - ITA("Italy", 301340), - JAM("Jamaica", 10991), - JPN("Japan", 377915), - JEY("Jersey", 118), - JOR("Jordan", 89342), - KAZ("Kazakhstan", 2724900), - KEN("Kenya", 580367), - KIR("Kiribati", 811), - PRK("Korea (Democratic People's Republic of)", 120538), - KOR("Korea, Republic of", 100210), - XKO("Kosovo", 10887), - KWT("Kuwait", 17818), - KGZ("Kyrgyzstan", 199900), - LAO("Lao People's Democratic Republic", 236800), - LVA("Latvia", 64559), - LBN("Lebanon", 10452), - LSO("Lesotho", 30355), - LBR("Liberia", 111369), - LBY("Libya", 1759540), - LIE("Liechtenstein", 160), - LTU("Lithuania", 65300), - LUX("Luxembourg", 2586), - MAC("Macao", 32), - MDG("Madagascar", 587041), - MWI("Malawi", 118484), - MYS("Malaysia", 330803), - MDV("Maldives", 300), - MLI("Mali", 1240192), - MLT("Malta", 316), - MHL("Marshall Islands", 181), - MTQ("Martinique", 1128), - MRT("Mauritania", 1030700), - MUS("Mauritius", 2040), - MYT("Mayotte", 374), - MEX("Mexico", 1964375), - FSM("Micronesia (Federated States of)", 702), - MDA("Moldova, Republic of", 33846), - MCO("Monaco", 2), - MNG("Mongolia", 1564116), - MNE("Montenegro", 13812), - MSR("Montserrat", 102), - MAR("Morocco", 446550), - MOZ("Mozambique", 799380), - MMR("Myanmar", 676578), - NAM("Namibia", 824292), - NRU("Nauru", 21), - NPL("Nepal", 147181), - NLD("Netherlands", 41526), - NCL("New Caledonia", 18575), - NZL("New Zealand", 270467), - NIC("Nicaragua", 130373), - NER("Niger", 1267000), - NGA("Nigeria", 923768), - NIU("Niue", 261), - NFK("Norfolk Island", 35), - MNP("Northern Mariana Islands", 457), - NOR("Norway", 385207), - OMN("Oman", 309500), - PAK("Pakistan", 881913), - PLW("Palau", 459), - PSE("Palestine, State of", 6220), - PAN("Panama", 75417), - PNG("Papua New Guinea", 462840), - PRY("Paraguay", 406752), - PER("Peru", 1285216), - PHL("Philippines", 300000), - PCN("Pitcairn", 47), - POL("Poland", 312696), - PRT("Portugal", 92090), - PRI("Puerto Rico", 9104), - QAT("Qatar", 11586), - MKD("Republic of North Macedonia", 25713), - ROU("Romania", 238391), - RUS("Russian Federation", 17125242), - RWA("Rwanda", 26338), - REU("Réunion", 2511), - BLM("Saint Barthélemy", 21), - SHN("Saint Helena, Ascension and Tristan da Cunha", 394), - KNA("Saint Kitts and Nevis", 270), - LCA("Saint Lucia", 617), - MAF("Saint Martin (French part)", 53), - SPM("Saint Pierre and Miquelon", 242), - VCT("Saint Vincent and the Grenadines", 389), - WSM("Samoa", 2831), - SMR("San Marino", 61), - STP("Sao Tome and Principe", 1001), - SAU("Saudi Arabia", 2149690), - SEN("Senegal", 196722), - SRB("Serbia", 88361), - SYC("Seychelles", 459), - SLE("Sierra Leone", 71740), - SGP("Singapore", 725), - SXM("Sint Maarten (Dutch part)", 34), - SVK("Slovakia", 49036), - SVN("Slovenia", 20273), - SLB("Solomon Islands", 28896), - SOM("Somalia", 637657), - ZAF("South Africa", 1221037), - SGS("South Georgia and the South Sandwich Islands", 3903), - SSD("South Sudan", 619745), - ESP("Spain", 505990), - LKA("Sri Lanka", 65610), - SDN("Sudan", 1839542), - SUR("Suriname", 163820), - SJM("Svalbard and Jan Mayen", 61399), - SWE("Sweden", 450295), - CHE("Switzerland", 41284), - SYR("Syrian Arab Republic", 185180), - TWN("Taiwan, Province of China", 36193), - TJK("Tajikistan", 143100), - TZA("Tanzania, United Republic of", 947300), - THA("Thailand", 513120), - TLS("Timor-Leste", 14919), - TGO("Togo", 56785), - TKL("Tokelau", 12), - TON("Tonga", 747), - TTO("Trinidad and Tobago", 5128), - TUN("Tunisia", 163610), - TUR("Turkey", 783562), - TKM("Turkmenistan", 488100), - TCA("Turks and Caicos Islands", 948), - TUV("Tuvalu", 26), - UGA("Uganda", 241551), - UKR("Ukraine", 603700), - ARE("United Arab Emirates", 83600), - GBR("United Kingdom of Great Britain and Northern Ireland", 242910), - USA("United States of America", 9833517), - UMI("United States Minor Outlying Islands", 34), - URY("Uruguay", 176215), - UZB("Uzbekistan", 447400), - VUT("Vanuatu", 12189), - VEN("Venezuela (Bolivarian Republic of)", 912050), - VNM("Viet Nam", 331212), - VGB("Virgin Islands (British", 153), - VIR("Virgin Islands (U.S.)", 347), - WLF("Wallis and Futuna", 142), - ESH("Western Sahara", 266000), - YEM("Yemen", 527968), - ZMB("Zambia", 752612), - ZWE("Zimbabwe", 390757), - DOM("Dominican Republic", 48671), - ANT("Netherlands Antilles", 800), - XAD("Akrotiri and Dhekelia", 254), - XCL("Clipperton Island", 6), - ZNC("Nothern Cyprus", 3355), +enum class Country(override val fullName: String, override val area : Int, override val children : List) : GeoLoc { + AFG("Afghanistan", 652864, emptyList()), + ALA("Åland Islands", 1580, emptyList()), + ALB("Albania", 28748, emptyList()), + DZA("Algeria", 2381741, emptyList()), + ASM("American Samoa", 199000, emptyList()), + AND("Andorra", 468765, emptyList()), + AGO("Angola", 1246700, emptyList()), + AIA("Anguilla", 96, emptyList()), + ATA("Antarctica", 14000000, emptyList()), + ATG("Antigua and Barbuda", 442, emptyList()), + ARG("Argentina", 2780400, emptyList()), + ARM("Armenia", 29743, emptyList()), + ABW("Aruba", 180, emptyList()), + AUS("Australia", 7692024, emptyList()), + AUT("Austria", 83879, emptyList()), + AZE("Azerbaijan", 86600, emptyList()), + BHS("Bahamas", 13878, emptyList()), + BHR("Bahrain", 778, emptyList()), + BGD("Bangladesh", 143998, emptyList()), + BRB("Barbados", 430, emptyList()), + BLR("Belarus", 207595, emptyList()), + BEL("Belgium", 30528, emptyList()), + BLZ("Belize", 22965, emptyList()), + BEN("Benin", 114763, emptyList()), + BMU("Bermuda", 54, emptyList()), + BTN("Bhutan", 38394, emptyList()), + BOL("Bolivia (Plurinational State of)", 1098581, emptyList()), + BES("Bonaire, Sint Eustatius and Saba", 294, emptyList()), + BIH("Bosnia and Herzegovina", 51209, emptyList()), + BWA("Botswana", 581730, emptyList()), + BVT("Bouvet Island", 49, emptyList()), + BRA("Brazil", 8515767, emptyList()), + IOT("British Indian Ocean Territory", 60, emptyList()), + BRN("Brunei Darussalam", 5765, emptyList()), + BGR("Bulgaria", 110994, emptyList()), + BFA("Burkina Faso", 274200, emptyList()), + BDI("Burundi", 27834, emptyList()), + CPV("Cabo Verde", 4033, emptyList()), + KHM("Cambodia", 181035, emptyList()), + CMR("Cameroon", 475442, emptyList()), + CAN("Canada", 9984670, emptyList()), + CYM("Cayman Islands", 264, emptyList()), + CAF("Central African Republic", 622436, emptyList()), + TCD("Chad", 1284000, emptyList()), + CHL("Chile", 756102, emptyList()), + CHN("China", 9596961, emptyList()), + CXR("Christmas Island", 135, emptyList()), + CCK("Cocos (Keeling) Islands", 14, emptyList()), + COL("Colombia", 1141748, emptyList()), + COM("Comoros", 2235, emptyList()), + COG("Congo", 342000, emptyList()), + COD("Congo, Democratic Republic of the", 2344858, emptyList()), + COK("Cook Islands", 237, emptyList()), + CRI("Costa Rica", 51100, emptyList()), + CIV("Côte d'Ivoire", 322463, emptyList()), + HRV("Croatia", 56594, emptyList()), + CUB("Cuba", 109884, emptyList()), + CUW("Curaçao", 444, emptyList()), + CYP("Cyprus", 9251, emptyList()), + CZE("Czech Republic", 78865, emptyList()), + DNK("Denmark", 42933, emptyList()), + DJI("Djibouti", 23200, emptyList()), + DMA("Dominica", 750, emptyList()), + ECU("Ecuador", 276841, emptyList()), + EGY("Egypt", 1002450, emptyList()), + SLV("El Salvador", 21041, emptyList()), + GNQ("Equatorial Guinea", 28051, emptyList()), + ERI("Eritrea", 117600, emptyList()), + EST("Estonia", 45227, emptyList()), + SWZ("Eswatini", 17364, emptyList()), + ETH("Ethiopia", 1104300, emptyList()), + FLK("Falkland Islands (Malvinas)", 12173, emptyList()), + FRO("Faroe Islands", 1399, emptyList()), + FJI("Fiji", 18333, emptyList()), + FIN("Finland", 338424, emptyList()), + FRA("France", 643801, emptyList()), + GUF("French Guiana", 83534, emptyList()), + PYF("French Polynesia", 4167, emptyList()), + ATF("French Southern Territories", 7747, emptyList()), + GAB("Gabon", 267667, emptyList()), + GMB("Gambia", 11295, emptyList()), + GEO("Georgia", 69700, emptyList()), + 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, emptyList()), + GIB("Gibraltar", 6, emptyList()), + GRC("Greece", 131957, emptyList()), + GRL("Greenland", 2166086, emptyList()), + GRD("Grenada", 344, emptyList()), + GLP("Guadeloupe", 1628, emptyList()), + GUM("Guam", 541, emptyList()), + GTM("Guatemala", 108889, emptyList()), + GGY("Guernsey", 78, emptyList()), + GIN("Guinea", 245857, emptyList()), + GNB("Guinea-Bissau", 36125, emptyList()), + GUY("Guyana", 214969, emptyList()), + HTI("Haiti", 27750, emptyList()), + HMD("Heard Island and McDonald Islands", 412, emptyList()), + VAT("Holy See (Vatican)", 1, emptyList()), + HND("Honduras", 112492, emptyList()), + HKG("Hong Kong", 1104, emptyList()), + HUN("Hungary", 93028, emptyList()), + ISL("Iceland", 102775, emptyList()), + IND("India", 3287263, emptyList()), + IDN("Indonesia", 1904569, emptyList()), + IRN("Iran (Islamic Republic of)", 1648195, emptyList()), + IRQ("Iraq", 438317, emptyList()), + IRL("Ireland", 70273, emptyList()), + IMN("Isle of Man", 572, emptyList()), + ISR("Israel", 22072, emptyList()), + ITA("Italy", 301340, emptyList()), + JAM("Jamaica", 10991, emptyList()), + 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, emptyList()), + JOR("Jordan", 89342, emptyList()), + KAZ("Kazakhstan", 2724900, emptyList()), + KEN("Kenya", 580367, emptyList()), + KIR("Kiribati", 811, emptyList()), + PRK("Korea (Democratic People's Republic of)", 120538, emptyList()), + KOR("Korea, Republic of", 100210, emptyList()), + XKO("Kosovo", 10887, emptyList()), + KWT("Kuwait", 17818, emptyList()), + KGZ("Kyrgyzstan", 199900, emptyList()), + LAO("Lao People's Democratic Republic", 236800, emptyList()), + LVA("Latvia", 64559, emptyList()), + LBN("Lebanon", 10452, emptyList()), + LSO("Lesotho", 30355, emptyList()), + LBR("Liberia", 111369, emptyList()), + LBY("Libya", 1759540, emptyList()), + LIE("Liechtenstein", 160, emptyList()), + LTU("Lithuania", 65300, emptyList()), + LUX("Luxembourg", 2586, emptyList()), + MAC("Macao", 32, emptyList()), + MDG("Madagascar", 587041, emptyList()), + MWI("Malawi", 118484, emptyList()), + MYS("Malaysia", 330803, emptyList()), + MDV("Maldives", 300, emptyList()), + MLI("Mali", 1240192, emptyList()), + MLT("Malta", 316, emptyList()), + MHL("Marshall Islands", 181, emptyList()), + MTQ("Martinique", 1128, emptyList()), + MRT("Mauritania", 1030700, emptyList()), + MUS("Mauritius", 2040, emptyList()), + MYT("Mayotte", 374, emptyList()), + MEX("Mexico", 1964375, emptyList()), + FSM("Micronesia (Federated States of)", 702, emptyList()), + MDA("Moldova, Republic of", 33846, emptyList()), + MCO("Monaco", 2, emptyList()), + MNG("Mongolia", 1564116, emptyList()), + MNE("Montenegro", 13812, emptyList()), + MSR("Montserrat", 102, emptyList()), + MAR("Morocco", 446550, emptyList()), + MOZ("Mozambique", 799380, emptyList()), + MMR("Myanmar", 676578, emptyList()), + NAM("Namibia", 824292, emptyList()), + NRU("Nauru", 21, emptyList()), + NPL("Nepal", 147181, emptyList()), + NLD("Netherlands", 41526, emptyList()), + NCL("New Caledonia", 18575, emptyList()), + NZL("New Zealand", 270467, emptyList()), + NIC("Nicaragua", 130373, emptyList()), + NER("Niger", 1267000, emptyList()), + NGA("Nigeria", 923768, emptyList()), + NIU("Niue", 261, emptyList()), + NFK("Norfolk Island", 35, emptyList()), + MNP("Northern Mariana Islands", 457, emptyList()), + NOR("Norway", 385207, emptyList()), + OMN("Oman", 309500, emptyList()), + PAK("Pakistan", 881913, emptyList()), + PLW("Palau", 459, emptyList()), + PSE("Palestine, State of", 6220, emptyList()), + PAN("Panama", 75417, emptyList()), + PNG("Papua New Guinea", 462840, emptyList()), + PRY("Paraguay", 406752, emptyList()), + PER("Peru", 1285216, emptyList()), + PHL("Philippines", 300000, emptyList()), + PCN("Pitcairn", 47, emptyList()), + POL("Poland", 312696, emptyList()), + PRT("Portugal", 92090, emptyList()), + PRI("Puerto Rico", 9104, emptyList()), + QAT("Qatar", 11586, emptyList()), + MKD("Republic of North Macedonia", 25713, emptyList()), + ROU("Romania", 238391, emptyList()), + RUS("Russian Federation", 17125242, emptyList()), + RWA("Rwanda", 26338, emptyList()), + REU("Réunion", 2511, emptyList()), + BLM("Saint Barthélemy", 21, emptyList()), + SHN("Saint Helena, Ascension and Tristan da Cunha", 394, emptyList()), + KNA("Saint Kitts and Nevis", 270, emptyList()), + LCA("Saint Lucia", 617, emptyList()), + MAF("Saint Martin (French part)", 53, emptyList()), + SPM("Saint Pierre and Miquelon", 242, emptyList()), + VCT("Saint Vincent and the Grenadines", 389, emptyList()), + WSM("Samoa", 2831, emptyList()), + SMR("San Marino", 61, emptyList()), + STP("Sao Tome and Principe", 1001, emptyList()), + SAU("Saudi Arabia", 2149690, emptyList()), + SEN("Senegal", 196722, emptyList()), + SRB("Serbia", 88361, emptyList()), + SYC("Seychelles", 459, emptyList()), + SLE("Sierra Leone", 71740, emptyList()), + SGP("Singapore", 725, emptyList()), + SXM("Sint Maarten (Dutch part)", 34, emptyList()), + SVK("Slovakia", 49036, emptyList()), + SVN("Slovenia", 20273, emptyList()), + SLB("Solomon Islands", 28896, emptyList()), + SOM("Somalia", 637657, emptyList()), + ZAF("South Africa", 1221037, emptyList()), + SGS("South Georgia and the South Sandwich Islands", 3903, emptyList()), + SSD("South Sudan", 619745, emptyList()), + ESP("Spain", 505990, emptyList()), + LKA("Sri Lanka", 65610, emptyList()), + SDN("Sudan", 1839542, emptyList()), + SUR("Suriname", 163820, emptyList()), + SJM("Svalbard and Jan Mayen", 61399, emptyList()), + SWE("Sweden", 450295, emptyList()), + 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, emptyList()), + TWN("Taiwan, Province of China", 36193, emptyList()), + TJK("Tajikistan", 143100, emptyList()), + TZA("Tanzania, United Republic of", 947300, emptyList()), + THA("Thailand", 513120, emptyList()), + TLS("Timor-Leste", 14919, emptyList()), + TGO("Togo", 56785, emptyList()), + TKL("Tokelau", 12, emptyList()), + TON("Tonga", 747, emptyList()), + TTO("Trinidad and Tobago", 5128, emptyList()), + TUN("Tunisia", 163610, emptyList()), + TUR("Turkey", 783562, emptyList()), + TKM("Turkmenistan", 488100, emptyList()), + TCA("Turks and Caicos Islands", 948, emptyList()), + TUV("Tuvalu", 26, emptyList()), + UGA("Uganda", 241551, emptyList()), + UKR("Ukraine", 603700, emptyList()), + ARE("United Arab Emirates", 83600, emptyList()), + GBR("United Kingdom of Great Britain and Northern Ireland", 242910, emptyList()), + USA("United States of America", 9833517, emptyList()), + UMI("United States Minor Outlying Islands", 34, emptyList()), + URY("Uruguay", 176215, emptyList()), + UZB("Uzbekistan", 447400, emptyList()), + VUT("Vanuatu", 12189, emptyList()), + VEN("Venezuela (Bolivarian Republic of)", 912050, emptyList()), + VNM("Viet Nam", 331212, emptyList()), + VGB("Virgin Islands (British", 153, emptyList()), + VIR("Virgin Islands (U.S.)", 347, emptyList()), + WLF("Wallis and Futuna", 142, emptyList()), + ESH("Western Sahara", 266000, emptyList()), + YEM("Yemen", 527968, emptyList()), + ZMB("Zambia", 752612, emptyList()), + ZWE("Zimbabwe", 390757, emptyList()), + DOM("Dominican Republic", 48671, emptyList()), + ANT("Netherlands Antilles", 800, emptyList()), + XAD("Akrotiri and Dhekelia", 254, emptyList()), + XCL("Clipperton Island", 6, emptyList()), + ZNC("Nothern Cyprus", 3355, emptyList()), ; + override val code = this.name override val type = LocType.COUNTRY - override val children = emptyList() } diff --git a/app/src/main/java/net/helcel/beendroid/countries/Group.kt b/app/src/main/java/net/helcel/beendroid/countries/Group.kt index aef08f1..149678b 100644 --- a/app/src/main/java/net/helcel/beendroid/countries/Group.kt +++ b/app/src/main/java/net/helcel/beendroid/countries/Group.kt @@ -20,6 +20,7 @@ enum class Group(override val fullName: String, override val children: List() diff --git a/app/src/main/java/net/helcel/beendroid/countries/Visited.kt b/app/src/main/java/net/helcel/beendroid/countries/Visited.kt index b7513fa..4436fb4 100644 --- a/app/src/main/java/net/helcel/beendroid/countries/Visited.kt +++ b/app/src/main/java/net/helcel/beendroid/countries/Visited.kt @@ -1,6 +1,9 @@ package net.helcel.beendroid.countries import android.content.Context +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class Visited(ctx: Context) { @@ -24,8 +27,10 @@ class Visited(ctx: Context) { fun setVisited(key: GeoLoc, b: Boolean){ locs[key] = b - editor.putBoolean(key.code, b) - editor.apply() + CoroutineScope(Dispatchers.Main).launch { + editor.putBoolean(key.code, b) + editor.apply() + } } fun visited(key: GeoLoc): Boolean { diff --git a/app/src/main/java/net/helcel/beendroid/helper/Theme.kt b/app/src/main/java/net/helcel/beendroid/helper/Theme.kt new file mode 100644 index 0000000..b836acb --- /dev/null +++ b/app/src/main/java/net/helcel/beendroid/helper/Theme.kt @@ -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) +} diff --git a/app/src/main/java/net/helcel/beendroid/svg/PSVGWrapper.kt b/app/src/main/java/net/helcel/beendroid/svg/PSVGWrapper.kt index 46bc8ee..ed80d45 100644 --- a/app/src/main/java/net/helcel/beendroid/svg/PSVGWrapper.kt +++ b/app/src/main/java/net/helcel/beendroid/svg/PSVGWrapper.kt @@ -34,7 +34,7 @@ class PSVGWrapper(ctx: Context) { cm[el]?.changeLevel(level) } - fun build(){ + private fun build(){ fm = World.WWW.children.map { gr -> gr.children.map {c -> val cc = cm[c] diff --git a/app/src/main/res/drawable/info.xml b/app/src/main/res/drawable/about.xml similarity index 100% rename from app/src/main/res/drawable/info.xml rename to app/src/main/res/drawable/about.xml diff --git a/app/src/main/res/drawable/checklist.xml b/app/src/main/res/drawable/licenses.xml similarity index 100% rename from app/src/main/res/drawable/checklist.xml rename to app/src/main/res/drawable/licenses.xml diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml new file mode 100644 index 0000000..e1560d5 --- /dev/null +++ b/app/src/main/res/layout/activity_edit.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ 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 bd4166a..f8d81bb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,27 +6,9 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - + android:layout_height="match_parent"/> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index acaa063..3d0490d 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,6 +1,5 @@ + tools:context=".activity.fragment.AboutFragment" > + tools:context=".activity.fragment.LicenseFragment" > @@ -12,39 +13,35 @@ android:id="@+id/textView" android:layout_width="0dp" 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:focusable="true" - android:paddingStart="20dp" - android:paddingEnd="20dp" + android:gravity="start|center_vertical" android:insetTop="4dp" android:insetBottom="4dp" - app:layout_constraintBottom_toBottomOf="@id/text2checkbox" - app:layout_constraintEnd_toStartOf="@id/text2checkbox" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="1.0" /> - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + - - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index db354af..377d487 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,9 +1,16 @@ - + + + \ No newline at end of file diff --git a/app/src/main/res/xml/fragment_settings.xml b/app/src/main/res/xml/fragment_settings.xml index 2f6b780..f13adda 100644 --- a/app/src/main/res/xml/fragment_settings.xml +++ b/app/src/main/res/xml/fragment_settings.xml @@ -16,14 +16,14 @@ diff --git a/gradle.properties b/gradle.properties index 3c5031e..1a982b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,6 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true +android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the