gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-android] branch master updated: UI tweaks in progress


From: gnunet
Subject: [taler-wallet-android] branch master updated: UI tweaks in progress
Date: Fri, 20 Dec 2019 01:52:25 +0100

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

dold pushed a commit to branch master
in repository wallet-android.

The following commit(s) were added to refs/heads/master by this push:
     new ab6effe  UI tweaks in progress
ab6effe is described below

commit ab6effe9e2fb7fab1f310689ca5ae3ae7b7099ca
Author: Florian Dold <address@hidden>
AuthorDate: Fri Dec 20 01:52:22 2019 +0100

    UI tweaks in progress
---
 .../main/java/net/taler/wallet/PromptPayment.kt    |  5 ++
 app/src/main/java/net/taler/wallet/Settings.kt     | 50 +++++++++++++
 app/src/main/java/net/taler/wallet/ShowBalance.kt  | 81 +++++++++++++++++++---
 .../main/java/net/taler/wallet/WalletViewModel.kt  | 22 ++++--
 app/src/main/res/drawable/pending_border.xml       | 21 ++++++
 app/src/main/res/layout/fragment_settings.xml      | 33 +++++++--
 app/src/main/res/layout/fragment_show_balance.xml  |  6 ++
 app/src/main/res/layout/pending_row.xml            | 42 ++++++-----
 8 files changed, 224 insertions(+), 36 deletions(-)

diff --git a/app/src/main/java/net/taler/wallet/PromptPayment.kt 
b/app/src/main/java/net/taler/wallet/PromptPayment.kt
index 2714a7f..aa7512d 100644
--- a/app/src/main/java/net/taler/wallet/PromptPayment.kt
+++ b/app/src/main/java/net/taler/wallet/PromptPayment.kt
@@ -154,6 +154,11 @@ class PromptPayment : Fragment() {
         errorTextView.visibility = View.GONE
 
         abortPaymentButton.setOnClickListener {
+            when (val ps = model.payStatus.value) {
+                is PayStatus.Prepared -> {
+                    model.abortProposal(ps.proposalId)
+                }
+            }
             model.payStatus.value = PayStatus.None()
             
requireActivity().findNavController(R.id.nav_host_fragment).navigateUp()
         }
diff --git a/app/src/main/java/net/taler/wallet/Settings.kt 
b/app/src/main/java/net/taler/wallet/Settings.kt
index ab3fec4..7087e78 100644
--- a/app/src/main/java/net/taler/wallet/Settings.kt
+++ b/app/src/main/java/net/taler/wallet/Settings.kt
@@ -19,7 +19,10 @@ package net.taler.wallet
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
+import android.content.Intent
 import android.os.Bundle
+import android.provider.DocumentsContract
+import android.util.Log
 import androidx.fragment.app.Fragment
 import android.view.LayoutInflater
 import android.view.View
@@ -76,6 +79,25 @@ class ResetDialogFragment : DialogFragment() {
  */
 class Settings : Fragment() {
 
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: 
Intent?) {
+        when (requestCode) {
+            CREATE_FILE -> {
+                if (data == null) {
+                    return
+                }
+                Log.i(TAG, "got createFile result with URL ${data.data}")
+            }
+            PICK_FILE -> {
+                if (data == null) {
+                    return
+                }
+                Log.i(TAG, "got pickFile result with URL ${data.data}")
+            }
+            else -> {
+
+            }
+        }
+    }
 
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
@@ -87,6 +109,34 @@ class Settings : Fragment() {
             val d = ResetDialogFragment()
             d.show(requireActivity().supportFragmentManager, 
"walletResetDialog")
         }
+        
view.findViewById<Button>(R.id.button_backup_export).setOnClickListener {
+            val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
+                addCategory(Intent.CATEGORY_OPENABLE)
+                type = "application/json"
+                putExtra(Intent.EXTRA_TITLE, "taler-wallet-backup.json")
+
+                // Optionally, specify a URI for the directory that should be 
opened in
+                // the system file picker before your app creates the document.
+                //putExtra(DocumentsContract.EXTRA_INITIAL_URI, 
pickerInitialUri)
+            }
+            startActivityForResult(intent, CREATE_FILE)
+        }
+        
view.findViewById<Button>(R.id.button_backup_import).setOnClickListener {
+            val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+                addCategory(Intent.CATEGORY_OPENABLE)
+                type = "application/json"
+
+                //putExtra(DocumentsContract.EXTRA_INITIAL_URI, 
pickerInitialUri)
+            }
+
+            startActivityForResult(intent, PICK_FILE)
+        }
         return view
     }
