diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-08-12 10:21:50 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-08-20 22:58:09 +0200 |
commit | e63f231bc8583db065213a07019223f7c122c9fd (patch) | |
tree | 6ba038f24728e6d61e4d8e75bfb2701e94162f85 | |
parent | 101fb3fb603485f57f880bd4634443b34d82758a (diff) | |
download | merchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.tar.gz merchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.tar.bz2 merchant-terminal-android-e63f231bc8583db065213a07019223f7c122c9fd.zip |
wip
-rw-r--r-- | app/build.gradle | 4 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/CreatePayment.kt | 102 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/MainActivity.kt | 11 | ||||
-rw-r--r-- | app/src/main/java/net/taler/merchantpos/ProcessPayment.kt | 102 | ||||
-rw-r--r-- | app/src/main/res/layout/app_bar_main.xml | 7 | ||||
-rw-r--r-- | app/src/main/res/layout/content_main.xml | 15 | ||||
-rw-r--r-- | app/src/main/res/layout/fragment_create_payment.xml | 58 | ||||
-rw-r--r-- | app/src/main/res/layout/fragment_process_payment.xml | 14 | ||||
-rw-r--r-- | app/src/main/res/navigation/nav_graph.xml | 12 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 3 |
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> |