gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant-terminal-android] branch master updated: Fix navigation


From: gnunet
Subject: [taler-merchant-terminal-android] branch master updated: Fix navigation and use official passwordless sample config
Date: Wed, 04 Mar 2020 16:52:51 +0100

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository merchant-terminal-android.

The following commit(s) were added to refs/heads/master by this push:
     new b87319c  Fix navigation and use official passwordless sample config
b87319c is described below

commit b87319c0a437e7a72f52384e689c8e2971060cff
Author: Torsten Grote <address@hidden>
AuthorDate: Wed Mar 4 12:52:27 2020 -0300

    Fix navigation and use official passwordless sample config
---
 .../java/net/taler/merchantpos/MainActivity.kt     | 18 +++----
 .../java/net/taler/merchantpos/MainViewModel.kt    |  6 ---
 .../java/net/taler/merchantpos/MerchantHistory.kt  |  3 +-
 app/src/main/java/net/taler/merchantpos/Utils.kt   |  4 ++
 .../merchantpos/config/ConfigFetcherFragment.kt    |  8 +--
 .../net/taler/merchantpos/config/ConfigManager.kt  | 20 +++-----
 .../merchantpos/config/MerchantConfigFragment.kt   |  4 +-
 .../net/taler/merchantpos/order/OrderFragment.kt   | 12 +++--
 .../net/taler/merchantpos/order/OrderManager.kt    |  8 +--
 .../merchantpos/payment/ProcessPaymentFragment.kt  |  5 +-
 app/src/main/res/navigation/nav_graph.xml          | 57 ++++++++++++++--------
 build.gradle                                       |  4 +-
 12 files changed, 80 insertions(+), 69 deletions(-)

