Make the MerchantsFragment's custom translucent Toolbar works with the up button, and menu items, looks good in day and night modes and make sure everything goes back to normal when returning to the HomeFragment.

This commit is contained in:
Severiano Jaramillo 2019-01-29 23:46:04 -06:00
parent 4d8ed68912
commit 28e0e9df52
4 changed files with 20 additions and 10 deletions

View file

@ -21,7 +21,7 @@ import cy.agorise.bitsybitshareswallet.viewmodels.UserAccountViewModel
import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.fragment_home.*
import android.os.Build import android.os.Build
import android.content.res.ColorStateList import android.content.res.ColorStateList
import androidx.appcompat.app.AppCompatActivity
class HomeFragment : Fragment() { class HomeFragment : Fragment() {
@ -34,11 +34,15 @@ class HomeFragment : Fragment() {
val nightMode = PreferenceManager.getDefaultSharedPreferences(context) val nightMode = PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(Constants.KEY_NIGHT_MODE_ACTIVATED, false) .getBoolean(Constants.KEY_NIGHT_MODE_ACTIVATED, false)
// Sets the toolbar background color to primaryColor and forces shows the Bitsy icon to the left // Forces to show the Bitsy icon to the left of the toolbar and also fix the toolbar color and visibility after
// returning from other fragments that change those properties, such as SendTransactionFragment (color) and
// MerchantsFragment (visibility)
val toolbar: Toolbar? = activity?.findViewById(R.id.toolbar) val toolbar: Toolbar? = activity?.findViewById(R.id.toolbar)
(activity as AppCompatActivity).setSupportActionBar(toolbar)
toolbar?.navigationIcon = resources.getDrawable(R.drawable.ic_bitsy_logo_2, null) toolbar?.navigationIcon = resources.getDrawable(R.drawable.ic_bitsy_logo_2, null)
toolbar?.setBackgroundResource(if (!nightMode) R.color.colorPrimary else R.color.colorToolbarDark) toolbar?.setBackgroundResource(if (!nightMode) R.color.colorPrimary else R.color.colorToolbarDark)
toolbar?.visibility = View.VISIBLE toolbar?.visibility = View.VISIBLE
toolbar?.title = getString(R.string.app_name)
// Makes sure the Navigation and Status bar are not translucent after returning from the MerchantsFragment // Makes sure the Navigation and Status bar are not translucent after returning from the MerchantsFragment
val window = activity?.window val window = activity?.window

View file

@ -11,6 +11,7 @@ import android.util.Log
import android.view.* import android.view.*
import android.widget.PopupWindow import android.widget.PopupWindow
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.SwitchCompat
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
@ -48,6 +49,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
import io.reactivex.functions.BiFunction import io.reactivex.functions.BiFunction
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.fragment_merchants.*
import java.math.BigInteger import java.math.BigInteger
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@ -92,7 +94,6 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
// Variables used to create a custom popup menu to show the merchants and tellers switches // Variables used to create a custom popup menu to show the merchants and tellers switches
private var mPopupWindow: PopupWindow? = null private var mPopupWindow: PopupWindow? = null
private var mToolbar: Toolbar? = null
private var screenWidth: Int = 0 private var screenWidth: Int = 0
// Variables used to decide whether or not to display the merchants and tellers markers on the map // Variables used to decide whether or not to display the merchants and tellers markers on the map
@ -102,11 +103,9 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
private var showTellerMarkers = true private var showTellerMarkers = true
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
setHasOptionsMenu(true) // Hide the activity's Toolbar so that we can make the trick of the translucent navigation and status bars
val activityToolbar: Toolbar? = activity?.findViewById(R.id.toolbar)
// Get a reference to the toolbar, to correctly place the merchants and tellers popup menu activityToolbar?.visibility = View.GONE
mToolbar = activity?.findViewById(R.id.toolbar)
mToolbar?.visibility = View.GONE
// Sets the Navigation and Status bars translucent so that the map can be viewed through them // Sets the Navigation and Status bars translucent so that the map can be viewed through them
val window = activity?.window val window = activity?.window
@ -119,6 +118,11 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
// Set the fragment's toolbar as the activity toolbar just for this fragment
(activity as AppCompatActivity).setSupportActionBar(toolbar)
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
setHasOptionsMenu(true)
// Obtain the SupportMapFragment and get notified when the map is ready to be used. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this) mapFragment.getMapAsync(this)
@ -297,7 +301,7 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback, SearchView.OnSuggestio
if (item?.itemId == R.id.menu_filter) { if (item?.itemId == R.id.menu_filter) {
// Try to show or dismiss the custom popup window with the merchants and tellers switches // Try to show or dismiss the custom popup window with the merchants and tellers switches
if (mPopupWindow?.isShowing == false) if (mPopupWindow?.isShowing == false)
mPopupWindow?.showAsDropDown(mToolbar, screenWidth, -20) mPopupWindow?.showAsDropDown(toolbar, screenWidth, -20)
else else
mPopupWindow?.dismiss() mPopupWindow?.dismiss()
return true return true

View file

@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="#FFFFFF" <vector android:height="24dp" android:tint="?android:textColorPrimary"
android:viewportHeight="24.0" android:viewportWidth="24.0" android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> <path android:fillColor="#FF000000" android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -15,6 +16,7 @@
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:background="@color/semiTransparent" android:background="@color/semiTransparent"
android:elevation="4dp" android:elevation="4dp"
app:title="@string/title_merchants_and_tellers"
android:theme="@style/ThemeOverlay.MaterialComponents" /> android:theme="@style/ThemeOverlay.MaterialComponents" />
<fragment <fragment