Data module refactor

This commit is contained in:
Sad Ellie 2023-02-02 18:51:36 +04:00
parent 59de376f61
commit 1620444123
82 changed files with 421 additions and 141 deletions

View File

@ -112,7 +112,7 @@ dependencies {
implementation(project(mapOf("path" to ":feature:unitslist"))) implementation(project(mapOf("path" to ":feature:unitslist")))
implementation(project(mapOf("path" to ":feature:tools"))) implementation(project(mapOf("path" to ":feature:tools")))
implementation(project(mapOf("path" to ":feature:epoch"))) implementation(project(mapOf("path" to ":feature:epoch")))
implementation(project(mapOf("path" to ":data"))) implementation(project(mapOf("path" to ":data:units")))
implementation(project(mapOf("path" to ":core:base"))) implementation(project(mapOf("path" to ":data:userprefs")))
implementation(project(mapOf("path" to ":core:ui"))) implementation(project(mapOf("path" to ":core:ui")))
} }

View File

@ -29,7 +29,6 @@ class UnittoLibraryFeaturePlugin : Plugin<Project> {
dependencies { dependencies {
"implementation"(libs.findLibrary("androidx.navigation").get()) "implementation"(libs.findLibrary("androidx.navigation").get())
"implementation"(project(mapOf("path" to ":data")))
"implementation"(project(mapOf("path" to ":core:base"))) "implementation"(project(mapOf("path" to ":core:base")))
"implementation"(project(mapOf("path" to ":core:ui"))) "implementation"(project(mapOf("path" to ":core:ui")))
} }

View File

@ -0,0 +1,26 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
plugins {
id("unitto.library")
id("unitto.android.hilt")
}
android {
namespace = "com.sadellie.unitto.data.epoch"
}

View File

21
data/epoch/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,77 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.data.epoch
import java.math.BigDecimal
import java.util.*
object EpochDateConverter {
fun convertDateToUnix(date: String): String {
// Here we add some zeros, so that input is 14 symbols long
val inputWithPadding = date.padEnd(14, '0')
// Now we break input that is 14 symbols into pieces
val hour = inputWithPadding.substring(0, 2)
val minute = inputWithPadding.substring(2, 4)
val second = inputWithPadding.substring(4, 6)
val day = inputWithPadding.substring(6, 8)
val month = inputWithPadding.substring(8, 10)
val year = inputWithPadding.substring(10, 14)
val cal = Calendar.getInstance()
cal.set(
year.toIntOrNull() ?: 1970,
(month.toIntOrNull() ?: 1) - 1,
day.toIntOrNull() ?: 0,
hour.toIntOrNull() ?: 0,
minute.toIntOrNull() ?: 0,
second.toIntOrNull() ?: 0,
)
return (cal.timeInMillis / 1000).toString()
}
fun convertUnixToDate(unix: String): String {
var date = ""
val cal2 = Calendar.getInstance()
cal2.clear()
cal2.isLenient = true
// This lets us bypass calendars limits (it uses Int, we want BigDecimal)
try {
val unixBg = BigDecimal(unix.ifEmpty { "0" })
val division = unixBg.divideAndRemainder(BigDecimal(Int.MAX_VALUE))
val intTimes = division.component1()
val rem = division.component2()
repeat(intTimes.intValueExact()) {
cal2.add(Calendar.SECOND, Int.MAX_VALUE)
}
cal2.add(Calendar.SECOND, rem.intValueExact())
} catch (e: NumberFormatException) {
return ""
}
date += cal2.get(Calendar.HOUR_OF_DAY).toString().padStart(2, '0')
date += cal2.get(Calendar.MINUTE).toString().padStart(2, '0')
date += cal2.get(Calendar.SECOND).toString().padStart(2, '0')
date += cal2.get(Calendar.DAY_OF_MONTH).toString().padStart(2, '0')
date += (cal2.get(Calendar.MONTH) + 1).toString().padStart(2, '0')
// Year is 4 symbols long
date += cal2.get(Calendar.YEAR).toString().padStart(4, '0')
return date
}
}

1
data/licenses/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,26 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
plugins {
id("unitto.library")
id("unitto.android.hilt")
}
android {
namespace = "com.sadellie.unitto.data.licenses"
}

View File

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Unitto is a unit converter for Android
~ Copyright (c) 2023 Elshan Agaev
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<manifest>
</manifest>

View File

@ -1,6 +1,6 @@
/* /*
* Unitto is a unit converter for Android * Unitto is a unit converter for Android
* Copyright (c) 2022-2022 Elshan Agaev * Copyright (c) 2022-2023 Elshan Agaev
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data package com.sadellie.unitto.data.licenses
data class AppLibrary( data class AppLibrary(
val name: String, val name: String,

1
data/unitgroups/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,33 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
plugins {
id("unitto.library")
id("unitto.android.hilt")
}
android {
namespace = "com.sadellie.unitto.data.unitgroups"
}
dependencies {
testImplementation(libs.junit)
implementation(libs.org.burnoutcrew.composereorderable)
implementation(project(mapOf("path" to ":core:base")))
}

View File

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Unitto is a unit converter for Android
~ Copyright (c) 2023 Elshan Agaev
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<manifest>
</manifest>

View File

@ -16,10 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data.units package com.sadellie.unitto.data.unitgroups
import androidx.annotation.StringRes import androidx.annotation.StringRes
import com.sadellie.unitto.data.R
val ALL_UNIT_GROUPS: List<UnitGroup> by lazy { val ALL_UNIT_GROUPS: List<UnitGroup> by lazy {
UnitGroup.values().toList() UnitGroup.values().toList()

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data.units package com.sadellie.unitto.data.unitgroups
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex

1
data/units/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -22,7 +22,7 @@ plugins {
} }
android { android {
namespace = "com.sadellie.unitto.data" namespace = "com.sadellie.unitto.data.units"
} }
dependencies { dependencies {
@ -40,5 +40,6 @@ dependencies {
implementation(libs.org.burnoutcrew.composereorderable) implementation(libs.org.burnoutcrew.composereorderable)
implementation(libs.com.github.sadellie.themmo) implementation(libs.com.github.sadellie.themmo)
implementation(project(mapOf("path" to ":data:unitgroups")))
implementation(project(mapOf("path" to ":core:base"))) implementation(project(mapOf("path" to ":core:base")))
} }

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Unitto is a unit converter for Android
~ Copyright (c) 2023 Elshan Agaev
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<manifest>
</manifest>

View File

@ -20,6 +20,7 @@ package com.sadellie.unitto.data.units
import androidx.annotation.StringRes import androidx.annotation.StringRes
import com.sadellie.unitto.data.lev import com.sadellie.unitto.data.lev
import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
/** /**

View File

@ -20,6 +20,7 @@ package com.sadellie.unitto.data.units
import android.content.Context import android.content.Context
import com.sadellie.unitto.core.base.MAX_PRECISION import com.sadellie.unitto.core.base.MAX_PRECISION
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.collections.accelerationCollection import com.sadellie.unitto.data.units.collections.accelerationCollection
import com.sadellie.unitto.data.units.collections.angleCollection import com.sadellie.unitto.data.units.collections.angleCollection
import com.sadellie.unitto.data.units.collections.areaCollection import com.sadellie.unitto.data.units.collections.areaCollection

View File

@ -22,6 +22,7 @@ import androidx.annotation.StringRes
import com.sadellie.unitto.core.base.MAX_PRECISION import com.sadellie.unitto.core.base.MAX_PRECISION
import com.sadellie.unitto.data.setMinimumRequiredScale import com.sadellie.unitto.data.setMinimumRequiredScale
import com.sadellie.unitto.data.trimZeros import com.sadellie.unitto.data.trimZeros
import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
/** /**

View File

@ -19,6 +19,7 @@
package com.sadellie.unitto.data.units package com.sadellie.unitto.data.units
import androidx.annotation.StringRes import androidx.annotation.StringRes
import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
class NumberBaseUnit( class NumberBaseUnit(

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val accelerationCollection: List<AbstractUnit> by lazy { internal val accelerationCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val angleCollection: List<AbstractUnit> by lazy { internal val angleCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val areaCollection: List<AbstractUnit> by lazy { internal val areaCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val currencyCollection: List<AbstractUnit> by lazy { internal val currencyCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val dataCollection: List<AbstractUnit> by lazy { internal val dataCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val dataTransferCollection: List<AbstractUnit> by lazy { internal val dataTransferCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val energyCollection: List<AbstractUnit> by lazy { internal val energyCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val fluxCollection: List<AbstractUnit> by lazy { internal val fluxCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val lengthCollection: List<AbstractUnit> by lazy { internal val lengthCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val massCollection: List<AbstractUnit> by lazy { internal val massCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.NumberBaseUnit import com.sadellie.unitto.data.units.NumberBaseUnit
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
internal val numberBaseCollection: List<AbstractUnit> by lazy { internal val numberBaseCollection: List<AbstractUnit> by lazy {
listOf( listOf(

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val powerCollection: List<AbstractUnit> by lazy { internal val powerCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val pressureCollection: List<AbstractUnit> by lazy { internal val pressureCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val speedCollection: List<AbstractUnit> by lazy { internal val speedCollection: List<AbstractUnit> by lazy {

View File

@ -19,12 +19,12 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.core.base.MAX_PRECISION import com.sadellie.unitto.core.base.MAX_PRECISION
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.setMinimumRequiredScale import com.sadellie.unitto.data.setMinimumRequiredScale
import com.sadellie.unitto.data.trimZeros import com.sadellie.unitto.data.trimZeros
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
import java.math.RoundingMode import java.math.RoundingMode

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val timeCollection: List<AbstractUnit> by lazy { internal val timeCollection: List<AbstractUnit> by lazy {

View File

@ -18,11 +18,11 @@
package com.sadellie.unitto.data.units.collections package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.R import com.sadellie.unitto.data.units.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnit import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import java.math.BigDecimal import java.math.BigDecimal
internal val volumeCollection: List<AbstractUnit> by lazy { internal val volumeCollection: List<AbstractUnit> by lazy {

View File

@ -18,6 +18,8 @@
package com.sadellie.unitto.data.units package com.sadellie.unitto.data.units
import com.sadellie.unitto.data.unitgroups.ALL_UNIT_GROUPS
import com.sadellie.unitto.data.unitgroups.UnitGroup
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test

View File

@ -19,6 +19,7 @@
package com.sadellie.unitto.data.units package com.sadellie.unitto.data.units
import com.sadellie.unitto.data.unitgroups.UnitGroup
import org.junit.After import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test

View File

@ -16,12 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data package com.sadellie.unitto.data.units
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.MyUnit
import com.sadellie.unitto.data.units.UnitGroup
import com.sadellie.unitto.data.units.sortByLev
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
import java.math.BigDecimal import java.math.BigDecimal

View File

@ -16,8 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data package com.sadellie.unitto.data.units
import com.sadellie.unitto.data.lev
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test

View File

@ -16,8 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data package com.sadellie.unitto.data.units
import com.sadellie.unitto.data.setMinimumRequiredScale
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
import java.math.BigDecimal import java.math.BigDecimal

1
data/userprefs/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,35 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
plugins {
id("unitto.library")
id("unitto.android.hilt")
}
android {
namespace = "com.sadellie.unitto.data.userprefs"
}
dependencies {
implementation(libs.androidx.datastore)
implementation(libs.com.github.sadellie.themmo)
implementation(project(mapOf("path" to ":data:units")))
implementation(project(mapOf("path" to ":data:unitgroups")))
implementation(project(mapOf("path" to ":core:base")))
}

View File

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Unitto is a unit converter for Android
~ Copyright (c) 2023 Elshan Agaev
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<manifest>
</manifest>

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data.preferences package com.sadellie.unitto.data.userprefs
import android.content.Context import android.content.Context
import androidx.datastore.core.DataStore import androidx.datastore.core.DataStore

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.sadellie.unitto.data.preferences package com.sadellie.unitto.data.userprefs
import androidx.datastore.core.DataStore import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.Preferences
@ -27,15 +27,15 @@ import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey
import com.sadellie.unitto.core.base.OutputFormat import com.sadellie.unitto.core.base.OutputFormat
import com.sadellie.unitto.core.base.Separator import com.sadellie.unitto.core.base.Separator
import com.sadellie.unitto.data.units.ALL_UNIT_GROUPS import com.sadellie.unitto.data.unitgroups.ALL_UNIT_GROUPS
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.UnitGroup
import io.github.sadellie.themmo.ThemingMode import io.github.sadellie.themmo.ThemingMode
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import okio.IOException import java.io.IOException
import javax.inject.Inject import javax.inject.Inject
/** /**
@ -69,8 +69,7 @@ data class UserPreferences(
/** /**
* Repository that works with DataStore * Repository that works with DataStore
*/ */
class class UserPreferencesRepository @Inject constructor(private val dataStore: DataStore<Preferences>) {
UserPreferencesRepository @Inject constructor(private val dataStore: DataStore<Preferences>) {
/** /**
* Keys for DataStore * Keys for DataStore
*/ */

View File

@ -40,4 +40,8 @@ dependencies {
implementation(libs.com.github.sadellie.themmo) implementation(libs.com.github.sadellie.themmo)
implementation(libs.com.squareup.moshi) implementation(libs.com.squareup.moshi)
implementation(libs.com.squareup.retrofit2) implementation(libs.com.squareup.retrofit2)
implementation(project(mapOf("path" to ":data:userprefs")))
implementation(project(mapOf("path" to ":data:unitgroups")))
implementation(project(mapOf("path" to ":data:units")))
} }

View File

@ -44,16 +44,14 @@ import com.sadellie.unitto.core.base.KEY_RIGHT_BRACKET
import com.sadellie.unitto.core.base.KEY_SQRT import com.sadellie.unitto.core.base.KEY_SQRT
import com.sadellie.unitto.core.base.OPERATORS import com.sadellie.unitto.core.base.OPERATORS
import com.sadellie.unitto.data.combine import com.sadellie.unitto.data.combine
import com.sadellie.unitto.data.preferences.UserPreferences
import com.sadellie.unitto.data.preferences.UserPreferencesRepository
import com.sadellie.unitto.data.setMinimumRequiredScale import com.sadellie.unitto.data.setMinimumRequiredScale
import com.sadellie.unitto.data.toStringWith import com.sadellie.unitto.data.toStringWith
import com.sadellie.unitto.data.trimZeros import com.sadellie.unitto.data.trimZeros
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.AllUnitsRepository import com.sadellie.unitto.data.units.AllUnitsRepository
import com.sadellie.unitto.data.units.MyUnitIDS import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.NumberBaseUnit import com.sadellie.unitto.data.units.NumberBaseUnit
import com.sadellie.unitto.data.units.UnitGroup
import com.sadellie.unitto.data.units.database.MyBasedUnit import com.sadellie.unitto.data.units.database.MyBasedUnit
import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository
import com.sadellie.unitto.data.units.remote.CurrencyApi import com.sadellie.unitto.data.units.remote.CurrencyApi
@ -79,7 +77,7 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class MainViewModel @Inject constructor( class MainViewModel @Inject constructor(
private val userPrefsRepository: UserPreferencesRepository, private val userPrefsRepository: com.sadellie.unitto.data.userprefs.UserPreferencesRepository,
private val basedUnitRepository: MyBasedUnitsRepository, private val basedUnitRepository: MyBasedUnitsRepository,
private val allUnitsRepository: AllUnitsRepository private val allUnitsRepository: AllUnitsRepository
) : ViewModel() { ) : ViewModel() {
@ -87,7 +85,7 @@ class MainViewModel @Inject constructor(
val userPrefs = userPrefsRepository.userPreferencesFlow.stateIn( val userPrefs = userPrefsRepository.userPreferencesFlow.stateIn(
viewModelScope, viewModelScope,
SharingStarted.WhileSubscribed(5000), SharingStarted.WhileSubscribed(5000),
UserPreferences() com.sadellie.unitto.data.userprefs.UserPreferences()
) )
/** /**

View File

@ -43,7 +43,7 @@ import androidx.compose.ui.unit.dp
import com.sadellie.unitto.core.ui.Formatter import com.sadellie.unitto.core.ui.Formatter
import com.sadellie.unitto.core.ui.R import com.sadellie.unitto.core.ui.R
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.feature.converter.ConverterMode import com.sadellie.unitto.feature.converter.ConverterMode
/** /**

View File

@ -39,11 +39,11 @@ import com.sadellie.unitto.core.base.KEY_MULTIPLY
import com.sadellie.unitto.core.base.KEY_PLUS import com.sadellie.unitto.core.base.KEY_PLUS
import com.sadellie.unitto.core.base.KEY_RIGHT_BRACKET import com.sadellie.unitto.core.base.KEY_RIGHT_BRACKET
import com.sadellie.unitto.core.base.KEY_SQRT import com.sadellie.unitto.core.base.KEY_SQRT
import com.sadellie.unitto.data.preferences.DataStoreModule
import com.sadellie.unitto.data.preferences.UserPreferencesRepository
import com.sadellie.unitto.data.units.AllUnitsRepository import com.sadellie.unitto.data.units.AllUnitsRepository
import com.sadellie.unitto.data.units.database.MyBasedUnitDatabase import com.sadellie.unitto.data.units.database.MyBasedUnitDatabase
import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository
import com.sadellie.unitto.data.userprefs.DataStoreModule
import com.sadellie.unitto.data.userprefs.UserPreferencesRepository
import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertEquals
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
@ -79,9 +79,10 @@ class MainViewModelTest {
fun setUp() { fun setUp() {
viewModel = MainViewModel( viewModel = MainViewModel(
userPrefsRepository = UserPreferencesRepository( userPrefsRepository = UserPreferencesRepository(
DataStoreModule().provideUserPreferencesDataStore( DataStoreModule()
RuntimeEnvironment.getApplication() .provideUserPreferencesDataStore(
) RuntimeEnvironment.getApplication()
)
), ),
basedUnitRepository = MyBasedUnitsRepository( basedUnitRepository = MyBasedUnitsRepository(
database.myBasedUnitDao() database.myBasedUnitDao()

View File

@ -26,3 +26,7 @@ plugins {
android { android {
namespace = "com.sadellie.unitto.feature.epoch" namespace = "com.sadellie.unitto.feature.epoch"
} }
dependencies {
implementation(project(mapOf("path" to ":data:epoch")))
}

View File

@ -20,6 +20,7 @@ package com.sadellie.unitto.feature.epoch
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.sadellie.unitto.data.epoch.EpochDateConverter
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
@ -27,8 +28,6 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import java.math.BigDecimal
import java.util.*
import javax.inject.Inject import javax.inject.Inject
data class EpochUIState( data class EpochUIState(
@ -49,13 +48,13 @@ class EpochViewModel @Inject constructor() : ViewModel() {
if (fromDateToUnix) { if (fromDateToUnix) {
EpochUIState( EpochUIState(
dateField = input, dateField = input,
unixField = convertDateToUnix(input), unixField = EpochDateConverter.convertDateToUnix(input),
dateToUnix = fromDateToUnix dateToUnix = fromDateToUnix
) )
} else { } else {
EpochUIState( EpochUIState(
unixField = input, unixField = input,
dateField = convertUnixToDate(input), dateField = EpochDateConverter.convertUnixToDate(input),
dateToUnix = fromDateToUnix dateToUnix = fromDateToUnix
) )
} }
@ -76,57 +75,4 @@ class EpochViewModel @Inject constructor() : ViewModel() {
clearSymbols() clearSymbols()
!it !it
} }
private fun convertDateToUnix(date: String): String {
// Here we add some zeros, so that input is 14 symbols long
val inputWithPadding = date.padEnd(14, '0')
// Now we break input that is 14 symbols into pieces
val hour = inputWithPadding.substring(0, 2)
val minute = inputWithPadding.substring(2, 4)
val second = inputWithPadding.substring(4, 6)
val day = inputWithPadding.substring(6, 8)
val month = inputWithPadding.substring(8, 10)
val year = inputWithPadding.substring(10, 14)
val cal = Calendar.getInstance()
cal.set(
year.toIntOrNull() ?: 1970,
(month.toIntOrNull() ?: 1) - 1,
day.toIntOrNull() ?: 0,
hour.toIntOrNull() ?: 0,
minute.toIntOrNull() ?: 0,
second.toIntOrNull() ?: 0,
)
return (cal.timeInMillis / 1000).toString()
}
private fun convertUnixToDate(unix: String): String {
var date = ""
val cal2 = Calendar.getInstance()
cal2.clear()
cal2.isLenient = true
// This lets us bypass calendars limits (it uses Int, we want BigDecimal)
try {
val unixBg = BigDecimal(unix)
val division = unixBg.divideAndRemainder(BigDecimal(Int.MAX_VALUE))
val intTimes = division.component1()
val rem = division.component2()
repeat(intTimes.intValueExact()) {
cal2.add(Calendar.SECOND, Int.MAX_VALUE)
}
cal2.add(Calendar.SECOND, rem.intValueExact())
} catch (e: NumberFormatException) {
return ""
}
date += cal2.get(Calendar.HOUR_OF_DAY).toString().padStart(2, '0')
date += cal2.get(Calendar.MINUTE).toString().padStart(2, '0')
date += cal2.get(Calendar.SECOND).toString().padStart(2, '0')
date += cal2.get(Calendar.DAY_OF_MONTH).toString().padStart(2, '0')
date += (cal2.get(Calendar.MONTH) + 1).toString().padStart(2, '0')
// Year is 4 symbols long
date += cal2.get(Calendar.YEAR).toString().padStart(4, '0')
return date
}
} }

View File

@ -30,4 +30,8 @@ android {
dependencies { dependencies {
implementation(libs.com.github.sadellie.themmo) implementation(libs.com.github.sadellie.themmo)
implementation(libs.org.burnoutcrew.composereorderable) implementation(libs.org.burnoutcrew.composereorderable)
implementation(project(mapOf("path" to ":data:userprefs")))
implementation(project(mapOf("path" to ":data:licenses")))
implementation(project(mapOf("path" to ":data:unitgroups")))
} }

View File

@ -21,10 +21,9 @@ package com.sadellie.unitto.feature.settings
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.sadellie.unitto.core.ui.Formatter import com.sadellie.unitto.core.ui.Formatter
import com.sadellie.unitto.data.preferences.UserPreferences import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.preferences.UserPreferencesRepository import com.sadellie.unitto.data.unitgroups.UnitGroupsRepository
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.userprefs.UserPreferencesRepository
import com.sadellie.unitto.data.units.UnitGroupsRepository
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.github.sadellie.themmo.ThemingMode import io.github.sadellie.themmo.ThemingMode
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
@ -42,7 +41,9 @@ class SettingsViewModel @Inject constructor(
) : ViewModel() { ) : ViewModel() {
var userPrefs = userPrefsRepository.userPreferencesFlow var userPrefs = userPrefsRepository.userPreferencesFlow
.onEach { Formatter.setSeparator(it.separator) } .onEach { Formatter.setSeparator(it.separator) }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), UserPreferences()) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000),
com.sadellie.unitto.data.userprefs.UserPreferences()
)
val shownUnitGroups = unitGroupsRepository.shownUnitGroups val shownUnitGroups = unitGroupsRepository.shownUnitGroups
val hiddenUnitGroups = unitGroupsRepository.hiddenUnitGroups val hiddenUnitGroups = unitGroupsRepository.hiddenUnitGroups

View File

@ -36,10 +36,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.sadellie.unitto.core.ui.R
import com.sadellie.unitto.core.ui.common.UnittoLargeTopAppBar import com.sadellie.unitto.core.ui.common.UnittoLargeTopAppBar
import com.sadellie.unitto.core.ui.openLink import com.sadellie.unitto.core.ui.openLink
import com.sadellie.unitto.data.ALL_LIBRARIES import com.sadellie.unitto.data.licenses.ALL_LIBRARIES
import com.sadellie.unitto.core.ui.R
/** /**
* Screen with used third party libraries * Screen with used third party libraries

View File

@ -26,3 +26,8 @@ plugins {
android { android {
namespace = "com.sadellie.unitto.feature.unitslist" namespace = "com.sadellie.unitto.feature.unitslist"
} }
dependencies {
implementation(project(mapOf("path" to ":data:units")))
implementation(project(mapOf("path" to ":data:unitgroups")))
}

View File

@ -33,9 +33,9 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sadellie.unitto.core.ui.Formatter import com.sadellie.unitto.core.ui.Formatter
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.NumberBaseUnit import com.sadellie.unitto.data.units.NumberBaseUnit
import com.sadellie.unitto.data.units.UnitGroup
import com.sadellie.unitto.feature.unitslist.components.SearchBar import com.sadellie.unitto.feature.unitslist.components.SearchBar
import com.sadellie.unitto.feature.unitslist.components.SearchPlaceholder import com.sadellie.unitto.feature.unitslist.components.SearchPlaceholder
import com.sadellie.unitto.feature.unitslist.components.UnitGroupHeader import com.sadellie.unitto.feature.unitslist.components.UnitGroupHeader

View File

@ -18,8 +18,8 @@
package com.sadellie.unitto.feature.unitslist package com.sadellie.unitto.feature.unitslist
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.UnitGroup
/** /**
* Second (unit list) screen UI state. * Second (unit list) screen UI state.

View File

@ -21,10 +21,9 @@ package com.sadellie.unitto.feature.unitslist
import android.app.Application import android.app.Application
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.data.units.AbstractUnit import com.sadellie.unitto.data.units.AbstractUnit
import com.sadellie.unitto.data.units.AllUnitsRepository import com.sadellie.unitto.data.units.AllUnitsRepository
import com.sadellie.unitto.data.units.UnitGroup
import com.sadellie.unitto.data.units.UnitGroupsRepository
import com.sadellie.unitto.data.units.database.MyBasedUnit import com.sadellie.unitto.data.units.database.MyBasedUnit
import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository import com.sadellie.unitto.data.units.database.MyBasedUnitsRepository
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@ -43,7 +42,7 @@ class SecondViewModel @Inject constructor(
private val basedUnitRepository: MyBasedUnitsRepository, private val basedUnitRepository: MyBasedUnitsRepository,
private val allUnitsRepository: AllUnitsRepository, private val allUnitsRepository: AllUnitsRepository,
private val mContext: Application, private val mContext: Application,
unitGroupsRepository: UnitGroupsRepository, unitGroupsRepository: com.sadellie.unitto.data.unitgroups.UnitGroupsRepository,
) : ViewModel() { ) : ViewModel() {
private val _favoritesOnly = MutableStateFlow(false) private val _favoritesOnly = MutableStateFlow(false)

View File

@ -46,8 +46,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.sadellie.unitto.data.units.ALL_UNIT_GROUPS import com.sadellie.unitto.data.unitgroups.ALL_UNIT_GROUPS
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
import com.sadellie.unitto.feature.unitslist.R import com.sadellie.unitto.feature.unitslist.R
/** /**

View File

@ -24,7 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.sadellie.unitto.core.ui.common.Header import com.sadellie.unitto.core.ui.common.Header
import com.sadellie.unitto.data.units.UnitGroup import com.sadellie.unitto.data.unitgroups.UnitGroup
@Composable @Composable
internal fun UnitGroupHeader(modifier: Modifier, unitGroup: UnitGroup) { internal fun UnitGroupHeader(modifier: Modifier, unitGroup: UnitGroup) {

View File

@ -17,7 +17,7 @@ dependencyResolutionManagement {
} }
rootProject.name = "Unitto" rootProject.name = "Unitto"
include(":app") include(":app")
include(":data") include(":data:units")
include(":core:base") include(":core:base")
include(":core:ui") include(":core:ui")
include(":feature:converter") include(":feature:converter")
@ -25,3 +25,7 @@ include(":feature:unitslist")
include(":feature:settings") include(":feature:settings")
include(":feature:tools") include(":feature:tools")
include(":feature:epoch") include(":feature:epoch")
include(":data:userprefs")
include(":data:unitgroups")
include(":data:licenses")
include(":data:epoch")