Verbessere visibility modifiers, String empty checks, lateinit-Nutzung

master
Niko Diamadis 3 years ago
parent 577bcad1e6
commit 78a45079e8
Signed by: niko
GPG Key ID: BE53B0B17B1B142E

@ -1,16 +1,16 @@
package com.cyb3rko.techniklogger.data package com.cyb3rko.techniklogger.data
data class HourMinute( internal data class HourMinute(
internal val hours: Int, val hours: Int,
internal val minutes: Int val minutes: Int
) { ) {
internal val millis = hours.toLong() * 3600000 + minutes.toLong() * 60000 private val millis = hours.toLong() * 3600000 + minutes.toLong() * 60000
override fun toString(): String { override fun toString(): String {
return "${hours.toPrettyString()}:${minutes.toPrettyString()}" return "${hours.toTwoDigitString()}:${minutes.toTwoDigitString()}"
} }
private fun Int.toPrettyString(): String { private fun Int.toTwoDigitString(): String {
val intString = this.toString() val intString = this.toString()
return if (intString.length != 1) { return if (intString.length != 1) {
intString intString
@ -25,8 +25,18 @@ data class HourMinute(
return difference / 3600000f return difference / 3600000f
} }
operator fun compareTo(b: HourMinute): Int {
return if (this.hours == b.hours && this.minutes == b.minutes) {
0
} else if (this.hours == b.hours && this.minutes < b.minutes) {
-1
} else if (this.hours < b.hours) {
-1
} else 1
}
companion object { companion object {
internal fun fromString(hourMinute: String): HourMinute { fun fromString(hourMinute: String): HourMinute {
val parts = hourMinute.split(":") val parts = hourMinute.split(":")
val hours = parts[0].toInt() val hours = parts[0].toInt()
val minutes = parts[1].toInt() val minutes = parts[1].toInt()
@ -34,13 +44,3 @@ data class HourMinute(
} }
} }
} }
internal operator fun HourMinute.compareTo(b: HourMinute): Int {
return if (this.hours == b.hours && this.minutes == b.minutes) {
0
} else if (this.hours == b.hours && this.minutes < b.minutes) {
-1
} else if (this.hours < b.hours) {
-1
} else 1
}

@ -8,8 +8,7 @@ import com.parse.ParseException
import com.parse.ParseObject import com.parse.ParseObject
import com.parse.ParseQuery import com.parse.ParseQuery
object ParseController { internal object ParseController {
private inline fun <reified T : ParseObject>getQuery( private inline fun <reified T : ParseObject>getQuery(
allowCache: Boolean = true allowCache: Boolean = true
): ParseQuery<T> { ): ParseQuery<T> {
@ -23,7 +22,7 @@ object ParseController {
} }
} }
internal fun fetchAdminStatus( fun fetchAdminStatus(
name: String?, name: String?,
action: (objectId: String?, admin: Boolean?, e: ParseException?) -> Unit action: (objectId: String?, admin: Boolean?, e: ParseException?) -> Unit
) { ) {
@ -41,7 +40,7 @@ object ParseController {
} }
} }
internal fun fetchYears(action: (entries: List<Year>, e: ParseException?) -> Unit) { fun fetchYears(action: (entries: List<Year>, e: ParseException?) -> Unit) {
val query = getQuery<Year>() val query = getQuery<Year>()
query.orderByDescending(Year.COLUMN_NAME) query.orderByDescending(Year.COLUMN_NAME)
query.selectKeys(listOf( query.selectKeys(listOf(
@ -54,10 +53,7 @@ object ParseController {
} }
} }
internal fun fetchMission( fun fetchMission(objectId: String?, action: (mission: Mission?, e: ParseException?) -> Unit) {
objectId: String?,
action: (mission: Mission?, e: ParseException?) -> Unit
) {
val query = getQuery<Mission>() val query = getQuery<Mission>()
query.selectKeys(listOf( query.selectKeys(listOf(
Mission.COLUMN_DATE, Mission.COLUMN_DATE,
@ -74,10 +70,7 @@ object ParseController {
} }
} }
internal fun fetchMissions( fun fetchMissions(year: String, action: (missions: List<Mission>, e: ParseException?) -> Unit) {
year: String,
action: (missions: List<Mission>, e: ParseException?) -> Unit
) {
val query = getQuery<Mission>() val query = getQuery<Mission>()
query.whereEqualTo(Mission.COLUMN_YEAR, Year.emptyObject(year)) query.whereEqualTo(Mission.COLUMN_YEAR, Year.emptyObject(year))
query.orderByDescending(Mission.COLUMN_DATE) query.orderByDescending(Mission.COLUMN_DATE)
@ -96,7 +89,7 @@ object ParseController {
} }
} }
internal fun fetchParticipations( fun fetchParticipations(
missionId: String, missionId: String,
includeMember: Boolean, includeMember: Boolean,
action: (participations: List<Participation>, e: ParseException?) -> Unit action: (participations: List<Participation>, e: ParseException?) -> Unit
@ -124,7 +117,7 @@ object ParseController {
} }
} }
internal fun fetchMembers( fun fetchMembers(
includeInformation: Boolean, includeInformation: Boolean,
action: ( action: (
members: List<Member>, members: List<Member>,

@ -6,32 +6,32 @@ import com.parse.ParseObject
@ParseClassName(CLASS_NAME) @ParseClassName(CLASS_NAME)
internal class Member : ParseObject() { internal class Member : ParseObject() {
internal val admin val admin
get() = getBoolean(COLUMN_ADMIN) get() = getBoolean(COLUMN_ADMIN)
internal val name val name
get() = getString(COLUMN_NAME)!! get() = getString(COLUMN_NAME)!!
internal fun setAdmin(admin: Boolean) { fun setAdmin(admin: Boolean) {
put(COLUMN_ADMIN, admin) put(COLUMN_ADMIN, admin)
} }
internal fun setName(name: String) { fun setName(name: String) {
put(COLUMN_NAME, name) put(COLUMN_NAME, name)
} }
internal fun retire() { fun retire() {
put(COLUMN_RETIRED, true) put(COLUMN_RETIRED, true)
} }
companion object { companion object {
internal const val CLASS_NAME = "Techniker" const val CLASS_NAME = "Techniker"
internal const val COLUMN_ADMIN = "admin" const val COLUMN_ADMIN = "admin"
internal const val COLUMN_NAME = "name" const val COLUMN_NAME = "name"
internal const val COLUMN_RETIRED = "entlassen" const val COLUMN_RETIRED = "entlassen"
internal fun emptyObject(objectId: String): Member { fun emptyObject(objectId: String): Member {
return createWithoutData(Member::class.java, objectId) return createWithoutData(Member::class.java, objectId)
} }
} }

@ -8,57 +8,57 @@ import java.util.*
@ParseClassName(CLASS_NAME) @ParseClassName(CLASS_NAME)
internal class Mission : ParseObject() { internal class Mission : ParseObject() {
internal val date: () -> Date val date: () -> Date
get() = { get() = {
val dates = getString(COLUMN_DATE)!!.split(",") val dates = getString(COLUMN_DATE)!!.split(",")
SimpleDateFormat("yyyy.MM.dd", Locale.GERMANY).parse(dates[0])!! SimpleDateFormat("yyyy.MM.dd", Locale.GERMANY).parse(dates[0])!!
} }
internal val duration val duration
get() = getDouble(COLUMN_DURATION).toFloat() get() = getDouble(COLUMN_DURATION).toFloat()
internal val location val location
get() = getString(COLUMN_LOCATION)!! get() = getString(COLUMN_LOCATION)!!
internal val name val name
get() = getString(COLUMN_NAME)!! get() = getString(COLUMN_NAME)!!
internal val time: () -> String val time: () -> String
get() = { get() = {
val dates = getString(COLUMN_DATE)!!.split(",") val dates = getString(COLUMN_DATE)!!.split(",")
if (dates.size > 1) dates[1] else "" if (dates.size > 1) dates[1] else ""
} }
internal fun setDate(date: String) { fun setDate(date: String) {
put(COLUMN_DATE, date) put(COLUMN_DATE, date)
} }
internal fun setDuration(duration: Float) { fun setDuration(duration: Float) {
put(COLUMN_DURATION, duration) put(COLUMN_DURATION, duration)
} }
internal fun setLocation(location: String) { fun setLocation(location: String) {
put(COLUMN_LOCATION, location) put(COLUMN_LOCATION, location)
} }
internal fun setName(name: String) { fun setName(name: String) {
put(COLUMN_NAME, name) put(COLUMN_NAME, name)
} }
internal fun setYear(yearId: String) { fun setYear(yearId: String) {
put(COLUMN_YEAR, Year.emptyObject(yearId)) put(COLUMN_YEAR, Year.emptyObject(yearId))
} }
companion object { companion object {
internal const val CLASS_NAME = "Einsatz" const val CLASS_NAME = "Einsatz"
internal const val COLUMN_DATE = "datum" const val COLUMN_DATE = "datum"
internal const val COLUMN_DURATION = "dauer" const val COLUMN_DURATION = "dauer"
internal const val COLUMN_LOCATION = "ort" const val COLUMN_LOCATION = "ort"
internal const val COLUMN_NAME = "name" const val COLUMN_NAME = "name"
internal const val COLUMN_YEAR = "jahr" const val COLUMN_YEAR = "jahr"
internal fun emptyObject(objectId: String): Mission { fun emptyObject(objectId: String): Mission {
return createWithoutData(Mission::class.java, objectId) return createWithoutData(Mission::class.java, objectId)
} }
} }

@ -6,38 +6,38 @@ import com.parse.ParseObject
@ParseClassName(CLASS_NAME) @ParseClassName(CLASS_NAME)
internal class Participation : ParseObject() { internal class Participation : ParseObject() {
internal val by val by
get() = getParseObject(COLUMN_BY)?.objectId get() = getParseObject(COLUMN_BY)?.objectId
internal val duration val duration
get() = getDouble(COLUMN_DURATION).toFloat() get() = getDouble(COLUMN_DURATION).toFloat()
internal val `in` val `in`
get() = getParseObject(COLUMN_IN)?.objectId get() = getParseObject(COLUMN_IN)?.objectId
internal val name val name
get() = (getParseObject(COLUMN_BY) as Member).name get() = (getParseObject(COLUMN_BY) as Member).name
internal val time val time
get() = getString(COLUMN_TIME)!! get() = getString(COLUMN_TIME)!!
internal fun setDuration(duration: Float) { fun setDuration(duration: Float) {
put(COLUMN_DURATION, duration) put(COLUMN_DURATION, duration)
} }
internal fun setTime(time: String) { fun setTime(time: String) {
put(COLUMN_TIME, time) put(COLUMN_TIME, time)
} }
companion object { companion object {
internal const val CLASS_NAME = "Teilnahme" const val CLASS_NAME = "Teilnahme"
internal const val COLUMN_BY = "von" const val COLUMN_BY = "von"
internal const val COLUMN_DURATION = "dauer" const val COLUMN_DURATION = "dauer"
internal const val COLUMN_IN = "an" const val COLUMN_IN = "an"
internal const val COLUMN_TIME = "uhrzeit" const val COLUMN_TIME = "uhrzeit"
internal fun emptyObject(objectId: String): Participation { fun emptyObject(objectId: String): Participation {
return createWithoutData(Participation::class.java, objectId) return createWithoutData(Participation::class.java, objectId)
} }
} }

@ -6,15 +6,15 @@ import com.parse.ParseObject
@ParseClassName(CLASS_NAME) @ParseClassName(CLASS_NAME)
internal class Year : ParseObject() { internal class Year : ParseObject() {
internal val name val name
get() = getString(COLUMN_NAME)!! get() = getString(COLUMN_NAME)!!
companion object { companion object {
internal const val CLASS_NAME = "Jahr" const val CLASS_NAME = "Jahr"
internal const val COLUMN_NAME = "name" const val COLUMN_NAME = "name"
internal fun emptyObject(objectId: String): Year { fun emptyObject(objectId: String): Year {
return createWithoutData(Year::class.java, objectId) return createWithoutData(Year::class.java, objectId)
} }
} }

@ -108,7 +108,7 @@ class ListingFragment : Fragment() {
closeFABMenu() closeFABMenu()
} }
if (adminMode == null && Safe.getKey(myContext, NAME) != "") { if (adminMode == null && Safe.getKey(myContext, NAME).isNotEmpty()) {
updateAdminStatus() updateAdminStatus()
} else if (adminMode != null && adminMode!!) { } else if (adminMode != null && adminMode!!) {
binding.fabContainer.show() binding.fabContainer.show()

@ -52,11 +52,11 @@ class MissionPusherFragment : Fragment() {
val timePickerBuilder = TimePickerBuilder() val timePickerBuilder = TimePickerBuilder()
binding.dateButton.setOnClickListener { binding.dateButton.setOnClickListener {
if (date != "") { if (date.isNotEmpty()) {
datePickerBuilder.setInitialDate(date) datePickerBuilder.setInitialDate(date)
} }
if (time != "") { if (time.isNotEmpty()) {
val times = time.split(" Uhr")[0].split(" - ") val times = time.split(" Uhr")[0].split(" - ")
timePickerBuilder.apply { timePickerBuilder.apply {
initialStart = HourMinute.fromString(times[0]) initialStart = HourMinute.fromString(times[0])
@ -78,7 +78,7 @@ class MissionPusherFragment : Fragment() {
} }
} }
if (childKey != "") { if (childKey.isNotEmpty()) {
binding.deleteButton.show() binding.deleteButton.show()
binding.deleteButton.setOnClickListener { binding.deleteButton.setOnClickListener {
MaterialAlertDialogBuilder(myContext) MaterialAlertDialogBuilder(myContext)
@ -114,12 +114,12 @@ class MissionPusherFragment : Fragment() {
val name = binding.nameEditText.text.toString().trim() val name = binding.nameEditText.text.toString().trim()
val location = binding.locationEditText.text.toString().trim() val location = binding.locationEditText.text.toString().trim()
if (name != "" && location != "" && time != "") { if (name.isNotEmpty() && location.isNotEmpty() && time.isNotEmpty()) {
mission.setName(name) mission.setName(name)
mission.setLocation(location) mission.setLocation(location)
val dateTimes = date.split(".") val dateTimes = date.split(".")
var dateTime = "${dateTimes[2]}.${dateTimes[1]}.${dateTimes[0]}" var dateTime = "${dateTimes[2]}.${dateTimes[1]}.${dateTimes[0]}"
if (time != "") dateTime += ",$time" if (time.isNotEmpty()) dateTime += ",$time"
mission.setDate(dateTime) mission.setDate(dateTime)
mission.setDuration(duration) mission.setDuration(duration)
mission.setYear(Safe.getKey(myContext, CURRENT_YEAR)) mission.setYear(Safe.getKey(myContext, CURRENT_YEAR))
@ -150,25 +150,25 @@ class MissionPusherFragment : Fragment() {
} }
private fun restoreInformation() { private fun restoreInformation() {
if (name != "") { if (name.isNotEmpty()) {
binding.nameEditText.text = SpannableStringBuilder(name) binding.nameEditText.text = SpannableStringBuilder(name)
} }
if (location != "") { if (location.isNotEmpty()) {
binding.locationEditText.text = SpannableStringBuilder(location) binding.locationEditText.text = SpannableStringBuilder(location)
} }
if (date != "") { if (date.isNotEmpty()) {
binding.dateView.text = Html.fromHtml("<b>Datum:</b><br/>${date}") binding.dateView.text = Html.fromHtml("<b>Datum:</b><br/>${date}")
} }
if (time != "") { if (time.isNotEmpty()) {
binding.durationView.text = Html.fromHtml("<b>Dauer:</b> $time Uhr, $duration Stunden") binding.durationView.text = Html.fromHtml("<b>Dauer:</b> $time Uhr, $duration Stunden")
} else { } else {
binding.durationView.text = Html.fromHtml("<b>Dauer:</b> $duration Stunden") binding.durationView.text = Html.fromHtml("<b>Dauer:</b> $duration Stunden")
} }
if (childKey == "") { mission = if (childKey.isEmpty()) {
mission = Mission() Mission()
} else { } else {
mission = Mission.emptyObject(childKey) Mission.emptyObject(childKey)
} }
} }
} }

@ -83,7 +83,7 @@ class YearsFragment : Fragment() {
.show() .show()
} }
if (adminMode == null && Safe.getKey(myContext, NAME) != "") { if (adminMode == null && Safe.getKey(myContext, NAME).isNotEmpty()) {
updateAdminStatus() updateAdminStatus()
} else if (adminMode != null && adminMode!!) { } else if (adminMode != null && adminMode!!) {
binding.fab.show() binding.fab.show()

@ -2,7 +2,6 @@ package com.cyb3rko.techniklogger.modals
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.cyb3rko.techniklogger.data.HourMinute import com.cyb3rko.techniklogger.data.HourMinute
import com.cyb3rko.techniklogger.data.compareTo
import com.cyb3rko.techniklogger.showWarningToast import com.cyb3rko.techniklogger.showWarningToast
import com.google.android.material.timepicker.MaterialTimePicker import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat import com.google.android.material.timepicker.TimeFormat
@ -15,10 +14,10 @@ internal class TimePickerBuilder {
private const val TAG = "TimePickerDialog" private const val TAG = "TimePickerDialog"
} }
internal var initialStart = HourMinute(0, 0) var initialStart = HourMinute(0, 0)
internal var initialEnd = HourMinute(0, 0) var initialEnd = HourMinute(0, 0)
internal fun show( fun show(
activity: FragmentActivity, activity: FragmentActivity,
missionTime: String?, missionTime: String?,
action: (time: String, duration: Float) -> Unit action: (time: String, duration: Float) -> Unit
@ -52,7 +51,7 @@ internal class TimePickerBuilder {
missionEnd = HourMinute.fromString(missionTimes[1]) missionEnd = HourMinute.fromString(missionTimes[1])
} }
var start = HourMinute(0, 0) lateinit var start: HourMinute
picker1.addOnPositiveButtonClickListener { picker1.addOnPositiveButtonClickListener {
start = HourMinute(picker1.hour, picker1.minute) start = HourMinute(picker1.hour, picker1.minute)
if (missionStart != null && start < missionStart) { if (missionStart != null && start < missionStart) {

Loading…
Cancel
Save