taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

DonauStatementFragment.kt (4186B)


      1 /*
      2  * This file is part of GNU Taler
      3  * (C) 2025 Taler Systems S.A.
      4  *
      5  * GNU Taler is free software; you can redistribute it and/or modify it under the
      6  * terms of the GNU General Public License as published by the Free Software
      7  * Foundation; either version 3, or (at your option) any later version.
      8  *
      9  * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
     10  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
     11  * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License along with
     14  * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
     15  */
     16 
     17 package net.taler.wallet.donau
     18 
     19 import android.os.Bundle
     20 import android.view.LayoutInflater
     21 import android.view.View
     22 import android.view.ViewGroup
     23 import androidx.appcompat.app.AppCompatActivity
     24 import androidx.compose.foundation.layout.fillMaxSize
     25 import androidx.compose.foundation.rememberScrollState
     26 import androidx.compose.foundation.verticalScroll
     27 import androidx.compose.runtime.LaunchedEffect
     28 import androidx.compose.runtime.getValue
     29 import androidx.compose.runtime.livedata.observeAsState
     30 import androidx.compose.runtime.mutableIntStateOf
     31 import androidx.compose.runtime.saveable.rememberSaveable
     32 import androidx.compose.runtime.setValue
     33 import androidx.compose.ui.Modifier
     34 import androidx.compose.ui.platform.ComposeView
     35 import androidx.fragment.app.Fragment
     36 import androidx.fragment.app.activityViewModels
     37 import net.taler.wallet.main.MainViewModel
     38 import net.taler.wallet.R
     39 import net.taler.wallet.compose.EmptyComposable
     40 import net.taler.wallet.compose.ErrorComposable
     41 import net.taler.wallet.compose.LoadingScreen
     42 import net.taler.wallet.compose.TalerSurface
     43 import net.taler.wallet.compose.collectAsStateLifecycleAware
     44 
     45 class DonauStatementFragment: Fragment() {
     46     private val model: MainViewModel by activityViewModels()
     47 
     48     private lateinit var host: String
     49 
     50     override fun onCreateView(
     51         inflater: LayoutInflater,
     52         container: ViewGroup?,
     53         savedInstanceState: Bundle?
     54     ): View? = ComposeView(requireContext()).apply {
     55         host = arguments?.getString("host")
     56             ?: error("no host provided")
     57 
     58         val supportActionBar = (requireActivity() as? AppCompatActivity)
     59             ?.supportActionBar
     60 
     61         setContent {
     62             TalerSurface {
     63                 val status by model.donauManager.donauStatementsStatus.collectAsStateLifecycleAware()
     64                 val devMode by model.devMode.observeAsState(false)
     65                 when (val s = status) {
     66                     is GetDonauStatementsStatus.None,
     67                     is GetDonauStatementsStatus.Loading -> LoadingScreen()
     68 
     69                     is GetDonauStatementsStatus.Error -> ErrorComposable(
     70                         error = s.error,
     71                         modifier = Modifier
     72                             .fillMaxSize()
     73                             .verticalScroll(rememberScrollState()),
     74                         devMode = devMode,
     75                     )
     76 
     77                     is GetDonauStatementsStatus.Success -> if (s.statements.isEmpty()) {
     78                         EmptyComposable()
     79                     } else {
     80                         var selectedIndex by rememberSaveable { mutableIntStateOf(0) }
     81                         DonauStatementComposable(
     82                             statements = s.statements,
     83                             selectedIndex = selectedIndex,
     84                         ) { index ->
     85                             selectedIndex = index
     86                         }
     87 
     88                         LaunchedEffect(selectedIndex) {
     89                             supportActionBar?.title = getString(
     90                                 R.string.donau_statement_title_year,
     91                                 s.statements[selectedIndex].year,
     92                             )
     93                         }
     94                     }
     95                 }
     96             }
     97         }
     98     }
     99 
    100     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    101         super.onViewCreated(view, savedInstanceState)
    102         model.donauManager.getDonauStatements(host)
    103     }
    104 }