diff --git a/android/app/build.gradle b/android/app/build.gradle
index 089caa3..99ced59 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -47,4 +47,5 @@ dependencies {
implementation 'org.jetbrains.anko:anko-common:0.9'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.google.zxing:core:3.3.3'
+ implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
}
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/OrdersActivity.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/OrdersActivity.kt
index 19776d4..a66dae9 100644
--- a/android/app/src/main/java/io/github/assis10t/bobandroid/OrdersActivity.kt
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/OrdersActivity.kt
@@ -1,5 +1,6 @@
package io.github.assis10t.bobandroid
+import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.CardView
import android.support.v7.widget.LinearLayoutManager
@@ -79,14 +80,20 @@ class OrdersActivity : ActivityWithLoginMenu() {
vh.title.text = order.warehouse!!.name
vh.timestamp.text = order.getTimeString()
vh.container.setOnClickListener {v ->
- Toast.makeText(vh.container.context, "TODO: Open order details dialog", Toast.LENGTH_SHORT).show()
+ ViewOrderDialog(v.context, order).show()
}
vh.status.text = when(order.status) {
Order.Status.PENDING -> "Pending"
Order.Status.IN_TRANSIT -> "In transit"
- Order.Status.COMPLETE -> "Ready to collect"
+ Order.Status.COMPLETE -> "Ready"
Order.Status.CANCELED -> "Canceled"
}
+ vh.status.setTextColor(when(order.status) {
+ Order.Status.PENDING -> R.color.statusPending
+ Order.Status.IN_TRANSIT -> R.color.statusInTransit
+ Order.Status.COMPLETE -> R.color.statusReady
+ Order.Status.CANCELED -> R.color.statusCanceled
+ })
vh.summary.text = "${order.items.size} items"
}
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/ViewCartDialog.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewCartDialog.kt
index c873ddb..654461b 100644
--- a/android/app/src/main/java/io/github/assis10t/bobandroid/ViewCartDialog.kt
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewCartDialog.kt
@@ -21,9 +21,14 @@ import timber.log.Timber
class ViewCartDialog(context: Context, val warehouseId: String): Dialog(context) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.dialog_view_cart)
val data = getCart(context)
+ if (data.isEmpty()) {
+ setContentView(R.layout.dialog_view_cart_empty)
+ return
+ } else {
+ setContentView(R.layout.dialog_view_cart)
+ }
cart.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
cart.adapter = CartAdapter(data)
@@ -38,6 +43,11 @@ class ViewCartDialog(context: Context, val warehouseId: String): Dialog(context)
total.text = "£${"%.2f".format(totalAmount)}"
+ clear.setOnClickListener {
+ clearCart(context)
+ dismiss()
+ }
+
complete_order.setOnClickListener {
val order = Order.Factory()
.items(data)
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/ViewOrderDialog.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewOrderDialog.kt
new file mode 100644
index 0000000..541f2c4
--- /dev/null
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewOrderDialog.kt
@@ -0,0 +1,75 @@
+package io.github.assis10t.bobandroid
+
+import android.app.Dialog
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import android.widget.Toast
+import io.github.assis10t.bobandroid.pojo.Item
+import io.github.assis10t.bobandroid.pojo.Order
+import kotlinx.android.synthetic.main.dialog_view_order.*
+import org.w3c.dom.Text
+import timber.log.Timber
+
+class ViewOrderDialog(context: Context, val order: Order): Dialog(context) {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.dialog_view_order)
+
+ cart.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ cart.adapter = ViewCartDialog.CartAdapter(order.items)
+
+ warehouse_title.text = order.warehouse!!.name
+ status.text = when(order.status) {
+ Order.Status.PENDING -> "Pending"
+ Order.Status.IN_TRANSIT -> "In transit"
+ Order.Status.COMPLETE -> "Ready"
+ Order.Status.CANCELED -> "Canceled"
+ }
+ status.setTextColor(when(order.status) {
+ Order.Status.PENDING -> R.color.statusPending
+ Order.Status.IN_TRANSIT -> R.color.statusInTransit
+ Order.Status.COMPLETE -> R.color.statusReady
+ Order.Status.CANCELED -> R.color.statusCanceled
+ })
+
+ view_qr.visibility =
+ if (order.status == Order.Status.COMPLETE)
+ View.VISIBLE
+ else
+ View.VISIBLE //TODO: Change to View.GONE
+
+ val totalAmount =
+ if (order.items.isEmpty())
+ 0.0
+ else
+ order.items
+ .map{ it.quantity!! * it.price }
+ .reduce { a, b -> a + b}
+
+ total.text = "£${"%.2f".format(totalAmount)}"
+
+
+ view_qr.setOnClickListener {
+ ViewQRDialog(context, order).show()
+ }
+
+ get_directions.setOnClickListener {
+ val location = order.warehouse!!.location!!
+ val intent = Intent(
+ Intent.ACTION_VIEW,
+ Uri.parse("https://www.google.com/maps/dir/?api=1&destination=${location.latitude},${location.longitude}")
+ )
+ context.startActivity(intent)
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/ViewQRDialog.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewQRDialog.kt
new file mode 100644
index 0000000..6a76a25
--- /dev/null
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/ViewQRDialog.kt
@@ -0,0 +1,21 @@
+package io.github.assis10t.bobandroid
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import com.bumptech.glide.Glide
+import io.github.assis10t.bobandroid.pojo.Order
+import kotlinx.android.synthetic.main.dialog_view_qr.*
+
+class ViewQRDialog(context: Context, val order: Order): Dialog(context) {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.dialog_view_qr)
+
+ instructions.text = "Show this code to the cashier at ${order.warehouse!!.name}."
+
+ Glide.with(context)
+ .load(generateQRCode(order._id!!))
+ .into(qr)
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/pojo/Warehouse.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/pojo/Warehouse.kt
index 71b67a8..498135b 100644
--- a/android/app/src/main/java/io/github/assis10t/bobandroid/pojo/Warehouse.kt
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/pojo/Warehouse.kt
@@ -11,8 +11,8 @@ class Warehouse (
) {
companion object {
class Location(
- latitude: Double = 0.0,
- longitude: Double = 0.0
+ val latitude: Double = 0.0,
+ val longitude: Double = 0.0
)
fun fromString(str: String) = Gson().fromJson(str, Warehouse::class.java)
diff --git a/android/app/src/main/java/io/github/assis10t/bobandroid/utils.kt b/android/app/src/main/java/io/github/assis10t/bobandroid/utils.kt
index 05741c1..3fb84df 100644
--- a/android/app/src/main/java/io/github/assis10t/bobandroid/utils.kt
+++ b/android/app/src/main/java/io/github/assis10t/bobandroid/utils.kt
@@ -2,9 +2,13 @@ package io.github.assis10t.bobandroid
import android.content.Context
import android.content.SharedPreferences
+import android.graphics.Bitmap
import android.util.TypedValue
import android.provider.SyncStateContract.Helpers.update
import android.util.Base64
+import com.google.zxing.BarcodeFormat
+import com.google.zxing.MultiFormatWriter
+import com.journeyapps.barcodescanner.BarcodeEncoder
import io.github.assis10t.bobandroid.pojo.Item
import timber.log.Timber
import java.security.NoSuchAlgorithmException
@@ -77,4 +81,9 @@ fun base64ToByteArray(str: String): ByteArray? {
val pureStr = str.substring(str.indexOf(",")+1)
val bytes = Base64.decode(pureStr, Base64.DEFAULT)
return bytes
+}
+
+fun generateQRCode(str: String): Bitmap {
+ val bitMatrix = MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 300, 300)
+ return BarcodeEncoder().createBitmap(bitMatrix)
}
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/ic_delete_black_24dp.xml b/android/app/src/main/res/drawable/ic_delete_black_24dp.xml
new file mode 100644
index 0000000..39e64d6
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_delete_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/android/app/src/main/res/layout/dialog_view_cart.xml b/android/app/src/main/res/layout/dialog_view_cart.xml
index bc0b68b..8950195 100644
--- a/android/app/src/main/res/layout/dialog_view_cart.xml
+++ b/android/app/src/main/res/layout/dialog_view_cart.xml
@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" style="@style/Widget.MaterialComponents.CardView"
- android:layout_width="300dp"
+ android:layout_width="350dp"
android:layout_height="wrap_content"
app:cardElevation="8dp">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/dialog_view_order.xml b/android/app/src/main/res/layout/dialog_view_order.xml
index f799671..23f08e4 100644
--- a/android/app/src/main/res/layout/dialog_view_order.xml
+++ b/android/app/src/main/res/layout/dialog_view_order.xml
@@ -3,40 +3,47 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" style="@style/Widget.MaterialComponents.CardView"
- android:layout_width="300dp"
+ android:layout_width="350dp"
android:layout_height="wrap_content"
app:cardElevation="8dp">
-
-
-
+ android:text="Pending"
+ android:layout_alignParentEnd="true"
+ android:layout_margin="8dp"
+ android:layout_alignBaseline="@id/title"
+ android:textSize="16sp"
+ android:textColor="@color/statusPending"
+ />
+
+ android:layout_below="@id/warehouse_title">
-
+ android:orientation="horizontal"
+ android:layout_below="@id/footer">
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/dialog_view_qr.xml b/android/app/src/main/res/layout/dialog_view_qr.xml
new file mode 100644
index 0000000..9b0089d
--- /dev/null
+++ b/android/app/src/main/res/layout/dialog_view_qr.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_orders_list_item.xml b/android/app/src/main/res/layout/fragment_orders_list_item.xml
index 608283a..9244d8e 100644
--- a/android/app/src/main/res/layout/fragment_orders_list_item.xml
+++ b/android/app/src/main/res/layout/fragment_orders_list_item.xml
@@ -35,12 +35,14 @@
android:layout_below="@id/timestamp"
/>
+ android:layout_centerVertical="true"
+ android:textSize="14sp"
+ android:textColor="@color/statusPending"/>
\ No newline at end of file
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
index f2b8831..93e4d2d 100644
--- a/android/app/src/main/res/values/colors.xml
+++ b/android/app/src/main/res/values/colors.xml
@@ -6,4 +6,8 @@
#FFFFFF
#E0F2F1
#33000000
+ #FFDD57
+ #0053FF
+ #FF3860
+ #23D160