Skip to content

Commit 542cac7

Browse files
t895thestinger
authored andcommitted
Settings dialog fixes
Shrink material switch and always show scrollbar In order to shrink the switch and retain the ability to press the negative space between a label and a switch to toggle, I had to pass touch events to the switch from its container.
1 parent 36a99db commit 542cac7

3 files changed

Lines changed: 70 additions & 23 deletions

File tree

app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package app.grapheneos.camera.ui
33
import android.Manifest
44
import android.animation.ArgbEvaluator
55
import android.animation.ValueAnimator
6+
import android.annotation.SuppressLint
67
import android.app.Dialog
78
import android.content.Context
89
import android.content.pm.PackageManager
@@ -48,6 +49,7 @@ import com.google.android.material.radiobutton.MaterialRadioButton
4849
import java.util.Collections
4950
import kotlin.math.max
5051

52+
@SuppressLint("ClickableViewAccessibility")
5153
class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
5254
Dialog(themedContext) {
5355
val camConfig = mActivity.camConfig
@@ -254,8 +256,13 @@ class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
254256
}
255257

256258
selfIlluminationToggle = binding.selfIlluminationSwitch
257-
selfIlluminationToggle.setOnClickListener {
258-
camConfig.selfIlluminate = selfIlluminationToggle.isChecked
259+
selfIlluminationToggle.setOnCheckedChangeListener { _, isChecked ->
260+
camConfig.selfIlluminate = isChecked
261+
}
262+
binding.selfIlluminationSwitchContainer.setOnTouchListener { _, event ->
263+
event.setLocation(0f, 0f)
264+
selfIlluminationToggle.dispatchTouchEvent(event)
265+
true
259266
}
260267

261268
focusTimeoutSpinner = binding.focusTimeoutSpinner
@@ -329,7 +336,7 @@ class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
329336
timerSetting = binding.timerSetting
330337

331338
includeAudioToggle = binding.includeAudioSwitch
332-
includeAudioToggle.setOnClickListener {
339+
includeAudioToggle.setOnCheckedChangeListener { _, _ ->
333340
if (mActivity.videoCapturer.isRecording) {
334341
if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.RECORD_AUDIO)
335342
!= PackageManager.PERMISSION_GRANTED) {
@@ -339,13 +346,13 @@ class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
339346

340347
// Ensure the option is visually off
341348
includeAudioToggle.isChecked = false
342-
return@setOnClickListener
349+
return@setOnCheckedChangeListener
343350
}
344351

345352
if (!mActivity.videoCapturer.includeAudio) {
346353
mActivity.showMessage("Enabling audio while recording is not currently supported when it was disabled at the start")
347354
includeAudioToggle.isChecked = false
348-
return@setOnClickListener
355+
return@setOnCheckedChangeListener
349356
}
350357

351358
if (includeAudioToggle.isChecked) {
@@ -363,14 +370,22 @@ class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
363370

364371
camConfig.includeAudio = includeAudioToggle.isChecked
365372
}
373+
binding.includeAudioSwitchContainer.setOnTouchListener { _, event ->
374+
event.setLocation(0f, 0f)
375+
includeAudioToggle.dispatchTouchEvent(event)
376+
true
377+
}
366378

367379
enableEISToggle = binding.enableEisSwitch
368-
enableEISToggle.setOnClickListener {
369-
camConfig.enableEIS = enableEISToggle.isChecked
370-
}
371-
enableEISToggle.setOnCheckedChangeListener { _, _ ->
380+
enableEISToggle.setOnCheckedChangeListener { _, isChecked ->
381+
camConfig.enableEIS = isChecked
372382
camConfig.startCamera(true)
373383
}
384+
binding.enableEisSwitchContainer.setOnTouchListener { _, event ->
385+
event.setLocation(0f, 0f)
386+
enableEISToggle.dispatchTouchEvent(event)
387+
true
388+
}
374389

375390
window?.attributes?.layoutInDisplayCutoutMode =
376391
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

app/src/main/res/layout/settings.xml

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@
137137
<ScrollView
138138
android:id="@+id/settings_scrollview"
139139
android:layout_height="wrap_content"
140-
android:layout_width="wrap_content">
140+
android:layout_width="wrap_content"
141+
android:fadeScrollbars="false">
141142

142143
<LinearLayout
143144
android:id="@+id/settings_scrollview_content"
@@ -161,12 +162,21 @@
161162
android:layout_gravity="center_vertical"
162163
android:text="@string/self_illumination"/>
163164

164-
<com.google.android.material.materialswitch.MaterialSwitch
165-
android:id="@+id/self_illumination_switch"
165+
<LinearLayout
166+
android:id="@+id/self_illumination_switch_container"
166167
android:layout_width="match_parent"
167168
android:layout_height="wrap_content"
168-
android:checked="false"
169-
android:layout_gravity="end"/>
169+
android:gravity="end|center_vertical">
170+
171+
<com.google.android.material.materialswitch.MaterialSwitch
172+
android:id="@+id/self_illumination_switch"
173+
android:layout_width="wrap_content"
174+
android:layout_height="@dimen/settings_dialog_switch_height"
175+
android:scaleX="@integer/settings_dialog_switch_scale"
176+
android:scaleY="@integer/settings_dialog_switch_scale"
177+
android:checked="false"/>
178+
179+
</LinearLayout>
170180

171181
</LinearLayout>
172182

@@ -219,12 +229,21 @@
219229
android:layout_gravity="center_vertical"
220230
android:text="@string/include_audio"/>
221231

222-
<com.google.android.material.materialswitch.MaterialSwitch
223-
android:id="@+id/include_audio_switch"
232+
<LinearLayout
233+
android:id="@+id/include_audio_switch_container"
224234
android:layout_width="match_parent"
225235
android:layout_height="wrap_content"
226-
android:checked="true"
227-
android:layout_gravity="end"/>
236+
android:gravity="end|center_vertical">
237+
238+
<com.google.android.material.materialswitch.MaterialSwitch
239+
android:id="@+id/include_audio_switch"
240+
android:layout_width="wrap_content"
241+
android:layout_height="@dimen/settings_dialog_switch_height"
242+
android:scaleX="@integer/settings_dialog_switch_scale"
243+
android:scaleY="@integer/settings_dialog_switch_scale"
244+
android:checked="true"/>
245+
246+
</LinearLayout>
228247

229248
</LinearLayout>
230249

@@ -243,12 +262,21 @@
243262
android:layout_gravity="center_vertical"
244263
android:text="@string/enable_eis"/>
245264

246-
<com.google.android.material.materialswitch.MaterialSwitch
247-
android:id="@+id/enable_eis_switch"
265+
<LinearLayout
266+
android:id="@+id/enable_eis_switch_container"
248267
android:layout_width="match_parent"
249268
android:layout_height="wrap_content"
250-
android:checked="true"
251-
android:layout_gravity="end"/>
269+
android:gravity="end|center_vertical">
270+
271+
<com.google.android.material.materialswitch.MaterialSwitch
272+
android:id="@+id/enable_eis_switch"
273+
android:layout_width="wrap_content"
274+
android:layout_height="@dimen/settings_dialog_switch_height"
275+
android:scaleX="@integer/settings_dialog_switch_scale"
276+
android:scaleY="@integer/settings_dialog_switch_scale"
277+
android:checked="true"/>
278+
279+
</LinearLayout>
252280

253281
</LinearLayout>
254282

app/src/main/res/values/dimens.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414
<dimen name="settings_dialog_menu_item_horizontal">4dp</dimen>
1515
<dimen name="settings_dialog_menu_item_vertical">8dp</dimen>
1616

17-
<dimen name="settings_dialog_menu_item_height">48dp</dimen>
17+
<dimen name="settings_dialog_menu_item_height">44dp</dimen>
1818

1919
<dimen name="settings_dialog_horizontal_margin">12dp</dimen>
2020

2121
<dimen name="action_bar_height">60dp</dimen>
22+
23+
<dimen name="settings_dialog_switch_height">24dp</dimen>
24+
25+
<item name="settings_dialog_switch_scale" format="float" type="integer">0.8</item>
2226
</resources>

0 commit comments

Comments
 (0)