[M] Refactor, Cleanup,...
This commit is contained in:
@ -10,7 +10,7 @@
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Beendroid"
|
||||
android:theme="@style/Theme.Beans"
|
||||
tools:targetApi="31"
|
||||
tools:replace="android:allowBackup"
|
||||
>
|
||||
|
4887
app/src/main/assets/aeqd01.svg
Normal file
4887
app/src/main/assets/aeqd01.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.5 MiB |
3535
app/src/main/assets/geoloc_state.txt
Normal file
3535
app/src/main/assets/geoloc_state.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 454 KiB |
4887
app/src/main/assets/mercator01.svg
Normal file
4887
app/src/main/assets/mercator01.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.5 MiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 2.3 MiB |
@ -1,19 +1,22 @@
|
||||
package net.helcel.beendroid.activity
|
||||
package net.helcel.beans.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.activity.addCallback
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.activity.adapter.ViewPagerAdapter
|
||||
import net.helcel.beendroid.helper.createActionBar
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.adapter.ViewPagerAdapter
|
||||
import net.helcel.beans.activity.fragment.EditPlaceFragment
|
||||
import net.helcel.beans.countries.World
|
||||
import net.helcel.beans.helper.Theme.createActionBar
|
||||
|
||||
|
||||
class EditActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var viewPager : ViewPager2
|
||||
private lateinit var viewPager: ViewPager2
|
||||
private lateinit var tabLayout: TabLayout
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@ -26,12 +29,19 @@ class EditActivity : AppCompatActivity() {
|
||||
viewPager = findViewById(R.id.pager)
|
||||
tabLayout = findViewById(R.id.tab)
|
||||
|
||||
val adapter = ViewPagerAdapter(supportFragmentManager, lifecycle)
|
||||
val adapter = ViewPagerAdapter(supportFragmentManager, lifecycle, viewPager)
|
||||
viewPager.adapter = adapter
|
||||
adapter.addFragment(null, EditPlaceFragment(World.WWW, adapter))
|
||||
|
||||
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
|
||||
tab.text = adapter.getTabs()[position]
|
||||
tab.text = adapter.getLabel(position)
|
||||
}.attach()
|
||||
|
||||
onBackPressedDispatcher.addCallback {
|
||||
if (!adapter.backPressed()) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
@ -1,4 +1,4 @@
|
||||
package net.helcel.beendroid.activity
|
||||
package net.helcel.beans.activity
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
@ -9,28 +9,25 @@ import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.caverock.androidsvg.RenderOptions
|
||||
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.svg.CSSWrapper
|
||||
import net.helcel.beendroid.svg.SVGWrapper
|
||||
import net.helcel.beendroid.helper.*
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.countries.GeoLocImporter
|
||||
import net.helcel.beans.helper.Data.loadData
|
||||
import net.helcel.beans.helper.Settings
|
||||
import net.helcel.beans.helper.Theme.colorWrapper
|
||||
import net.helcel.beans.svg.CSSWrapper
|
||||
import net.helcel.beans.svg.SVGWrapper
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
private lateinit var photoView : PhotoView
|
||||
private lateinit var photoView: PhotoView
|
||||
|
||||
private lateinit var psvg : SVGWrapper
|
||||
private lateinit var css : CSSWrapper
|
||||
private lateinit var psvg: SVGWrapper
|
||||
private lateinit var css: CSSWrapper
|
||||
|
||||
override fun onRestart() {
|
||||
refreshMap()
|
||||
@ -44,8 +41,7 @@ class MainActivity : AppCompatActivity() {
|
||||
supportActionBar?.setBackgroundDrawable(colorWrapper(this, android.R.attr.colorPrimary))
|
||||
|
||||
// Fetch shared preferences to restore app theme upon startup
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
SettingsFragment.setTheme(this, sharedPreferences.getString(getString(R.string.key_theme), getString(R.string.system)))
|
||||
Settings.start(this)
|
||||
|
||||
// Create menu in action bar
|
||||
addMenuProvider(object : MenuProvider {
|
||||
@ -59,14 +55,17 @@ class MainActivity : AppCompatActivity() {
|
||||
startActivity(Intent(this@MainActivity, EditActivity::class.java))
|
||||
true
|
||||
}
|
||||
|
||||
R.id.action_stats -> {
|
||||
startActivity(Intent(this@MainActivity, StatActivity::class.java))
|
||||
true
|
||||
}
|
||||
|
||||
R.id.action_settings -> {
|
||||
startActivity(Intent(this@MainActivity, SettingsActivity::class.java))
|
||||
true
|
||||
}
|
||||
|
||||
else -> {
|
||||
false
|
||||
}
|
||||
@ -80,8 +79,9 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
photoView = findViewById(R.id.photo_view)
|
||||
photoView.minimumScale = 1f
|
||||
photoView.maximumScale = 50f
|
||||
photoView.maximumScale = 40f
|
||||
|
||||
GeoLocImporter.importState(this)
|
||||
loadData(this, Int.MIN_VALUE)
|
||||
psvg = SVGWrapper(this)
|
||||
css = CSSWrapper(this)
|
||||
@ -90,7 +90,8 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun refreshMap() {
|
||||
val opt : RenderOptions = RenderOptions.create()
|
||||
val opt: RenderOptions = RenderOptions.create()
|
||||
css.refresh()
|
||||
opt.css(css.get())
|
||||
photoView.setImageDrawable(PictureDrawable(psvg.get()?.renderToPicture(opt)))
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
package net.helcel.beendroid.activity
|
||||
package net.helcel.beans.activity
|
||||
|
||||
import android.os.Bundle
|
||||
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.*
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.fragment.AboutFragment
|
||||
import net.helcel.beans.activity.fragment.LicenseFragment
|
||||
import net.helcel.beans.activity.fragment.SettingsFragment
|
||||
import net.helcel.beans.helper.Theme.createActionBar
|
||||
|
||||
class SettingsActivity: AppCompatActivity() {
|
||||
class SettingsActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@ -24,13 +24,14 @@ class SettingsActivity: AppCompatActivity() {
|
||||
|
||||
// Change title in action bar according to current fragment
|
||||
supportFragmentManager.addFragmentOnAttachListener { _, _ ->
|
||||
supportActionBar?.title = supportFragmentManager.findFragmentById(R.id.fragment_view).let {
|
||||
when (it) {
|
||||
is LicenseFragment -> getString(R.string.licenses)
|
||||
is AboutFragment -> getString(R.string.about)
|
||||
else -> getString(R.string.action_settings)
|
||||
supportActionBar?.title =
|
||||
supportFragmentManager.findFragmentById(R.id.fragment_view).let {
|
||||
when (it) {
|
||||
is LicenseFragment -> getString(R.string.licenses)
|
||||
is AboutFragment -> getString(R.string.about)
|
||||
else -> getString(R.string.action_settings)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,10 +44,15 @@ class SettingsActivity: AppCompatActivity() {
|
||||
.remove(it)
|
||||
.commit()
|
||||
supportFragmentManager.beginTransaction()
|
||||
.replace(R.id.fragment_view, SettingsFragment(), getString(R.string.action_settings))
|
||||
.replace(
|
||||
R.id.fragment_view,
|
||||
SettingsFragment(),
|
||||
getString(R.string.action_settings)
|
||||
)
|
||||
.commit()
|
||||
supportActionBar?.title = getString(R.string.action_settings)
|
||||
}
|
||||
|
||||
else -> {
|
||||
finish()
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package net.helcel.beendroid.activity
|
||||
package net.helcel.beans.activity
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.MenuItem
|
||||
@ -12,17 +11,17 @@ import com.github.mikephil.charting.data.PieDataSet
|
||||
import com.github.mikephil.charting.data.PieEntry
|
||||
import com.github.mikephil.charting.formatter.PercentFormatter
|
||||
import com.github.mikephil.charting.utils.MPPointF
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.countries.World
|
||||
import net.helcel.beendroid.helper.colorWrapper
|
||||
import net.helcel.beendroid.helper.createActionBar
|
||||
import net.helcel.beendroid.helper.groups
|
||||
import net.helcel.beendroid.helper.visits
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.countries.World
|
||||
import net.helcel.beans.helper.Data.groups
|
||||
import net.helcel.beans.helper.Data.visits
|
||||
import net.helcel.beans.helper.Theme.colorWrapper
|
||||
import net.helcel.beans.helper.Theme.createActionBar
|
||||
|
||||
|
||||
class StatActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var chart : PieChart
|
||||
private lateinit var chart: PieChart
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@ -42,7 +41,7 @@ class StatActivity : AppCompatActivity() {
|
||||
chart.isDrawHoleEnabled = true
|
||||
chart.setTransparentCircleColor(Color.TRANSPARENT)
|
||||
chart.setHoleColor(Color.TRANSPARENT)
|
||||
chart.setCenterTextColor(colorWrapper(this,android.R.attr.colorForeground).color)
|
||||
chart.setCenterTextColor(colorWrapper(this, android.R.attr.colorForeground).color)
|
||||
chart.setTransparentCircleAlpha(0)
|
||||
chart.holeRadius = 40F
|
||||
chart.transparentCircleRadius = 40F
|
||||
@ -63,13 +62,21 @@ class StatActivity : AppCompatActivity() {
|
||||
|
||||
private fun bind() {
|
||||
val entries = ArrayList<PieEntry>()
|
||||
val VIS_continents = World.WWW.children.groupBy { visits?.getVisited(it)?:0 }.map { Pair(it.key,it.value.map { c-> c.area }.fold(0){ acc, i-> acc+i}) }
|
||||
val VIS_country = World.WWW.children.map { it.children }.flatten().groupBy { visits!!.getVisited(it) }.map { Pair(it.key,it.value.map { c-> c.area }.fold(0){ acc, i-> acc+i}) }
|
||||
val VIS_continents = World.WWW.children.groupBy { visits.getVisited(it) }
|
||||
.map { Pair(it.key, it.value.map { c -> c.area }.fold(0) { acc, i -> acc + i }) }
|
||||
val VIS_country =
|
||||
World.WWW.children.map { it.children }.flatten().groupBy { visits.getVisited(it) }
|
||||
.map { Pair(it.key, it.value.map { c -> c.area }.fold(0) { acc, i -> acc + i }) }
|
||||
val vis = VIS_country
|
||||
Log.d("VIS",vis.toString())
|
||||
val max = vis.map{it.second}.fold(0) {acc, i -> acc+i}
|
||||
Log.d("VIS", vis.toString())
|
||||
val max = vis.map { it.second }.fold(0) { acc, i -> acc + i }
|
||||
vis.forEach {
|
||||
entries.add(PieEntry(it.second.toFloat().div(max.toFloat()),groups!!.getGroupFromKey(it.first)?.name?:"None"))
|
||||
entries.add(
|
||||
PieEntry(
|
||||
it.second.toFloat().div(max.toFloat()),
|
||||
groups.getGroupFromKey(it.first).name
|
||||
)
|
||||
)
|
||||
}
|
||||
val dataSet = PieDataSet(entries, "GG1")
|
||||
|
||||
@ -80,7 +87,7 @@ class StatActivity : AppCompatActivity() {
|
||||
|
||||
|
||||
dataSet.setDrawIcons(true)
|
||||
dataSet.colors = vis.map{ (groups!!.getGroupFromKey(it.first)?.color?:ColorDrawable(Color.WHITE)).color }.toList()
|
||||
dataSet.colors = vis.map { groups.getGroupFromKey(it.first).color.color }.toList()
|
||||
|
||||
val data = PieData(dataSet)
|
||||
data.setDrawValues(false)
|
||||
@ -94,6 +101,4 @@ class StatActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,160 @@
|
||||
package net.helcel.beans.activity.adapter
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.checkbox.MaterialCheckBox
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.fragment.EditPlaceColorFragment
|
||||
import net.helcel.beans.activity.fragment.EditPlaceFragment
|
||||
import net.helcel.beans.countries.GeoLoc
|
||||
import net.helcel.beans.helper.Data.groups
|
||||
import net.helcel.beans.helper.Data.saveData
|
||||
import net.helcel.beans.helper.Data.selected_geoloc
|
||||
import net.helcel.beans.helper.Data.selected_group
|
||||
import net.helcel.beans.helper.Data.visits
|
||||
import net.helcel.beans.helper.Settings
|
||||
import net.helcel.beans.helper.Theme.colorWrapper
|
||||
|
||||
class GeolocListAdapter(
|
||||
private val ctx: EditPlaceFragment, val l: GeoLoc, private val pager: ViewPagerAdapter
|
||||
) : RecyclerView.Adapter<GeolocListAdapter.FoldingListViewHolder>() {
|
||||
|
||||
private lateinit var view: View
|
||||
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): FoldingListViewHolder {
|
||||
view = LayoutInflater
|
||||
.from(viewGroup.context)
|
||||
.inflate(R.layout.item_list_geoloc, viewGroup, false)
|
||||
return FoldingListViewHolder(ctx.requireActivity(), view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: FoldingListViewHolder, position: Int) {
|
||||
val el = l.children[position]
|
||||
holder.bind(el)
|
||||
holder.addListeners(el) {
|
||||
if (el.children.isNotEmpty())
|
||||
pager.addFragment(ctx, EditPlaceFragment(el, pager))
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return l.children.size
|
||||
}
|
||||
|
||||
class FoldingListViewHolder(private val ctx: FragmentActivity, itemView: View) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
private val textView: TextView = itemView.findViewById(R.id.textView)
|
||||
private val progressView: TextView = itemView.findViewById(R.id.name)
|
||||
private val checkBox: MaterialCheckBox = itemView.findViewById(R.id.checkBox)
|
||||
|
||||
private val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
private val statsPref = sharedPreferences.getString(
|
||||
ctx.getString(R.string.key_stats),
|
||||
ctx.getString(R.string.counters)
|
||||
)
|
||||
|
||||
fun bind(el: GeoLoc) {
|
||||
textView.text = el.fullName
|
||||
if (el.children.isEmpty() || (el.type == GeoLoc.LocType.COUNTRY && !Settings.isRegional(
|
||||
ctx
|
||||
))
|
||||
) {
|
||||
textView.backgroundTintList =
|
||||
ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.colorBackground).color)
|
||||
} else {
|
||||
textView.setTypeface(null, Typeface.BOLD)
|
||||
|
||||
val numerator = el.children.map { visits.getVisited(it) != 0 }.count { it }
|
||||
val denominator = el.children.size
|
||||
|
||||
progressView.text = when (statsPref) {
|
||||
ctx.getString(R.string.percentages) -> ctx.getString(
|
||||
R.string.percentage,
|
||||
(100 * (numerator.toFloat() / denominator.toFloat())).toInt()
|
||||
)
|
||||
|
||||
else -> ctx.getString(R.string.rate, numerator, denominator)
|
||||
}
|
||||
textView.backgroundTintList = ColorStateList.valueOf(
|
||||
colorWrapper(
|
||||
ctx,
|
||||
android.R.attr.panelColorBackground
|
||||
).color
|
||||
).withAlpha(128)
|
||||
textView.parent.parent.requestChildFocus(textView, textView)
|
||||
}
|
||||
refreshCheck(el)
|
||||
}
|
||||
|
||||
fun addListeners(el: GeoLoc, expandLambda: () -> Boolean) {
|
||||
if (el.children.isNotEmpty() && (el.type != GeoLoc.LocType.COUNTRY || Settings.isRegional(
|
||||
ctx
|
||||
))
|
||||
) {
|
||||
textView.setOnClickListener { expandLambda() }
|
||||
}
|
||||
checkBox.setOnClickListener {
|
||||
selected_geoloc = el
|
||||
if (groups.size() == 1 && Settings.isSingleGroup(ctx)) {
|
||||
if (checkBox.isChecked) {
|
||||
// If one has just checked the box (assign unique group)
|
||||
selected_group = groups.getUniqueEntry()
|
||||
onColorDialogDismiss(false)
|
||||
} else {
|
||||
// If one has just unchecked the box (unassign unique group)
|
||||
selected_group = null
|
||||
onColorDialogDismiss(true)
|
||||
}
|
||||
} else {
|
||||
selected_group = null
|
||||
EditPlaceColorFragment(this).show(
|
||||
ctx.supportFragmentManager,
|
||||
"AddColorDialogFragment"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onColorDialogDismiss(clear: Boolean) {
|
||||
if (clear) {
|
||||
visits.setVisited(selected_geoloc!!, 0)
|
||||
saveData()
|
||||
}
|
||||
if (selected_group != null && selected_geoloc != null) {
|
||||
visits.setVisited(selected_geoloc!!, selected_group!!.key)
|
||||
saveData()
|
||||
}
|
||||
selected_geoloc?.let { refreshCheck(it) }
|
||||
selected_geoloc = null
|
||||
selected_group = null
|
||||
}
|
||||
|
||||
private fun refreshCheck(geoLoc: GeoLoc) {
|
||||
var col = groups.getGroupFromKey(visits.getVisited(geoLoc)).color.color
|
||||
if (col == Color.TRANSPARENT)
|
||||
col = Color.GRAY
|
||||
checkBox.checkedState =
|
||||
if (visits.getVisited(geoLoc) != 0) MaterialCheckBox.STATE_CHECKED
|
||||
else if (geoLoc.children.any { visits.getVisited(it) != 0 }) MaterialCheckBox.STATE_INDETERMINATE
|
||||
else MaterialCheckBox.STATE_UNCHECKED
|
||||
|
||||
checkBox.buttonTintList = ColorStateList(
|
||||
arrayOf(
|
||||
intArrayOf(-android.R.attr.state_checked),
|
||||
intArrayOf(android.R.attr.state_checked)
|
||||
),
|
||||
intArrayOf(col, col)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package net.helcel.beans.activity.adapter
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.fragment.EditGroupAddFragment
|
||||
import net.helcel.beans.helper.Data
|
||||
import net.helcel.beans.helper.Groups
|
||||
import net.helcel.beans.helper.Theme.getContrastColor
|
||||
|
||||
class GroupListAdapter(
|
||||
private val activity: FragmentActivity,
|
||||
private val selectDialog: DialogFragment
|
||||
) : RecyclerView.Adapter<GroupListAdapter.GroupViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GroupViewHolder {
|
||||
val view: View =
|
||||
LayoutInflater.from(parent.context).inflate(R.layout.item_list_group, parent, false)
|
||||
return GroupViewHolder(view, activity, selectDialog)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: GroupViewHolder, pos: Int) {
|
||||
holder.bind(Data.groups.getGroupFromPos(pos))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return Data.groups.size()
|
||||
}
|
||||
|
||||
inner class GroupViewHolder(
|
||||
itemView: View,
|
||||
private val activity: FragmentActivity,
|
||||
private val selectDialog: DialogFragment
|
||||
) : RecyclerView.ViewHolder(itemView) {
|
||||
private val color: Button = itemView.findViewById(R.id.group_color)
|
||||
private val entries: TextView = itemView.findViewById(R.id.name)
|
||||
private lateinit var dialogFragment: EditGroupAddFragment
|
||||
fun bind(entry: Pair<Int, Groups.Group>) {
|
||||
color.text = entry.second.name
|
||||
dialogFragment = EditGroupAddFragment(entry.first, {
|
||||
val newEntry = Data.groups.getGroupFromKey(entry.first)
|
||||
color.text = newEntry.name
|
||||
val newEntryColor = newEntry.color.color
|
||||
val contrastNewEntryColor =
|
||||
getContrastColor(newEntryColor)
|
||||
color.setBackgroundColor(newEntryColor)
|
||||
color.setTextColor(contrastNewEntryColor)
|
||||
entries.setTextColor(contrastNewEntryColor)
|
||||
entries.text = "0"
|
||||
}, {
|
||||
notifyItemRemoved(it)
|
||||
})
|
||||
|
||||
val entryColor = entry.second.color.color
|
||||
val contrastEntryColor = getContrastColor(entryColor)
|
||||
color.setBackgroundColor(entryColor)
|
||||
color.setTextColor(contrastEntryColor)
|
||||
entries.setTextColor(contrastEntryColor)
|
||||
entries.text = Data.visits.countVisited(entry.first).toString()
|
||||
|
||||
color.setOnClickListener {
|
||||
Data.selected_group = entry.second
|
||||
selectDialog.dismiss()
|
||||
}
|
||||
color.setOnLongClickListener {
|
||||
dialogFragment.show(
|
||||
activity.supportFragmentManager,
|
||||
"AddColorDialogFragment"
|
||||
)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package net.helcel.beans.activity.adapter
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import net.helcel.beans.activity.fragment.EditPlaceFragment
|
||||
|
||||
class ViewPagerAdapter(
|
||||
fragmentManager: FragmentManager,
|
||||
lifecycle: Lifecycle,
|
||||
private val viewPager: ViewPager2
|
||||
) :
|
||||
FragmentStateAdapter(fragmentManager, lifecycle) {
|
||||
|
||||
private val fragmentList: MutableList<EditPlaceFragment> = ArrayList()
|
||||
|
||||
fun addFragment(src: EditPlaceFragment?, target: EditPlaceFragment) {
|
||||
if (src != null) {
|
||||
while (fragmentList.last() != src) {
|
||||
fragmentList.removeLast()
|
||||
notifyItemRemoved(fragmentList.size)
|
||||
}
|
||||
}
|
||||
println(src.toString() + " - " + target.toString())
|
||||
fragmentList.add(target)
|
||||
notifyItemInserted(fragmentList.size)
|
||||
viewPager.currentItem = fragmentList.size - 1
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return fragmentList.size
|
||||
}
|
||||
|
||||
fun backPressed(): Boolean {
|
||||
if (viewPager.currentItem == 0) {
|
||||
return false
|
||||
}
|
||||
val target = viewPager.currentItem
|
||||
while (fragmentList.size > target) {
|
||||
fragmentList.removeLast()
|
||||
notifyItemRemoved(fragmentList.size)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
fun getLabel(pos: Int): String {
|
||||
return fragmentList[pos].loc.fullName
|
||||
}
|
||||
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
return fragmentList[position]
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import net.helcel.beans.databinding.FragmentAboutBinding
|
||||
|
||||
class AboutFragment : Fragment() {
|
||||
private lateinit var _binding: FragmentAboutBinding
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentAboutBinding.inflate(inflater, container, false)
|
||||
return _binding.root
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
@ -9,21 +8,25 @@ import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.core.graphics.blue
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.slider.Slider
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.helper.Groups
|
||||
import net.helcel.beendroid.helper.colorToHex6
|
||||
import net.helcel.beendroid.helper.groups
|
||||
import net.helcel.beendroid.helper.saveData
|
||||
import java.lang.Exception
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.helper.Data
|
||||
import net.helcel.beans.helper.Groups
|
||||
import net.helcel.beans.helper.Theme.colorToHex6
|
||||
|
||||
|
||||
class EditGroupAddFragment(private val key: Int = 0, val onAddCb: (Int) -> Unit) :
|
||||
class EditGroupAddFragment(
|
||||
private val key: Int = 0,
|
||||
val onAddCb: (Int) -> Unit,
|
||||
val onDelCb: (Int) -> Unit
|
||||
) :
|
||||
DialogFragment() {
|
||||
private lateinit var colorNameEditText: TextInputEditText
|
||||
private lateinit var colorEditText: TextInputEditText
|
||||
@ -34,11 +37,13 @@ class EditGroupAddFragment(private val key: Int = 0, val onAddCb: (Int) -> Unit)
|
||||
private lateinit var colorEditG: Slider
|
||||
private lateinit var colorEditB: Slider
|
||||
|
||||
private val grp = groups!!.getGroupFromKey(key)
|
||||
private lateinit var btnDelete: AppCompatButton
|
||||
private lateinit var btnCancel: AppCompatButton
|
||||
private lateinit var btnOk: AppCompatButton
|
||||
|
||||
private val grp = Data.groups.getGroupFromKey(key)
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val builder = AlertDialog.Builder(
|
||||
requireActivity()
|
||||
)
|
||||
val builder = AlertDialog.Builder(requireActivity())
|
||||
val inflater = requireActivity().layoutInflater
|
||||
val view: View = inflater.inflate(R.layout.fragment_edit_groups_add, null)
|
||||
|
||||
@ -49,27 +54,55 @@ class EditGroupAddFragment(private val key: Int = 0, val onAddCb: (Int) -> Unit)
|
||||
colorEditG = view.findViewById(R.id.colorG)
|
||||
colorEditB = view.findViewById(R.id.colorB)
|
||||
|
||||
setupSlider(colorEditR, (grp?.color?.color?.red ?: 0) / 255F)
|
||||
setupSlider(colorEditG, (grp?.color?.color?.green ?: 0) / 255F)
|
||||
setupSlider(colorEditB, (grp?.color?.color?.blue ?: 0) / 255F)
|
||||
setupSlider(colorEditR, grp.color.color.red / 255F)
|
||||
setupSlider(colorEditG, grp.color.color.green / 255F)
|
||||
setupSlider(colorEditB, grp.color.color.blue / 255F)
|
||||
|
||||
setupText(colorEditText, grp)
|
||||
|
||||
colorView.background = ColorDrawable(grp?.color?.color ?: 0)
|
||||
colorView.background = ColorDrawable(grp.color.color)
|
||||
|
||||
colorNameEditText.setText(grp?.name ?: "")
|
||||
btnDelete = view.findViewById(R.id.btnDelete)
|
||||
btnCancel = view.findViewById(R.id.btnCancel)
|
||||
btnOk = view.findViewById(R.id.btnOk)
|
||||
|
||||
if (key == 0) {
|
||||
btnDelete.visibility = View.INVISIBLE
|
||||
btnDelete.isEnabled = false
|
||||
}
|
||||
btnDelete.setOnClickListener {
|
||||
MaterialAlertDialogBuilder(requireActivity())
|
||||
.setMessage(R.string.delete_group)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
val pos = Data.groups.findGroupPos(key)
|
||||
// Remove all countries belonging to that group
|
||||
// Delete the group
|
||||
Data.visits.deleteVisited(key)
|
||||
Data.groups.deleteGroup(key)
|
||||
Data.saveData()
|
||||
onDelCb(pos)
|
||||
dialog?.dismiss()
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
||||
.show()
|
||||
}
|
||||
|
||||
btnOk.setOnClickListener {
|
||||
val name = colorNameEditText.text.toString()
|
||||
val color = colorEditText.text.toString()
|
||||
val key = (if (key != 0) key else Data.groups.genKey())
|
||||
Data.groups.setGroup(key, name, ColorDrawable(Color.parseColor("#$color")))
|
||||
Data.saveData()
|
||||
onAddCb(key)
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
btnCancel.setOnClickListener {
|
||||
dialog?.cancel()
|
||||
}
|
||||
|
||||
colorNameEditText.setText(grp.name)
|
||||
builder.setView(view)
|
||||
.setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int ->
|
||||
val name = colorNameEditText.text.toString()
|
||||
val color = colorEditText.text.toString()
|
||||
val key = (if (key != 0) key else groups!!.genKey())
|
||||
groups!!.setGroup(key, name, ColorDrawable(Color.parseColor("#$color")))
|
||||
saveData()
|
||||
onAddCb(key)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _: Int ->
|
||||
dialog.cancel()
|
||||
}
|
||||
return builder.create()
|
||||
}
|
||||
|
||||
@ -112,13 +145,8 @@ private class EditTextListener(
|
||||
private val colorView: View
|
||||
) : TextWatcher {
|
||||
|
||||
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
|
||||
}
|
||||
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||
}
|
||||
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
val col: Color
|
||||
try {
|
||||
@ -132,7 +160,6 @@ private class EditTextListener(
|
||||
colorEditB.value = col.blue()
|
||||
colorView.background = ColorDrawable(col.toArgb())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class SliderOnChangeListener(
|
||||
@ -148,5 +175,4 @@ private class SliderOnChangeListener(
|
||||
colorEditText.setText(colorToHex6(rgb).substring(1))
|
||||
colorView.background = rgb
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.adapter.GeolocListAdapter
|
||||
import net.helcel.beans.activity.adapter.GroupListAdapter
|
||||
import net.helcel.beans.helper.Data
|
||||
|
||||
|
||||
class EditPlaceColorFragment(private val parent: GeolocListAdapter.FoldingListViewHolder) :
|
||||
DialogFragment() {
|
||||
private lateinit var listAdapt: GroupListAdapter
|
||||
private lateinit var list: RecyclerView
|
||||
private var clear: Boolean = false
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val builder = AlertDialog.Builder(
|
||||
requireActivity()
|
||||
)
|
||||
val inflater = requireActivity().layoutInflater
|
||||
val view: View = inflater.inflate(R.layout.fragment_edit_places_colors, null)
|
||||
|
||||
val btnAdd: AppCompatButton = view.findViewById(R.id.btnAdd)
|
||||
val btnClear: AppCompatButton = view.findViewById(R.id.btnClear)
|
||||
btnAdd.setOnClickListener {
|
||||
EditGroupAddFragment(0, {
|
||||
listAdapt.notifyItemInserted(Data.groups.findGroupPos(it))
|
||||
}, {}).show(requireActivity().supportFragmentManager, "AddColorDialogFragment")
|
||||
}
|
||||
btnClear.setOnClickListener {
|
||||
clear = true
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
val dialog = builder.setView(view).create()
|
||||
listAdapt = GroupListAdapter(requireActivity(), this)
|
||||
list = view.findViewById(R.id.groups_color)!!
|
||||
list.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
|
||||
list.adapter = listAdapt
|
||||
|
||||
return dialog
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
parent.onColorDialogDismiss(clear)
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beans.activity.adapter.GeolocListAdapter
|
||||
import net.helcel.beans.activity.adapter.ViewPagerAdapter
|
||||
import net.helcel.beans.countries.GeoLoc
|
||||
import net.helcel.beans.databinding.FragmentEditPlacesBinding
|
||||
|
||||
class EditPlaceFragment(val loc: GeoLoc, private val pager: ViewPagerAdapter) : Fragment() {
|
||||
private lateinit var _binding: FragmentEditPlacesBinding
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentEditPlacesBinding.inflate(inflater, container, false)
|
||||
|
||||
_binding.list.setItemViewCacheSize(5)
|
||||
_binding.list.setHasFixedSize(true)
|
||||
_binding.list.layoutManager =
|
||||
LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
|
||||
_binding.list.adapter = GeolocListAdapter(this, loc, pager)
|
||||
return _binding.root
|
||||
}
|
||||
}
|
@ -1,18 +1,17 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.databinding.FragmentLicenseBinding
|
||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.databinding.FragmentLicenseBinding
|
||||
|
||||
class LicenseFragment: Fragment() {
|
||||
private var _binding: FragmentLicenseBinding? = null
|
||||
class LicenseFragment : Fragment() {
|
||||
private lateinit var _binding: FragmentLicenseBinding
|
||||
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
@ -29,11 +28,6 @@ class LicenseFragment: Fragment() {
|
||||
.replace(R.id.license_fragment_view, librariesFragment)
|
||||
.commit()
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
return _binding.root
|
||||
}
|
||||
}
|
@ -1,23 +1,22 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
package net.helcel.beans.activity.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beans.R
|
||||
|
||||
|
||||
class SettingsFragment: PreferenceFragmentCompat() {
|
||||
private lateinit var themePreference: ListPreference
|
||||
class SettingsFragment : PreferenceFragmentCompat() {
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.fragment_settings, rootKey)
|
||||
|
||||
|
||||
// Select Light/Dark/System Mode
|
||||
themePreference = findPreference(getString(R.string.key_theme))!!
|
||||
themePreference.setOnPreferenceChangeListener { _, key ->
|
||||
val themePreference = findPreference<Preference>(getString(R.string.key_theme))
|
||||
themePreference?.setOnPreferenceChangeListener { _, key ->
|
||||
setTheme(requireContext(), key as String)
|
||||
}
|
||||
|
||||
@ -43,30 +42,16 @@ class SettingsFragment: PreferenceFragmentCompat() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun setTheme(context: Context, key: String?): Boolean {
|
||||
when (key) {
|
||||
context.getString(R.string.system) -> {
|
||||
// Set SYSTEM Theme
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
return true
|
||||
fun setTheme(ctx: Context, key: String?): Boolean {
|
||||
AppCompatDelegate.setDefaultNightMode(
|
||||
when (key) {
|
||||
ctx.getString(R.string.system) -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
|
||||
ctx.getString(R.string.light) -> AppCompatDelegate.MODE_NIGHT_NO
|
||||
ctx.getString(R.string.dark) -> AppCompatDelegate.MODE_NIGHT_YES
|
||||
else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
|
||||
}
|
||||
|
||||
context.getString(R.string.light) -> {
|
||||
// Set LIGHT Theme
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
||||
return true
|
||||
}
|
||||
|
||||
context.getString(R.string.dark) -> {
|
||||
// Set DARK Theme
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
|
||||
return true
|
||||
}
|
||||
|
||||
else -> {
|
||||
return false
|
||||
}
|
||||
}
|
||||
)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
269
app/src/main/java/net/helcel/beans/countries/Country.kt
Normal file
269
app/src/main/java/net/helcel/beans/countries/Country.kt
Normal file
@ -0,0 +1,269 @@
|
||||
package net.helcel.beans.countries
|
||||
|
||||
enum class Country(
|
||||
override val fullName: String,
|
||||
override val area: Int
|
||||
) : GeoLoc {
|
||||
ATA("Antarctica", 14000000),
|
||||
HKG("Hong Kong", 1104),
|
||||
MAC("Macao", 32),
|
||||
ANT("Netherlands Antilles", 800),
|
||||
|
||||
|
||||
AFG("Afghanistan", 645487),
|
||||
XAD("Akrotiri and Dhekelia", 234),
|
||||
ALA("Åland", 1483),
|
||||
ALB("Albania", 28755),
|
||||
DZA("Algeria", 2316624),
|
||||
ASM("American Samoa", 205),
|
||||
AND("Andorra", 451),
|
||||
AGO("Angola", 1254492),
|
||||
AIA("Anguilla", 80),
|
||||
ATG("Antigua and Barbuda", 438),
|
||||
ARG("Argentina", 2785500),
|
||||
ARM("Armenia", 29724),
|
||||
ABW("Aruba", 183),
|
||||
AUS("Australia", 7720095),
|
||||
AUT("Austria", 83897),
|
||||
AZE("Azerbaijan", 86331),
|
||||
BHS("Bahamas", 13437),
|
||||
BHR("Bahrain", 718),
|
||||
BGD("Bangladesh", 140002),
|
||||
BRB("Barbados", 437),
|
||||
BLR("Belarus", 206665),
|
||||
BEL("Belgium", 30668),
|
||||
BLZ("Belize", 22164),
|
||||
BEN("Benin", 116014),
|
||||
BMU("Bermuda", 68),
|
||||
BTN("Bhutan", 38913),
|
||||
BOL("Bolivia", 1090425),
|
||||
BES("Bonaire, Sint Eustatius and Saba", 325),
|
||||
BIH("Bosnia and Herzegovina", 51081),
|
||||
BWA("Botswana", 580648),
|
||||
BVT("Bouvet Island", 77),
|
||||
BRA("Brazil", 8560656),
|
||||
IOT("British Indian Ocean Territory", 65),
|
||||
VGB("British Virgin Islands", 169),
|
||||
BRN("Brunei", 5815),
|
||||
BGR("Bulgaria", 111647),
|
||||
BFA("Burkina Faso", 274620),
|
||||
BDI("Burundi", 27113),
|
||||
KHM("Cambodia", 182800),
|
||||
CMR("Cameroon", 469101),
|
||||
CAN("Canada", 9925768),
|
||||
CPV("Cabo Verde", 4115),
|
||||
XCA("Caspian Sea", 371885),
|
||||
CYM("Cayman Islands", 282),
|
||||
CAF("Central African Republic", 624264),
|
||||
TCD("Chad", 1277250),
|
||||
CHL("Chile", 753785),
|
||||
CHN("China", 9405272),
|
||||
CXR("Christmas Island", 140),
|
||||
XCL("Clipperton Island", 10),
|
||||
CCK("Cocos Islands", 14),
|
||||
COL("Colombia", 1144791),
|
||||
COM("Comoros", 1684),
|
||||
COK("Cook Islands", 281),
|
||||
CRI("Costa Rica", 51511),
|
||||
CIV("Côte d'Ivoire", 323636),
|
||||
HRV("Croatia", 57065),
|
||||
CUB("Cuba", 111255),
|
||||
CUW("Curaçao", 440),
|
||||
CYP("Cyprus", 5733),
|
||||
CZE("Czechia", 78754),
|
||||
COD("Democratic Republic of the Congo", 2344314),
|
||||
DNK("Denmark", 43034),
|
||||
DJI("Djibouti", 22509),
|
||||
DMA("Dominica", 759),
|
||||
DOM("Dominican Republic", 48348),
|
||||
ECU("Ecuador", 258071),
|
||||
EGY("Egypt", 987766),
|
||||
SLV("El Salvador", 20545),
|
||||
GNQ("Equatorial Guinea", 27138),
|
||||
ERI("Eritrea", 121150),
|
||||
EST("Estonia", 45354),
|
||||
ETH("Ethiopia", 1136255),
|
||||
FLK("Falkland Islands", 12370),
|
||||
FRO("Faroe Islands", 1434),
|
||||
FJI("Fiji", 19057),
|
||||
FIN("Finland", 335489),
|
||||
FRA("France", 549335),
|
||||
GUF("French Guiana", 83856),
|
||||
PYF("French Polynesia", 4053),
|
||||
ATF("French Southern Territories", 7852),
|
||||
GAB("Gabon", 266332),
|
||||
GMB("Gambia", 10731),
|
||||
GEO("Georgia", 6989),
|
||||
DEU("Germany", 35732),
|
||||
GHA("Ghana", 241025),
|
||||
GIB("Gibraltar", 7),
|
||||
GRC("Greece", 132751),
|
||||
GRL("Greenland", 2139125),
|
||||
GRD("Grenada", 362),
|
||||
GLP("Guadeloupe", 1658),
|
||||
GUM("Guam", 554),
|
||||
GTM("Guatemala", 109777),
|
||||
GGY("Guernsey", 88),
|
||||
GIN("Guinea", 246356),
|
||||
GNB("Guinea-Bissau", 34088),
|
||||
GUY("Guyana", 211133),
|
||||
HTI("Haiti", 27258),
|
||||
HMD("Heard Island and Mc Donald Island", 362),
|
||||
HND("Honduras", 112950),
|
||||
HUN("Hungary", 92993),
|
||||
ISL("Iceland", 101781),
|
||||
IND("India", 3166019),
|
||||
IDN("Indonesia", 1902704),
|
||||
IRN("Iran", 1626366),
|
||||
IRQ("Iraq", 437670),
|
||||
IRL("Ireland", 70131),
|
||||
IMN("Isle of Man", 578),
|
||||
ISR("Israel", 22226),
|
||||
ITA("Italy", 300894),
|
||||
JAM("Jamaica", 11061),
|
||||
JPN("Japan", 373106),
|
||||
JEY("Jersey", 125),
|
||||
JOR("Jordan", 89464),
|
||||
KAZ("Kazakhstan", 2728680),
|
||||
KEN("Kenya", 589936),
|
||||
KIR("Kiribati", 1017),
|
||||
XKO("Kosovo", 10843),
|
||||
KWT("Kuwait", 17486),
|
||||
KGZ("Kyrgyzstan", 197618),
|
||||
LAO("Laos", 231104),
|
||||
LVA("Latvia", 64537),
|
||||
LBN("Lebanon", 10265),
|
||||
LSO("Lesotho", 30653),
|
||||
LBR("Liberia", 96550),
|
||||
LBY("Libya", 1622430),
|
||||
LIE("Liechtenstein", 159),
|
||||
LTU("Lithuania", 64862),
|
||||
LUX("Luxembourg", 2579),
|
||||
SXM("Sint Maarten", 38),
|
||||
MKD("North Macedonia", 24930),
|
||||
MDG("Madagascar", 594538),
|
||||
MWI("Malawi", 118637),
|
||||
MYS("Malaysia", 331770),
|
||||
MDV("Maldives", 281),
|
||||
MLI("Mali", 1258093),
|
||||
MLT("Malta", 324),
|
||||
MHL("Marshall Islands", 285),
|
||||
MTQ("Martinique", 1124),
|
||||
MRT("Mauritania", 1046483),
|
||||
MUS("Mauritius", 2036),
|
||||
MYT("Mayotte", 394),
|
||||
MEX("México", 1960059),
|
||||
FSM("Micronesia", 770),
|
||||
MDA("Moldova", 33889),
|
||||
MCO("Monaco", 2),
|
||||
MNG("Mongolia", 1565638),
|
||||
MNE("Montenegro", 13342),
|
||||
MSR("Montserrat", 101),
|
||||
MAR("Morocco", 414714),
|
||||
MOZ("Mozambique", 791805),
|
||||
MMR("Myanmar", 672590),
|
||||
NAM("Namibia", 828017),
|
||||
NRU("Nauru", 22),
|
||||
NPL("Nepal", 148210),
|
||||
NLD("Netherlands", 37624),
|
||||
NCL("New Caledonia", 18916),
|
||||
NZL("New Zealand", 268937),
|
||||
NIC("Nicaragua", 128957),
|
||||
NER("Niger", 1190189),
|
||||
NGA("Nigeria", 914161),
|
||||
NIU("Niue", 268),
|
||||
NFK("Norfolk Island", 41),
|
||||
PRK("North Korea", 122844),
|
||||
ZNC("Northern Cyprus", 3321),
|
||||
MNP("Northern Mariana Islands", 506),
|
||||
NOR("Norway", 323747),
|
||||
OMN("Oman", 310686),
|
||||
PAK("Pakistan", 877139),
|
||||
PLW("Palau", 484),
|
||||
PSE("Palestine", 6238),
|
||||
PAN("Panama", 75933),
|
||||
PNG("Papua New Guinea", 466628),
|
||||
PRY("Paraguay", 401148),
|
||||
PER("Peru", 1300636),
|
||||
PHL("Philippines", 297628),
|
||||
PCN("Pitcairn Islands", 54),
|
||||
POL("Poland", 311892),
|
||||
PRT("Portugal", 91999),
|
||||
PRI("Puerto Rico", 9019),
|
||||
QAT("Qatar", 11633),
|
||||
COG("Republic of the Congo", 344030),
|
||||
REU("Réunion", 2526),
|
||||
ROU("Romania", 238297),
|
||||
RUS("Russia", 16869756),
|
||||
RWA("Rwanda", 25449),
|
||||
BLM("Saint-Barthélemy", 21),
|
||||
MAF("Saint-Martin", 56),
|
||||
SHN("Saint Helena, Ascension and Tris", 412),
|
||||
KNA("Saint Kitts and Nevis", 269),
|
||||
LCA("Saint Lucia", 618),
|
||||
SPM("Saint Pierre and Miquelon", 227),
|
||||
VCT("Saint Vincent and the Grenadines", 400),
|
||||
WSM("Samoa", 2871),
|
||||
SMR("San Marino", 61),
|
||||
STP("São Tomé and Príncipe", 1009),
|
||||
SAU("Saudi Arabia", 1931654),
|
||||
SEN("Senegal", 198056),
|
||||
SRB("Serbia", 78247),
|
||||
SYC("Seychelles", 492),
|
||||
SLE("Sierra Leone", 73067),
|
||||
SGP("Singapore", 700),
|
||||
SVK("Slovakia", 49055),
|
||||
SVN("Slovenia", 19951),
|
||||
SLB("Solomon Islands", 28686),
|
||||
SOM("Somalia", 637672),
|
||||
ZAF("South Africa", 1224059),
|
||||
SGS("South Georgia and the South Sand", 4085),
|
||||
KOR("South Korea", 100721),
|
||||
SSD("South Sudan", 632186),
|
||||
ESP("Spain", 506617),
|
||||
LKA("Sri Lanka", 66267),
|
||||
SDN("Sudan", 1882758),
|
||||
SUR("Suriname", 147402),
|
||||
SJM("Svalbard and Jan Mayen", 59960),
|
||||
SWZ("Swaziland", 17451),
|
||||
SWE("Sweden", 448298),
|
||||
CHE("Switzerland", 41217),
|
||||
SYR("Syria", 187360),
|
||||
TWN("Taiwan", 36571),
|
||||
TJK("Tajikistan", 142330),
|
||||
TZA("Tanzania", 946695),
|
||||
THA("Thailand", 516901),
|
||||
TLS("Timor-Leste", 15012),
|
||||
TGO("Togo", 57272),
|
||||
TKL("Tokelau", 15),
|
||||
TON("Tonga", 762),
|
||||
TTO("Trinidad and Tobago", 5193),
|
||||
TUN("Tunisia", 155257),
|
||||
TUR("Turkey", 781794),
|
||||
TKM("Turkmenistan", 490273),
|
||||
TCA("Turks and Caicos Islands", 995),
|
||||
TUV("Tuvalu", 40),
|
||||
UGA("Uganda", 243045),
|
||||
UKR("Ukraine", 600816),
|
||||
ARE("United Arab Emirates", 71429),
|
||||
GBR("United Kingdom", 244732),
|
||||
USA("United States", 9477483),
|
||||
UMI("United States Minor Outlying Isl", 47),
|
||||
URY("Uruguay", 178103),
|
||||
UZB("Uzbekistan", 447894),
|
||||
VUT("Vanuatu", 12384),
|
||||
VAT("Vatican City", 1),
|
||||
VEN("Venezuela", 918303),
|
||||
VNM("Vietnam", 331121),
|
||||
VIR("Virgin Islands, U.S.", 364),
|
||||
WLF("Wallis and Futuna", 157),
|
||||
ESH("Western Sahara", 268500),
|
||||
YEM("Yemen", 454747),
|
||||
ZMB("Zambia", 755679),
|
||||
ZWE("Zimbabwe", 392107),
|
||||
;
|
||||
|
||||
override val code = this.name
|
||||
override val type = GeoLoc.LocType.COUNTRY
|
||||
override val children: MutableList<GeoLoc> = ArrayList()
|
||||
}
|
19
app/src/main/java/net/helcel/beans/countries/GeoLoc.kt
Normal file
19
app/src/main/java/net/helcel/beans/countries/GeoLoc.kt
Normal file
@ -0,0 +1,19 @@
|
||||
package net.helcel.beans.countries
|
||||
|
||||
|
||||
interface GeoLoc {
|
||||
|
||||
enum class LocType {
|
||||
WORLD, GROUP, CUSTOM_GROUP, COUNTRY, STATE;
|
||||
}
|
||||
|
||||
val code: String
|
||||
val fullName: String
|
||||
val area: Int
|
||||
|
||||
val type: LocType
|
||||
val children: List<GeoLoc>
|
||||
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
package net.helcel.beans.countries
|
||||
|
||||
import android.content.Context
|
||||
import net.helcel.beans.helper.Settings
|
||||
import java.io.BufferedReader
|
||||
import java.io.InputStreamReader
|
||||
|
||||
object GeoLocImporter {
|
||||
|
||||
fun importState(ctx: Context) {
|
||||
if (!Settings.isRegional(ctx)) {
|
||||
return
|
||||
}
|
||||
val fs = BufferedReader(InputStreamReader(ctx.assets.open("geoloc_state.txt")))
|
||||
while (fs.ready()) {
|
||||
val line = fs.readLine().split("|")
|
||||
val state = State(line[0], line[2], line[3].toInt())
|
||||
Country.entries.find { it.code == line[1] }?.children?.add(state)
|
||||
}
|
||||
}
|
||||
}
|
319
app/src/main/java/net/helcel/beans/countries/Group.kt
Normal file
319
app/src/main/java/net/helcel/beans/countries/Group.kt
Normal file
@ -0,0 +1,319 @@
|
||||
package net.helcel.beans.countries
|
||||
|
||||
import net.helcel.beans.countries.Country.*
|
||||
|
||||
enum class Group(override val fullName: String, override val children: List<GeoLoc>) : GeoLoc {
|
||||
|
||||
EEE(
|
||||
"Europe", listOf(
|
||||
ALB,
|
||||
AND,
|
||||
AUT,
|
||||
BLR,
|
||||
BEL,
|
||||
BIH,
|
||||
BGR,
|
||||
HRV,
|
||||
CYP,
|
||||
CZE,
|
||||
DNK,
|
||||
EST,
|
||||
FIN,
|
||||
FRA,
|
||||
DEU,
|
||||
GRC,
|
||||
HUN,
|
||||
ISL,
|
||||
IRL,
|
||||
ITA,
|
||||
KAZ,
|
||||
XKO,
|
||||
LVA,
|
||||
LIE,
|
||||
LTU,
|
||||
LUX,
|
||||
MLT,
|
||||
MDA,
|
||||
MCO,
|
||||
MNE,
|
||||
NLD,
|
||||
MKD,
|
||||
NOR,
|
||||
POL,
|
||||
PRT,
|
||||
ROU,
|
||||
RUS,
|
||||
SMR,
|
||||
SRB,
|
||||
SVK,
|
||||
SVN,
|
||||
ESP,
|
||||
SWE,
|
||||
CHE,
|
||||
UKR,
|
||||
GBR,
|
||||
VAT,
|
||||
XAD,
|
||||
)
|
||||
),
|
||||
ABB(
|
||||
"Asia", listOf(
|
||||
AFG,
|
||||
ARM,
|
||||
AZE,
|
||||
BHR,
|
||||
BGD,
|
||||
BTN,
|
||||
BRN,
|
||||
KHM,
|
||||
CHN,
|
||||
GEO,
|
||||
HKG,
|
||||
IND,
|
||||
IDN,
|
||||
IRN,
|
||||
IRQ,
|
||||
ISR,
|
||||
JPN,
|
||||
JOR,
|
||||
KWT,
|
||||
KGZ,
|
||||
LAO,
|
||||
LBN,
|
||||
MAC,
|
||||
MYS,
|
||||
MDV,
|
||||
MNG,
|
||||
MMR,
|
||||
NPL,
|
||||
PRK,
|
||||
OMN,
|
||||
PAK,
|
||||
PSE,
|
||||
PHL,
|
||||
QAT,
|
||||
SAU,
|
||||
SGP,
|
||||
KOR,
|
||||
LKA,
|
||||
SYR,
|
||||
TWN,
|
||||
TJK,
|
||||
THA,
|
||||
TLS,
|
||||
TUR,
|
||||
TKM,
|
||||
ARE,
|
||||
UZB,
|
||||
VNM,
|
||||
YEM,
|
||||
ZNC,
|
||||
)
|
||||
),
|
||||
FFF(
|
||||
"Africa", listOf(
|
||||
DZA,
|
||||
AGO,
|
||||
BDI,
|
||||
BEN,
|
||||
BWA,
|
||||
BFA,
|
||||
BDI,
|
||||
CPV,
|
||||
CMR,
|
||||
CAF,
|
||||
TCD,
|
||||
COM,
|
||||
COG,
|
||||
COD,
|
||||
CIV,
|
||||
DJI,
|
||||
EGY,
|
||||
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,
|
||||
SHN,
|
||||
SDN,
|
||||
TZA,
|
||||
TGO,
|
||||
TUN,
|
||||
UGA,
|
||||
COD,
|
||||
ZMB,
|
||||
ZWE,
|
||||
ESH,
|
||||
)
|
||||
),
|
||||
NNN(
|
||||
"North America", listOf(
|
||||
ABW,
|
||||
AIA,
|
||||
ATG,
|
||||
BHS,
|
||||
BRB,
|
||||
BLZ,
|
||||
BMU,
|
||||
VGB,
|
||||
CAN,
|
||||
CYM,
|
||||
CRI,
|
||||
CUB,
|
||||
CUW,
|
||||
DMA,
|
||||
DOM,
|
||||
SLV,
|
||||
GRL,
|
||||
GRD,
|
||||
GLP,
|
||||
GTM,
|
||||
HTI,
|
||||
HND,
|
||||
JAM,
|
||||
MTQ,
|
||||
MEX,
|
||||
MSR,
|
||||
ANT,
|
||||
CUW,
|
||||
NIC,
|
||||
PAN,
|
||||
PRI,
|
||||
KNA,
|
||||
LCA,
|
||||
MAF,
|
||||
SPM,
|
||||
VCT,
|
||||
TTO,
|
||||
TCA,
|
||||
USA,
|
||||
XCL,
|
||||
)
|
||||
),
|
||||
SRR(
|
||||
"South America", listOf(
|
||||
ARG,
|
||||
BOL,
|
||||
BRA,
|
||||
CHL,
|
||||
COL,
|
||||
ECU,
|
||||
FLK,
|
||||
GUF,
|
||||
GUY,
|
||||
PRY,
|
||||
PER,
|
||||
SUR,
|
||||
URY,
|
||||
VEN,
|
||||
)
|
||||
),
|
||||
UUU(
|
||||
"Oceania", listOf(
|
||||
ASM,
|
||||
AUS,
|
||||
COK,
|
||||
FJI,
|
||||
PYF,
|
||||
GUM,
|
||||
KIR,
|
||||
MHL,
|
||||
FSM,
|
||||
NRU,
|
||||
NCL,
|
||||
NZL,
|
||||
NIU,
|
||||
NFK,
|
||||
MNP,
|
||||
PLW,
|
||||
PNG,
|
||||
PCN,
|
||||
SLB,
|
||||
TKL,
|
||||
TON,
|
||||
TUV,
|
||||
VUT,
|
||||
WLF,
|
||||
)
|
||||
),
|
||||
|
||||
XXX(
|
||||
"Others", listOf(
|
||||
ATA, // Antarctica: not in any other region
|
||||
ALA,// Åland Islands: an autonomous region of Finland, but not a member of the EU or UN
|
||||
BES,// Bonaire, Sint Eustatius and Saba: special municipalities of the Netherlands in the Caribbean
|
||||
BVT,// Bouvet Island: an uninhabited territory of Norway in the South Atlantic
|
||||
IOT,// British Indian Ocean Territory: a British overseas territory in the Indian Ocean
|
||||
CXR,// Christmas Island: an Australian external territory in the Indian Ocean
|
||||
CCK,// Cocos (Keeling) Islands: an Australian external territory in the Indian Ocean
|
||||
FRO,// Faroe Islands: an autonomous region of Denmark
|
||||
ATF,// French Southern and Antarctic Lands: a territory of France located in the southern Indian Ocean
|
||||
GIB,// Gibraltar: a British overseas territory located at the southern tip of the Iberian Peninsula
|
||||
GGY,// Guernsey: a British Crown dependency in the English Channel
|
||||
HMD,// Heard Island and McDonald Islands: an uninhabited Australian external territory in the southern Indian Ocean
|
||||
IMN,// Isle of Man: a British Crown dependency located in the Irish Sea
|
||||
JEY,// Jersey: a British Crown dependency located in the English Channel
|
||||
BLM,// Saint Barthélemy: an overseas collectivity of France in the Caribbean
|
||||
WSM, // Samoa: an independent island nation in the South Pacific
|
||||
SXM, // Sint Maarten: a constituent country of the Kingdom of the Netherlands in the Caribbean
|
||||
SGS, // South Georgia and the South Sandwich Islands: a British overseas territory in the southern Atlantic Ocean
|
||||
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
|
||||
VIR, // United States Virgin Islands: an unincorporated territory of the United States in the Caribbean
|
||||
)
|
||||
),
|
||||
|
||||
ZZZ(
|
||||
"Undefined", listOf(
|
||||
)
|
||||
),
|
||||
|
||||
|
||||
NTT(
|
||||
"NATO", listOf(
|
||||
ALB, BEL, BGR, CAN, HRV, CZE, DNK, EST, FRA, DEU, GRC, HUN, ISL, ITA, LVA, LTU, LUX,
|
||||
MNE, NLD, NOR, POL, PRT, ROU, SVK, SVN, ESP, TUR, GBR, USA
|
||||
)
|
||||
);
|
||||
|
||||
override val area = children.fold(0) { acc, i ->
|
||||
acc + i.area
|
||||
}
|
||||
|
||||
private val isInWorld =
|
||||
listOf("EEE", "ABB", "FFF", "NNN", "SRR", "UUU", "XXX").contains(this.name)
|
||||
|
||||
override val type = if (isInWorld) GeoLoc.LocType.GROUP else GeoLoc.LocType.CUSTOM_GROUP
|
||||
override val code = this.name
|
||||
|
||||
|
||||
}
|
8
app/src/main/java/net/helcel/beans/countries/State.kt
Normal file
8
app/src/main/java/net/helcel/beans/countries/State.kt
Normal file
@ -0,0 +1,8 @@
|
||||
package net.helcel.beans.countries
|
||||
|
||||
class State(override val code: String, override val fullName: String, override val area: Int) :
|
||||
GeoLoc {
|
||||
|
||||
override val children = emptyList<GeoLoc>()
|
||||
override val type = GeoLoc.LocType.STATE
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package net.helcel.beendroid.countries
|
||||
package net.helcel.beans.countries
|
||||
|
||||
import net.helcel.beendroid.countries.Group.*
|
||||
import net.helcel.beans.countries.Group.*
|
||||
|
||||
enum class World(override val fullName: String, override val children: List<GeoLoc>) : GeoLoc {
|
||||
|
||||
@ -13,7 +13,7 @@ enum class World(override val fullName: String, override val children: List<GeoL
|
||||
}
|
||||
|
||||
|
||||
override val type: LocType = LocType.WORLD
|
||||
override val type = GeoLoc.LocType.WORLD
|
||||
override val code = this.name
|
||||
|
||||
|
51
app/src/main/java/net/helcel/beans/helper/Data.kt
Normal file
51
app/src/main/java/net/helcel/beans/helper/Data.kt
Normal file
@ -0,0 +1,51 @@
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.countries.GeoLoc
|
||||
import java.util.HashMap
|
||||
|
||||
object Data {
|
||||
|
||||
|
||||
var visits : Visits = Visits(0, HashMap())
|
||||
var groups : Groups = Groups(0,HashMap())
|
||||
|
||||
var selected_group : Groups.Group? = null
|
||||
var selected_geoloc: GeoLoc? = null
|
||||
|
||||
private val groupsSerial = Groups.GroupsSerializer()
|
||||
private val visitsSerial = Visits.VisitsSerializer()
|
||||
|
||||
private lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
fun loadData(ctx: Context, id:Int) {
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
|
||||
val groupsString = sharedPreferences.getString("groups_$id",null)
|
||||
val visitsString = sharedPreferences.getString("visits_$id",null)
|
||||
|
||||
groups = if(!groupsString.isNullOrEmpty()) groupsSerial.readFrom(groupsString.byteInputStream()) else groupsSerial.defaultValue
|
||||
visits = if(!visitsString.isNullOrEmpty()) visitsSerial.readFrom(visitsString.byteInputStream()) else visitsSerial.defaultValue
|
||||
|
||||
// Add default group "Visited" with app's color if there is no group already
|
||||
if (groups.size() == 0) {
|
||||
groups.setGroup(1, "Visited", ColorDrawable(ContextCompat.getColor(ctx, R.color.blue)))
|
||||
saveData()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun saveData() {
|
||||
if(groups.id != visits.id) return
|
||||
val id = groups.id
|
||||
val editor = sharedPreferences.edit()
|
||||
editor.putString("groups_$id", groupsSerial.writeTo(groups))
|
||||
editor.putString("visits_$id", visitsSerial.writeTo(visits))
|
||||
editor.apply()
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package net.helcel.beendroid.helper
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
@ -22,8 +23,8 @@ class Groups(val id: Int, private val grps: HashMap<Int,Group>) {
|
||||
grps.remove(key)
|
||||
}
|
||||
|
||||
fun getGroupFromKey(key: Int): Group? {
|
||||
return grps.getOrDefault(key,null)
|
||||
fun getGroupFromKey(key: Int): Group {
|
||||
return grps.getOrDefault(key,EmptyGroup())
|
||||
}
|
||||
|
||||
fun genKey(): Int {
|
||||
@ -47,15 +48,17 @@ class Groups(val id: Int, private val grps: HashMap<Int,Group>) {
|
||||
|
||||
fun getGroupFromPos(pos: Int): Pair<Int,Group> {
|
||||
val key = grps.keys.toList()[pos]
|
||||
return Pair(key,getGroupFromKey(key)!!)
|
||||
return Pair(key,getGroupFromKey(key))
|
||||
}
|
||||
|
||||
fun findGroupPos(key: Int): Int {
|
||||
return grps.keys.toList().indexOf(key)
|
||||
}
|
||||
|
||||
class EmptyGroup: Group(0,"")
|
||||
|
||||
@Serializable
|
||||
class Group(val key: Int, val name: String, @Serializable(with = ColorDrawableSerializer::class) val color: ColorDrawable)
|
||||
open class Group(val key: Int, val name: String, @Serializable(with = ColorDrawableSerializer::class) val color: ColorDrawable = ColorDrawable(Color.TRANSPARENT))
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@Serializer(Groups::class)
|
40
app/src/main/java/net/helcel/beans/helper/Settings.kt
Normal file
40
app/src/main/java/net/helcel/beans/helper/Settings.kt
Normal file
@ -0,0 +1,40 @@
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.PreferenceManager
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.fragment.SettingsFragment
|
||||
|
||||
object Settings {
|
||||
|
||||
private lateinit var sp: SharedPreferences
|
||||
fun start(ctx: Context) {
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
SettingsFragment.setTheme(
|
||||
ctx, sp.getString(ctx.getString(R.string.key_theme), ctx.getString(R.string.system))
|
||||
)
|
||||
}
|
||||
|
||||
fun isSingleGroup(ctx: Context): Boolean {
|
||||
return !getBooleanValue(
|
||||
ctx,
|
||||
sp.getString(ctx.getString(R.string.key_group), ctx.getString(R.string.off))
|
||||
)
|
||||
}
|
||||
|
||||
fun isRegional(ctx: Context): Boolean {
|
||||
return getBooleanValue(
|
||||
ctx,
|
||||
sp.getString(ctx.getString(R.string.key_regional), ctx.getString(R.string.off))
|
||||
)
|
||||
}
|
||||
|
||||
private fun getBooleanValue(ctx: Context, key: String?): Boolean {
|
||||
return when (key) {
|
||||
ctx.getString(R.string.on) -> true
|
||||
ctx.getString(R.string.off) -> false
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
37
app/src/main/java/net/helcel/beans/helper/Theme.kt
Normal file
37
app/src/main/java/net/helcel/beans/helper/Theme.kt
Normal file
@ -0,0 +1,37 @@
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.util.TypedValue
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.graphics.ColorUtils
|
||||
|
||||
object Theme {
|
||||
fun colorWrapper(ctx: Context, res: Int): ColorDrawable {
|
||||
val colorPrimaryTyped = TypedValue()
|
||||
ctx.theme.resolveAttribute(res, colorPrimaryTyped, true)
|
||||
return ColorDrawable(colorPrimaryTyped.data)
|
||||
}
|
||||
|
||||
fun colorToHex6(c: ColorDrawable): String {
|
||||
return '#' + colorToHex8(c).substring(3)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun colorToHex8(c: ColorDrawable): String {
|
||||
return '#' + c.color.toHexString()
|
||||
}
|
||||
|
||||
fun createActionBar(ctx: AppCompatActivity, title: String) {
|
||||
ctx.supportActionBar?.setBackgroundDrawable(colorWrapper(ctx, android.R.attr.colorPrimary))
|
||||
ctx.supportActionBar?.title = title
|
||||
ctx.supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
}
|
||||
|
||||
fun getContrastColor(color: Int): Int {
|
||||
val whiteContrast = ColorUtils.calculateContrast(Color.WHITE, color)
|
||||
val blackContrast = ColorUtils.calculateContrast(Color.BLACK, color)
|
||||
return if (whiteContrast > blackContrast) Color.WHITE else Color.BLACK
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package net.helcel.beendroid.helper
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import kotlinx.serialization.KSerializer
|
@ -1,10 +1,10 @@
|
||||
package net.helcel.beendroid.helper
|
||||
package net.helcel.beans.helper
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Serializer
|
||||
import kotlinx.serialization.json.Json
|
||||
import net.helcel.beendroid.countries.GeoLoc
|
||||
import net.helcel.beans.countries.GeoLoc
|
||||
import java.io.InputStream
|
||||
|
||||
|
||||
@ -27,11 +27,18 @@ class Visits(val id: Int, private val locs: HashMap<String,Int>) {
|
||||
fun getVisited(key: GeoLoc): Int {
|
||||
return locs.getOrDefault(key.code,0)
|
||||
}
|
||||
private fun getVisited(key: String): Int {
|
||||
return locs.getOrDefault(key,0)
|
||||
}
|
||||
|
||||
fun countVisited(key: Int): Int {
|
||||
return locs.filter { it.value == key }.size
|
||||
}
|
||||
|
||||
fun getVisitedByValue(): Map<Int, List<String>> {
|
||||
return locs.keys.groupBy { getVisited(it) }
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@Serializer(Visits::class)
|
||||
class VisitsSerializer {
|
51
app/src/main/java/net/helcel/beans/svg/CSSWrapper.kt
Normal file
51
app/src/main/java/net/helcel/beans/svg/CSSWrapper.kt
Normal file
@ -0,0 +1,51 @@
|
||||
package net.helcel.beans.svg
|
||||
|
||||
import android.content.Context
|
||||
import net.helcel.beans.countries.World
|
||||
import net.helcel.beans.helper.Data.groups
|
||||
import net.helcel.beans.helper.Data.visits
|
||||
import net.helcel.beans.helper.Theme.colorToHex6
|
||||
import net.helcel.beans.helper.Theme.colorWrapper
|
||||
|
||||
class CSSWrapper(ctx: Context) {
|
||||
|
||||
private val colorForeground: String =
|
||||
colorToHex6(colorWrapper(ctx, android.R.attr.panelColorBackground))
|
||||
private val colorBackground: String =
|
||||
colorToHex6(colorWrapper(ctx, android.R.attr.colorBackground))
|
||||
|
||||
private val baseCSS: String
|
||||
private var customCSS: String = ""
|
||||
|
||||
init {
|
||||
|
||||
val www = World.WWW.children.joinToString(",") { "#${it.code}2" }
|
||||
val ccc =
|
||||
World.WWW.children.joinToString(",") { itt -> itt.children.joinToString(",") { "#${it.code}2" } }
|
||||
baseCSS =
|
||||
"svg{fill:$colorForeground;stroke:$colorBackground;stroke-width:0.01;}" +
|
||||
"$www,$ccc{stroke-width:0.1;fill:none}"
|
||||
refresh()
|
||||
}
|
||||
|
||||
fun refresh() {
|
||||
customCSS = visits.getVisitedByValue().map { (k, v) ->
|
||||
if (groups.getGroupFromKey(k).key == 0)
|
||||
""
|
||||
else
|
||||
v.joinToString(",") { "#${it}1,#${it}" } + "{fill:${
|
||||
colorToHex6(
|
||||
groups.getGroupFromKey(
|
||||
k
|
||||
).color
|
||||
)
|
||||
};}"
|
||||
}.joinToString("")
|
||||
}
|
||||
|
||||
fun get(): String {
|
||||
refresh()
|
||||
return baseCSS + customCSS
|
||||
}
|
||||
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
package net.helcel.beendroid.svg
|
||||
package net.helcel.beans.svg
|
||||
|
||||
import android.content.Context
|
||||
import com.caverock.androidsvg.SVG
|
||||
|
||||
class SVGWrapper(ctx: Context) {
|
||||
|
||||
private var svg: SVG?= SVG.getFromAsset(ctx.assets,"mercator0.svg")
|
||||
private var svg: SVG? = SVG.getFromAsset(ctx.assets, "mercator01.svg")
|
||||
|
||||
fun get(): SVG? {
|
||||
return svg
|
||||
}
|
||||
|
||||
}
|
@ -1,145 +0,0 @@
|
||||
package net.helcel.beendroid.activity.adapter
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.checkbox.MaterialCheckBox
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.activity.fragment.EditPlaceColorFragment
|
||||
import net.helcel.beendroid.countries.GeoLoc
|
||||
import net.helcel.beendroid.helper.colorWrapper
|
||||
import net.helcel.beendroid.helper.groups
|
||||
import net.helcel.beendroid.helper.saveData
|
||||
import net.helcel.beendroid.helper.selected_geoloc
|
||||
import net.helcel.beendroid.helper.selected_group
|
||||
import net.helcel.beendroid.helper.visits
|
||||
class GeolocListAdapter(
|
||||
private val ctx: FragmentActivity, l: List<GeoLoc>) : RecyclerView.Adapter<GeolocListAdapter.FoldingListViewHolder>() {
|
||||
|
||||
private val cg : MutableMap<GeoLoc,Boolean> = l.sortedBy { it.fullName }.fold(LinkedHashMap()) { acc, e ->
|
||||
acc[e] = false
|
||||
acc
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): FoldingListViewHolder {
|
||||
val view: View = LayoutInflater
|
||||
.from(viewGroup.context)
|
||||
.inflate(R.layout.item_list_geoloc, viewGroup, false)
|
||||
return FoldingListViewHolder(ctx, view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: FoldingListViewHolder, position: Int) {
|
||||
val el = cg.toList()[position]
|
||||
|
||||
holder.bind(el)
|
||||
holder.addListeners(el) {
|
||||
if (!el.first.isEnd) {
|
||||
cg[el.first] = !el.second
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
!el.first.isEnd
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return cg.size
|
||||
}
|
||||
|
||||
class FoldingListViewHolder(private val ctx: FragmentActivity, itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
private val textView: TextView = itemView.findViewById(R.id.textView)
|
||||
private val progressView: TextView = itemView.findViewById(R.id.name)
|
||||
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)
|
||||
init {
|
||||
list.layoutManager = LinearLayoutManager(ctx, RecyclerView.VERTICAL, false)
|
||||
list.itemAnimator = null //TODO: Fix slow recycler expansion
|
||||
}
|
||||
|
||||
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
val statsPref = sharedPreferences.getString(ctx.getString(R.string.key_stats), ctx.getString(R.string.counters))
|
||||
|
||||
fun bind(el: Pair<GeoLoc, Boolean>) {
|
||||
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
|
||||
|
||||
textView.text = el.first.fullName
|
||||
if (el.first.children.isEmpty()) {
|
||||
textView.backgroundTintList = ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.colorBackground).color)
|
||||
} else {
|
||||
textView.setTypeface(null, Typeface.BOLD)
|
||||
|
||||
val numerator = el.first.children.map { visits!!.getVisited(it) != 0 }.count { it }
|
||||
val denominator = el.first.children.size
|
||||
println(100 * (numerator / denominator.toFloat()).toInt())
|
||||
|
||||
progressView.text = when (statsPref) {
|
||||
ctx.getString(R.string.percentages) -> ctx.getString(R.string.percentage, (100 * (numerator.toFloat() / denominator.toFloat())).toInt())
|
||||
else -> ctx.getString(R.string.rate, numerator, denominator)
|
||||
}
|
||||
|
||||
textView.backgroundTintList = ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.panelColorBackground).color).withAlpha(128)
|
||||
|
||||
list.adapter = GeolocListAdapter(ctx, el.first.children)
|
||||
textView.parent.parent.requestChildFocus(textView, textView)
|
||||
}
|
||||
refreshCheck(el.first)
|
||||
}
|
||||
|
||||
fun addListeners(el: Pair<GeoLoc, Boolean>, expandLambda: () -> Boolean) {
|
||||
textView.setOnClickListener { expandLambda() }
|
||||
checkBox.setOnClickListener {
|
||||
selected_geoloc = el.first
|
||||
if (groups!!.size() != 1) {
|
||||
val dialogFragment = EditPlaceColorFragment(this)
|
||||
selected_group = null
|
||||
dialogFragment.show(ctx.supportFragmentManager, "AddColorDialogFragment")
|
||||
} else {
|
||||
if (checkBox.isChecked) {
|
||||
// If one has just checked the box (assign unique group)
|
||||
selected_group = groups!!.getUniqueEntry()!!
|
||||
onColorDialogDismiss(false)
|
||||
} else {
|
||||
// If one has just unchecked the box (unassign unique group)
|
||||
selected_group = null
|
||||
onColorDialogDismiss(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onColorDialogDismiss(clear: Boolean) {
|
||||
if(clear){
|
||||
visits!!.setVisited(selected_geoloc!!,0)
|
||||
saveData()
|
||||
}
|
||||
if(selected_group!=null && selected_geoloc!=null) {
|
||||
visits!!.setVisited(selected_geoloc!!, selected_group!!.key)
|
||||
saveData()
|
||||
}
|
||||
selected_geoloc?.let { refreshCheck(it) }
|
||||
selected_geoloc = null
|
||||
selected_group = null
|
||||
}
|
||||
|
||||
private fun refreshCheck(geoLoc: GeoLoc){
|
||||
val col = groups!!.getGroupFromKey(visits!!.getVisited(geoLoc))?.color?.color?:Color.GRAY
|
||||
checkBox.checkedState =
|
||||
if (visits!!.getVisited(geoLoc)!=0) MaterialCheckBox.STATE_CHECKED
|
||||
else if (geoLoc.children.any { visits!!.getVisited(it)!=0 }) MaterialCheckBox.STATE_INDETERMINATE
|
||||
else MaterialCheckBox.STATE_UNCHECKED
|
||||
|
||||
checkBox.buttonTintList = ColorStateList(arrayOf(
|
||||
intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)),
|
||||
intArrayOf(col, col))
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,93 +0,0 @@
|
||||
package net.helcel.beendroid.activity.adapter
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.activity.fragment.EditGroupAddFragment
|
||||
import net.helcel.beendroid.helper.Groups
|
||||
import net.helcel.beendroid.helper.getContrastColor
|
||||
import net.helcel.beendroid.helper.groups
|
||||
import net.helcel.beendroid.helper.saveData
|
||||
import net.helcel.beendroid.helper.selected_group
|
||||
import net.helcel.beendroid.helper.visits
|
||||
|
||||
class GroupListAdapter(private val activity: FragmentActivity, private val selectDialog: DialogFragment?) : RecyclerView.Adapter<GroupListAdapter.GroupViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) : GroupViewHolder {
|
||||
val view : View = LayoutInflater.from(parent.context).inflate(R.layout.item_list_group, parent, false)
|
||||
return GroupViewHolder(view, activity, selectDialog)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: GroupViewHolder, pos: Int) {
|
||||
holder.bind(groups!!.getGroupFromPos(pos))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return groups!!.size()
|
||||
}
|
||||
|
||||
inner class GroupViewHolder(itemView: View, private val activity: FragmentActivity, private val selectDialog: DialogFragment?) : RecyclerView.ViewHolder(itemView) {
|
||||
private val color: Button = itemView.findViewById(R.id.group_color)
|
||||
private val entries: TextView = itemView.findViewById(R.id.name)
|
||||
|
||||
fun bind(entry: Pair<Int, Groups.Group>) {
|
||||
color.text = entry.second.name
|
||||
val entryColor = entry.second.color.color
|
||||
val contrastEntryColor = getContrastColor(entryColor)
|
||||
color.setBackgroundColor(entryColor)
|
||||
color.setTextColor(contrastEntryColor)
|
||||
entries.setTextColor(contrastEntryColor)
|
||||
entries.text = visits!!.countVisited(entry.first).toString()
|
||||
|
||||
color.setOnClickListener {
|
||||
if (selectDialog == null) {
|
||||
val dialogFragment = EditGroupAddFragment(entry.first) {
|
||||
val newEntry = groups!!.getGroupFromKey(entry.first)!!
|
||||
color.text = newEntry.name
|
||||
val newEntryColor = newEntry.color.color
|
||||
val contrastNewEntryColor = getContrastColor(newEntryColor)
|
||||
color.setBackgroundColor(newEntryColor)
|
||||
color.setTextColor(contrastNewEntryColor)
|
||||
entries.setTextColor(contrastNewEntryColor)
|
||||
entries.text = "0"
|
||||
}
|
||||
dialogFragment.show(
|
||||
activity.supportFragmentManager,
|
||||
"AddColorDialogFragment"
|
||||
)
|
||||
} else {
|
||||
selected_group = entry.second
|
||||
selectDialog.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
color.setOnLongClickListener {
|
||||
if (selectDialog == null) {
|
||||
MaterialAlertDialogBuilder(activity)
|
||||
.setMessage(R.string.delete_group)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
// Remove all countries belonging to that group
|
||||
val key = entry.first
|
||||
visits!!.deleteVisited(key)
|
||||
|
||||
// Delete the group
|
||||
val pos = groups!!.findGroupPos(key)
|
||||
groups!!.deleteGroup(key)
|
||||
saveData()
|
||||
this@GroupListAdapter.notifyItemRemoved(pos)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ -> }
|
||||
.show()
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package net.helcel.beendroid.activity.adapter
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import net.helcel.beendroid.activity.fragment.EditGroupFragment
|
||||
import net.helcel.beendroid.activity.fragment.EditPlaceFragment
|
||||
|
||||
private val tabArray = arrayOf(
|
||||
"Places",
|
||||
"Groups",
|
||||
)
|
||||
class ViewPagerAdapter (fragmentManager: FragmentManager, lifecycle: Lifecycle) :
|
||||
FragmentStateAdapter(fragmentManager, lifecycle) {
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return tabArray.size
|
||||
}
|
||||
|
||||
fun getTabs() : Array<String> {
|
||||
return tabArray
|
||||
}
|
||||
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
when (position) {
|
||||
0 -> return EditPlaceFragment()
|
||||
1 -> return EditGroupFragment()
|
||||
}
|
||||
return EditPlaceFragment()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,31 +0,0 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import net.helcel.beendroid.databinding.FragmentAboutBinding
|
||||
|
||||
class AboutFragment: Fragment() {
|
||||
private var _binding: FragmentAboutBinding? = null
|
||||
|
||||
// This property is only valid between onCreateView and
|
||||
// onDestroyView.
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentAboutBinding.inflate(inflater, container, false)
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beendroid.activity.adapter.GroupListAdapter
|
||||
import net.helcel.beendroid.databinding.FragmentEditGroupsBinding
|
||||
import net.helcel.beendroid.helper.groups
|
||||
|
||||
class EditGroupFragment : Fragment() {
|
||||
private var _binding: FragmentEditGroupsBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
private lateinit var listadapt : GroupListAdapter
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentEditGroupsBinding.inflate(inflater, container, false)
|
||||
|
||||
listadapt = GroupListAdapter(requireActivity(),null)
|
||||
binding.addGroup.setOnClickListener {
|
||||
val dialogFragment = EditGroupAddFragment {
|
||||
listadapt.notifyItemInserted(groups!!.findGroupPos(it))
|
||||
}
|
||||
dialogFragment.show(requireActivity().supportFragmentManager, "AddColorDialogFragment")
|
||||
}
|
||||
|
||||
binding.list.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
|
||||
binding.list.adapter = listadapt
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.activity.adapter.GeolocListAdapter
|
||||
import net.helcel.beendroid.activity.adapter.GroupListAdapter
|
||||
|
||||
|
||||
class EditPlaceColorFragment(private val parent: GeolocListAdapter.FoldingListViewHolder) : DialogFragment() {
|
||||
private lateinit var listAdapt : GroupListAdapter
|
||||
private lateinit var list : RecyclerView
|
||||
private var clear : Boolean = false
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val builder = AlertDialog.Builder(
|
||||
requireActivity()
|
||||
)
|
||||
val inflater = requireActivity().layoutInflater
|
||||
val view: View = inflater.inflate(R.layout.fragment_edit_places_colors, null)
|
||||
|
||||
val dialog = builder.setView(view).setNegativeButton("Clear") { dialogInterface: DialogInterface, i: Int -> clear = true }
|
||||
.create()
|
||||
listAdapt = GroupListAdapter(requireActivity(),this)
|
||||
list = view.findViewById(R.id.groups_color)!!
|
||||
list.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
|
||||
list.adapter = listAdapt
|
||||
|
||||
return dialog
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
parent.onColorDialogDismiss(clear)
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package net.helcel.beendroid.activity.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.helcel.beendroid.activity.adapter.GeolocListAdapter
|
||||
import net.helcel.beendroid.countries.World
|
||||
import net.helcel.beendroid.databinding.FragmentEditPlacesBinding
|
||||
|
||||
class EditPlaceFragment : Fragment() {
|
||||
private var _binding: FragmentEditPlacesBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentEditPlacesBinding.inflate(inflater, container, false)
|
||||
|
||||
binding.list.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
|
||||
binding.list.adapter = GeolocListAdapter(requireActivity(), World.WWW.children)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
}
|
@ -1,266 +0,0 @@
|
||||
package net.helcel.beendroid.countries
|
||||
|
||||
import net.helcel.beendroid.countries.State.*
|
||||
|
||||
enum class Country(override val fullName: String, override val area : Int, override val children : List<GeoLoc>) : GeoLoc {
|
||||
AFG("Afghanistan", 652864, listOf(AFG_BD, AFG_BDG, AFG_BGL, AFG_BAL, AFG_BAM, AFG_DAY, AFG_FRA, AFG_FYB, AFG_GHA, AFG_GHO, AFG_HEL, AFG_HER, AFG_JOW, AFG_KAB, AFG_KAN, AFG_KAP, AFG_KHO, AFG_KNR, AFG_KDZ, AFG_LAG, AFG_LOG, AFG_NAN, AFG_NIM, AFG_NUR, AFG_PAN, AFG_PAR, AFG_PIA, AFG_PRI, AFG_SAM, AFG_SAR, AFG_SHA, AFG_SOL, AFG_URO, AFG_WAR, AFG_ZAB)),
|
||||
ALA("Åland Islands", 1580, emptyList()),
|
||||
ALB("Albania", 28748, listOf(ALB_BR, ALB_BU, ALB_DI, ALB_EL, ALB_FR, ALB_GJ, ALB_KO, ALB_KU, ALB_LE, ALB_SH, ALB_TR, ALB_VL)),
|
||||
DZA("Algeria", 2381741, listOf(DZA_01, DZA_44, DZA_46, DZA_16, DZA_23, DZA_05, DZA_07, DZA_02, DZA_06, DZA_08, DZA_09, DZA_10, DZA_34, DZA_35, DZA_25, DZA_17, DZA_32, DZA_39, DZA_36, DZA_47, DZA_24, DZA_33, DZA_18, DZA_40, DZA_03, DZA_29, DZA_26, DZA_43, DZA_27, DZA_28, DZA_45, DZA_31, DZA_30, DZA_04, DZA_48, DZA_20, DZA_19, DZA_22, DZA_21, DZA_41, DZA_12, DZA_14, DZA_37, DZA_42, DZA_38, DZA_15)),
|
||||
ASM("American Samoa", 199000, emptyList()),
|
||||
AND("Andorra", 468765, emptyList()),
|
||||
AGO("Angola", 1246700, listOf(AGO_BGO, AGO_BGU, AGO_BIE, AGO_CAB, AGO_CCU, AGO_CNO, AGO_CUS, AGO_CNN, AGO_HUA, AGO_HUI, AGO_LNO, AGO_LSU, AGO_LUA, AGO_MAL, AGO_MOX, AGO_NAM, AGO_UIG, AGO_ZAI)),
|
||||
AIA("Anguilla", 96, emptyList()),
|
||||
ATA("Antarctica", 14000000, emptyList()),
|
||||
ATG("Antigua and Barbuda", 442, emptyList()),
|
||||
ARG("Argentina", 2780400, listOf(ARG_BA, ARG_C, ARG_K, ARG_H, ARG_U, ARG_X, ARG_W, ARG_E, ARG_P, ARG_Y, ARG_L, ARG_F, ARG_M, ARG_N, ARG_Q, ARG_R, ARG_A, ARG_J, ARG_D, ARG_Z, ARG_S, ARG_G, ARG_V, ARG_T)),
|
||||
ARM("Armenia", 29743, listOf(ARM_AR, ARM_ARA, ARM_AV, ARM_G, ARM_LO, ARM_KOT, ARM_SH, ARM_SU, ARM_TV, ARM_VA, ARM_ER)),
|
||||
ABW("Aruba", 180, emptyList()),
|
||||
AUS("Australia", 7692024, listOf(AUS_ACT, AUS_NSW, AUS_NT, AUS_QLD, AUS_SA, AUS_TAS, AUS_VIC, AUS_WA)),
|
||||
AUT("Austria", 83879, listOf(AUT_B, AUT_K, AUT_NO, AUT_OO, AUT_S, AUT_ST, AUT_T, AUT_V, AUT_W)),
|
||||
AZE("Azerbaijan", 86600, listOf()),
|
||||
BHS("Bahamas", 13878, emptyList()),
|
||||
BHR("Bahrain", 778, emptyList()),
|
||||
BGD("Bangladesh", 143998, emptyList()),
|
||||
BRB("Barbados", 430, emptyList()),
|
||||
BLR("Belarus", 207595, emptyList()),
|
||||
BEL("Belgium", 30528, listOf(BEL_BRU, BEL_VAN, BEL_WAL)),
|
||||
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, listOf(FRA_01, FRA_02, FRA_03, FRA_04, FRA_05, FRA_06, FRA_07, FRA_08, FRA_09, FRA_10, FRA_11, FRA_12, FRA_13, FRA_14, FRA_15, FRA_16, FRA_17, FRA_18, FRA_19, FRA_21, FRA_22, FRA_23, FRA_24, FRA_25, FRA_26, FRA_27, FRA_28, FRA_29, FRA_2A, FRA_2B, FRA_30, FRA_31, FRA_32, FRA_33, FRA_34, FRA_35, FRA_36, FRA_37, FRA_38, FRA_39, FRA_40, FRA_41, FRA_42, FRA_43, FRA_44, FRA_45, FRA_46, FRA_47, FRA_48, FRA_49, FRA_50, FRA_51, FRA_52, FRA_53, FRA_54, FRA_55, FRA_56, FRA_57, FRA_58, FRA_59, FRA_60, FRA_61, FRA_62, FRA_63, FRA_64, FRA_65, FRA_66, FRA_67, FRA_68, FRA_69, FRA_70, FRA_71, FRA_72, FRA_73, FRA_74, FRA_75, FRA_76, FRA_77, FRA_78, FRA_79, FRA_80, FRA_81, FRA_82, FRA_83, FRA_84, FRA_85, FRA_86, FRA_87, FRA_88, FRA_89, FRA_90, FRA_91, FRA_92, FRA_93, FRA_94, FRA_95, FRA_971, FRA_972, FRA_973, FRA_974, FRA_976)),
|
||||
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_BW, 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, listOf(ITA_AG, ITA_AL, ITA_AN, ITA_AO, ITA_AR, ITA_AP, ITA_AT, ITA_AV, ITA_BA, ITA_BT, ITA_BL, ITA_BN, ITA_BG, ITA_BI, ITA_BO, ITA_BZ, ITA_BS, ITA_BR, ITA_CA, ITA_CL, ITA_CB, ITA_CI, ITA_CE, ITA_CT, ITA_CZ, ITA_CH, ITA_CO, ITA_CS, ITA_CR, ITA_KR, ITA_CN, ITA_EN, ITA_FM, ITA_FE, ITA_FI, ITA_FG, ITA_FC, ITA_FR, ITA_GE, ITA_GO, ITA_GR, ITA_IM, ITA_IS, ITA_SP, ITA_AQ, ITA_LT, ITA_LE, ITA_LC, ITA_LI, ITA_LO, ITA_LU, ITA_MC, ITA_MN, ITA_MS, ITA_MT, ITA_ME, ITA_MI, ITA_MO, ITA_MB, ITA_NA, ITA_NO, ITA_NU, ITA_OT, ITA_OR, ITA_PD, ITA_PA, ITA_PR, ITA_PV, ITA_PG, ITA_PS, ITA_PE, ITA_PC, ITA_PI, ITA_PT, ITA_PN, ITA_PZ, ITA_PO, ITA_RG, ITA_RA, ITA_RC, ITA_RE, ITA_RI, ITA_RN, ITA_RO, ITA_SA, ITA_SS, ITA_SV, ITA_SI, ITA_SR, ITA_SO, ITA_TA, ITA_TE, ITA_TR, ITA_TO, ITA_TP, ITA_TN, ITA_TV, ITA_TS, ITA_UD, ITA_VA, ITA_VE, ITA_VB, ITA_VC, ITA_VI, ITA_VT)),
|
||||
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, listOf(USA_AL, USA_AK, USA_AZ, USA_AR, USA_CA, USA_CO, USA_CT, USA_DE, USA_FL, USA_GA, USA_HI, USA_ID, USA_IL, USA_IN, USA_IA, USA_KS, USA_KY, USA_LA, USA_ME, USA_MD, USA_MA, USA_MI, USA_MN, USA_MS, USA_MO, USA_MT, USA_NE, USA_NV, USA_NH, USA_NJ, USA_NM, USA_NY, USA_NC, USA_ND, USA_OH, USA_OK, USA_OR, USA_PA, USA_RI, USA_SC, USA_SD, USA_TN, USA_TX, USA_UT, USA_VT, USA_VA, USA_WA, USA_WV, USA_WI, USA_WY)),
|
||||
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
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
package net.helcel.beendroid.countries
|
||||
|
||||
enum class LocType {
|
||||
WORLD, GROUP, CUSTOM_GROUP, COUNTRY, STATE;
|
||||
}
|
||||
|
||||
interface GeoLoc {
|
||||
val code : String
|
||||
val fullName : String
|
||||
val area : Int
|
||||
|
||||
val type : LocType
|
||||
val children : List<GeoLoc>
|
||||
|
||||
val isEnd: Boolean
|
||||
get() = children.isEmpty() || type == LocType.STATE
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
package net.helcel.beendroid.countries
|
||||
|
||||
import net.helcel.beendroid.countries.Country.*
|
||||
enum class Group(override val fullName: String, override val children: List<Country>) : GeoLoc {
|
||||
|
||||
EEE("Europe",listOf(
|
||||
ALB, AND, AUT, BLR, BEL, BIH, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA,
|
||||
DEU, GRC, HUN, ISL, IRL, ITA, KAZ, XKO, LVA, LIE, LTU, LUX, MLT, MDA,
|
||||
MCO, MNE, NLD, MKD, NOR, POL, PRT, ROU, RUS, SMR, SRB, SVK, SVN, ESP,
|
||||
SWE, CHE, UKR, GBR, VAT, XAD,
|
||||
)),
|
||||
ABB("Asia", listOf(
|
||||
AFG, ARM, AZE, BHR, BGD, BTN, BRN, KHM, CHN, GEO, HKG, IND, IDN, IRN,
|
||||
IRQ, ISR, JPN, JOR, KWT, KGZ, LAO, LBN, MAC, MYS, MDV, MNG, MMR,
|
||||
NPL, PRK, OMN, PAK, PSE, PHL, QAT, SAU, SGP, KOR, LKA, SYR, TWN, TJK,
|
||||
THA, TLS, TUR, TKM, ARE, UZB, VNM, YEM, ZNC,
|
||||
)),
|
||||
FFF("Africa", listOf(
|
||||
DZA, AGO, BDI, BEN, BWA, BFA, BDI, CPV, CMR, CAF, TCD, COM, COG, COD, CIV, DJI, EGY,
|
||||
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,
|
||||
SHN, SDN, TZA, TGO, TUN, UGA, COD, ZMB, ZWE,
|
||||
ESH,
|
||||
)),
|
||||
NNN("North America", listOf(
|
||||
ABW, AIA, ATG, BHS, BRB, BLZ, BMU, VGB, CAN, CYM, CRI, CUB, CUW, DMA,
|
||||
DOM, SLV, GRL, GRD, GLP, GTM, HTI, HND, JAM, MTQ, MEX, MSR, ANT, CUW,
|
||||
NIC, PAN, PRI, KNA, LCA, MAF, SPM, VCT, TTO, TCA, USA, XCL,
|
||||
)),
|
||||
SRR("South America", listOf(
|
||||
ARG, BOL, BRA, CHL, COL, ECU, FLK, GUF, GUY, PRY, PER, SUR, URY, VEN,
|
||||
)),
|
||||
UUU("Oceania", listOf(
|
||||
ASM, AUS, COK, FJI, PYF, GUM, KIR, MHL, FSM, NRU, NCL, NZL, NIU, NFK,
|
||||
MNP, PLW, PNG, PCN, SLB, TKL, TON, TUV, VUT, WLF,
|
||||
)),
|
||||
|
||||
XXX("Others", listOf(
|
||||
ATA, // Antarctica: not in any other region
|
||||
ALA, // Åland Islands: an autonomous region of Finland, but not a member of the EU or UN
|
||||
BES, // Bonaire, Sint Eustatius and Saba: special municipalities of the Netherlands in the Caribbean
|
||||
BVT, // Bouvet Island: an uninhabited territory of Norway in the South Atlantic
|
||||
IOT, // British Indian Ocean Territory: a British overseas territory in the Indian Ocean
|
||||
CXR, // Christmas Island: an Australian external territory in the Indian Ocean
|
||||
CCK, // Cocos (Keeling) Islands: an Australian external territory in the Indian Ocean
|
||||
FRO, // Faroe Islands: an autonomous region of Denmark
|
||||
ATF, // French Southern and Antarctic Lands: a territory of France located in the southern Indian Ocean
|
||||
GIB, // Gibraltar: a British overseas territory located at the southern tip of the Iberian Peninsula
|
||||
GGY, // Guernsey: a British Crown dependency in the English Channel
|
||||
HMD, // Heard Island and McDonald Islands: an uninhabited Australian external territory in the southern Indian Ocean
|
||||
IMN, // Isle of Man: a British Crown dependency located in the Irish Sea
|
||||
JEY, // Jersey: a British Crown dependency located in the English Channel
|
||||
BLM, // Saint Barthélemy: an overseas collectivity of France in the Caribbean
|
||||
WSM, // Samoa: an independent island nation in the South Pacific
|
||||
SXM, // Sint Maarten: a constituent country of the Kingdom of the Netherlands in the Caribbean
|
||||
SGS, // South Georgia and the South Sandwich Islands: a British overseas territory in the southern Atlantic Ocean
|
||||
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
|
||||
VIR, // United States Virgin Islands: an unincorporated territory of the United States in the Caribbean
|
||||
)),
|
||||
|
||||
ZZZ("Undefined", listOf(
|
||||
)),
|
||||
|
||||
|
||||
NTT("NATO", listOf(
|
||||
ALB, BEL, BGR, CAN, HRV, CZE, DNK, EST, FRA, DEU, GRC, HUN, ISL, ITA, LVA, LTU, LUX,
|
||||
MNE, NLD, NOR, POL, PRT, ROU, SVK, SVN, ESP, TUR, GBR, USA
|
||||
))
|
||||
;
|
||||
|
||||
override val area = children.fold(0) { acc, i ->
|
||||
acc + i.area
|
||||
}
|
||||
|
||||
private val isInWorld = listOf("EEE","ABB","FFF","NNN","SRR","UUU","XXX").contains(this.name)
|
||||
|
||||
override val type: LocType = if (isInWorld) LocType.GROUP else LocType.CUSTOM_GROUP
|
||||
override val code = this.name
|
||||
|
||||
|
||||
}
|
@ -1,532 +0,0 @@
|
||||
package net.helcel.beendroid.countries
|
||||
|
||||
enum class State(override val fullName: String, override val area: Int) : GeoLoc {
|
||||
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),
|
||||
ALB_BR("Berat", 1792),
|
||||
ALB_BU("Dibër", 2581),
|
||||
ALB_DI("Durrës", 766),
|
||||
ALB_EL("Elbasan", 3196),
|
||||
ALB_FR("Fier", 1904),
|
||||
ALB_GJ("Gjirokastër", 2886),
|
||||
ALB_KO("Korçë", 3710),
|
||||
ALB_KU("Kukës", 2373),
|
||||
ALB_LE("Lezhë", 1555),
|
||||
ALB_SH("Shkodër", 3677),
|
||||
ALB_TR("Tirana", 1014),
|
||||
ALB_VL("Vlorë", 1609),
|
||||
DZA_01("Adrar", 402160),
|
||||
DZA_44("Aïn Defla", 72028),
|
||||
DZA_46("Aïn Témouchent", 2739),
|
||||
DZA_16("Algiers", 2735),
|
||||
DZA_23("Annaba", 1497),
|
||||
DZA_05("Batna", 11920),
|
||||
DZA_07("Béchar", 161400),
|
||||
DZA_02("Béjaïa", 6476),
|
||||
DZA_06("Biskra", 20848),
|
||||
DZA_08("Blida", 1447),
|
||||
DZA_09("Bordj Bou Arréridj", 4185),
|
||||
DZA_10("Bouira", 4479),
|
||||
DZA_34("Boumerdès", 1510),
|
||||
DZA_35("Chlef", 7323),
|
||||
DZA_25("Constantine", 2082),
|
||||
DZA_17("Djelfa", 66411),
|
||||
DZA_32("El Bayadh", 78300),
|
||||
DZA_39("El Oued", 54400),
|
||||
DZA_36("El Tarf", 3500),
|
||||
DZA_47("Ghardaïa", 86400),
|
||||
DZA_24("Guelma", 4196),
|
||||
DZA_33("Illizi", 284936),
|
||||
DZA_18("Jijel", 2577),
|
||||
DZA_40("Khenchela", 9161),
|
||||
DZA_03("Laghouat", 25733),
|
||||
DZA_29("Mascara", 5635),
|
||||
DZA_26("Médéa", 8739),
|
||||
DZA_43("Mila", 7904),
|
||||
DZA_27("Mostaganem", 2132),
|
||||
DZA_28("Msila", 18432),
|
||||
DZA_45("Naama", 32530),
|
||||
DZA_31("Oran", 2249),
|
||||
DZA_30("Ouargla", 541310),
|
||||
DZA_04("Oum El Bouaghi", 7267),
|
||||
DZA_48("Relizane", 4921),
|
||||
DZA_20("Saïda", 6168),
|
||||
DZA_19("Sétif", 6984),
|
||||
DZA_22("Skikda", 4751),
|
||||
DZA_21("Souk Ahras", 4321),
|
||||
DZA_41("Tamanghasset", 556200),
|
||||
DZA_12("Tébessa", 14297),
|
||||
DZA_14("Tiaret", 21214),
|
||||
DZA_37("Tindouf", 159000),
|
||||
DZA_42("Tissemsilt", 3798),
|
||||
DZA_38("Tizi Ouzou", 3798),
|
||||
DZA_15("Tlemcen", 7970),
|
||||
AGO_BGO("Bengo", 31648),
|
||||
AGO_BGU("Benguela", 31931),
|
||||
AGO_BIE("Bié", 70156),
|
||||
AGO_CAB("Cabinda", 7289),
|
||||
AGO_CCU("Cuando Cubango", 199049),
|
||||
AGO_CNO("Cuanza Norte", 24398),
|
||||
AGO_CUS("Cuanza Sul", 55500),
|
||||
AGO_CNN("Cunene", 77614),
|
||||
AGO_HUA("Huambo", 34049),
|
||||
AGO_HUI("Huíla", 79091),
|
||||
AGO_LNO("Lunda Norte", 103760),
|
||||
AGO_LSU("Lunda Sul", 77475),
|
||||
AGO_LUA("Luanda", 18113),
|
||||
AGO_MAL("Malanje", 97225),
|
||||
AGO_MOX("Moxico", 223023),
|
||||
AGO_NAM("Namibe", 58477),
|
||||
AGO_UIG("Uíge", 58698),
|
||||
AGO_ZAI("Zaire", 40170),
|
||||
ARG_BA("Buenos Aires", 307571),
|
||||
ARG_C("Ciudad Autónoma de Buenos Aires", 203),
|
||||
ARG_K("Catamarca", 102606),
|
||||
ARG_H("Chaco", 99633),
|
||||
ARG_U("Chubut", 224686),
|
||||
ARG_X("Córdoba", 165321),
|
||||
ARG_W("Corrientes", 88199),
|
||||
ARG_E("Entre Ríos", 78781),
|
||||
ARG_P("Formosa", 72066),
|
||||
ARG_Y("Jujuy", 53219),
|
||||
ARG_L("La Pampa", 143440),
|
||||
ARG_F("La Rioja", 89680),
|
||||
ARG_M("Mendoza", 148827),
|
||||
ARG_N("Misiones", 29801),
|
||||
ARG_Q("Neuquén", 94078),
|
||||
ARG_R("Río Negro", 203013),
|
||||
ARG_A("Salta", 155488),
|
||||
ARG_J("San Juan", 89651),
|
||||
ARG_D("San Luis", 76748),
|
||||
ARG_Z("Santa Cruz", 243943),
|
||||
ARG_S("Santa Fe", 133007),
|
||||
ARG_G("Santiago del Estero", 136351),
|
||||
ARG_V("Tierra del Fuego", 21363),
|
||||
ARG_T("Tucumán", 222524),
|
||||
ARM_AR("Aragatsotn", 2096),
|
||||
ARM_ARA("Ararat", 2096),
|
||||
ARM_AV("Armavir", 1242),
|
||||
ARM_G("Gegharkunik", 5346),
|
||||
ARM_LO("Lori", 3775),
|
||||
ARM_KOT("Kotayk", 2086),
|
||||
ARM_SH("Shirak", 2684),
|
||||
ARM_SU("Syunik", 4505),
|
||||
ARM_TV("Tavush", 2700),
|
||||
ARM_VA("Vayots Dzor", 2308),
|
||||
ARM_ER("Yerevan", 223),
|
||||
AUS_ACT("Australian Capital Territory", 2358),
|
||||
AUS_NSW("New South Wales", 800642),
|
||||
AUS_NT("Northern Territory", 1348646),
|
||||
AUS_QLD("Queensland", 1859900),
|
||||
AUS_SA("South Australia", 984377),
|
||||
AUS_TAS("Tasmania", 68401),
|
||||
AUS_VIC("Victoria", 227416),
|
||||
AUS_WA("Western Australia", 2525275),
|
||||
AUT_B("Burgenland", 3960),
|
||||
AUT_K("Carinthia", 9539),
|
||||
AUT_NO("Lower Austria", 19186),
|
||||
AUT_OO("Upper Austria", 11983),
|
||||
AUT_S("Salzburg", 7169),
|
||||
AUT_ST("Styria", 16420),
|
||||
AUT_T("Tyrol", 12639),
|
||||
AUT_V("Vorarlberg", 2601),
|
||||
AUT_W("Vienna", 415),
|
||||
|
||||
BEL_BRU("Brussels-Capital Region", 162),
|
||||
BEL_VAN("Flemish Region", 13790),
|
||||
BEL_WAL("Walloon Region", 16640),
|
||||
|
||||
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),
|
||||
|
||||
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),
|
||||
|
||||
FRA_01("Ain", 5762),
|
||||
FRA_02("Aisne", 7369),
|
||||
FRA_03("Allier", 7379),
|
||||
FRA_04("Alpes-de-Haute-Provence", 6925),
|
||||
FRA_05("Hautes-Alpes", 5549),
|
||||
FRA_06("Alpes-Maritimes", 4299),
|
||||
FRA_07("Ardèche", 5529),
|
||||
FRA_08("Ardennes", 5227),
|
||||
FRA_09("Ariège", 4890),
|
||||
FRA_10("Aube", 6060),
|
||||
FRA_11("Aude", 6139),
|
||||
FRA_12("Aveyron", 8733),
|
||||
FRA_13("Bouches-du-Rhône", 5087),
|
||||
FRA_14("Calvados", 5546),
|
||||
FRA_15("Cantal", 5774),
|
||||
FRA_16("Charente", 5974),
|
||||
FRA_17("Charente-Maritime", 6864),
|
||||
FRA_18("Cher", 7234),
|
||||
FRA_19("Corrèze", 5857),
|
||||
FRA_21("Côte-d'Or", 8763),
|
||||
FRA_22("Côtes-d'Armor", 6873),
|
||||
FRA_23("Creuse", 5561),
|
||||
FRA_24("Dordogne", 9060),
|
||||
FRA_25("Doubs", 5230),
|
||||
FRA_26("Drôme", 6535),
|
||||
FRA_27("Eure", 6040),
|
||||
FRA_28("Eure-et-Loir", 5886),
|
||||
FRA_29("Finistère", 6733),
|
||||
FRA_2A("Corse-du-Sud", 4014),
|
||||
FRA_2B("Haute-Corse", 4666),
|
||||
FRA_30("Gard", 5855),
|
||||
FRA_31("Haute-Garonne", 6306),
|
||||
FRA_32("Gers", 6257),
|
||||
FRA_33("Gironde", 9975),
|
||||
FRA_34("Hérault", 6224),
|
||||
FRA_35("Ille-et-Vilaine", 6775),
|
||||
FRA_36("Indre", 6903),
|
||||
FRA_37("Indre-et-Loire", 6106),
|
||||
FRA_38("Isère", 7436),
|
||||
FRA_39("Jura", 4999),
|
||||
FRA_40("Landes", 9243),
|
||||
FRA_41("Loir-et-Cher", 6343),
|
||||
FRA_42("Loire", 4783),
|
||||
FRA_43("Haute-Loire", 4978),
|
||||
FRA_44("Loire-Atlantique", 6811),
|
||||
FRA_45("Loiret", 6777),
|
||||
FRA_46("Lot", 5225),
|
||||
FRA_47("Lot-et-Garonne", 5385),
|
||||
FRA_48("Lozère", 5167),
|
||||
FRA_49("Maine-et-Loire", 7080),
|
||||
FRA_50("Manche", 5987),
|
||||
FRA_51("Marne", 8212),
|
||||
FRA_52("Haute-Marne", 6223),
|
||||
FRA_53("Mayenne", 5166),
|
||||
FRA_54("Meurthe-et-Moselle", 5224),
|
||||
FRA_55("Meuse", 6240),
|
||||
FRA_56("Morbihan", 6820),
|
||||
FRA_57("Moselle", 6170),
|
||||
FRA_58("Nièvre", 6819),
|
||||
FRA_59("Nord", 5743),
|
||||
FRA_60("Oise", 5860),
|
||||
FRA_61("Orne", 6100),
|
||||
FRA_62("Pas-de-Calais", 6657),
|
||||
FRA_63("Puy-de-Dôme", 7970),
|
||||
FRA_64("Pyrénées-Atlantiques", 7660),
|
||||
FRA_65("Hautes-Pyrénées", 4464),
|
||||
FRA_66("Pyrénées-Orientales", 4114),
|
||||
FRA_67("Bas-Rhin", 4758),
|
||||
FRA_68("Haut-Rhin", 3525),
|
||||
FRA_69("Rhône", 3242),
|
||||
FRA_70("Haute-Saône", 5361),
|
||||
FRA_71("Saône-et-Loire", 8577),
|
||||
FRA_72("Sarthe", 6205),
|
||||
FRA_73("Savoie", 6012),
|
||||
FRA_74("Haute-Savoie", 4389),
|
||||
FRA_75("Paris", 105),
|
||||
FRA_76("Seine-Maritime", 6279),
|
||||
FRA_77("Seine-et-Marne", 5913),
|
||||
FRA_78("Yvelines", 2284),
|
||||
FRA_79("Deux-Sèvres", 5998),
|
||||
FRA_80("Somme", 6174),
|
||||
FRA_81("Tarn", 5758),
|
||||
FRA_82("Tarn-et-Garonne", 3718),
|
||||
FRA_83("Var", 6015),
|
||||
FRA_84("Vaucluse", 3567),
|
||||
FRA_85("Vendée", 6726),
|
||||
FRA_86("Vienne", 6990),
|
||||
FRA_87("Haute-Vienne", 5563),
|
||||
FRA_88("Vosges", 5888),
|
||||
FRA_89("Yonne", 7427),
|
||||
FRA_90("Territoire de Belfort", 609),
|
||||
FRA_91("Essonne", 1804),
|
||||
FRA_92("Hauts-de-Seine", 176),
|
||||
FRA_93("Seine-Saint-Denis", 236),
|
||||
FRA_94("Val-de-Marne", 245),
|
||||
FRA_95("Val-d'Oise", 1246),
|
||||
FRA_971("Guadeloupe", 1628),
|
||||
FRA_972("Martinique", 1128),
|
||||
FRA_973("French Guiana", 83534),
|
||||
FRA_974("Réunion", 2504),
|
||||
FRA_976("Mayotte", 376),
|
||||
|
||||
ITA_AG("Agrigento", 3041),
|
||||
ITA_AL("Alessandria", 3528),
|
||||
ITA_AN("Ancona", 1947),
|
||||
ITA_AO("Aosta", 3263),
|
||||
ITA_AR("Arezzo", 3234),
|
||||
ITA_AP("Ascoli Piceno", 1550),
|
||||
ITA_AT("Asti", 1480),
|
||||
ITA_AV("Avellino", 2846),
|
||||
ITA_BA("Bari", 3567),
|
||||
ITA_BT("Barletta-Andria-Trani", 1543),
|
||||
ITA_BL("Belluno", 3677),
|
||||
ITA_BN("Benevento", 2296),
|
||||
ITA_BG("Bergamo", 2755),
|
||||
ITA_BI("Biella", 913),
|
||||
ITA_BO("Bologna", 3702),
|
||||
ITA_BZ("Bolzano", 7400),
|
||||
ITA_BS("Brescia", 4762),
|
||||
ITA_BR("Brindisi", 1360),
|
||||
ITA_CA("Cagliari", 8503),
|
||||
ITA_CL("Caltanissetta", 2566),
|
||||
ITA_CB("Campobasso", 2166),
|
||||
ITA_CI("Carbonia-Iglesias", 4002),
|
||||
ITA_CE("Caserta", 2171),
|
||||
ITA_CT("Catania", 3575),
|
||||
ITA_CZ("Catanzaro", 2492),
|
||||
ITA_CH("Chieti", 3646),
|
||||
ITA_CO("Como", 1232),
|
||||
ITA_CS("Cosenza", 6825),
|
||||
ITA_CR("Cremona", 1776),
|
||||
ITA_KR("Crotone", 1744),
|
||||
ITA_CN("Cuneo", 6900),
|
||||
ITA_EN("Enna", 2644),
|
||||
ITA_FM("Fermo", 862),
|
||||
ITA_FE("Ferrara", 2631),
|
||||
ITA_FI("Florence", 3539),
|
||||
ITA_FG("Foggia", 7003),
|
||||
ITA_FC("Forlì-Cesena", 2374),
|
||||
ITA_FR("Frosinone", 3241),
|
||||
ITA_GE("Genoa", 1837),
|
||||
ITA_GO("Gorizia", 466),
|
||||
ITA_GR("Grosseto", 4502),
|
||||
ITA_IM("Imperia", 1102),
|
||||
ITA_IS("Isernia", 1687),
|
||||
ITA_SP("La Spezia", 882),
|
||||
ITA_AQ("L'Aquila", 5336),
|
||||
ITA_LT("Latina", 2259),
|
||||
ITA_LE("Lecce", 2561),
|
||||
ITA_LC("Lecco", 816),
|
||||
ITA_LI("Livorno", 1141),
|
||||
ITA_LO("Lodi", 782),
|
||||
ITA_LU("Lucca", 1771),
|
||||
ITA_MC("Macerata", 2720),
|
||||
ITA_MN("Mantua", 2250),
|
||||
ITA_MS("Massa and Carrara", 1153),
|
||||
ITA_MT("Matera", 3507),
|
||||
ITA_ME("Messina", 3241),
|
||||
ITA_MI("Milan", 1821),
|
||||
ITA_MO("Modena", 2168),
|
||||
ITA_MB("Monza and Brianza", 405),
|
||||
ITA_NA("Naples", 1171),
|
||||
ITA_NO("Novara", 1030),
|
||||
ITA_NU("Nuoro", 5418),
|
||||
ITA_OT("Olbia-Tempio", 3331),
|
||||
ITA_OR("Oristano", 3477),
|
||||
ITA_PD("Padua", 2710),
|
||||
ITA_PA("Palermo", 4993),
|
||||
ITA_PR("Parma", 3466),
|
||||
ITA_PV("Pavia", 2961),
|
||||
ITA_PG("Perugia", 6175),
|
||||
ITA_PS("Pesaro and Urbino", 2915),
|
||||
ITA_PE("Pescara", 1260),
|
||||
ITA_PC("Piacenza", 2586),
|
||||
ITA_PI("Pisa", 2472),
|
||||
ITA_PT("Pistoia", 965),
|
||||
ITA_PN("Pordenone", 2534),
|
||||
ITA_PZ("Potenza", 6588),
|
||||
ITA_PO("Prato", 365),
|
||||
ITA_RG("Ragusa", 1649),
|
||||
ITA_RA("Ravenna", 1857),
|
||||
ITA_RC("Reggio Calabria", 3034),
|
||||
ITA_RE("Reggio Emilia", 2297),
|
||||
ITA_RI("Rieti", 2745),
|
||||
ITA_RN("Rimini", 864),
|
||||
ITA_RO("Rovigo", 1780),
|
||||
ITA_SA("Salerno", 4060),
|
||||
ITA_SS("Sassari", 4990),
|
||||
ITA_SV("Savona", 1554),
|
||||
ITA_SI("Siena", 3807),
|
||||
ITA_SR("Siracusa", 2108),
|
||||
ITA_SO("Sondrio", 3232),
|
||||
ITA_TA("Taranto", 2496),
|
||||
ITA_TE("Teramo", 1953),
|
||||
ITA_TR("Terni", 2124),
|
||||
ITA_TO("Turin", 6824),
|
||||
ITA_TP("Trapani", 2461),
|
||||
ITA_TN("Trento", 6212),
|
||||
ITA_TV("Treviso", 2455),
|
||||
ITA_TS("Trieste", 212),
|
||||
ITA_UD("Udine", 4850),
|
||||
ITA_VA("Varese", 1193),
|
||||
ITA_VE("Venice", 2464),
|
||||
ITA_VB("Verbano-Cusio-Ossola", 2252),
|
||||
ITA_VC("Vercelli", 2100),
|
||||
ITA_VI("Vicenza", 2712),
|
||||
ITA_VT("Viterbo", 3617),
|
||||
|
||||
|
||||
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),
|
||||
|
||||
USA_AL("Alabama", 135767),
|
||||
USA_AK("Alaska", 1723337),
|
||||
USA_AZ("Arizona", 295234),
|
||||
USA_AR("Arkansas", 137732),
|
||||
USA_CA("California", 423967),
|
||||
USA_CO("Colorado", 269601),
|
||||
USA_CT("Connecticut", 14356),
|
||||
USA_DE("Delaware", 6446),
|
||||
USA_FL("Florida", 170312),
|
||||
USA_GA("Georgia", 153910),
|
||||
USA_HI("Hawaii", 28314),
|
||||
USA_ID("Idaho", 216443),
|
||||
USA_IL("Illinois", 149995),
|
||||
USA_IN("Indiana", 94327),
|
||||
USA_IA("Iowa", 145746),
|
||||
USA_KS("Kansas", 213100),
|
||||
USA_KY("Kentucky", 104656),
|
||||
USA_LA("Louisiana", 135659),
|
||||
USA_ME("Maine", 91634),
|
||||
USA_MD("Maryland", 32131),
|
||||
USA_MA("Massachusetts", 27336),
|
||||
USA_MI("Michigan", 250487),
|
||||
USA_MN("Minnesota", 225163),
|
||||
USA_MS("Mississippi", 125438),
|
||||
USA_MO("Missouri", 180540),
|
||||
USA_MT("Montana", 380831),
|
||||
USA_NE("Nebraska", 200330),
|
||||
USA_NV("Nevada", 286380),
|
||||
USA_NH("New Hampshire", 24214),
|
||||
USA_NJ("New Jersey", 22591),
|
||||
USA_NM("New Mexico", 314917),
|
||||
USA_NY("New York", 141297),
|
||||
USA_NC("North Carolina", 139390),
|
||||
USA_ND("North Dakota", 183107),
|
||||
USA_OH("Ohio", 116098),
|
||||
USA_OK("Oklahoma", 181037),
|
||||
USA_OR("Oregon", 254799),
|
||||
USA_PA("Pennsylvania", 119280),
|
||||
USA_RI("Rhode Island", 4002),
|
||||
USA_SC("South Carolina", 82933),
|
||||
USA_SD("South Dakota", 199730),
|
||||
USA_TN("Tennessee", 109153),
|
||||
USA_TX("Texas", 695662),
|
||||
USA_UT("Utah", 219882),
|
||||
USA_VT("Vermont", 24906),
|
||||
USA_VA("Virginia", 110787),
|
||||
USA_WA("Washington", 184661),
|
||||
USA_WV("West Virginia", 62755),
|
||||
USA_WI("Wisconsin", 169634),
|
||||
USA_WY("Wyoming", 253335),
|
||||
|
||||
|
||||
|
||||
UNDEFINED("?",0),
|
||||
;
|
||||
|
||||
override val code = this.name
|
||||
override val children = emptyList<GeoLoc>()
|
||||
override val type = LocType.STATE
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
package net.helcel.beendroid.helper
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import net.helcel.beendroid.R
|
||||
import net.helcel.beendroid.countries.GeoLoc
|
||||
|
||||
var visits : Visits? = null
|
||||
var groups : Groups? = null
|
||||
|
||||
var selected_group : Groups.Group? = null
|
||||
var selected_geoloc: GeoLoc? = null
|
||||
|
||||
val groupsSerial = Groups.GroupsSerializer()
|
||||
val visitsSerial = Visits.VisitsSerializer()
|
||||
|
||||
private var sharedPreferences: SharedPreferences? = null
|
||||
|
||||
fun loadData(ctx: Context, id:Int) {
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
|
||||
val groupsString = sharedPreferences!!.getString("groups_$id",null)
|
||||
val visitsString = sharedPreferences!!.getString("visits_$id",null)
|
||||
|
||||
groups = if(!groupsString.isNullOrEmpty()) groupsSerial.readFrom(groupsString.byteInputStream()) else groupsSerial.defaultValue
|
||||
visits = if(!visitsString.isNullOrEmpty()) visitsSerial.readFrom(visitsString.byteInputStream()) else visitsSerial.defaultValue
|
||||
|
||||
// Add default group "Visited" with app's color if there is no group already
|
||||
if (groups!!.size() == 0) {
|
||||
groups!!.setGroup(1, "Visited", ColorDrawable(ContextCompat.getColor(ctx, R.color.blue)))
|
||||
saveData()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun saveData() {
|
||||
if(groups!!.id != visits!!.id) return
|
||||
val id = groups!!.id
|
||||
val editor = sharedPreferences!!.edit()
|
||||
editor.putString("groups_$id", groupsSerial.writeTo(groups!!))
|
||||
editor.putString("visits_$id", visitsSerial.writeTo(visits!!))
|
||||
editor.apply()
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package net.helcel.beendroid.helper
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.util.TypedValue
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.graphics.ColorUtils
|
||||
|
||||
fun colorWrapper(ctx : Context, res: Int): ColorDrawable {
|
||||
val colorPrimaryTyped = TypedValue()
|
||||
ctx.theme.resolveAttribute(res, colorPrimaryTyped, true)
|
||||
return ColorDrawable(colorPrimaryTyped.data)
|
||||
}
|
||||
|
||||
fun colorToHex6(c: ColorDrawable): String {
|
||||
return '#'+colorToHex8(c).substring(3)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun colorToHex8(c: ColorDrawable): String {
|
||||
return '#'+c.color.toHexString()
|
||||
}
|
||||
|
||||
fun createActionBar(ctx: AppCompatActivity, title: String) {
|
||||
ctx.supportActionBar?.setBackgroundDrawable(colorWrapper(ctx, android.R.attr.colorPrimary))
|
||||
ctx.supportActionBar?.title = title
|
||||
ctx.supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
}
|
||||
|
||||
fun getContrastColor(color: Int): Int {
|
||||
val whiteContrast = ColorUtils.calculateContrast(Color.WHITE, color)
|
||||
val blackContrast = ColorUtils.calculateContrast(Color.BLACK, color)
|
||||
return if (whiteContrast > blackContrast) Color.WHITE else Color.BLACK
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
package net.helcel.beendroid.svg
|
||||
|
||||
import android.content.Context
|
||||
import net.helcel.beendroid.countries.World
|
||||
import net.helcel.beendroid.helper.colorToHex6
|
||||
import net.helcel.beendroid.helper.colorWrapper
|
||||
import net.helcel.beendroid.helper.groups
|
||||
import net.helcel.beendroid.helper.visits
|
||||
|
||||
class CSSWrapper(ctx: Context) {
|
||||
|
||||
private val colorForeground: String = colorToHex6(colorWrapper(ctx, android.R.attr.panelColorBackground))
|
||||
private val colorBackground: String = colorToHex6(colorWrapper(ctx, android.R.attr.colorBackground))
|
||||
|
||||
|
||||
fun get() : String {
|
||||
return listOf(World.WWW.children
|
||||
.filter { visits!!.getVisited(it)!=0}
|
||||
.map { "#${it.code}{fill:${colorToHex6(groups!!.getGroupFromKey(visits!!.getVisited(it))!!.color)};}"}
|
||||
.fold(""){acc, s-> acc + s},
|
||||
World.WWW.children
|
||||
.filter { visits!!.getVisited(it)==0 }
|
||||
.map { cg -> cg.children
|
||||
.filter { visits!!.getVisited(it)!=0 }
|
||||
.map { "#${it.code}{fill:${colorToHex6(groups!!.getGroupFromKey(visits!!.getVisited(it))!!.color)};}"}
|
||||
.fold(""){acc, s-> acc + s}
|
||||
}.fold(""){acc,s->acc+s},
|
||||
).fold(""){acc,s-> acc+s}+
|
||||
"svg{fill:$colorForeground;stroke:$colorBackground;stroke-width:0.1;}"
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?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:theme="@style/Theme.Beans"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
@ -15,21 +15,4 @@
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
|
||||
|
||||
<!-- <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>
|
@ -1,7 +1,7 @@
|
||||
<?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:theme="@style/Theme.Beans"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:theme="@style/Theme.Beendroid"
|
||||
android:theme="@style/Theme.Beans"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".activity.SettingsActivity">
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?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:theme="@style/Theme.Beans"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
||||
android:layout_marginBottom="15dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:text="@string/beendroid_is_foss"
|
||||
android:text="@string/beans_is_foss"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<TextView
|
||||
@ -60,7 +60,7 @@
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:autoLink="web"
|
||||
android:text="@string/beendroid_repo"
|
||||
android:text="@string/beans_repo"
|
||||
android:textAlignment="center" />
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/list"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/addGroup"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:layout_marginEnd="32dp"
|
||||
android:layout_weight="1"
|
||||
android:contentDescription="TODO" android:text="@string/group_add"
|
||||
android:src="@drawable/add"
|
||||
android:backgroundTint="@color/blue"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -6,13 +6,14 @@
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/group_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:autofillHints=""
|
||||
android:hint="@string/name"
|
||||
android:inputType="text"
|
||||
android:autofillHints="" />
|
||||
android:inputType="text" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
@ -22,11 +23,11 @@
|
||||
android:id="@+id/colorView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:background="@color/black"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/colorR"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:background="@color/black"/>
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<com.google.android.material.slider.Slider
|
||||
@ -64,24 +65,61 @@
|
||||
app:trackColorActive="@color/blue" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:labelFor="@id/group_color"
|
||||
android:text="@string/hashtag"/>
|
||||
android:text="@string/hashtag" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/group_color"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:autofillHints=""
|
||||
android:hint="@string/color_rrggbb"
|
||||
android:inputType="text"
|
||||
android:maxLength="6" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="10dp">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnDelete"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/delete"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnCancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/cancel"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/btnOk"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnOk"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/ok"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -1,17 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView
|
||||
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"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" >
|
||||
<LinearLayout
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/groups_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
android:layout_height="wrap_content" />
|
||||
</ScrollView>
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnAdd"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/add"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btnClear"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/clear"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -51,26 +51,6 @@
|
||||
app:layout_constraintTop_toTopOf="@id/textView"
|
||||
app:layout_constraintVertical_bias="0.5" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/sub_item"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="24dp"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/checkBox">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/list_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:scrollbars="vertical" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<menu 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"
|
||||
tools:context="net.helcel.beendroid.activity.MainActivity" >
|
||||
tools:context="net.helcel.beans.activity.MainActivity" >
|
||||
|
||||
<item
|
||||
android:id="@+id/action_edit"
|
||||
|
@ -1,13 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="entries_theme" >
|
||||
<string-array name="entries_theme">
|
||||
<item>@string/system</item>
|
||||
<item>@string/light</item>
|
||||
<item>@string/dark</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="entries_stats" >
|
||||
<string-array name="entries_stats">
|
||||
<item>@string/counters</item>
|
||||
<item>@string/percentages</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="entries_onoff">
|
||||
<item>@string/on</item>
|
||||
<item>@string/off</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">BeenDroid</string>
|
||||
<string name="app_name">Beans</string>
|
||||
<string name="app_version">1.0</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="action_stat">Stats</string>
|
||||
@ -13,16 +13,25 @@
|
||||
<string name="counters">Prefer counters (#)</string>
|
||||
<string name="percentages">Prefer percentages (%)</string>
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="key_group">Groups</string>
|
||||
<string name="key_regional">Regional</string>
|
||||
<string name="about">About</string>
|
||||
<string name="beendroid_is_foss">BeenDroid is free and open source software, licensed under the GNU General Public License (version 3 or later)</string>
|
||||
<string name="beendroid_repo">Project repository: https://git.helcel.net/helcel/beendroid\n Feel free to report issues or contribute to the project.</string>
|
||||
<string name="beans_is_foss">Beans is free and open source software, licensed under the GNU General Public License (version 3 or later)</string>
|
||||
<string name="beans_repo">Project repository: https://git.helcel.net/helcel/beans\n Feel free to report issues or contribute to the project.</string>
|
||||
<string name="foss_licenses">Free and open source dependencies and licenses</string>
|
||||
<string name="about_beendroid">About the BeenDroid application</string>
|
||||
<string name="about_beans">About the Beans application</string>
|
||||
<string name="delete_group">Are your sure you want to delete this group and remove all its country mappings?</string>
|
||||
<string name="group_add">Add</string>
|
||||
<string name="add">Add</string>
|
||||
<string name="clear">Clear</string>
|
||||
<string name="logo">Logo</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="rate">%1$d/%2$d</string>
|
||||
<string name="percentage">%1$d%</string>
|
||||
<string name="color_rrggbb">RRGGBB</string>
|
||||
<string name="hashtag">#</string>
|
||||
<string name="on">On</string>
|
||||
<string name="off">Off</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="ok">Ok</string>
|
||||
</resources>
|
@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="hashtag">#</string>
|
||||
</resources>
|
@ -1,5 +1,5 @@
|
||||
<resources>
|
||||
<style name="Theme.Beendroid" parent="Theme.Material3.DayNight">
|
||||
<style name="Theme.Beans" parent="Theme.Material3.DayNight">
|
||||
<item name="colorPrimary">@color/blue</item>
|
||||
<item name="background">@color/darkgray</item>
|
||||
<item name="android:colorPrimary">?attr/colorPrimary</item>
|
||||
|
@ -1,41 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:theme="@style/Theme.Beendroid">
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:theme="@style/Theme.Beans">
|
||||
|
||||
<ListPreference
|
||||
app:defaultValue="@string/off"
|
||||
app:enabled="true"
|
||||
app:key="@string/key_theme"
|
||||
app:icon="@drawable/palette"
|
||||
app:title="@string/key_theme"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:entries="@array/entries_theme"
|
||||
app:entryValues="@array/entries_theme"
|
||||
app:defaultValue="@string/system" />
|
||||
app:entries="@array/entries_onoff"
|
||||
app:entryValues="@array/entries_onoff"
|
||||
app:icon="@drawable/edit"
|
||||
app:key="@string/key_group"
|
||||
app:title="@string/key_group"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ListPreference
|
||||
app:defaultValue="@string/off"
|
||||
app:enabled="true"
|
||||
app:entries="@array/entries_onoff"
|
||||
app:entryValues="@array/entries_onoff"
|
||||
app:icon="@drawable/edit"
|
||||
app:key="@string/key_regional"
|
||||
app:title="@string/key_regional"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ListPreference
|
||||
app:defaultValue="@string/counters"
|
||||
app:enabled="true"
|
||||
app:key="@string/key_stats"
|
||||
app:icon="@drawable/stats"
|
||||
app:title="@string/key_stats"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:entries="@array/entries_stats"
|
||||
app:entryValues="@array/entries_stats"
|
||||
app:defaultValue="@string/counters" />
|
||||
app:icon="@drawable/stats"
|
||||
app:key="@string/key_stats"
|
||||
app:title="@string/key_stats"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<Preference
|
||||
android:summary="@string/foss_licenses"
|
||||
app:enabled="true"
|
||||
app:key="@string/licenses"
|
||||
app:icon="@drawable/licenses"
|
||||
app:title="@string/licenses"
|
||||
android:summary="@string/foss_licenses"/>
|
||||
app:key="@string/licenses"
|
||||
app:title="@string/licenses" />
|
||||
|
||||
<Preference
|
||||
android:summary="@string/about_beans"
|
||||
app:enabled="true"
|
||||
app:key="@string/about"
|
||||
app:icon="@drawable/about"
|
||||
app:title="@string/about"
|
||||
android:summary="@string/about_beendroid"/>
|
||||
app:key="@string/about"
|
||||
app:title="@string/about" />
|
||||
|
||||
|
||||
</PreferenceScreen>
|
Reference in New Issue
Block a user