From db5678512f4290e43909d1364270e5a6699ae455 Mon Sep 17 00:00:00 2001 From: Sanju S Date: Wed, 3 Feb 2021 18:02:05 +0530 Subject: [PATCH 1/3] Create Empty State Layout Signed-off-by: Sanju S --- .../res/layout/content_empty_state_layout.xml | 50 + .../main/res/layout/fragment_dashboard.xml | 11 + app/src/main/res/raw/empty.json | 4997 +++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 4 files changed, 5060 insertions(+) create mode 100644 app/src/main/res/layout/content_empty_state_layout.xml create mode 100644 app/src/main/res/raw/empty.json diff --git a/app/src/main/res/layout/content_empty_state_layout.xml b/app/src/main/res/layout/content_empty_state_layout.xml new file mode 100644 index 0000000..068651b --- /dev/null +++ b/app/src/main/res/layout/content_empty_state_layout.xml @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 7c7ad4a..1deb09e 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -87,6 +87,17 @@ + \%s \nAmount: %s, \nTransaction-Type: %s, \nTag: %s, \nDate: %s, \nNote: %s, \nCreatedAt: %s \n\nVisit: https://github.com/Spikeysanju/Expenso Ok + No Transaction Yet! + After your first transaction you will be able to view it here From 4aa11b832044e78c3624a9e6ee8766677ba9a405 Mon Sep 17 00:00:00 2001 From: Sanju S Date: Wed, 3 Feb 2021 18:39:19 +0530 Subject: [PATCH 2/3] Complete Empty State Layout Signed-off-by: Sanju S --- .../spikeysanju/expensetracker/view/DashboardFragment.kt | 7 ++++++- app/src/main/res/layout/content_empty_state_layout.xml | 8 +++----- app/src/main/res/layout/fragment_dashboard.xml | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt b/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt index c4e1d95..284f18c 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt @@ -161,12 +161,17 @@ class DashboardFragment : toast("Error") } is ViewState.Empty -> { - toast("Empty") + hideAllViews() } } } } + private fun hideAllViews() = with(binding) { + dashboardGroup.hide() + emptyStateLayout.show() + } + private fun onTransactionLoaded(list: List) = transactionAdapter.differ.submitList(list) diff --git a/app/src/main/res/layout/content_empty_state_layout.xml b/app/src/main/res/layout/content_empty_state_layout.xml index 068651b..df93973 100644 --- a/app/src/main/res/layout/content_empty_state_layout.xml +++ b/app/src/main/res/layout/content_empty_state_layout.xml @@ -11,11 +11,10 @@ android:layout_width="@dimen/dimen_250" android:layout_height="@dimen/dimen_250" android:layout_centerHorizontal="true" - android:layout_marginStart="@dimen/dimen_16" - android:layout_marginTop="@dimen/dimen_16" - android:layout_marginEnd="@dimen/dimen_16" app:lottie_autoPlay="true" - app:lottie_rawRes="@raw/failed" + app:lottie_loop="true" + app:lottie_rawRes="@raw/empty" + app:lottie_repeatMode="restart" tools:src="@drawable/ic_logo" /> From a8eb6e70ec8af4ab5971f43cb1dd50a0f92fcff0 Mon Sep 17 00:00:00 2001 From: Sanju S Date: Wed, 3 Feb 2021 20:12:23 +0530 Subject: [PATCH 3/3] Refactor Code Signed-off-by: Sanju S --- .../spikeysanju/expensetracker/MainActivity.kt | 17 +++++++++++++++++ .../view/AddTransactionFragment.kt | 13 ++----------- .../expensetracker/view/DashboardFragment.kt | 12 ++---------- .../view/EditTransactionFragment.kt | 12 ++---------- .../view/TransactionDetailsFragment.kt | 12 ++---------- 5 files changed, 25 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/MainActivity.kt b/app/src/main/java/dev/spikeysanju/expensetracker/MainActivity.kt index 5a9e1a6..0250987 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/MainActivity.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/MainActivity.kt @@ -1,6 +1,7 @@ package dev.spikeysanju.expensetracker import android.os.Bundle +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment @@ -8,15 +9,31 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupActionBarWithNavController import dagger.hilt.android.AndroidEntryPoint import dev.spikeysanju.expensetracker.databinding.ActivityMainBinding +import dev.spikeysanju.expensetracker.db.AppDatabase +import dev.spikeysanju.expensetracker.repo.TransactionRepo +import dev.spikeysanju.expensetracker.utils.viewModelFactory +import dev.spikeysanju.expensetracker.viewmodel.TransactionViewModel @AndroidEntryPoint class MainActivity : AppCompatActivity() { private lateinit var navHostFragment: NavHostFragment private lateinit var appBarConfiguration: AppBarConfiguration + private val repo by lazy { TransactionRepo(AppDatabase(this)) } + private val viewModel: TransactionViewModel by viewModels { + viewModelFactory { TransactionViewModel(this.application, repo) } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + + /** + * Just so the viewModel doesn't get removed by the compiler, as it isn't used + * anywhere here for now + */ + viewModel + initViews(binding) observeNavElements(binding, navHostFragment.navController) } diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/view/AddTransactionFragment.kt b/app/src/main/java/dev/spikeysanju/expensetracker/view/AddTransactionFragment.kt index 81f951e..7d75445 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/view/AddTransactionFragment.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/view/AddTransactionFragment.kt @@ -5,16 +5,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter -import androidx.fragment.app.viewModels +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import dagger.hilt.android.AndroidEntryPoint import dev.spikeysanju.expensetracker.R import dev.spikeysanju.expensetracker.databinding.FragmentAddTransactionBinding -import dev.spikeysanju.expensetracker.db.AppDatabase import dev.spikeysanju.expensetracker.model.Transaction -import dev.spikeysanju.expensetracker.repo.TransactionRepo import dev.spikeysanju.expensetracker.utils.Constants -import dev.spikeysanju.expensetracker.utils.viewModelFactory import dev.spikeysanju.expensetracker.view.base.BaseFragment import dev.spikeysanju.expensetracker.viewmodel.TransactionViewModel import transformIntoDatePicker @@ -23,13 +20,7 @@ import java.util.* @AndroidEntryPoint class AddTransactionFragment : BaseFragment() { - private val transactionRepo by lazy { - TransactionRepo(AppDatabase.invoke(applicationContext())) - } - override val viewModel: TransactionViewModel by viewModels { - viewModelFactory { TransactionViewModel(requireActivity().application, transactionRepo) } - } - + override val viewModel: TransactionViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initViews() diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt b/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt index 284f18c..f78f8ae 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/view/DashboardFragment.kt @@ -7,7 +7,7 @@ import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.TextView import androidx.appcompat.app.AppCompatDelegate -import androidx.fragment.app.viewModels +import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.ItemTouchHelper @@ -17,11 +17,8 @@ import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint import dev.spikeysanju.expensetracker.R import dev.spikeysanju.expensetracker.databinding.FragmentDashboardBinding -import dev.spikeysanju.expensetracker.db.AppDatabase import dev.spikeysanju.expensetracker.model.Transaction -import dev.spikeysanju.expensetracker.repo.TransactionRepo import dev.spikeysanju.expensetracker.utils.ViewState -import dev.spikeysanju.expensetracker.utils.viewModelFactory import dev.spikeysanju.expensetracker.view.adapter.TransactionAdapter import dev.spikeysanju.expensetracker.view.base.BaseFragment import dev.spikeysanju.expensetracker.viewmodel.TransactionViewModel @@ -35,12 +32,7 @@ import show class DashboardFragment : BaseFragment() { private lateinit var transactionAdapter: TransactionAdapter - private val transactionRepo by lazy { - TransactionRepo(AppDatabase.invoke(applicationContext())) - } - override val viewModel: TransactionViewModel by viewModels { - viewModelFactory { TransactionViewModel(requireActivity().application, transactionRepo) } - } + override val viewModel: TransactionViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/view/EditTransactionFragment.kt b/app/src/main/java/dev/spikeysanju/expensetracker/view/EditTransactionFragment.kt index 204ad51..8608b82 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/view/EditTransactionFragment.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/view/EditTransactionFragment.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter -import androidx.fragment.app.viewModels +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import dagger.hilt.android.AndroidEntryPoint import dev.spikeysanju.expensetracker.R import dev.spikeysanju.expensetracker.databinding.FragmentEditTransactionBinding -import dev.spikeysanju.expensetracker.db.AppDatabase import dev.spikeysanju.expensetracker.model.Transaction -import dev.spikeysanju.expensetracker.repo.TransactionRepo import dev.spikeysanju.expensetracker.utils.Constants -import dev.spikeysanju.expensetracker.utils.viewModelFactory import dev.spikeysanju.expensetracker.view.base.BaseFragment import dev.spikeysanju.expensetracker.viewmodel.TransactionViewModel import transformIntoDatePicker @@ -24,12 +21,7 @@ import java.util.* @AndroidEntryPoint class EditTransactionFragment : BaseFragment() { private val args: EditTransactionFragmentArgs by navArgs() - private val transactionRepo by lazy { - TransactionRepo(AppDatabase.invoke(applicationContext())) - } - override val viewModel: TransactionViewModel by viewModels { - viewModelFactory { TransactionViewModel(requireActivity().application, transactionRepo) } - } + override val viewModel: TransactionViewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/dev/spikeysanju/expensetracker/view/TransactionDetailsFragment.kt b/app/src/main/java/dev/spikeysanju/expensetracker/view/TransactionDetailsFragment.kt index 7e8dcc8..ff891f7 100644 --- a/app/src/main/java/dev/spikeysanju/expensetracker/view/TransactionDetailsFragment.kt +++ b/app/src/main/java/dev/spikeysanju/expensetracker/view/TransactionDetailsFragment.kt @@ -10,7 +10,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ShareCompat import androidx.core.content.ContextCompat import androidx.core.view.drawToBitmap -import androidx.fragment.app.viewModels +import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -18,12 +18,9 @@ import cleanTextContent import dagger.hilt.android.AndroidEntryPoint import dev.spikeysanju.expensetracker.R import dev.spikeysanju.expensetracker.databinding.FragmentTransactionDetailsBinding -import dev.spikeysanju.expensetracker.db.AppDatabase import dev.spikeysanju.expensetracker.model.Transaction -import dev.spikeysanju.expensetracker.repo.TransactionRepo import dev.spikeysanju.expensetracker.utils.DetailState import dev.spikeysanju.expensetracker.utils.saveBitmap -import dev.spikeysanju.expensetracker.utils.viewModelFactory import dev.spikeysanju.expensetracker.view.base.BaseFragment import dev.spikeysanju.expensetracker.viewmodel.TransactionViewModel import indianRupee @@ -32,12 +29,7 @@ import kotlinx.coroutines.flow.collect @AndroidEntryPoint class TransactionDetailsFragment : BaseFragment() { private val args: TransactionDetailsFragmentArgs by navArgs() - private val transactionRepo by lazy { - TransactionRepo(AppDatabase.invoke(applicationContext())) - } - override val viewModel: TransactionViewModel by viewModels { - viewModelFactory { TransactionViewModel(requireActivity().application, transactionRepo) } - } + override val viewModel: TransactionViewModel by activityViewModels() // handle permission dialog private val requestLauncher =