Skip to content

Commit

Permalink
Merge pull request #120 from rkumar0206/develop
Browse files Browse the repository at this point in the history
Develop -> Master
  • Loading branch information
rkumar0206 authored May 21, 2024
2 parents 2487d56 + 78818ff commit 9540fde
Show file tree
Hide file tree
Showing 108 changed files with 9,522 additions and 588 deletions.
2 changes: 1 addition & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 0 additions & 17 deletions .idea/deploymentTargetDropDown.xml

This file was deleted.

6 changes: 2 additions & 4 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 8 additions & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,12 @@ String getManageYourRentersBaseUrl() {
}

android {
compileSdkVersion 33
buildToolsVersion "33.0.0"
compileSdk 34

defaultConfig {
applicationId "com.rohitthebest.manageyourrenters"
minSdkVersion 23
targetSdkVersion 33
minSdk 23
targetSdk 34
versionCode 5
versionName "5.3.1"

Expand Down Expand Up @@ -177,4 +176,6 @@ dependencies {
//https://developer.android.com/studio/write/java8-support#groovy
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
// don't change the version until gradle plugin is updated to 7.4.0-alpha10

implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
34 changes: 25 additions & 9 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@

<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_app_launcher_logo"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_app_launcher_logo_round"
android:supportsRtl="true"
android:allowBackup="true"
android:theme="@style/Theme.SplashScreen">
<activity
android:name=".ui.activities.TrackMoneyActivity"
Expand Down Expand Up @@ -47,14 +47,30 @@

</activity>

<service android:name=".services.UploadService" />
<service android:name=".services.DeleteService" />
<service android:name=".services.UpdateService" />
<service android:name=".services.DeleteAllDocumentsService" />
<service android:name=".services.UploadDocumentListToFireStoreService" />
<service android:name=".services.DeleteFileFromFirebaseStorageService" />
<service android:name=".services.UploadFileToCloudStorageService" />
<service android:name=".services.SyncDocumentsFromFirestoreService" />
<service
android:name=".services.UploadService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.DeleteService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.UpdateService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.DeleteAllDocumentsService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.UploadDocumentListToFireStoreService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.DeleteFileFromFirebaseStorageService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.UploadFileToCloudStorageService"
android:foregroundServiceType="shortService" />
<service
android:name=".services.SyncDocumentsFromFirestoreService"
android:foregroundServiceType="shortService" />

<meta-data
android:name="io.sentry.dsn"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
package com.rohitthebest.manageyourrenters.adapters.trackMoneyAdapters.expenseAdapters.budgetAndIncome

import android.content.res.ColorStateList
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import com.rohitthebest.manageyourrenters.R
import com.rohitthebest.manageyourrenters.database.model.Budget
import com.rohitthebest.manageyourrenters.databinding.AdapterBudgetBinding
import com.rohitthebest.manageyourrenters.utils.Functions
import com.rohitthebest.manageyourrenters.utils.WorkingWithDateAndTime
import com.rohitthebest.manageyourrenters.utils.format
import com.rohitthebest.manageyourrenters.utils.isValid

private const val TAG = "BudgetRVAdapter"

class BudgetRVAdapter : ListAdapter<Budget, BudgetRVAdapter.BudgetViewHolder>(DiffUtilCallback()) {

private var mListener: OnClickListener? = null

inner class BudgetViewHolder(val binding: AdapterBudgetBinding) :
RecyclerView.ViewHolder(binding.root) {

init {

binding.root.setOnClickListener {

if (isPositionAndMlistenerValid()) {
mListener!!.onItemClick(getItem(absoluteAdapterPosition))
}
}

binding.baMenuBtn.setOnClickListener {
if (isPositionAndMlistenerValid()) {
mListener!!.onMenuBtnClick(
getItem(absoluteAdapterPosition),
binding.baMenuBtn,
absoluteAdapterPosition
)
}
}

binding.baDetailsBtn.setOnClickListener {
if (isPositionAndMlistenerValid()) {

mListener!!.onDetailsButtonClicked(getItem(absoluteAdapterPosition))
}
}
}

private fun isPositionAndMlistenerValid(): Boolean {
return mListener != null && absoluteAdapterPosition != RecyclerView.NO_POSITION
}

fun setData(budget: Budget?) {

budget?.let { myBudget ->

binding.apply {

baCategoryNameTV.text = myBudget.categoryName

if (myBudget.categoryImageUrl.isValid()) {

Functions.setImageToImageViewUsingGlide(
binding.root.context,
baCategoryImageIV,
myBudget.categoryImageUrl,
{},
{}
)
} else {

Glide.with(binding.root)
.load(R.drawable.expense_shortcut_icon)
.transition(DrawableTransitionOptions.withCrossFade())
.into(baCategoryImageIV)
}

baSpentVsLimitTV.text = binding.root.context.getString(
R.string.spentVsLimit,
myBudget.currentExpenseAmount.format(2),
myBudget.budgetLimit.format(2)
)

val numberOfDaysLeftInMonth =
WorkingWithDateAndTime.getNumberOfDaysLeftInAnyMonth(
myBudget.month, myBudget.year
)

Log.d(TAG, "setData: numberOfDaysLeftInMonth: $numberOfDaysLeftInMonth")

var perDayExpense = if (numberOfDaysLeftInMonth != 0) {
(myBudget.budgetLimit - myBudget.currentExpenseAmount) / numberOfDaysLeftInMonth
} else {
0.0
}

if (perDayExpense < 0) perDayExpense = 0.0

baPerDayExpenseTV.text = binding.root.context.getString(
R.string.budgetPerDay, perDayExpense.format(2),
numberOfDaysLeftInMonth.toString()
)

val progressInPercent =
((myBudget.currentExpenseAmount / myBudget.budgetLimit) * 100).toInt()

percentTV.text = if (progressInPercent > 100.0) {
binding.root.context.getString(R.string._100)
} else {
"$progressInPercent%"
}

changeProgressColorsByProgressPercent(progressInPercent)

baProgressBar.max = myBudget.budgetLimit.toInt()

if (myBudget.currentExpenseAmount > myBudget.budgetLimit) {
baProgressBar.progress = myBudget.budgetLimit.toInt()
} else {
baProgressBar.progress = myBudget.currentExpenseAmount.toInt()
}
}
}
}

private fun changeProgressColorsByProgressPercent(progressInPercent: Int) {

when {

(progressInPercent in 0..35) -> {
val colorGreen = ContextCompat.getColor(
binding.root.context,
R.color.color_green
)
binding.baProgressBar.progressTintList = ColorStateList.valueOf(
colorGreen
)
binding.percentMCV.strokeColor = colorGreen

}

(progressInPercent in 36..68) -> {
val colorYellow = ContextCompat.getColor(
binding.root.context,
R.color.color_yellow
)
binding.baProgressBar.progressTintList = ColorStateList.valueOf(
colorYellow
)
binding.percentMCV.strokeColor = colorYellow

}

else -> {
val colorRed = ContextCompat.getColor(
binding.root.context,
R.color.color_Red
)
binding.baProgressBar.progressTintList = ColorStateList.valueOf(
colorRed
)

binding.percentMCV.strokeColor = colorRed
}
}
}
}

companion object {

class DiffUtilCallback : DiffUtil.ItemCallback<Budget>() {

override fun areItemsTheSame(oldItem: Budget, newItem: Budget): Boolean =
oldItem.key == newItem.key

override fun areContentsTheSame(oldItem: Budget, newItem: Budget): Boolean =
oldItem == newItem
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BudgetViewHolder {

val binding =
AdapterBudgetBinding.inflate(LayoutInflater.from(parent.context), parent, false)

return BudgetViewHolder(binding)
}

override fun onBindViewHolder(holder: BudgetViewHolder, position: Int) {

holder.setData(getItem(position))
}

interface OnClickListener {

fun onItemClick(budget: Budget)
fun onMenuBtnClick(budget: Budget, view: View, position: Int)
fun onDetailsButtonClicked(budget: Budget)
}

fun setOnClickListener(listener: OnClickListener) {
mListener = listener
}
}

Loading

0 comments on commit 9540fde

Please sign in to comment.