Skip to content

Commit 2a473ce

Browse files
Rework on Mapper of Physical Controllers (Now it's more user friendly)
1 parent 1dbaf99 commit 2a473ce

File tree

7 files changed

+92
-163
lines changed

7 files changed

+92
-163
lines changed

app/src/main/java/com/micewine/emu/activities/ControllerMapper.kt

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class ControllerMapper : AppCompatActivity() {
5353
selectedControllerPresetSpinner?.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getControllerPresetsName(context))
5454
selectedControllerPresetSpinner?.setSelection(getControllerPresetsName(context).indexOf(name))
5555

56-
fragmentLoader(ControllerMapperFragment(), true)
56+
fragmentLoader(ControllerMapperFragment())
5757
}
5858
}
5959
}
@@ -67,7 +67,7 @@ class ControllerMapper : AppCompatActivity() {
6767
binding = ActivityControllerMapperBinding.inflate(layoutInflater)
6868
setContentView(binding!!.root)
6969

70-
fragmentLoader(ControllerMapperFragment(), true)
70+
fragmentLoader(ControllerMapperFragment())
7171

7272
findViewById<Toolbar>(R.id.controllerMapperToolbar).title = getString(R.string.controller_mapper_title)
7373

@@ -147,7 +147,7 @@ class ControllerMapper : AppCompatActivity() {
147147
putString(SELECTED_CONTROLLER_PRESET_KEY, parent?.selectedItem.toString())
148148
apply()
149149
}
150-
fragmentLoader(ControllerMapperFragment(), true)
150+
fragmentLoader(ControllerMapperFragment())
151151
}
152152

