From 7805f6aaeb47d0c66c497d73132498116296a1b2 Mon Sep 17 00:00:00 2001 From: y20k Date: Mon, 5 Oct 2020 14:00:44 +0200 Subject: [PATCH] make Trackbook work better with different status bar heights (e.g. on phones with camera cutouts.) --- app/build.gradle | 6 +++--- .../java/org/y20k/trackbook/MapFragment.kt | 3 ++- .../org/y20k/trackbook/SettingsFragment.kt | 7 ++----- .../java/org/y20k/trackbook/TrackFragment.kt | 8 +++----- .../org/y20k/trackbook/TracklistFragment.kt | 4 ++++ .../org/y20k/trackbook/helpers/UiHelper.kt | 18 ++++++++++++++++++ .../trackbook/ui/MapFragmentLayoutHolder.kt | 9 +++------ .../trackbook/ui/TrackFragmentLayoutHolder.kt | 4 ++-- app/src/main/res/layout/fragment_tracklist.xml | 2 +- 9 files changed, 38 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b43d542..0d03aab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,13 +4,13 @@ apply plugin: 'kotlin-android-extensions' apply plugin: 'androidx.navigation.safeargs.kotlin' android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion "29.0.3" defaultConfig { applicationId 'org.y20k.trackbook' minSdkVersion 25 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 43 versionName '2.0.6' resConfigs "en", "da", "de", "fr", "hr", "id", "it", "ja", "nb-rNO", "nl", "pt-rBR", "sv", "zh-rCN" @@ -59,7 +59,7 @@ dependencies { // AndroidX implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' - implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.core:core-ktx:1.3.2' implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" implementation 'androidx.preference:preference-ktx:1.1.1' diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index eaf8492..1e15891 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -75,7 +75,8 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe /* Overrides onStop from Fragment */ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // initialize layout - layout = MapFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, container, currentBestLocation, trackingState) + val statusBarHeight: Int = UiHelper.getStatusBarHeight(activity as Context) + layout = MapFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, container, statusBarHeight, currentBestLocation, trackingState) // set up buttons layout.currentLocationButton.setOnClickListener { diff --git a/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt b/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt index ed33fc7..78b7403 100644 --- a/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/SettingsFragment.kt @@ -30,10 +30,7 @@ import android.widget.Toast import androidx.preference.* import kotlinx.coroutines.* import org.y20k.trackbook.core.Tracklist -import org.y20k.trackbook.helpers.AppThemeHelper -import org.y20k.trackbook.helpers.FileHelper -import org.y20k.trackbook.helpers.LengthUnitHelper -import org.y20k.trackbook.helpers.LogHelper +import org.y20k.trackbook.helpers.* /* @@ -51,7 +48,7 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList // set the background color view.setBackgroundColor(resources.getColor(R.color.app_window_background, null)) // add padding - necessary because translucent status bar is used - val topPadding = this.resources.displayMetrics.density * 24 // 24 dp * display density + val topPadding = UiHelper.getStatusBarHeight(activity as Context) view.setPadding(0, topPadding.toInt(), 0, 0) } diff --git a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt index 6a4e0e5..a4a398f 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackFragment.kt @@ -39,10 +39,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.y20k.trackbook.core.Track import org.y20k.trackbook.dialogs.RenameTrackDialog -import org.y20k.trackbook.helpers.FileHelper -import org.y20k.trackbook.helpers.LogHelper -import org.y20k.trackbook.helpers.MapOverlayHelper -import org.y20k.trackbook.helpers.TrackHelper +import org.y20k.trackbook.helpers.* import org.y20k.trackbook.ui.TrackFragmentLayoutHolder @@ -73,7 +70,8 @@ class TrackFragment : Fragment(), RenameTrackDialog.RenameTrackListener, YesNoDi /* Overrides onCreateView from Fragment */ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // initialize layout - layout = TrackFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, container, track) + val statusBarHeight: Int = UiHelper.getStatusBarHeight(activity as Context) + layout = TrackFragmentLayoutHolder(activity as Context, this as MapOverlayHelper.MarkerListener, inflater, statusBarHeight, container, track) // set up share button layout.shareButton.setOnClickListener { diff --git a/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt b/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt index b673e8e..fa570d6 100644 --- a/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/TracklistFragment.kt @@ -67,6 +67,10 @@ class TracklistFragment : Fragment(), TracklistAdapter.TracklistAdapterListener, trackElementList = rootView.findViewById(R.id.track_element_list) tracklistOnboarding = rootView.findViewById(R.id.track_list_onboarding) + // add padding - necessary because translucent status bar is used + val topPadding = UiHelper.getStatusBarHeight(activity as Context) + trackElementList.setPadding(0, topPadding.toInt(), 0, 0) + // set up recycler view trackElementList.layoutManager = CustomLinearLayoutManager(activity as Context) trackElementList.itemAnimator = DefaultItemAnimator() diff --git a/app/src/main/java/org/y20k/trackbook/helpers/UiHelper.kt b/app/src/main/java/org/y20k/trackbook/helpers/UiHelper.kt index 540ecf0..14f3b1b 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/UiHelper.kt +++ b/app/src/main/java/org/y20k/trackbook/helpers/UiHelper.kt @@ -65,6 +65,24 @@ object UiHelper { } + /* Get the height of the system's top status bar */ + fun getStatusBarHeight(context: Context): Int { + var result: Int = 0 + val resourceId: Int = context.resources.getIdentifier("status_bar_height", "dimen", "android") + if (resourceId > 0) { + result = context.resources.getDimensionPixelSize(resourceId) + } + return result + } + + + /* Get scaling factor from display density */ + fun getDensityScalingFactor(context: Context): Float { + return context.resources.displayMetrics.density + } + + + /* * Inner class: Callback that detects a left swipe * Credit: https://github.com/kitek/android-rv-swipe-delete/blob/master/app/src/main/java/pl/kitek/rvswipetodelete/SwipeToDeleteCallback.kt diff --git a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt index 3bef8be..1bbcb37 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt @@ -42,16 +42,13 @@ import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider import org.y20k.trackbook.Keys import org.y20k.trackbook.R import org.y20k.trackbook.core.Track -import org.y20k.trackbook.helpers.AppThemeHelper -import org.y20k.trackbook.helpers.LogHelper -import org.y20k.trackbook.helpers.MapOverlayHelper -import org.y20k.trackbook.helpers.PreferencesHelper +import org.y20k.trackbook.helpers.* /* * MapFragmentLayoutHolder class */ -data class MapFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, private val startLocation: Location, private val trackingState: Int) { +data class MapFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, private var statusBarHeight: Int ,private val startLocation: Location, private val trackingState: Int) { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(MapFragmentLayoutHolder::class.java) @@ -104,7 +101,7 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar // add compass to map val compassOverlay = CompassOverlay(context, InternalCompassOrientationProvider(context), mapView) compassOverlay.enableCompass() - compassOverlay.setCompassCenter(36f, 60f) + compassOverlay.setCompassCenter(36f, 36f + (statusBarHeight / UiHelper.getDensityScalingFactor(context))) mapView.overlays.add(compassOverlay) diff --git a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt index a1a4e87..911a803 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/TrackFragmentLayoutHolder.kt @@ -53,7 +53,7 @@ import kotlin.math.roundToInt /* * TrackFragmentLayoutHolder class */ -data class TrackFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var container: ViewGroup?, var track: Track): MapListener { +data class TrackFragmentLayoutHolder(private var context: Context, private var markerListener: MapOverlayHelper.MarkerListener, private var inflater: LayoutInflater, private var statusBarHeight: Int, private var container: ViewGroup?, var track: Track): MapListener { /* Define log tag */ private val TAG: String = LogHelper.makeLogTag(TrackFragmentLayoutHolder::class.java) @@ -140,7 +140,7 @@ data class TrackFragmentLayoutHolder(private var context: Context, private var m // add compass to map val compassOverlay = CompassOverlay(context, InternalCompassOrientationProvider(context), mapView) compassOverlay.enableCompass() - compassOverlay.setCompassCenter(36f, 60f) + compassOverlay.setCompassCenter(36f, 36f + (statusBarHeight / UiHelper.getDensityScalingFactor(context))) mapView.overlays.add(compassOverlay) // create map overlay diff --git a/app/src/main/res/layout/fragment_tracklist.xml b/app/src/main/res/layout/fragment_tracklist.xml index cc535b7..6cdb84f 100644 --- a/app/src/main/res/layout/fragment_tracklist.xml +++ b/app/src/main/res/layout/fragment_tracklist.xml @@ -12,7 +12,7 @@ android:id="@+id/track_element_list" android:layout_width="match_parent" android:layout_height="0dp" - android:layout_marginTop="28dp" + android:layout_marginTop="4dp" android:layout_marginBottom="4dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"