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