@@ -26,6 +26,7 @@ import android.view.View
2626import android.view.ViewGroup
2727import android.view.ViewTreeObserver.OnGlobalLayoutListener
2828import android.view.Window
29+ import android.view.WindowManager
2930import android.widget.PopupMenu
3031import android.widget.TextView
3132import android.widget.Toast
@@ -36,6 +37,7 @@ import androidx.fragment.app.Fragment
3637import androidx.fragment.app.FragmentManager
3738import androidx.fragment.app.viewModels
3839import androidx.lifecycle.ViewModelProvider
40+ import androidx.preference.PreferenceManager
3941import io.ticofab.androidgpxparser.parser.domain.Gpx
4042import org.nitri.opentopo.SettingsActivity.Companion.PREF_FULLSCREEN
4143import org.nitri.opentopo.SettingsActivity.Companion.PREF_KEEP_SCREEN_ON
@@ -47,6 +49,7 @@ import org.nitri.opentopo.overlay.ClickableCompassOverlay
4749import org.nitri.opentopo.overlay.GestureOverlay
4850import org.nitri.opentopo.overlay.GestureOverlay.GestureCallback
4951import org.nitri.opentopo.overlay.OverlayHelper
52+ import org.nitri.opentopo.util.MapOrientation
5053import org.nitri.opentopo.util.Util
5154import org.osmdroid.config.Configuration
5255import org.osmdroid.events.DelayedMapListener
@@ -69,7 +72,8 @@ import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
6972import java.io.File
7073
7174class MapFragment : Fragment (), LocationListener, PopupMenu.OnMenuItemClickListener,
72- GestureCallback {
75+ GestureCallback , ClickableCompassOverlay .OnCompassClickListener {
76+ private var mapRotation: Boolean = false
7377 private lateinit var mMapView: MapView
7478 private var mLocationOverlay: MyLocationNewOverlay ? = null
7579 private var mCompassOverlay: CompassOverlay ? = null
@@ -109,7 +113,13 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
109113 }
110114
111115 fun setKeepScreenOn (value : Boolean ) {
116+ Log .d(TAG , " keepScreenOn: $value " )
112117 mMapView.keepScreenOn = value
118+ if (value) {
119+ requireActivity().window.addFlags(WindowManager .LayoutParams .FLAG_KEEP_SCREEN_ON )
120+ } else {
121+ requireActivity().window.clearFlags(WindowManager .LayoutParams .FLAG_KEEP_SCREEN_ON )
122+ }
113123 }
114124
115125 private var mFollow = false
@@ -132,7 +142,7 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
132142 super .onCreate(savedInstanceState)
133143 setHasOptionsMenu(true )
134144 val context = requireActivity().applicationContext
135- mPrefs = requireActivity().getSharedPreferences( MAP_PREFS , Context . MODE_PRIVATE )
145+ mPrefs = PreferenceManager .getDefaultSharedPreferences(context )
136146 val configuration = Configuration .getInstance()
137147 configuration.userAgentValue = BuildConfig .APPLICATION_ID
138148 val basePath = Util .getOsmdroidBasePath(context, mPrefs.getBoolean(CacheSettingsFragment .PREF_EXTERNAL_STORAGE , false ))
@@ -206,7 +216,11 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
206216 }
207217 }))
208218
209- mCompassOverlay = ClickableCompassOverlay (
219+ // TODO: mCompassOverlay = ClickableCompassOverlay(
220+ // activity, InternalCompassOrientationProvider(activity),
221+ // mMapView, this
222+ // )
223+ mCompassOverlay = CompassOverlay (
210224 activity, InternalCompassOrientationProvider (activity),
211225 mMapView
212226 )
@@ -810,6 +824,9 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
810824 String .format(" Location: %f, %f" , location.latitude, location.longitude)
811825 )
812826 mLocationViewModel?.currentLocation?.value = location
827+ if (mapRotation) {
828+ MapOrientation .setTargetMapOrientation(mMapView, location.bearing)
829+ }
813830 }
814831
815832 @Deprecated(" Deprecated in Java" )
@@ -856,6 +873,16 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
856873 }
857874 }
858875
876+ override fun onCompassClicked () {
877+ mapRotation = ! mapRotation
878+ if (mapRotation) {
879+ Toast .makeText(requireContext(), R .string.rotation_on, Toast .LENGTH_SHORT ).show()
880+ } else {
881+ MapOrientation .setTargetMapOrientation(mMapView, 0f )
882+ Toast .makeText(requireContext(), R .string.rotation_off, Toast .LENGTH_SHORT ).show()
883+ }
884+ }
885+
859886 interface OnFragmentInteractionListener {
860887 /* *
861888 * Start GPX file selection flow
@@ -935,7 +962,6 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
935962 private const val STATE_LATITUDE = " latitude"
936963 private const val STATE_LONGITUDE = " longitude"
937964 private const val STATE_ZOOM = " zoom"
938- const val MAP_PREFS = " map_prefs"
939965 private const val PREF_BASE_MAP = " base_map"
940966 private const val PREF_OVERLAY = " overlay"
941967 private const val PREF_LATITUDE = " latitude"
@@ -958,4 +984,5 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe
958984 return mapFragment
959985 }
960986 }
987+
961988}
0 commit comments