119 lines
4.1 KiB
Kotlin
119 lines
4.1 KiB
Kotlin
/*
|
|
* MainActivity.kt
|
|
* Implements the main activity of the app
|
|
* The MainActivity hosts fragments for: current map, track list, settings
|
|
*
|
|
* This file is part of
|
|
* TRACKBOOK - Movement Recorder for Android
|
|
*
|
|
* Copyright (c) 2016-20 - Y20K.org
|
|
* Licensed under the MIT-License
|
|
* http://opensource.org/licenses/MIT
|
|
*
|
|
* Trackbook uses osmdroid - OpenStreetMap-Tools for Android
|
|
* https://github.com/osmdroid/osmdroid
|
|
*/
|
|
|
|
|
|
package org.y20k.trackbook
|
|
|
|
import android.content.Context
|
|
import android.content.SharedPreferences
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import android.os.StrictMode
|
|
import android.os.StrictMode.VmPolicy
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.navigation.fragment.NavHostFragment
|
|
import androidx.navigation.ui.setupWithNavController
|
|
import androidx.preference.PreferenceManager
|
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
import org.osmdroid.config.Configuration
|
|
import org.y20k.trackbook.helpers.AppThemeHelper
|
|
import org.y20k.trackbook.helpers.LogHelper
|
|
import org.y20k.trackbook.helpers.PreferencesHelper
|
|
|
|
|
|
/*
|
|
* MainActivity class
|
|
*/
|
|
class MainActivity : AppCompatActivity() {
|
|
|
|
/* Define log tag */
|
|
private val TAG: String = LogHelper.makeLogTag(MainActivity::class.java)
|
|
|
|
|
|
/* Main class variables */
|
|
private lateinit var navHostFragment: NavHostFragment
|
|
private lateinit var bottomNavigationView: BottomNavigationView
|
|
|
|
|
|
/* Overrides onCreate from AppCompatActivity */
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
// todo: remove after testing finished
|
|
if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
StrictMode.setVmPolicy(
|
|
VmPolicy.Builder()
|
|
.detectNonSdkApiUsage()
|
|
.penaltyLog()
|
|
.build()
|
|
)
|
|
}
|
|
|
|
// set user agent to prevent getting banned from the osm servers
|
|
Configuration.getInstance().userAgentValue = BuildConfig.APPLICATION_ID
|
|
// set the path for osmdroid's files (e.g. tile cache)
|
|
Configuration.getInstance().osmdroidBasePath = this.getExternalFilesDir(null)
|
|
|
|
// set up views
|
|
setContentView(R.layout.activity_main)
|
|
navHostFragment = supportFragmentManager.findFragmentById(R.id.main_container) as NavHostFragment
|
|
bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
|
|
bottomNavigationView.setupWithNavController(navController = navHostFragment.navController)
|
|
|
|
// listen for navigation changes
|
|
navHostFragment.navController.addOnDestinationChangedListener { _, destination, _ ->
|
|
when (destination.id) {
|
|
R.id.fragment_track -> {
|
|
runOnUiThread {
|
|
run {
|
|
// mark menu item "Tracks" as checked
|
|
bottomNavigationView.menu.findItem(R.id.tracklist_fragment).isChecked = true
|
|
}
|
|
}
|
|
}
|
|
else -> {
|
|
// do nothing
|
|
}
|
|
}
|
|
}
|
|
|
|
// register listener for changes in shared preferences
|
|
PreferenceManager.getDefaultSharedPreferences(this as Context).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
|
|
}
|
|
|
|
|
|
/* Overrides onDestroy from AppCompatActivity */
|
|
override fun onDestroy() {
|
|
super.onDestroy()
|
|
// unregister listener for changes in shared preferences
|
|
PreferenceManager.getDefaultSharedPreferences(this as Context).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
|
|
}
|
|
|
|
|
|
/*
|
|
* Defines the listener for changes in shared preferences
|
|
*/
|
|
private val sharedPreferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
|
|
when (key) {
|
|
Keys.PREF_THEME_SELECTION -> {
|
|
AppThemeHelper.setTheme(PreferencesHelper.loadThemeSelection(this@MainActivity))
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
* End of declaration
|
|
*/
|
|
}
|