diff --git a/app/src/main/java/net/duhowpi/ftmsbridge/MainActivity.kt b/app/src/main/java/net/duhowpi/ftmsbridge/MainActivity.kt index b4a8399..2ed2f20 100644 --- a/app/src/main/java/net/duhowpi/ftmsbridge/MainActivity.kt +++ b/app/src/main/java/net/duhowpi/ftmsbridge/MainActivity.kt @@ -55,6 +55,7 @@ import net.duhowpi.ftmsbridge.ftms.FtmsConstants import net.duhowpi.ftmsbridge.ftms.FtmsDataParser import net.duhowpi.ftmsbridge.model.FitnessSample import net.duhowpi.ftmsbridge.model.ScannedDeviceInfo +import net.duhowpi.ftmsbridge.ui.applySystemBarInsets import java.nio.ByteBuffer import java.nio.ByteOrder import java.util.UUID @@ -226,6 +227,7 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + binding.root.applySystemBarInsets() binding.toolbar.title = getString(R.string.app_name) setSupportActionBar(binding.toolbar) diff --git a/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutDetailActivity.kt b/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutDetailActivity.kt index 3690b45..6a92ae9 100644 --- a/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutDetailActivity.kt +++ b/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutDetailActivity.kt @@ -19,6 +19,7 @@ import net.duhowpi.ftmsbridge.data.AppDatabase import net.duhowpi.ftmsbridge.data.WorkoutSample import net.duhowpi.ftmsbridge.data.WorkoutSession import net.duhowpi.ftmsbridge.databinding.ActivityWorkoutDetailBinding +import net.duhowpi.ftmsbridge.ui.applySystemBarInsets import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -34,6 +35,7 @@ class WorkoutDetailActivity : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityWorkoutDetailBinding.inflate(layoutInflater) setContentView(binding.root) + binding.root.applySystemBarInsets() setSupportActionBar(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutHistoryActivity.kt b/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutHistoryActivity.kt index c9bf868..47b301c 100644 --- a/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutHistoryActivity.kt +++ b/app/src/main/java/net/duhowpi/ftmsbridge/WorkoutHistoryActivity.kt @@ -24,6 +24,7 @@ import kotlinx.coroutines.withContext import net.duhowpi.ftmsbridge.data.AppDatabase import net.duhowpi.ftmsbridge.data.WorkoutSession import net.duhowpi.ftmsbridge.databinding.ActivityWorkoutHistoryBinding +import net.duhowpi.ftmsbridge.ui.applySystemBarInsets import java.io.File import java.text.SimpleDateFormat import java.util.Date @@ -48,6 +49,7 @@ class WorkoutHistoryActivity : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityWorkoutHistoryBinding.inflate(layoutInflater) setContentView(binding.root) + binding.root.applySystemBarInsets() binding.toolbar.title = getString(R.string.workout_history) setSupportActionBar(binding.toolbar) diff --git a/app/src/main/java/net/duhowpi/ftmsbridge/ui/Insets.kt b/app/src/main/java/net/duhowpi/ftmsbridge/ui/Insets.kt new file mode 100644 index 0000000..14a1453 --- /dev/null +++ b/app/src/main/java/net/duhowpi/ftmsbridge/ui/Insets.kt @@ -0,0 +1,29 @@ +package net.duhowpi.ftmsbridge.ui + +import android.view.View +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding + +/** + * Pads this view by the system bar and display cutout insets. + * + * Android 15 lays apps targeting SDK 35 or later out edge to edge, so the window extends + * behind the status and navigation bars. Each activity here uses a plain LinearLayout with + * the toolbar as its first child, which would otherwise be drawn underneath the status bar, + * leaving the overflow menu overlapping the status icons and swallowing taps on it. + */ +fun View.applySystemBarInsets() { + ViewCompat.setOnApplyWindowInsetsListener(this) { view, windowInsets -> + val insets = windowInsets.getInsets( + WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout() + ) + view.updatePadding( + left = insets.left, + top = insets.top, + right = insets.right, + bottom = insets.bottom + ) + windowInsets + } +}