Skip to content

Commit b87b0ae

Browse files
committed
Add quick setting to toggle screen brightness
1 parent 7d50e5a commit b87b0ae

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24">
6+
<path
7+
android:fillColor="@android:color/white"
8+
android:pathData="M20 15.31l1.9-1.9c0.78-0.78 0.78-2.05 0-2.83L20 8.69V6c0-1.1-0.9-2-2-2h-2.69l-1.9-1.9c-0.78-0.78-2.05-0.78-2.83 0L8.69 4H6C4.9 4 4 4.9 4 6v2.69l-1.9 1.9c-0.78 0.78-0.78 2.05 0 2.83l1.9 1.9V18c0 1.1 0.9 2 2 2h2.69l1.9 1.9c0.78 0.78 2.05 0.78 2.83 0l1.9-1.9H18c1.1 0 2-0.9 2-2v-2.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z" />
9+
</vector>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24">
6+
<path
7+
android:fillColor="@android:color/white"
8+
android:pathData="M20 8.69V6c0-1.1-0.9-2-2-2h-2.69l-1.9-1.9c-0.78-0.78-2.05-0.78-2.83 0L8.69 4H6C4.9 4 4 4.9 4 6v2.69l-1.9 1.9c-0.78 0.78-0.78 2.05 0 2.83l1.9 1.9V18c0 1.1 0.9 2 2 2h2.69l1.9 1.9c0.78 0.78 2.05 0.78 2.83 0l1.9-1.9H18c1.1 0 2-0.9 2-2v-2.69l1.9-1.9c0.78-0.78 0.78-2.05 0-2.83L20 8.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm0-10c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z" />
9+
</vector>

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

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ 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
811
import android.view.View
12+
import android.widget.Toast
913
import androidx.activity.result.contract.ActivityResultContracts
14+
import androidx.core.content.edit
15+
import androidx.core.view.MenuItemCompat
16+
import androidx.core.view.MenuProvider
1017
import androidx.core.view.isVisible
1118
import com.github.deweyreed.tools.anko.dp
1219
import com.github.deweyreed.tools.anko.snackbar
20+
import com.github.deweyreed.tools.anko.toast
1321
import com.github.deweyreed.tools.arch.observeEvent
1422
import com.github.deweyreed.tools.arch.observeNonNull
1523
import com.github.deweyreed.tools.helper.hasPermissions
@@ -33,6 +41,7 @@ import xyz.aprildown.timer.domain.entities.StepEntity
3341
import xyz.aprildown.timer.presentation.stream.TimerIndex
3442
import xyz.aprildown.timer.presentation.stream.getNiceLoopString
3543
import xyz.aprildown.timer.presentation.stream.getStep
44+
import xyz.aprildown.tools.helper.safeSharedPreference
3645
import 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

Comments
 (0)