mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	android: Initialize defaults for each orientations
This commit is contained in:
		
							parent
							
								
									f34535f362
								
							
						
					
					
						commit
						e20c4fbbd4
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -26,6 +26,8 @@ CMakeSettings.json | |||||||
| # OSX global filetypes | # OSX global filetypes | ||||||
| # Created by Finder or Spotlight in directories for various OS functionality (indexing, etc) | # Created by Finder or Spotlight in directories for various OS functionality (indexing, etc) | ||||||
| .DS_Store | .DS_Store | ||||||
|  | .DS_Store? | ||||||
|  | ._* | ||||||
| .AppleDouble | .AppleDouble | ||||||
| .LSOverride | .LSOverride | ||||||
| .Spotlight-V100 | .Spotlight-V100 | ||||||
|  | |||||||
| @ -256,34 +256,50 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun PictureInPictureParams.Builder.getPictureInPictureAspectBuilder() : PictureInPictureParams.Builder { |     private fun PictureInPictureParams.Builder.getPictureInPictureAspectBuilder(): PictureInPictureParams.Builder { | ||||||
|         val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.int) { |         val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.int) { | ||||||
|             0 -> Rational(16, 9) |             0 -> Rational(16, 9) | ||||||
|             1 -> Rational(4, 3) |             1 -> Rational(4, 3) | ||||||
|             2 -> Rational(21, 9) |             2 -> Rational(21, 9) | ||||||
|             3 -> Rational(16, 10) |             3 -> Rational(16, 10) | ||||||
|             else -> null |             else -> null // Best fit | ||||||
|         } |         } | ||||||
|         return this.apply { aspectRatio?.let { setAspectRatio(it) } } |         return this.apply { aspectRatio?.let { setAspectRatio(it) } } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun PictureInPictureParams.Builder.getPictureInPictureActionsBuilder() : PictureInPictureParams.Builder { |     private fun PictureInPictureParams.Builder.getPictureInPictureActionsBuilder(): PictureInPictureParams.Builder { | ||||||
|         val pictureInPictureActions : MutableList<RemoteAction> = mutableListOf() |         val pictureInPictureActions: MutableList<RemoteAction> = mutableListOf() | ||||||
|         val pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE |         val pendingFlags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE | ||||||
| 
 | 
 | ||||||
|         if (NativeLibrary.isPaused()) { |         if (NativeLibrary.isPaused()) { | ||||||
|             val playIcon = Icon.createWithResource(this@EmulationActivity, R.drawable.ic_pip_play) |             val playIcon = Icon.createWithResource(this@EmulationActivity, R.drawable.ic_pip_play) | ||||||
|             val playPendingIntent = PendingIntent.getBroadcast( |             val playPendingIntent = PendingIntent.getBroadcast( | ||||||
|                 this@EmulationActivity, R.drawable.ic_pip_play, Intent(actionPlay), pendingFlags |                 this@EmulationActivity, | ||||||
|  |                 R.drawable.ic_pip_play, | ||||||
|  |                 Intent(actionPlay), | ||||||
|  |                 pendingFlags | ||||||
|  |             ) | ||||||
|  |             val playRemoteAction = RemoteAction( | ||||||
|  |                 playIcon, | ||||||
|  |                 getString(R.string.play), | ||||||
|  |                 getString(R.string.play), | ||||||
|  |                 playPendingIntent | ||||||
|             ) |             ) | ||||||
|             val playRemoteAction = RemoteAction(playIcon, getString(R.string.play), getString(R.string.play), playPendingIntent) |  | ||||||
|             pictureInPictureActions.add(playRemoteAction) |             pictureInPictureActions.add(playRemoteAction) | ||||||
|         } else { |         } else { | ||||||
|             val pauseIcon = Icon.createWithResource(this@EmulationActivity, R.drawable.ic_pip_pause) |             val pauseIcon = Icon.createWithResource(this@EmulationActivity, R.drawable.ic_pip_pause) | ||||||
|             val pausePendingIntent = PendingIntent.getBroadcast( |             val pausePendingIntent = PendingIntent.getBroadcast( | ||||||
|                 this@EmulationActivity, R.drawable.ic_pip_pause, Intent(actionPause), pendingFlags |                 this@EmulationActivity, | ||||||
|  |                 R.drawable.ic_pip_pause, | ||||||
|  |                 Intent(actionPause), | ||||||
|  |                 pendingFlags | ||||||
|  |             ) | ||||||
|  |             val pauseRemoteAction = RemoteAction( | ||||||
|  |                 pauseIcon, | ||||||
|  |                 getString(R.string.pause), | ||||||
|  |                 getString(R.string.pause), | ||||||
|  |                 pausePendingIntent | ||||||
|             ) |             ) | ||||||
|             val pauseRemoteAction = RemoteAction(pauseIcon, getString(R.string.pause), getString(R.string.pause), pausePendingIntent) |  | ||||||
|             pictureInPictureActions.add(pauseRemoteAction) |             pictureInPictureActions.add(pauseRemoteAction) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -300,7 +316,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private var pictureInPictureReceiver = object : BroadcastReceiver() { |     private var pictureInPictureReceiver = object : BroadcastReceiver() { | ||||||
|         override fun onReceive(context : Context?, intent : Intent) { |         override fun onReceive(context: Context?, intent: Intent) { | ||||||
|             if (intent.action == actionPlay) { |             if (intent.action == actionPlay) { | ||||||
|                 if (NativeLibrary.isPaused()) NativeLibrary.unPauseEmulation() |                 if (NativeLibrary.isPaused()) NativeLibrary.unPauseEmulation() | ||||||
|             } else if (intent.action == actionPause) { |             } else if (intent.action == actionPause) { | ||||||
| @ -310,7 +326,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) { |     override fun onPictureInPictureModeChanged( | ||||||
|  |         isInPictureInPictureMode: Boolean, | ||||||
|  |         newConfig: Configuration | ||||||
|  |     ) { | ||||||
|         super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) |         super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) | ||||||
|         if (isInPictureInPictureMode) { |         if (isInPictureInPictureMode) { | ||||||
|             IntentFilter().apply { |             IntentFilter().apply { | ||||||
| @ -322,7 +341,8 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { | |||||||
|         } else { |         } else { | ||||||
|             try { |             try { | ||||||
|                 unregisterReceiver(pictureInPictureReceiver) |                 unregisterReceiver(pictureInPictureReceiver) | ||||||
|             } catch (ignored : Exception) { } |             } catch (ignored : Exception) { | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -143,11 +143,7 @@ class Settings { | |||||||
| 
 | 
 | ||||||
|         private val configFileSectionsMap: MutableMap<String, List<String>> = HashMap() |         private val configFileSectionsMap: MutableMap<String, List<String>> = HashMap() | ||||||
| 
 | 
 | ||||||
|         // These must match what is defined in src/core/settings.h |         const val LayoutOption_Unspecified = 0 | ||||||
|         const val LayoutOption_Default = 0 |  | ||||||
|         const val LayoutOption_SingleScreen = 1 |  | ||||||
|         const val LayoutOption_LargeScreen = 2 |  | ||||||
|         const val LayoutOption_SideScreen = 3 |  | ||||||
|         const val LayoutOption_MobilePortrait = 4 |         const val LayoutOption_MobilePortrait = 4 | ||||||
|         const val LayoutOption_MobileLandscape = 5 |         const val LayoutOption_MobileLandscape = 5 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -241,7 +241,12 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView { | |||||||
|             context.startActivity(settings) |             context.startActivity(settings) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         fun launch(context: Context, launcher: ActivityResultLauncher<Intent>, menuTag: String?, gameId: String?) { |         fun launch( | ||||||
|  |             context: Context, | ||||||
|  |             launcher: ActivityResultLauncher<Intent>, | ||||||
|  |             menuTag: String?, | ||||||
|  |             gameId: String? | ||||||
|  |         ) { | ||||||
|             val settings = Intent(context, SettingsActivity::class.java) |             val settings = Intent(context, SettingsActivity::class.java) | ||||||
|             settings.putExtra(ARG_MENU_TAG, menuTag) |             settings.putExtra(ARG_MENU_TAG, menuTag) | ||||||
|             settings.putExtra(ARG_GAME_ID, gameId) |             settings.putExtra(ARG_GAME_ID, gameId) | ||||||
|  | |||||||
| @ -34,7 +34,6 @@ import androidx.fragment.app.Fragment | |||||||
| import androidx.lifecycle.Lifecycle | import androidx.lifecycle.Lifecycle | ||||||
| import androidx.lifecycle.lifecycleScope | import androidx.lifecycle.lifecycleScope | ||||||
| import androidx.lifecycle.repeatOnLifecycle | import androidx.lifecycle.repeatOnLifecycle | ||||||
| import androidx.navigation.fragment.navArgs |  | ||||||
| import androidx.preference.PreferenceManager | import androidx.preference.PreferenceManager | ||||||
| import androidx.window.layout.FoldingFeature | import androidx.window.layout.FoldingFeature | ||||||
| import androidx.window.layout.WindowInfoTracker | import androidx.window.layout.WindowInfoTracker | ||||||
| @ -165,7 +164,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
| 
 | 
 | ||||||
|                 R.id.menu_settings -> { |                 R.id.menu_settings -> { | ||||||
|                     SettingsActivity.launch( |                     SettingsActivity.launch( | ||||||
|                         requireContext(), onReturnFromSettings, SettingsFile.FILE_NAME_CONFIG, "" |                         requireContext(), | ||||||
|  |                         onReturnFromSettings, | ||||||
|  |                         SettingsFile.FILE_NAME_CONFIG, | ||||||
|  |                         "" | ||||||
|                     ) |                     ) | ||||||
|                     true |                     true | ||||||
|                 } |                 } | ||||||
| @ -219,9 +221,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
|             } |             } | ||||||
|             if (!isInFoldableLayout) { |             if (!isInFoldableLayout) { | ||||||
|                 if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { |                 if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { | ||||||
|                     binding.surfaceInputOverlay.setOrientation(InputOverlay.PORTRAIT) |                     binding.surfaceInputOverlay.orientation = InputOverlay.PORTRAIT | ||||||
|                 } else { |                 } else { | ||||||
|                     binding.surfaceInputOverlay.setOrientation(InputOverlay.LANDSCAPE) |                     binding.surfaceInputOverlay.orientation = InputOverlay.LANDSCAPE | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             if (!binding.surfaceInputOverlay.isInEditMode) { |             if (!binding.surfaceInputOverlay.isInEditMode) { | ||||||
| @ -311,17 +313,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
|     @SuppressLint("SourceLockedOrientationActivity") |     @SuppressLint("SourceLockedOrientationActivity") | ||||||
|     private fun updateScreenLayout() { |     private fun updateScreenLayout() { | ||||||
|         emulationActivity?.let { |         emulationActivity?.let { | ||||||
|             when (IntSetting.RENDERER_SCREEN_LAYOUT.int) { |             it.requestedOrientation = when (IntSetting.RENDERER_SCREEN_LAYOUT.int) { | ||||||
|                 Settings.LayoutOption_MobileLandscape -> { |                 Settings.LayoutOption_MobileLandscape -> ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE | ||||||
|                     it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE |                 Settings.LayoutOption_MobilePortrait -> ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT | ||||||
|                 } |                 Settings.LayoutOption_Unspecified -> ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED | ||||||
|                 Settings.LayoutOption_MobilePortrait -> { |                 else -> ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE | ||||||
|                     it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT |  | ||||||
|                 } |  | ||||||
|                 Settings.LayoutOption_Default -> { |  | ||||||
|                     it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED |  | ||||||
|                 } |  | ||||||
|                 else -> { it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         onConfigurationChanged(resources.configuration) |         onConfigurationChanged(resources.configuration) | ||||||
| @ -337,7 +333,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
|                     binding.overlayContainer.layoutParams.height = it.bounds.bottom |                     binding.overlayContainer.layoutParams.height = it.bounds.bottom | ||||||
|                     binding.inGameMenu.layoutParams.height = it.bounds.bottom |                     binding.inGameMenu.layoutParams.height = it.bounds.bottom | ||||||
|                     isInFoldableLayout = true |                     isInFoldableLayout = true | ||||||
|                     binding.surfaceInputOverlay.setOrientation(InputOverlay.FOLDABLE) |                     binding.surfaceInputOverlay.orientation = InputOverlay.FOLDABLE | ||||||
|                     refreshInputOverlay() |                     refreshInputOverlay() | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @ -485,7 +481,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
|     @SuppressLint("SourceLockedOrientationActivity") |     @SuppressLint("SourceLockedOrientationActivity") | ||||||
|     private fun startConfiguringControls() { |     private fun startConfiguringControls() { | ||||||
|         // Lock the current orientation to prevent editing inconsistencies |         // Lock the current orientation to prevent editing inconsistencies | ||||||
|         if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Default) { |         if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Unspecified) { | ||||||
|             emulationActivity?.let { |             emulationActivity?.let { | ||||||
|                 it.requestedOrientation = |                 it.requestedOrientation = | ||||||
|                     if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { |                     if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { | ||||||
| @ -503,7 +499,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { | |||||||
|         binding.doneControlConfig.visibility = View.GONE |         binding.doneControlConfig.visibility = View.GONE | ||||||
|         binding.surfaceInputOverlay.setIsInEditMode(false) |         binding.surfaceInputOverlay.setIsInEditMode(false) | ||||||
|         // Unlock the orientation if it was locked for editing |         // Unlock the orientation if it was locked for editing | ||||||
|         if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Default) { |         if (IntSetting.RENDERER_SCREEN_LAYOUT.int == Settings.LayoutOption_Unspecified) { | ||||||
|             emulationActivity?.let { |             emulationActivity?.let { | ||||||
|                 it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED |                 it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -51,12 +51,14 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
| 
 | 
 | ||||||
|     private lateinit var windowInsets: WindowInsets |     private lateinit var windowInsets: WindowInsets | ||||||
| 
 | 
 | ||||||
|  |     var orientation = LANDSCAPE | ||||||
|  | 
 | ||||||
|     override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { |     override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { | ||||||
|         super.onLayout(changed, left, top, right, bottom) |         super.onLayout(changed, left, top, right, bottom) | ||||||
| 
 | 
 | ||||||
|         windowInsets = rootWindowInsets |         windowInsets = rootWindowInsets | ||||||
| 
 | 
 | ||||||
|         if (!preferences.getBoolean(Settings.PREF_OVERLAY_INIT, false)) { |         if (!preferences.getBoolean("${Settings.PREF_OVERLAY_INIT}$orientation", false)) { | ||||||
|             defaultOverlay() |             defaultOverlay() | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -542,8 +544,8 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
|         val min = windowSize.first |         val min = windowSize.first | ||||||
|         val max = windowSize.second |         val max = windowSize.second | ||||||
|         PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext).edit() |         PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext).edit() | ||||||
|             .putFloat("$sharedPrefsId$orientation-X", (x - min.x).toFloat() / max.x) |             .putFloat("$sharedPrefsId-X$orientation", (x - min.x).toFloat() / max.x) | ||||||
|             .putFloat("$sharedPrefsId$orientation-Y", (y - min.y).toFloat() / max.y) |             .putFloat("$sharedPrefsId-Y$orientation", (y - min.y).toFloat() / max.y) | ||||||
|             .apply() |             .apply() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -552,13 +554,13 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun defaultOverlay() { |     private fun defaultOverlay() { | ||||||
|         if (!preferences.getBoolean(Settings.PREF_OVERLAY_INIT, false)) { |         if (!preferences.getBoolean("${Settings.PREF_OVERLAY_INIT}$orientation", false)) { | ||||||
|             defaultOverlayByLayout(orientation) |             defaultOverlayByLayout(orientation) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         resetButtonPlacement() |         resetButtonPlacement() | ||||||
|         preferences.edit() |         preferences.edit() | ||||||
|             .putBoolean(Settings.PREF_OVERLAY_INIT, true) |             .putBoolean("${Settings.PREF_OVERLAY_INIT}$orientation", true) | ||||||
|             .apply() |             .apply() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -601,69 +603,69 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     private val portraitResources = arrayOf( |     private val portraitResources = arrayOf( | ||||||
|         R.integer.SWITCH_BUTTON_A_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_A_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_A_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_A_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_B_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_B_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_B_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_B_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_X_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_X_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_X_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_X_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_Y_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_Y_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_Y_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_Y_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_ZL_PORTRAIT_X, |         R.integer.SWITCH_TRIGGER_ZL_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_ZL_PORTRAIT_Y, |         R.integer.SWITCH_TRIGGER_ZL_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_ZR_PORTRAIT_X, |         R.integer.SWITCH_TRIGGER_ZR_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_ZR_PORTRAIT_Y, |         R.integer.SWITCH_TRIGGER_ZR_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_DPAD_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_DPAD_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_DPAD_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_DPAD_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_L_PORTRAIT_X, |         R.integer.SWITCH_TRIGGER_L_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_L_PORTRAIT_Y, |         R.integer.SWITCH_TRIGGER_L_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_R_PORTRAIT_X, |         R.integer.SWITCH_TRIGGER_R_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_TRIGGER_R_PORTRAIT_Y, |         R.integer.SWITCH_TRIGGER_R_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_PLUS_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_PLUS_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_PLUS_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_PLUS_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_MINUS_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_MINUS_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_MINUS_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_MINUS_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_HOME_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_HOME_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_HOME_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_HOME_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_CAPTURE_PORTRAIT_X, |         R.integer.SWITCH_BUTTON_CAPTURE_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_BUTTON_CAPTURE_PORTRAIT_Y, |         R.integer.SWITCH_BUTTON_CAPTURE_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_STICK_R_PORTRAIT_X, |         R.integer.SWITCH_STICK_R_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_STICK_R_PORTRAIT_Y, |         R.integer.SWITCH_STICK_R_Y_PORTRAIT, | ||||||
|         R.integer.SWITCH_STICK_L_PORTRAIT_X, |         R.integer.SWITCH_STICK_L_X_PORTRAIT, | ||||||
|         R.integer.SWITCH_STICK_L_PORTRAIT_Y |         R.integer.SWITCH_STICK_L_Y_PORTRAIT | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     private val foldableResources = arrayOf( |     private val foldableResources = arrayOf( | ||||||
|         R.integer.SWITCH_BUTTON_A_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_A_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_A_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_A_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_B_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_B_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_B_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_B_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_X_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_X_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_X_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_X_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_Y_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_Y_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_Y_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_Y_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_ZL_FOLDABLE_X, |         R.integer.SWITCH_TRIGGER_ZL_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_ZL_FOLDABLE_Y, |         R.integer.SWITCH_TRIGGER_ZL_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_ZR_FOLDABLE_X, |         R.integer.SWITCH_TRIGGER_ZR_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_ZR_FOLDABLE_Y, |         R.integer.SWITCH_TRIGGER_ZR_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_DPAD_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_DPAD_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_DPAD_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_DPAD_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_L_FOLDABLE_X, |         R.integer.SWITCH_TRIGGER_L_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_L_FOLDABLE_Y, |         R.integer.SWITCH_TRIGGER_L_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_R_FOLDABLE_X, |         R.integer.SWITCH_TRIGGER_R_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_TRIGGER_R_FOLDABLE_Y, |         R.integer.SWITCH_TRIGGER_R_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_PLUS_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_PLUS_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_PLUS_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_PLUS_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_MINUS_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_MINUS_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_MINUS_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_MINUS_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_HOME_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_HOME_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_HOME_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_HOME_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_CAPTURE_FOLDABLE_X, |         R.integer.SWITCH_BUTTON_CAPTURE_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_BUTTON_CAPTURE_FOLDABLE_Y, |         R.integer.SWITCH_BUTTON_CAPTURE_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_STICK_R_FOLDABLE_X, |         R.integer.SWITCH_STICK_R_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_STICK_R_FOLDABLE_Y, |         R.integer.SWITCH_STICK_R_Y_FOLDABLE, | ||||||
|         R.integer.SWITCH_STICK_L_FOLDABLE_X, |         R.integer.SWITCH_STICK_L_X_FOLDABLE, | ||||||
|         R.integer.SWITCH_STICK_L_FOLDABLE_Y |         R.integer.SWITCH_STICK_L_Y_FOLDABLE | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     private fun getResourceValue(descriptor: String, position: Int) : Float { |     private fun getResourceValue(descriptor: String, position: Int) : Float { | ||||||
| @ -804,18 +806,13 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
|         return inEditMode |         return inEditMode | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fun setOrientation(descriptor: String) { |  | ||||||
|         orientation = descriptor |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     companion object { |     companion object { | ||||||
|         private val preferences: SharedPreferences = |         private val preferences: SharedPreferences = | ||||||
|             PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) |             PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext) | ||||||
| 
 | 
 | ||||||
|         const val LANDSCAPE = "" |         const val LANDSCAPE = "" | ||||||
|         const val PORTRAIT = "-Portrait" |         const val PORTRAIT = "_Portrait" | ||||||
|         const val FOLDABLE = "-Foldable" |         const val FOLDABLE = "_Foldable" | ||||||
|         private var orientation = LANDSCAPE |  | ||||||
| 
 | 
 | ||||||
|         /** |         /** | ||||||
|          * Resizes a [Bitmap] by a given scale factor |          * Resizes a [Bitmap] by a given scale factor | ||||||
| @ -985,8 +982,8 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
| 
 | 
 | ||||||
|             // The X and Y coordinates of the InputOverlayDrawableButton on the InputOverlay. |             // The X and Y coordinates of the InputOverlayDrawableButton on the InputOverlay. | ||||||
|             // These were set in the input overlay configuration menu. |             // These were set in the input overlay configuration menu. | ||||||
|             val xKey = "$buttonId$orientation-X" |             val xKey = "$buttonId-X$orientation" | ||||||
|             val yKey = "$buttonId$orientation-Y" |             val yKey = "$buttonId-Y$orientation" | ||||||
|             val drawableXPercent = sPrefs.getFloat(xKey, 0f) |             val drawableXPercent = sPrefs.getFloat(xKey, 0f) | ||||||
|             val drawableYPercent = sPrefs.getFloat(yKey, 0f) |             val drawableYPercent = sPrefs.getFloat(yKey, 0f) | ||||||
|             val drawableX = (drawableXPercent * max.x + min.x).toInt() |             val drawableX = (drawableXPercent * max.x + min.x).toInt() | ||||||
| @ -1066,8 +1063,8 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
| 
 | 
 | ||||||
|             // The X and Y coordinates of the InputOverlayDrawableDpad on the InputOverlay. |             // The X and Y coordinates of the InputOverlayDrawableDpad on the InputOverlay. | ||||||
|             // These were set in the input overlay configuration menu. |             // These were set in the input overlay configuration menu. | ||||||
|             val drawableXPercent = sPrefs.getFloat("${ButtonType.DPAD_UP}$orientation-X", 0f) |             val drawableXPercent = sPrefs.getFloat("${ButtonType.DPAD_UP}-X$orientation", 0f) | ||||||
|             val drawableYPercent = sPrefs.getFloat("${ButtonType.DPAD_UP}$orientation-Y", 0f) |             val drawableYPercent = sPrefs.getFloat("${ButtonType.DPAD_UP}-Y$orientation", 0f) | ||||||
|             val drawableX = (drawableXPercent * max.x + min.x).toInt() |             val drawableX = (drawableXPercent * max.x + min.x).toInt() | ||||||
|             val drawableY = (drawableYPercent * max.y + min.y).toInt() |             val drawableY = (drawableYPercent * max.y + min.y).toInt() | ||||||
|             val width = overlayDrawable.width |             val width = overlayDrawable.width | ||||||
| @ -1133,8 +1130,8 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context | |||||||
| 
 | 
 | ||||||
|             // The X and Y coordinates of the InputOverlayDrawableButton on the InputOverlay. |             // The X and Y coordinates of the InputOverlayDrawableButton on the InputOverlay. | ||||||
|             // These were set in the input overlay configuration menu. |             // These were set in the input overlay configuration menu. | ||||||
|             val drawableXPercent = sPrefs.getFloat("$button$orientation-X", 0f) |             val drawableXPercent = sPrefs.getFloat("$button-X$orientation", 0f) | ||||||
|             val drawableYPercent = sPrefs.getFloat("$button$orientation-Y", 0f) |             val drawableYPercent = sPrefs.getFloat("$button-Y$orientation", 0f) | ||||||
|             val drawableX = (drawableXPercent * max.x + min.x).toInt() |             val drawableX = (drawableXPercent * max.x + min.x).toInt() | ||||||
|             val drawableY = (drawableYPercent * max.y + min.y).toInt() |             val drawableY = (drawableYPercent * max.y + min.y).toInt() | ||||||
|             val outerScale = 1.66f |             val outerScale = 1.66f | ||||||
|  | |||||||
| @ -35,67 +35,67 @@ | |||||||
|     <integer name="SWITCH_BUTTON_DPAD_Y">790</integer> |     <integer name="SWITCH_BUTTON_DPAD_Y">790</integer> | ||||||
| 
 | 
 | ||||||
|     <!-- Default SWITCH portrait layout --> |     <!-- Default SWITCH portrait layout --> | ||||||
|     <integer name="SWITCH_BUTTON_A_PORTRAIT_X">840</integer> |     <integer name="SWITCH_BUTTON_A_X_PORTRAIT">840</integer> | ||||||
|     <integer name="SWITCH_BUTTON_A_PORTRAIT_Y">820</integer> |     <integer name="SWITCH_BUTTON_A_Y_PORTRAIT">820</integer> | ||||||
|     <integer name="SWITCH_BUTTON_B_PORTRAIT_X">740</integer> |     <integer name="SWITCH_BUTTON_B_X_PORTRAIT">740</integer> | ||||||
|     <integer name="SWITCH_BUTTON_B_PORTRAIT_Y">860</integer> |     <integer name="SWITCH_BUTTON_B_Y_PORTRAIT">860</integer> | ||||||
|     <integer name="SWITCH_BUTTON_X_PORTRAIT_X">740</integer> |     <integer name="SWITCH_BUTTON_X_X_PORTRAIT">740</integer> | ||||||
|     <integer name="SWITCH_BUTTON_X_PORTRAIT_Y">780</integer> |     <integer name="SWITCH_BUTTON_X_Y_PORTRAIT">780</integer> | ||||||
|     <integer name="SWITCH_BUTTON_Y_PORTRAIT_X">640</integer> |     <integer name="SWITCH_BUTTON_Y_X_PORTRAIT">640</integer> | ||||||
|     <integer name="SWITCH_BUTTON_Y_PORTRAIT_Y">820</integer> |     <integer name="SWITCH_BUTTON_Y_Y_PORTRAIT">820</integer> | ||||||
|     <integer name="SWITCH_STICK_L_PORTRAIT_X">180</integer> |     <integer name="SWITCH_STICK_L_X_PORTRAIT">180</integer> | ||||||
|     <integer name="SWITCH_STICK_L_PORTRAIT_Y">640</integer> |     <integer name="SWITCH_STICK_L_Y_PORTRAIT">640</integer> | ||||||
|     <integer name="SWITCH_STICK_R_PORTRAIT_X">820</integer> |     <integer name="SWITCH_STICK_R_X_PORTRAIT">820</integer> | ||||||
|     <integer name="SWITCH_STICK_R_PORTRAIT_Y">640</integer> |     <integer name="SWITCH_STICK_R_Y_PORTRAIT">640</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_L_PORTRAIT_X">140</integer> |     <integer name="SWITCH_TRIGGER_L_X_PORTRAIT">140</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_L_PORTRAIT_Y">240</integer> |     <integer name="SWITCH_TRIGGER_L_Y_PORTRAIT">240</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_R_PORTRAIT_X">860</integer> |     <integer name="SWITCH_TRIGGER_R_X_PORTRAIT">860</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_R_PORTRAIT_Y">240</integer> |     <integer name="SWITCH_TRIGGER_R_Y_PORTRAIT">240</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZL_PORTRAIT_X">140</integer> |     <integer name="SWITCH_TRIGGER_ZL_X_PORTRAIT">140</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZL_PORTRAIT_Y">180</integer> |     <integer name="SWITCH_TRIGGER_ZL_Y_PORTRAIT">180</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZR_PORTRAIT_X">860</integer> |     <integer name="SWITCH_TRIGGER_ZR_X_PORTRAIT">860</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZR_PORTRAIT_Y">180</integer> |     <integer name="SWITCH_TRIGGER_ZR_Y_PORTRAIT">180</integer> | ||||||
|     <integer name="SWITCH_BUTTON_MINUS_PORTRAIT_X">440</integer> |     <integer name="SWITCH_BUTTON_MINUS_X_PORTRAIT">440</integer> | ||||||
|     <integer name="SWITCH_BUTTON_MINUS_PORTRAIT_Y">950</integer> |     <integer name="SWITCH_BUTTON_MINUS_Y_PORTRAIT">950</integer> | ||||||
|     <integer name="SWITCH_BUTTON_PLUS_PORTRAIT_X">560</integer> |     <integer name="SWITCH_BUTTON_PLUS_X_PORTRAIT">560</integer> | ||||||
|     <integer name="SWITCH_BUTTON_PLUS_PORTRAIT_Y">950</integer> |     <integer name="SWITCH_BUTTON_PLUS_Y_PORTRAIT">950</integer> | ||||||
|     <integer name="SWITCH_BUTTON_HOME_PORTRAIT_X">660</integer> |     <integer name="SWITCH_BUTTON_HOME_X_PORTRAIT">680</integer> | ||||||
|     <integer name="SWITCH_BUTTON_HOME_PORTRAIT_Y">950</integer> |     <integer name="SWITCH_BUTTON_HOME_Y_PORTRAIT">950</integer> | ||||||
|     <integer name="SWITCH_BUTTON_CAPTURE_PORTRAIT_X">320</integer> |     <integer name="SWITCH_BUTTON_CAPTURE_X_PORTRAIT">320</integer> | ||||||
|     <integer name="SWITCH_BUTTON_CAPTURE_PORTRAIT_Y">950</integer> |     <integer name="SWITCH_BUTTON_CAPTURE_Y_PORTRAIT">950</integer> | ||||||
|     <integer name="SWITCH_BUTTON_DPAD_PORTRAIT_X">240</integer> |     <integer name="SWITCH_BUTTON_DPAD_X_PORTRAIT">240</integer> | ||||||
|     <integer name="SWITCH_BUTTON_DPAD_PORTRAIT_Y">820</integer> |     <integer name="SWITCH_BUTTON_DPAD_Y_PORTRAIT">820</integer> | ||||||
| 
 | 
 | ||||||
|     <!-- Default SWITCH foldable layout --> |     <!-- Default SWITCH foldable layout --> | ||||||
|     <integer name="SWITCH_BUTTON_A_FOLDABLE_X">840</integer> |     <integer name="SWITCH_BUTTON_A_X_FOLDABLE">840</integer> | ||||||
|     <integer name="SWITCH_BUTTON_A_FOLDABLE_Y">340</integer> |     <integer name="SWITCH_BUTTON_A_Y_FOLDABLE">340</integer> | ||||||
|     <integer name="SWITCH_BUTTON_B_FOLDABLE_X">740</integer> |     <integer name="SWITCH_BUTTON_B_X_FOLDABLE">740</integer> | ||||||
|     <integer name="SWITCH_BUTTON_B_FOLDABLE_Y">380</integer> |     <integer name="SWITCH_BUTTON_B_Y_FOLDABLE">380</integer> | ||||||
|     <integer name="SWITCH_BUTTON_X_FOLDABLE_X">740</integer> |     <integer name="SWITCH_BUTTON_X_X_FOLDABLE">740</integer> | ||||||
|     <integer name="SWITCH_BUTTON_X_FOLDABLE_Y">300</integer> |     <integer name="SWITCH_BUTTON_X_Y_FOLDABLE">300</integer> | ||||||
|     <integer name="SWITCH_BUTTON_Y_FOLDABLE_X">640</integer> |     <integer name="SWITCH_BUTTON_Y_X_FOLDABLE">640</integer> | ||||||
|     <integer name="SWITCH_BUTTON_Y_FOLDABLE_Y">340</integer> |     <integer name="SWITCH_BUTTON_Y_Y_FOLDABLE">340</integer> | ||||||
|     <integer name="SWITCH_STICK_L_FOLDABLE_X">180</integer> |     <integer name="SWITCH_STICK_L_X_FOLDABLE">180</integer> | ||||||
|     <integer name="SWITCH_STICK_L_FOLDABLE_Y">200</integer> |     <integer name="SWITCH_STICK_L_Y_FOLDABLE">200</integer> | ||||||
|     <integer name="SWITCH_STICK_R_FOLDABLE_X">820</integer> |     <integer name="SWITCH_STICK_R_X_FOLDABLE">820</integer> | ||||||
|     <integer name="SWITCH_STICK_R_FOLDABLE_Y">200</integer> |     <integer name="SWITCH_STICK_R_Y_FOLDABLE">200</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_L_FOLDABLE_X">140</integer> |     <integer name="SWITCH_TRIGGER_L_X_FOLDABLE">140</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_L_FOLDABLE_Y">80</integer> |     <integer name="SWITCH_TRIGGER_L_Y_FOLDABLE">80</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_R_FOLDABLE_X">860</integer> |     <integer name="SWITCH_TRIGGER_R_X_FOLDABLE">860</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_R_FOLDABLE_Y">80</integer> |     <integer name="SWITCH_TRIGGER_R_Y_FOLDABLE">80</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZL_FOLDABLE_X">140</integer> |     <integer name="SWITCH_TRIGGER_ZL_X_FOLDABLE">140</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZL_FOLDABLE_Y">20</integer> |     <integer name="SWITCH_TRIGGER_ZL_Y_FOLDABLE">20</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZR_FOLDABLE_X">860</integer> |     <integer name="SWITCH_TRIGGER_ZR_X_FOLDABLE">860</integer> | ||||||
|     <integer name="SWITCH_TRIGGER_ZR_FOLDABLE_Y">20</integer> |     <integer name="SWITCH_TRIGGER_ZR_Y_FOLDABLE">20</integer> | ||||||
|     <integer name="SWITCH_BUTTON_MINUS_FOLDABLE_X">440</integer> |     <integer name="SWITCH_BUTTON_MINUS_X_FOLDABLE">440</integer> | ||||||
|     <integer name="SWITCH_BUTTON_MINUS_FOLDABLE_Y">420</integer> |     <integer name="SWITCH_BUTTON_MINUS_Y_FOLDABLE">420</integer> | ||||||
|     <integer name="SWITCH_BUTTON_PLUS_FOLDABLE_X">560</integer> |     <integer name="SWITCH_BUTTON_PLUS_X_FOLDABLE">560</integer> | ||||||
|     <integer name="SWITCH_BUTTON_PLUS_FOLDABLE_Y">420</integer> |     <integer name="SWITCH_BUTTON_PLUS_Y_FOLDABLE">420</integer> | ||||||
|     <integer name="SWITCH_BUTTON_HOME_FOLDABLE_X">680</integer> |     <integer name="SWITCH_BUTTON_HOME_X_FOLDABLE">680</integer> | ||||||
|     <integer name="SWITCH_BUTTON_HOME_FOLDABLE_Y">420</integer> |     <integer name="SWITCH_BUTTON_HOME_Y_FOLDABLE">420</integer> | ||||||
|     <integer name="SWITCH_BUTTON_CAPTURE_FOLDABLE_X">320</integer> |     <integer name="SWITCH_BUTTON_CAPTURE_X_FOLDABLE">320</integer> | ||||||
|     <integer name="SWITCH_BUTTON_CAPTURE_FOLDABLE_Y">420</integer> |     <integer name="SWITCH_BUTTON_CAPTURE_Y_FOLDABLE">420</integer> | ||||||
|     <integer name="SWITCH_BUTTON_DPAD_FOLDABLE_X">240</integer> |     <integer name="SWITCH_BUTTON_DPAD_X_FOLDABLE">240</integer> | ||||||
|     <integer name="SWITCH_BUTTON_DPAD_FOLDABLE_Y">340</integer> |     <integer name="SWITCH_BUTTON_DPAD_Y_FOLDABLE">340</integer> | ||||||
| 
 | 
 | ||||||
| </resources> | </resources> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user