Skip to content

Commit 54f627a

Browse files
committed
Move screen wake lock menu logic to BaseOneFragment and update releaseScreenLock
1 parent 0640412 commit 54f627a

6 files changed

Lines changed: 128 additions & 107 deletions

File tree

app-base/src/main/java/xyz/aprildown/timer/app/base/utils/ScreenWakeLock.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ object ScreenWakeLock {
5757
) == screenTiming
5858
}
5959

60-
fun releaseScreenLock() {
60+
fun releaseScreenLock(context: Context, screenTiming: String) {
61+
if (!isValidLocation(context, screenTiming)) return
6162
val wl = sScreenWakeLock
6263
if (wl != null && wl.isHeld) {
6364
wl.release()

app-timer-list/src/main/java/xyz/aprildown/timer/app/timer/list/TimerFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,10 @@ class TimerFragment :
154154

155155
override fun onPause() {
156156
super.onPause()
157-
ScreenWakeLock.releaseScreenLock()
157+
ScreenWakeLock.releaseScreenLock(
158+
context = requireActivity(),
159+
screenTiming = getString(RBase.string.pref_screen_timing_value_timer),
160+
)
158161
}
159162

160163
override fun onStop() {

app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/BaseOneFragment.kt

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,39 @@ import android.content.Context
55
import android.content.Intent
66
import android.content.ServiceConnection
77
import android.os.Build
8+
import android.os.Bundle
89
import android.os.IBinder
910
import android.provider.Settings
1011
import android.text.InputType
1112
import android.text.format.DateUtils
13+
import android.view.Menu
14+
import android.view.MenuInflater
15+
import android.view.MenuItem
1216
import android.view.View
1317
import android.view.ViewGroup
1418
import android.widget.CompoundButton
1519
import android.widget.EditText
20+
import android.widget.Toast
1621
import androidx.annotation.LayoutRes
1722
import androidx.annotation.RequiresApi
1823
import androidx.appcompat.app.AlertDialog
24+
import androidx.core.content.edit
1925
import androidx.core.net.toUri
26+
import androidx.core.view.MenuItemCompat
27+
import androidx.core.view.MenuProvider
2028
import androidx.fragment.app.Fragment
2129
import androidx.fragment.app.activityViewModels
2230
import androidx.navigation.NavOptions
2331
import androidx.navigation.fragment.NavHostFragment
2432
import androidx.viewbinding.ViewBinding
2533
import com.github.deweyreed.tools.anko.longToast
34+
import com.github.deweyreed.tools.anko.toast
2635
import com.github.deweyreed.tools.arch.Event
2736
import com.github.deweyreed.tools.helper.createChooserIntentIfDead
37+
import com.github.deweyreed.tools.helper.getNonNullString
2838
import com.github.deweyreed.tools.helper.startActivityOrNothing
2939
import com.google.android.material.dialog.MaterialAlertDialogBuilder
40+
import xyz.aprildown.timer.app.base.data.PreferenceData
3041
import xyz.aprildown.timer.app.base.ui.AppNavigator
3142
import xyz.aprildown.timer.app.base.ui.StepUpdater
3243
import xyz.aprildown.timer.app.base.utils.ScreenWakeLock
@@ -42,6 +53,7 @@ import xyz.aprildown.timer.presentation.stream.StreamState
4253
import xyz.aprildown.timer.presentation.stream.TimerIndex
4354
import xyz.aprildown.timer.presentation.stream.getLoop
4455
import xyz.aprildown.timer.presentation.stream.getStep
56+
import xyz.aprildown.tools.helper.safeSharedPreference
4557
import javax.inject.Inject
4658
import javax.inject.Provider
4759
import xyz.aprildown.timer.app.base.R as RBase
@@ -65,6 +77,103 @@ abstract class BaseOneFragment<T : ViewBinding>(
6577

6678
private var pipHelper: PipHelper? = null
6779

80+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
81+
super.onViewCreated(view, savedInstanceState)
82+
setUpMenu()
83+
}
84+
85+
private fun setUpMenu() {
86+
val context = requireContext()
87+
val sharedPreferences = context.safeSharedPreference
88+
activity?.addMenuProvider(
89+
object : MenuProvider {
90+
private val id = View.generateViewId()
91+
private var toast: Toast? = null
92+
93+
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
94+
val menuItem =
95+
menu.add(0, id, 0, RBase.string.pref_screen_title)
96+
MenuItemCompat.setContentDescription(
97+
menuItem,
98+
context.getString(RBase.string.pref_screen_title)
99+
)
100+
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
101+
menuItem.updateState()
102+
}
103+
104+
private fun MenuItem.updateState() {
105+
when (
106+
sharedPreferences.getString(
107+
PreferenceData.KEY_SCREEN,
108+
context.getString(RBase.string.pref_screen_value_default)
109+
)
110+
) {
111+
context.getString(RBase.string.pref_screen_value_keep) -> {
112+
setIcon(RBase.drawable.settings_brightness_keep)
113+
setTitle(RBase.string.pref_screen_title_on)
114+
}
115+
context.getString(RBase.string.pref_screen_value_dim) -> {
116+
setIcon(RBase.drawable.settings_brightness_dim)
117+
setTitle(RBase.string.pref_screen_title_dim)
118+
}
119+
else -> {
120+
setIcon(RBase.drawable.settings_brightness)
121+
setTitle(RBase.string.pref_screen_title_default)
122+
}
123+
}
124+
}
125+
126+
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
127+
if (menuItem.itemId != id) return false
128+
toast?.cancel()
129+
when (
130+
context.safeSharedPreference.getString(
131+
PreferenceData.KEY_SCREEN,
132+
context.getString(RBase.string.pref_screen_value_default)
133+
)
134+
) {
135+
context.getString(RBase.string.pref_screen_value_keep) -> {
136+
sharedPreferences.edit {
137+
putString(
138+
PreferenceData.KEY_SCREEN,
139+
context.getString(RBase.string.pref_screen_value_dim)
140+
)
141+
}
142+
toast = context.toast(RBase.string.pref_screen_title_dim)
143+
}
144+
context.getString(RBase.string.pref_screen_value_dim) -> {
145+
sharedPreferences.edit {
146+
putString(
147+
PreferenceData.KEY_SCREEN,
148+
context.getString(RBase.string.pref_screen_value_default)
149+
)
150+
}
151+
toast = context.toast(RBase.string.pref_screen_title_default)
152+
}
153+
else -> {
154+
sharedPreferences.edit {
155+
putString(
156+
PreferenceData.KEY_SCREEN,
157+
context.getString(RBase.string.pref_screen_value_keep)
158+
)
159+
}
160+
toast = context.toast(RBase.string.pref_screen_title_on)
161+
}
162+
}
163+
val timing = sharedPreferences.getNonNullString(
164+
name = PreferenceData.KEY_SCREEN_TIMING,
165+
default = context.getString(RBase.string.pref_screen_timing_value_default),
166+
)
167+
ScreenWakeLock.releaseScreenLock(context = context, screenTiming = timing)
168+
ScreenWakeLock.acquireScreenWakeLock(context = context, screenTiming = timing)
169+
menuItem.updateState()
170+
return true
171+
}
172+
},
173+
viewLifecycleOwner
174+
)
175+
}
176+
68177
override fun onStart() {
69178
super.onStart()
70179
val activity = requireActivity()
@@ -189,7 +298,10 @@ abstract class BaseOneFragment<T : ViewBinding>(
189298
pipHelper?.dismissPipView()
190299
pipHelper = null
191300

192-
ScreenWakeLock.releaseScreenLock()
301+
ScreenWakeLock.releaseScreenLock(
302+
context = context,
303+
screenTiming = getString(RBase.string.pref_screen_timing_value_timer),
304+
)
193305
}
194306
}
195307

app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneActivity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@ class OneActivity : BaseActivity(), OneActivityInterface {
7575

7676
override fun onPause() {
7777
super.onPause()
78-
ScreenWakeLock.releaseScreenLock()
78+
ScreenWakeLock.releaseScreenLock(
79+
context = this,
80+
screenTiming = getString(RBase.string.pref_screen_timing_value_timer),
81+
)
7982
}
8083

8184
override fun setToolbarTitle(title: String) {

app-timer-one/src/main/java/xyz/aprildown/timer/app/timer/one/OneFragment.kt

Lines changed: 1 addition & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,11 @@ import android.content.Context
55
import android.content.pm.PackageManager
66
import android.os.Build
77
import android.os.Bundle
8-
import android.view.Menu
9-
import android.view.MenuInflater
10-
import android.view.MenuItem
118
import android.view.View
12-
import android.widget.Toast
139
import androidx.activity.result.contract.ActivityResultContracts
14-
import androidx.core.content.edit
15-
import androidx.core.view.MenuItemCompat
16-
import androidx.core.view.MenuProvider
1710
import androidx.core.view.isVisible
1811
import com.github.deweyreed.tools.anko.dp
1912
import com.github.deweyreed.tools.anko.snackbar
20-
import com.github.deweyreed.tools.anko.toast
2113
import com.github.deweyreed.tools.arch.observeEvent
2214
import com.github.deweyreed.tools.arch.observeNonNull
2315
import com.github.deweyreed.tools.helper.hasPermissions
@@ -31,7 +23,6 @@ import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneTimeSize
3123
import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingStep
3224
import xyz.aprildown.timer.app.base.data.PreferenceData.oneOneUsingTimingBar
3325
import xyz.aprildown.timer.app.base.data.PreferenceData.timePanels
34-
import xyz.aprildown.timer.app.base.utils.ScreenWakeLock
3526
import xyz.aprildown.timer.app.base.utils.produceTime
3627
import xyz.aprildown.timer.app.timer.one.databinding.FragmentOneBinding
3728
import xyz.aprildown.timer.app.timer.one.layout.TweakTimeLayout
@@ -42,7 +33,6 @@ import xyz.aprildown.timer.domain.entities.StepEntity
4233
import xyz.aprildown.timer.presentation.stream.TimerIndex
4334
import xyz.aprildown.timer.presentation.stream.getNiceLoopString
4435
import xyz.aprildown.timer.presentation.stream.getStep
45-
import xyz.aprildown.tools.helper.safeSharedPreference
4636
import xyz.aprildown.timer.app.base.R as RBase
4737

4838
@AndroidEntryPoint
@@ -55,10 +45,9 @@ class OneFragment :
5545
) {}
5646

5747
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
58-
val context = view.context
48+
super.onViewCreated(view, savedInstanceState)
5949
val binding = FragmentOneBinding.bind(view)
6050
setUpViews(binding)
61-
setUpMenu(context)
6251
applySettings(binding)
6352
setUpObservers(binding)
6453
}
@@ -226,96 +215,6 @@ class OneFragment :
226215
}.show(context, view)
227216
}
228217

