diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 61a9130..fb7f4a8 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 635999d..d39c5a8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -24,7 +24,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 502f312..0facca4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,6 +6,9 @@ apply plugin: 'realm-android'
android {
compileSdkVersion 30
+ buildFeatures {
+ viewBinding true
+ }
defaultConfig {
applicationId "com.log28"
minSdkVersion 19
diff --git a/app/src/main/java/com/log28/CalendarView.kt b/app/src/main/java/com/log28/CalendarView.kt
index 27ae740..c4cfa60 100644
--- a/app/src/main/java/com/log28/CalendarView.kt
+++ b/app/src/main/java/com/log28/CalendarView.kt
@@ -6,9 +6,8 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import devs.mulham.horizontalcalendar.utils.Utils
+import com.log28.databinding.FragmentCalendarViewBinding
import io.realm.Realm
-import kotlinx.android.synthetic.main.fragment_calendar_view.*
import pl.rafman.scrollcalendar.contract.MonthScrollListener
import pl.rafman.scrollcalendar.data.CalendarDay
import java.util.*
@@ -24,14 +23,18 @@ class CalendarView : Fragment() {
//TODO use a tree for better calendar performance?
private var periodDates = mutableListOf()
private val cycleInfo = realm.getCycleInfo()
+ private var _binding: FragmentCalendarViewBinding? = null
+ private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.fragment_calendar_view, container, false)
+ _binding = FragmentCalendarViewBinding.inflate(inflater, container, false)
+ return binding.root
}
override fun onDestroy() {
super.onDestroy()
+ _binding = null
realm.close()
}
@@ -44,7 +47,7 @@ class CalendarView : Fragment() {
results, changeSet ->
if (changeSet != null) {
periodDates = predictFuturePeriods(periodDateObjects.map { d -> d.date }.toMutableList())
- scrollCalendar.adapter.notifyDataSetChanged()
+ binding.scrollCalendar.adapter.notifyDataSetChanged()
}
}
@@ -52,7 +55,7 @@ class CalendarView : Fragment() {
_, changeSet ->
if (changeSet != null) {
periodDates = predictFuturePeriods(periodDateObjects.map { d -> d.date }.toMutableList())
- scrollCalendar.adapter.notifyDataSetChanged()
+ binding.scrollCalendar.adapter.notifyDataSetChanged()
}
}
setupScrollCalendar()
@@ -62,19 +65,19 @@ class CalendarView : Fragment() {
private fun setupScrollCalendar() {
// show periods on the calendar as it renders
val today = Calendar.getInstance()
- scrollCalendar.setDateWatcher({
- year, month, day ->
+ binding.scrollCalendar.setDateWatcher { year, month, day ->
if ((year.toLong() * 10000) + (month.toLong() * 100) + day.toLong() in periodDates) {
CalendarDay.SELECTED
} else if (year == today.get(Calendar.YEAR) &&
- month == today.get(Calendar.MONTH) && day == today.get(Calendar.DAY_OF_MONTH)) {
+ month == today.get(Calendar.MONTH) && day == today.get(Calendar.DAY_OF_MONTH)
+ ) {
CalendarDay.TODAY
} else CalendarDay.DEFAULT
- })
+ }
// we call the underlying activity and tell it to navigate to the day view and set the day
- scrollCalendar.setOnDateClickListener({
- year, month, day -> val cal = Calendar.getInstance()
+ binding.scrollCalendar.setOnDateClickListener { year, month, day ->
+ val cal = Calendar.getInstance()
cal.set(Calendar.YEAR, year)
cal.set(Calendar.MONTH, month)
cal.set(Calendar.DAY_OF_MONTH, day)
@@ -83,9 +86,9 @@ class CalendarView : Fragment() {
//TODO redo this tangled mess with some RX code calendar tap -> event -> dayview updates
if (cal.before(Calendar.getInstance()) || cal.isToday())
(this.activity as? MainActivity)?.navToDayView(cal)
- })
+ }
- scrollCalendar.setMonthScrollListener(object : MonthScrollListener {
+ binding.scrollCalendar.setMonthScrollListener(object : MonthScrollListener {
override fun shouldAddNextMonth(lastDisplayedYear: Int, lastDisplayedMonth: Int): Boolean {
// don't let the user scroll more than 4 months into the future
val fourMonths = Calendar.getInstance()
diff --git a/app/src/main/java/com/log28/CycleHistory.kt b/app/src/main/java/com/log28/CycleHistory.kt
index e8139a2..592735b 100644
--- a/app/src/main/java/com/log28/CycleHistory.kt
+++ b/app/src/main/java/com/log28/CycleHistory.kt
@@ -9,14 +9,13 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.recyclerview.widget.RecyclerView
+import com.log28.databinding.FragmentCycleHistoryBinding
import com.log28.groupie.HistoryItem
import com.xwray.groupie.GroupAdapter
import com.xwray.groupie.GroupieViewHolder
import devs.mulham.horizontalcalendar.utils.Utils
import io.realm.Realm
import io.realm.RealmResults
-import kotlinx.android.synthetic.main.fragment_cycle_history.*
import java.util.*
import kotlin.math.roundToInt
@@ -30,6 +29,8 @@ class CycleHistory : Fragment() {
data class CycleData(val cycleStarts: List, val periodEnds: List)
private val realm = Realm.getDefaultInstance()
private val periodDates = realm.getPeriodDaysDecending()
+ private var _binding: FragmentCycleHistoryBinding? = null
+ private val binding get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -41,14 +42,14 @@ class CycleHistory : Fragment() {
Log.d(TAG, "cycleLengths: $cycleLengths, periodLengths: $periodLengths")
if (cycleLengths.isNotEmpty())
- avg_cycle_length.text = cycleLengths.average().roundToInt().toString()
+ binding.avgCycleLength.text = cycleLengths.average().roundToInt().toString()
else // if we don't have any data yet, just show what's been entered
- avg_cycle_length.text = realm.getCycleInfo().cycleLength.toString()
+ binding.avgCycleLength.text = realm.getCycleInfo().cycleLength.toString()
if (periodLengths.isNotEmpty())
- avg_period_length.text = periodLengths.average().roundToInt().toString()
+ binding.avgPeriodLength.text = periodLengths.average().roundToInt().toString()
else
- avg_period_length.text = realm.getCycleInfo().periodLength.toString()
+ binding.avgPeriodLength.text = realm.getCycleInfo().periodLength.toString()
setupPreviousCycles(cycleData.cycleStarts, periodLengths, cycleLengths)
}
@@ -56,12 +57,14 @@ class CycleHistory : Fragment() {
override fun onDestroy() {
super.onDestroy()
realm.close()
+ _binding = null
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_cycle_history, container, false)
+ _binding = FragmentCycleHistoryBinding.inflate(inflater, container, false)
+ return binding.root
}
private fun setupPreviousCycles(cycleStarts: List, periodLengths: List,
@@ -70,7 +73,7 @@ class CycleHistory : Fragment() {
val dividerItem = DividerItemDecoration(context, layout.orientation)
val groupAdapter = GroupAdapter()
- previous_cycles.apply {
+ binding.previousCycles.apply {
layoutManager = layout
adapter = groupAdapter
this.addItemDecoration(dividerItem)
diff --git a/app/src/main/java/com/log28/DayView.kt b/app/src/main/java/com/log28/DayView.kt
index 3ca1ebb..50e618e 100644
--- a/app/src/main/java/com/log28/DayView.kt
+++ b/app/src/main/java/com/log28/DayView.kt
@@ -7,11 +7,11 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import com.log28.databinding.FragmentDayViewBinding
import com.xwray.groupie.ExpandableGroup
import devs.mulham.horizontalcalendar.HorizontalCalendar
import java.util.*
import devs.mulham.horizontalcalendar.utils.HorizontalCalendarListener
-import kotlinx.android.synthetic.main.fragment_day_view.*
import com.xwray.groupie.GroupAdapter
import com.xwray.groupie.Section
import com.xwray.groupie.kotlinandroidextensions.*
@@ -48,11 +48,14 @@ class DayView : Fragment() {
// reference to the notes and sleep amount
private var notesAndSleep = Section()
private lateinit var notesItem: NotesItem
+ private var _binding: FragmentDayViewBinding? = null
+ private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
- val rootView = inflater.inflate(R.layout.fragment_day_view, container, false)
+ _binding = FragmentDayViewBinding.inflate(inflater, container, false)
+ val rootView = binding.root
setupHorizontalCalendar(rootView)
return rootView
}
@@ -79,6 +82,7 @@ class DayView : Fragment() {
categories.removeAllChangeListeners()
symptoms.removeAllChangeListeners()
realm.close()
+ _binding = null
}
// if the day has changed
@@ -94,7 +98,7 @@ class DayView : Fragment() {
super.onViewCreated(view, savedInstanceState)
setDayText(currentDay)
- day_view_recycler.apply {
+ binding.dayViewRecycler.apply {
layoutManager = LinearLayoutManager(context)
adapter = groupAdapter
}
@@ -226,11 +230,11 @@ class DayView : Fragment() {
yesterday.add(Calendar.DAY_OF_MONTH, -1)
if (Utils.isSameDate(day, now))
- day_text.text = context!!.getString(R.string.today)
+ binding.dayText.text = context!!.getString(R.string.today)
else if (Utils.isSameDate(day, yesterday))
- day_text.text = context!!.getString(R.string.yesterday)
+ binding.dayText.text = context!!.getString(R.string.yesterday)
else
- day_text.text = context!!.getString(R.string.days_ago, Utils.daysBetween(day, now))
+ binding.dayText.text = context!!.getString(R.string.days_ago, Utils.daysBetween(day, now))
}
companion object {
diff --git a/app/src/main/java/com/log28/MainActivity.kt b/app/src/main/java/com/log28/MainActivity.kt
index 60b67c1..ed17fc8 100644
--- a/app/src/main/java/com/log28/MainActivity.kt
+++ b/app/src/main/java/com/log28/MainActivity.kt
@@ -8,15 +8,18 @@ import android.preference.PreferenceManager
import android.util.Log
import android.view.Menu
import android.view.MenuItem
-import kotlinx.android.synthetic.main.activity_main.*
+import com.log28.databinding.ActivityMainBinding
import com.log28.intro.AppIntroActivity
import java.util.*
class MainActivity : AppCompatActivity() {
private val SETTINGS_CODE = 3392
+ private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ val view = binding.root
val preferences = PreferenceManager.getDefaultSharedPreferences(this)
val firstStart = preferences.getBoolean("first_start", true)
@@ -36,19 +39,19 @@ class MainActivity : AppCompatActivity() {
preferences.edit().putBoolean("appetite_present", true).apply()
}
- setContentView(R.layout.activity_main)
- setSupportActionBar(toolbar)
+ setContentView(view)
+ setSupportActionBar(binding.toolbar)
// Get the ViewPager and set it's PagerAdapter so that it can display items
val pagerAdapter = TabPagerAdapter(supportFragmentManager,
this@MainActivity)
- viewPager.adapter = pagerAdapter
+ binding.viewPager.adapter = pagerAdapter
// Give the TabLayout the ViewPager
- sliding_tabs.setupWithViewPager(viewPager)
+ binding.slidingTabs.setupWithViewPager(binding.viewPager)
for (i in pagerAdapter.tabText.indices) {
- sliding_tabs.getTabAt(i)?.customView = pagerAdapter.getTabView(i)
+ binding.slidingTabs.getTabAt(i)?.customView = pagerAdapter.getTabView(i)
}
}
@@ -85,8 +88,8 @@ class MainActivity : AppCompatActivity() {
*/
fun navToDayView(day: Calendar) {
// go to the index of the day view
- viewPager.currentItem = 1
- (viewPager.adapter as? TabPagerAdapter)?.setDayViewDay(day)
+ binding.viewPager.currentItem = 1
+ (binding.viewPager.adapter as? TabPagerAdapter)?.setDayViewDay(day)
}
companion object {
diff --git a/app/src/main/java/com/log28/SettingsView.kt b/app/src/main/java/com/log28/SettingsView.kt
index 2340adf..f156ade 100644
--- a/app/src/main/java/com/log28/SettingsView.kt
+++ b/app/src/main/java/com/log28/SettingsView.kt
@@ -14,11 +14,11 @@ import android.util.SparseArray
import android.view.MenuItem
import android.widget.Toast
import io.realm.Realm
-import kotlinx.android.synthetic.main.activity_settings.*
import android.app.AlarmManager
import android.app.PendingIntent
import androidx.preference.Preference
import androidx.preference.PreferenceDataStore
+import com.log28.databinding.ActivitySettingsBinding
import com.takisoft.preferencex.PreferenceFragmentCompat
import java.util.*
@@ -104,10 +104,12 @@ class SettingsView : PreferenceFragmentCompat() {
}
class SettingsActivity : AppCompatActivity() {
+ private lateinit var binding: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_settings)
- setSupportActionBar(toolbar)
+ binding = ActivitySettingsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ setSupportActionBar(binding.toolbar)
// draw the back button
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
diff --git a/app/src/main/java/com/log28/TabPagerAdapter.kt b/app/src/main/java/com/log28/TabPagerAdapter.kt
index 6e19dea..1a22e87 100644
--- a/app/src/main/java/com/log28/TabPagerAdapter.kt
+++ b/app/src/main/java/com/log28/TabPagerAdapter.kt
@@ -6,7 +6,7 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import android.view.LayoutInflater
import android.view.View
-import kotlinx.android.synthetic.main.custom_tab.view.*
+import com.log28.databinding.CustomTabBinding
import java.util.*
class TabPagerAdapter(fm: FragmentManager, private val context: Context) : FragmentPagerAdapter(fm) {
@@ -47,11 +47,11 @@ class TabPagerAdapter(fm: FragmentManager, private val context: Context) : Fragm
}
fun getTabView(position: Int): View {
- val view = LayoutInflater.from(context).inflate(R.layout.custom_tab, null)
- view.tab_text.text = tabText[position]
- view.tab_icon.setImageResource(tabIcons[position])
+ val binding = CustomTabBinding.inflate(LayoutInflater.from(context))
+ binding.tabText.text = tabText[position]
+ binding.tabIcon.setImageResource(tabIcons[position])
- return view
+ return binding.root
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/log28/intro/CycleIntroFragment.kt b/app/src/main/java/com/log28/intro/CycleIntroFragment.kt
index 7c62205..409eb46 100644
--- a/app/src/main/java/com/log28/intro/CycleIntroFragment.kt
+++ b/app/src/main/java/com/log28/intro/CycleIntroFragment.kt
@@ -9,10 +9,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import io.realm.Realm
-import kotlinx.android.synthetic.main.fragment_cycle_intro.*
import com.log28.CycleInfo
import com.log28.R
+import com.log28.databinding.FragmentCycleIntroBinding
/**
@@ -22,6 +22,8 @@ import com.log28.R
*/
class CycleIntroFragment : Fragment() {
private val realm = Realm.getDefaultInstance()
+ private var _binding: FragmentCycleIntroBinding? = null
+ private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -30,17 +32,19 @@ class CycleIntroFragment : Fragment() {
override fun onDestroy() {
super.onDestroy()
realm.close()
+ _binding = null
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_cycle_intro, container, false)
+ _binding = FragmentCycleIntroBinding.inflate(layoutInflater, container, false)
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- cycle_length_input.addTextChangedListener(object :TextWatcher {
+ binding.cycleLengthInput.addTextChangedListener(object :TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
// we don't care
}
@@ -57,7 +61,7 @@ class CycleIntroFragment : Fragment() {
}
})
- period_length_input.addTextChangedListener(object :TextWatcher {
+ binding.periodLengthInput.addTextChangedListener(object :TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
// we don't care
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 40feca6..562af10 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -22,7 +22,7 @@