+
+    companion object {
+        private const val TAG = "taler-wallet"
+        private const val CREATE_FILE = 1
+        private const val PICK_FILE = 2
+    }
 }
diff --git a/app/src/main/java/net/taler/wallet/ShowBalance.kt 
b/app/src/main/java/net/taler/wallet/ShowBalance.kt
index f8faef9..c4c96d6 100644
--- a/app/src/main/java/net/taler/wallet/ShowBalance.kt
+++ b/app/src/main/java/net/taler/wallet/ShowBalance.kt
@@ -20,25 +20,30 @@ package net.taler.wallet
 import android.os.Bundle
 import android.util.Log
 import android.view.*
-import androidx.fragment.app.Fragment
 import android.widget.Button
+import android.widget.LinearLayout
 import android.widget.TextView
+import androidx.fragment.app.Fragment
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.recyclerview.widget.DividerItemDecoration
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.snackbar.Snackbar
 import com.google.zxing.integration.android.IntentIntegrator
 import me.zhanghai.android.materialprogressbar.MaterialProgressBar
+import org.json.JSONObject
 
-class WalletBalanceAdapter(private var myDataset: WalletBalances) : 
RecyclerView.Adapter<WalletBalanceAdapter.MyViewHolder>() {
+class WalletBalanceAdapter(private var myDataset: WalletBalances, private var 
model: WalletViewModel) :
+    RecyclerView.Adapter<WalletBalanceAdapter.MyViewHolder>() {
 
     init {
         setHasStableIds(false)
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
MyViewHolder {
-        val rowView = 
LayoutInflater.from(parent.context).inflate(R.layout.balance_row, parent, false)
+        val rowView =
+            LayoutInflater.from(parent.context).inflate(R.layout.balance_row, 
parent, false)
         return MyViewHolder(rowView)
     }
 
@@ -73,14 +78,23 @@ class WalletBalanceAdapter(private var myDataset: 
WalletBalances) : RecyclerView
     class MyViewHolder(val rowView: View) : RecyclerView.ViewHolder(rowView)
 }
 
-class PendingOperationsAdapter(private var myDataset: PendingOperations) : 
RecyclerView.Adapter<PendingOperationsAdapter.MyViewHolder>() {
+class PendingOperationsAdapter(private var myDataset: PendingOperations) :
+    RecyclerView.Adapter<PendingOperationsAdapter.MyViewHolder>() {
+
+    private var listener: PendingOperationClickListener? = null
+
 
     init {
         setHasStableIds(false)
     }
 
+    fun setPendingOperationClickListener(listener: 
PendingOperationClickListener) {
+        this.listener = listener
+    }
+
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
MyViewHolder {
-        val rowView = 
LayoutInflater.from(parent.context).inflate(R.layout.pending_row, parent, false)
+        val rowView =
+            LayoutInflater.from(parent.context).inflate(R.layout.pending_row, 
parent, false)
         return MyViewHolder(rowView)
     }
 
@@ -90,6 +104,26 @@ class PendingOperationsAdapter(private var myDataset: 
PendingOperations) : Recyc
 
     override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
         val p = myDataset.pending[position]
+        val pendingContainer = 
holder.rowView.findViewById<LinearLayout>(R.id.pending_container)
+        pendingContainer.setOnClickListener {
+            this.listener?.onPendingOperationClick(p.type, p.detail)
+        }
+        when (p.type) {
+            "proposal-choice" -> {
+                val btn1 = 
holder.rowView.findViewById<TextView>(R.id.button_pending_action_1)
+                btn1.text = "Refuse Proposal"
+                btn1.visibility = View.VISIBLE
+                btn1.setOnClickListener {
+                    this.listener?.onPendingOperationActionClick(p.type, 
p.detail)
+                }
+            }
+            else -> {
+                val btn1 = 
holder.rowView.findViewById<TextView>(R.id.button_pending_action_1)
+                btn1.text = "(no action)"
+                btn1.visibility = View.GONE
+                btn1.setOnClickListener {}
+            }
+        }
         val textView = holder.rowView.findViewById<TextView>(R.id.pending_text)
         val subTextView = 
holder.rowView.findViewById<TextView>(R.id.pending_subtext)
         subTextView.text = p.detail.toString(1)
@@ -104,12 +138,16 @@ class PendingOperationsAdapter(private var myDataset: 
PendingOperations) : Recyc
     class MyViewHolder(val rowView: View) : RecyclerView.ViewHolder(rowView)
 }
 
+interface PendingOperationClickListener {
+    fun onPendingOperationClick(type: String, detail: JSONObject)
+    fun onPendingOperationActionClick(type: String, detail: JSONObject)
+}
 
 /**
  * A simple [Fragment] subclass.
  *
  */
-class ShowBalance : Fragment() {
+class ShowBalance : Fragment(), PendingOperationClickListener {
 
     private lateinit var pendingOperationsLabel: View
     lateinit var balancesView: RecyclerView
@@ -209,10 +247,9 @@ class ShowBalance : Fragment() {
         this.balancesView = view.findViewById(R.id.list_balances)
         this.balancesPlaceholderView = 
view.findViewById(R.id.list_balances_placeholder)
 
-
         val balances = model.balances.value!!
 
-        balancesAdapter = WalletBalanceAdapter(balances)
+        balancesAdapter = WalletBalanceAdapter(balances, model)
 
         view.findViewById<RecyclerView>(R.id.list_balances).apply {
             val myLayoutManager = LinearLayoutManager(context)
@@ -242,6 +279,7 @@ class ShowBalance : Fragment() {
         })
 
         pendingAdapter = PendingOperationsAdapter(PendingOperations(listOf()))
+        pendingAdapter.setPendingOperationClickListener(this)
 
         this.pendingOperationsLabel = 
view.findViewById<View>(R.id.pending_operations_label)
 
@@ -259,4 +297,31 @@ class ShowBalance : Fragment() {
 
         return view
     }
+
+    override fun onPendingOperationClick(type: String, detail: JSONObject) {
+        val v = view ?: return
+        when (type) {
+            else -> {
+                val bar = Snackbar.make(
+                    v,
+                    "No detail view for ${type} implemented yet.",
+                    Snackbar.LENGTH_SHORT
+                )
+                bar.show()
+            }
+        }
+    }
+
+    override fun onPendingOperationActionClick(type: String, detail: 
JSONObject) {
+        when (type) {
+            "proposal-choice" -> {
+                Log.v(TAG, "got action click on proposal-choice")
+                val proposalId = detail.optString("proposalId", "")
+                if (proposalId == "") {
+                    return
+                }
+                model.abortProposal(proposalId)
+            }
+        }
+    }
 }
diff --git a/app/src/main/java/net/taler/wallet/WalletViewModel.kt 
b/app/src/main/java/net/taler/wallet/WalletViewModel.kt
index e5e888d..b933bf1 100644
--- a/app/src/main/java/net/taler/wallet/WalletViewModel.kt
+++ b/app/src/main/java/net/taler/wallet/WalletViewModel.kt
@@ -275,8 +275,8 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
             if (result.has("proposalId")) {
                 proposalId = result.getString("proposalId")
             }
-            if (result.has("contractTerms")) {
-                val ctJson = result.getJSONObject("contractTerms")
+            if (result.has("contractTermsRaw")) {
+                val ctJson = JSONObject(result.getString("contractTermsRaw"))
                 val amount = Amount.fromString(ctJson.getString("amount"))
                 val summary = ctJson.getString("summary")
                 contractTerms = ContractTerms(summary, amount)
@@ -301,10 +301,22 @@ class WalletViewModel(val app: Application) : 
AndroidViewModel(app) {
         }
     }
 
-    fun confirmPay(proposalId: String) {
-        val msg = JSONObject()
-        msg.put("operation", "confirmPay")
+    fun abortProposal(proposalId: String) {
+        val args = JSONObject()
+        args.put("proposalId", proposalId)
 
+        Log.i(TAG, "aborting proposal")
+
+        walletBackendApi.sendRequest("abortProposal", args) { isError, _ ->
+            if (isError) {
+                Log.e(TAG, "received error response to abortProposal")
+                return@sendRequest
+            }
+            payStatus.postValue(PayStatus.None())
+        }
+    }
+
+    fun confirmPay(proposalId: String) {
         val args = JSONObject()
         args.put("proposalId", proposalId)
 
diff --git a/app/src/main/res/drawable/pending_border.xml 
b/app/src/main/res/drawable/pending_border.xml
new file mode 100644
index 0000000..d003891
--- /dev/null
+++ b/app/src/main/res/drawable/pending_border.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android";
+        android:shape="rectangle" >
+
+    <!-- View background color -->
+    <solid
+            android:color="@android:color/transparent" >
+    </solid>
+
+    <!-- View border color and width -->
+    <stroke
+            android:width="1dp"
+            android:color="@color/colorPrimary" >
+    </stroke>
+
+    <!-- The radius makes the corners rounded -->
+    <corners
+            android:radius="2dp"   >
+    </corners>
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_settings.xml 
b/app/src/main/res/layout/fragment_settings.xml
index ed144e4..6873ff4 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -11,13 +11,14 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
-        <EditText
+        <TextView
                 android:id="@+id/editText2"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:ems="10"
                 android:inputType="textPersonName"
-                android:text="Version Information" />
+                android:text="Version Information"
+                android:textSize="18sp" />
 
 
         <LinearLayout
@@ -63,14 +64,32 @@
 
         </LinearLayout>
 
-        <EditText
-                android:id="@+id/editText"
+        <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:ems="10"
-                android:inputType="textPersonName"
-                android:text="Developer Settings (be careful!)" />
-        
+                android:text="Backups"
+                android:textSize="18sp" />
+
+        <Button
+                android:text="Export wallet to file"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/button_backup_export"/>
+
+        <Button
+                android:text="Import from file"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/button_backup_import"/>
+
+        <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:ems="10"
+                android:text="Developer Settings (be careful!)"
+                android:textSize="18sp" />
+
         <Button
                 android:text="Withdraw TESTKUDOS"
                 android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/fragment_show_balance.xml 
b/app/src/main/res/layout/fragment_show_balance.xml
index a5fb26f..21a1fe9 100644
--- a/app/src/main/res/layout/fragment_show_balance.xml
+++ b/app/src/main/res/layout/fragment_show_balance.xml
@@ -32,6 +32,12 @@
 
         <Space android:layout_width="match_parent" 
android:layout_height="20dp"/>
 
+        <Button
+                android:text="Withdraw TESTKUDOS"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/button_withdraw_testkudos"/>
+
         <Button
                 android:text="Scan Taler QR Code"
                 android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/pending_row.xml 
b/app/src/main/res/layout/pending_row.xml
index ec5aa2c..79d7250 100644
--- a/app/src/main/res/layout/pending_row.xml
+++ b/app/src/main/res/layout/pending_row.xml
@@ -1,22 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
-              xmlns:tools="http://schemas.android.com/tools";
-              android:orientation="vertical"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content">
+        xmlns:tools="http://schemas.android.com/tools";
+        android:id="@+id/pending_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="3dp"
+        android:padding="3dp"
+        android:background="@drawable/pending_border"
+        android:orientation="vertical">
 
-        <TextView
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:id="@+id/pending_text"
-                  android:textSize="24sp" tools:text="My Pending Operation">
-        </TextView>
+    <TextView
+            android:id="@+id/pending_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="24sp"
+            tools:text="My Pending Operation" />
 
-        <TextView
-                android:id="@+id/pending_subtext"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="14sp"
-                tools:text="My further details" />
+    <Button
+            android:id="@+id/button_pending_action_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            tools:text="Cancel Operation" />
+
+    <TextView
+            android:id="@+id/pending_subtext"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="14sp"
+            tools:text="My further details" />
 
 </LinearLayout>
\ No newline at end of file

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



reply via email to

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