Skip to content

Commit

Permalink
add view binding and fix order phone number
Browse files Browse the repository at this point in the history
  • Loading branch information
mohamedebrahim96 committed Apr 16, 2021
1 parent 766560f commit 595de44
Show file tree
Hide file tree
Showing 11 changed files with 119 additions and 38 deletions.
20 changes: 10 additions & 10 deletions app/schemas/com.tahmeel.task.persistence.AppDatabase/1.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "78efee5bb3c17c1a8f4b4dd40da64011",
"identityHash": "bb00a4eab3771ce92f75e47927ce02c5",
"entities": [
{
"tableName": "Order",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`loadRef` INTEGER, `createdAt` TEXT NOT NULL, `customerName` TEXT NOT NULL, `orderNumber` TEXT NOT NULL, `orderPriceFormatted` TEXT NOT NULL, `phoneNumber` INTEGER NOT NULL, `tahmeelFeeInCents` INTEGER NOT NULL, PRIMARY KEY(`loadRef`))",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`loadRef` INTEGER, `createdAt` TEXT, `customerName` TEXT, `orderNumber` TEXT, `orderPriceFormatted` TEXT, `phoneNumber` TEXT, `tahmeelFeeInCents` INTEGER, PRIMARY KEY(`loadRef`))",
"fields": [
{
"fieldPath": "loadRef",
Expand All @@ -18,37 +18,37 @@
"fieldPath": "createdAt",
"columnName": "createdAt",
"affinity": "TEXT",
"notNull": true
"notNull": false
},
{
"fieldPath": "customerName",
"columnName": "customerName",
"affinity": "TEXT",
"notNull": true
"notNull": false
},
{
"fieldPath": "orderNumber",
"columnName": "orderNumber",
"affinity": "TEXT",
"notNull": true
"notNull": false
},
{
"fieldPath": "orderPriceFormatted",
"columnName": "orderPriceFormatted",
"affinity": "TEXT",
"notNull": true
"notNull": false
},
{
"fieldPath": "phoneNumber",
"columnName": "phoneNumber",
"affinity": "INTEGER",
"notNull": true
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "tahmeelFeeInCents",
"columnName": "tahmeelFeeInCents",
"affinity": "INTEGER",
"notNull": true
"notNull": false
}
],
"primaryKey": {
Expand All @@ -64,7 +64,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '78efee5bb3c17c1a8f4b4dd40da64011')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'bb00a4eab3771ce92f75e47927ce02c5')"
]
}
}
46 changes: 46 additions & 0 deletions app/src/main/java/com/tahmeel/task/binding/RecyclerViewBinding.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.tahmeel.task.binding

import androidx.databinding.BindingAdapter
import androidx.recyclerview.widget.RecyclerView
import com.skydoves.baserecyclerviewadapter.RecyclerViewPaginator
import com.skydoves.bindables.BindingListAdapter
import com.skydoves.whatif.whatIfNotNullAs
import com.tahmeel.task.ui.main.MainViewModel

/**
* Created by @mohamedebrahim96 on 16,April,2021
* ShopiniWorld, Inc
* ebrahimm131@gmail.com
*/

object RecyclerViewBinding {

@JvmStatic
@BindingAdapter("adapter")
fun bindAdapter(view: RecyclerView, adapter: RecyclerView.Adapter<*>) {
view.adapter = adapter.apply {
stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
}
}

@JvmStatic
@BindingAdapter("submitList")
fun bindSubmitList(view: RecyclerView, itemList: List<Any>?) {
view.adapter.whatIfNotNullAs<BindingListAdapter<Any, *>> { adapter ->
adapter.submitList(itemList)
}
}

@JvmStatic
@BindingAdapter("paginationPendingOrder")
fun paginationPendingOrderList(view: RecyclerView, viewModel: MainViewModel) {
RecyclerViewPaginator(
recyclerView = view,
isLoading = { viewModel.isLoading },
loadMore = { viewModel.fetchNextPendingOrderList() },
onLast = { false }
).run {
threshold = 8
}
}
}
33 changes: 33 additions & 0 deletions app/src/main/java/com/tahmeel/task/binding/ViewBinding.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.tahmeel.task.binding

import android.view.View
import android.widget.Toast
import androidx.databinding.BindingAdapter
import com.skydoves.whatif.whatIfNotNullOrEmpty

/**
* Created by @mohamedebrahim96 on 16,April,2021
* ShopiniWorld, Inc
* ebrahimm131@gmail.com
*/

