From 61e51a4d21fddfed8e5f29689823d866703ba6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serdar=20Ak=C3=A7ay?= Date: Sun, 4 Sep 2022 16:56:44 +0300 Subject: [PATCH 01/17] bottom bor style --- .../com/serdar/budges/ui/home/HomeFragment.kt | 23 ++++++++----------- app/src/main/res/drawable/bottom_bar.xml | 13 +++++++++++ 2 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/drawable/bottom_bar.xml diff --git a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt index 21189d9..5342d4d 100644 --- a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt @@ -75,10 +75,9 @@ class HomeFragment : Fragment() { budgesAdapter.setDataTransaction(transactionList) val totalAmount = transactionList.sumOf { it.amount } - if(totalAmount>2500){ - dialog() - } - + if (totalAmount > 2500) { + dialog() + } val itemTouchHelper = @@ -144,21 +143,19 @@ class HomeFragment : Fragment() { binding.cryview.adapter = adapter } - private fun dialog(){ - val firstrun:Boolean = requireActivity().getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("firstrun", true); - if (firstrun){ - val dialog=BalanceDialog().show(parentFragmentManager,"dialog") - //... Display the dialog message here ... - // Save the state + private fun dialog() { + val firstrun: Boolean = requireActivity().getSharedPreferences("PREFERENCE", MODE_PRIVATE) + .getBoolean("firstrun", true); + if (firstrun) { + + val dialog = BalanceDialog().show(parentFragmentManager, "dialog") requireActivity().getSharedPreferences("PREFERENCE", MODE_PRIVATE) .edit() .putBoolean("firstrun", false) - .commit(); + .apply() } } - - } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_bar.xml b/app/src/main/res/drawable/bottom_bar.xml new file mode 100644 index 0000000..021086b --- /dev/null +++ b/app/src/main/res/drawable/bottom_bar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file From 1475c943a54cd16c5b8f0bf24663ba3accb85267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serdar=20Ak=C3=A7ay?= Date: Wed, 7 Sep 2022 13:19:53 +0300 Subject: [PATCH 02/17] notification --- .idea/deploymentTargetDropDown.xml | 2 +- .idea/misc.xml | 7 +- app/src/main/AndroidManifest.xml | 7 +- .../budges/data/transaction/Transaction.kt | 1 + .../infrastructure/NotificationUtils.kt | 48 +++++++ .../budges/ui/currency/CurrencyFragment.kt | 15 ++- .../budges/ui/dashboard/DashboardFragment.kt | 7 +- .../com/serdar/budges/ui/home/HomeFragment.kt | 120 +++++++++++------- .../java/com/serdar/budges/util/Constants.kt | 6 + .../main/res/layout/fragment_bottom_sheet.xml | 1 + app/src/main/res/layout/fragment_home.xml | 4 +- app/src/main/res/layout/transaction_item.xml | 11 +- app/src/main/res/menu/bottom_nav_menu.xml | 2 +- 13 files changed, 163 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 1663a0c..a2b2089 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 00c888d..778f1dd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,16 +13,17 @@ + - + - + @@ -30,7 +31,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 34e6a93..323841a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,9 +2,9 @@ - - + + + diff --git a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt index 88ff935..29ec23e 100644 --- a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt +++ b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt @@ -17,5 +17,6 @@ data class Transaction( @ColumnInfo(name = "transaction") val transaction: String, @ColumnInfo(name = "amaount") val amount: Double = 0.0, @ColumnInfo(name = "desciption") val description: String, + ) : Parcelable diff --git a/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt b/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt new file mode 100644 index 0000000..df3a8c0 --- /dev/null +++ b/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt @@ -0,0 +1,48 @@ +package com.serdar.budges.infrastructure + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.content.Context.NOTIFICATION_SERVICE +import android.os.Build +import androidx.core.app.NotificationCompat +import com.serdar.budges.R +import com.serdar.budges.util.Constants.Companion.CHANNEL_ID +import com.serdar.budges.util.Constants.Companion.CHANNEL_NAME + +object NotificationUtils { + + fun bugesNotification(context: Context, title: String, description: String) { + val notificationManager = + context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager + + createBudgesNotificationChannel(notificationManager) + + val builder = createBudgesNotificationCompat(context, title, description) + + notificationManager.notify(1, builder.build()) + } + + private fun createBudgesNotificationChannel(notificationManager: NotificationManager) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + CHANNEL_ID, + CHANNEL_NAME, + NotificationManager.IMPORTANCE_DEFAULT + ) + notificationManager.createNotificationChannel(channel) + } + } + + private fun createBudgesNotificationCompat( + context: Context, + title: String, + description: String + ): NotificationCompat.Builder { + return NotificationCompat.Builder(context, CHANNEL_ID) + .setContentTitle(title) + .setContentText(description) + .setSmallIcon(R.drawable.bitcoin) + .setPriority(NotificationCompat.PRIORITY_HIGH) + } +} diff --git a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt index 66469ad..e74779a 100644 --- a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -26,13 +27,17 @@ class CurrencyFragment : Fragment() { setupAdapter() val repository = CryptoRepository() val cryptoViewModelFactory = CryptoViewModelFactory(repository) + try { + viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) + viewModel.getData() + viewModel.myResponse.observe(requireActivity(), Observer { + adapter.setData(it) - viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) - viewModel.getData() - viewModel.myResponse.observe(requireActivity(), Observer { - adapter.setData(it) + }) + }catch (exception: Exception){ + Toast.makeText(requireContext(), "No Internet", Toast.LENGTH_SHORT).show() + } - }) return binding.root } diff --git a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt index 83be6eb..78334a3 100644 --- a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt @@ -1,5 +1,6 @@ package com.serdar.budges.ui.dashboard + import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater @@ -13,6 +14,7 @@ import com.serdar.budges.R import com.serdar.budges.adapter.BudgesAdapter import com.serdar.budges.databinding.FragmentDashboardBinding import com.serdar.budges.model.TransactionViewModel +import kotlin.collections.ArrayList class DashboardFragment : Fragment() { private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } @@ -32,6 +34,7 @@ class DashboardFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> budgesAdapter.setDataTransaction(transactionList) @@ -41,9 +44,7 @@ class DashboardFragment : Fragment() { val expanseAmount = totalAmount - budgetAmount - - - // pieList.add(PieEntry(100f, "Total Amount")) + // pieList.add(PieEntry(100f, "Total Amount")) val pieList = ArrayList() pieList.add(PieEntry(totalAmount.toFloat(), "Total Amount")) pieList.add(PieEntry(budgetAmount.toFloat(), "Income")) diff --git a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt index 5342d4d..7b9ac55 100644 --- a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt @@ -5,9 +5,11 @@ import android.content.Context.MODE_PRIVATE import android.os.Bundle import android.os.Handler import android.os.Looper +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -22,6 +24,7 @@ import com.serdar.budges.adapter.HomeCryptoAdapter import com.serdar.budges.adapter.ViewPagerAdapter import com.serdar.budges.data.transaction.Transaction import com.serdar.budges.di.repository.CryptoRepository +import com.serdar.budges.infrastructure.NotificationUtils import com.serdar.budges.model.CryptoViewModel import com.serdar.budges.model.CryptoViewModelFactory import com.serdar.budges.model.TransactionViewModel @@ -29,6 +32,8 @@ import com.serdar.budges.ui.components.BalanceDialog import com.serdar.budges.ui.fragments.ExpanseFragment import com.serdar.budges.ui.fragments.IncomeFragment import com.serdar.budges.ui.fragments.TotalBalanceFragment +import com.serdar.budges.util.Constants.Companion.DESCRIPTION +import com.serdar.budges.util.Constants.Companion.TITLE class HomeFragment : Fragment() { private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } @@ -44,16 +49,7 @@ class HomeFragment : Fragment() { transaction = arrayListOf() budgesAdapter = BudgesAdapter() adapterSetup() - val repository = CryptoRepository() - val cryptoViewModelFactory = CryptoViewModelFactory(repository) - - viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) - viewModel.getData() - viewModel.myResponse.observe(requireActivity(), Observer { - adapter.setDatas(it) - - }) - + cryptoData() return binding.root } @@ -62,44 +58,11 @@ class HomeFragment : Fragment() { super.onViewCreated(view, savedInstanceState) viewPager() Dots() - + swipeToDelete() binding.sheetDialog.setOnClickListener { findNavController().navigate(R.id.action_navigation_home_to_bottomSheetFragment) } - val budgesAdapter = BudgesAdapter() - binding.rvView.layoutManager = LinearLayoutManager(requireContext()) - binding.rvView.adapter = budgesAdapter - - transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> - budgesAdapter.setDataTransaction(transactionList) - - val totalAmount = transactionList.sumOf { it.amount } - if (totalAmount > 2500) { - dialog() - } - - - val itemTouchHelper = - object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { - override fun onMove( - recyclerView: RecyclerView, - viewHolder: RecyclerView.ViewHolder, - target: RecyclerView.ViewHolder - ): Boolean { - return false - } - - override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { - - val position = viewHolder.adapterPosition - transactionViewModel.deleteTransaction(transactionList[position]) - } - - } - val swipeHelper = ItemTouchHelper(itemTouchHelper) - swipeHelper.attachToRecyclerView(binding.rvView) - }) } @@ -157,5 +120,72 @@ class HomeFragment : Fragment() { } } + private fun swipeToDelete() { + val budgesAdapter = BudgesAdapter() + + binding.rvView.layoutManager = LinearLayoutManager(requireContext()) + binding.rvView.adapter = budgesAdapter + + try { + //reading data and setting data to recyclerview + transactionViewModel.readAllData.observe( + requireActivity(), + Observer { transactionList -> + budgesAdapter.setDataTransaction(transactionList) + + val totalAmount = transactionList.sumOf { it.amount } + if (totalAmount > 2500) { + dialog() + } + if (totalAmount <=0) { + NotificationUtils.bugesNotification( + requireContext(), + TITLE, + DESCRIPTION + ) + } + + + val itemTouchHelper = + object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + return false + } + + override fun onSwiped( + viewHolder: RecyclerView.ViewHolder, + direction: Int + ) { + + val position = viewHolder.adapterPosition + transactionViewModel.deleteTransaction(transactionList[position]) + } + + } + val swipeHelper = ItemTouchHelper(itemTouchHelper) + swipeHelper.attachToRecyclerView(binding.rvView) + }) + } catch (exception: Exception) { + Toast.makeText(requireContext(), "No internet", Toast.LENGTH_SHORT).show() + } + } + + private fun cryptoData() { + val repository = CryptoRepository() + val cryptoViewModelFactory = CryptoViewModelFactory(repository) + + viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) + viewModel.getData() + viewModel.myResponse.observe(requireActivity(), Observer { + adapter.setDatas(it) + + }) + + } + +} -} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/util/Constants.kt b/app/src/main/java/com/serdar/budges/util/Constants.kt index d3bf7ac..d84fd96 100644 --- a/app/src/main/java/com/serdar/budges/util/Constants.kt +++ b/app/src/main/java/com/serdar/budges/util/Constants.kt @@ -6,5 +6,11 @@ class Constants { companion object{ const val BASE_URL = "https://api.coincap.io/" + + const val CHANNEL_ID = "MyTask" + const val CHANNEL_NAME = "MyTaskChannel" + + const val TITLE = "BUDGES" + const val DESCRIPTION = "Don't forget to add your daily transaction" } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bottom_sheet.xml b/app/src/main/res/layout/fragment_bottom_sheet.xml index 8efcceb..6c05144 100644 --- a/app/src/main/res/layout/fragment_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_bottom_sheet.xml @@ -72,6 +72,7 @@ android:layout_height="wrap_content" android:layout_marginStart="20sp" android:layout_marginEnd="20sp" + android:inputType="text" android:backgroundTint="#FFFFFF" android:textColor="@color/black" android:textSize="12sp" diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 98e669f..30aa103 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -33,10 +33,10 @@ android:id="@+id/dots_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="140dp" + android:layout_marginStart="150dp" android:layout_marginTop="140dp" android:layout_marginBottom="16dp" - app:dotsColor="@color/black" + app:dotsColor="#F1B1B1" app:dotsCornerRadius="8dp" app:dotsSize="8dp" app:dotsSpacing="2dp" diff --git a/app/src/main/res/layout/transaction_item.xml b/app/src/main/res/layout/transaction_item.xml index dfa126f..b4bdc26 100644 --- a/app/src/main/res/layout/transaction_item.xml +++ b/app/src/main/res/layout/transaction_item.xml @@ -37,7 +37,7 @@ android:id="@+id/transaction" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="5dp" + android:layout_marginStart="80dp" android:layout_marginTop="5dp" android:text="TextView" android:textColor="@color/black" @@ -50,10 +50,10 @@ android:id="@+id/amountView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="60dp" + android:layout_marginStart="32dp" android:src="@drawable/expanse" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -62,20 +62,19 @@ android:id="@+id/amount" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="24dp" android:text="TextView" android:textColor="@color/black" android:textSize="12sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintStart_toEndOf="@+id/amountView" app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file From e8779aacd09fd23f66ce68c2d5fcb060482dae25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serdar=20Ak=C3=A7ay?= Date: Thu, 8 Sep 2022 17:18:25 +0300 Subject: [PATCH 03/17] income,expanse --- .idea/misc.xml | 13 ++-- .../java/com/serdar/budges/MainActivity.kt | 5 -- .../serdar/budges/adapter/BudgesAdapter.kt | 20 +++++-- .../serdar/budges/adapter/CryptoAdapter.kt | 30 ++++++---- .../budges/adapter/HomeCryptoAdapter.kt | 2 + .../budges/data/transaction/Transaction.kt | 3 +- .../budges/di/repository/CryptoRepository.kt | 4 +- .../serdar/budges/model/CryptoViewModel.kt | 2 - .../budges/model/TransactionViewModel.kt | 7 +++ .../budges/service/api/RetrofitInctance.kt | 1 - .../service/transaction/TransactionDao.kt | 5 ++ .../transaction/TransactionDatabase.kt | 2 +- .../ui/bottomsheet/BottomSheetFragment.kt | 24 +++++++- .../budges/ui/dashboard/DashboardFragment.kt | 28 +++++++-- .../budges/ui/fragments/UpdateFragment.kt | 4 +- .../com/serdar/budges/ui/home/HomeFragment.kt | 2 - .../serdar/budges/ui/splash/SplashFragment.kt | 2 - .../java/com/serdar/budges/util/Constants.kt | 2 - .../main/res/layout/fragment_bottom_sheet.xml | 59 ++++++++++++++----- .../main/res/layout/fragment_dashboard.xml | 40 ++++++++++--- app/src/main/res/layout/fragment_home.xml | 2 +- .../main/res/navigation/mobile_navigation.xml | 6 +- 22 files changed, 193 insertions(+), 70 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 778f1dd..0127bf0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -17,21 +17,26 @@ + + - + - + - + + + + - + diff --git a/app/src/main/java/com/serdar/budges/MainActivity.kt b/app/src/main/java/com/serdar/budges/MainActivity.kt index 29ea52e..0b7030a 100644 --- a/app/src/main/java/com/serdar/budges/MainActivity.kt +++ b/app/src/main/java/com/serdar/budges/MainActivity.kt @@ -1,12 +1,7 @@ package com.serdar.budges import android.os.Bundle -import com.google.android.material.bottomnavigation.BottomNavigationView import androidx.appcompat.app.AppCompatActivity -import androidx.navigation.findNavController -import androidx.navigation.ui.AppBarConfiguration -import androidx.navigation.ui.setupActionBarWithNavController -import androidx.navigation.ui.setupWithNavController import com.serdar.budges.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt index fd40324..a743f91 100644 --- a/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt @@ -5,11 +5,15 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView +import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat +import androidx.navigation.Navigation.findNavController import androidx.navigation.findNavController +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.transaction.Transaction +import com.serdar.budges.ui.dashboard.DashboardFragmentDirections import com.serdar.budges.ui.home.HomeFragmentDirections class BudgesAdapter : @@ -21,6 +25,7 @@ class BudgesAdapter : val transactions = view.findViewById(R.id.transaction) val amount = view.findViewById(R.id.amount) val amountView = view.findViewById(R.id.amountView) + val card =view.findViewById(R.id.delete) fun bind(transaction: Transaction) { transactions.setText(transaction.transaction.toString()) @@ -34,16 +39,23 @@ class BudgesAdapter : val view = LayoutInflater.from(parent.context).inflate(R.layout.transaction_item, parent, false) + return TransactionHolder(view) } override fun onBindViewHolder(holder: TransactionHolder, position: Int) { val transaction = transactionList[position] holder.bind(transaction) - holder.itemView.setOnClickListener { - val action = HomeFragmentDirections.actionNavigationHomeToUpdateFragment(transaction) - holder.itemView.findNavController().navigate(action) - } + + + holder.card.setOnClickListener { + val action = HomeFragmentDirections.actionNavigationHomeToUpdateFragment(transaction) + holder.card.findNavController().navigate(action) + } + + + + val context = holder.amount.context if (transaction.amount >= 0) { diff --git a/app/src/main/java/com/serdar/budges/adapter/CryptoAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/CryptoAdapter.kt index b525333..f4eeb11 100644 --- a/app/src/main/java/com/serdar/budges/adapter/CryptoAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/CryptoAdapter.kt @@ -11,11 +11,11 @@ import com.serdar.budges.R import com.serdar.budges.data.crypto.Data import java.math.RoundingMode -class CryptoAdapter:RecyclerView.Adapter() { +class CryptoAdapter : RecyclerView.Adapter() { private var myList = emptyList() - inner class CryptoViewHolder(itemview: View):RecyclerView.ViewHolder(itemview){ + inner class CryptoViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview) { val symbol = itemview.findViewById(R.id.symbol) val price = itemview.findViewById(R.id.price) val macap = itemview.findViewById(R.id.maCap) @@ -25,20 +25,25 @@ class CryptoAdapter:RecyclerView.Adapter() { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CryptoViewHolder { - return CryptoViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.crypto_layout,parent,false)) + return CryptoViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.crypto_layout, parent, false) + ) } override fun onBindViewHolder(holder: CryptoViewHolder, position: Int) { - holder.symbol.text=myList[position].symbol.toString() - holder.name.text=myList[position].name.toString() + holder.symbol.text = myList[position].symbol.toString() + holder.name.text = myList[position].name.toString() val context = holder.macap.context - holder.price.text=myList[position].priceUsd.toString() - holder.price.text=myList[position].priceUsd.toBigDecimal().setScale(1, RoundingMode.UP).toString() - holder.macap.text=myList[position].changePercent24Hr.toBigDecimal().setScale(1,RoundingMode.UP).toString() - if (myList[position].changePercent24Hr> 0.toString()){ + holder.price.text = myList[position].priceUsd.toString() + holder.price.text = + myList[position].priceUsd.toBigDecimal().setScale(1, RoundingMode.UP).toString() + holder.macap.text = + myList[position].changePercent24Hr.toBigDecimal().setScale(1, RoundingMode.UP) + .toString() + if (myList[position].changePercent24Hr > 0.toString()) { holder.macap.setTextColor(ContextCompat.getColor(context, R.color.green)) holder.where.setImageResource(R.drawable.up) - }else{ + } else { holder.macap.setTextColor(ContextCompat.getColor(context, R.color.red)) holder.where.setImageResource(R.drawable.down) } @@ -47,8 +52,9 @@ class CryptoAdapter:RecyclerView.Adapter() { override fun getItemCount(): Int { return myList.size } - fun setData(newList: List){ - myList= newList + + fun setData(newList: List) { + myList = newList notifyDataSetChanged() } diff --git a/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt index 4b4b6ec..1b6675a 100644 --- a/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt @@ -5,6 +5,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.crypto.Data @@ -32,6 +33,7 @@ class HomeCryptoAdapter : RecyclerView.Adapter holder.price.text = dataList[position].priceUsd.toString() holder.price.text = dataList[position].priceUsd.toBigDecimal().setScale(1, RoundingMode.UP).toString() + holder.price.text ="$%.2f".format(dataList[position].priceUsd.toDouble()) when (dataList[position].symbol) { diff --git a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt index 29ec23e..29128d2 100644 --- a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt +++ b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt @@ -17,6 +17,7 @@ data class Transaction( @ColumnInfo(name = "transaction") val transaction: String, @ColumnInfo(name = "amaount") val amount: Double = 0.0, @ColumnInfo(name = "desciption") val description: String, - + @ColumnInfo(name = "expanse") val expanse: String, + @ColumnInfo(name = "income") val income: String, ) : Parcelable diff --git a/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt b/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt index 8e70216..3f4afbd 100644 --- a/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt +++ b/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt @@ -1,12 +1,10 @@ package com.serdar.budges.di.repository -import com.serdar.budges.data.crypto.CryptoModel import com.serdar.budges.data.crypto.Data import com.serdar.budges.service.api.RetrofitInctance -import retrofit2.Response class CryptoRepository { - suspend fun getPost(): List{ + suspend fun getPost(): List { return RetrofitInctance.api.getData().data } } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt b/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt index a92e564..e0ad147 100644 --- a/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt +++ b/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt @@ -3,11 +3,9 @@ package com.serdar.budges.model import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.serdar.budges.data.crypto.CryptoModel import com.serdar.budges.data.crypto.Data import com.serdar.budges.di.repository.CryptoRepository import kotlinx.coroutines.launch -import retrofit2.Response class CryptoViewModel(private val cryptoRepository: CryptoRepository):ViewModel() { diff --git a/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt b/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt index 926e5bb..72c9ce4 100644 --- a/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt +++ b/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt @@ -14,6 +14,10 @@ class TransactionViewModel(application: Application) : AndroidViewModel(applicat val readAllData: LiveData> + val readExpanseData: LiveData> + val readIncomeData: LiveData> + + private val repository: TransactionRepository @@ -21,6 +25,9 @@ class TransactionViewModel(application: Application) : AndroidViewModel(applicat val transactionDao = TransactionDatabase.getDatabase(application).transactionDao() repository = TransactionRepository(transactionDao) readAllData = transactionDao.readAllData() + readExpanseData=transactionDao.getExpanseList() + readIncomeData=transactionDao.getIncomeList() + } diff --git a/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt b/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt index 6561e45..766af6a 100644 --- a/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt +++ b/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt @@ -3,7 +3,6 @@ package com.serdar.budges.service.api import com.serdar.budges.util.Constants.Companion.BASE_URL import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.create object RetrofitInctance { diff --git a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt index 92bed76..adbaeed 100644 --- a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt +++ b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt @@ -22,6 +22,11 @@ interface TransactionDao { @Query("DELETE FROM transactions ") fun deleteAllTransaction() + @Query("SELECT * FROM transactions WHERE expanse") + fun getExpanseList(): LiveData> + + @Query("SELECT * FROM transactions WHERE income") + fun getIncomeList(): LiveData> } diff --git a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt index 6a7cef4..f7d8526 100644 --- a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt +++ b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt @@ -6,7 +6,7 @@ import androidx.room.Room import androidx.room.RoomDatabase import com.serdar.budges.data.transaction.Transaction -@Database(entities = [Transaction::class], version =2, exportSchema = false) +@Database(entities = [Transaction::class], version =3, exportSchema = false) abstract class TransactionDatabase: RoomDatabase() { diff --git a/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt index 2498b42..cc830d0 100644 --- a/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt @@ -6,6 +6,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.Toast import androidx.core.widget.addTextChangedListener import androidx.navigation.fragment.findNavController import com.google.android.material.bottomsheet.BottomSheetDialog @@ -18,6 +20,8 @@ import com.serdar.budges.model.TransactionViewModel class BottomSheetFragment : BottomSheetDialogFragment() { private lateinit var binding: FragmentBottomSheetBinding + private val comes = arrayListOf() + private var comess = "" private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } override fun onCreateView( @@ -31,6 +35,17 @@ class BottomSheetFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + val facultiesAdapter = + ArrayAdapter(requireContext(), R.layout.dropdown, comes) + comes.add("İNCOME") + comes.add("EXPANSE") + + binding.txtFaculty.setOnItemClickListener { _, _, position, _ -> + comess = comes[position] + } + binding.txtFaculty.setAdapter(facultiesAdapter) + + binding.transactionName.addTextChangedListener { if (it!!.count() > 0) binding.productName.error = null @@ -60,15 +75,22 @@ class BottomSheetFragment : BottomSheetDialogFragment() { val description = binding.transactionDesc.text.toString() val amount = binding.transactionAmounts.text.toString().toDoubleOrNull() + + if (label.isEmpty()) binding.productName.error = "Please enter a valid label" else if (amount == null) binding.transactionAmount.error = "Please enter a valid amount" + else if (comes.isEmpty()) + Toast.makeText(requireContext(), "Please Chose Transaction Type", Toast.LENGTH_SHORT).show() + else { - val transaction = Transaction(0, label, amount, description) + val transaction = Transaction(0, label, amount, description, expanse="Expanse", income = "İncome") transactionViewModel.addTransaction(transaction) findNavController().navigate(R.id.action_bottomSheetFragment_to_navigation_home) + } + } } diff --git a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt index 78334a3..31922b3 100644 --- a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt @@ -9,12 +9,15 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import com.github.mikephil.charting.animation.Easing -import com.github.mikephil.charting.data.* +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.google.android.material.tabs.TabLayoutMediator import com.serdar.budges.R import com.serdar.budges.adapter.BudgesAdapter +import com.serdar.budges.adapter.ViewPagerDash import com.serdar.budges.databinding.FragmentDashboardBinding import com.serdar.budges.model.TransactionViewModel -import kotlin.collections.ArrayList class DashboardFragment : Fragment() { private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } @@ -33,8 +36,12 @@ class DashboardFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + pieChart() + tabLayout() + } + private fun pieChart() { transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> budgesAdapter.setDataTransaction(transactionList) @@ -75,9 +82,22 @@ class DashboardFragment : Fragment() { binding.pieChart.animateY(1400, Easing.EaseInOutQuad) }) - - } + private fun tabLayout() { + val adapter = ViewPagerDash(requireActivity().supportFragmentManager, lifecycle) + + binding.dashView.adapter = adapter + TabLayoutMediator(binding.tabLayout, binding.dashView) { tab, position -> + when (position) { + 0 -> { + tab.text = "İncome" + } + 1 -> { + tab.text = "Expanse" + } + } + }.attach() + } } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt index bab7581..876e515 100644 --- a/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt @@ -55,8 +55,8 @@ class UpdateFragment : Fragment() { args.current.id, transactionName, transactionAmount.toDouble(), - transactionDesc - ) + transactionDesc, income = "İncome", + expanse = "Expanse") transactionViewModel.updateTransaction(updateShopping) findNavController().navigate(R.id.action_updateFragment_to_navigation_home) diff --git a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt index 7b9ac55..f1b8eef 100644 --- a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt @@ -1,11 +1,9 @@ package com.serdar.budges.ui.home -import android.content.Context import android.content.Context.MODE_PRIVATE import android.os.Bundle import android.os.Handler import android.os.Looper -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup diff --git a/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt b/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt index 5b966a0..a86af93 100644 --- a/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt @@ -7,8 +7,6 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.navigation.fragment.findNavController -import com.serdar.budges.R import com.serdar.budges.databinding.FragmentSplashBinding diff --git a/app/src/main/java/com/serdar/budges/util/Constants.kt b/app/src/main/java/com/serdar/budges/util/Constants.kt index d84fd96..8bab899 100644 --- a/app/src/main/java/com/serdar/budges/util/Constants.kt +++ b/app/src/main/java/com/serdar/budges/util/Constants.kt @@ -1,7 +1,5 @@ package com.serdar.budges.util -import com.github.mikephil.charting.data.BarDataSet - class Constants { companion object{ diff --git a/app/src/main/res/layout/fragment_bottom_sheet.xml b/app/src/main/res/layout/fragment_bottom_sheet.xml index 6c05144..5ad42f6 100644 --- a/app/src/main/res/layout/fragment_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_bottom_sheet.xml @@ -17,14 +17,14 @@ android:hint="Transaction" android:paddingLeft="10sp" android:paddingRight="10sp" - app:boxCornerRadiusBottomEnd="10sp" + android:textColorHint="@color/black" + app:boxCornerRadiusBottomEnd="8sp" app:boxCornerRadiusBottomStart="8sp" app:boxCornerRadiusTopEnd="8sp" app:boxCornerRadiusTopStart="8sp" app:boxStrokeWidth="0sp" app:counterEnabled="true" app:counterMaxLength="20" - android:textColorHint="@color/black" app:endIconMode="clear_text" app:hintTextColor="#000000" app:layout_constraintEnd_toEndOf="parent" @@ -34,9 +34,9 @@ + + + + + + @@ -85,9 +115,10 @@ android:layout_height="wrap_content" android:hint="Descripsion" android:paddingLeft="10sp" + android:layout_marginTop="8dp" android:paddingRight="10sp" android:textColorHint="@color/black" - app:boxCornerRadiusBottomEnd="10sp" + app:boxCornerRadiusBottomEnd="8sp" app:boxCornerRadiusBottomStart="8sp" app:boxCornerRadiusTopEnd="8sp" app:boxCornerRadiusTopStart="8sp" @@ -103,8 +134,8 @@ android:id="@+id/transactionDesc" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="20sp" - android:layout_marginEnd="20sp" + android:layout_marginStart="12sp" + android:layout_marginEnd="12sp" android:backgroundTint="#FFFFFF" android:textColor="@color/black" android:textSize="12sp" diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 7b39ebe..b49940e 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -12,11 +12,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginTop="32dp" + android:layout_marginTop="48dp" android:layout_marginEnd="16dp" app:cardCornerRadius="10dp" app:cardElevation="8dp" - app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -25,7 +24,7 @@ android:id="@+id/pieChart" android:layout_width="match_parent" - android:layout_height="500dp" + android:layout_height="200dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" @@ -38,18 +37,43 @@ android:id="@+id/textView8" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="72dp" - android:layout_marginBottom="32dp" + android:layout_marginTop="8dp" android:text="Dashboard" - android:textStyle="italic" - android:textSize="20sp" android:textColor="@color/black" android:textColorHighlight="@color/red" + android:textSize="20sp" + android:textStyle="italic" - app:layout_constraintBottom_toTopOf="@+id/cardView7" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 30aa103..316c2e5 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -123,7 +123,7 @@ android:id="@+id/cryview" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginBottom="40dp" /> + android:layout_marginBottom="90dp" /> \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index dad2f70..7cfa75a 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -24,7 +24,11 @@ android:id="@+id/navigation_dashboard" android:name="com.serdar.budges.ui.dashboard.DashboardFragment" android:label="@string/title_dashboard" - tools:layout="@layout/fragment_dashboard" /> + tools:layout="@layout/fragment_dashboard" > + + Date: Thu, 8 Sep 2022 17:20:13 +0300 Subject: [PATCH 04/17] income,expanse --- .../serdar/budges/adapter/ExpanseAdapter.kt | 58 ++++++++++++ .../serdar/budges/adapter/IncomeAdapter.kt | 58 ++++++++++++ .../serdar/budges/adapter/ViewPagerDash.kt | 29 ++++++ .../ui/fragments/ExpanseDashFragment.kt | 44 +++++++++ .../budges/ui/fragments/IncomeDashFragment.kt | 46 +++++++++ app/src/main/res/layout/dropdown.xml | 12 +++ app/src/main/res/layout/expanse_item.xml | 94 +++++++++++++++++++ .../main/res/layout/fragment_expanse_dash.xml | 19 ++++ .../main/res/layout/fragment_income_dash.xml | 18 ++++ app/src/main/res/layout/income_item.xml | 94 +++++++++++++++++++ 10 files changed, 472 insertions(+) create mode 100644 app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt create mode 100644 app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt create mode 100644 app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt create mode 100644 app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt create mode 100644 app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt create mode 100644 app/src/main/res/layout/dropdown.xml create mode 100644 app/src/main/res/layout/expanse_item.xml create mode 100644 app/src/main/res/layout/fragment_expanse_dash.xml create mode 100644 app/src/main/res/layout/fragment_income_dash.xml create mode 100644 app/src/main/res/layout/income_item.xml diff --git a/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt new file mode 100644 index 0000000..1a1f01d --- /dev/null +++ b/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt @@ -0,0 +1,58 @@ +package com.serdar.budges.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.cardview.widget.CardView +import androidx.core.content.ContextCompat + +import androidx.recyclerview.widget.RecyclerView +import com.serdar.budges.R +import com.serdar.budges.data.transaction.Transaction + +class ExpanseAdapter: RecyclerView.Adapter() { + private var transactionList = emptyList() + + class TransactionHolder(view: View) : RecyclerView.ViewHolder(view) { + val desc = view.findViewById(R.id.descExpanse) + val transactions = view.findViewById(R.id.transactionExpanse) + val amount = view.findViewById(R.id.amountExpanse) + val amountView = view.findViewById(R.id.amountViewExpanse) + + fun bind(transaction: Transaction) { + transactions.setText(transaction.transaction.toString()) + amount.setText(transaction.amount.toString()) + desc.setText(transaction.description.toString()) + + } + + } + + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExpanseAdapter.TransactionHolder { + val view = + LayoutInflater.from(parent.context).inflate(R.layout.expanse_item, parent, false) + + return ExpanseAdapter.TransactionHolder(view) + } + + override fun onBindViewHolder(holder: ExpanseAdapter.TransactionHolder, position: Int) { + val transaction = transactionList[position] + holder.bind(transaction) + val context = holder.amount.context + holder.amount.text = "-$%.2f".format(transaction.amount) + holder.amount.setTextColor(ContextCompat.getColor(context, R.color.red)) + holder.amountView.setImageResource(R.drawable.expansion) + } + + override fun getItemCount(): Int { + return transactionList.size + } + fun setExpanse(transactionList: List) { + this.transactionList = transactionList + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt new file mode 100644 index 0000000..e4e7eb9 --- /dev/null +++ b/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt @@ -0,0 +1,58 @@ +package com.serdar.budges.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.cardview.widget.CardView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.serdar.budges.R +import com.serdar.budges.data.transaction.Transaction + +class IncomeAdapter: RecyclerView.Adapter() { + private var transactionList = emptyList() + + class TransactionHolder(view: View) : RecyclerView.ViewHolder(view) { + val desc = view.findViewById(R.id.descIncome) + val transactions = view.findViewById(R.id.transactionIncome) + val amount = view.findViewById(R.id.amountIncome) + val amountView = view.findViewById(R.id.amountViewIncome) + + + fun bind(transaction: Transaction) { + transactions.setText(transaction.transaction.toString()) + amount.setText(transaction.amount.toString()) + desc.setText(transaction.description.toString()) + + } + + } + + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IncomeAdapter.TransactionHolder { + val view = + LayoutInflater.from(parent.context).inflate(R.layout.income_item, parent, false) + + return IncomeAdapter.TransactionHolder(view) + } + + override fun onBindViewHolder(holder: IncomeAdapter.TransactionHolder, position: Int) { + val transaction = transactionList[position] + holder.bind(transaction) + val context = holder.amount.context + holder.amount.text = "+$%.2f".format(Math.abs(transaction.amount)) + holder.amount.setTextColor(ContextCompat.getColor(context, R.color.green)) + holder.amountView.setImageResource(R.drawable.profits) + } + + override fun getItemCount(): Int { + return transactionList.size + } + fun setIncome(transactionList: List) { + this.transactionList = transactionList + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt b/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt new file mode 100644 index 0000000..f8d3f9c --- /dev/null +++ b/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt @@ -0,0 +1,29 @@ +package com.serdar.budges.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.serdar.budges.ui.fragments.ExpanseDashFragment +import com.serdar.budges.ui.fragments.IncomeDashFragment + +class ViewPagerDash (fragmentManager: FragmentManager, lifecycle: Lifecycle): + FragmentStateAdapter(fragmentManager,lifecycle) { + override fun getItemCount(): Int { + return 2 + } + + override fun createFragment(position: Int): Fragment { + + return when (position) { + 0->{ + IncomeDashFragment() + } + 1->{ + ExpanseDashFragment() + }else->{ + Fragment() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt new file mode 100644 index 0000000..f1f0a30 --- /dev/null +++ b/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt @@ -0,0 +1,44 @@ +package com.serdar.budges.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.serdar.budges.adapter.ExpanseAdapter +import com.serdar.budges.databinding.FragmentExpanseDashBinding +import com.serdar.budges.model.TransactionViewModel + +class ExpanseDashFragment : Fragment() { + private lateinit var binding: FragmentExpanseDashBinding + private lateinit var expanseAdapter: ExpanseAdapter + private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentExpanseDashBinding.inflate(layoutInflater) + expanseAdapter = ExpanseAdapter() + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + expanseData() + } + + private fun expanseData() { + val expanseAdapter = ExpanseAdapter() + + binding.dashExpanse.layoutManager = LinearLayoutManager(requireContext()) + binding.dashExpanse.adapter = expanseAdapter + transactionViewModel.readExpanseData.observe( + requireActivity(), + Observer { transactionList -> + expanseAdapter.setExpanse(transactionList) + + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt new file mode 100644 index 0000000..0ac4fab --- /dev/null +++ b/app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt @@ -0,0 +1,46 @@ +package com.serdar.budges.ui.fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.serdar.budges.R +import com.serdar.budges.adapter.BudgesAdapter +import com.serdar.budges.adapter.IncomeAdapter +import com.serdar.budges.databinding.FragmentIncomeDashBinding +import com.serdar.budges.model.TransactionViewModel + + +class IncomeDashFragment : Fragment() { + private lateinit var binding:FragmentIncomeDashBinding + private lateinit var incomeAdapter: IncomeAdapter + private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding=FragmentIncomeDashBinding.inflate(layoutInflater) + incomeAdapter = IncomeAdapter() + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + incomeDash() + } + private fun incomeDash(){ + val incomeAdapter = IncomeAdapter() + + binding.dashIncome.layoutManager = LinearLayoutManager(requireContext()) + binding.dashIncome.adapter = incomeAdapter + transactionViewModel.readExpanseData.observe( + requireActivity(), + Observer { transactionList -> + incomeAdapter.setIncome(transactionList) + + }) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dropdown.xml b/app/src/main/res/layout/dropdown.xml new file mode 100644 index 0000000..069711a --- /dev/null +++ b/app/src/main/res/layout/dropdown.xml @@ -0,0 +1,12 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/expanse_item.xml b/app/src/main/res/layout/expanse_item.xml new file mode 100644 index 0000000..cb16dbb --- /dev/null +++ b/app/src/main/res/layout/expanse_item.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_expanse_dash.xml b/app/src/main/res/layout/fragment_expanse_dash.xml new file mode 100644 index 0000000..0e2cf0d --- /dev/null +++ b/app/src/main/res/layout/fragment_expanse_dash.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_income_dash.xml b/app/src/main/res/layout/fragment_income_dash.xml new file mode 100644 index 0000000..32077ae --- /dev/null +++ b/app/src/main/res/layout/fragment_income_dash.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/income_item.xml b/app/src/main/res/layout/income_item.xml new file mode 100644 index 0000000..76ec08d --- /dev/null +++ b/app/src/main/res/layout/income_item.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 1cd32002190f7c066e24b381d21c3fbbd78f701f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serdar=20Ak=C3=A7ay?= Date: Wed, 14 Sep 2022 13:56:00 +0300 Subject: [PATCH 05/17] onboarding screens --- .idea/deploymentTargetDropDown.xml | 17 --- .idea/misc.xml | 15 +- app/src/main/AndroidManifest.xml | 7 +- .../serdar/budges/adapter/BudgesAdapter.kt | 29 ++-- .../serdar/budges/adapter/ExpanseAdapter.kt | 17 ++- .../budges/adapter/HomeCryptoAdapter.kt | 3 +- .../serdar/budges/adapter/IncomeAdapter.kt | 16 +- .../serdar/budges/adapter/ViewPagerDash.kt | 15 +- .../budges/data/transaction/Transaction.kt | 6 +- .../budges/di/repository/CryptoRepository.kt | 10 +- .../di/repository/TransactionRepository.kt | 13 +- .../infrastructure/NotificationUtils.kt | 2 +- .../com/serdar/budges/model/ApiResponse.kt | 6 +- ...etrofitInctance.kt => RetrofitInstance.kt} | 2 +- .../service/transaction/TransactionDao.kt | 10 +- .../transaction/TransactionDatabase.kt | 38 ++--- .../ui/bottomsheet/BottomSheetFragment.kt | 21 +-- .../budges/ui/components/BalanceDialog.kt | 77 +++++++++- .../budges/ui/currency/CurrencyFragment.kt | 9 +- .../budges/ui/currency/CurrencyViewModel.kt | 2 +- .../budges/ui/dashboard/DashboardFragment.kt | 21 ++- .../budges/ui/fragments/ExpanseFragment.kt | 45 ------ .../budges/ui/fragments/UpdateFragment.kt | 84 ---------- .../{ => dashboard}/ExpanseDashFragment.kt | 8 +- .../{ => dashboard}/IncomeDashFragment.kt | 20 +-- .../ui/fragments/home/ExpanseFragment.kt | 44 ++++++ .../ui/fragments/{ => home}/IncomeFragment.kt | 23 ++- .../{ => home}/TotalBalanceFragment.kt | 15 +- .../com/serdar/budges/ui/home/HomeFragment.kt | 115 ++++++-------- .../serdar/budges/ui/splash/HomeActivity.kt | 4 +- .../serdar/budges/ui/splash/SplashFragment.kt | 20 ++- .../viewmodel}/CryptoViewModel.kt | 8 +- .../viewmodel}/CryptoViewModelFactory.kt | 7 +- .../viewmodel}/TransactionViewModel.kt | 10 +- .../java/com/serdar/budges/util/Constants.kt | 2 +- app/src/main/res/drawable/bottom_bar.xml | 2 +- app/src/main/res/drawable/bottom_sheet.xml | 4 +- ...ton_bacground.xml => button_bacground.xml} | 2 +- app/src/main/res/drawable/expansesss.png | Bin 0 -> 9795 bytes app/src/main/res/drawable/incomesss.png | Bin 0 -> 9470 bytes app/src/main/res/layout/activity_home.xml | 3 +- app/src/main/res/layout/crypto_home.xml | 63 +++++--- app/src/main/res/layout/dialog_balance.xml | 143 ++++++++++++++---- .../main/res/layout/fragment_bottom_sheet.xml | 7 +- .../main/res/layout/fragment_dashboard.xml | 5 +- app/src/main/res/layout/fragment_expanse.xml | 4 +- .../main/res/layout/fragment_expanse_dash.xml | 4 +- app/src/main/res/layout/fragment_home.xml | 73 +++++++-- app/src/main/res/layout/fragment_income.xml | 4 +- .../main/res/layout/fragment_income_dash.xml | 2 +- .../res/layout/fragment_total_balance.xml | 4 +- app/src/main/res/layout/fragment_update.xml | 2 +- app/src/main/res/layout/transaction_item.xml | 57 ++++--- app/src/main/res/navigation/detail_graph.xml | 13 -- .../main/res/navigation/mobile_navigation.xml | 25 ++- app/src/main/res/navigation/splash_graph.xml | 22 ++- app/src/main/res/values/colors.xml | 12 ++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 9 ++ app/src/main/res/values/themes.xml | 12 +- 60 files changed, 692 insertions(+), 522 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml rename app/src/main/java/com/serdar/budges/service/api/{RetrofitInctance.kt => RetrofitInstance.kt} (94%) delete mode 100644 app/src/main/java/com/serdar/budges/ui/fragments/ExpanseFragment.kt delete mode 100644 app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt rename app/src/main/java/com/serdar/budges/ui/fragments/{ => dashboard}/ExpanseDashFragment.kt (85%) rename app/src/main/java/com/serdar/budges/ui/fragments/{ => dashboard}/IncomeDashFragment.kt (70%) create mode 100644 app/src/main/java/com/serdar/budges/ui/fragments/home/ExpanseFragment.kt rename app/src/main/java/com/serdar/budges/ui/fragments/{ => home}/IncomeFragment.kt (58%) rename app/src/main/java/com/serdar/budges/ui/fragments/{ => home}/TotalBalanceFragment.kt (86%) rename app/src/main/java/com/serdar/budges/{model => ui/viewmodel}/CryptoViewModel.kt (61%) rename app/src/main/java/com/serdar/budges/{model => ui/viewmodel}/CryptoViewModelFactory.kt (71%) rename app/src/main/java/com/serdar/budges/{model => ui/viewmodel}/TransactionViewModel.kt (90%) rename app/src/main/res/drawable/{botton_bacground.xml => button_bacground.xml} (83%) create mode 100644 app/src/main/res/drawable/expansesss.png create mode 100644 app/src/main/res/drawable/incomesss.png delete mode 100644 app/src/main/res/navigation/detail_graph.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index a2b2089..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 0127bf0..109175c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,15 +3,16 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 323841a..17c7c5a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.serdar.budges"> - + - + + diff --git a/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt index a743f91..a4af176 100644 --- a/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/BudgesAdapter.kt @@ -7,13 +7,11 @@ import android.widget.ImageView import android.widget.TextView import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat -import androidx.navigation.Navigation.findNavController import androidx.navigation.findNavController -import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.transaction.Transaction -import com.serdar.budges.ui.dashboard.DashboardFragmentDirections +import com.serdar.budges.ui.components.BalanceDialog import com.serdar.budges.ui.home.HomeFragmentDirections class BudgesAdapter : @@ -25,12 +23,12 @@ class BudgesAdapter : val transactions = view.findViewById(R.id.transaction) val amount = view.findViewById(R.id.amount) val amountView = view.findViewById(R.id.amountView) - val card =view.findViewById(R.id.delete) + val card = view.findViewById(R.id.delete) fun bind(transaction: Transaction) { - transactions.setText(transaction.transaction.toString()) - amount.setText(transaction.amount.toString()) - desc.setText(transaction.description.toString()) + transactions.text = transaction.transaction.toString() + amount.text = transaction.amount.toString() + desc.text = transaction.description.toString() } } @@ -48,26 +46,25 @@ class BudgesAdapter : holder.bind(transaction) - holder.card.setOnClickListener { - val action = HomeFragmentDirections.actionNavigationHomeToUpdateFragment(transaction) - holder.card.findNavController().navigate(action) - } - + holder.card.setOnClickListener { + val action = HomeFragmentDirections.actionNavigationHomeToBalanceDialog(transaction) + holder.card.findNavController().navigate(action) + } val context = holder.amount.context - if (transaction.amount >= 0) { + if (transaction.incomeExpanseType == "INCOME") { holder.amount.text = "+$%.2f".format(transaction.amount) holder.amount.setTextColor(ContextCompat.getColor(context, R.color.green)) - holder.amountView.setImageResource(R.drawable.profits) + holder.amountView.setImageResource(R.drawable.incomesss) } else { holder.amount.text = "-$%.2f".format(Math.abs(transaction.amount)) holder.amount.setTextColor(ContextCompat.getColor(context, R.color.red)) - holder.amountView.setImageResource(R.drawable.expansion) + holder.amountView.setImageResource(R.drawable.expansesss) } holder.transactions.text = transaction.transaction @@ -86,5 +83,5 @@ class BudgesAdapter : this.transactionList = transactionList notifyDataSetChanged() } - + //val dialog = BalanceDialog().show(parentFragmentManager, "dialog") } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt index 1a1f01d..ce90ee5 100644 --- a/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/ExpanseAdapter.kt @@ -5,14 +5,12 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView -import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat - import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.transaction.Transaction -class ExpanseAdapter: RecyclerView.Adapter() { +class ExpanseAdapter : RecyclerView.Adapter() { private var transactionList = emptyList() class TransactionHolder(view: View) : RecyclerView.ViewHolder(view) { @@ -22,17 +20,19 @@ class ExpanseAdapter: RecyclerView.Adapter() { val amountView = view.findViewById(R.id.amountViewExpanse) fun bind(transaction: Transaction) { - transactions.setText(transaction.transaction.toString()) - amount.setText(transaction.amount.toString()) - desc.setText(transaction.description.toString()) + transactions.text = transaction.transaction.toString() + amount.text = transaction.amount.toString() + desc.text = transaction.description.toString() } } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExpanseAdapter.TransactionHolder { + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpanseAdapter.TransactionHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.expanse_item, parent, false) @@ -51,6 +51,7 @@ class ExpanseAdapter: RecyclerView.Adapter() { override fun getItemCount(): Int { return transactionList.size } + fun setExpanse(transactionList: List) { this.transactionList = transactionList notifyDataSetChanged() diff --git a/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt index 1b6675a..ca16371 100644 --- a/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/HomeCryptoAdapter.kt @@ -5,7 +5,6 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView -import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.crypto.Data @@ -33,7 +32,7 @@ class HomeCryptoAdapter : RecyclerView.Adapter holder.price.text = dataList[position].priceUsd.toString() holder.price.text = dataList[position].priceUsd.toBigDecimal().setScale(1, RoundingMode.UP).toString() - holder.price.text ="$%.2f".format(dataList[position].priceUsd.toDouble()) + holder.price.text = "$%.2f".format(dataList[position].priceUsd.toDouble()) when (dataList[position].symbol) { diff --git a/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt b/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt index e4e7eb9..7c8a44c 100644 --- a/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt +++ b/app/src/main/java/com/serdar/budges/adapter/IncomeAdapter.kt @@ -5,13 +5,12 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView -import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R import com.serdar.budges.data.transaction.Transaction -class IncomeAdapter: RecyclerView.Adapter() { +class IncomeAdapter : RecyclerView.Adapter() { private var transactionList = emptyList() class TransactionHolder(view: View) : RecyclerView.ViewHolder(view) { @@ -22,17 +21,19 @@ class IncomeAdapter: RecyclerView.Adapter() { fun bind(transaction: Transaction) { - transactions.setText(transaction.transaction.toString()) - amount.setText(transaction.amount.toString()) - desc.setText(transaction.description.toString()) + transactions.text = transaction.transaction.toString() + amount.text = transaction.amount.toString() + desc.text = transaction.description.toString() } } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IncomeAdapter.TransactionHolder { + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): IncomeAdapter.TransactionHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.income_item, parent, false) @@ -51,6 +52,7 @@ class IncomeAdapter: RecyclerView.Adapter() { override fun getItemCount(): Int { return transactionList.size } + fun setIncome(transactionList: List) { this.transactionList = transactionList notifyDataSetChanged() diff --git a/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt b/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt index f8d3f9c..7fe1861 100644 --- a/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt +++ b/app/src/main/java/com/serdar/budges/adapter/ViewPagerDash.kt @@ -4,11 +4,11 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle import androidx.viewpager2.adapter.FragmentStateAdapter -import com.serdar.budges.ui.fragments.ExpanseDashFragment -import com.serdar.budges.ui.fragments.IncomeDashFragment +import com.serdar.budges.ui.fragments.dashboard.ExpanseDashFragment +import com.serdar.budges.ui.fragments.dashboard.IncomeDashFragment -class ViewPagerDash (fragmentManager: FragmentManager, lifecycle: Lifecycle): - FragmentStateAdapter(fragmentManager,lifecycle) { +class ViewPagerDash(fragmentManager: FragmentManager, lifecycle: Lifecycle) : + FragmentStateAdapter(fragmentManager, lifecycle) { override fun getItemCount(): Int { return 2 } @@ -16,12 +16,13 @@ class ViewPagerDash (fragmentManager: FragmentManager, lifecycle: Lifecycle): override fun createFragment(position: Int): Fragment { return when (position) { - 0->{ + 0 -> { IncomeDashFragment() } - 1->{ + 1 -> { ExpanseDashFragment() - }else->{ + } + else -> { Fragment() } } diff --git a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt index 29128d2..271f989 100644 --- a/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt +++ b/app/src/main/java/com/serdar/budges/data/transaction/Transaction.kt @@ -7,7 +7,6 @@ import androidx.room.PrimaryKey import kotlinx.android.parcel.Parcelize - @Parcelize @Entity(tableName = "transactions") data class Transaction( @@ -17,7 +16,6 @@ data class Transaction( @ColumnInfo(name = "transaction") val transaction: String, @ColumnInfo(name = "amaount") val amount: Double = 0.0, @ColumnInfo(name = "desciption") val description: String, - @ColumnInfo(name = "expanse") val expanse: String, - @ColumnInfo(name = "income") val income: String, - ) : Parcelable + @ColumnInfo(name = "incomeExpanseType") val incomeExpanseType: String +) : Parcelable diff --git a/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt b/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt index 3f4afbd..b0a9f6a 100644 --- a/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt +++ b/app/src/main/java/com/serdar/budges/di/repository/CryptoRepository.kt @@ -1,10 +1,14 @@ package com.serdar.budges.di.repository import com.serdar.budges.data.crypto.Data -import com.serdar.budges.service.api.RetrofitInctance +import com.serdar.budges.service.api.RetrofitInstance class CryptoRepository { suspend fun getPost(): List { - return RetrofitInctance.api.getData().data + return try { + RetrofitInstance.api.getData().data + } catch (exception: Exception) { + listOf() + } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/serdar/budges/di/repository/TransactionRepository.kt b/app/src/main/java/com/serdar/budges/di/repository/TransactionRepository.kt index bd7a86a..3fa7fe5 100644 --- a/app/src/main/java/com/serdar/budges/di/repository/TransactionRepository.kt +++ b/app/src/main/java/com/serdar/budges/di/repository/TransactionRepository.kt @@ -4,21 +4,22 @@ import androidx.lifecycle.LiveData import com.serdar.budges.data.transaction.Transaction import com.serdar.budges.service.transaction.TransactionDao -class TransactionRepository (private val transactionDao: TransactionDao) { +class TransactionRepository(private val transactionDao: TransactionDao) { - val readAllDataTransaction : LiveData> = transactionDao.readAllData() + val readAllDataTransaction: LiveData> = transactionDao.readAllData() - suspend fun addTransaction(transaction: Transaction){ + suspend fun addTransaction(transaction: Transaction) { transactionDao.addTransaction(transaction) } - suspend fun updateTransaction(transaction: Transaction){ + + suspend fun updateTransaction(transaction: Transaction) { transactionDao.updateTransaction(transaction) } - suspend fun deleteTransaction(transaction: Transaction){ + + suspend fun deleteTransaction(transaction: Transaction) { transactionDao.deleteTransaction(transaction) } - } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt b/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt index df3a8c0..0a65cf6 100644 --- a/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt +++ b/app/src/main/java/com/serdar/budges/infrastructure/NotificationUtils.kt @@ -12,7 +12,7 @@ import com.serdar.budges.util.Constants.Companion.CHANNEL_NAME object NotificationUtils { - fun bugesNotification(context: Context, title: String, description: String) { + fun budgesNotification(context: Context, title: String, description: String) { val notificationManager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager diff --git a/app/src/main/java/com/serdar/budges/model/ApiResponse.kt b/app/src/main/java/com/serdar/budges/model/ApiResponse.kt index 7c62106..ca7c589 100644 --- a/app/src/main/java/com/serdar/budges/model/ApiResponse.kt +++ b/app/src/main/java/com/serdar/budges/model/ApiResponse.kt @@ -2,6 +2,6 @@ package com.serdar.budges.model import com.serdar.budges.data.crypto.Data -data class ApiResponse ( - val data : List - ) \ No newline at end of file +data class ApiResponse( + val data: List +) \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt b/app/src/main/java/com/serdar/budges/service/api/RetrofitInstance.kt similarity index 94% rename from app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt rename to app/src/main/java/com/serdar/budges/service/api/RetrofitInstance.kt index 766af6a..a517456 100644 --- a/app/src/main/java/com/serdar/budges/service/api/RetrofitInctance.kt +++ b/app/src/main/java/com/serdar/budges/service/api/RetrofitInstance.kt @@ -4,7 +4,7 @@ import com.serdar.budges.util.Constants.Companion.BASE_URL import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -object RetrofitInctance { +object RetrofitInstance { private val retrofit by lazy { Retrofit.Builder() diff --git a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt index adbaeed..cc4bb7b 100644 --- a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt +++ b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDao.kt @@ -11,7 +11,7 @@ interface TransactionDao { fun readAllData(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) - fun addTransaction(transaction: Transaction):Long + fun addTransaction(transaction: Transaction): Long @Update fun updateTransaction(transaction: Transaction) @@ -22,11 +22,11 @@ interface TransactionDao { @Query("DELETE FROM transactions ") fun deleteAllTransaction() - @Query("SELECT * FROM transactions WHERE expanse") - fun getExpanseList(): LiveData> + @Query("SELECT * FROM transactions WHERE incomeExpanseType = 'EXPANSE' ") + fun getExpanseList(): LiveData> - @Query("SELECT * FROM transactions WHERE income") - fun getIncomeList(): LiveData> + @Query("SELECT * FROM transactions WHERE incomeExpanseType = 'INCOME' ") + fun getIncomeList(): LiveData> } diff --git a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt index f7d8526..6f47b59 100644 --- a/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt +++ b/app/src/main/java/com/serdar/budges/service/transaction/TransactionDatabase.kt @@ -6,27 +6,31 @@ import androidx.room.Room import androidx.room.RoomDatabase import com.serdar.budges.data.transaction.Transaction -@Database(entities = [Transaction::class], version =3, exportSchema = false) +@Database(entities = [Transaction::class], version = 3, exportSchema = false) - abstract class TransactionDatabase: RoomDatabase() { +abstract class TransactionDatabase : RoomDatabase() { - abstract fun transactionDao(): TransactionDao + abstract fun transactionDao(): TransactionDao - companion object{ - @Volatile - private var INSTANCE: TransactionDatabase? = null + companion object { + @Volatile + private var INSTANCE: TransactionDatabase? = null - fun getDatabase(context: Context): TransactionDatabase { - val tempInstance= INSTANCE - if (tempInstance != null){ - return tempInstance - } - synchronized(this){ - val instance = Room.databaseBuilder(context, TransactionDatabase::class.java,"transaction_database").fallbackToDestructiveMigration().build() - INSTANCE =instance - return instance - } + fun getDatabase(context: Context): TransactionDatabase { + val tempInstance = INSTANCE + if (tempInstance != null) { + return tempInstance + } + synchronized(this) { + val instance = Room.databaseBuilder( + context, + TransactionDatabase::class.java, + "transaction_database" + ).fallbackToDestructiveMigration().build() + INSTANCE = instance + return instance } - } + } +} diff --git a/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt b/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt index cc830d0..dbeaa9b 100644 --- a/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/bottomsheet/BottomSheetFragment.kt @@ -13,9 +13,9 @@ import androidx.navigation.fragment.findNavController import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.serdar.budges.R -import com.serdar.budges.databinding.FragmentBottomSheetBinding import com.serdar.budges.data.transaction.Transaction -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.databinding.FragmentBottomSheetBinding +import com.serdar.budges.ui.viewmodel.TransactionViewModel class BottomSheetFragment : BottomSheetDialogFragment() { @@ -37,22 +37,22 @@ class BottomSheetFragment : BottomSheetDialogFragment() { val facultiesAdapter = ArrayAdapter(requireContext(), R.layout.dropdown, comes) - comes.add("İNCOME") + comes.add("INCOME") comes.add("EXPANSE") - binding.txtFaculty.setOnItemClickListener { _, _, position, _ -> + binding.txtDrop.setOnItemClickListener { _, _, position, _ -> comess = comes[position] } - binding.txtFaculty.setAdapter(facultiesAdapter) + binding.txtDrop.setAdapter(facultiesAdapter) binding.transactionName.addTextChangedListener { - if (it!!.count() > 0) + if (it!!.isNotEmpty()) binding.productName.error = null } binding.transactionAmounts.addTextChangedListener { - if (it!!.count() > 0) + if (it!!.isNotEmpty()) binding.transactionAmounts.error = null } @@ -62,6 +62,7 @@ class BottomSheetFragment : BottomSheetDialogFragment() { } } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return BottomSheetDialog( requireContext(), @@ -82,10 +83,10 @@ class BottomSheetFragment : BottomSheetDialogFragment() { else if (amount == null) binding.transactionAmount.error = "Please enter a valid amount" else if (comes.isEmpty()) - Toast.makeText(requireContext(), "Please Chose Transaction Type", Toast.LENGTH_SHORT).show() - + Toast.makeText(requireContext(), "Please Chose Transaction Type", Toast.LENGTH_SHORT) + .show() else { - val transaction = Transaction(0, label, amount, description, expanse="Expanse", income = "İncome") + val transaction = Transaction(0, label, amount, description, comess) transactionViewModel.addTransaction(transaction) findNavController().navigate(R.id.action_bottomSheetFragment_to_navigation_home) diff --git a/app/src/main/java/com/serdar/budges/ui/components/BalanceDialog.kt b/app/src/main/java/com/serdar/budges/ui/components/BalanceDialog.kt index 3ec1e99..77b0794 100644 --- a/app/src/main/java/com/serdar/budges/ui/components/BalanceDialog.kt +++ b/app/src/main/java/com/serdar/budges/ui/components/BalanceDialog.kt @@ -5,22 +5,87 @@ import android.app.Dialog import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle +import android.text.TextUtils +import android.view.View +import android.widget.Toast import androidx.fragment.app.DialogFragment +import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs +import com.serdar.budges.R +import com.serdar.budges.data.transaction.Transaction import com.serdar.budges.databinding.DialogBalanceBinding +import com.serdar.budges.ui.viewmodel.TransactionViewModel -class BalanceDialog( -):DialogFragment() { - private lateinit var binding:DialogBalanceBinding +class BalanceDialog : DialogFragment() { + private lateinit var binding: DialogBalanceBinding + private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } + private val args by navArgs() override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - binding=DialogBalanceBinding.inflate(layoutInflater) + binding = DialogBalanceBinding.inflate(layoutInflater) - val builder =AlertDialog.Builder(requireActivity()) + val builder = AlertDialog.Builder(requireActivity()) builder.setView(binding.root) - val dialog=builder.create() + val dialog = builder.create() dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) return dialog } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.transactionName.setText(args.currentItem.transaction) + binding.transactionAmounts.setText(args.currentItem.amount.toString()) + binding.transactionDesc.setText(args.currentItem.description) + + + binding.updateButton.setOnClickListener { + updateItem() + + } + binding.deleteData.setOnClickListener { + deleteTransactionData() + } + + } + + private fun deleteTransactionData() { + + transactionViewModel.deleteTransaction(args.currentItem) + findNavController().navigate(R.id.action_balanceDialog_to_navigation_home) + + } + + private fun updateItem() { + val transactionName = binding.transactionName.text.toString() + val transactionAmount = binding.transactionAmounts.text.toString() + val transactionDesc = binding.transactionDesc.text.toString() + + val updateShopping = Transaction( + args.currentItem.id, + transactionName, + transactionAmount.toDouble(), + transactionDesc, args.currentItem.incomeExpanseType + ) + transactionViewModel.updateTransaction(updateShopping) + findNavController().navigate(R.id.action_balanceDialog_to_navigation_home) + + if (inputCheck(transactionName, transactionAmount, transactionDesc)) { + Toast.makeText(requireContext(), "Updated ", Toast.LENGTH_SHORT).show() + } + } + + private fun inputCheck( + transactionName: String, + transactionAmount: String, + transactionDesc: String + ): Boolean { + return !(TextUtils.isEmpty(transactionName) && TextUtils.isEmpty(transactionAmount) && TextUtils.isEmpty( + transactionDesc + )) + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt index e74779a..960d44d 100644 --- a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyFragment.kt @@ -12,8 +12,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.serdar.budges.adapter.CryptoAdapter import com.serdar.budges.databinding.FragmentCurrencyBinding import com.serdar.budges.di.repository.CryptoRepository -import com.serdar.budges.model.CryptoViewModel -import com.serdar.budges.model.CryptoViewModelFactory +import com.serdar.budges.ui.viewmodel.CryptoViewModel +import com.serdar.budges.ui.viewmodel.CryptoViewModelFactory class CurrencyFragment : Fragment() { @@ -28,13 +28,14 @@ class CurrencyFragment : Fragment() { val repository = CryptoRepository() val cryptoViewModelFactory = CryptoViewModelFactory(repository) try { - viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) + viewModel = + ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) viewModel.getData() viewModel.myResponse.observe(requireActivity(), Observer { adapter.setData(it) }) - }catch (exception: Exception){ + } catch (exception: Exception) { Toast.makeText(requireContext(), "No Internet", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyViewModel.kt b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyViewModel.kt index 3a03898..df0d82a 100644 --- a/app/src/main/java/com/serdar/budges/ui/currency/CurrencyViewModel.kt +++ b/app/src/main/java/com/serdar/budges/ui/currency/CurrencyViewModel.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.ViewModel class CurrencyViewModel : ViewModel() { private val _text = MutableLiveData().apply { - value = "This is notifications Fragment" + value = "This is Currency Fragment" } val text: LiveData = _text } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt index 31922b3..d3c3985 100644 --- a/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/dashboard/DashboardFragment.kt @@ -13,11 +13,10 @@ import com.github.mikephil.charting.data.PieData import com.github.mikephil.charting.data.PieDataSet import com.github.mikephil.charting.data.PieEntry import com.google.android.material.tabs.TabLayoutMediator -import com.serdar.budges.R import com.serdar.budges.adapter.BudgesAdapter import com.serdar.budges.adapter.ViewPagerDash import com.serdar.budges.databinding.FragmentDashboardBinding -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.ui.viewmodel.TransactionViewModel class DashboardFragment : Fragment() { private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } @@ -58,13 +57,13 @@ class DashboardFragment : Fragment() { pieList.add(PieEntry(expanseAmount.toFloat(), "Expanse")) - val colors = ArrayList() - colors.add(Color.BLUE) - colors.add(Color.GREEN) - colors.add(Color.RED) + val colorSet = ArrayList() + colorSet.add(Color.rgb(255, 107, 107)) //red + colorSet.add(Color.rgb(173, 232, 244)) // blue + colorSet.add(Color.rgb(216, 243, 220)) // green val pieDataSet = PieDataSet(pieList, "") - pieDataSet.colors = colors + pieDataSet.colors = colorSet pieDataSet.sliceSpace = 0f @@ -72,13 +71,11 @@ class DashboardFragment : Fragment() { val pieData = PieData(pieDataSet) binding.pieChart.data = pieData - binding.pieChart.setUsePercentValues(true) binding.pieChart.isDrawHoleEnabled = true binding.pieChart.description.isEnabled = false - binding.pieChart.setEntryLabelColor(R.color.black) - binding.pieChart.setCenterTextColor(R.color.black) - binding.pieChart.setCenterTextSize(40f) - binding.pieChart.setUsePercentValues(true) + binding.pieChart.legend.isEnabled = true + binding.pieChart.setCenterTextColor(Color.BLACK) + binding.pieChart.centerTextRadiusPercent = 0f binding.pieChart.animateY(1400, Easing.EaseInOutQuad) }) diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseFragment.kt deleted file mode 100644 index 8986654..0000000 --- a/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseFragment.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.serdar.budges.ui.fragments - -import android.os.Bundle -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.Observer -import com.serdar.budges.databinding.FragmentExpanseBinding -import com.serdar.budges.adapter.BudgesAdapter -import com.serdar.budges.model.TransactionViewModel - - -class ExpanseFragment : Fragment() { - private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } - private lateinit var budgesAdapter: BudgesAdapter - private lateinit var binding:FragmentExpanseBinding - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - binding=FragmentExpanseBinding.inflate(layoutInflater) - budgesAdapter = BudgesAdapter() - - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - - transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> - budgesAdapter.setDataTransaction(transactionList) - - val totalAmount = transactionList.sumOf { it.amount } - val budgetAmount = transactionList.filter { it.amount > 0 }.sumOf { it.amount } - val expanseAmount = totalAmount - budgetAmount - - binding.expanse.text = "$ %.2f".format(expanseAmount) - - - }) - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt deleted file mode 100644 index 876e515..0000000 --- a/app/src/main/java/com/serdar/budges/ui/fragments/UpdateFragment.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.serdar.budges.ui.fragments - -import android.os.Bundle -import android.text.TextUtils -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.Toast -import androidx.navigation.fragment.findNavController -import androidx.navigation.fragment.navArgs -import com.serdar.budges.R -import com.serdar.budges.databinding.FragmentUpdateBinding -import com.serdar.budges.data.transaction.Transaction -import com.serdar.budges.model.TransactionViewModel - -class UpdateFragment : Fragment() { - private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } - - private lateinit var binding: FragmentUpdateBinding - private val args by navArgs() - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - binding = FragmentUpdateBinding.inflate(layoutInflater) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - - binding.transactionName.setText(args.current.transaction) - binding.transactionAmounts.setText(args.current.amount.toString()) - binding.transactionDesc.setText(args.current.description) - - - binding.updateButton.setOnClickListener { - updateItem() - - } - binding.deleteData.setOnClickListener { - deleteShoppingData() - } - - } - - private fun updateItem() { - val transactionName = binding.transactionName.text.toString() - val transactionAmount = binding.transactionAmounts.text.toString() - val transactionDesc = binding.transactionDesc.text.toString() - - val updateShopping = Transaction( - args.current.id, - transactionName, - transactionAmount.toDouble(), - transactionDesc, income = "İncome", - expanse = "Expanse") - transactionViewModel.updateTransaction(updateShopping) - findNavController().navigate(R.id.action_updateFragment_to_navigation_home) - - if (inputCheck(transactionName, transactionAmount, transactionDesc)) { - Toast.makeText(requireContext(), "Updated ", Toast.LENGTH_SHORT).show() - } - } - - private fun inputCheck( - transactionName: String, - transactionAmount: String, - transactionDesc: String - ): Boolean { - return !(TextUtils.isEmpty(transactionName) && TextUtils.isEmpty(transactionAmount) && TextUtils.isEmpty( - transactionDesc - )) - } - - private fun deleteShoppingData() { - - transactionViewModel.deleteTransaction(args.current) - findNavController().navigate(R.id.action_updateFragment_to_navigation_home) - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/dashboard/ExpanseDashFragment.kt similarity index 85% rename from app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt rename to app/src/main/java/com/serdar/budges/ui/fragments/dashboard/ExpanseDashFragment.kt index f1f0a30..fa031ff 100644 --- a/app/src/main/java/com/serdar/budges/ui/fragments/ExpanseDashFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/fragments/dashboard/ExpanseDashFragment.kt @@ -1,4 +1,4 @@ -package com.serdar.budges.ui.fragments +package com.serdar.budges.ui.fragments.dashboard import android.os.Bundle import android.view.LayoutInflater @@ -9,12 +9,12 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.serdar.budges.adapter.ExpanseAdapter import com.serdar.budges.databinding.FragmentExpanseDashBinding -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.ui.viewmodel.ExpanseDashViewModel class ExpanseDashFragment : Fragment() { private lateinit var binding: FragmentExpanseDashBinding private lateinit var expanseAdapter: ExpanseAdapter - private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } + private val expanseDashViewModel by lazy { ExpanseDashViewModel(requireActivity().application) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -34,7 +34,7 @@ class ExpanseDashFragment : Fragment() { binding.dashExpanse.layoutManager = LinearLayoutManager(requireContext()) binding.dashExpanse.adapter = expanseAdapter - transactionViewModel.readExpanseData.observe( + expanseDashViewModel.readExpanseData.observe( requireActivity(), Observer { transactionList -> expanseAdapter.setExpanse(transactionList) diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/dashboard/IncomeDashFragment.kt similarity index 70% rename from app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt rename to app/src/main/java/com/serdar/budges/ui/fragments/dashboard/IncomeDashFragment.kt index 0ac4fab..6e375f0 100644 --- a/app/src/main/java/com/serdar/budges/ui/fragments/IncomeDashFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/fragments/dashboard/IncomeDashFragment.kt @@ -1,28 +1,27 @@ -package com.serdar.budges.ui.fragments +package com.serdar.budges.ui.fragments.dashboard import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager -import com.serdar.budges.R -import com.serdar.budges.adapter.BudgesAdapter import com.serdar.budges.adapter.IncomeAdapter +import com.serdar.budges.databinding.FragmentExpanseDashBinding import com.serdar.budges.databinding.FragmentIncomeDashBinding -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.ui.viewmodel.IncomeDashViewModel class IncomeDashFragment : Fragment() { - private lateinit var binding:FragmentIncomeDashBinding + private lateinit var binding: FragmentIncomeDashBinding private lateinit var incomeAdapter: IncomeAdapter - private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } + private val incomeDashViewModel by lazy { IncomeDashViewModel(requireActivity().application) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding=FragmentIncomeDashBinding.inflate(layoutInflater) + binding = FragmentIncomeDashBinding.inflate(layoutInflater) incomeAdapter = IncomeAdapter() return binding.root } @@ -31,12 +30,13 @@ class IncomeDashFragment : Fragment() { super.onViewCreated(view, savedInstanceState) incomeDash() } - private fun incomeDash(){ + + private fun incomeDash() { val incomeAdapter = IncomeAdapter() binding.dashIncome.layoutManager = LinearLayoutManager(requireContext()) binding.dashIncome.adapter = incomeAdapter - transactionViewModel.readExpanseData.observe( + incomeDashViewModel.readIncome.observe( requireActivity(), Observer { transactionList -> incomeAdapter.setIncome(transactionList) diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/home/ExpanseFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/home/ExpanseFragment.kt new file mode 100644 index 0000000..14464bf --- /dev/null +++ b/app/src/main/java/com/serdar/budges/ui/fragments/home/ExpanseFragment.kt @@ -0,0 +1,44 @@ +package com.serdar.budges.ui.fragments.home + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import com.serdar.budges.adapter.ExpanseAdapter +import com.serdar.budges.databinding.FragmentExpanseBinding +import com.serdar.budges.ui.viewmodel.ExpanseDashViewModel + + +class ExpanseFragment : Fragment() { + private val expanseDashViewModel by lazy { ExpanseDashViewModel(requireActivity().application) } + private lateinit var expanseAdapter: ExpanseAdapter + private lateinit var binding: FragmentExpanseBinding + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentExpanseBinding.inflate(layoutInflater) + expanseAdapter = ExpanseAdapter() + + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + + expanseDashViewModel.readExpanseData.observe( + requireActivity(), + Observer { transactionList -> + expanseAdapter.setExpanse(transactionList) + + val expanseAmount = transactionList.sumOf { it.amount } + binding.expanse.text = "$ %.2f".format(expanseAmount) + + + }) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/IncomeFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/home/IncomeFragment.kt similarity index 58% rename from app/src/main/java/com/serdar/budges/ui/fragments/IncomeFragment.kt rename to app/src/main/java/com/serdar/budges/ui/fragments/home/IncomeFragment.kt index 9d94baa..9489c7f 100644 --- a/app/src/main/java/com/serdar/budges/ui/fragments/IncomeFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/fragments/home/IncomeFragment.kt @@ -1,21 +1,21 @@ -package com.serdar.budges.ui.fragments +package com.serdar.budges.ui.fragments.home import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.viewpager2.widget.ViewPager2 import com.serdar.budges.R +import com.serdar.budges.adapter.IncomeAdapter import com.serdar.budges.databinding.FragmentIncomeBinding -import com.serdar.budges.adapter.BudgesAdapter -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.ui.viewmodel.IncomeDashViewModel class IncomeFragment : Fragment() { - private val transactionViewModel by lazy { TransactionViewModel(requireActivity().application) } - private lateinit var budgesAdapter: BudgesAdapter + private val incomeDashViewModel by lazy { IncomeDashViewModel(requireActivity().application) } + private lateinit var incomeAdapter: IncomeAdapter private lateinit var binding: FragmentIncomeBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -24,7 +24,7 @@ class IncomeFragment : Fragment() { binding = FragmentIncomeBinding.inflate(layoutInflater) val viewPager = activity?.findViewById(R.id.viewPages) viewPager?.currentItem = 1 - budgesAdapter = BudgesAdapter() + incomeAdapter = IncomeAdapter() return binding.root } @@ -32,12 +32,11 @@ class IncomeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> - budgesAdapter.setDataTransaction(transactionList) - - val budgetAmount = transactionList.filter { it.amount > 0 }.sumOf { it.amount } - binding.income.text = "$ %.2f".format(budgetAmount) + incomeDashViewModel.readIncome.observe(requireActivity(), Observer { transactionList -> + incomeAdapter.setIncome(transactionList) + val incomeAmount = transactionList.sumOf { it.amount } + binding.income.text = "$ %.2f".format(incomeAmount) }) diff --git a/app/src/main/java/com/serdar/budges/ui/fragments/TotalBalanceFragment.kt b/app/src/main/java/com/serdar/budges/ui/fragments/home/TotalBalanceFragment.kt similarity index 86% rename from app/src/main/java/com/serdar/budges/ui/fragments/TotalBalanceFragment.kt rename to app/src/main/java/com/serdar/budges/ui/fragments/home/TotalBalanceFragment.kt index e7672a5..ea6f47c 100644 --- a/app/src/main/java/com/serdar/budges/ui/fragments/TotalBalanceFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/fragments/home/TotalBalanceFragment.kt @@ -1,16 +1,16 @@ -package com.serdar.budges.ui.fragments +package com.serdar.budges.ui.fragments.home import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.viewpager2.widget.ViewPager2 import com.serdar.budges.R -import com.serdar.budges.databinding.FragmentTotalBalanceBinding import com.serdar.budges.adapter.BudgesAdapter -import com.serdar.budges.model.TransactionViewModel +import com.serdar.budges.databinding.FragmentTotalBalanceBinding +import com.serdar.budges.ui.viewmodel.TransactionViewModel class TotalBalanceFragment : Fragment() { @@ -21,11 +21,10 @@ class TotalBalanceFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding=FragmentTotalBalanceBinding.inflate(layoutInflater) + binding = FragmentTotalBalanceBinding.inflate(layoutInflater) budgesAdapter = BudgesAdapter() - val viewPager = activity?.findViewById(R.id.viewPages) - viewPager?.currentItem =0 + viewPager?.currentItem = 0 return binding.root } @@ -34,10 +33,8 @@ class TotalBalanceFragment : Fragment() { transactionViewModel.readAllData.observe(requireActivity(), Observer { transactionList -> budgesAdapter.setDataTransaction(transactionList) - val totalAmount = transactionList.sumOf { it.amount } binding.total.text = "$ %.2f".format(totalAmount) - }) } diff --git a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt index f1b8eef..db0f7c9 100644 --- a/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/home/HomeFragment.kt @@ -16,20 +16,20 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.serdar.budges.R -import com.serdar.budges.databinding.FragmentHomeBinding import com.serdar.budges.adapter.BudgesAdapter import com.serdar.budges.adapter.HomeCryptoAdapter import com.serdar.budges.adapter.ViewPagerAdapter import com.serdar.budges.data.transaction.Transaction +import com.serdar.budges.databinding.FragmentHomeBinding import com.serdar.budges.di.repository.CryptoRepository import com.serdar.budges.infrastructure.NotificationUtils -import com.serdar.budges.model.CryptoViewModel -import com.serdar.budges.model.CryptoViewModelFactory -import com.serdar.budges.model.TransactionViewModel import com.serdar.budges.ui.components.BalanceDialog -import com.serdar.budges.ui.fragments.ExpanseFragment -import com.serdar.budges.ui.fragments.IncomeFragment -import com.serdar.budges.ui.fragments.TotalBalanceFragment +import com.serdar.budges.ui.fragments.home.ExpanseFragment +import com.serdar.budges.ui.fragments.home.IncomeFragment +import com.serdar.budges.ui.fragments.home.TotalBalanceFragment +import com.serdar.budges.ui.viewmodel.CryptoViewModel +import com.serdar.budges.ui.viewmodel.CryptoViewModelFactory +import com.serdar.budges.ui.viewmodel.TransactionViewModel import com.serdar.budges.util.Constants.Companion.DESCRIPTION import com.serdar.budges.util.Constants.Companion.TITLE @@ -105,18 +105,7 @@ class HomeFragment : Fragment() { } - private fun dialog() { - val firstrun: Boolean = requireActivity().getSharedPreferences("PREFERENCE", MODE_PRIVATE) - .getBoolean("firstrun", true); - if (firstrun) { - val dialog = BalanceDialog().show(parentFragmentManager, "dialog") - requireActivity().getSharedPreferences("PREFERENCE", MODE_PRIVATE) - .edit() - .putBoolean("firstrun", false) - .apply() - } - } private fun swipeToDelete() { val budgesAdapter = BudgesAdapter() @@ -124,54 +113,48 @@ class HomeFragment : Fragment() { binding.rvView.layoutManager = LinearLayoutManager(requireContext()) binding.rvView.adapter = budgesAdapter - try { - //reading data and setting data to recyclerview - transactionViewModel.readAllData.observe( - requireActivity(), - Observer { transactionList -> - budgesAdapter.setDataTransaction(transactionList) - - val totalAmount = transactionList.sumOf { it.amount } - if (totalAmount > 2500) { - dialog() - } - if (totalAmount <=0) { - NotificationUtils.bugesNotification( - requireContext(), - TITLE, - DESCRIPTION - ) - } - - - val itemTouchHelper = - object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { - override fun onMove( - recyclerView: RecyclerView, - viewHolder: RecyclerView.ViewHolder, - target: RecyclerView.ViewHolder - ): Boolean { - return false - } - - override fun onSwiped( - viewHolder: RecyclerView.ViewHolder, - direction: Int - ) { + //reading data and setting data to recyclerview + transactionViewModel.readAllData.observe( + requireActivity(), + Observer { transactionList -> + budgesAdapter.setDataTransaction(transactionList) + + val totalAmount = transactionList.sumOf { it.amount } + if (totalAmount <= 0) { + NotificationUtils.budgesNotification( + requireContext(), + TITLE, + DESCRIPTION + ) + } + + + val itemTouchHelper = + object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + return false + } - val position = viewHolder.adapterPosition - transactionViewModel.deleteTransaction(transactionList[position]) - } + override fun onSwiped( + viewHolder: RecyclerView.ViewHolder, + direction: Int + ) { + val position = viewHolder.adapterPosition + transactionViewModel.deleteTransaction(transactionList[position]) } - val swipeHelper = ItemTouchHelper(itemTouchHelper) - swipeHelper.attachToRecyclerView(binding.rvView) - }) - } catch (exception: Exception) { - Toast.makeText(requireContext(), "No internet", Toast.LENGTH_SHORT).show() - } + + } + val swipeHelper = ItemTouchHelper(itemTouchHelper) + swipeHelper.attachToRecyclerView(binding.rvView) + }) } + private fun cryptoData() { val repository = CryptoRepository() val cryptoViewModelFactory = CryptoViewModelFactory(repository) @@ -179,11 +162,13 @@ class HomeFragment : Fragment() { viewModel = ViewModelProvider(this, cryptoViewModelFactory).get(CryptoViewModel::class.java) viewModel.getData() viewModel.myResponse.observe(requireActivity(), Observer { - adapter.setDatas(it) - + if (it.isEmpty()) { + Toast.makeText(requireContext(), "No internet", Toast.LENGTH_SHORT).show() + } else { + adapter.setDatas(it) + } }) - } - } + diff --git a/app/src/main/java/com/serdar/budges/ui/splash/HomeActivity.kt b/app/src/main/java/com/serdar/budges/ui/splash/HomeActivity.kt index e1c63d7..987cff2 100644 --- a/app/src/main/java/com/serdar/budges/ui/splash/HomeActivity.kt +++ b/app/src/main/java/com/serdar/budges/ui/splash/HomeActivity.kt @@ -1,7 +1,7 @@ package com.serdar.budges.ui.splash -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.bottomnavigation.BottomNavigationView @@ -15,7 +15,7 @@ class HomeActivity : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityHomeBinding.inflate(layoutInflater) - setContentView(binding.root) + setContentView(binding.root) val navView: BottomNavigationView = binding.navView diff --git a/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt b/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt index a86af93..42131ea 100644 --- a/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt +++ b/app/src/main/java/com/serdar/budges/ui/splash/SplashFragment.kt @@ -1,12 +1,15 @@ package com.serdar.budges.ui.splash +import android.content.Context import android.content.Intent import android.os.Bundle import android.os.Handler -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import com.serdar.budges.R import com.serdar.budges.databinding.FragmentSplashBinding @@ -16,7 +19,7 @@ class SplashFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding=FragmentSplashBinding.inflate(layoutInflater) + binding = FragmentSplashBinding.inflate(layoutInflater) return binding.root } @@ -24,15 +27,24 @@ class SplashFragment : Fragment() { super.onViewCreated(view, savedInstanceState) Handler().postDelayed( { - + if (onBoardingFinished()) { val intent = Intent(requireActivity(), HomeActivity::class.java) startActivity(intent) requireActivity().finish() + } else { + findNavController().navigate(R.id.action_splashFragment_to_viewPagerFragment) + } }, - 2500 + 3000 ) + } + private fun onBoardingFinished(): Boolean { + val sp = requireActivity().getSharedPreferences("onBoarding", Context.MODE_PRIVATE) + + return sp.getBoolean("Finished", false) + } } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt b/app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModel.kt similarity index 61% rename from app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt rename to app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModel.kt index e0ad147..53d9cd1 100644 --- a/app/src/main/java/com/serdar/budges/model/CryptoViewModel.kt +++ b/app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModel.kt @@ -1,4 +1,4 @@ -package com.serdar.budges.model +package com.serdar.budges.ui.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -7,14 +7,14 @@ import com.serdar.budges.data.crypto.Data import com.serdar.budges.di.repository.CryptoRepository import kotlinx.coroutines.launch -class CryptoViewModel(private val cryptoRepository: CryptoRepository):ViewModel() { +class CryptoViewModel(private val cryptoRepository: CryptoRepository) : ViewModel() { - val myResponse:MutableLiveData> = MutableLiveData() + val myResponse: MutableLiveData> = MutableLiveData() fun getData() { viewModelScope.launch { val response = cryptoRepository.getPost() - myResponse.value=response + myResponse.value = response } } } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/model/CryptoViewModelFactory.kt b/app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModelFactory.kt similarity index 71% rename from app/src/main/java/com/serdar/budges/model/CryptoViewModelFactory.kt rename to app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModelFactory.kt index 94d7bce..b7c9883 100644 --- a/app/src/main/java/com/serdar/budges/model/CryptoViewModelFactory.kt +++ b/app/src/main/java/com/serdar/budges/ui/viewmodel/CryptoViewModelFactory.kt @@ -1,14 +1,15 @@ -package com.serdar.budges.model +package com.serdar.budges.ui.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.serdar.budges.di.repository.CryptoRepository class CryptoViewModelFactory( - private val repository: CryptoRepository): ViewModelProvider.Factory{ + private val repository: CryptoRepository +) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { return CryptoViewModel(repository) as T } - } +} diff --git a/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt b/app/src/main/java/com/serdar/budges/ui/viewmodel/TransactionViewModel.kt similarity index 90% rename from app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt rename to app/src/main/java/com/serdar/budges/ui/viewmodel/TransactionViewModel.kt index 72c9ce4..e5faa30 100644 --- a/app/src/main/java/com/serdar/budges/model/TransactionViewModel.kt +++ b/app/src/main/java/com/serdar/budges/ui/viewmodel/TransactionViewModel.kt @@ -1,4 +1,4 @@ -package com.serdar.budges.model +package com.serdar.budges.ui.viewmodel import android.app.Application import androidx.lifecycle.AndroidViewModel @@ -25,9 +25,8 @@ class TransactionViewModel(application: Application) : AndroidViewModel(applicat val transactionDao = TransactionDatabase.getDatabase(application).transactionDao() repository = TransactionRepository(transactionDao) readAllData = transactionDao.readAllData() - readExpanseData=transactionDao.getExpanseList() - readIncomeData=transactionDao.getIncomeList() - + readExpanseData = transactionDao.getExpanseList() + readIncomeData = transactionDao.getIncomeList() } @@ -52,7 +51,4 @@ class TransactionViewModel(application: Application) : AndroidViewModel(applicat } - - - } \ No newline at end of file diff --git a/app/src/main/java/com/serdar/budges/util/Constants.kt b/app/src/main/java/com/serdar/budges/util/Constants.kt index 8bab899..6bd5c01 100644 --- a/app/src/main/java/com/serdar/budges/util/Constants.kt +++ b/app/src/main/java/com/serdar/budges/util/Constants.kt @@ -2,7 +2,7 @@ package com.serdar.budges.util class Constants { - companion object{ + companion object { const val BASE_URL = "https://api.coincap.io/" const val CHANNEL_ID = "MyTask" diff --git a/app/src/main/res/drawable/bottom_bar.xml b/app/src/main/res/drawable/bottom_bar.xml index 021086b..0db61eb 100644 --- a/app/src/main/res/drawable/bottom_bar.xml +++ b/app/src/main/res/drawable/bottom_bar.xml @@ -3,7 +3,7 @@ android:shape="rectangle" > - + diff --git a/app/src/main/res/drawable/bottom_sheet.xml b/app/src/main/res/drawable/bottom_sheet.xml index 190b6c5..e368854 100644 --- a/app/src/main/res/drawable/bottom_sheet.xml +++ b/app/src/main/res/drawable/bottom_sheet.xml @@ -5,8 +5,8 @@ - + diff --git a/app/src/main/res/drawable/expansesss.png b/app/src/main/res/drawable/expansesss.png new file mode 100644 index 0000000000000000000000000000000000000000..31dae163967261bdc57c11f133b614dd6d9290d9 GIT binary patch literal 9795 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index e94738d..ab1aa64 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -7,7 +7,6 @@ android:layout_height="match_parent" > - - + - + - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_balance.xml b/app/src/main/res/layout/dialog_balance.xml index 2d5e61f..38d80b2 100644 --- a/app/src/main/res/layout/dialog_balance.xml +++ b/app/src/main/res/layout/dialog_balance.xml @@ -2,15 +2,17 @@ + android:layout_height="wrap_content" + android:layout_marginTop="150dp"> + android:layout_height="500dp"> - + + + + + + app:layout_constraintTop_toTopOf="parent"> + + + + + - + +