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