diff --git a/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MainActivity.kt b/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MainActivity.kt index 799af38c4..befd931a5 100644 --- a/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MainActivity.kt +++ b/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MainActivity.kt @@ -18,11 +18,13 @@ package com.google.oboe.samples.soundboard import android.app.Activity import android.content.Context +import android.content.res.Configuration import android.graphics.Point import android.graphics.Rect import android.media.AudioManager import android.os.Build import android.os.Bundle +import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import kotlin.math.min @@ -52,10 +54,7 @@ class MainActivity : AppCompatActivity() { } override fun onResume() { - setDefaultStreamValues(this) - calculateAndSetRectangles(this) - mEngineHandle = startEngine(mNumRows * mNumColumns) - createMusicTiles(this) + setup() super.onResume() } @@ -64,6 +63,13 @@ class MainActivity : AppCompatActivity() { super.onPause() } + private fun setup() { + setDefaultStreamValues(this) + calculateAndSetRectangles(this) + mEngineHandle = startEngine(mNumRows * mNumColumns) + createMusicTiles(this) + } + private fun setDefaultStreamValues(context: Context) { val myAudioMgr = context.getSystemService(AUDIO_SERVICE) as AudioManager val sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE) @@ -75,14 +81,19 @@ class MainActivity : AppCompatActivity() { } private fun calculateAndSetRectangles(context: Context) { - val size = Point() + val width: Int + val height: Int + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - display?.getRealSize(size) + width = windowManager.currentWindowMetrics.bounds.width() + height = windowManager.currentWindowMetrics.bounds.height() } else { + val size = Point() windowManager.defaultDisplay.getRealSize(size) + height = size.y + width = size.x } - val height = size.y - val width = size.x + if (height > width) { mNumColumns = DIMENSION_MIN_SIZE mNumRows = min(DIMENSION_MIN_SIZE * height / width, DIMENSION_MAX_SIZE) @@ -108,18 +119,14 @@ class MainActivity : AppCompatActivity() { } private fun createMusicTiles(context: Context) { - setContentView(MusicTileView(this, mRectangles, NoteListener(mEngineHandle))) + setContentView(MusicTileView(this, mRectangles, NoteListener(mEngineHandle), + ScreenChangeListener({ setup() }))) } - fun Activity.getRealScreenSize(): Pair { // - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - val size = Point() - display?.getRealSize(size) - Pair(size.x, size.y) - } else { - val size = Point() - windowManager.defaultDisplay.getRealSize(size) - Pair(size.x, size.y) + class ScreenChangeListener(private var mFunc: () -> Unit) : MusicTileView.ConfigChangeListener { + override fun onConfigurationChanged() { + mFunc() + } + } - }} } diff --git a/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MusicTileView.kt b/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MusicTileView.kt index 17ac4ca9e..ac8134502 100644 --- a/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MusicTileView.kt +++ b/samples/SoundBoard/src/main/kotlin/com/google/oboe/samples/soundboard/MusicTileView.kt @@ -17,6 +17,7 @@ package com.google.oboe.samples.soundboard import android.content.Context +import android.content.res.Configuration import android.graphics.* import android.util.SparseArray import android.view.MotionEvent @@ -25,12 +26,18 @@ import android.view.View class MusicTileView( context: Context?, private val mRectangles: ArrayList, - tileListener: TileListener + tileListener: TileListener, + configChangeListener: ConfigChangeListener ) : View(context) { private val mIsPressedPerRectangle: BooleanArray = BooleanArray(mRectangles.size) private val mPaint: Paint = Paint() private val mLocationsOfFingers: SparseArray = SparseArray() private val mTileListener: TileListener + private val mConfigChangeListener : ConfigChangeListener + + interface ConfigChangeListener { + fun onConfigurationChanged() + } interface TileListener { fun onTileOn(index: Int) @@ -145,7 +152,13 @@ class MusicTileView( return true } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + mConfigChangeListener.onConfigurationChanged() + } + init { mTileListener = tileListener + mConfigChangeListener = configChangeListener } }