Просмотр исходного кода

refrator 把导航栏改到 activity 中

RobinTan1024 4 лет назад
Родитель
Сommit
13ca4e715f
19 измененных файлов с 236 добавлено и 290 удалено
  1. 1 1
      app/src/main/java/com/doverfuelingsolutions/issp/view/MainActivity.kt
  2. 7 9
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentBasic.kt
  3. 0 19
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentConstants.kt
  4. 1 1
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentLoading.kt
  5. 3 3
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentNozzle.kt
  6. 6 5
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt
  7. 6 2
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayResult.kt
  8. 4 2
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayScanCode.kt
  9. 7 6
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayType.kt
  10. 3 0
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentReconnect.kt
  11. 3 0
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentSelect.kt
  12. 38 5
      app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/router/FragmentRouter.kt
  13. 14 35
      app/src/main/java/com/doverfuelingsolutions/issp/view/widget/FragmentToolbar.kt
  14. 21 3
      app/src/main/res/layout/activity_main.xml
  15. 9 28
      app/src/main/res/layout/fragment_nozzle.xml
  16. 0 7
      app/src/main/res/layout/fragment_nozzle_orders.xml
  17. 55 77
      app/src/main/res/layout/fragment_pay_result.xml
  18. 52 70
      app/src/main/res/layout/fragment_pay_scan_code.xml
  19. 6 17
      app/src/main/res/layout/fragment_pay_type.xml

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/MainActivity.kt

@@ -69,7 +69,6 @@ class MainActivity : AppCompatActivity(),
         binding.handler = this
         binding.clock.setOnLongClickListener(this)
 
-
         supportActionBar?.hide()
         initView()
         initBanner()
@@ -77,6 +76,7 @@ class MainActivity : AppCompatActivity(),
         FusionManager.onFusionStatus = this
         lifecycle.addObserver(FusionManager)
 
+        fragmentRouter.setFragmentToolbar(binding.fragmentToolbar)
         fragmentRouter.setOnRouteChangeListener(this)
 
         mLoginTokenRefresher.start(this)

+ 7 - 9
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentBasic.kt

@@ -3,21 +3,19 @@ package com.doverfuelingsolutions.issp.view.fragment
 import androidx.annotation.StringRes
 import androidx.appcompat.app.AlertDialog
 import androidx.fragment.app.Fragment
+import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
 import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.util.LoadingDialogBuilder
 
