From 1bc3f60e82cfeea2ee096c86d707b0c641162fa6 Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 20 Jan 2020 01:00:00 +0100 Subject: [PATCH] Add option to change parent timezone --- .../advanced/ManageChildAdvancedFragment.kt | 25 +++----- ...nt.kt => SetUserTimezoneDialogFragment.kt} | 18 +++--- .../advanced/timezone/UserTimezoneView.kt | 48 +++++++++++++++ .../ui/manage/parent/ManageParentFragment.kt | 12 +++- .../layout/fragment_manage_child_advanced.xml | 40 +------------ .../res/layout/fragment_manage_parent.xml | 5 +- .../set_child_timezone_dialog_fragment.xml | 2 +- .../main/res/layout/user_timezone_view.xml | 58 +++++++++++++++++++ 8 files changed, 143 insertions(+), 65 deletions(-) rename app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/{SetChildTimezoneDialogFragment.kt => SetUserTimezoneDialogFragment.kt} (89%) create mode 100644 app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/UserTimezoneView.kt create mode 100644 app/src/main/res/layout/user_timezone_view.xml diff --git a/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/ManageChildAdvancedFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/ManageChildAdvancedFragment.kt index e712bb4..12e44b7 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/ManageChildAdvancedFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/ManageChildAdvancedFragment.kt @@ -38,10 +38,9 @@ import io.timelimit.android.ui.main.getActivityViewModel import io.timelimit.android.ui.manage.child.ManageChildFragmentArgs import io.timelimit.android.ui.manage.child.advanced.managedisabletimelimits.ManageDisableTimelimitsViewHelper import io.timelimit.android.ui.manage.child.advanced.password.ManageChildPassword -import io.timelimit.android.ui.manage.child.advanced.timezone.SetChildTimezoneDialogFragment +import io.timelimit.android.ui.manage.child.advanced.timezone.UserTimezoneView import io.timelimit.android.ui.manage.child.primarydevice.PrimaryDeviceView import io.timelimit.android.ui.payment.RequiresPurchaseDialogFragment -import java.util.* class ManageChildAdvancedFragment : Fragment() { companion object { @@ -142,20 +141,14 @@ class ManageChildAdvancedFragment : Fragment() { }) } - run { - // timezone - childEntry.observe(this, Observer { - binding.timezone = TimeZone.getTimeZone(it?.timeZone ?: "").displayName - }) - - binding.changeTimezoneButton.setOnClickListener { - if (auth.requestAuthenticationOrReturnTrue()) { - SetChildTimezoneDialogFragment.newInstance( - childId = params.childId - ).show(fragmentManager!!) - } - } - } + UserTimezoneView.bind( + userEntry = childEntry, + view = binding.userTimezone, + fragmentManager = fragmentManager!!, + lifecycleOwner = this, + userId = params.childId, + auth = auth + ) binding.renameChildButton.setOnClickListener { if (auth.requestAuthenticationOrReturnTrue()) { diff --git a/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetChildTimezoneDialogFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetUserTimezoneDialogFragment.kt similarity index 89% rename from app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetChildTimezoneDialogFragment.kt rename to app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetUserTimezoneDialogFragment.kt index 5c6f2bd..dc735dc 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetChildTimezoneDialogFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/SetUserTimezoneDialogFragment.kt @@ -1,5 +1,5 @@ /* - * TimeLimit Copyright 2019 Jonas Lochmann + * TimeLimit Copyright 2019 - 2020 Jonas Lochmann * * 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 @@ -39,20 +39,20 @@ import io.timelimit.android.ui.main.ActivityViewModel import io.timelimit.android.ui.main.getActivityViewModel import java.util.* -class SetChildTimezoneDialogFragment : DialogFragment() { +class SetUserTimezoneDialogFragment : DialogFragment() { companion object { - private const val EXTRA_CHILD_ID = "childId" - private const val DIALOG_TAG = "SetChildTimezoneDialogFragment" + private const val EXTRA_USER_ID = "userId" + private const val DIALOG_TAG = "SetUserTimezoneDialogFragment" - fun newInstance(childId: String) = SetChildTimezoneDialogFragment().apply { + fun newInstance(userId: String) = SetUserTimezoneDialogFragment().apply { arguments = Bundle().apply { - putString(EXTRA_CHILD_ID, childId) + putString(EXTRA_USER_ID, userId) } } } - val childId: String by lazy { - arguments!!.getString(EXTRA_CHILD_ID)!! + val userId: String by lazy { + arguments!!.getString(EXTRA_USER_ID)!! } val auth: ActivityViewModel by lazy { @@ -81,7 +81,7 @@ class SetChildTimezoneDialogFragment : DialogFragment() { override fun onTimezoneClicked(timeZone: TimeZone) { auth.tryDispatchParentAction( SetUserTimezoneAction( - userId = childId, + userId = userId, timezone = timeZone.id ) ) diff --git a/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/UserTimezoneView.kt b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/UserTimezoneView.kt new file mode 100644 index 0000000..0e7fc64 --- /dev/null +++ b/app/src/main/java/io/timelimit/android/ui/manage/child/advanced/timezone/UserTimezoneView.kt @@ -0,0 +1,48 @@ +/* + * TimeLimit Copyright 2019 - 2020 Jonas Lochmann + * + * 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 version 3 of the License. + * + * 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 . + */ +package io.timelimit.android.ui.manage.child.advanced.timezone + +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer +import io.timelimit.android.data.model.User +import io.timelimit.android.databinding.UserTimezoneViewBinding +import io.timelimit.android.ui.main.ActivityViewModel +import java.util.* + +object UserTimezoneView { + fun bind( + userEntry: LiveData, + view: UserTimezoneViewBinding, + fragmentManager: FragmentManager, + lifecycleOwner: LifecycleOwner, + auth: ActivityViewModel, + userId: String + ) { + userEntry.observe(lifecycleOwner, Observer { + view.timezone = TimeZone.getTimeZone(it?.timeZone ?: "").displayName + }) + + view.changeTimezoneButton.setOnClickListener { + if (auth.requestAuthenticationOrReturnTrue()) { + SetUserTimezoneDialogFragment.newInstance( + userId = userId + ).show(fragmentManager) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/io/timelimit/android/ui/manage/parent/ManageParentFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/parent/ManageParentFragment.kt index 831bbc3..c979611 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/parent/ManageParentFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/parent/ManageParentFragment.kt @@ -1,5 +1,5 @@ /* - * TimeLimit Copyright 2019 Jonas Lochmann + * TimeLimit Copyright 2019 - 2020 Jonas Lochmann * * 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 @@ -36,6 +36,7 @@ import io.timelimit.android.logic.DefaultAppLogic import io.timelimit.android.ui.main.ActivityViewModelHolder import io.timelimit.android.ui.main.AuthenticationFab import io.timelimit.android.ui.main.FragmentWithCustomTitle +import io.timelimit.android.ui.manage.child.advanced.timezone.UserTimezoneView import io.timelimit.android.ui.manage.parent.delete.DeleteParentView class ManageParentFragment : Fragment(), FragmentWithCustomTitle { @@ -105,6 +106,15 @@ class ManageParentFragment : Fragment(), FragmentWithCustomTitle { userEntry = parentUser ) + UserTimezoneView.bind( + view = binding.timezone, + userId = params.parentId, + lifecycleOwner = this, + fragmentManager = fragmentManager!!, + auth = activity.getActivityViewModel(), + userEntry = parentUser + ) + binding.handlers = object: ManageParentFragmentHandlers { override fun onChangePasswordClicked() { navigation.safeNavigate( diff --git a/app/src/main/res/layout/fragment_manage_child_advanced.xml b/app/src/main/res/layout/fragment_manage_child_advanced.xml index a146a53..3a8a89a 100644 --- a/app/src/main/res/layout/fragment_manage_child_advanced.xml +++ b/app/src/main/res/layout/fragment_manage_child_advanced.xml @@ -1,5 +1,5 @@ + tools:context="io.timelimit.android.ui.manage.child.advanced.timezone.SetUserTimezoneDialogFragment"> + + + + + + + + + + + + + + +