aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-03-18 15:54:36 -0300
committerTorsten Grote <t@grobox.de>2020-03-18 15:54:36 -0300
commit070fd9b7d3793082e447d7713d1dda932f237c99 (patch)
tree5d1c3ec9006eeb8adb23bac34edbced2642dba86
parentd20a5a81af4fa88eb26ea9678ecc13a0dd3d64a5 (diff)
downloadtaler-android-070fd9b7d3793082e447d7713d1dda932f237c99.tar.gz
taler-android-070fd9b7d3793082e447d7713d1dda932f237c99.tar.bz2
taler-android-070fd9b7d3793082e447d7713d1dda932f237c99.zip
Factor out some cashier code into common library
-rw-r--r--.idea/gradle.xml1
-rw-r--r--build.gradle1
-rw-r--r--cashier/build.gradle16
-rw-r--r--cashier/src/main/AndroidManifest.xml4
-rw-r--r--cashier/src/main/java/net/taler/cashier/BalanceFragment.kt3
-rw-r--r--cashier/src/main/java/net/taler/cashier/MainViewModel.kt3
-rw-r--r--cashier/src/main/java/net/taler/cashier/withdraw/TransactionFragment.kt5
-rw-r--r--cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt3
-rw-r--r--gradle.properties1
-rw-r--r--settings.gradle1
-rw-r--r--taler-kotlin-common/.gitignore1
-rw-r--r--taler-kotlin-common/build.gradle56
-rw-r--r--taler-kotlin-common/consumer-rules.pro0
-rw-r--r--taler-kotlin-common/proguard-rules.pro21
-rw-r--r--taler-kotlin-common/src/main/AndroidManifest.xml24
-rw-r--r--taler-kotlin-common/src/main/java/net/taler/common/Amount.kt (renamed from cashier/src/main/java/net/taler/cashier/Amount.kt)2
-rw-r--r--taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt53
-rw-r--r--taler-kotlin-common/src/main/java/net/taler/common/ByteArrayUtils.kt (renamed from cashier/src/main/java/net/taler/cashier/Utils.kt)42
-rw-r--r--taler-kotlin-common/src/main/java/net/taler/common/NfcManager.kt (renamed from cashier/src/main/java/net/taler/cashier/withdraw/NfcManager.kt)4
-rw-r--r--taler-kotlin-common/src/main/java/net/taler/common/QrCodeManager.kt (renamed from cashier/src/main/java/net/taler/cashier/withdraw/QrCodeManager.kt)2
20 files changed, 179 insertions, 64 deletions
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 65dee6e..603ebc0 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -13,6 +13,7 @@
<option value="$PROJECT_DIR$/akono" />
<option value="$PROJECT_DIR$/cashier" />
<option value="$PROJECT_DIR$/merchant-terminal" />
+ <option value="$PROJECT_DIR$/taler-kotlin-common" />
<option value="$PROJECT_DIR$/wallet" />
</set>
</option>
diff --git a/build.gradle b/build.gradle
index f286dfe..4c2476d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,7 @@
buildscript {
ext.kotlin_version = '1.3.70'
ext.nav_version = "2.2.1"
+ ext.build_tools_version = "29.0.2"
repositories {
google()
jcenter()
diff --git a/cashier/build.gradle b/cashier/build.gradle
index b77dc30..5fe7e16 100644
--- a/cashier/build.gradle
+++ b/cashier/build.gradle
@@ -21,11 +21,12 @@ apply plugin: 'androidx.navigation.safeargs.kotlin'
android {
compileSdkVersion 29
- buildToolsVersion "29.0.3"
+ //noinspection GradleDependency
+ buildToolsVersion "$build_tools_version"
defaultConfig {
applicationId "net.taler.cashier"
- minSdkVersion 23
+ minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "0.1"
@@ -46,9 +47,7 @@ android {
}
dependencies {
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.1.0'
- implementation 'androidx.core:core-ktx:1.2.0'
+ implementation project(":taler-kotlin-common")
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.security:security-crypto:1.0.0-beta01'
implementation 'com.google.android.material:material:1.1.0'
@@ -56,13 +55,6 @@ dependencies {
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
- // ViewModel and LiveData
- def lifecycle_version = "2.2.0"
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
-
- // QR codes
- implementation 'com.google.zxing:core:3.4.0'
-
implementation "com.squareup.okhttp3:okhttp:3.12.6"
testImplementation 'junit:junit:4.13'
diff --git a/cashier/src/main/AndroidManifest.xml b/cashier/src/main/AndroidManifest.xml
index 345c9a1..bdc5ec0 100644
--- a/cashier/src/main/AndroidManifest.xml
+++ b/cashier/src/main/AndroidManifest.xml
@@ -3,10 +3,6 @@
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" />
-
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
diff --git a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
index b3a0221..2178a78 100644
--- a/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
+++ b/cashier/src/main/java/net/taler/cashier/BalanceFragment.kt
@@ -34,6 +34,9 @@ import kotlinx.android.synthetic.main.fragment_balance.*
import net.taler.cashier.BalanceFragmentDirections.Companion.actionBalanceFragmentToTransactionFragment
import net.taler.cashier.withdraw.LastTransaction
import net.taler.cashier.withdraw.WithdrawStatus
+import net.taler.common.Amount
+import net.taler.common.fadeIn
+import net.taler.common.fadeOut
sealed class BalanceResult {
object Error : BalanceResult()
diff --git a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
index 3874038..6cd12ff 100644
--- a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
+++ b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt
@@ -32,9 +32,10 @@ import androidx.security.crypto.MasterKeys
import androidx.security.crypto.MasterKeys.AES256_GCM_SPEC
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import net.taler.cashier.Amount.Companion.fromStringSigned
import net.taler.cashier.HttpHelper.makeJsonGetRequest
import net.taler.cashier.withdraw.WithdrawManager
+import net.taler.common.Amount.Companion.fromStringSigned
+import net.taler.common.isOnline
private val TAG = MainViewModel::class.java.simpleName
diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/TransactionFragment.kt b/cashier/src/main/java/net/taler/cashier/withdraw/TransactionFragment.kt
index 8b782b0..8857bfa 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/TransactionFragment.kt
+++ b/cashier/src/main/java/net/taler/cashier/withdraw/TransactionFragment.kt
@@ -30,13 +30,14 @@ import androidx.navigation.fragment.findNavController
import kotlinx.android.synthetic.main.fragment_transaction.*
import net.taler.cashier.MainViewModel
import net.taler.cashier.R
-import net.taler.cashier.fadeIn
-import net.taler.cashier.fadeOut
import net.taler.cashier.withdraw.TransactionFragmentDirections.Companion.actionTransactionFragmentToBalanceFragment
import net.taler.cashier.withdraw.TransactionFragmentDirections.Companion.actionTransactionFragmentToErrorFragment
import net.taler.cashier.withdraw.WithdrawResult.Error
import net.taler.cashier.withdraw.WithdrawResult.InsufficientBalance
import net.taler.cashier.withdraw.WithdrawResult.Success
+import net.taler.common.NfcManager
+import net.taler.common.fadeIn
+import net.taler.common.fadeOut
class TransactionFragment : Fragment() {
diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
index 4c618ac..bfc82ce 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
+++ b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt
@@ -34,6 +34,7 @@ import net.taler.cashier.HttpJsonResult.Error
import net.taler.cashier.HttpJsonResult.Success
import net.taler.cashier.MainViewModel
import net.taler.cashier.R
+import net.taler.common.QrCodeManager.makeQrCode
import org.json.JSONObject
import java.util.concurrent.TimeUnit.MINUTES
import java.util.concurrent.TimeUnit.SECONDS
@@ -95,7 +96,7 @@ class WithdrawManager(
val withdrawResult = WithdrawResult.Success(
id = result.json.getString("withdrawal_id"),
talerUri = talerUri,
- qrCode = QrCodeManager.makeQrCode(talerUri)
+ qrCode = makeQrCode(talerUri)
)
mWithdrawResult.postValue(withdrawResult)
timer.start()
diff --git a/gradle.properties b/gradle.properties
index 00f6d64..337c38f 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -7,6 +7,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
+org.gradle.configureondemand=true
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
diff --git a/settings.gradle b/settings.gradle
index a1882de..f254aa2 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -15,3 +15,4 @@
*/
include ':akono', ':cashier', ':merchant-terminal', ':wallet'
+include ':taler-kotlin-common'
diff --git a/taler-kotlin-common/.gitignore b/taler-kotlin-common/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/taler-kotlin-common/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/taler-kotlin-common/build.gradle b/taler-kotlin-common/build.gradle
new file mode 100644
index 0000000..d7c9362
--- /dev/null
+++ b/taler-kotlin-common/build.gradle
@@ -0,0 +1,56 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion 29
+ //noinspection GradleDependency
+ buildToolsVersion "$build_tools_version"
+
+ defaultConfig {
+ minSdkVersion 24
+ targetSdkVersion 29
+ versionCode 1
+ versionName "0.1"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.core:core-ktx:1.2.0'
+
+ // ViewModel and LiveData
+ def lifecycle_version = "2.2.0"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
+
+ // QR codes
+ implementation 'com.google.zxing:core:3.4.0' // needs minSdkVersion 24+
+}
diff --git a/taler-kotlin-common/consumer-rules.pro b/taler-kotlin-common/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/taler-kotlin-common/consumer-rules.pro
diff --git a/taler-kotlin-common/proguard-rules.pro b/taler-kotlin-common/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/taler-kotlin-common/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/taler-kotlin-common/src/main/AndroidManifest.xml b/taler-kotlin-common/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..902ddc1
--- /dev/null
+++ b/taler-kotlin-common/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+ ~ This file is part of GNU Taler
+ ~ (C) 2020 Taler Systems S.A.
+ ~
+ ~ GNU Taler is free software; you can redistribute it and/or modify it under the
+ ~ terms of the GNU General Public License as published by the Free Software
+ ~ Foundation; either version 3, or (at your option) any later version.
+ ~
+ ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ ~ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ ~
+ ~ You should have received a copy of the GNU General Public License along with
+ ~ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="net.taler.common">
+
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.NFC" />
+
+</manifest>
diff --git a/cashier/src/main/java/net/taler/cashier/Amount.kt b/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt
index 2c237c8..428ddef 100644
--- a/cashier/src/main/java/net/taler/cashier/Amount.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/Amount.kt
@@ -14,7 +14,7 @@
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-package net.taler.cashier
+package net.taler.common
data class Amount(val currency: String, val amount: String) {
diff --git a/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt b/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
new file mode 100644
index 0000000..2fafdf2
--- /dev/null
+++ b/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
@@ -0,0 +1,53 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.common
+
+import android.content.Context
+import android.content.Context.CONNECTIVITY_SERVICE
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+import android.os.Build
+import android.view.View
+
+fun View.fadeIn(endAction: () -> Unit = {}) {
+ if (visibility == View.VISIBLE) return
+ alpha = 0f
+ visibility = View.VISIBLE
+ animate().alpha(1f).withEndAction {
+ endAction.invoke()
+ }.start()
+}
+
+fun View.fadeOut(endAction: () -> Unit = {}) {
+ if (visibility == View.INVISIBLE) return
+ animate().alpha(0f).withEndAction {
+ visibility = View.INVISIBLE
+ alpha = 1f
+ endAction.invoke()
+ }.start()
+}
+
+fun Context.isOnline(): Boolean {
+ val cm = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
+ return if (Build.VERSION.SDK_INT < 29) {
+ @Suppress("DEPRECATION")
+ cm.activeNetworkInfo?.isConnected == true
+ } else {
+ val capabilities = cm.getNetworkCapabilities(cm.activeNetwork) ?: return false
+ capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ }
+}
diff --git a/cashier/src/main/java/net/taler/cashier/Utils.kt b/taler-kotlin-common/src/main/java/net/taler/common/ByteArrayUtils.kt
index 62f7a77..fba0d07 100644
--- a/cashier/src/main/java/net/taler/cashier/Utils.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/ByteArrayUtils.kt
@@ -14,18 +14,9 @@
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-package net.taler.cashier
+package net.taler.common
-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
-
-object Utils {
+object ByteArrayUtils {
private const val HEX_CHARS = "0123456789ABCDEF"
@@ -60,32 +51,3 @@ object Utils {
}
}
-
-fun View.fadeIn(endAction: () -> Unit = {}) {
- if (visibility == VISIBLE) return
- alpha = 0f
- visibility = VISIBLE
- animate().alpha(1f).withEndAction {
- endAction.invoke()
- }.start()
-}
-
-fun View.fadeOut(endAction: () -> Unit = {}) {
- if (visibility == INVISIBLE) return
- animate().alpha(0f).withEndAction {
- visibility = INVISIBLE
- alpha = 1f
- 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/cashier/src/main/java/net/taler/cashier/withdraw/NfcManager.kt b/taler-kotlin-common/src/main/java/net/taler/common/NfcManager.kt
index a487b5f..11e1e1e 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/NfcManager.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/NfcManager.kt
@@ -14,7 +14,7 @@
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-package net.taler.cashier.withdraw
+package net.taler.common
import android.app.Activity
import android.content.Context
@@ -25,7 +25,7 @@ import android.nfc.NfcAdapter.getDefaultAdapter
import android.nfc.Tag
import android.nfc.tech.IsoDep
import android.util.Log
-import net.taler.cashier.Utils.hexStringToByteArray
+import net.taler.common.ByteArrayUtils.hexStringToByteArray
import org.json.JSONObject
import java.io.ByteArrayOutputStream
import java.net.URL
diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/QrCodeManager.kt b/taler-kotlin-common/src/main/java/net/taler/common/QrCodeManager.kt
index e3ffa92..e2a9a55 100644
--- a/cashier/src/main/java/net/taler/cashier/withdraw/QrCodeManager.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/QrCodeManager.kt
@@ -14,7 +14,7 @@
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-package net.taler.cashier.withdraw
+package net.taler.common
import android.graphics.Bitmap
import android.graphics.Bitmap.Config.RGB_565