Android/overlay-haptics: Prefix 'overlay' to added xml resources

This commit is contained in:
codokie
2026-04-10 19:37:39 +03:00
parent 14413ee074
commit 5d39ea1842
5 changed files with 77 additions and 72 deletions

View File

@@ -34,7 +34,7 @@ import com.google.android.material.slider.Slider
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.ActivityEmulationBinding
import org.dolphinemu.dolphinemu.databinding.DialogHapticsAdjustBinding
import org.dolphinemu.dolphinemu.databinding.DialogOverlayHapticsBinding
import org.dolphinemu.dolphinemu.databinding.DialogInputAdjustBinding
import org.dolphinemu.dolphinemu.databinding.DialogNfcFiguresManagerBinding
import org.dolphinemu.dolphinemu.features.infinitybase.InfinityConfig
@@ -452,7 +452,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
if (!DolphinVibratorManagerFactory.getSystemVibratorManager().getDefaultVibrator()
.hasVibrator()
) {
menu.findItem(R.id.menu_emulation_haptics).isVisible = false
menu.findItem(R.id.menu_emulation_touch_haptics).isVisible = false
}
popup.setOnMenuItemClickListener { item: MenuItem -> onOptionsItemSelected(item) }
popup.show()
@@ -529,7 +529,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
MENU_ACTION_SKYLANDERS -> showSkylanderPortalSettings()
MENU_ACTION_INFINITY_BASE -> showInfinityBaseSettings()
MENU_ACTION_EXIT -> emulationFragment!!.stopEmulation()
MENU_ACTION_ADJUST_HAPTICS -> adjustHaptics()
MENU_ACTION_ADJUST_OVERLAY_HAPTICS -> adjustOverlayHaptics()
}
}
@@ -711,28 +711,34 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
.show()
}
private fun adjustHaptics() {
val dialogBinding = DialogHapticsAdjustBinding.inflate(layoutInflater)
private fun adjustOverlayHaptics() {
val dialogBinding = DialogOverlayHapticsBinding.inflate(layoutInflater)
val hapticsProvider = HapticsProvider()
dialogBinding.apply {
val checkboxes =
listOf(hapticsOnPressCheckbox, hapticsOnReleaseCheckbox, hapticsJoystickCheckbox)
listOf(
overlayHapticsOnPressCheckbox,
overlayHapticsOnReleaseCheckbox,
overlayHapticsJoystickCheckbox
)
val toggleVibrationSettings = {
checkboxes.any { it.isChecked }.let { enabled ->
hapticsUseVibratorDirectlyName.isEnabled = enabled
hapticsUseVibratorDirectlySwitch.isEnabled = enabled
(hapticsUseVibratorDirectlySwitch.isChecked && enabled).let { enabled ->
hapticsIntensityName.isEnabled = enabled
hapticsIntensitySlider.isEnabled = enabled
hapticsIntensityValue.isEnabled = enabled
overlayHapticsUseVibratorDirectlyName.isEnabled = enabled
overlayHapticsUseVibratorDirectlySwitch.isEnabled = enabled
(overlayHapticsUseVibratorDirectlySwitch.isChecked && enabled).let { enabled ->
overlayHapticsIntensityName.isEnabled = enabled
overlayHapticsIntensitySlider.isEnabled = enabled
overlayHapticsIntensityValue.isEnabled = enabled
}
}
}
hapticsOnPressCheckbox.isChecked = BooleanSetting.MAIN_OVERLAY_HAPTICS_ON_PRESS.boolean
hapticsOnReleaseCheckbox.isChecked =
overlayHapticsOnPressCheckbox.isChecked =
BooleanSetting.MAIN_OVERLAY_HAPTICS_ON_PRESS.boolean
overlayHapticsOnReleaseCheckbox.isChecked =
BooleanSetting.MAIN_OVERLAY_HAPTICS_ON_RELEASE.boolean
hapticsJoystickCheckbox.isChecked = BooleanSetting.MAIN_OVERLAY_HAPTICS_JOYSTICK.boolean
hapticsUseVibratorDirectlySwitch.isChecked =
overlayHapticsJoystickCheckbox.isChecked =
BooleanSetting.MAIN_OVERLAY_HAPTICS_JOYSTICK.boolean
overlayHapticsUseVibratorDirectlySwitch.isChecked =
BooleanSetting.MAIN_OVERLAY_HAPTICS_USE_VIBRATOR_DIRECTLY.boolean
toggleVibrationSettings()
checkboxes.forEach { checkbox ->
@@ -740,12 +746,12 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
toggleVibrationSettings()
}
}
hapticsUseVibratorDirectlySwitch.setOnCheckedChangeListener { _, _ ->
overlayHapticsUseVibratorDirectlySwitch.setOnCheckedChangeListener { _, _ ->
toggleVibrationSettings()
}
hapticsIntensitySlider.apply {
overlayHapticsIntensitySlider.apply {
val setValueText = { value: Float ->
hapticsIntensityValue.text =
overlayHapticsIntensityValue.text =
getString(R.string.slider_setting_value, value * 100f, '%')
}
stepSize = 0.1f
@@ -762,19 +768,19 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
.setView(dialogBinding.root)
.setPositiveButton(R.string.ok) { _: DialogInterface?, _: Int ->
BooleanSetting.MAIN_OVERLAY_HAPTICS_ON_PRESS.setBoolean(
settings, dialogBinding.hapticsOnPressCheckbox.isChecked
settings, dialogBinding.overlayHapticsOnPressCheckbox.isChecked
)
BooleanSetting.MAIN_OVERLAY_HAPTICS_ON_RELEASE.setBoolean(
settings, dialogBinding.hapticsOnReleaseCheckbox.isChecked
settings, dialogBinding.overlayHapticsOnReleaseCheckbox.isChecked
)
BooleanSetting.MAIN_OVERLAY_HAPTICS_JOYSTICK.setBoolean(
settings, dialogBinding.hapticsJoystickCheckbox.isChecked
settings, dialogBinding.overlayHapticsJoystickCheckbox.isChecked
)
BooleanSetting.MAIN_OVERLAY_HAPTICS_USE_VIBRATOR_DIRECTLY.setBoolean(
settings, dialogBinding.hapticsUseVibratorDirectlySwitch.isChecked
settings, dialogBinding.overlayHapticsUseVibratorDirectlySwitch.isChecked
)
FloatSetting.MAIN_OVERLAY_HAPTICS_SCALE.setFloat(
settings, dialogBinding.hapticsIntensitySlider.value
settings, dialogBinding.overlayHapticsIntensitySlider.value
)
}
.show()
@@ -1158,7 +1164,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
const val MENU_ACTION_SKYLANDERS = 36
const val MENU_ACTION_INFINITY_BASE = 37
const val MENU_ACTION_LATCHING_CONTROLS = 38
const val MENU_ACTION_ADJUST_HAPTICS = 39
const val MENU_ACTION_ADJUST_OVERLAY_HAPTICS = 39
init {
buttonsActionsMap.apply {
@@ -1172,7 +1178,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
append(R.id.menu_emulation_ir_recenter, MENU_SET_IR_RECENTER)
append(R.id.menu_emulation_set_ir_mode, MENU_SET_IR_MODE)
append(R.id.menu_emulation_choose_doubletap, MENU_ACTION_CHOOSE_DOUBLETAP)
append(R.id.menu_emulation_haptics, MENU_ACTION_ADJUST_HAPTICS)
append(R.id.menu_emulation_touch_haptics, MENU_ACTION_ADJUST_OVERLAY_HAPTICS)
}
}

View File

@@ -7,133 +7,132 @@
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/emulation_haptics"
android:id="@+id/overlay_haptics"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/spacing_large">
<TextView
android:id="@+id/emulation_haptics_text"
android:id="@+id/overlay_haptics_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_medlarge"
android:text="@string/emulation_haptics"
android:text="@string/emulation_touch_haptics"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
app:layout_constraintBottom_toTopOf="@id/haptics_on_release_checkbox"
app:layout_constraintBottom_toTopOf="@id/overlay_haptics_on_release_checkbox"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/haptics_on_press_checkbox"
android:id="@+id/overlay_haptics_on_press_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:minWidth="48dp"
android:text="@string/haptics_on_press"
android:text="@string/overlay_haptics_on_press"
android:textAppearance="?android:textAppearanceListItem"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/haptics_on_release_checkbox"
app:layout_constraintEnd_toStartOf="@+id/overlay_haptics_on_release_checkbox"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/haptics_on_release_checkbox" />
app:layout_constraintTop_toTopOf="@id/overlay_haptics_on_release_checkbox" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/haptics_on_release_checkbox"
android:id="@+id/overlay_haptics_on_release_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:minWidth="48dp"
android:text="@string/haptics_on_release"
android:text="@string/overlay_haptics_on_release"
android:textAppearance="?android:textAppearanceListItem"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/haptics_joystick_checkbox"
app:layout_constraintStart_toEndOf="@+id/haptics_on_press_checkbox"
app:layout_constraintTop_toBottomOf="@+id/emulation_haptics_text" />
app:layout_constraintEnd_toStartOf="@+id/overlay_haptics_joystick_checkbox"
app:layout_constraintStart_toEndOf="@+id/overlay_haptics_on_press_checkbox"
app:layout_constraintTop_toBottomOf="@+id/overlay_haptics_text" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/haptics_joystick_checkbox"
android:id="@+id/overlay_haptics_joystick_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:minWidth="48dp"
android:text="@string/haptics_joystick"
android:text="@string/overlay_haptics_joystick"
android:textAppearance="?android:textAppearanceListItem"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/haptics_on_release_checkbox"
app:layout_constraintTop_toTopOf="@id/haptics_on_release_checkbox" />
app:layout_constraintStart_toEndOf="@+id/overlay_haptics_on_release_checkbox"
app:layout_constraintTop_toTopOf="@id/overlay_haptics_on_release_checkbox" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/haptics_use_vibrator_directly"
android:id="@+id/overlay_haptics_use_vibrator_directly"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_small"
android:paddingHorizontal="24dp">
<TextView
android:id="@+id/haptics_use_vibrator_directly_name"
android:id="@+id/overlay_haptics_use_vibrator_directly_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_large"
android:text="@string/haptics_use_vibrator_directly"
android:text="@string/overlay_haptics_use_vibrator_directly"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="@+id/haptics_use_vibrator_directly_switch"
app:layout_constraintEnd_toStartOf="@+id/haptics_use_vibrator_directly_switch"
app:layout_constraintBottom_toBottomOf="@+id/overlay_haptics_use_vibrator_directly_switch"
app:layout_constraintEnd_toStartOf="@+id/overlay_haptics_use_vibrator_directly_switch"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/haptics_use_vibrator_directly_switch" />
app:layout_constraintTop_toTopOf="@+id/overlay_haptics_use_vibrator_directly_switch" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/haptics_use_vibrator_directly_switch"
android:id="@+id/overlay_haptics_use_vibrator_directly_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/haptics_use_vibrator_directly_name"
app:layout_constraintStart_toEndOf="@+id/overlay_haptics_use_vibrator_directly_name"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/haptics_intensity"
android:id="@+id/overlay_haptics_intensity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/spacing_small"
android:paddingHorizontal="24dp">
<TextView
android:id="@+id/haptics_intensity_name"
android:id="@+id/overlay_haptics_intensity_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/haptics_intensity"
android:text="@string/overlay_haptics_intensity"
android:textAlignment="viewStart"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/haptics_intensity_slider"
app:layout_constraintEnd_toStartOf="@+id/overlay_haptics_intensity_slider"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.slider.Slider
android:id="@+id/haptics_intensity_slider"
android:id="@+id/overlay_haptics_intensity_slider"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/spacing_medlarge"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/haptics_intensity_value"
app:layout_constraintStart_toEndOf="@id/haptics_intensity_name"
app:layout_constraintEnd_toStartOf="@id/overlay_haptics_intensity_value"
app:layout_constraintStart_toEndOf="@id/overlay_haptics_intensity_name"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/haptics_intensity_value"
android:id="@+id/overlay_haptics_intensity_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/haptics_intensity_slider"
app:layout_constraintStart_toEndOf="@+id/overlay_haptics_intensity_slider"
app:layout_constraintTop_toTopOf="parent"
tools:text="50%" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -28,8 +28,8 @@
android:title="@string/emulation_choose_controller"/>
<item
android:id="@+id/menu_emulation_haptics"
android:title="@string/emulation_haptics"/>
android:id="@+id/menu_emulation_touch_haptics"
android:title="@string/emulation_touch_haptics"/>
<item
android:id="@+id/menu_emulation_reset_overlay"

View File

@@ -30,8 +30,8 @@
android:title="@string/emulation_choose_controller"/>
<item
android:id="@+id/menu_emulation_haptics"
android:title="@string/emulation_haptics"/>
android:id="@+id/menu_emulation_touch_haptics"
android:title="@string/emulation_touch_haptics"/>
<item
android:id="@+id/menu_emulation_ir_group"

View File

@@ -636,7 +636,7 @@ It can efficiently compress both junk data and encrypted Wii data.
<string name="emulation_ir_mode">IR Mode</string>
<string name="emulation_ir_sensitivity">IR Sensitivity</string>
<string name="emulation_choose_doubletap">Double tap button</string>
<string name="emulation_haptics">Touch Haptics</string>
<string name="emulation_touch_haptics">Touch Haptics</string>
<!-- GC Adapter Menu-->
<string name="gc_adapter_rumble">Enable Vibration</string>
@@ -841,12 +841,12 @@ It can efficiently compress both junk data and encrypted Wii data.
<string name="ir_follow">Follow</string>
<string name="ir_drag">Drag</string>
<!-- Haptics -->
<string name="haptics_on_press">On Press</string>
<string name="haptics_on_release">On Release</string>
<string name="haptics_joystick">Joystick</string>
<string name="haptics_use_vibrator_directly">Use vibrator directly</string>
<string name="haptics_intensity">Intensity</string>
<!-- Overlay Haptics -->
<string name="overlay_haptics_on_press">On Press</string>
<string name="overlay_haptics_on_release">On Release</string>
<string name="overlay_haptics_joystick">Joystick</string>
<string name="overlay_haptics_use_vibrator_directly">Use vibrator directly</string>
<string name="overlay_haptics_intensity">Intensity</string>
<!-- Double Tap Buttons -->
<string name="double_tap_a">Button A</string>