diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..875a112
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 07fb30b..2f6e5bd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,9 +49,9 @@ android {
dependencies {
implementation 'androidx.room:room-runtime:2.5.0-alpha02'
- implementation "androidx.compose.ui:ui:$compose_version"
- implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
+ implementation "androidx.compose.ui:ui:1.3.0-alpha01"
+ implementation "androidx.compose.ui:ui-tooling-preview:1.3.0-alpha01"
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0'
annotationProcessor 'androidx.room:room-compiler:2.5.0-alpha02'
implementation 'androidx.room:room-rxjava3:2.5.0-alpha02'
@@ -62,6 +62,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
@@ -69,15 +70,15 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.activity:activity-compose:1.5.0'
- implementation 'androidx.compose.material:material:1.2.0-rc03'
- implementation 'androidx.compose.animation:animation:1.2.0-rc03'
- implementation 'androidx.compose.ui:ui-tooling:1.2.0-rc03'
+ implementation 'androidx.compose.material:material:1.3.0-alpha01'
+ implementation 'androidx.compose.animation:animation:1.3.0-alpha01'
+ implementation 'androidx.compose.ui:ui-tooling:1.3.0-alpha01'
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.5.0'
implementation 'com.google.android.material:compose-theme-adapter:1.1.14'
testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.2.0-rc03'
+ androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.3.0-alpha01'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
- debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
+ debugImplementation "androidx.compose.ui:ui-test-manifest:1.1.1"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/AddBattery.kt b/app/src/main/java/com/sockenklaus/batterytracker/AddBattery.kt
deleted file mode 100644
index b7ca605..0000000
--- a/app/src/main/java/com/sockenklaus/batterytracker/AddBattery.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.sockenklaus.batterytracker
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.OutlinedTextField
-import androidx.compose.material.Surface
-import androidx.compose.material.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.text.TextRange
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.text.input.TextFieldValue
-import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme
-
-class AddBattery : ComponentActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
-
-
- setContent {
- BatteryTrackerTheme {
- // A surface container using the 'background' color from the theme
- Surface(
- modifier = Modifier.fillMaxSize(),
- color = MaterialTheme.colors.background
- ) {
- Row() {
- Text("Battery ID")
-
- }
- }
- }
- }
- }
-}
-
-@Composable
-fun myTextField(){
- var batteryId by rememberSaveable(stateSaver = TextFieldValue.Saver) {
- mutableStateOf(TextFieldValue("example", TextRange(0,7)))
- }
-
- OutlinedTextField(
- value = batteryId,
- onValueChange = {batteryId = it},
- label = { Text("Battery ID") }
- )
-
-}
-
-@Composable
-fun Greeting(name: String) {
- Text(text = "Hello $name!")
-}
-
-@Preview(showBackground = true)
-@Composable
-fun DefaultPreview() {
- BatteryTrackerTheme {
- Greeting("Android")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/AddBatteryFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/AddBatteryFragment.kt
deleted file mode 100644
index 57babcb..0000000
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/AddBatteryFragment.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.sockenklaus.batterytracker.ui
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import com.sockenklaus.batterytracker.R
-import com.sockenklaus.batterytracker.databinding.FragmentAddBatteryBinding
-
-// TODO: Rename parameter arguments, choose names that match
-// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-private const val ARG_PARAM1 = "param1"
-private const val ARG_PARAM2 = "param2"
-
-/**
- * A simple [Fragment] subclass.
- * Use the [AddBatteryFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
-class AddBatteryFragment : Fragment() {
- // TODO: Rename and change types of parameters
- private var param1: String? = null
- private var param2: String? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- arguments?.let {
- param1 = it.getString(ARG_PARAM1)
- param2 = it.getString(ARG_PARAM2)
- }
- }
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_add_battery, container, false)
- }
-
- companion object {
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment AddBatteryFragment.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- AddBatteryFragment().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/AddBatteryFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/AddBatteryFragment.kt
new file mode 100644
index 0000000..a423af7
--- /dev/null
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/AddBatteryFragment.kt
@@ -0,0 +1,147 @@
+package com.sockenklaus.batterytracker.ui.fragments
+
+import android.inputmethodservice.Keyboard
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.constraintlayout.compose.ConstraintLayout
+import androidx.constraintlayout.compose.Dimension
+import com.sockenklaus.batterytracker.R
+import com.sockenklaus.batterytracker.databinding.FragmentAddBatteryBinding
+import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme
+
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [AddBatteryFragment.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class AddBatteryFragment : Fragment() {
+ // TODO: Rename and change types of parameters
+ private var _binding: FragmentAddBatteryBinding? = null
+ private val binding get() = _binding!!
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+
+ _binding = FragmentAddBatteryBinding.inflate(inflater, container, false)
+ val view = binding.root
+
+ binding.composeAddBattery.setContent {
+ BatteryTrackerTheme {
+ var batteryId by remember { mutableStateOf("") }
+ var declaredCapacity by remember { mutableStateOf("")}
+
+ ConstraintLayout {
+ val ( labelBatteryId, textBatteryId, labelDeclaredCapacity, textDeclaredCapacity, fab ) = createRefs()
+ val outer_margin = 24.dp
+ val inner_margin = 16.dp
+
+ Text(
+ stringResource(R.string.battery_id),
+ Modifier.constrainAs(labelBatteryId) {
+ end.linkTo(labelDeclaredCapacity.end)
+ baseline.linkTo(textBatteryId.baseline)
+ }
+ )
+ // TODO: Stop baseline from moving!!!!
+ OutlinedTextField(
+ value = batteryId,
+ onValueChange = { batteryId = it },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
+ label = { Text(stringResource(R.string.hint_enter_battery_id)) },
+ modifier = Modifier
+ .constrainAs(textBatteryId) {
+ top.linkTo(parent.top, margin = outer_margin)
+ start.linkTo(textDeclaredCapacity.start)
+ end.linkTo(parent.end, margin = outer_margin)
+ width = Dimension.fillToConstraints
+ }
+ .wrapContentHeight()
+ )
+
+ Text(
+ stringResource(R.string.declared_capacity),
+ Modifier
+ .constrainAs(labelDeclaredCapacity) {
+ baseline.linkTo(textDeclaredCapacity.baseline)
+ start.linkTo(parent.start, margin = outer_margin)
+ }
+ .wrapContentSize()
+ )
+
+ OutlinedTextField(
+ value = declaredCapacity,
+ onValueChange = { declaredCapacity = verifyDecimal(declaredCapacity, it) },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
+ label = { Text(stringResource(R.string.hint_enter_declared_capacity)) },
+ modifier = Modifier
+ .constrainAs(textDeclaredCapacity) {
+ top.linkTo(textBatteryId.bottom, margin = inner_margin)
+ start.linkTo(labelDeclaredCapacity.end, margin = inner_margin)
+ end.linkTo(parent.end, margin = outer_margin)
+ width = Dimension.fillToConstraints
+ }
+ )
+ }
+ }
+ }
+
+ // Inflate the layout for this fragment
+ return view
+ }
+
+ private fun verifyDecimal(originalValue: String, it: String): String {
+ val reg = Regex("^[+-]?([0-9]+\\.?[0-9]*|\\.[0-9]+)\$")
+ return if(it.matches(reg) || it.isEmpty()) it
+ else originalValue
+ }
+
+ /*companion object {
+ *//**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment AddBatteryFragment.
+ *//*
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ AddBatteryFragment().apply {
+ arguments = Bundle().apply {
+ putString(ARG_PARAM1, param1)
+ putString(ARG_PARAM2, param2)
+ }
+ }
+ }*/
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
similarity index 97%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeFragment.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
index 4c9b48d..2b1cbb4 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeFragment.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.add_charge
+package com.sockenklaus.batterytracker.ui.fragments.add_charge
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeViewModel.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeViewModel.kt
similarity index 65%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeViewModel.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeViewModel.kt
index 5eb5911..6163b0d 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/add_charge/AddChargeViewModel.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeViewModel.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.add_charge
+package com.sockenklaus.batterytracker.ui.fragments.add_charge
import androidx.lifecycle.ViewModel
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt
similarity index 95%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeFragment.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt
index 74b4aca..740248b 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.home
+package com.sockenklaus.batterytracker.ui.fragments.home
import android.os.Bundle
import android.view.LayoutInflater
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeViewModel.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt
similarity index 83%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeViewModel.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt
index 244539f..7a762c9 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.home
+package com.sockenklaus.batterytracker.ui.fragments.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsFragment.kt
similarity index 92%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsFragment.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsFragment.kt
index a37e42a..8928469 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsFragment.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.settings
+package com.sockenklaus.batterytracker.ui.fragments.settings
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsViewModel.kt
similarity index 65%
rename from app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsViewModel.kt
rename to app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsViewModel.kt
index 6e79cfa..4520869 100644
--- a/app/src/main/java/com/sockenklaus/batterytracker/ui/settings/SettingsViewModel.kt
+++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/settings/SettingsViewModel.kt
@@ -1,4 +1,4 @@
-package com.sockenklaus.batterytracker.ui.settings
+package com.sockenklaus.batterytracker.ui.fragments.settings
import androidx.lifecycle.ViewModel
diff --git a/app/src/main/res/layout/fragment_add_battery.xml b/app/src/main/res/layout/fragment_add_battery.xml
index cde282c..3936cf6 100644
--- a/app/src/main/res/layout/fragment_add_battery.xml
+++ b/app/src/main/res/layout/fragment_add_battery.xml
@@ -1,10 +1,23 @@
-
+
+
diff --git a/app/src/main/res/layout/fragment_add_charge.xml b/app/src/main/res/layout/fragment_add_charge.xml
index d3c2556..a3446bd 100644
--- a/app/src/main/res/layout/fragment_add_charge.xml
+++ b/app/src/main/res/layout/fragment_add_charge.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.add_charge.AddChargeFragment">
+ tools:context=".ui.fragments.add_charge.AddChargeFragment">
+ app:layout_constraintTop_toBottomOf="@+id/edit_date">
+ tools:context=".ui.fragments.home.HomeFragment">
+ tools:context=".ui.fragments.settings.SettingsFragment">
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index d19836f..728c6c6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,5 @@
buildscript {
- ext {
- compose_version = '1.1.0-beta01'
- }
+
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.2.1' apply false