[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-cashier-terminal-android] 01/02: Show dedicated error message whe
From: |
gnunet |
Subject: |
[taler-cashier-terminal-android] 01/02: Show dedicated error message when device is offline |
Date: |
Mon, 02 Mar 2020 15:51:03 +0100 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a commit to branch master
in repository cashier-terminal-android.
commit 496200ba395791374c7abfe614136a53bbee44fa
Author: Torsten Grote <address@hidden>
AuthorDate: Mon Mar 2 11:19:25 2020 -0300
Show dedicated error message when device is offline
---
.idea/codeStyles/Project.xml | 3 --
.idea/gradle.xml | 4 ++-
app/build.gradle | 2 +-
app/src/main/AndroidManifest.xml | 1 +
.../main/java/net/taler/cashier/BalanceFragment.kt | 32 ++++++++++++++--------
.../main/java/net/taler/cashier/MainViewModel.kt | 12 ++++----
app/src/main/java/net/taler/cashier/Utils.kt | 16 +++++++++++
.../net/taler/cashier/withdraw/WithdrawManager.kt | 5 +++-
.../main/res/layout-w550dp/fragment_balance.xml | 3 +-
app/src/main/res/layout/fragment_balance.xml | 3 +-
app/src/main/res/values/strings.xml | 1 +
build.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 4 +--
13 files changed, 60 insertions(+), 28 deletions(-)
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 0c9ea66..26724fb 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,8 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
- <AndroidXmlCodeStyleSettings>
- <option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
- </AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS"
value="2147483647" />
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 169fd0d..674414f 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
+ <component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
+ <option name="delegatedBuild" value="false" />
+ <option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
@@ -12,7 +15,6 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
- <option name="testRunner" value="PLATFORM" />
</GradleProjectSettings>
</option>
</component>
diff --git a/app/build.gradle b/app/build.gradle
index 8c72f16..fcc0dd6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,7 +21,7 @@ apply plugin: 'androidx.navigation.safeargs.kotlin'
android {
compileSdkVersion 29
- buildToolsVersion "29.0.2"
+ buildToolsVersion "29.0.3"
defaultConfig {
applicationId "net.taler.cashier"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bf1d766..345c9a1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="net.taler.cashier">
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />
diff --git a/app/src/main/java/net/taler/cashier/BalanceFragment.kt
b/app/src/main/java/net/taler/cashier/BalanceFragment.kt
index 6cb42e3..b3a0221 100644
--- a/app/src/main/java/net/taler/cashier/BalanceFragment.kt
+++ b/app/src/main/java/net/taler/cashier/BalanceFragment.kt
@@ -35,6 +35,12 @@ import
net.taler.cashier.BalanceFragmentDirections.Companion.actionBalanceFragme
import net.taler.cashier.withdraw.LastTransaction
import net.taler.cashier.withdraw.WithdrawStatus
+sealed class BalanceResult {
+ object Error : BalanceResult()
+ object Offline : BalanceResult()
+ class Success(val amount: Amount) : BalanceResult()
+}
+
class BalanceFragment : Fragment() {
private val viewModel: MainViewModel by activityViewModels()
@@ -52,8 +58,11 @@ class BalanceFragment : Fragment() {
withdrawManager.lastTransaction.observe(viewLifecycleOwner, Observer {
lastTransaction ->
onLastTransaction(lastTransaction)
})
- viewModel.balance.observe(viewLifecycleOwner, Observer { balance ->
- onBalanceUpdated(balance)
+ viewModel.balance.observe(viewLifecycleOwner, Observer { result ->
+ when (result) {
+ is BalanceResult.Success -> onBalanceUpdated(result.amount)
+ else -> onBalanceUpdated(null, result is BalanceResult.Offline)
+ }
})
button5.setOnClickListener { onAmountButtonPressed(5) }
button10.setOnClickListener { onAmountButtonPressed(10) }
@@ -109,19 +118,20 @@ class BalanceFragment : Fragment() {
else -> super.onOptionsItemSelected(item)
}
- private fun onBalanceUpdated(amount: Amount?) {
+ private fun onBalanceUpdated(amount: Amount?, isOffline: Boolean = false) {
+ val uiList = listOf(
+ introView,
+ button5, button10, button20, button50,
+ amountView, currencyView, confirmWithdrawalButton
+ )
if (amount == null) {
- balanceView.text = getString(R.string.balance_error)
+ balanceView.text =
+ getString(if (isOffline) R.string.balance_offline else
R.string.balance_error)
+ uiList.forEach { it.fadeOut() }
} else {
@SuppressLint("SetTextI18n")
balanceView.text = "${amount.amount} ${amount.currency}"
- listOf(
- introView,
- button5, button10, button20, button50,
- amountView,
- currencyView,
- confirmWithdrawalButton
- ).forEach { it.fadeIn() }
+ uiList.forEach { it.fadeIn() }
}
progressBar.fadeOut()
}
diff --git a/app/src/main/java/net/taler/cashier/MainViewModel.kt
b/app/src/main/java/net/taler/cashier/MainViewModel.kt
index 6f3a0c9..3874038 100644
--- a/app/src/main/java/net/taler/cashier/MainViewModel.kt
+++ b/app/src/main/java/net/taler/cashier/MainViewModel.kt
@@ -44,7 +44,7 @@ private const val PREF_KEY_USERNAME = "username"
private const val PREF_KEY_PASSWORD = "password"
private const val PREF_KEY_CURRENCY = "currency"
-class MainViewModel(app: Application) : AndroidViewModel(app) {
+class MainViewModel(private val app: Application) : AndroidViewModel(app) {
val configDestination =
ConfigFragmentDirections.actionGlobalConfigFragment()
@@ -67,8 +67,8 @@ class MainViewModel(app: Application) : AndroidViewModel(app)
{
private val mConfigResult = MutableLiveData<ConfigResult>()
val configResult: LiveData<ConfigResult> = mConfigResult
- private val mBalance = MutableLiveData<Amount>()
- val balance: LiveData<Amount> = mBalance
+ private val mBalance = MutableLiveData<BalanceResult>()
+ val balance: LiveData<BalanceResult> = mBalance
internal val withdrawManager = WithdrawManager(app, this)
@@ -123,11 +123,11 @@ class MainViewModel(app: Application) :
AndroidViewModel(app) {
val result = when (val response = makeJsonGetRequest(url, config)) {
is HttpJsonResult.Success -> {
val balance = response.json.getString("balance")
- fromStringSigned(balance)
+ fromStringSigned(balance)?.let { BalanceResult.Success(it) }
?: BalanceResult.Error
}
is HttpJsonResult.Error -> {
- // show last known value or error string in case of an error
- mBalance.value
+ if (app.isOnline()) BalanceResult.Error
+ else BalanceResult.Offline
}
}
mBalance.postValue(result)
diff --git a/app/src/main/java/net/taler/cashier/Utils.kt
b/app/src/main/java/net/taler/cashier/Utils.kt
index e6cd761..62f7a77 100644
--- a/app/src/main/java/net/taler/cashier/Utils.kt
+++ b/app/src/main/java/net/taler/cashier/Utils.kt
@@ -16,6 +16,11 @@
package net.taler.cashier
+import android.content.Context
+import android.content.Context.CONNECTIVITY_SERVICE
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
+import android.os.Build.VERSION.SDK_INT
import android.view.View
import android.view.View.INVISIBLE
import android.view.View.VISIBLE
@@ -73,3 +78,14 @@ fun View.fadeOut(endAction: () -> Unit = {}) {
endAction.invoke()
}.start()
}
+
+fun Context.isOnline(): Boolean {
+ val cm = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
+ return if (SDK_INT < 29) {
+ @Suppress("DEPRECATION")
+ cm.activeNetworkInfo?.isConnected == true
+ } else {
+ val capabilities = cm.getNetworkCapabilities(cm.activeNetwork) ?:
return false
+ capabilities.hasCapability(NET_CAPABILITY_INTERNET)
+ }
+}
diff --git a/app/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
b/app/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
index d92b74a..4c618ac 100644
--- a/app/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
+++ b/app/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
@@ -27,6 +27,7 @@ import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
+import net.taler.cashier.BalanceResult
import net.taler.cashier.HttpHelper.makeJsonGetRequest
import net.taler.cashier.HttpHelper.makeJsonPostRequest
import net.taler.cashier.HttpJsonResult.Error
@@ -71,7 +72,9 @@ class WithdrawManager(
@UiThread
fun hasSufficientBalance(amount: Int): Boolean {
- val balanceStr = viewModel.balance.value?.amount ?: return false
+ val balanceResult = viewModel.balance.value
+ if (balanceResult !is BalanceResult.Success) return false
+ val balanceStr = balanceResult.amount.amount
val balanceDouble = balanceStr.toDouble()
return amount <= balanceDouble
}
diff --git a/app/src/main/res/layout-w550dp/fragment_balance.xml
b/app/src/main/res/layout-w550dp/fragment_balance.xml
index 4ed92b4..d04698b 100644
--- a/app/src/main/res/layout-w550dp/fragment_balance.xml
+++ b/app/src/main/res/layout-w550dp/fragment_balance.xml
@@ -68,9 +68,10 @@
<TextView
android:id="@+id/balanceView"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
+ android:gravity="center"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline"
diff --git a/app/src/main/res/layout/fragment_balance.xml
b/app/src/main/res/layout/fragment_balance.xml
index 3ab6423..5dafc59 100644
--- a/app/src/main/res/layout/fragment_balance.xml
+++ b/app/src/main/res/layout/fragment_balance.xml
@@ -63,10 +63,11 @@
<TextView
android:id="@+id/balanceView"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="@dimen/default_margin"
android:paddingTop="8dp"
+ android:gravity="center"
android:paddingEnd="@dimen/default_margin"
android:paddingBottom="@dimen/default_margin"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index 37c4d92..7efa2ad 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,6 +12,7 @@
<string name="balance_current_label">Current balance</string>
<string name="balance_error">ERROR</string>
+ <string name="balance_offline">Offline. Please connect to the
Internet</string>
<string name="action_reconfigure">Reconfigure</string>
<string name="action_lock">Lock</string>
diff --git a/build.gradle b/build.gradle
index 0e297f6..e3fbed6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.3'
+ classpath 'com.android.tools.build:gradle:3.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath
"androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
diff --git a/gradle/wrapper/gradle-wrapper.properties
b/gradle/wrapper/gradle-wrapper.properties
index 608e7b6..43d1305 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Feb 04 07:46:02 BRT 2020
+#Mon Mar 02 09:39:10 BRT 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
--
To stop receiving notification emails like this one, please contact
address@hidden.