229-
private fun setUpMenu(context: Context) {
230-
val sharedPreferences = context.safeSharedPreference
231-
activity?.addMenuProvider(
232-
object : MenuProvider {
233-
private val id = View.generateViewId()
234-
private var toast: Toast? = null
235-
236-
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
237-
val menuItem =
238-
menu.add(0, id, 0, RBase.string.pref_screen_title)
239-
MenuItemCompat.setContentDescription(
240-
menuItem,
241-
context.getString(RBase.string.pref_screen_title)
242-
)
243-
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
244-
menuItem.updateState()
245-
}
246-
247-
private fun MenuItem.updateState() {
248-
when (
249-
sharedPreferences.getString(
250-
PreferenceData.KEY_SCREEN,
251-
context.getString(RBase.string.pref_screen_value_default)
252-
)
253-
) {
254-
context.getString(RBase.string.pref_screen_value_keep) -> {
255-
setIcon(RBase.drawable.settings_brightness_keep)
256-
setTitle(RBase.string.pref_screen_title_on)
257-
}
258-
context.getString(RBase.string.pref_screen_value_dim) -> {
259-
setIcon(RBase.drawable.settings_brightness_dim)
260-
setTitle(RBase.string.pref_screen_title_dim)
261-
}
262-
else -> {
263-
setIcon(RBase.drawable.settings_brightness)
264-
setTitle(RBase.string.pref_screen_title_default)
265-
}
266-
}
267-
}
268-
269-
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
270-
if (menuItem.itemId != id) return false
271-
toast?.cancel()
272-
when (
273-
context.safeSharedPreference.getString(
274-
PreferenceData.KEY_SCREEN,
275-
context.getString(RBase.string.pref_screen_value_default)
276-
)
277-
) {
278-
context.getString(RBase.string.pref_screen_value_keep) -> {
279-
sharedPreferences.edit {
280-
putString(
281-
PreferenceData.KEY_SCREEN,
282-
context.getString(RBase.string.pref_screen_value_dim)
283-
)
284-
}
285-
toast = context.toast(RBase.string.pref_screen_title_dim)
286-
}
287-
context.getString(RBase.string.pref_screen_value_dim) -> {
288-
sharedPreferences.edit {
289-
putString(
290-
PreferenceData.KEY_SCREEN,
291-
context.getString(RBase.string.pref_screen_value_default)
292-
)
293-
}
294-
toast = context.toast(RBase.string.pref_screen_title_default)
295-
}
296-
else -> {
297-
sharedPreferences.edit {
298-
putString(
299-
PreferenceData.KEY_SCREEN,
300-
context.getString(RBase.string.pref_screen_value_keep)
301-
)
302-
}
303-
toast = context.toast(RBase.string.pref_screen_title_on)
304-
}
305-
}
306-
ScreenWakeLock.releaseScreenLock()
307-
ScreenWakeLock.acquireScreenWakeLock(
308-
context = context,
309-
screenTiming = getString(RBase.string.pref_screen_timing_value_timer)
310-
)
311-
menuItem.updateState()
312-
return true
313-
}
314-
},
315-
viewLifecycleOwner
316-
)
317-
}
318-
319218
private fun applySettings(binding: FragmentOneBinding) {
320219
val context = binding.root.context
321220

app-timer-run/src/main/java/xyz/aprildown/timer/app/timer/run/MachineService.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,10 @@ class MachineService :
217217

218218
override fun cleanUpWorkArea() {
219219
ServiceWakeLock.releaseCpuLock()
220-
ScreenWakeLock.releaseScreenLock()
220+
ScreenWakeLock.releaseScreenLock(
221+
context = this,
222+
screenTiming = getString(RBase.string.pref_screen_timing_value_service),
223+
)
221224
phoneCallReceiver?.unregister()
222225
phoneCallReceiver = null
223226
phoneCallPausedTimerIds = null

0 commit comments

Comments
 (0)