Compare commits
2 Commits
01020bdc5c
...
968f4206cc
Author | SHA1 | Date | |
---|---|---|---|
|
968f4206cc | ||
|
71a33c4db7 |
@ -8,6 +8,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
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.google.android.material.checkbox.MaterialCheckBox
|
import com.google.android.material.checkbox.MaterialCheckBox
|
||||||
@ -63,6 +64,9 @@ class GeolocListAdapter(
|
|||||||
list.itemAnimator = null //TODO: Fix slow recycler expansion
|
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>) {
|
fun bind(el: Pair<GeoLoc, Boolean>) {
|
||||||
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
|
subItemView.visibility = if (el.second) View.VISIBLE else View.GONE
|
||||||
|
|
||||||
@ -71,7 +75,15 @@ class GeolocListAdapter(
|
|||||||
textView.backgroundTintList = ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.colorBackground).color)
|
textView.backgroundTintList = ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.colorBackground).color)
|
||||||
} else {
|
} else {
|
||||||
textView.setTypeface(null, Typeface.BOLD)
|
textView.setTypeface(null, Typeface.BOLD)
|
||||||
progressView.text = ctx.getString(R.string.rate,(el.first.children.map { visits!!.getVisited(it) != 0 }.count { it }), el.first.children.size)
|
|
||||||
|
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)
|
textView.backgroundTintList = ColorStateList.valueOf(colorWrapper(ctx, android.R.attr.panelColorBackground).color).withAlpha(128)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import android.view.LayoutInflater
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
|
import android.widget.TextView
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -34,18 +35,28 @@ class GroupListAdapter(private val activity: FragmentActivity, private val selec
|
|||||||
|
|
||||||
inner class GroupViewHolder(itemView: View, private val activity: FragmentActivity, private val selectDialog: DialogFragment?) : RecyclerView.ViewHolder(itemView) {
|
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 color: Button = itemView.findViewById(R.id.group_color)
|
||||||
|
private val entries: TextView = itemView.findViewById(R.id.name)
|
||||||
|
|
||||||
fun bind(entry: Pair<Int, Groups.Group>) {
|
fun bind(entry: Pair<Int, Groups.Group>) {
|
||||||
color.text = entry.second.name
|
color.text = entry.second.name
|
||||||
color.setBackgroundColor(entry.second.color.color)
|
val entryColor = entry.second.color.color
|
||||||
color.setTextColor(getContrastColor(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 {
|
color.setOnClickListener {
|
||||||
if (selectDialog == null) {
|
if (selectDialog == null) {
|
||||||
val dialogFragment = EditGroupAddFragment(entry.first) {
|
val dialogFragment = EditGroupAddFragment(entry.first) {
|
||||||
val newEntry = groups!!.getGroupFromKey(entry.first)!!
|
val newEntry = groups!!.getGroupFromKey(entry.first)!!
|
||||||
color.text = newEntry.name
|
color.text = newEntry.name
|
||||||
color.setBackgroundColor(newEntry.color.color)
|
val newEntryColor = newEntry.color.color
|
||||||
color.setTextColor(getContrastColor(newEntry.color.color))
|
val contrastNewEntryColor = getContrastColor(newEntryColor)
|
||||||
|
color.setBackgroundColor(newEntryColor)
|
||||||
|
color.setTextColor(contrastNewEntryColor)
|
||||||
|
entries.setTextColor(contrastNewEntryColor)
|
||||||
|
entries.text = "0"
|
||||||
}
|
}
|
||||||
dialogFragment.show(
|
dialogFragment.show(
|
||||||
activity.supportFragmentManager,
|
activity.supportFragmentManager,
|
||||||
|
@ -21,6 +21,16 @@ class SettingsFragment: PreferenceFragmentCompat() {
|
|||||||
setTheme(requireContext(), key as String)
|
setTheme(requireContext(), key as String)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open license fragment
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open about fragment
|
||||||
val aboutPreference = findPreference<Preference>(getString(R.string.about))
|
val aboutPreference = findPreference<Preference>(getString(R.string.about))
|
||||||
aboutPreference?.setOnPreferenceClickListener {
|
aboutPreference?.setOnPreferenceClickListener {
|
||||||
requireActivity().supportFragmentManager.beginTransaction()
|
requireActivity().supportFragmentManager.beginTransaction()
|
||||||
@ -30,14 +40,6 @@ class SettingsFragment: PreferenceFragmentCompat() {
|
|||||||
true
|
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 {
|
companion object {
|
||||||
|
@ -28,6 +28,10 @@ class Visits(val id: Int, private val locs: HashMap<String,Int>) {
|
|||||||
return locs.getOrDefault(key.code,0)
|
return locs.getOrDefault(key.code,0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun countVisited(key: Int): Int {
|
||||||
|
return locs.filter { it.value == key }.size
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
@Serializer(Visits::class)
|
@Serializer(Visits::class)
|
||||||
class VisitsSerializer {
|
class VisitsSerializer {
|
||||||
|
14
app/src/main/res/drawable/stats.xml
Normal file
14
app/src/main/res/drawable/stats.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<vector
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:width="24dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorOnBackground"
|
||||||
|
android:pathData="M105,727L40,680L240,360L360,500L520,240L629,403Q606,404 585.5,408.5Q565,413 545,421L523,388L371,635L250,494L105,727ZM732,423Q713,415 692.5,410Q672,405 650,404L855,80L920,127L732,423Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorPrimary"
|
||||||
|
android:pathData="M863,920L738,795Q718,809 693.5,816Q669,823 643,823Q568,823 515.5,770.5Q463,718 463,643Q463,568 515.5,515.5Q568,463 643,463Q718,463 770.5,515.5Q823,568 823,643Q823,669 816,693.5Q809,718 795,739L920,863L863,920ZM643,743Q685,743 714,714Q743,685 743,643Q743,601 714,572Q685,543 643,543Q601,543 572,572Q543,601 543,643Q543,685 572,714Q601,743 643,743Z" />
|
||||||
|
</vector>
|
@ -16,11 +16,25 @@
|
|||||||
android:layout_marginTop="2dp"
|
android:layout_marginTop="2dp"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="32dp"
|
||||||
android:layout_marginBottom="2dp"
|
android:layout_marginBottom="2dp"
|
||||||
|
android:textAlignment="textStart"
|
||||||
|
android:textColor="?attr/colorOnPrimary"
|
||||||
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_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:gravity="start|center_vertical"
|
||||||
|
android:paddingStart="20dp"
|
||||||
|
android:paddingEnd="20dp"
|
||||||
|
android:textColor="?attr/colorOnPrimary"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/group_color"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/group_color"
|
||||||
|
app:layout_constraintEnd_toEndOf="@id/group_color" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,4 +5,9 @@
|
|||||||
<item>@string/light</item>
|
<item>@string/light</item>
|
||||||
<item>@string/dark</item>
|
<item>@string/dark</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="entries_stats" >
|
||||||
|
<item>@string/counters</item>
|
||||||
|
<item>@string/percentages</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
<string name="system">System</string>
|
<string name="system">System</string>
|
||||||
<string name="light">Light</string>
|
<string name="light">Light</string>
|
||||||
<string name="dark">Dark</string>
|
<string name="dark">Dark</string>
|
||||||
|
<string name="key_stats">Statistics</string>
|
||||||
|
<string name="counters">Prefer counters (#)</string>
|
||||||
|
<string name="percentages">Prefer percentages (%)</string>
|
||||||
<string name="licenses">Licenses</string>
|
<string name="licenses">Licenses</string>
|
||||||
<string name="about">About</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_is_foss">BeenDroid is free and open source software, licensed under the GNU General Public License (version 3 or later)</string>
|
||||||
@ -22,5 +25,6 @@
|
|||||||
<string name="logo">Logo</string>
|
<string name="logo">Logo</string>
|
||||||
<string name="name">Name</string>
|
<string name="name">Name</string>
|
||||||
<string name="rate">%1$d/%2$d</string>
|
<string name="rate">%1$d/%2$d</string>
|
||||||
|
<string name="percentage">%1$d%</string>
|
||||||
<string name="color_rrggbb">RRGGBB</string>
|
<string name="color_rrggbb">RRGGBB</string>
|
||||||
</resources>
|
</resources>
|
@ -13,6 +13,16 @@
|
|||||||
app:entryValues="@array/entries_theme"
|
app:entryValues="@array/entries_theme"
|
||||||
app:defaultValue="@string/system" />
|
app:defaultValue="@string/system" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
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" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:enabled="true"
|
app:enabled="true"
|
||||||
app:key="@string/licenses"
|
app:key="@string/licenses"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user