-abstract class FragmentBasic : Fragment() {
+open class FragmentBasic : Fragment() {
 
-    private var mToolbar: FragmentToolbar? = null
-
-    fun setToolBar(toolbar: FragmentToolbar) {
-        mToolbar = toolbar
-        toolbar.setBackHandler { back() }
-        toolbar.setOnCountdownFinish { home() }
-        toolbar.setHomeHandler { home() }
-    }
+    open val title: String = StringUtil.get(R.string.app_name)
+    open val countdownTime: Int = 60
+    open val useActionBar: Boolean = true
+    open val showButtonBack: Boolean = true
+    open val showButtonHome: Boolean = true
 
     fun loading(@StringRes string: Int) = loading(StringUtil.get(string))
     private fun loading(msg: String): AlertDialog {

+ 0 - 19
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentConstants.kt

@@ -1,19 +0,0 @@
-package com.doverfuelingsolutions.issp.view.fragment
-
-class FragmentConstants {
-
-    companion object {
-
-        /* fragment communication */
-        const val EventSearch = "searchBy"
-        const val EventOrderList = "orderList"
-        const val EventPayType = "payType"
-
-        const val searchType = "searchType"
-        const val pumpId = "pumpId"
-        const val order = "order"
-
-        const val typeNozzle = "nozzle"
-        const val typeOil = "oil"
-    }
-}

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentLoading.kt

@@ -26,7 +26,7 @@ class FragmentLoading private constructor(private val msg: String) : Fragment()
     private lateinit var binding: FragmentLoadingBinding
     private val viewModel: FragmentHolderViewModel by viewModels()
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         if (!this::binding.isInitialized) {
             binding = DataBindingUtil.inflate(inflater, R.layout.fragment_loading, container, false)
             binding.lifecycleOwner = viewLifecycleOwner

+ 3 - 3
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentNozzle.kt

@@ -11,6 +11,7 @@ import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.api.entity.PumpInfo
 import com.doverfuelingsolutions.issp.databinding.FragmentNozzleBinding
 import com.doverfuelingsolutions.issp.fusion.FusionManager
+import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.adapter.ChooseListAdapter
 import com.scwang.smart.refresh.header.ClassicsHeader
@@ -23,6 +24,8 @@ class FragmentNozzle private constructor(private val pumpList: List<PumpInfo>) :
         fun build(pumpList: List<PumpInfo>) = FragmentNozzle(pumpList)
     }
 
+    override val title = StringUtil.get(R.string.query_by_nozzle)
+
     private lateinit var binding: FragmentNozzleBinding
     private val chooseList = pumpList.map {
         it.nozzleList.joinToString(", ") { nozzleInfo ->
@@ -46,9 +49,6 @@ class FragmentNozzle private constructor(private val pumpList: List<PumpInfo>) :
             binding.smartRefreshLayout.setEnableLoadMore(false)
             binding.smartRefreshLayout.setRefreshHeader(ClassicsHeader(context))
             binding.smartRefreshLayout.setOnRefreshListener { handleNozzleRefresh() }
-
-            // binding.fragmentToolbar.countdownTime = -1
-            setToolBar(binding.fragmentToolbar)
         }
         return binding.root
     }

+ 6 - 5
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt

@@ -13,6 +13,7 @@ import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.databinding.FragmentNozzleOrdersBinding
 import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
+import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.utils.sp.SPUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.adapter.ChooseListAdapter
@@ -27,6 +28,9 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
         fun build(pumpId: Int) = FragmentOrderList(pumpId)
     }
 
+    override val title = StringUtil.get(R.string.select_pay_order)
+    override val countdownTime: Int = 80
+
     private lateinit var binding: FragmentNozzleOrdersBinding
     val viewModel = FragmentNozzleViewModel().apply {
         pump.value = pumpId
@@ -68,8 +72,6 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
 
             binding.lifecycleOwner = this
             binding.viewModel = viewModel
-
-            setToolBar(binding.fragmentToolbar)
         }
 
         // Adapter has to update if dc is changed in FragmentPayType and route back.
@@ -128,7 +130,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     private fun loadListData() {
         lifecycleScope.launchWhenStarted {
             val dialog = loading(R.string.in_get_order)
-            binding.fragmentToolbar.stopCountdown()
+            (requireActivity() as MainActivity).fragmentRouter.stopFragmentToolbarTimer()
             binding.orderListView.scrollTo(0, 0)
 
             // local cache
@@ -152,7 +154,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
             // remote data
             loadRemoteData()
             dialog.dismiss()
-            binding.fragmentToolbar.resumeCountdown()
+            (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
         }
     }
 
@@ -183,7 +185,6 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     }
 
     class FragmentNozzleViewModel() : ViewModel() {
-        val type = MutableLiveData(FragmentConstants.typeNozzle)
         val pump = MutableLiveData(-1)
         val isNozzle = MutableLiveData(true)
     }

+ 6 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayResult.kt

@@ -13,6 +13,7 @@ import com.doverfuelingsolutions.issp.api.dto.ResultPayment
 import com.doverfuelingsolutions.issp.databinding.FragmentPayResultBinding
 import com.doverfuelingsolutions.issp.driver.lib.PrintManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
+import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.wayne.www.waynelib.fdc.message.DeviceClass
 import kotlinx.android.synthetic.main.widget_fragment_toolbar.*
@@ -30,6 +31,9 @@ class FragmentPayResult private constructor(
         fun build(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean) = FragmentPayResult(dc, posTrxBean)
     }
 
+    override val title: String = StringUtil.get(R.string.pay_success)
+    override val showButtonBack: Boolean = false
+
     private lateinit var binding: FragmentPayResultBinding
     private val viewModel = PayResultViewModel()
 
@@ -42,14 +46,14 @@ class FragmentPayResult private constructor(
         (activity as MainActivity).blockBackPress(true)
     }
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         binding = DataBindingUtil.inflate(inflater, R.layout.fragment_pay_result, container, false)
         binding.lifecycleOwner = this
         binding.viewModel = viewModel
         viewModel.physicalNozzleId.value = dc.nozzleNo
         viewModel.amount.value = posTrxBean.NetAmount
         binding.handler = this
-        setToolBar(binding.fragmentToolbar)
+
         return binding.root
     }
 

+ 4 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayScanCode.kt

@@ -30,6 +30,9 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
         fun build(dc: DeviceClass, posTrx: PosTrx) = FragmentPayScanCode(dc, posTrx)
     }
 