diff --git a/app/src/main/java/net/taler/merchantpos/MainActivity.kt 
b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
index 1fb4653..496f551 100644
--- a/app/src/main/java/net/taler/merchantpos/MainActivity.kt
+++ b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
@@ -46,22 +46,17 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener {
 
         nav_view.setupWithNavController(nav)
         nav_view.setNavigationItemSelectedListener(this)
-        if (savedInstanceState == null) {
-            nav_view.menu.getItem(0).isChecked = true
-        }
 
         setSupportActionBar(toolbar)
-        val appBarConfiguration = AppBarConfiguration(
-            setOf(R.id.order, R.id.merchantSettings, R.id.merchantHistory), 
drawer_layout
-        )
+        val appBarConfiguration = AppBarConfiguration(nav.graph, drawer_layout)
         toolbar.setupWithNavController(nav, appBarConfiguration)
     }
 
     override fun onStart() {
         super.onStart()
-        if (model.configManager.needsConfig()) {
+        if (!model.configManager.config.isValid() && 
nav.currentDestination?.id != R.id.nav_settings) {
             nav.navigate(R.id.action_global_merchantSettings)
-        } else if (model.configManager.merchantConfig == null) {
+        } else if (model.configManager.merchantConfig == null && 
nav.currentDestination?.id != R.id.configFetcher) {
             nav.navigate(R.id.action_global_configFetcher)
         }
     }
@@ -78,7 +73,6 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener {
     }
 
     override fun onNavigationItemSelected(item: MenuItem): Boolean {
-        // Handle navigation view item clicks here.
         when (item.itemId) {
             R.id.nav_order -> nav.navigate(R.id.action_global_order)
             R.id.nav_history -> 
nav.navigate(R.id.action_global_merchantHistory)
@@ -89,18 +83,20 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener {
     }
 
     override fun onBackPressed() {
+        val currentDestination = nav.currentDestination?.id
         if (drawer_layout.isDrawerOpen(START)) {
             drawer_layout.closeDrawer(START)
-        } else if (nav.currentDestination?.id == R.id.merchantSettings && 
model.configManager.needsConfig()) {
+        } else if (currentDestination == R.id.nav_settings && 
!model.configManager.config.isValid()) {
             // we are in the configuration screen and need a config to continue
             val intent = Intent(ACTION_MAIN).apply {
                 addCategory(CATEGORY_HOME)
                 flags = FLAG_ACTIVITY_NEW_TASK
             }
             startActivity(intent)
-        } else if (nav.currentDestination?.id == R.id.order) {
+        } else if (currentDestination == R.id.nav_order) {
             if (reallyExit) super.onBackPressed()
             else {
+                // this closes the app and causes orders to be lost, so let's 
confirm first
                 reallyExit = true
                 Toast.makeText(this, R.string.toast_back_to_exit, 
LENGTH_SHORT).show()
                 Handler().postDelayed({ reallyExit = false }, 3000)
diff --git a/app/src/main/java/net/taler/merchantpos/MainViewModel.kt 
b/app/src/main/java/net/taler/merchantpos/MainViewModel.kt
index f4f792b..3aa9f9f 100644
--- a/app/src/main/java/net/taler/merchantpos/MainViewModel.kt
+++ b/app/src/main/java/net/taler/merchantpos/MainViewModel.kt
@@ -24,12 +24,6 @@ class MainViewModel(app: Application) : 
AndroidViewModel(app) {
     }
     val paymentManager = PaymentManager(configManager, queue, mapper)
 
-    init {
-        if (configManager.merchantConfig == null && 
configManager.config.isValid()) {
-            configManager.fetchConfig(configManager.config, false)
-        }
-    }
-
     override fun onCleared() {
         queue.cancelAll { !it.isCanceled }
     }
diff --git a/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt 
b/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
index 27f8a98..8fb8fb3 100644
--- a/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
+++ b/app/src/main/java/net/taler/merchantpos/MerchantHistory.kt
@@ -25,6 +25,7 @@ import com.google.android.material.snackbar.Snackbar
 import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
 import kotlinx.android.synthetic.main.fragment_merchant_history.*
 import net.taler.merchantpos.HistoryItemAdapter.HistoryItemViewHolder
+import 
net.taler.merchantpos.MerchantHistoryDirections.Companion.actionGlobalMerchantSettings
 import net.taler.merchantpos.config.MerchantRequest
 import org.json.JSONObject
 import java.time.Instant
@@ -84,7 +85,7 @@ class MerchantHistory : Fragment() {
     override fun onStart() {
         super.onStart()
         if (model.configManager.merchantConfig?.instance == null) {
-            findNavController().navigate(R.id.action_global_merchantSettings)
+            actionGlobalMerchantSettings().navigate(findNavController())
         } else {
             fetchHistory()
         }
diff --git a/app/src/main/java/net/taler/merchantpos/Utils.kt 
b/app/src/main/java/net/taler/merchantpos/Utils.kt
index 948120e..98d1751 100644
--- a/app/src/main/java/net/taler/merchantpos/Utils.kt
+++ b/app/src/main/java/net/taler/merchantpos/Utils.kt
@@ -7,6 +7,8 @@ import androidx.annotation.StringRes
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MediatorLiveData
 import androidx.lifecycle.Observer
+import androidx.navigation.NavController
+import androidx.navigation.NavDirections
 import 
com.google.android.material.snackbar.BaseTransientBottomBar.ANIMATION_MODE_FADE
 import com.google.android.material.snackbar.BaseTransientBottomBar.Duration
 import com.google.android.material.snackbar.Snackbar.make
@@ -77,6 +79,8 @@ fun topSnackbar(view: View, @StringRes resId: Int, @Duration 
duration: Int) {
     topSnackbar(view, view.resources.getText(resId), duration)
 }
 
+fun NavDirections.navigate(nav: NavController) = nav.navigate(this)
+
 class CombinedLiveData<T, K, S>(
     source1: LiveData<T>,
     source2: LiveData<K>,
diff --git 
a/app/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt 
b/app/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt
index e233c13..ccadb8b 100644
--- a/app/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/config/ConfigFetcherFragment.kt
@@ -12,7 +12,9 @@ import com.google.android.material.snackbar.Snackbar
 import com.google.android.material.snackbar.Snackbar.LENGTH_SHORT
 import net.taler.merchantpos.MainViewModel
 import net.taler.merchantpos.R
+import 
net.taler.merchantpos.config.ConfigFetcherFragmentDirections.Companion.actionConfigFetcherToMerchantSettings
 import 
net.taler.merchantpos.config.ConfigFetcherFragmentDirections.Companion.actionConfigFetcherToOrder
+import net.taler.merchantpos.navigate
 
 class ConfigFetcherFragment : Fragment() {
 
@@ -28,12 +30,12 @@ class ConfigFetcherFragment : Fragment() {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
-
+        configManager.fetchConfig(configManager.config, false)
         configManager.configUpdateResult.observe(viewLifecycleOwner, Observer 
{ result ->
             when {
                 result == null -> return@Observer
                 result.error -> onNetworkError(result.authError)
-                else -> actionConfigFetcherToOrder().let { 
findNavController().navigate(it) }
+                else -> 
actionConfigFetcherToOrder().navigate(findNavController())
             }
         })
     }
@@ -41,7 +43,7 @@ class ConfigFetcherFragment : Fragment() {
     private fun onNetworkError(authError: Boolean) {
         val res = if (authError) R.string.config_auth_error else 
R.string.config_error
         Snackbar.make(view!!, res, LENGTH_SHORT).show()
-        
findNavController().navigate(R.id.action_configFetcher_to_merchantSettings)
+        actionConfigFetcherToMerchantSettings().navigate(findNavController())
     }
 
 }
diff --git a/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt 
b/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
index 1016465..f8d5629 100644
--- a/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
@@ -27,9 +27,9 @@ private const val SETTINGS_CONFIG_URL = "configUrl"
 private const val SETTINGS_USERNAME = "username"
 private const val SETTINGS_PASSWORD = "password"
 
-internal const val CONFIG_URL_DEMO = "https://grobox.de/taler/pos.json";
-internal const val CONFIG_USERNAME_DEMO = "torsten"
-internal const val CONFIG_PASSWORD_DEMO = "test"
+internal const val CONFIG_URL_DEMO = 
"https://docs.taler.net/_static/sample-pos-config.json";
+internal const val CONFIG_USERNAME_DEMO = ""
+internal const val CONFIG_PASSWORD_DEMO = ""
 
 private val TAG = ConfigManager::class.java.simpleName
 
@@ -51,9 +51,9 @@ class ConfigManager(
     private val configurationReceivers = ArrayList<ConfigurationReceiver>()
 
     var config = Config(
-        configUrl = prefs.getString(SETTINGS_CONFIG_URL, "")!!,
-        username = prefs.getString(SETTINGS_USERNAME, "")!!,
-        password = prefs.getString(SETTINGS_PASSWORD, "")!!
+        configUrl = prefs.getString(SETTINGS_CONFIG_URL, CONFIG_URL_DEMO)!!,
+        username = prefs.getString(SETTINGS_USERNAME, CONFIG_USERNAME_DEMO)!!,
+        password = prefs.getString(SETTINGS_PASSWORD, CONFIG_PASSWORD_DEMO)!!
     )
     var merchantConfig: MerchantConfig? = null
         private set
@@ -65,14 +65,6 @@ class ConfigManager(
         configurationReceivers.add(receiver)
     }
 
-    /**
-     * Returns true if the user needs to provide more configuration
-     * and false if the configuration is sufficient to continue.
-     */
-    fun needsConfig(): Boolean {
-        return !config.isValid() || (!config.hasPassword() && merchantConfig 
== null)
-    }
-
     @UiThread
     fun fetchConfig(config: Config, save: Boolean, savePassword: Boolean = 
false) {
         mConfigUpdateResult.value = null
diff --git 
a/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt 
b/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
index bd99754..8bbc70d 100644
--- a/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/config/MerchantConfigFragment.kt
@@ -17,6 +17,8 @@ import com.google.android.material.snackbar.Snackbar
 import kotlinx.android.synthetic.main.fragment_merchant_config.*
 import net.taler.merchantpos.MainViewModel
 import net.taler.merchantpos.R
+import 
net.taler.merchantpos.config.MerchantConfigFragmentDirections.Companion.actionSettingsToOrder
+import net.taler.merchantpos.navigate
 import net.taler.merchantpos.topSnackbar
 
 /**
@@ -101,7 +103,7 @@ class MerchantConfigFragment : Fragment() {
         onResultReceived()
         updateView()
         topSnackbar(view!!, getString(R.string.config_changed, currency), 
LENGTH_LONG)
-        findNavController().navigate(R.id.order)
+        actionSettingsToOrder().navigate(findNavController())
     }
 
     private fun onNetworkError(authError: Boolean) {
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt 
b/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
index 42d060d..a2d4169 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderFragment.kt
@@ -12,6 +12,10 @@ import 
androidx.transition.TransitionManager.beginDelayedTransition
 import kotlinx.android.synthetic.main.fragment_order.*
 import net.taler.merchantpos.MainViewModel
 import net.taler.merchantpos.R
+import net.taler.merchantpos.navigate
+import 
net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionGlobalConfigFetcher
+import 
net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionOrderToMerchantSettings
+import 
net.taler.merchantpos.order.OrderFragmentDirections.Companion.actionOrderToProcessPayment
 import net.taler.merchantpos.order.RestartState.ENABLED
 import net.taler.merchantpos.order.RestartState.UNDO
 
@@ -44,8 +48,10 @@ class OrderFragment : Fragment() {
 
     override fun onStart() {
         super.onStart()
-        if (viewModel.configManager.needsConfig() || 
viewModel.configManager.merchantConfig?.currency == null) {
-            findNavController().navigate(R.id.action_global_merchantSettings)
+        if (!viewModel.configManager.config.isValid()) {
+            actionOrderToMerchantSettings().navigate(findNavController())
+        } else if (viewModel.configManager.merchantConfig?.currency == null) {
+            actionGlobalConfigFetcher().navigate(findNavController())
         }
     }
 
@@ -86,7 +92,7 @@ class OrderFragment : Fragment() {
         completeButton.setOnClickListener {
             val order = liveOrder.order.value ?: return@setOnClickListener
             paymentManager.createPayment(order)
-            findNavController().navigate(R.id.action_order_to_processPayment)
+            actionOrderToProcessPayment().navigate(findNavController())
         }
     }
 
diff --git a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt 
b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
index 21738bb..ab561e2 100644
--- a/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
+++ b/app/src/main/java/net/taler/merchantpos/order/OrderManager.kt
@@ -81,9 +81,11 @@ class OrderManager(private val mapper: ObjectMapper) : 
ConfigurationReceiver {
             mCategories.postValue(categories)
             mProducts.postValue(productsByCategory[categories[0]])
             // Initialize first empty order, note this won't work when 
updating config mid-flight
-            val id = orderCounter++
-            orders[id] = MutableLiveOrder(id, productsByCategory)
-            mCurrentOrderId.postValue(id)
+            if (orders.isEmpty()) {
+                val id = orderCounter++
+                orders[id] = MutableLiveOrder(id, productsByCategory)
+                mCurrentOrderId.postValue(id)
+            }
             true
         } else {
             false
diff --git 
a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt 
b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
index 8eb7e97..8589de6 100644
--- a/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
+++ b/app/src/main/java/net/taler/merchantpos/payment/ProcessPaymentFragment.kt
@@ -17,6 +17,7 @@ import net.taler.merchantpos.QrCodeManager.makeQrCode
 import net.taler.merchantpos.R
 import net.taler.merchantpos.fadeIn
 import net.taler.merchantpos.fadeOut
+import net.taler.merchantpos.navigate
 import 
net.taler.merchantpos.payment.ProcessPaymentFragmentDirections.Companion.actionProcessPaymentToPaymentSuccess
 import net.taler.merchantpos.topSnackbar
 
@@ -52,9 +53,7 @@ class ProcessPaymentFragment : Fragment() {
         }
         if (payment.paid) {
             model.orderManager.onOrderPaid(payment.order.id)
-            actionProcessPaymentToPaymentSuccess().let {
-                findNavController().navigate(it)
-            }
+            
actionProcessPaymentToPaymentSuccess().navigate(findNavController())
             return
         }
         payIntroView.fadeIn()
diff --git a/app/src/main/res/navigation/nav_graph.xml 
b/app/src/main/res/navigation/nav_graph.xml
index 59a3f29..1c384db 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -3,26 +3,27 @@
         xmlns:app="http://schemas.android.com/apk/res-auto";
         xmlns:tools="http://schemas.android.com/tools";
         android:id="@+id/nav_graph"
-        app:startDestination="@id/order"
+        app:startDestination="@+id/nav_order"
         tools:ignore="UnusedNavigation">
 
     <fragment
-            android:id="@+id/order"
+            android:id="@+id/nav_order"
             android:name="net.taler.merchantpos.order.OrderFragment"
             android:label=""
             tools:layout="@layout/fragment_order">
-        <action
-                android:id="@+id/action_order_to_processPayment"
-                app:destination="@id/processPayment" />
-        <action
-                android:id="@+id/action_order_to_merchantHistory"
-                app:destination="@id/merchantHistory" />
         <action
                 android:id="@+id/action_order_to_merchantSettings"
-                app:destination="@id/merchantSettings" />
+                app:destination="@+id/nav_settings"
+                app:launchSingleTop="true"
+                app:popUpTo="@+id/nav_graph"
+                app:popUpToInclusive="true" />
         <action
                 android:id="@+id/action_order_self"
-                app:destination="@id/order" />
+                app:destination="@+id/nav_order"
+                app:popUpTo="@+id/nav_graph" />
+        <action
+                android:id="@+id/action_order_to_processPayment"
+                app:destination="@+id/processPayment" />
     </fragment>
 
     <fragment
@@ -32,21 +33,28 @@
             tools:layout="@layout/fragment_process_payment">
         <action
                 android:id="@+id/action_processPayment_to_paymentSuccess"
-                app:destination="@id/paymentSuccess"
-                app:popUpTo="@id/order" />
+                app:destination="@+id/paymentSuccess"
+                app:popUpTo="@id/nav_order" />
     </fragment>
 
     <fragment
-            android:id="@+id/merchantHistory"
+            android:id="@+id/nav_history"
             android:name="net.taler.merchantpos.MerchantHistory"
             android:label="@string/history_label"
             tools:layout="@layout/fragment_merchant_history" />
 
     <fragment
-            android:id="@+id/merchantSettings"
+            android:id="@+id/nav_settings"
             android:name="net.taler.merchantpos.config.MerchantConfigFragment"
             android:label="@string/config_label"
-            tools:layout="@layout/fragment_merchant_config" />
+            tools:layout="@layout/fragment_merchant_config">
+        <action
+                android:id="@+id/action_settings_to_order"
+                app:destination="@+id/nav_order"
+                app:launchSingleTop="true"
+                app:popUpTo="@+id/nav_graph"
+                app:popUpToInclusive="true" />
+    </fragment>
 
     <fragment
             android:id="@+id/configFetcher"
@@ -55,11 +63,13 @@
             tools:layout="@layout/fragment_config_fetcher">
         <action
                 android:id="@+id/action_configFetcher_to_merchantSettings"
-                app:destination="@id/merchantSettings"
+                app:destination="@+id/nav_settings"
+                app:launchSingleTop="true"
+                app:popUpTo="@+id/nav_graph"
                 app:popUpToInclusive="true" />
         <action
                 android:id="@+id/action_configFetcher_to_order"
-                app:destination="@id/order"
+                app:destination="@+id/nav_order"
                 app:launchSingleTop="true"
                 app:popUpTo="@+id/nav_graph"
                 app:popUpToInclusive="true" />
@@ -73,15 +83,20 @@
 
     <action
             android:id="@+id/action_global_order"
-            app:destination="@id/order" />
+            app:destination="@+id/nav_order"
+            app:launchSingleTop="true"
+            app:popUpTo="@+id/nav_graph" />
     <action
             android:id="@+id/action_global_merchantHistory"
-            app:destination="@id/merchantHistory" />
+            app:destination="@+id/nav_history"
+            app:launchSingleTop="true" />
     <action
             android:id="@+id/action_global_merchantSettings"
-            app:destination="@id/merchantSettings" />
+            app:destination="@+id/nav_settings"
+            app:launchSingleTop="true" />
     <action
             android:id="@+id/action_global_configFetcher"
-            app:destination="@id/configFetcher" />
+            app:destination="@+id/configFetcher"
+            app:launchSingleTop="true" />
 
 </navigation>
diff --git a/build.gradle b/build.gradle
index d0a284a..f286dfe 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,9 @@
 buildscript {
-    ext.kotlin_version = '1.3.61'
+    ext.kotlin_version = '1.3.70'
     ext.nav_version = "2.2.1"
     repositories {
         google()
         jcenter()
-        
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:3.6.1'
@@ -17,7 +16,6 @@ allprojects {
     repositories {
         google()
         jcenter()
-        
     }
 }
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]