1
0
mirror of https://github.com/dzeiocom/OpenHealth.git synced 2025-04-22 19:02:16 +00:00

misc: Cleanup Utils/Units/Workers and Application/Settings files

This commit is contained in:
Florian Bouillon 2023-01-08 00:04:08 +01:00
parent eb2c6f7c4c
commit 86e127f0bd
Signed by: Florian Bouillon
GPG Key ID: BEEAF3722D0EBF64
16 changed files with 84 additions and 88 deletions

View File

@ -19,6 +19,7 @@ class Application : Application() {
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
// setup the CrashHandler
CrashHandler.Builder()
.withActivity(ErrorActivity::class.java)
.withPrefs(prefs)
@ -28,12 +29,15 @@ class Application : Application() {
.build()
.setup(this)
// Android Dynamics Colors
// setup for Android Dynamics Colors
DynamicColors.applyToActivitiesIfAvailable(this)
super.onCreate()
}
/**
* Change the language of the application if said in the settings
*/
override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleUtils.onAttach(base))
}

View File

@ -1,5 +1,8 @@
package com.dzeio.openhealth
/**
* Object containing every keys for the different settings of the application
*/
object Settings {
/**

View File

@ -1,22 +0,0 @@
package com.dzeio.openhealth.units
object UnitFactory {
@Deprecated("Move to Units.Mass.find")
fun mass(unit: String): Units.Mass {
return when (unit.lowercase()) {
"kilogram", "kilograms", "kg" -> Units.Mass.KILOGRAM
"pound", "pounds", "lb" -> Units.Mass.POUND
else -> Units.Mass.KILOGRAM
}
}
@Deprecated("Move to Units.Volume.find")
fun volume(unit: String): Units.Volume {
return when (unit.lowercase()) {
"milliliter", "milliliters", "ml" -> Units.Volume.MILLILITER
"imperial ounce", "imperial ounces", "oz" -> Units.Volume.IMPERIAL_OUNCE
"us ounce", "us ounces" -> Units.Volume.US_OUNCE
else -> Units.Volume.MILLILITER
}
}
}

View File

@ -2,7 +2,13 @@ package com.dzeio.openhealth.units
import com.dzeio.openhealth.R
/**
* Object containing the differents units and how they are converted
*/
object Units {
/**
* the Mass Unit
*/
enum class Mass(
val id: String,
/**
@ -41,11 +47,17 @@ object Units {
return value * modifier
}
/**
* Format the value and let the hundred of grams to be outputed
*/
fun formatToString(value: Float): String {
return String.format("%.1f", value * modifier)
}
}
/**
* the Volume unit
*/
enum class Volume(
val id: String,
/**

View File

@ -1,22 +0,0 @@
package com.dzeio.openhealth.units
@Deprecated("Move to Units.Volume")
enum class WaterUnit(
val unit: String,
val fromML: Float
) {
ML("ml", 1f),
US_OZ("oz", 0.03381413f),
IMP_OZ("oz", 0.03519503f);
companion object {
fun fromSettings(value: String): WaterUnit {
return when (value.lowercase()) {
"milliliter" -> ML
"us ounce" -> US_OZ
"imperial ounce" -> IMP_OZ
else -> ML
}
}
}
}

View File

@ -9,7 +9,9 @@ import java.nio.channels.FileChannel
object BitmapUtils {
/**
* Find source of function lol
* Stolen from StackOverflow but I don't remember where...
*
* Convert an immutable Bitmap to a mutable one if possible
*/
fun convertToMutable(context: Context, imgIn: Bitmap): Bitmap? {
val width = imgIn.width
@ -46,4 +48,4 @@ object BitmapUtils {
}
return null
}
}
}

View File

@ -6,6 +6,11 @@ import androidx.core.content.edit
import com.dzeio.openhealth.Application
import com.dzeio.openhealth.core.Observable
/**
* Class that ease the SharedPreferences works
*
* It allow to use others types simpler and to export them as LiveData for realtime updates
*/
class Configuration(
private val prefs: SharedPreferences
) : SharedPreferences.OnSharedPreferenceChangeListener {

View File

@ -7,6 +7,13 @@ import android.util.Log
import android.widget.ImageView
import java.net.URL
/**
* Stolen from StackOverflow https://stackoverflow.com/a/10868126/7335674
*
* Allows to download an image asynchronously
*
* TODO: rework so it is not deprecated anymore
*/
class DownloadImageTask(var bmImage: ImageView) :
AsyncTask<String?, Void?, Bitmap?>() {
@Deprecated("Deprecated in Java")

View File

@ -4,10 +4,13 @@ import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
/**
* Utils class to draw more complexe elements on a canvas
*/
object DrawUtils {
/**
* Fuck Graphics
* Draw an arc on a canvas or a the previous comment was "Fuck Graphics"
*/
fun drawArc(canvas: Canvas, percent: Float, rect: RectF, pColor: Int, strokeWidth: Float = 1f) {
val r1 = RectF(
@ -26,25 +29,6 @@ object DrawUtils {
canvas.drawArc(r1, 180f, 180 * percent / 100f, false, paint)
}
/**
* Fuck Graphics
*/
fun drawRect(canvas: Canvas, rect: RectF, pColor: Int, strokeWidth: Float = 1f) {
val r1 = RectF(
canvas.realSize(true, rect.left),
canvas.realSize(false, rect.top),
canvas.realSize(true, rect.right),
canvas.realSize(false, rect.bottom)
)
val paint = Paint().apply {
this.strokeWidth = canvas.realSize(true, strokeWidth)
style = Paint.Style.STROKE
color = pColor
isAntiAlias = true
}
canvas.drawRect(r1, paint)
}
private fun Canvas.realSize(isWidth: Boolean, value: Float): Float {
val it = if (isWidth) this.width else this.height
return it * value / 100
@ -55,4 +39,4 @@ object DrawUtils {
return it * value / 100
}
}
}

View File

@ -15,6 +15,11 @@ import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
/**
* Utils object to create graphics using the mikephil charting library
*
* TODO: migrate to DzeioCharts once it is ready
*/
object GraphUtils {
fun lineChartSetup(chart: LineChart, mainColor: Int, textColor: Int) {
@ -96,16 +101,4 @@ object GraphUtils {
// return super.getAxisLabel(value, axis)
}
}
class DateTimeValueFormatter(
private val transformer: Int = 1
) : ValueFormatter() {
override fun getAxisLabel(value: Float, axis: AxisBase?): String {
return SimpleDateFormat(
"yyyy-MM-dd hh",
Locale.getDefault()
).format(Date(value.toLong() * transformer))
// return super.getAxisLabel(value, axis)
}
}
}

View File

@ -5,7 +5,6 @@ import android.content.Context
import android.content.res.Configuration
import android.os.Build
import android.os.LocaleList
import android.util.Log
import androidx.preference.PreferenceManager
import com.dzeio.openhealth.Settings
import java.util.Locale
@ -44,18 +43,19 @@ object LocaleUtils {
}
private fun getPersistedData(context: Context): String {
// TODO: use the config class
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
return preferences.getString(Settings.APP_LANGUAGE, Locale.getDefault().language)
?: Locale.getDefault().language
}
private fun persist(context: Context, language: String?) {
// TODO: use the config class
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
preferences.edit().putString(Settings.APP_LANGUAGE, language).apply()
}
private fun updateResources(context: Context, language: String): Context {
Log.d("LocaleUtils", language)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val locale = Locale(language)
Locale.setDefault(locale)
@ -73,4 +73,4 @@ object LocaleUtils {
resources.updateConfiguration(configuration, resources.displayMetrics)
return context
}
}
}

View File

@ -5,8 +5,14 @@ import android.content.pm.PackageManager
import android.os.Build
import androidx.core.content.ContextCompat
/**
* Simple Utils class to check for permissions in multiple android environments
*/
object PermissionsManager {
/**
* Allow to check for one permission
*/
fun hasPermission(context: Context, permission: String): Boolean =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
@ -17,6 +23,9 @@ object PermissionsManager {
) == PackageManager.PERMISSION_GRANTED
}
/**
* Check for multiple permissions at once
*/
fun hasPermission(context: Context, permissions: Array<String>): Boolean {
for (permission in permissions) {
val res = hasPermission(context, permission)

View File

@ -6,7 +6,16 @@ import android.content.Intent
import android.util.Log
import com.dzeio.openhealth.ui.MainActivity
/**
* Utils class for services
*/
object ServiceUtils {
/**
* Function that start a service
*
* If I remember correctly I stole this from StackOverflow... TODO: get the original URL
*/
fun <T> startService(context: Context, service: Class<T>) {
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (runninService in activityManager.getRunningServices(Integer.MAX_VALUE)) {
@ -18,4 +27,4 @@ object ServiceUtils {
Log.i(MainActivity.TAG, "Starting service ${service.name}")
Intent(context, service).also { intent -> context.startService(intent) }
}
}
}

View File

@ -8,7 +8,11 @@ import android.util.Log
import android.widget.EditText
import androidx.preference.EditTextPreference
/**
* TOTALLY BASED on stolen code from stackoverflow that I don't remember where... f*ck
*
* Basically it allows to change the way `EditTextPreference` works to allow only numbers
*/
class IntEditTextPreference : EditTextPreference, EditTextPreference.OnBindEditTextListener {
private var txt: String? = null

View File

@ -17,6 +17,9 @@ import com.dzeio.openhealth.interfaces.NotificationIds
import java.util.Date
import java.util.concurrent.TimeUnit
/**
* The worker that remind the user to drink water hourly
*/
class WaterReminderWorker(
private val context: Context,
params: WorkerParameters
@ -24,6 +27,10 @@ class WaterReminderWorker(
companion object {
const val TAG = "${Application.TAG}/WaterWorker"
/**
* functio nthat setup the worker
*/
fun setup(context: Context) {
schedule(
TAG,
@ -37,6 +44,8 @@ class WaterReminderWorker(
override fun doWork(): Result {
Log.d(TAG, "Ran! ${Date().toLocaleString()}")
// send a new notification to the user
with(NotificationManagerCompat.from(context)) {
val flag =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_IMMUTABLE else 0

View File

@ -58,11 +58,10 @@
<PreferenceCategory android:title="Steps settings">
<com.dzeio.openhealth.utils.fields.IntEditTextPreference
android:inputType="number"
android:key="com.dzeio.open-health.steps.goal-daily"
android:title="Number of steps each steps"
android:selectAllOnFocus="true"
android:singleLine="true"
android:inputType="number"
/>
android:title="Number of steps each days" />
</PreferenceCategory>
</PreferenceScreen>