+    override val title = StringUtil.get(R.string.pay_by_qr)
+    override val countdownTime: Int = -1
+
     private lateinit var binding: FragmentPayScanCodeBinding
     private val viewModel = PayScanCodeViewModel()
 
@@ -41,7 +44,7 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
         lifecycleScope.launch { scanCodeManager.create() }
     }
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         if (!this::binding.isInitialized) {
             binding = DataBindingUtil.inflate(inflater, R.layout.fragment_pay_scan_code, container, false)
             binding.lifecycleOwner = this
@@ -54,7 +57,6 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
                 oil.value = dc.productName
                 time.value = dc.endTimeStamp.substring(5)
             }
-            setToolBar(binding.fragmentToolbar)
         }
         return binding.root
     }

+ 7 - 6
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayType.kt

@@ -26,13 +26,14 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
         fun build(dc: DeviceClass) = FragmentPayType(dc)
     }
 
+    override val title = StringUtil.get(R.string.select_pay_type)
+
     private lateinit var binding: FragmentPayTypeBinding
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         if (!this::binding.isInitialized) {
             binding = DataBindingUtil.inflate(inflater, R.layout.fragment_pay_type, container, false)
             binding.handler = this
-            setToolBar(binding.fragmentToolbar)
         }
         return binding.root
     }
