@@ -5,11 +5,19 @@ import android.content.Context
55import android.content.pm.PackageManager
66import android.os.Build
77import android.os.Bundle
8+ import android.view.Menu
9+ import android.view.MenuInflater
10+ import android.view.MenuItem
811import android.view.View
12+ import android.widget.Toast
913import androidx.activity.result.contract.ActivityResultContracts
14+ import androidx.core.content.edit
15+ import androidx.core.view.MenuItemCompat
16+ import androidx.core.view.MenuProvider
1017import androidx.core.view.isVisible
1118import com.github.deweyreed.tools.anko.dp
1219import com.github.deweyreed.tools.anko.snackbar
20+ import com.github.deweyreed.tools.anko.toast
1321import com.github.deweyreed.tools.arch.observeEvent
1422import com.github.deweyreed.tools.arch.observeNonNull
1523import com.github.deweyreed.tools.helper.hasPermissions
@@ -33,6 +41,7 @@ import xyz.aprildown.timer.domain.entities.StepEntity
3341import xyz.aprildown.timer.presentation.stream.TimerIndex
3442import xyz.aprildown.timer.presentation.stream.getNiceLoopString
3543import xyz.aprildown.timer.presentation.stream.getStep
44+ import xyz.aprildown.tools.helper.safeSharedPreference
3645import xyz.aprildown.timer.app.base.R as RBase
3746
3847@AndroidEntryPoint
@@ -45,8 +54,10 @@ class OneFragment :
4554 ) {}
4655
4756 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
57+ val context = view.context
4858 val binding = FragmentOneBinding .bind(view)
4959 setUpViews(binding)
60+ setUpMenu(context)
5061 applySettings(binding)
5162 setUpObservers(binding)
5263 }
@@ -214,6 +225,91 @@ class OneFragment :
214225 }.show(context, view)
215226 }
216227
228+ private fun setUpMenu (context : Context ) {
229+ val sharedPreferences = context.safeSharedPreference
230+ activity?.addMenuProvider(
231+ object : MenuProvider {
232+ private val id = View .generateViewId()
233+ private var toast: Toast ? = null
234+
235+ override fun onCreateMenu (menu : Menu , menuInflater : MenuInflater ) {
236+ val menuItem =
237+ menu.add(0 , id, 0 , RBase .string.pref_screen_title)
238+ MenuItemCompat .setContentDescription(
239+ menuItem,
240+ context.getString(RBase .string.pref_screen_title)
241+ )
242+ menuItem.setShowAsAction(MenuItem .SHOW_AS_ACTION_IF_ROOM )
243+ menuItem.updateState()
244+ }
245+
246+ private fun MenuItem.updateState () {
247+ when (
248+ sharedPreferences.getString(
249+ PreferenceData .KEY_SCREEN ,
250+ context.getString(RBase .string.pref_screen_value_default)
251+ )
252+ ) {
253+ context.getString(RBase .string.pref_screen_value_keep) -> {
254+ setIcon(RBase .drawable.settings_brightness_keep)
255+ setTitle(RBase .string.pref_screen_title_on)
256+ }
257+ context.getString(RBase .string.pref_screen_value_dim) -> {
258+ setIcon(RBase .drawable.settings_brightness_dim)
259+ setTitle(RBase .string.pref_screen_title_dim)
260+ }
261+ else -> {
262+ setIcon(RBase .drawable.settings_brightness)
263+ setTitle(RBase .string.pref_screen_title_default)
264+ }
265+ }
266+ }
267+
268+ override fun onMenuItemSelected (menuItem : MenuItem ): Boolean {
269+ if (menuItem.itemId != id) return false
270+ toast?.cancel()
271+ when (
272+ context.safeSharedPreference.getString(
273+ PreferenceData .KEY_SCREEN ,
274+ context.getString(RBase .string.pref_screen_value_default)
275+ )
276+ ) {
277+ context.getString(RBase .string.pref_screen_value_keep) -> {
278+ sharedPreferences.edit {
279+ putString(
280+ PreferenceData .KEY_SCREEN ,
281+ context.getString(RBase .string.pref_screen_value_dim)
282+ )
283+ }
284+ toast = context.toast(RBase .string.pref_screen_title_dim)
285+ }
286+ context.getString(RBase .string.pref_screen_value_dim) -> {
287+ sharedPreferences.edit {
288+ putString(
289+ PreferenceData .KEY_SCREEN ,
290+ context.getString(RBase .string.pref_screen_value_default)
291+ )
292+ }
293+ toast = context.toast(RBase .string.pref_screen_title_default)
294+ }
295+ else -> {
296+ sharedPreferences.edit {
297+ putString(
298+ PreferenceData .KEY_SCREEN ,
299+ context.getString(RBase .string.pref_screen_value_keep)
300+ )
301+ }
302+ toast = context.toast(RBase .string.pref_screen_title_on)
303+ }
304+ }
305+ menuItem.updateState()
306+ return true
307+ }
308+ },
309+ viewLifecycleOwner
310+ )
311+ }
312+
217313 private fun applySettings (binding : FragmentOneBinding ) {
218314 val context = binding.root.context
219315
0 commit comments