mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Compare commits
13 Commits
v2.2.0
...
3a0603605b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a0603605b
|
||
|
|
6a78b4d853 | ||
|
|
fe43b1435d | ||
|
|
12503b8a6d | ||
|
|
ef7f78bff0 | ||
|
|
53c208ded5 | ||
|
|
1bdc83e92f | ||
|
|
680c1cdc76 | ||
|
|
80916bac50 | ||
|
|
a5e3e9b3cf | ||
|
248ba50a8e
|
|||
|
|
45a82b3c2d
|
||
|
770d1293dc
|
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: build
|
name: build
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
plugins {
|
plugins {
|
||||||
val kotlinVersion = "1.9.21"
|
val kotlinVersion = "1.9.22"
|
||||||
id("com.android.application") version "8.1.4" apply (false)
|
id("com.android.application") version "8.1.4" apply (false)
|
||||||
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
|
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
|
||||||
id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
|
id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val daggerVersion = "2.48.1"
|
val daggerVersion = "2.50"
|
||||||
val kotlinVersion = "1.9.21"
|
val kotlinVersion = "1.9.22"
|
||||||
val kxCoroutinesVersion = "1.7.3"
|
val kxCoroutinesVersion = "1.7.3"
|
||||||
val ktorVersion = "1.6.8"
|
val ktorVersion = "1.6.8"
|
||||||
val espressoVersion = "3.5.1"
|
val espressoVersion = "3.5.1"
|
||||||
@@ -106,17 +106,17 @@ dependencies {
|
|||||||
androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3")
|
androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3")
|
||||||
androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
|
androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
|
||||||
androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
|
androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
|
||||||
androidTestImplementation("androidx.annotation:annotation:1.7.0")
|
androidTestImplementation("androidx.annotation:annotation:1.7.1")
|
||||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||||
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
|
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
|
||||||
androidTestImplementation("androidx.test:rules:1.5.0")
|
androidTestImplementation("androidx.test:rules:1.5.0")
|
||||||
androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
|
androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
|
||||||
compileOnly("javax.annotation:jsr250-api:1.0")
|
compileOnly("javax.annotation:jsr250-api:1.0")
|
||||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
|
||||||
implementation("com.github.AppIntro:AppIntro:6.3.1")
|
implementation("com.github.AppIntro:AppIntro:6.3.1")
|
||||||
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
||||||
implementation("com.google.dagger:dagger:$daggerVersion")
|
implementation("com.google.dagger:dagger:$daggerVersion")
|
||||||
implementation("com.google.guava:guava:32.1.3-android")
|
implementation("com.google.guava:guava:33.0.0-android")
|
||||||
implementation("io.ktor:ktor-client-android:$ktorVersion")
|
implementation("io.ktor:ktor-client-android:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-client-core:$ktorVersion")
|
implementation("io.ktor:ktor-client-core:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-client-jackson:$ktorVersion")
|
implementation("io.ktor:ktor-client-jackson:$ktorVersion")
|
||||||
@@ -127,14 +127,14 @@ dependencies {
|
|||||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||||
implementation("androidx.legacy:legacy-preference-v14:1.0.0")
|
implementation("androidx.legacy:legacy-preference-v14:1.0.0")
|
||||||
implementation("androidx.legacy:legacy-support-v4:1.0.0")
|
implementation("androidx.legacy:legacy-support-v4:1.0.0")
|
||||||
implementation("com.google.android.material:material:1.10.0")
|
implementation("com.google.android.material:material:1.11.0")
|
||||||
implementation("com.opencsv:opencsv:5.9")
|
implementation("com.opencsv:opencsv:5.9")
|
||||||
implementation(project(":uhabits-core"))
|
implementation(project(":uhabits-core"))
|
||||||
kapt("com.google.dagger:dagger-compiler:$daggerVersion")
|
kapt("com.google.dagger:dagger-compiler:$daggerVersion")
|
||||||
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")
|
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")
|
||||||
testImplementation("com.google.dagger:dagger:$daggerVersion")
|
testImplementation("com.google.dagger:dagger:$daggerVersion")
|
||||||
testImplementation("junit:junit:4.13.2")
|
testImplementation("junit:junit:4.13.2")
|
||||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
|
testImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
kapt {
|
kapt {
|
||||||
|
|||||||
@@ -104,7 +104,11 @@ class NumberDialog : AppCompatDialogFragment() {
|
|||||||
try {
|
try {
|
||||||
val numberFormat = NumberFormat.getInstance()
|
val numberFormat = NumberFormat.getInstance()
|
||||||
val valueStr = view.value.text.toString()
|
val valueStr = view.value.text.toString()
|
||||||
value = numberFormat.parse(valueStr)!!.toDouble()
|
value = if (valueStr.isNotEmpty()) {
|
||||||
|
numberFormat.parse(valueStr)!!.toDouble()
|
||||||
|
} else {
|
||||||
|
Entry.UNKNOWN.toDouble() / 1000
|
||||||
|
}
|
||||||
} catch (e: ParseException) {
|
} catch (e: ParseException) {
|
||||||
// NOP
|
// NOP
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ class RingView : View {
|
|||||||
private var em = 0f
|
private var em = 0f
|
||||||
private var text: String?
|
private var text: String?
|
||||||
private var textSize: Float
|
private var textSize: Float
|
||||||
|
private var isStrokedTextEnabled: Boolean = false
|
||||||
private var enableFontAwesome = false
|
private var enableFontAwesome = false
|
||||||
private var internalDrawingCache: Bitmap? = null
|
private var internalDrawingCache: Bitmap? = null
|
||||||
private var cacheCanvas: Canvas? = null
|
private var cacheCanvas: Canvas? = null
|
||||||
@@ -131,6 +132,10 @@ class RingView : View {
|
|||||||
invalidate()
|
invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setIsStrokedTextEnabled(isStroked: Boolean) {
|
||||||
|
this.isStrokedTextEnabled = isStroked
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) {
|
override fun onDraw(canvas: Canvas) {
|
||||||
super.onDraw(canvas)
|
super.onDraw(canvas)
|
||||||
val activeCanvas: Canvas?
|
val activeCanvas: Canvas?
|
||||||
@@ -159,6 +164,12 @@ class RingView : View {
|
|||||||
pRing!!.xfermode = null
|
pRing!!.xfermode = null
|
||||||
pRing!!.color = color
|
pRing!!.color = color
|
||||||
pRing!!.textSize = textSize
|
pRing!!.textSize = textSize
|
||||||
|
|
||||||
|
if (isStrokedTextEnabled) {
|
||||||
|
pRing!!.style = Paint.Style.STROKE
|
||||||
|
pRing!!.strokeWidth = textSize / 15f
|
||||||
|
}
|
||||||
|
|
||||||
if (enableFontAwesome) pRing!!.typeface = getFontAwesome(context)
|
if (enableFontAwesome) pRing!!.typeface = getFontAwesome(context)
|
||||||
activeCanvas.drawText(
|
activeCanvas.drawText(
|
||||||
text!!,
|
text!!,
|
||||||
|
|||||||
@@ -68,13 +68,13 @@ class CheckmarkWidgetView : HabitWidgetView {
|
|||||||
val fgColor: Int
|
val fgColor: Int
|
||||||
setShadowAlpha(0x4f)
|
setShadowAlpha(0x4f)
|
||||||
when (entryState) {
|
when (entryState) {
|
||||||
YES_MANUAL, SKIP -> {
|
YES_MANUAL, SKIP, YES_AUTO -> {
|
||||||
bgColor = activeColor
|
bgColor = activeColor
|
||||||
fgColor = res.getColor(R.attr.contrast0)
|
fgColor = res.getColor(R.attr.contrast0)
|
||||||
backgroundPaint!!.color = bgColor
|
backgroundPaint!!.color = bgColor
|
||||||
frame!!.setBackgroundDrawable(background)
|
frame!!.setBackgroundDrawable(background)
|
||||||
}
|
}
|
||||||
YES_AUTO, NO, UNKNOWN -> {
|
NO, UNKNOWN -> {
|
||||||
bgColor = res.getColor(R.attr.cardBgColor)
|
bgColor = res.getColor(R.attr.cardBgColor)
|
||||||
fgColor = res.getColor(R.attr.contrast60)
|
fgColor = res.getColor(R.attr.contrast60)
|
||||||
}
|
}
|
||||||
@@ -87,12 +87,23 @@ class CheckmarkWidgetView : HabitWidgetView {
|
|||||||
ring.setColor(fgColor)
|
ring.setColor(fgColor)
|
||||||
ring.setBackgroundColor(bgColor)
|
ring.setBackgroundColor(bgColor)
|
||||||
ring.setText(text)
|
ring.setText(text)
|
||||||
|
ring.setIsStrokedTextEnabled(strokedTextEnabled)
|
||||||
label.text = name
|
label.text = name
|
||||||
label.setTextColor(fgColor)
|
label.setTextColor(fgColor)
|
||||||
requestLayout()
|
requestLayout()
|
||||||
postInvalidate()
|
postInvalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val strokedTextEnabled: Boolean
|
||||||
|
get() = if (isNumerical) {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
when (entryState) {
|
||||||
|
YES_AUTO -> true
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val text: String
|
private val text: String
|
||||||
get() = if (isNumerical) {
|
get() = if (isNumerical) {
|
||||||
(max(0, entryValue) / 1000.0).toShortString()
|
(max(0, entryValue) / 1000.0).toShortString()
|
||||||
|
|||||||
@@ -44,10 +44,10 @@ kotlin {
|
|||||||
val jvmMain by getting {
|
val jvmMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib-jdk8"))
|
implementation(kotlin("stdlib-jdk8"))
|
||||||
compileOnly("com.google.dagger:dagger:2.48.1")
|
compileOnly("com.google.dagger:dagger:2.50")
|
||||||
implementation("com.google.guava:guava:32.1.3-android")
|
implementation("com.google.guava:guava:33.0.0-android")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3")
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3")
|
||||||
implementation("androidx.annotation:annotation:1.7.0")
|
implementation("androidx.annotation:annotation:1.7.1")
|
||||||
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
implementation("com.google.code.findbugs:jsr305:3.0.2")
|
||||||
implementation("com.opencsv:opencsv:5.9")
|
implementation("com.opencsv:opencsv:5.9")
|
||||||
implementation("commons-codec:commons-codec:1.16.0")
|
implementation("commons-codec:commons-codec:1.16.0")
|
||||||
@@ -59,10 +59,10 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("test"))
|
implementation(kotlin("test"))
|
||||||
implementation(kotlin("test-junit"))
|
implementation(kotlin("test-junit"))
|
||||||
implementation("org.xerial:sqlite-jdbc:3.42.0.0")
|
implementation("org.xerial:sqlite-jdbc:3.45.1.0")
|
||||||
implementation("org.hamcrest:hamcrest:2.2")
|
implementation("org.hamcrest:hamcrest:2.2")
|
||||||
implementation("org.apache.commons:commons-io:1.3.2")
|
implementation("org.apache.commons:commons-io:1.3.2")
|
||||||
implementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
|
implementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
|
||||||
implementation("org.junit.jupiter:junit-jupiter:5.10.1")
|
implementation("org.junit.jupiter:junit-jupiter:5.10.1")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ application {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val ktorVersion = "1.6.8"
|
val ktorVersion = "1.6.8"
|
||||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.21")
|
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.22")
|
||||||
implementation("io.ktor:ktor-server-netty:$ktorVersion")
|
implementation("io.ktor:ktor-server-netty:$ktorVersion")
|
||||||
implementation("ch.qos.logback:logback-classic:1.4.13")
|
implementation("ch.qos.logback:logback-classic:1.4.14")
|
||||||
implementation("io.ktor:ktor-server-core:$ktorVersion")
|
implementation("io.ktor:ktor-server-core:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-html-builder:$ktorVersion")
|
implementation("io.ktor:ktor-html-builder:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-jackson:$ktorVersion")
|
implementation("io.ktor:ktor-jackson:$ktorVersion")
|
||||||
@@ -49,7 +49,7 @@ dependencies {
|
|||||||
implementation("io.prometheus:simpleclient_httpserver:0.16.0")
|
implementation("io.prometheus:simpleclient_httpserver:0.16.0")
|
||||||
implementation("io.prometheus:simpleclient_hotspot:0.16.0")
|
implementation("io.prometheus:simpleclient_hotspot:0.16.0")
|
||||||
testImplementation("io.ktor:ktor-server-tests:$ktorVersion")
|
testImplementation("io.ktor:ktor-server-tests:$ktorVersion")
|
||||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
|
testImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
testImplementation(kotlin("test-junit"))
|
testImplementation(kotlin("test-junit"))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user