Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
58 changes: 30 additions & 28 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,30 +1,33 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-parcelize'
id 'kotlin-kapt'
}


android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
compileSdkVersion 30
buildToolsVersion "30.0.2"

defaultConfig {
applicationId "co.tamara.example"
minSdkVersion 16
targetSdkVersion 29
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures {
viewBinding true
}

buildTypes {
debug {
debuggable true
}
}

androidExtensions {
experimental = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
Expand All @@ -40,31 +43,30 @@ repositories {

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0-beta01'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0-beta01'
implementation "androidx.room:room-runtime:2.2.5"
implementation "androidx.room:room-ktx:2.2.5"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.1"
implementation "androidx.navigation:navigation-ui-ktx:2.3.1"
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0-alpha01'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0-alpha01'
implementation "androidx.room:room-runtime:2.2.6"
implementation "androidx.room:room-ktx:2.2.6"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
kapt "androidx.room:room-compiler:2.2.5"
testImplementation 'junit:junit:4.12'
kapt "androidx.room:room-compiler:2.2.6"
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

//For using sdk
implementation (name:'tamara-sdk', ext:'aar')
implementation 'com.google.dagger:dagger-android-support:2.27'
implementation "com.google.dagger:dagger:2.27"
implementation 'com.squareup.retrofit2:retrofit:2.7.2'
implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
implementation(name: 'tamara-sdk', ext: 'aar')
implementation 'com.google.dagger:dagger-android-support:2.29.1'
implementation "com.google.dagger:dagger:2.29.1"
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "com.squareup.okhttp3:logging-interceptor:4.0.1"
kapt 'com.google.dagger:dagger-compiler:2.27'
kapt 'com.google.dagger:dagger-android-processor:2.27'
kapt 'com.google.dagger:dagger-compiler:2.29.1'
kapt 'com.google.dagger:dagger-android-processor:2.29.1'
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package co.tamara.example

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/co/tamara/example/model/EAddress.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import android.os.Parcelable
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.SerializedName
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize

@Parcelize
@Entity(
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/co/tamara/example/model/EAmount.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package co.tamara.example.model

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize
import java.text.NumberFormat
import java.util.*

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/co/tamara/example/model/EConsumer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package co.tamara.example.model

import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize

@Parcelize
data class EConsumer(
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/co/tamara/example/model/EDiscount.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package co.tamara.example.model

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize

@Parcelize
data class EDiscount(
Expand Down
4 changes: 1 addition & 3 deletions app/src/main/java/co/tamara/example/model/EItem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ package co.tamara.example.model

import android.os.Parcelable
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import com.google.gson.annotations.SerializedName
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize

@Parcelize
@Entity(
Expand Down
49 changes: 33 additions & 16 deletions app/src/main/java/co/tamara/example/ui/CheckoutFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,20 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment.findNavController
import co.tamara.example.R
import co.tamara.example.databinding.FragmentCheckoutBinding
import co.tamara.example.model.EAmount
import co.tamara.example.model.EItem
import co.tamara.example.viewmodel.ViewModelFactory
import co.tamara.sdk.TamaraPayment
import kotlinx.android.synthetic.main.fragment_checkout.*

/**
* A simple [Fragment] subclass.
*/
class CheckoutFragment : Fragment() {

private var _binding: FragmentCheckoutBinding? = null
private val binding get() = _binding!!

private var items: List<EItem>? = null
private lateinit var itemViewModel: OrderViewModel
private val shippingAmount = EAmount(20.0, "SAR")
Expand All @@ -29,26 +33,32 @@ class CheckoutFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_checkout, container, false)
_binding = FragmentCheckoutBinding.inflate(inflater, container, false)
return binding.root
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
itemViewModel = ViewModelProvider(requireActivity(), ViewModelFactory()).get(OrderViewModel::class.java)
itemViewModel =
ViewModelProvider(requireActivity(), ViewModelFactory()).get(OrderViewModel::class.java)
itemViewModel.items.observe(viewLifecycleOwner, Observer { items ->
this.items = items
updateUI()
})
shippingFeeTxt.text = shippingAmount.getFormattedAmount()
discountTxt.text = getString(R.string.neg_value,discountAmount.getFormattedAmount())
addressBtn.setOnClickListener {
binding.shippingFeeTxt.text = shippingAmount.getFormattedAmount()
binding.discountTxt.text =
getString(R.string.neg_value, discountAmount.getFormattedAmount())
binding.addressBtn.setOnClickListener {
TamaraPayment.setShippingAmount(shippingAmount.amount)
if(discountCheck.isChecked){
TamaraPayment.setDiscount(discountAmount.amount, discountCheck.text.toString())
if (binding.discountCheck.isChecked) {
TamaraPayment.setDiscount(
discountAmount.amount,
binding.discountCheck.text.toString()
)
}
findNavController(this).navigate(R.id.shippingAddressFragment)
}
discountCheck.setOnCheckedChangeListener { _, _ ->
binding.discountCheck.setOnCheckedChangeListener { _, _ ->
updateUI()
}
}
Expand All @@ -57,21 +67,28 @@ class CheckoutFragment : Fragment() {
var total = 0.0
var totalPrice = 0.0
val ship = shippingAmount.amount
val discount = if(discountCheck.isChecked) discountAmount.amount else 0.0
val discount = if (binding.discountCheck.isChecked) discountAmount.amount else 0.0
var tax = 0.0
var count = 0
var currency = ""
this.items?.forEach {
totalPrice += (it.unitPrice!!.amount - (it.discountAmount?.amount?:0.0)) * it.quantity
total += (it.unitPrice!!.amount - (it.discountAmount?.amount?:0.0) + it.taxAmount!!.amount) * it.quantity
totalPrice += (it.unitPrice!!.amount - (it.discountAmount?.amount ?: 0.0)) * it.quantity
total += (it.unitPrice!!.amount - (it.discountAmount?.amount
?: 0.0) + it.taxAmount!!.amount) * it.quantity
tax += it.taxAmount!!.amount * it.quantity
count += it.quantity
currency = it.unitPrice!!.currency
}
totalItemPriceTxt.text = EAmount(totalPrice, currency).getFormattedAmount()
taxTxt.text = EAmount(tax, currency).getFormattedAmount()
totalTxt.text = EAmount(total + ship - discount, currency).getFormattedAmount()
discountTxt.visibility = if(discountCheck.isChecked) View.VISIBLE else View.GONE
binding.totalItemPriceTxt.text = EAmount(totalPrice, currency).getFormattedAmount()
binding.taxTxt.text = EAmount(tax, currency).getFormattedAmount()
binding.totalTxt.text = EAmount(total + ship - discount, currency).getFormattedAmount()
binding.discountTxt.visibility =
if (binding.discountCheck.isChecked) View.VISIBLE else View.GONE
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

}
38 changes: 26 additions & 12 deletions app/src/main/java/co/tamara/example/ui/ConsumerFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment.findNavController
import co.tamara.example.R
import co.tamara.example.databinding.FragmentConsumerBinding
import co.tamara.example.viewmodel.ViewModelFactory
import co.tamara.sdk.TamaraPayment
import kotlinx.android.synthetic.main.fragment_consumer.*
import java.util.*


Expand All @@ -20,6 +20,9 @@ import java.util.*
*/
class ConsumerFragment : Fragment() {

private var _binding: FragmentConsumerBinding? = null
private val binding get() = _binding!!

private lateinit var consumerViewModel: ConsumerViewModel

override fun onStart() {
Expand All @@ -32,7 +35,8 @@ class ConsumerFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_consumer, container, false)
_binding = FragmentConsumerBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Expand All @@ -47,20 +51,30 @@ class ConsumerFragment : Fragment() {

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
consumerViewModel = ViewModelProvider(this, ViewModelFactory()).get(ConsumerViewModel::class.java)
consumerViewModel.consumer.observe(viewLifecycleOwner, Observer {consumer->
firstNameTxt.text = consumer.firstName
lastNameTxt.text = consumer.lastName
emailTxt.text = consumer.email
phoneTxt.text = consumer.phoneNumber
firstOrderCheck.isChecked = consumer?.isFirstOrder ?: false
consumerViewModel =
ViewModelProvider(this, ViewModelFactory()).get(ConsumerViewModel::class.java)
consumerViewModel.consumer.observe(viewLifecycleOwner, Observer { consumer ->
binding.firstNameTxt.text = consumer.firstName
binding.lastNameTxt.text = consumer.lastName
binding.emailTxt.text = consumer.email
binding.phoneTxt.text = consumer.phoneNumber
binding.firstOrderCheck.isChecked = consumer?.isFirstOrder ?: false
})
shopBtn.setOnClickListener {
TamaraPayment.setCustomerInfo(firstNameTxt.text.toString(), lastNameTxt.text.toString(),phoneTxt.text.toString(),
emailTxt.text.toString(),firstOrderCheck.isChecked)
binding.shopBtn.setOnClickListener {
TamaraPayment.setCustomerInfo(
binding.firstNameTxt.text.toString(),
binding.lastNameTxt.text.toString(),
binding.phoneTxt.text.toString(),
binding.emailTxt.text.toString(),
binding.firstOrderCheck.isChecked
)
findNavController(this).navigate(R.id.shopFragment)
}
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import co.tamara.example.data.DataSource
import co.tamara.example.model.EAddress
import co.tamara.example.model.EConsumer

class ConsumerViewModel(private val dataSource: DataSource) : ViewModel(){
Expand Down
Loading