From 7ca5ec88def7648ac1878dc5a96dbfcb884b3595 Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Sun, 5 Apr 2020 19:24:16 +0200 Subject: [PATCH] some fixes, add filter button --- .../main/java/com/johan/evmap/MapsActivity.kt | 14 ++++-- .../com/johan/evmap/fragment/MapFragment.kt | 44 +++++++++++++++++-- app/src/main/res/drawable/ic_filter.xml | 10 +++++ app/src/main/res/menu/map.xml | 10 +++++ app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 6 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/drawable/ic_filter.xml create mode 100644 app/src/main/res/menu/map.xml diff --git a/app/src/main/java/com/johan/evmap/MapsActivity.kt b/app/src/main/java/com/johan/evmap/MapsActivity.kt index 8ce07dfb..16f5952c 100644 --- a/app/src/main/java/com/johan/evmap/MapsActivity.kt +++ b/app/src/main/java/com/johan/evmap/MapsActivity.kt @@ -4,20 +4,27 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.drawerlayout.widget.DrawerLayout import androidx.navigation.NavController import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView +import com.google.android.material.snackbar.Snackbar import com.johan.evmap.api.ChargeLocation const val REQUEST_LOCATION_PERMISSION = 1 class MapsActivity : AppCompatActivity() { + interface FragmentCallback { + fun getRootView(): CoordinatorLayout + } + private lateinit var navController: NavController lateinit var appBarConfiguration: AppBarConfiguration + var fragmentCallback: FragmentCallback? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,13 +65,12 @@ class MapsActivity : AppCompatActivity() { if (intent.resolveActivity(pm) != null) { startActivity(intent); } else { - // TODO: - /* + val cb = fragmentCallback ?: return Snackbar.make( - , + cb.getRootView(), R.string.no_maps_app_found, Snackbar.LENGTH_SHORT - )*/ + ) } } } diff --git a/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt b/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt index bf7a7bbb..3d7b51d4 100644 --- a/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/com/johan/evmap/fragment/MapFragment.kt @@ -2,14 +2,14 @@ package com.johan.evmap.fragment import android.Manifest import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.res.Configuration import android.net.Uri import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import android.view.* +import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment @@ -26,6 +26,7 @@ import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.SupportMapFragment import com.google.android.gms.maps.model.* +import com.google.android.material.snackbar.Snackbar import com.johan.evmap.GalleryActivity import com.johan.evmap.MapsActivity import com.johan.evmap.R @@ -38,6 +39,7 @@ import com.johan.evmap.databinding.FragmentMapBinding import com.johan.evmap.ui.ClusterIconGenerator import com.johan.evmap.ui.getBitmapDescriptor import com.mahc.custombottomsheetbehavior.BottomSheetBehaviorGoogleMapsLike +import kotlinx.android.synthetic.main.fragment_map.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -63,7 +65,7 @@ class MapViewModel : ViewModel() { } } -class MapFragment : Fragment(), OnMapReadyCallback { +class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallback { private lateinit var binding: FragmentMapBinding private val vm: MapViewModel by viewModels() private var map: GoogleMap? = null @@ -85,6 +87,8 @@ class MapFragment : Fragment(), OnMapReadyCallback { fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireContext()) api = GoingElectricApi.create(getString(R.string.goingelectric_key)) + setHasOptionsMenu(true) + return binding.root } @@ -98,12 +102,25 @@ class MapFragment : Fragment(), OnMapReadyCallback { setupAdapters() val navController = findNavController() + (activity as? MapsActivity)?.setSupportActionBar(binding.toolbar) binding.toolbar.setupWithNavController( navController, (requireActivity() as MapsActivity).appBarConfiguration ) } + override fun onAttach(context: Context) { + super.onAttach(context) + val hostActivity = activity as? MapsActivity ?: return + hostActivity.fragmentCallback = this + } + + override fun onDetach() { + val hostActivity = activity as? MapsActivity ?: return + hostActivity.fragmentCallback = null + super.onDetach() + } + private fun setupClickListeners() { binding.fabLocate.setOnClickListener { if (!hasLocationPermission()) { @@ -398,6 +415,21 @@ class MapFragment : Fragment(), OnMapReadyCallback { } } + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + inflater.inflate(R.menu.map, menu) + super.onCreateOptionsMenu(menu, inflater) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.menu_filter -> { + Snackbar.make(root, R.string.not_implemented, Snackbar.LENGTH_SHORT).show() + return true + } + else -> return super.onOptionsItemSelected(item) + } + } + fun goBack(): Boolean { if (bottomSheetBehavior.state != BottomSheetBehaviorGoogleMapsLike.STATE_COLLAPSED && bottomSheetBehavior.state != BottomSheetBehaviorGoogleMapsLike.STATE_HIDDEN @@ -417,4 +449,8 @@ class MapFragment : Fragment(), OnMapReadyCallback { const val EXTRA_STARTING_GALLERY_POSITION = "extra_starting_item_position" const val EXTRA_CURRENT_GALLERY_POSITION = "extra_current_item_position" } + + override fun getRootView(): CoordinatorLayout { + return root + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_filter.xml b/app/src/main/res/drawable/ic_filter.xml new file mode 100644 index 00000000..d9093d92 --- /dev/null +++ b/app/src/main/res/drawable/ic_filter.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/menu/map.xml b/app/src/main/res/menu/map.xml new file mode 100644 index 00000000..c76a22c8 --- /dev/null +++ b/app/src/main/res/menu/map.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f810f518..fe3312a1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -24,4 +24,6 @@ Suche Map Favorites + Filtern + noch nicht implementiert \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e9c14ac9..7d96bfb4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,4 +23,6 @@ Search Map Favorites + Filter + not implemented yet