153153
override fun onNothingSelected(parent: AdapterView<*>?) {
@@ -176,16 +176,11 @@ class ControllerMapper : AppCompatActivity() {
176176
return super.onOptionsItemSelected(item)
177177
}
178178

179-
private fun fragmentLoader(fragment: Fragment, appInit: Boolean) {
180-
val fragmentTransaction = supportFragmentManager.beginTransaction()
181-
182-
fragmentTransaction.replace(R.id.controller_mapper_content, fragment)
183-
184-
if (!appInit) {
185-
fragmentTransaction.addToBackStack(null)
179+
private fun fragmentLoader(fragment: Fragment) {
180+
supportFragmentManager.beginTransaction().apply {
181+
replace(R.id.controller_mapper_content, fragment)
182+
commit()
186183
}
187-
188-
fragmentTransaction.commit()
189184
}
190185

191186
override fun onDestroy() {
@@ -248,11 +243,7 @@ class ControllerMapper : AppCompatActivity() {
248243
)
249244

250245
fun putDeadZone(context: Context, name: String, value: Int) {
251-
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
252-
val editor = preferences.edit()
253-
254246
val currentList = loadControllerPresets(context)
255-
256247
var index = currentList.indexOfFirst { it[0] == name }
257248

258249
if (index == -1) {
@@ -263,11 +254,14 @@ class ControllerMapper : AppCompatActivity() {
263254

264255
currentList[index][mappingMap[DEAD_ZONE]!!] = "$value"
265256

266-
val gson = Gson()
267-
val json = gson.toJson(currentList)
257+
val json = Gson().toJson(currentList)
268258

269-
editor.putString("controllerPresetList", json)
270-
editor.apply()
259+
PreferenceManager.getDefaultSharedPreferences(context).apply {
260+
edit().apply {
261+
putString("controllerPresetList", json)
262+
apply()
263+
}
264+
}
271265
}
272266

273267
fun putMouseSensibility(context: Context, name: String, value: Int) {
@@ -383,7 +377,7 @@ class ControllerMapper : AppCompatActivity() {
383377
}
384378
}
385379

386-
fun editControllerPreset(context: Context, name: String, key: String, selectedItem: String, mappingType: String) {
380+
fun editControllerPreset(context: Context, name: String, key: String, selectedItem: String) {
387381
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
388382
val currentList = loadControllerPresets(context)
389383

@@ -394,7 +388,7 @@ class ControllerMapper : AppCompatActivity() {
394388
index = 0
395389
}
396390

397-
currentList[index][mappingMap[key]!!] = "$selectedItem:$mappingType"
391+
currentList[index][mappingMap[key]!!] = selectedItem
398392

399393
val json = Gson().toJson(currentList)
400394

app/src/main/java/com/micewine/emu/adapters/AdapterSettingsController.kt

Lines changed: 12 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import android.widget.AdapterView
88
import android.widget.ArrayAdapter
99
import android.widget.ImageView
1010
import android.widget.Spinner
11-
import android.widget.TextView
12-
import androidx.appcompat.widget.SwitchCompat
1311
import androidx.preference.PreferenceManager
1412
import androidx.recyclerview.widget.RecyclerView
1513
import com.micewine.emu.R
@@ -22,8 +20,8 @@ class AdapterSettingsController(private val settingsControllerList: List<Setting
2220
RecyclerView.Adapter<AdapterSettingsController.ViewHolder>() {
2321

2422
private val preferences = PreferenceManager.getDefaultSharedPreferences(context)!!
25-
private val keyboardEntries: List<String> = XKeyCodes.getKeyNames()
26-
private val mouseEntries: Array<String> = arrayOf("Null", "Left", "Middle", "Right")
23+
private val allEntries: List<String> = XKeyCodes.getKeyNames(true)
24+
private val keyEntries: List<String> = XKeyCodes.getKeyNames(false)
2725

2826
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
2927
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.adapter_settings_controller_item, parent, false)
@@ -35,41 +33,18 @@ class AdapterSettingsController(private val settingsControllerList: List<Setting
3533

3634
holder.image.setImageResource(sList.image)
3735

38-
var mapping = getMapping(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key)
36+
val mapping = getMapping(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key)
3937

40-
holder.mappingType.isChecked = mapping[1].toBoolean()
41-
42-
if (mapping[1].toBoolean()) {
43-
holder.mappingTypeText.text = context.getString(R.string.mouse_text)
44-
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, mouseEntries)
45-
holder.keyBindSpinner.setSelection(mouseEntries.indexOf(mapping[0]))
46-
} else {
47-
holder.mappingTypeText.text = context.getString(R.string.keyboard_text)
48-
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, keyboardEntries)
49-
holder.keyBindSpinner.setSelection(keyboardEntries.indexOf(mapping[0]))
50-
}
51-
52-
holder.mappingType.setOnClickListener {
53-
val selectedItem = holder.keyBindSpinner.selectedItem.toString()
54-
55-
val mappingType = if (holder.mappingType.isChecked) {
56-
"true"
57-
} else {
58-
""
38+
when (sList.image) {
39+
R.drawable.l_up, R.drawable.l_down, R.drawable.l_left, R.drawable.l_right,
40+
R.drawable.r_up, R.drawable.r_down, R.drawable.r_left, R.drawable.r_right -> {
41+
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, keyEntries)
42+
holder.keyBindSpinner.setSelection(keyEntries.indexOf(mapping[0]))
5943
}
6044

61-
editControllerPreset(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key, selectedItem, mappingType)
62-
63-
mapping = getMapping(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key)
64-
65-
if (mapping[1].toBoolean()) {
66-
holder.mappingTypeText.text = context.getString(R.string.mouse_text)
67-
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, mouseEntries)
68-
holder.keyBindSpinner.setSelection(mouseEntries.indexOf(mapping[0]))
69-
} else {
70-
holder.mappingTypeText.text = context.getString(R.string.keyboard_text)
71-
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, keyboardEntries)
72-
holder.keyBindSpinner.setSelection(keyboardEntries.indexOf(mapping[0]))
45+
else -> {
46+
holder.keyBindSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allEntries)
47+
holder.keyBindSpinner.setSelection(allEntries.indexOf(mapping[0]))
7348
}
7449
}
7550

@@ -81,15 +56,7 @@ class AdapterSettingsController(private val settingsControllerList: List<Setting
8156
position: Int,
8257
id: Long
8358
) {
84-
val selectedItem = parent?.selectedItem.toString()
85-
86-
val mappingType = if (holder.mappingType.isChecked) {
87-
"true"
88-
} else {
89-
""
90-
}
91-
92-
editControllerPreset(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key, selectedItem, mappingType)
59+
editControllerPreset(context, preferences.getString(ControllerMapper.SELECTED_CONTROLLER_PRESET_KEY, "default")!!, sList.key, parent?.selectedItem.toString())
9360
}
9461

9562
override fun onNothingSelected(parent: AdapterView<*>?) {
@@ -104,8 +71,6 @@ class AdapterSettingsController(private val settingsControllerList: List<Setting
10471
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
10572
val keyBindSpinner: Spinner = itemView.findViewById(R.id.keyBindSpinner)
10673
val image: ImageView = itemView.findViewById(R.id.buttonImageView)
107-
val mappingType: SwitchCompat = itemView.findViewById(R.id.mappingType)
108-
val mappingTypeText: TextView = itemView.findViewById(R.id.mappingTypeText)
10974

11075
init {
11176
itemView.setOnClickListener(this)

app/src/main/java/com/micewine/emu/controller/ControllerUtils.kt

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import android.view.MotionEvent.AXIS_RZ
2020
import android.view.MotionEvent.AXIS_X
2121
import android.view.MotionEvent.AXIS_Y
2222
import android.view.MotionEvent.AXIS_Z
23-
import android.view.PointerIcon
24-
import androidx.drawerlayout.widget.DrawerLayout
2523
import androidx.preference.PreferenceManager
2624
import com.micewine.emu.LorieView
2725
import com.micewine.emu.activities.ControllerMapper
@@ -50,7 +48,6 @@ import com.micewine.emu.activities.ControllerMapper.Companion.BUTTON_Y_KEY
5048
import com.micewine.emu.activities.ControllerMapper.Companion.SELECTED_CONTROLLER_PRESET_KEY
5149
import com.micewine.emu.activities.ControllerMapper.Companion.getDeadZone
5250
import com.micewine.emu.activities.ControllerMapper.Companion.getMouseSensibility
53-
import com.micewine.emu.activities.EmulationActivity
5451
import com.micewine.emu.controller.XKeyCodes.getXKeyScanCodes
5552
import com.micewine.emu.input.InputStub.BUTTON_LEFT
5653
import com.micewine.emu.input.InputStub.BUTTON_MIDDLE
@@ -102,26 +99,35 @@ object ControllerUtils {
10299
private const val RIGHT_UP = 7
103100
private const val RIGHT_DOWN = 8
104101

105-
private fun detectKey(context: Context, key: String): MutableList<Int> {
102+
private fun detectKey(context: Context, key: String): List<Int> {
106103
val preferences = PreferenceManager.getDefaultSharedPreferences(context)!!
107104
val mapping = ControllerMapper.getMapping(context, preferences.getString(SELECTED_CONTROLLER_PRESET_KEY, "default")!!, key)
108-
val list = getXKeyScanCodes(mapping[0])
109105

110-
when (mapping[1].toBoolean()) {
111-
false -> list[2] = KEYBOARD
106+
val keyList: List<Int>
112107

113-
true -> {
114-
when (mapping[0]) {
115-
"Left" -> list[1] = BUTTON_LEFT
116-
"Right" -> list[1] = BUTTON_RIGHT
117-
"Middle" -> list[1] = BUTTON_MIDDLE
118-
}
108+
when (mapping[0]) {
109+
"M_Left" -> {
110+
keyList = listOf(BUTTON_LEFT, BUTTON_LEFT, MOUSE)
111+
}
119112

120-
list[2] = MOUSE
113+
"M_Middle" -> {
114+
keyList = listOf(BUTTON_MIDDLE, BUTTON_MIDDLE, MOUSE)
115+
}
116+
117+
"M_Right" -> {
118+
keyList = listOf(BUTTON_RIGHT, BUTTON_RIGHT, MOUSE)
119+
}
120+
121+
"Mouse" -> {
122+
keyList = listOf(MOUSE, MOUSE, MOUSE)
123+
}
124+
125+
else -> {
126+
keyList = getXKeyScanCodes(mapping[0])
121127
}
122128
}
123129

124-
return list
130+
return keyList
125131
}
126132

127133
fun prepareButtonsAxisValues(context: Context) {
@@ -196,7 +202,7 @@ object ControllerUtils {
196202
private fun handleKey(lorieView: LorieView, pressed: Boolean, mapping: List<Int>) {
197203
when (mapping[2]) {
198204
KEYBOARD -> lorieView.sendKeyEvent(mapping[0], mapping[1], pressed)
199-
MOUSE -> lorieView.sendMouseEvent(0F, 0F, mapping[1], pressed, true)
205+
MOUSE -> lorieView.sendMouseEvent(0F, 0F, mapping[0], pressed, true)
200206
}
201207
}
202208

app/src/main/java/com/micewine/emu/controller/XKeyCodes.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,27 @@ object XKeyCodes {
7575
"9" to (73 to 153),
7676
)
7777

78-
fun getKeyNames(): MutableList<String> {
78+
fun getKeyNames(getMouseButtons: Boolean): List<String> {
7979
val keyNames: MutableList<String> = mutableListOf("Null")
8080

81+
if (getMouseButtons) {
82+
keyNames.plusAssign("M_Left")
83+
keyNames.plusAssign("M_Middle")
84+
keyNames.plusAssign("M_Right")
85+
} else {
86+
keyNames.plusAssign("Mouse")
87+
}
88+
8189
for (i in scanKeyCodes.keys) {
8290
keyNames.plusAssign(i)
8391
}
8492

8593
return keyNames
8694
}
8795

88-
fun getXKeyScanCodes(key: String): MutableList<Int> {
96+
fun getXKeyScanCodes(key: String): List<Int> {
8997
val scanCode = scanKeyCodes[key]?.first ?: 0
9098
val keyCode = scanKeyCodes[key]?.second ?: 0
91-
return mutableListOf(scanCode, keyCode, KEYBOARD)
99+
return listOf(scanCode, keyCode, KEYBOARD)
92100
}
93101
}

app/src/main/java/com/micewine/emu/fragments/ControllerMapperFragment.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.micewine.emu.fragments
22

3-
import android.content.Context
43
import android.os.Bundle
54
import android.view.LayoutInflater
65
import android.view.View
@@ -33,7 +32,6 @@ import com.micewine.emu.activities.ControllerMapper.Companion.BUTTON_X_KEY
3332
import com.micewine.emu.activities.ControllerMapper.Companion.BUTTON_Y_KEY
3433
import com.micewine.emu.adapters.AdapterSettingsController
3534
import com.micewine.emu.adapters.AdapterSettingsController.SettingsController
36-
import kotlin.math.max
3735

3836
class ControllerMapperFragment : Fragment() {
3937
private val settingsList: MutableList<SettingsController> = ArrayList()
@@ -53,19 +51,9 @@ class ControllerMapperFragment : Fragment() {
5351

5452
layoutManager = recyclerView?.layoutManager as GridLayoutManager?
5553

56-
val spanCount = max(1F,requireActivity().resources.displayMetrics.widthPixels / dpToPx(150, requireContext())).toInt()
57-
58-
recyclerView?.layoutManager = GridLayoutManager(requireContext(), spanCount)
59-
recyclerView?.addItemDecoration(HomeFragment.GridSpacingItemDecoration(spanCount, 40))
60-
6154
return rootView
6255
}
6356

64-
private fun dpToPx(dp: Int, context: Context): Float {
65-
val density = context.resources.displayMetrics.density
66-
return dp * density
67-
}
68-
6957
private fun setAdapter() {
7058
recyclerView?.setAdapter(AdapterSettingsController(settingsList, requireContext()))
7159

app/src/main/java/com/micewine/emu/fragments/EditVirtualButtonFragment.kt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,27 @@ class EditVirtualButtonFragment : DialogFragment() {
5353
})
5454
}
5555

56+
val allKeyNames = getKeyNames(true)
57+
5658
val buttonSpinner = view.findViewById<Spinner>(R.id.buttonSpinner).apply {
57-
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getKeyNames())
58-
setSelection(getKeyNames().indexOf(selectedButtonKeyName))
59+
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allKeyNames)
60+
setSelection(allKeyNames.indexOf(selectedButtonKeyName))
5961
}
6062
val analogUpKeySpinner = view.findViewById<Spinner>(R.id.analogUpKeySpinner).apply {
61-
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getKeyNames())
62-
setSelection(getKeyNames().indexOf(selectedAnalogUpKeyName))
63+
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allKeyNames)
64+
setSelection(allKeyNames.indexOf(selectedAnalogUpKeyName))
6365
}
6466
val analogDownKeySpinner = view.findViewById<Spinner>(R.id.analogDownKeySpinner).apply {
65-
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getKeyNames())
66-
setSelection(getKeyNames().indexOf(selectedAnalogDownKeyName))
67+
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allKeyNames)
68+
setSelection(allKeyNames.indexOf(selectedAnalogDownKeyName))
6769
}
6870
val analogLeftKeySpinner = view.findViewById<Spinner>(R.id.analogLeftKeySpinner).apply {
69-
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getKeyNames())
70-
setSelection(getKeyNames().indexOf(selectedAnalogLeftKeyName))
71+
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allKeyNames)
72+
setSelection(allKeyNames.indexOf(selectedAnalogLeftKeyName))
7173
}
7274
val analogRightKeySpinner = view.findViewById<Spinner>(R.id.analogRightKeySpinner).apply {
73-
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, getKeyNames())
74-
setSelection(getKeyNames().indexOf(selectedAnalogRightKeyName))
75+
adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, allKeyNames)
76+
setSelection(allKeyNames.indexOf(selectedAnalogRightKeyName))
7577
}
7678

7779
radiusSeekbar.progress = selectedButtonRadius

0 commit comments

Comments
 (0)