summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-08-12 10:21:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-08-20 22:58:09 +0200
commite63f231bc8583db065213a07019223f7c122c9fd (patch)
tree6ba038f24728e6d61e4d8e75bfb2701e94162f85
parent101fb3fb603485f57f880bd4634443b34d82758a (diff)
downloadmerchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.tar.gz
merchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.tar.bz2
merchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.zip
wip
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/net/taler/merchantpos/CreatePayment.kt102
-rw-r--r--app/src/main/java/net/taler/merchantpos/MainActivity.kt11
-rw-r--r--app/src/main/java/net/taler/merchantpos/ProcessPayment.kt102
-rw-r--r--app/src/main/res/layout/app_bar_main.xml7
-rw-r--r--app/src/main/res/layout/content_main.xml15
-rw-r--r--app/src/main/res/layout/fragment_create_payment.xml58
-rw-r--r--app/src/main/res/layout/fragment_process_payment.xml14
-rw-r--r--app/src/main/res/navigation/nav_graph.xml12
-rw-r--r--app/src/main/res/values/strings.xml3
10 files changed, 307 insertions, 21 deletions
diff --git a/app/build.gradle b/app/build.gradle
index e722208..0316543 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -27,11 +27,11 @@ dependencies {
def nav_version = "2.1.0-rc01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'com.google.android.material:material:1.0.0'
+ implementation 'com.google.android.material:material:1.1.0-alpha09'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
diff --git a/app/src/main/java/net/taler/merchantpos/CreatePayment.kt b/app/src/main/java/net/taler/merchantpos/CreatePayment.kt
new file mode 100644
index 0000000..aac8db3
--- /dev/null
+++ b/app/src/main/java/net/taler/merchantpos/CreatePayment.kt
@@ -0,0 +1,102 @@
+package net.taler.merchantpos
+
+import android.content.Context
+import android.net.Uri
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Activities that contain this fragment must implement the
+ * [CreatePayment.OnFragmentInteractionListener] interface
+ * to handle interaction events.
+ * Use the [CreatePayment.newInstance] factory method to
+ * create an instance of this fragment.
+ *
+ */
+class CreatePayment : Fragment() {
+ // TODO: Rename and change types of parameters
+ private var param1: String? = null
+ private var param2: String? = null
+ private var listener: OnFragmentInteractionListener? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ param1 = it.getString(ARG_PARAM1)
+ param2 = it.getString(ARG_PARAM2)
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_create_payment, container, false)
+ }
+
+ // TODO: Rename method, update argument and hook method into UI event
+ fun onButtonPressed(uri: Uri) {
+ listener?.onFragmentInteraction(uri)
+ }
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ if (context is OnFragmentInteractionListener) {
+ listener = context
+ } else {
+ throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener")
+ }
+ }
+
+ override fun onDetach() {
+ super.onDetach()
+ listener = null
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ *
+ * See the Android Training lesson [Communicating with Other Fragments]
+ * (http://developer.android.com/training/basics/fragments/communicating.html)
+ * for more information.
+ */
+ interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ fun onFragmentInteraction(uri: Uri)
+ }
+
+ companion object {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment CreatePayment.
+ */
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ CreatePayment().apply {
+ arguments = Bundle().apply {
+ putString(ARG_PARAM1, param1)
+ putString(ARG_PARAM2, param2)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/net/taler/merchantpos/MainActivity.kt b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
index c977e29..ac34d2a 100644
--- a/app/src/main/java/net/taler/merchantpos/MainActivity.kt
+++ b/app/src/main/java/net/taler/merchantpos/MainActivity.kt
@@ -1,5 +1,6 @@
package net.taler.merchantpos
+import android.net.Uri
import android.os.Bundle
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar
@@ -12,7 +13,10 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import android.view.Menu
-class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
+class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, CreatePayment.OnFragmentInteractionListener, ProcessPayment.OnFragmentInteractionListener {
+ override fun onFragmentInteraction(uri: Uri) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
override fun onCreate(savedInstanceState: Bundle?) {
@@ -21,11 +25,6 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
- val fab: FloatingActionButton = findViewById(R.id.fab)
- fab.setOnClickListener { view ->
- Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
- .setAction("Action", null).show()
- }
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val toggle = ActionBarDrawerToggle(
diff --git a/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt
new file mode 100644
index 0000000..81c1901
--- /dev/null
+++ b/app/src/main/java/net/taler/merchantpos/ProcessPayment.kt
@@ -0,0 +1,102 @@
+package net.taler.merchantpos
+
+import android.content.Context
+import android.net.Uri
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Activities that contain this fragment must implement the
+ * [ProcessPayment.OnFragmentInteractionListener] interface
+ * to handle interaction events.
+ * Use the [ProcessPayment.newInstance] factory method to
+ * create an instance of this fragment.
+ *
+ */
+class ProcessPayment : Fragment() {
+ // TODO: Rename and change types of parameters
+ private var param1: String? = null
+ private var param2: String? = null
+ private var listener: OnFragmentInteractionListener? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ param1 = it.getString(ARG_PARAM1)
+ param2 = it.getString(ARG_PARAM2)
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_process_payment, container, false)
+ }
+
+ // TODO: Rename method, update argument and hook method into UI event
+ fun onButtonPressed(uri: Uri) {
+ listener?.onFragmentInteraction(uri)
+ }
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ if (context is OnFragmentInteractionListener) {
+ listener = context
+ } else {
+ throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener")
+ }
+ }
+
+ override fun onDetach() {
+ super.onDetach()
+ listener = null
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ *
+ * See the Android Training lesson [Communicating with Other Fragments]
+ * (http://developer.android.com/training/basics/fragments/communicating.html)
+ * for more information.
+ */
+ interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ fun onFragmentInteraction(uri: Uri)
+ }
+
+ companion object {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment ProcessPayment.
+ */
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ ProcessPayment().apply {
+ arguments = Bundle().apply {
+ putString(ARG_PARAM1, param1)
+ putString(ARG_PARAM2, param2)
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
index 2395912..01c4602 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -23,12 +23,5 @@
<include layout="@layout/content_main"/>
- <com.google.android.material.floatingactionbutton.FloatingActionButton
- android:id="@+id/fab"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|end"
- android:layout_margin="@dimen/fab_margin"
- app:srcCompat="@android:drawable/ic_dialog_email"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index 6317e13..112382e 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -9,13 +9,16 @@
tools:showIn="@layout/app_bar_main"
tools:context=".MainActivity">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Hello World!"
- app:layout_constraintBottom_toBottomOf="parent"
+ <fragment
+ android:id="@+id/nav_host_fragment"
+ android:name="androidx.navigation.fragment.NavHostFragment"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"/>
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:defaultNavHost="true"
+ app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_create_payment.xml b/app/src/main/res/layout/fragment_create_payment.xml
new file mode 100644
index 0000000..2549e91
--- /dev/null
+++ b/app/src/main/res/layout/fragment_create_payment.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".CreatePayment">
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:paddingBottom="16dp"
+ android:paddingTop="16dp"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.5"/>
+
+ <TextView
+ android:text="Payment Subject"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" android:id="@+id/textView5"/>
+
+ <EditText
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inputType="textPersonName"
+ android:text="Payment Subject"
+ android:ems="10"
+ android:layout_gravity="top"
+ android:id="@+id/editText5"/>
+ <TextView
+ android:text="Amount (TESTKUDOS)"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/textView6"/>
+ <EditText
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inputType="numberDecimal"
+ android:ems="10"
+ android:id="@+id/editText6" android:layout_weight="0" android:text="10"/>
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+
+ <Button
+ android:text="Request Payment"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/button_request_payment"
+ android:layout_gravity="right"/>
+ </LinearLayout>
+</FrameLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_process_payment.xml b/app/src/main/res/layout/fragment_process_payment.xml
new file mode 100644
index 0000000..b1d9813
--- /dev/null
+++ b/app/src/main/res/layout/fragment_process_payment.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ProcessPayment">
+
+ <!-- TODO: Update blank fragment layout -->
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/hello_blank_fragment"/>
+
+</FrameLayout> \ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
new file mode 100644
index 0000000..eaa7bf9
--- /dev/null
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation 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" android:id="@+id/nav_graph"
+ app:startDestination="@id/createPayment">
+
+ <fragment android:id="@+id/createPayment" android:name="net.taler.merchantpos.CreatePayment"
+ android:label="fragment_create_payment" tools:layout="@layout/fragment_create_payment"/>
+ <fragment android:id="@+id/processPayment" android:name="net.taler.merchantpos.ProcessPayment"
+ android:label="fragment_process_payment" tools:layout="@layout/fragment_process_payment"/>
+ <action android:id="@+id/action_global_processPayment" app:destination="@id/processPayment"/>
+</navigation> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f6df07c..f3103af 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,4 +13,7 @@
<string name="menu_tools">Tools</string>
<string name="menu_share">Share</string>
<string name="menu_send">Send</string>
+
+ <!-- TODO: Remove or change this placeholder text -->
+ <string name="hello_blank_fragment">Hello blank fragment</string>
</resources>