@@ -50,7 +51,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
 
     private fun prepareBeforePay() {
         val dialog = loading(R.string.in_process_order)
-        binding.fragmentToolbar.stopCountdown()
+        (requireActivity() as MainActivity).fragmentRouter.stopFragmentToolbarTimer()
 
         lifecycleScope.launch {
             val resultAccumulationInfo = FuelInfoApi.accumulationInfo(dc)
@@ -60,7 +61,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
                 dc.saleEndTime = resultAccumulationInfo.data.SaleEndTime
             } else {
                 dialog.dismiss()
-                binding.fragmentToolbar.resumeCountdown()
+                (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
                 DFSToastUtil.fail(R.string.fail_get_accumulation)
                 return@launch
             }
@@ -74,7 +75,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
                     SPUtil.addWayneOrder(dc, posTrx)
                 } else {
                     dialog.dismiss()
-                    binding.fragmentToolbar.resumeCountdown()
+                    (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
                     DFSToastUtil.fail(StringUtil.get(R.string.fail_behave_reason, StringUtil.get(R.string.make_cloud_order), resultReportPayment.message))
                 }
             }
@@ -83,7 +84,7 @@ class FragmentPayType private constructor(private val dc: DeviceClass): Fragment
             if (posTrx == null) return@launch
             val resultLock = FusionManager.lockOrder(dc, true)
             dialog.dismiss()
-            binding.fragmentToolbar.resumeCountdown()
+            (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
             if (resultLock.success) {
                 dc.state = "Locked"
                 SPUtil.addLockOrder(dc)

+ 3 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentReconnect.kt

@@ -26,6 +26,9 @@ class FragmentReconnect private constructor(
         }
     }
 
+    override val useActionBar: Boolean = false
+    override val countdownTime: Int = -1
+
     private lateinit var binding: FragmentReconnectBinding
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {

+ 3 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentSelect.kt

@@ -20,6 +20,9 @@ class FragmentSelect : FragmentBasic(),
     View.OnLongClickListener,
     View.OnClickListener {
 
+    override val useActionBar: Boolean = false
+    override val countdownTime: Int = -1
+
     private lateinit var binding: FragmentSearchTypeBinding
     private val viewModel: SearchTypeViewModel by viewModels()
 

+ 38 - 5
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/router/FragmentRouter.kt

@@ -1,19 +1,23 @@
 package com.doverfuelingsolutions.issp.view.fragment.router
 
 import android.content.Context
+import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleObserver
 import androidx.lifecycle.OnLifecycleEvent
-import com.doverfuelingsolutions.issp.utils.log.DFSLog
+import com.doverfuelingsolutions.issp.view.fragment.FragmentBasic
+import com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
 
 class FragmentRouter(
     private val activity: AppCompatActivity,
     private val fragmentViewId: Int,
 ) : LifecycleObserver {
 
+    private var fragmentToolbar: FragmentToolbar? = null
+
     private var isNavigateForward = true
     private var mOnRouteChangeListener: OnRouteChangeListener? = null
     private val fragmentList = arrayListOf<Fragment>()
@@ -22,12 +26,17 @@ class FragmentRouter(
             isNavigateForward = true
             fragmentList.add(f)
             mOnRouteChangeListener?.onRouteForward()
+
+            handleToolbarAsRoute(f as FragmentBasic)
         }
 
         override fun onFragmentDetached(fm: FragmentManager, f: Fragment) {
             isNavigateForward = false
+            val index = fragmentList.indexOf(f)
             fragmentList.remove(f)
             mOnRouteChangeListener?.onRouteBackward(fragmentList.size <= 1)
+
+            if (index >= 1) handleToolbarAsRoute(fragmentList[index - 1] as FragmentBasic)
         }
     }
 
@@ -40,6 +49,7 @@ class FragmentRouter(
 
     @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
     private fun destroy() {
+        fragmentToolbar = null
         mOnRouteChangeListener = null
         activity.supportFragmentManager.unregisterFragmentLifecycleCallbacks(fragmentEvent)
     }
@@ -55,13 +65,10 @@ class FragmentRouter(
         }
     }
 
-    fun pop() : Boolean {
+    fun pop() {
         if (fragmentList.size > 1) {
             activity.supportFragmentManager.popBackStack()
-            return true
         }
-
-        return false
     }
 
     fun popBottom() {
@@ -72,4 +79,30 @@ class FragmentRouter(
     fun setOnRouteChangeListener(listener: OnRouteChangeListener) {
         mOnRouteChangeListener = listener
     }
+
+    fun setFragmentToolbar(toolbar: FragmentToolbar) {
+        fragmentToolbar = toolbar
+        fragmentToolbar?.homeHandler = this::popBottom
+        fragmentToolbar?.backHandler = this::pop
+    }
+
+    fun stopFragmentToolbarTimer() {
+        fragmentToolbar?.stopCountdown()
+    }
+
+    fun resumeFragmentToolbarTimer() {
+        fragmentToolbar?.resumeCountdown()
+    }
+
+    private fun handleToolbarAsRoute(fragment: FragmentBasic) {
+        if (fragmentToolbar == null) return
+
+        // 处理前面设置下的逻辑
+        val isFirst = fragmentList.size == 1
+        fragmentToolbar?.visibility =  if (fragment.useActionBar) View.VISIBLE else View.GONE
+        fragmentToolbar?.isBackVisible = !isFirst && fragment.showButtonBack
+        fragmentToolbar?.isHomeVisible = fragment.showButtonHome
+        fragmentToolbar?.countdownTime = fragment.countdownTime
+        fragmentToolbar?.startCountdown(fragment.countdownTime)
+    }
 }

+ 14 - 35
app/src/main/java/com/doverfuelingsolutions/issp/view/widget/FragmentToolbar.kt

@@ -1,13 +1,11 @@
 package com.doverfuelingsolutions.issp.view.widget
 
 import android.content.Context
-import android.media.AudioManager
 import android.util.AttributeSet
 import android.view.SoundEffectConstants
 import android.view.View
 import android.widget.FrameLayout
 import com.doverfuelingsolutions.issp.R
-import com.doverfuelingsolutions.issp.utils.log.DFSLog
 import kotlinx.android.synthetic.main.widget_fragment_toolbar.view.*
 import kotlinx.coroutines.*
 
@@ -15,12 +13,12 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
 
     val view: View = View.inflate(context, R.layout.widget_fragment_toolbar, this)
 
-    private var isBackVisible = true
+    var isBackVisible = true
         set(value) {
             field = value
             buttonBack.visibility = if (value) VISIBLE else GONE
         }
-    private var isHomeVisible = true
+    var isHomeVisible = true
         set(value) {
             field = value
             buttonHome.visibility = if (value) VISIBLE else GONE
@@ -44,10 +42,9 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
         }
     private var currentTime: Int = 0
     private var countdownAutoStart = true
-    private var countdownEvent: (() -> Unit)? = null
 
-    private var backHandler: (() -> Unit)? = null
-    private var homeHandler: (() -> Unit)? = null
+    var backHandler: (() -> Unit)? = null
+    var homeHandler: (() -> Unit)? = null
 
     init {
         context.theme.obtainStyledAttributes(attrs, R.styleable.FragmentToolbar, 0, 0).apply {
@@ -74,22 +71,16 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
         }
     }
 
-    private lateinit var job: Job
+    private var job: Job? = null
 
-    override fun onAttachedToWindow() {
-        super.onAttachedToWindow()
-        startCountdown()
-    }
-
-    override fun onDetachedFromWindow() {
-        super.onDetachedFromWindow()
+    fun startCountdown(repeatTime: Int = countdownTime) {
         stopCountdown()
-    }
-
-    private fun startCountdown(repeatTime: Int = countdownTime) {
-        if (repeatTime <= 0) return
+        if (repeatTime <= 0) {
+            isTimerVisible = false
+            return
+        }
 
-        stopCountdown()
+        currentTime = repeatTime
         job = GlobalScope.launch(Dispatchers.Main) {
             repeat(repeatTime) {
                 val num = repeatTime - it
@@ -98,31 +89,19 @@ class FragmentToolbar(context: Context, attrs: AttributeSet) : FrameLayout(conte
                 delay(1000)
                 if (num <= 1) {
                     stopCountdown()
-                    countdownEvent?.invoke()
+                    homeHandler?.invoke()
                 }
             }
         }
     }
 
     fun stopCountdown() {
-        if (this::job.isInitialized && job.isActive) {
-            job.cancel()
+        if (job?.isActive == true) {
+            job?.cancel()
         }
     }
 
     fun resumeCountdown() {
         startCountdown(currentTime)
     }
-
-    fun setOnCountdownFinish(listener: () -> Unit) {
-        countdownEvent = listener
-    }
-
-    fun setBackHandler(handler: () -> Unit) {
-        backHandler = handler
-    }
-
-    fun setHomeHandler(handler: () -> Unit) {
-        homeHandler = handler
-    }
 }

+ 21 - 3
app/src/main/res/layout/activity_main.xml

@@ -83,11 +83,29 @@
                 android:layout_weight="1"
                 app:banner_loop_time="7000" />
 
-            <androidx.fragment.app.FragmentContainerView
-                android:id="@+id/fragmentBox"
+            <androidx.constraintlayout.widget.ConstraintLayout
                 android:layout_width="match_parent"
                 android:layout_height="0dp"
-                android:layout_weight="2" />
+                android:layout_weight="2">
+
+                <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
+                    android:id="@+id/fragmentToolbar"
+                    android:layout_width="0dp"
+                    app:countdownTime="60"
+                    android:layout_height="wrap_content"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.fragment.app.FragmentContainerView
+                    android:id="@+id/fragmentBox"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/fragmentToolbar" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
         </LinearLayout>
     </LinearLayout>
 </layout>

+ 9 - 28
app/src/main/res/layout/fragment_nozzle.xml

@@ -7,34 +7,15 @@
 
     </data>
 
-    <androidx.constraintlayout.widget.ConstraintLayout style="@style/match">
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/smartRefreshLayout"
+        style="@style/match">
 
-        <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
-            android:id="@+id/fragmentToolbar"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            app:countdownTime="60"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:title="@string/query_by_nozzle" />
+        <com.scwang.smart.refresh.header.ClassicsHeader style="@style/fullWidth" />
 
-        <com.scwang.smart.refresh.layout.SmartRefreshLayout
-            android:id="@+id/smartRefreshLayout"
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/fragmentToolbar">
-
-            <com.scwang.smart.refresh.header.ClassicsHeader style="@style/fullWidth" />
-
-            <androidx.recyclerview.widget.RecyclerView
-                android:id="@+id/nozzleList"
-                style="@style/match"
-                android:paddingHorizontal="10dp" />
-        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
-    </androidx.constraintlayout.widget.ConstraintLayout>
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/nozzleList"
+            style="@style/match"
+            android:paddingHorizontal="10dp" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
 </layout>

+ 0 - 7
app/src/main/res/layout/fragment_nozzle_orders.xml

@@ -17,13 +17,6 @@
         android:orientation="vertical"
         android:weightSum="1">
 
-        <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
-            android:id="@+id/fragmentToolbar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:countdownTime="60"
-            app:title="@string/select_pay_order" />
-
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/oilList"
             style="@style/fullWidth"

+ 55 - 77
app/src/main/res/layout/fragment_pay_result.xml

@@ -15,92 +15,70 @@
             type="com.doverfuelingsolutions.issp.view.fragment.FragmentPayResult.PayResultViewModel" />
     </data>
 
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
+    <LinearLayout
+        style="@style/match"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:paddingTop="100dp">
 
-        <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
-            android:id="@+id/fragmentToolbar"
-            android:layout_width="0dp"
+        <ImageView
+            android:layout_width="340dp"
+            android:layout_height="300dp"
+            android:contentDescription="@string/success"
+            android:scaleType="center"
+            android:src="@mipmap/ic_pay_success" />
+
+        <TextView
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            app:backVisible="false"
-            app:countdownTime="60"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:title="@string/pay_success" />
+            android:layout_marginTop="80dp"
+            android:text="@string/pay_result_success_tip_2"
+            android:textColor="@color/colorYellow"
+            android:textSize="58sp" />
 
-        <LinearLayout
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            android:gravity="center_horizontal"
-            android:orientation="vertical"
-            android:paddingTop="100dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/fragmentToolbar">
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="40dp"
+            android:layout_marginBottom="30dp"
+            android:text="@{@string/pay_result_success_tip_1(viewModel.physicalNozzleId, viewModel.amount.toString()), default=@string/pay_result_success_tip_1}"
+            android:textSize="48sp" />
 
-            <ImageView
-                android:layout_width="340dp"
-                android:layout_height="300dp"
-                android:contentDescription="@string/success"
-                android:scaleType="center"
-                android:src="@mipmap/ic_pay_success" />
+        <!--<TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/pay_order_is"
+            android:textSize="36sp" />-->
 
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="80dp"
-                android:text="@string/pay_result_success_tip_2"
-                android:textColor="@color/colorYellow"
-                android:textSize="58sp" />
 
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="40dp"
-                android:layout_marginBottom="30dp"
-                android:text="@{@string/pay_result_success_tip_1(viewModel.physicalNozzleId, viewModel.amount.toString()), default=@string/pay_result_success_tip_1}"
-                android:textSize="48sp" />
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="80dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
 
-            <!--<TextView
+            <Button
+                android:id="@+id/buttonRePrint"
+                style="@style/Widget.MaterialComponents.Button"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/pay_order_is"
-                android:textSize="36sp" />-->
-
+                android:layout_height="84dp"
+                android:layout_marginEnd="50dp"
+                android:onClick="@{handler.onClick}"
+                android:paddingHorizontal="50dp"
+                android:text="@string/reprint"
+                android:textSize="32sp"
+                android:visibility="@{viewModel.isReprint ? View.VISIBLE : View.GONE}" />
 
-            <LinearLayout
+            <Button
+                android:id="@+id/buttonFinish"
+                style="@style/Widget.MaterialComponents.Button"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="80dp"
-                android:gravity="center_vertical"
-                android:orientation="horizontal">
-
-                <Button
-                    android:id="@+id/buttonRePrint"
-                    style="@style/Widget.MaterialComponents.Button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="84dp"
-                    android:layout_marginEnd="50dp"
-                    android:onClick="@{handler.onClick}"
-                    android:paddingHorizontal="50dp"
-                    android:text="@string/reprint"
-                    android:textSize="32sp"
-                    android:visibility="@{viewModel.isReprint ? View.VISIBLE : View.GONE}" />
-
-                <Button
-                    android:id="@+id/buttonFinish"
-                    style="@style/Widget.MaterialComponents.Button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="84dp"
-                    android:onClick="@{handler.onClick}"
-                    android:paddingHorizontal="80dp"
-                    android:text="@string/finish"
-                    android:textSize="32sp" />
-            </LinearLayout>
+                android:layout_height="84dp"
+                android:onClick="@{handler.onClick}"
+                android:paddingHorizontal="80dp"
+                android:text="@string/finish"
+                android:textSize="32sp" />
         </LinearLayout>
-    </androidx.constraintlayout.widget.ConstraintLayout>
+    </LinearLayout>
 </layout>

+ 52 - 70
app/src/main/res/layout/fragment_pay_scan_code.xml

@@ -10,91 +10,73 @@
             type="com.doverfuelingsolutions.issp.view.fragment.FragmentPayScanCode.PayScanCodeViewModel" />
     </data>
 
-    <androidx.constraintlayout.widget.ConstraintLayout style="@style/match">
+    <androidx.appcompat.widget.LinearLayoutCompat
+        style="@style/match"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
 
-        <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
-            android:id="@+id/fragmentToolbar"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            app:countdownTime="-1"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:title="@string/pay_by_qr" />
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="280dp"
+            android:layout_height="280dp"
+            android:src="@mipmap/ic_paying" />
 
-        <androidx.appcompat.widget.LinearLayoutCompat
+        <androidx.appcompat.widget.AppCompatTextView
+            style="@style/wrap"
+            android:layout_marginTop="70dp"
+            android:text="@{@string/amount_with_discount(viewModel.amount, viewModel.discount), default=@string/amount_with_discount}"
+            android:textSize="42sp" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            style="@style/wrap"
+            android:layout_marginTop="40dp"
+            android:text="@{@string/amount_pay(viewModel.netAmount), default=@string/amount_pay}"
+            android:textColor="@color/colorYellow"
+            android:textSize="72sp" />
+
+        <androidx.appcompat.widget.AppCompatTextView
             style="@style/wrap"
-            android:gravity="center_horizontal"
-            android:orientation="vertical"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/fragmentToolbar">
+            android:layout_marginTop="100dp"
+            android:paddingHorizontal="42dp"
+            android:paddingVertical="8dp"
+            android:text="@{viewModel.scanTip, default=@string/plz_scan}"
+            android:textSize="54sp" />
 
-            <androidx.appcompat.widget.AppCompatImageView
-                android:layout_width="280dp"
-                android:layout_height="280dp"
-                android:src="@mipmap/ic_paying" />
+        <androidx.appcompat.widget.LinearLayoutCompat
+            style="@style/wrap"
+            android:background="@drawable/border_gray"
+            android:orientation="horizontal"
+            android:paddingVertical="16dp"
+            android:layout_marginTop="120dp"
+            app:divider="@drawable/divider_gray"
+            app:showDividers="middle">
 
             <androidx.appcompat.widget.AppCompatTextView
                 style="@style/wrap"
-                android:layout_marginTop="70dp"
-                android:text="@{@string/amount_with_discount(viewModel.amount, viewModel.discount), default=@string/amount_with_discount}"
-                android:textSize="42sp" />
+                android:paddingHorizontal="32dp"
+                android:paddingVertical="8dp"
+                android:text="@{@string/nozzle_name(viewModel.nozzle), default=@string/example_nozzle_name}"
+                android:textSize="28sp" />
 
             <androidx.appcompat.widget.AppCompatTextView
                 style="@style/wrap"
-                android:layout_marginTop="40dp"
-                android:text="@{@string/amount_pay(viewModel.netAmount), default=@string/amount_pay}"
-                android:textColor="@color/colorYellow"
-                android:textSize="72sp" />
+                android:paddingHorizontal="32dp"
+                android:paddingVertical="8dp"
+                android:text="@{@string/order_info_oil(viewModel.oil), default=@string/order_info_oil}"
+                android:textSize="28sp" />
 
             <androidx.appcompat.widget.AppCompatTextView
                 style="@style/wrap"
-                android:layout_marginTop="100dp"
-                android:paddingHorizontal="42dp"
+                android:paddingHorizontal="32dp"
                 android:paddingVertical="8dp"
-                android:text="@{viewModel.scanTip, default=@string/plz_scan}"
-                android:textSize="54sp" />
+                android:text="@{@string/order_info_volume(viewModel.volume), default=@string/order_info_volume}"
+                android:textSize="28sp" />
 
-            <androidx.appcompat.widget.LinearLayoutCompat
+            <androidx.appcompat.widget.AppCompatTextView
                 style="@style/wrap"
-                android:background="@drawable/border_gray"
-                android:orientation="horizontal"
-                android:paddingVertical="16dp"
-                android:layout_marginTop="120dp"
-                app:divider="@drawable/divider_gray"
-                app:showDividers="middle">
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    style="@style/wrap"
-                    android:paddingHorizontal="32dp"
-                    android:paddingVertical="8dp"
-                    android:text="@{@string/nozzle_name(viewModel.nozzle), default=@string/example_nozzle_name}"
-                    android:textSize="28sp" />
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    style="@style/wrap"
-                    android:paddingHorizontal="32dp"
-                    android:paddingVertical="8dp"
-                    android:text="@{@string/order_info_oil(viewModel.oil), default=@string/order_info_oil}"
-                    android:textSize="28sp" />
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    style="@style/wrap"
-                    android:paddingHorizontal="32dp"
-                    android:paddingVertical="8dp"
-                    android:text="@{@string/order_info_volume(viewModel.volume), default=@string/order_info_volume}"
-                    android:textSize="28sp" />
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    style="@style/wrap"
-                    android:paddingHorizontal="32dp"
-                    android:paddingVertical="8dp"
-                    android:text="@{@string/order_info_time(viewModel.time), default=@string/order_info_time}"
-                    android:textSize="28sp" />
-            </androidx.appcompat.widget.LinearLayoutCompat>
+                android:paddingHorizontal="32dp"
+                android:paddingVertical="8dp"
+                android:text="@{@string/order_info_time(viewModel.time), default=@string/order_info_time}"
+                android:textSize="28sp" />
         </androidx.appcompat.widget.LinearLayoutCompat>
-    </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.appcompat.widget.LinearLayoutCompat>
 </layout>

+ 6 - 17
app/src/main/res/layout/fragment_pay_type.xml

@@ -12,18 +12,7 @@
 
     <androidx.constraintlayout.widget.ConstraintLayout style="@style/match">
 
-        <com.doverfuelingsolutions.issp.view.widget.FragmentToolbar
-            android:id="@+id/fragmentToolbar"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            app:countdownTime="60"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:title="@string/select_pay_type" />
-
-        <androidx.appcompat.widget.LinearLayoutCompat
+        <LinearLayout
             style="@style/wrap"
             android:gravity="center_horizontal"
             android:orientation="horizontal"
@@ -32,7 +21,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent">
 
-            <androidx.appcompat.widget.LinearLayoutCompat
+            <LinearLayout
                 android:id="@+id/payTypeScanCode"
                 style="@style/wrap"
                 android:gravity="center_horizontal"
@@ -51,9 +40,9 @@
                     android:text="@string/pay_by_qr"
                     android:textColor="@color/color555"
                     android:textSize="48sp" />
-            </androidx.appcompat.widget.LinearLayoutCompat>
+            </LinearLayout>
 
-            <androidx.appcompat.widget.LinearLayoutCompat
+            <LinearLayout
                 android:id="@+id/payTypeAliFace"
                 style="@style/wrap"
                 android:layout_marginStart="120dp"
@@ -77,7 +66,7 @@
                     android:text="@string/pay_by_ali_face"
                     android:textColor="@color/color555"
                     android:textSize="48sp" />
-            </androidx.appcompat.widget.LinearLayoutCompat>
-        </androidx.appcompat.widget.LinearLayoutCompat>
+            </LinearLayout>
+        </LinearLayout>
     </androidx.constraintlayout.widget.ConstraintLayout>
 </layout>