object ViewBinding {

@JvmStatic
@BindingAdapter("toast")
fun bindToast(view: View, text: String?) {
text.whatIfNotNullOrEmpty {
Toast.makeText(view.context, it, Toast.LENGTH_SHORT).show()
}
}

@JvmStatic
@BindingAdapter("gone")
fun bindGone(view: View, shouldBeGone: Boolean) {
view.visibility = if (shouldBeGone) {
View.GONE
} else {
View.VISIBLE
}
}
}
12 changes: 6 additions & 6 deletions app/src/main/java/com/tahmeel/task/model/Order.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ import kotlinx.parcelize.Parcelize
@JsonClass(generateAdapter = true)
data class Order(
@field:Json(name = "load_ref") @PrimaryKey val loadRef: Int?,
@field:Json(name = "created_at") val createdAt: String,
@field:Json(name = "customer_name") val customerName: String,
@field:Json(name = "order_number") val orderNumber: String,
@field:Json(name = "order_price_formatted") val orderPriceFormatted: String,
@field:Json(name = "phone_number") val phoneNumber: Int,
@field:Json(name = "tahmeel_fee_in_cents") val tahmeelFeeInCents: Int,
@field:Json(name = "created_at") val createdAt: String?,
@field:Json(name = "customer_name") val customerName: String?,
@field:Json(name = "order_number") val orderNumber: String?,
@field:Json(name = "order_price_formatted") val orderPriceFormatted: String?,
@field:Json(name = "phone_number") val phoneNumber: String?,
@field:Json(name = "tahmeel_fee_in_cents") val tahmeelFeeInCents: Int?,
) : Parcelable

//"created_at": "2021-02-22T13:38:23.071910Z",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ interface TahmeelDao {
// suspend fun getOrdersList(page_: Int): List<Order>

@Query("SELECT * FROM `Order`")
suspend fun getAllOrdersList(page_: Int): List<Order>
suspend fun getAllOrdersList(): List<Order>
}
16 changes: 10 additions & 6 deletions app/src/main/java/com/tahmeel/task/repository/MainRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onStart
import timber.log.Timber
import javax.inject.Inject

/**
Expand All @@ -26,13 +27,13 @@ class MainRepository @Inject constructor(
) : Repository {

@WorkerThread
fun fetchPokemonList(
fun fetchOrderList(
page: Int,
onStart: () -> Unit,
onComplete: () -> Unit,
onError: (String?) -> Unit
) = flow {
var orders = tahmeelDao.getAllOrdersList(page)
var orders = tahmeelDao.getAllOrdersList()
if (orders.isEmpty()) {

val response = tahmeelClient.fetchPendingOrdersList(page = page)
Expand All @@ -41,15 +42,18 @@ class MainRepository @Inject constructor(
orders = response.pendingOrders
//orders.forEach { order -> order.page = page }
tahmeelDao.insertPokemonList(orders)
emit(tahmeelDao.getAllOrdersList(page))
emit(tahmeelDao.getAllOrdersList())
}
}
.onError {
onError("[Code: ")
onError("error")
}
.onException {
onError(message)
Timber.e(message)
}
.onException { onError(message) }
} else {
emit(tahmeelDao.getAllOrdersList(page))
emit(tahmeelDao.getAllOrdersList())
}
}.onStart { onStart() }.onCompletion { onComplete() }.flowOn(Dispatchers.IO)
}
2 changes: 0 additions & 2 deletions app/src/main/java/com/tahmeel/task/ui/main/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import android.os.Bundle
import androidx.activity.viewModels
import androidx.annotation.VisibleForTesting
import com.skydoves.bindables.BindingActivity
import com.skydoves.transformationlayout.onTransformationStartContainer
import com.tahmeel.task.R
import com.tahmeel.task.databinding.ActivityMainBinding
import com.tahmeel.task.ui.main.adapter.OrdersAdapter
Expand All @@ -17,7 +16,6 @@ class MainActivity : BindingActivity<ActivityMainBinding>(R.layout.activity_main
val viewModel: MainViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
onTransformationStartContainer()
super.onCreate(savedInstanceState)
binding {
lifecycleOwner = this@MainActivity
Expand Down
7 changes: 5 additions & 2 deletions app/src/main/java/com/tahmeel/task/ui/main/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,14 @@ class MainViewModel @Inject constructor(

private val pendingOrdersFetchingIndex: MutableStateFlow<Int> = MutableStateFlow(0)
private val pendingOrdersListFlow = pendingOrdersFetchingIndex.flatMapLatest { page ->
mainRepository.fetchPokemonList(
mainRepository.fetchOrderList(
page = page,
onStart = { isLoading = true },
onComplete = { isLoading = false },
onError = { toastMessage = it }
onError = {
Timber.e(it)
toastMessage = it
}
)
}

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical"
app:adapter="@{adapter}"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/appBarLayout"
app:paginationPokemonList="@{vm}"
app:paginationPendingOrder="@{vm}"
app:spanCount="2"
app:submitList="@{vm.pendingOrdersList}"
app:toast="@{vm.toastMessage}"
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/res/values-night/themes.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.TahmeelTask" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<style name="Theme.TahmeelTask" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
Expand All @@ -11,6 +10,6 @@
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:textColorPrimary">@android:color/white</item>
</style>
</resources>
10 changes: 4 additions & 6 deletions app/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.TahmeelTask" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<style name="Theme.TahmeelTask" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->

<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>

0 comments on commit 595de44

Please sign in to comment.