Layout Changes #25
@ -1,16 +1,17 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application'
|
id 'com.android.application'
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
|
id 'com.mikepenz.aboutlibraries.plugin' version '10.10.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'net.helcel.beendroid'
|
namespace 'net.helcel.beendroid'
|
||||||
compileSdk 33
|
compileSdk 34
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId 'net.helcel.beendroid'
|
applicationId 'net.helcel.beendroid'
|
||||||
minSdk 28
|
minSdk 28
|
||||||
targetSdk 33
|
targetSdk 34
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
|
|
||||||
@ -50,5 +51,6 @@ dependencies {
|
|||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||||
|
|
||||||
implementation 'com.caverock:androidsvg-aar:1.4'
|
implementation 'com.caverock:androidsvg-aar:1.4'
|
||||||
|
implementation "com.mikepenz:aboutlibraries:10.10.0"
|
||||||
|
|
||||||
}
|
}
|
@ -16,14 +16,20 @@
|
|||||||
>
|
>
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.MainActivity"
|
android:name=".activity.MainActivity"
|
||||||
android:exported="true"
|
android:exported="true" >
|
||||||
android:theme="@style/Theme.Beendroid.NoActionBar">
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".activity.SettingsActivity"
|
||||||
|
android:exported="true" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@ -0,0 +1,31 @@
|
|||||||
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
|
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,17 +1,20 @@
|
|||||||
package net.helcel.beendroid.activity
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.Typeface
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.util.TypedValue
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.material.checkbox.MaterialCheckBox
|
import com.google.android.material.checkbox.MaterialCheckBox
|
||||||
import net.helcel.beendroid.R
|
import net.helcel.beendroid.R
|
||||||
import net.helcel.beendroid.countries.GeoLoc
|
import net.helcel.beendroid.countries.GeoLoc
|
||||||
|
import net.helcel.beendroid.countries.LocType
|
||||||
import net.helcel.beendroid.countries.Visited
|
import net.helcel.beendroid.countries.Visited
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -36,10 +39,7 @@ class FoldingListAdapter(
|
|||||||
|
|
||||||
override fun onBindViewHolder(holder: FoldingListViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: FoldingListViewHolder, position: Int) {
|
||||||
val el = cg.toList()[position]
|
val el = cg.toList()[position]
|
||||||
holder.bind(el) {
|
holder.bind(el) { parentLambda() }
|
||||||
notifyItemChanged(position)
|
|
||||||
parentLambda()
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.addListeners( {
|
holder.addListeners( {
|
||||||
if (!el.first.isEnd) {
|
if (!el.first.isEnd) {
|
||||||
@ -60,46 +60,52 @@ class FoldingListAdapter(
|
|||||||
class FoldingListViewHolder(private val ctx: Context, itemView: View,
|
class FoldingListViewHolder(private val ctx: Context, itemView: View,
|
||||||
private val visited: Visited,
|
private val visited: Visited,
|
||||||
) : RecyclerView.ViewHolder(itemView) {
|
) : RecyclerView.ViewHolder(itemView) {
|
||||||
private val textView: TextView
|
private val textView: TextView = itemView.findViewById(R.id.textView)
|
||||||
private val expand: ImageView
|
private val checkBox: MaterialCheckBox = itemView.findViewById(R.id.checkBox)
|
||||||
private val checkBox: MaterialCheckBox
|
private val subItemView: View = itemView.findViewById(R.id.sub_item)
|
||||||
private val subItemView: View
|
private val list: RecyclerView = itemView.findViewById(R.id.list_list)
|
||||||
private val list: RecyclerView
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
textView = itemView.findViewById(R.id.textView)
|
|
||||||
expand = itemView.findViewById(R.id.expand)
|
|
||||||
expand.setImageDrawable(AppCompatResources.getDrawable(ctx,R.drawable.chevron_right_solid))
|
|
||||||
checkBox = itemView.findViewById(R.id.checkBox)
|
|
||||||
subItemView = itemView.findViewById(R.id.sub_item)
|
|
||||||
list = itemView.findViewById(R.id.list_list)
|
|
||||||
list.layoutManager = LinearLayoutManager(ctx, RecyclerView.VERTICAL, false)
|
list.layoutManager = LinearLayoutManager(ctx, RecyclerView.VERTICAL, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bind(el: Pair<GeoLoc, Boolean>, parentLambda: () -> Unit) {
|
fun bind(el: Pair<GeoLoc, Boolean>, parentLambda: () -> Unit) {
|
||||||
expand.rotation = if(el.second) 90f else 0f
|
|
||||||
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
|
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
|
||||||
expand.visibility = if(!el.first.isEnd) View.VISIBLE else View.GONE
|
|
||||||
|
|
||||||
textView.text = el.first.fullName
|
textView.text = el.first.fullName
|
||||||
|
if (el.first.type == LocType.GROUP) {
|
||||||
|
textView.setTypeface(null, Typeface.BOLD)
|
||||||
|
|
||||||
|
val colorGrayTyped = TypedValue()
|
||||||
|
ctx.theme.resolveAttribute(android.R.attr.panelColorBackground, colorGrayTyped, true)
|
||||||
|
val color = Color.valueOf(colorGrayTyped.data)
|
||||||
|
textView.setBackgroundColor(Color.valueOf(color.red(), color.green(), color.blue(), 0.5f).toArgb())
|
||||||
|
list.adapter = FoldingListAdapter(ctx, el.first.children,visited, parentLambda)
|
||||||
|
textView.parent.parent.requestChildFocus(textView,textView)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
val colorBackgroundTyped = TypedValue()
|
||||||
|
ctx.theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true)
|
||||||
|
textView.backgroundTintList = null
|
||||||
|
textView.background = ColorDrawable(colorBackgroundTyped.data)
|
||||||
|
textView.isActivated = false
|
||||||
|
|
||||||
|
val layoutParam = checkBox.layoutParams
|
||||||
|
layoutParam.width = 125
|
||||||
|
checkBox.layoutParams = layoutParam
|
||||||
|
checkBox.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
checkBox.checkedState =
|
checkBox.checkedState =
|
||||||
if (visited.visited(el.first)) MaterialCheckBox.STATE_CHECKED
|
if (visited.visited(el.first)) MaterialCheckBox.STATE_CHECKED
|
||||||
else if (el.first.children.any { visited.visited(it) }) MaterialCheckBox.STATE_INDETERMINATE
|
else if (el.first.children.any { visited.visited(it) }) MaterialCheckBox.STATE_INDETERMINATE
|
||||||
else MaterialCheckBox.STATE_UNCHECKED
|
else MaterialCheckBox.STATE_UNCHECKED
|
||||||
|
|
||||||
textView.parent.parent.requestChildFocus(textView,textView)
|
|
||||||
list.adapter = FoldingListAdapter(ctx, el.first.children,visited, parentLambda)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addListeners(expandLambda: ()->Boolean, visitedLambda: (Boolean)->Unit) {
|
fun addListeners(expandLambda: ()->Boolean, visitedLambda: (Boolean)->Unit) {
|
||||||
|
textView.setOnClickListener { expandLambda() }
|
||||||
textView.setOnClickListener { checkBox.toggle() }
|
|
||||||
checkBox.addOnCheckedStateChangedListener { _, e ->
|
checkBox.addOnCheckedStateChangedListener { _, e ->
|
||||||
visitedLambda(e == MaterialCheckBox.STATE_CHECKED)
|
visitedLambda(e == MaterialCheckBox.STATE_CHECKED)
|
||||||
}
|
}
|
||||||
|
|
||||||
textView.setOnLongClickListener{ expandLambda() }
|
|
||||||
expand.setOnClickListener { expandLambda() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
class LicenseFragment: Fragment() {
|
||||||
|
private var _binding: FragmentLicenseBinding? = 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 = FragmentLicenseBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
val librariesFragment = LibsBuilder()
|
||||||
|
.withLicenseShown(true)
|
||||||
|
.supportFragment()
|
||||||
|
|
||||||
|
requireActivity().supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.license_fragment_view, librariesFragment)
|
||||||
|
.commit()
|
||||||
|
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,19 @@
|
|||||||
package net.helcel.beendroid.activity
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.Menu
|
||||||
|
import android.view.MenuInflater
|
||||||
|
import android.view.MenuItem
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.core.view.MenuProvider
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.caverock.androidsvg.RenderOptions
|
import com.caverock.androidsvg.RenderOptions
|
||||||
@ -17,6 +27,8 @@ import net.helcel.beendroid.svg.PSVGWrapper
|
|||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
private lateinit var map : SVGImageView
|
private lateinit var map : SVGImageView
|
||||||
private lateinit var list : RecyclerView
|
private lateinit var list : RecyclerView
|
||||||
|
|
||||||
@ -24,32 +36,103 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private lateinit var psvg : PSVGWrapper
|
private lateinit var psvg : PSVGWrapper
|
||||||
private lateinit var css : CSSWrapper
|
private lateinit var css : CSSWrapper
|
||||||
|
|
||||||
|
private var processor: ImageProcessor = ImageProcessor({ refreshMapCompute() },{ refreshMapDisplay(it) })
|
||||||
|
|
||||||
private val bitmap: Bitmap = Bitmap.createBitmap(1200,900, Bitmap.Config.ARGB_8888)
|
private val bitmap: Bitmap = Bitmap.createBitmap(1200,900, Bitmap.Config.ARGB_8888)
|
||||||
private val canvas = Canvas(bitmap)
|
private val canvas = Canvas(bitmap)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
canvas.drawRGB(255, 255, 255)
|
// Create action bar
|
||||||
|
val colorPrimaryTyped = TypedValue()
|
||||||
|
theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true)
|
||||||
|
supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data))
|
||||||
|
|
||||||
|
// 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)))
|
||||||
|
|
||||||
|
// Create menu in action bar
|
||||||
|
addMenuProvider(object : MenuProvider {
|
||||||
|
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||||
|
menuInflater.inflate(R.menu.menu_main, menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||||
|
return when (menuItem.itemId) {
|
||||||
|
R.id.action_edit -> {
|
||||||
|
// TODO: Enable editing selected countries
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.action_stats -> {
|
||||||
|
// TODO: Write stats activity
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.action_settings -> {
|
||||||
|
// Open settings
|
||||||
|
startActivity(Intent(this@MainActivity, SettingsActivity::class.java))
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
// Restore visited countries
|
||||||
visited = Visited(this)
|
visited = Visited(this)
|
||||||
visited.load()
|
visited.load()
|
||||||
|
|
||||||
|
// Wrap lists of countries
|
||||||
psvg = PSVGWrapper(this)
|
psvg = PSVGWrapper(this)
|
||||||
css = CSSWrapper(visited)
|
css = CSSWrapper(visited)
|
||||||
|
|
||||||
|
// Populate map from list of countries
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
map = findViewById(R.id.map)
|
map = findViewById(R.id.map)
|
||||||
map.setImageBitmap(bitmap)
|
map.setImageBitmap(bitmap)
|
||||||
|
refreshMapDisplay(refreshMapCompute())
|
||||||
|
|
||||||
refreshMap()
|
// Populate list below the map
|
||||||
|
|
||||||
list = findViewById(R.id.list)
|
list = findViewById(R.id.list)
|
||||||
list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
|
list.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
|
||||||
list.adapter = FoldingListAdapter(this, World.WWW.children, visited) { refreshMap() }
|
list.adapter = FoldingListAdapter(this, World.WWW.children, visited) { processor.process() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun refreshMap(){
|
private fun refreshMapDisplay(css_value: String){
|
||||||
psvg.get().renderToCanvas(canvas,RenderOptions.create().css(css.get()))
|
// Set or reset background (replaces canvas.drawColor(0, 0, 0))
|
||||||
|
val colorBackgroundTyped = TypedValue()
|
||||||
|
theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true)
|
||||||
|
canvas.drawColor(colorBackgroundTyped.data)
|
||||||
|
|
||||||
|
// Render all countries and visited ones
|
||||||
|
psvg.getFill().renderToCanvas(canvas, RenderOptions.create().css(css_value))
|
||||||
|
|
||||||
|
// Render all contours in the same color as the background to make them much clearer
|
||||||
|
psvg.getDraw().renderToCanvas(canvas)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshMapCompute() : String {
|
||||||
|
return css.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ImageProcessor(private val refreshMapCompute: ()->String, private val refreshMapDisplay: (String)->Unit) {
|
||||||
|
|
||||||
|
private var currentJob : Job? = null
|
||||||
|
fun process() {
|
||||||
|
currentJob?.cancel()
|
||||||
|
currentJob = CoroutineScope(Dispatchers.Main).launch {
|
||||||
|
try {
|
||||||
|
refreshMapDisplay(refreshMapCompute())
|
||||||
|
} catch (_: CancellationException) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.TypedValue
|
||||||
|
import android.view.MenuItem
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import net.helcel.beendroid.R
|
||||||
|
|
||||||
|
class SettingsActivity: AppCompatActivity() {
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
// Bind activity to XML layout with fragment view
|
||||||
|
setContentView(R.layout.activity_settings)
|
||||||
|
|
||||||
|
// Create action bar
|
||||||
|
val colorPrimaryTyped = TypedValue()
|
||||||
|
theme.resolveAttribute(android.R.attr.colorPrimary, colorPrimaryTyped, true)
|
||||||
|
supportActionBar?.setBackgroundDrawable(ColorDrawable(colorPrimaryTyped.data))
|
||||||
|
supportActionBar?.title = getString(R.string.action_settings)
|
||||||
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
|
|
||||||
|
// Populate activity with settings fragment
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.fragment_view, SettingsFragment(), getString(R.string.action_settings))
|
||||||
|
.commit()
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
// Configure on back pressed
|
||||||
|
supportFragmentManager.findFragmentById(R.id.fragment_view).let {
|
||||||
|
when (it) {
|
||||||
|
is LicenseFragment, is AboutFragment -> {
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.remove(it)
|
||||||
|
.commit()
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.fragment_view, SettingsFragment(), getString(R.string.action_settings))
|
||||||
|
.commit()
|
||||||
|
supportActionBar?.title = getString(R.string.action_settings)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package net.helcel.beendroid.activity
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
class SettingsFragment: PreferenceFragmentCompat() {
|
||||||
|
private lateinit var themePreference: ListPreference
|
||||||
|
|
||||||
|
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 ->
|
||||||
|
setTheme(requireContext(), key as String)
|
||||||
|
}
|
||||||
|
|
||||||
|
val aboutPreference = findPreference<Preference>(getString(R.string.about))
|
||||||
|
aboutPreference?.setOnPreferenceClickListener {
|
||||||
|
requireActivity().supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.fragment_view, AboutFragment(), getString(R.string.about))
|
||||||
|
.commit()
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
val licensesPreference = findPreference<Preference>(getString(R.string.licenses))
|
||||||
|
licensesPreference?.setOnPreferenceClickListener {
|
||||||
|
requireActivity().supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.fragment_view, LicenseFragment(), getString(R.string.licenses))
|
||||||
|
.commit()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,13 +10,13 @@ class Visited(ctx: Context) {
|
|||||||
|
|
||||||
fun load() {
|
fun load() {
|
||||||
|
|
||||||
Group.values().forEach {
|
Group.entries.forEach {
|
||||||
locs[it] = pref.getBoolean(it.code, false)
|
locs[it] = pref.getBoolean(it.code, false)
|
||||||
}
|
}
|
||||||
Country.values().forEach {
|
Country.entries.forEach {
|
||||||
locs[it] = pref.getBoolean(it.code, false)
|
locs[it] = pref.getBoolean(it.code, false)
|
||||||
}
|
}
|
||||||
State.values().forEach {
|
State.entries.forEach {
|
||||||
locs[it] = pref.getBoolean(it.code, false)
|
locs[it] = pref.getBoolean(it.code, false)
|
||||||
}
|
}
|
||||||
editor.apply()
|
editor.apply()
|
||||||
|
@ -5,16 +5,18 @@ import net.helcel.beendroid.countries.World
|
|||||||
|
|
||||||
class CSSWrapper(private val visited: Visited) {
|
class CSSWrapper(private val visited: Visited) {
|
||||||
|
|
||||||
|
private val colorPrimary = "#0187FF"
|
||||||
|
|
||||||
fun get() : String {
|
fun get() : String {
|
||||||
return listOf(World.WWW.children
|
return listOf(World.WWW.children
|
||||||
.filter { visited.visited(it)}
|
.filter { visited.visited(it)}
|
||||||
.map { ".${it.code}{fill:blue;}"}
|
.map { ".${it.code}{fill:$colorPrimary;}"}
|
||||||
.fold(""){acc, s-> acc + s},
|
.fold(""){acc, s-> acc + s},
|
||||||
World.WWW.children
|
World.WWW.children
|
||||||
.filter { !visited.visited(it) }
|
.filter { !visited.visited(it) }
|
||||||
.map { cg -> cg.children
|
.map { cg -> cg.children
|
||||||
.filter { visited.visited(it) }
|
.filter { visited.visited(it) }
|
||||||
.map { ".${it.code}{fill:blue;}"}
|
.map { ".${it.code}{fill:$colorPrimary;}"}
|
||||||
.fold(""){acc, s-> acc + s}
|
.fold(""){acc, s-> acc + s}
|
||||||
}.fold(""){acc,s->acc+s},
|
}.fold(""){acc,s->acc+s},
|
||||||
).fold(""){acc,s-> acc+s}
|
).fold(""){acc,s-> acc+s}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.helcel.beendroid.svg
|
package net.helcel.beendroid.svg
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.util.TypedValue
|
||||||
import com.caverock.androidsvg.SVG
|
import com.caverock.androidsvg.SVG
|
||||||
import net.helcel.beendroid.countries.Country
|
import net.helcel.beendroid.countries.Country
|
||||||
import net.helcel.beendroid.countries.GeoLoc
|
import net.helcel.beendroid.countries.GeoLoc
|
||||||
@ -11,8 +12,20 @@ class PSVGWrapper(ctx: Context) {
|
|||||||
private val cm = HashMap<GeoLoc, PSVGLoader>()
|
private val cm = HashMap<GeoLoc, PSVGLoader>()
|
||||||
private var fm = ""
|
private var fm = ""
|
||||||
|
|
||||||
|
private val colorForeground: String
|
||||||
|
private val colorBackground: String
|
||||||
|
|
||||||
init {
|
init {
|
||||||
Country.values().forEach {
|
val colorSecondaryTyped = TypedValue()
|
||||||
|
ctx.theme.resolveAttribute(android.R.attr.panelColorBackground, colorSecondaryTyped, true)
|
||||||
|
colorForeground = "\"#${Integer.toHexString(colorSecondaryTyped.data).subSequence(2, 8)}\""
|
||||||
|
|
||||||
|
val colorBackgroundTyped = TypedValue()
|
||||||
|
ctx.theme.resolveAttribute(android.R.attr.colorBackground, colorBackgroundTyped, true)
|
||||||
|
colorBackground = "\"#${Integer.toHexString(colorBackgroundTyped.data).subSequence(2, 8)}\""
|
||||||
|
|
||||||
|
|
||||||
|
Country.entries.forEach {
|
||||||
cm[it] = PSVGLoader(ctx, it, Level.ZERO).load()
|
cm[it] = PSVGLoader(ctx, it, Level.ZERO).load()
|
||||||
}
|
}
|
||||||
build()
|
build()
|
||||||
@ -31,12 +44,12 @@ class PSVGWrapper(ctx: Context) {
|
|||||||
}.fold("") { acc, e -> acc + e }
|
}.fold("") { acc, e -> acc + e }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun get(): SVG {
|
fun getFill(): SVG {
|
||||||
return SVG.getFromString("<svg id=\"map\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"1200\" x=\"0\" y=\"0\" >$fm</svg>")
|
return SVG.getFromString("<svg id=\"map\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"1200\" x=\"0\" y=\"0\" fill=${colorForeground}>$fm</svg>")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getDraw(): SVG {
|
||||||
|
return SVG.getFromString("<svg id=\"map\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"1200\" x=\"0\" y=\"0\" fill-opacity=\"0\" stroke=${colorBackground}>$fm</svg>")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,30 +1,14 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
android:width="108dp"
|
android:width="12dp"
|
||||||
android:height="108dp"
|
android:height="12dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="1600"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="1600" >
|
||||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
|
||||||
<aapt:attr name="android:fillColor">
|
|
||||||
<gradient
|
|
||||||
android:endX="85.84757"
|
|
||||||
android:endY="92.4963"
|
|
||||||
android:startX="42.9492"
|
|
||||||
android:startY="49.59793"
|
|
||||||
android:type="linear">
|
|
||||||
<item
|
|
||||||
android:color="#44000000"
|
|
||||||
android:offset="0.0" />
|
|
||||||
<item
|
|
||||||
android:color="#00000000"
|
|
||||||
android:offset="1.0" />
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FFFFFF"
|
android:fillColor="#FFFFFF"
|
||||||
android:fillType="nonZero"
|
android:fillType="nonZero"
|
||||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
android:pathData="m800,1200q-83,0 -156,-31.5Q571,1137 517,1083 463,1029 431.5,956 400,883 400,800 400,717 431.5,644 463,571 517,517 571,463 644,431.5 717,400 800,400q83,0 156,31.5 73,31.5 127,85.5 54,54 85.5,127 31.5,73 31.5,156 0,83 -31.5,156 -31.5,73 -85.5,127 -54,54 -127,85.5 -73,31.5 -156,31.5zM800,1120q134,0 227,-93 93,-93 93,-227 0,-7 -0.5,-14.5 -0.5,-7.5 -0.5,-12.5 -5,29 -27,48 -22,19 -52,19L960,840Q927,840 903.5,816.5 880,793 880,760L880,720L720,720v-80q0,-33 23.5,-56.5Q767,560 800,560h40v0q0,-23 12.5,-40.5Q865,502 883,491q-20,-5 -40.5,-8 -20.5,-3 -42.5,-3 -134,0 -227,93 -93,93 -93,227 0,0 0,0 0,0 0,0h200q66,0 113,47 47,47 47,113v40L720,1000v110q20,5 39.5,7.5 19.5,2.5 40.5,2.5z"
|
||||||
android:strokeWidth="1"
|
android:strokeWidth="1"
|
||||||
android:strokeColor="#00000000" />
|
android:strokeColor="#00000000" />
|
||||||
</vector>
|
</vector>
|
18
app/src/main/res/drawable/checklist.xml
Normal file
18
app/src/main/res/drawable/checklist.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorOnBackground"
|
||||||
|
android:pathData="M22,7h-9v2h9V7zM22,15h-9v2h9V15z"/>
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorPrimary"
|
||||||
|
android:pathData="M5.54,11L2,7.46l1.41,-1.41l2.12,2.12l4.24,-4.24l1.41,1.41L5.54,11z"/>
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorPrimary"
|
||||||
|
android:pathData="M5.54,19L2,15.46l1.41,-1.41l2.12,2.12l4.24,-4.24l1.41,1.41L5.54,19z"/>
|
||||||
|
</vector>
|
@ -4,6 +4,6 @@
|
|||||||
android:viewportWidth="320"
|
android:viewportWidth="320"
|
||||||
android:viewportHeight="512">
|
android:viewportHeight="512">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FFFFFFFF"
|
android:fillColor="?attr/colorOnBackground"
|
||||||
android:pathData="M310.6,233.4c12.5,12.5 12.5,32.8 0,45.3l-192,192c-12.5,12.5 -32.8,12.5 -45.3,0s-12.5,-32.8 0,-45.3L242.7,256 73.4,86.6c-12.5,-12.5 -12.5,-32.8 0,-45.3s32.8,-12.5 45.3,0l192,192z"/>
|
android:pathData="M310.6,233.4c12.5,12.5 12.5,32.8 0,45.3l-192,192c-12.5,12.5 -32.8,12.5 -45.3,0s-12.5,-32.8 0,-45.3L242.7,256 73.4,86.6c-12.5,-12.5 -12.5,-32.8 0,-45.3s32.8,-12.5 45.3,0l192,192z"/>
|
||||||
</vector>
|
</vector>
|
10
app/src/main/res/drawable/edit.xml
Normal file
10
app/src/main/res/drawable/edit.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:width="24dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/white"
|
||||||
|
android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
|
||||||
|
</vector>
|
@ -2,169 +2,9 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="108dp"
|
android:width="108dp"
|
||||||
android:height="108dp"
|
android:height="108dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#3DDC84"
|
android:fillColor="#FF0187FF"
|
||||||
android:pathData="M0,0h108v108h-108z" />
|
android:pathData="M0,0h960v960h-960z" />
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M9,0L9,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,0L19,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,0L29,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,0L39,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,0L49,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,0L59,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,0L69,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,0L79,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M89,0L89,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M99,0L99,108"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,9L108,9"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,19L108,19"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,29L108,29"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,39L108,39"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,49L108,49"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,59L108,59"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,69L108,69"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,79L108,79"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,89L108,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,99L108,99"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,29L89,29"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,39L89,39"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,49L89,49"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,59L89,59"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,69L89,69"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,79L89,79"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,19L29,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,19L39,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,19L49,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,19L59,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,19L69,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,19L79,89"
|
|
||||||
android:strokeWidth="0.8"
|
|
||||||
android:strokeColor="#33FFFFFF" />
|
|
||||||
</vector>
|
</vector>
|
||||||
|
13
app/src/main/res/drawable/info.xml
Normal file
13
app/src/main/res/drawable/info.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorOnBackground"
|
||||||
|
android:pathData="M80,160Q80,127 103.5,103.5Q127,80 160,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,640Q880,673 856.5,696.5Q833,720 800,720L240,720L80,880ZM206,640L800,640Q800,640 800,640Q800,640 800,640L800,160Q800,160 800,160Q800,160 800,160L160,160Q160,160 160,160Q160,160 160,160L160,685L206,640ZM160,640L160,640L160,160Q160,160 160,160Q160,160 160,160L160,160Q160,160 160,160Q160,160 160,160L160,640Q160,640 160,640Q160,640 160,640L160,640Z" />
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorPrimary"
|
||||||
|
android:pathData="M480,280Q497,280 508.5,268.5Q520,257 520,240Q520,223 508.5,211.5Q497,200 480,200Q463,200 451.5,211.5Q440,223 440,240Q440,257 451.5,268.5Q463,280 480,280ZM440,600L520,600L520,360L440,360L440,600ZM80,880L80,160" />
|
||||||
|
</vector>
|
14
app/src/main/res/drawable/palette.xml
Normal file
14
app/src/main/res/drawable/palette.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<vector
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:width="24dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorOnBackground"
|
||||||
|
android:pathData="M12,2C6.49,2 2,6.49 2,12s4.49,10 10,10c1.38,0 2.5,-1.12 2.5,-2.5c0,-0.61 -0.23,-1.2 -0.64,-1.67c-0.08,-0.1 -0.13,-0.21 -0.13,-0.33c0,-0.28 0.22,-0.5 0.5,-0.5H16c3.31,0 6,-2.69 6,-6C22,6.04 17.51,2 12,2zM17.5,13c-0.83,0 -1.5,-0.67 -1.5,-1.5c0,-0.83 0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5C19,12.33 18.33,13 17.5,13zM14.5,9C13.67,9 13,8.33 13,7.5C13,6.67 13.67,6 14.5,6S16,6.67 16,7.5C16,8.33 15.33,9 14.5,9zM5,11.5C5,10.67 5.67,10 6.5,10S8,10.67 8,11.5C8,12.33 7.33,13 6.5,13S5,12.33 5,11.5zM11,7.5C11,8.33 10.33,9 9.5,9S8,8.33 8,7.5C8,6.67 8.67,6 9.5,6S11,6.67 11,7.5z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorPrimary"
|
||||||
|
android:pathData="M17.5,13c-0.83,0 -1.5,-0.67 -1.5,-1.5c0,-0.83 0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5C19,12.33 18.33,13 17.5,13zM14.5,9C13.67,9 13,8.33 13,7.5C13,6.67 13.67,6 14.5,6S16,6.67 16,7.5C16,8.33 15.33,9 14.5,9zM5,11.5C5,10.67 5.67,10 6.5,10S8,10.67 8,11.5C8,12.33 7.33,13 6.5,13S5,12.33 5,11.5zM11,7.5C11,8.33 10.33,9 9.5,9S8,8.33 8,7.5C8,6.67 8.67,6 9.5,6S11,6.67 11,7.5z" />
|
||||||
|
</vector>
|
@ -2,8 +2,9 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:theme="@style/Theme.Beendroid"
|
||||||
android:layout_height="fill_parent">
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.caverock.androidsvg.SVGImageView
|
<com.caverock.androidsvg.SVGImageView
|
||||||
android:id="@+id/map"
|
android:id="@+id/map"
|
||||||
@ -15,7 +16,8 @@
|
|||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/sv"
|
android:id="@+id/sv"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
|
android:scrollbars="vertical"
|
||||||
android:layout_weight="1">
|
android:layout_weight="1">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
16
app/src/main/res/layout/activity_settings.xml
Normal file
16
app/src/main/res/layout/activity_settings.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:theme="@style/Theme.Beendroid"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".activity.SettingsActivity">
|
||||||
|
|
||||||
|
<androidx.fragment.app.FragmentContainerView
|
||||||
|
android:id="@+id/fragment_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
68
app/src/main/res/layout/fragment_about.xml
Normal file
68
app/src/main/res/layout/fragment_about.xml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".activity.AboutFragment" >
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="250dp"
|
||||||
|
android:layout_height="250dp"
|
||||||
|
android:layout_marginTop="40dp"
|
||||||
|
android:layout_marginBottom="30dp"
|
||||||
|
android:src="@mipmap/ic_launcher_round" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="30sp"
|
||||||
|
android:textAlignment="center" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="0dp"
|
||||||
|
android:layout_marginBottom="15dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="@string/app_version"
|
||||||
|
android:textSize="25sp"
|
||||||
|
android:textAlignment="center" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginBottom="15dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="@string/beendroid_is_foss"
|
||||||
|
android:textAlignment="center" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginBottom="15dp"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="@string/beendroid_repo"
|
||||||
|
android:textAlignment="center" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
15
app/src/main/res/layout/fragment_license.xml
Normal file
15
app/src/main/res/layout/fragment_license.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".activity.LicenseFragment" >
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/license_fragment_view"
|
||||||
|
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
@ -9,54 +8,61 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<ImageView
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/expand"
|
android:id="@+id/textView"
|
||||||
android:layout_width="48dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="50dp"
|
||||||
android:contentDescription=">"
|
app:cornerRadius="0dp"
|
||||||
android:scaleX="0.5"
|
android:gravity="start|center_vertical"
|
||||||
android:scaleY="0.5"
|
android:textColor="?attr/colorOnBackground"
|
||||||
android:visibility="visible"
|
android:textAllCaps="false"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/textView"
|
android:textAppearance="?attr/textAppearanceBody2"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:paddingStart="20dp"
|
||||||
|
android:paddingEnd="20dp"
|
||||||
|
android:insetTop="4dp"
|
||||||
|
android:insetBottom="4dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/text2checkbox"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/text2checkbox"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:ignore="HardcodedText" />
|
app:layout_constraintVertical_bias="1.0" />
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:id="@+id/text2checkbox"
|
||||||
|
android:layout_width="0.01dp"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:gravity="start|center_vertical"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/textView"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/checkBox"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/textView" />
|
||||||
|
|
||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
android:id="@+id/checkBox"
|
android:id="@+id/checkBox"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0.01dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="50dp"
|
||||||
app:checkedState="indeterminate"
|
app:checkedState="indeterminate"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/textView"
|
android:visibility="invisible"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/textView"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="1"
|
app:layout_constraintHorizontal_bias="1"
|
||||||
app:layout_constraintStart_toEndOf="@+id/textView"
|
app:layout_constraintStart_toEndOf="@id/textView"
|
||||||
app:layout_constraintTop_toTopOf="@+id/textView"
|
app:layout_constraintTop_toTopOf="@id/textView"
|
||||||
app:layout_constraintVertical_bias="0.5" />
|
app:layout_constraintVertical_bias="0.5" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
|
||||||
android:id="@+id/textView"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:textColor="@color/design_default_color_on_primary"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/checkBox"
|
|
||||||
app:layout_constraintEnd_toStartOf="@+id/checkBox"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/expand"
|
|
||||||
app:layout_constraintTop_toTopOf="@+id/expand"
|
|
||||||
app:layout_constraintVertical_bias="1.0" />
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/sub_item"
|
android:id="@+id/sub_item"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="0dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/checkBox">
|
app:layout_constraintTop_toBottomOf="@id/checkBox">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/list_list"
|
android:id="@+id/list_list"
|
||||||
|
@ -2,9 +2,25 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
tools:context="net.helcel.beendroid.activity.MainActivity" >
|
tools:context="net.helcel.beendroid.activity.MainActivity" >
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_edit"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:icon="@drawable/edit"
|
||||||
|
android:visible="false"
|
||||||
|
android:title="@string/action_edit"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_stats"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="@string/action_stats"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_settings"
|
android:id="@+id/action_settings"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
android:title="@string/action_settings"
|
android:title="@string/action_settings"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
</menu>
|
</menu>
|
@ -1,5 +1,9 @@
|
|||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<style name="Theme.Beendroid" parent="Theme.Material3.DayNight.NoActionBar">
|
<style name="Theme.Beendroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||||
|
<item name="colorPrimary">@color/teal_700</item>
|
||||||
|
<item name="android:colorPrimary">@color/teal_700</item>
|
||||||
|
<item name="android:panelColorBackground">@color/darkgray</item>
|
||||||
<item name="android:statusBarColor">?attr/colorPrimary</item>
|
<item name="android:statusBarColor">?attr/colorPrimary</item>
|
||||||
|
<item name="colorAccent">?attr/colorPrimary</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
8
app/src/main/res/values/arrays.xml
Normal file
8
app/src/main/res/values/arrays.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string-array name="entries_theme" >
|
||||||
|
<item>@string/system</item>
|
||||||
|
<item>@string/light</item>
|
||||||
|
<item>@string/dark</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
13
app/src/main/res/values/colors.xml
Normal file
13
app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="purple_200">#FFBB86FC</color>
|
||||||
|
<color name="purple_500">#FF6200EE</color>
|
||||||
|
<color name="purple_700">#FF3700B3</color>
|
||||||
|
<color name="teal_200">#FF03AFFF</color>
|
||||||
|
<color name="teal_700">#FF0187FF</color>
|
||||||
|
<color name="yellowish">#FFFFDD00</color>
|
||||||
|
<color name="black">#FF000000</color>
|
||||||
|
<color name="darkgray">#FF555555</color>
|
||||||
|
<color name="lightgray">#FFBBBBBB</color>
|
||||||
|
<color name="white">#FFFFFFFF</color>
|
||||||
|
</resources>
|
@ -1,8 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Beendroid</string>
|
<string name="app_name">BeenDroid</string>
|
||||||
|
<string name="app_version">1.0</string>
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
|
<string name="action_stats">Stats</string>
|
||||||
|
<string name="action_edit">Edit</string>
|
||||||
<string name="welcome">Welcome!</string>
|
<string name="welcome">Welcome!</string>
|
||||||
<string name="change_lang">Change language</string>
|
<string name="change_lang">Change language</string>
|
||||||
|
<string name="key_theme">App theme</string>
|
||||||
|
<string name="system">System</string>
|
||||||
|
<string name="light">Light</string>
|
||||||
|
<string name="dark">Dark</string>
|
||||||
|
<string name="licenses">Licenses</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="foss_licenses">Free and open source dependencies and licenses</string>
|
||||||
|
<string name="about_beendroid">About the BeenDroid application</string>
|
||||||
</resources>
|
</resources>
|
@ -1,14 +1,9 @@
|
|||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<style name="Theme.Beendroid" parent="Theme.Material3.DayNight.NoActionBar">
|
<style name="Theme.Beendroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||||
|
<item name="colorPrimary">@color/teal_700</item>
|
||||||
|
<item name="android:colorPrimary">@color/teal_700</item>
|
||||||
|
<item name="android:panelColorBackground">@color/lightgray</item>
|
||||||
<item name="android:statusBarColor">?attr/colorPrimary</item>
|
<item name="android:statusBarColor">?attr/colorPrimary</item>
|
||||||
|
<item name="colorAccent">?attr/colorPrimary</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Beendroid.NoActionBar">
|
|
||||||
<item name="windowActionBar">false</item>
|
|
||||||
<item name="windowNoTitle">true</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="Theme.Beendroid.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
|
|
||||||
|
|
||||||
<style name="Theme.Beendroid.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
|
|
||||||
</resources>
|
</resources>
|
31
app/src/main/res/xml/fragment_settings.xml
Normal file
31
app/src/main/res/xml/fragment_settings.xml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
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" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:enabled="true"
|
||||||
|
app:key="@string/licenses"
|
||||||
|
app:icon="@drawable/checklist"
|
||||||
|
app:title="@string/licenses"
|
||||||
|
android:summary="@string/foss_licenses"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:enabled="true"
|
||||||
|
app:key="@string/about"
|
||||||
|
app:icon="@drawable/info"
|
||||||
|
app:title="@string/about"
|
||||||
|
android:summary="@string/about_beendroid"/>
|
||||||
|
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
@ -14,5 +14,5 @@ dependencyResolutionManagement {
|
|||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rootProject.name = "beendroid"
|
rootProject.name = "BeenDroid"
|
||||||
include ':app'
|
include ':app'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user