Browse Source
[android] input over(lay)haul 1: Auto-hide input overlay setting (#493)
[android] input over(lay)haul 1: Auto-hide input overlay setting (#493)
This is step 1 of https://git.eden-emu.dev/eden-emu/eden/issues/47 which was the easiest to implement. How was this not implemented on yuzu already? Would prefer if more people tested this than the usual amount. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/493 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Co-authored-by: nyx-ynx <contact@nyxynx.dev> Co-committed-by: nyx-ynx <contact@nyxynx.dev>pull/2606/head
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
14 changed files with 409 additions and 6 deletions
-
35src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
-
2src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt
-
3src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt
-
1src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
-
17src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
-
41src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SpinBoxSetting.kt
-
16src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
-
82src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsDialogFragment.kt
-
16src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
-
44src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/SpinBoxViewHolder.kt
-
76src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
-
9src/android/app/src/main/jni/android_settings.h
-
55src/android/app/src/main/res/layout/dialog_spinbox.xml
-
18src/android/app/src/main/res/values/strings.xml
@ -0,0 +1,41 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-3.0-or-later |
||||
|
|
||||
|
package org.yuzu.yuzu_emu.features.settings.model.view |
||||
|
|
||||
|
import androidx.annotation.StringRes |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.AbstractByteSetting |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.AbstractFloatSetting |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.AbstractIntSetting |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.AbstractSetting |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.AbstractShortSetting |
||||
|
|
||||
|
class SpinBoxSetting( |
||||
|
setting: AbstractSetting, |
||||
|
@StringRes titleId: Int = 0, |
||||
|
titleString: String = "", |
||||
|
@StringRes descriptionId: Int = 0, |
||||
|
descriptionString: String = "", |
||||
|
val valueHint: Int, |
||||
|
val min: Int, |
||||
|
val max: Int |
||||
|
) : SettingsItem(setting, titleId, titleString, descriptionId, descriptionString) { |
||||
|
override val type = TYPE_SPINBOX |
||||
|
|
||||
|
fun getSelectedValue(needsGlobal: Boolean = false) = |
||||
|
when (setting) { |
||||
|
is AbstractByteSetting -> setting.getByte(needsGlobal).toInt() |
||||
|
is AbstractShortSetting -> setting.getShort(needsGlobal).toInt() |
||||
|
is AbstractIntSetting -> setting.getInt(needsGlobal) |
||||
|
is AbstractFloatSetting -> setting.getFloat(needsGlobal).toInt() |
||||
|
else -> 0 |
||||
|
} |
||||
|
|
||||
|
fun setSelectedValue(value: Int) = |
||||
|
when (setting) { |
||||
|
is AbstractByteSetting -> setting.setByte(value.toByte()) |
||||
|
is AbstractShortSetting -> setting.setShort(value.toShort()) |
||||
|
is AbstractFloatSetting -> setting.setFloat(value.toFloat()) |
||||
|
else -> (setting as AbstractIntSetting).setInt(value) |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,44 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-3.0-or-later |
||||
|
|
||||
|
package org.yuzu.yuzu_emu.features.settings.ui.viewholder |
||||
|
|
||||
|
import android.view.View |
||||
|
import org.yuzu.yuzu_emu.R |
||||
|
import org.yuzu.yuzu_emu.databinding.ListItemSettingBinding |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem |
||||
|
import org.yuzu.yuzu_emu.features.settings.model.view.SpinBoxSetting |
||||
|
import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter |
||||
|
import org.yuzu.yuzu_emu.utils.ViewUtils.setVisible |
||||
|
|
||||
|
class SpinBoxViewHolder(val binding: ListItemSettingBinding, adapter: SettingsAdapter) : |
||||
|
SettingViewHolder(binding.root, adapter) { |
||||
|
private lateinit var setting: SpinBoxSetting |
||||
|
|
||||
|
override fun bind(item: SettingsItem) { |
||||
|
setting = item as SpinBoxSetting |
||||
|
binding.textSettingName.text = setting.title |
||||
|
binding.textSettingDescription.setVisible(item.description.isNotEmpty()) |
||||
|
binding.textSettingDescription.text = setting.description |
||||
|
binding.textSettingValue.setVisible(true) |
||||
|
binding.textSettingValue.text = setting.getSelectedValue().toString() |
||||
|
|
||||
|
binding.buttonClear.setVisible(setting.clearable) |
||||
|
binding.buttonClear.setOnClickListener { |
||||
|
adapter.onClearClick(setting, bindingAdapterPosition) |
||||
|
} |
||||
|
|
||||
|
setStyle(setting.isEditable, binding) |
||||
|
} |
||||
|
override fun onClick(clicked: View) { |
||||
|
if (setting.isEditable) { |
||||
|
adapter.onSpinBoxClick(setting, bindingAdapterPosition) |
||||
|
} |
||||
|
} |
||||
|
override fun onLongClick(clicked: View): Boolean { |
||||
|
if (setting.isEditable) { |
||||
|
return adapter.onLongClick(setting, bindingAdapterPosition) |
||||
|
} |
||||
|
return false |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
xmlns:tools="http://schemas.android.com/tools" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:orientation="vertical"> |
||||
|
|
||||
|
<LinearLayout |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_centerVertical="true" |
||||
|
android:layout_marginTop="32dp" |
||||
|
android:orientation="horizontal" |
||||
|
android:paddingLeft="@dimen/spacing_large" |
||||
|
android:paddingRight="@dimen/spacing_large"> |
||||
|
|
||||
|
<com.google.android.material.button.MaterialButton |
||||
|
android:id="@+id/button_decrement" |
||||
|
style="@style/Widget.Material3.Button.IconButton.Filled" |
||||
|
android:layout_width="wrap_content" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:contentDescription="@string/decrement" |
||||
|
android:text="-" /> |
||||
|
|
||||
|
<com.google.android.material.textfield.TextInputLayout |
||||
|
android:id="@+id/text_input_layout" |
||||
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox" |
||||
|
android:layout_width="0dp" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:layout_marginLeft="@dimen/spacing_medlarge" |
||||
|
android:layout_marginRight="@dimen/spacing_medlarge" |
||||
|
android:layout_weight="1" |
||||
|
android:hint="Value"> |
||||
|
|
||||
|
<com.google.android.material.textfield.TextInputEditText |
||||
|
android:id="@+id/edit_value" |
||||
|
android:layout_width="match_parent" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:inputType="number" |
||||
|
android:textAlignment="textStart" |
||||
|
tools:text="0" /> |
||||
|
|
||||
|
</com.google.android.material.textfield.TextInputLayout> |
||||
|
|
||||
|
<com.google.android.material.button.MaterialButton |
||||
|
android:id="@+id/button_increment" |
||||
|
style="@style/Widget.Material3.Button.IconButton.Filled" |
||||
|
android:layout_width="wrap_content" |
||||
|
android:layout_height="wrap_content" |
||||
|
android:contentDescription="@string/increment" |
||||
|
android:text="+" /> |
||||
|
|
||||
|
</LinearLayout> |
||||
|
|
||||
|
</RelativeLayout> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue