Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Empty State #26 #27

Merged
merged 3 commits into from
Feb 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions app/src/main/java/dev/spikeysanju/expensetracker/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,39 @@
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
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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -23,13 +20,7 @@ import java.util.*
@AndroidEntryPoint
class AddTransactionFragment :
BaseFragment<FragmentAddTransactionBinding, TransactionViewModel>() {
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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -35,12 +32,7 @@ import show
class DashboardFragment :
BaseFragment<FragmentDashboardBinding, TransactionViewModel>() {
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)
Expand Down Expand Up @@ -161,12 +153,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<Transaction>) =
transactionAdapter.differ.submitList(list)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -24,12 +21,7 @@ import java.util.*
@AndroidEntryPoint
class EditTransactionFragment : BaseFragment<FragmentEditTransactionBinding, TransactionViewModel>() {
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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,17 @@ 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
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
Expand All @@ -32,12 +29,7 @@ import kotlinx.coroutines.flow.collect
@AndroidEntryPoint
class TransactionDetailsFragment : BaseFragment<FragmentTransactionDetailsBinding, TransactionViewModel>() {
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 =
Expand Down
48 changes: 48 additions & 0 deletions app/src/main/res/layout/content_empty_state_layout.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/empty_state_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<com.airbnb.lottie.LottieAnimationView
android:id="@+id/empty_state_image"
android:layout_width="@dimen/dimen_250"
android:layout_height="@dimen/dimen_250"
android:layout_centerHorizontal="true"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/empty"
app:lottie_repeatMode="restart"
tools:src="@drawable/ic_logo" />

<TextView
android:id="@+id/empty_state_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/empty_state_image"
android:layout_centerHorizontal="true"
android:fontFamily="@font/open_sans_bold"
android:gravity="center_horizontal"
android:text="@string/text_transaction_empty_title"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
android:textColor="@color/black" />


<TextView
android:id="@+id/empty_state_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/empty_state_title"
android:layout_centerHorizontal="true"
android:layout_marginStart="@dimen/dimen_32"
android:layout_marginTop="@dimen/dimen_12"
android:layout_marginEnd="@dimen/dimen_32"
android:fontFamily="@font/open_sans_regular"
android:gravity="center_horizontal"
android:text="@string/text_transaction_empty_desc"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/black" />

</RelativeLayout>
12 changes: 12 additions & 0 deletions app/src/main/res/layout/fragment_dashboard.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@


<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dashboard_group"
android:layout_width="match_parent"
android:layout_height="wrap_content">

Expand Down Expand Up @@ -87,6 +88,17 @@

</ScrollView>

<ViewStub
android:id="@+id/emptyStateLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout="@layout/content_empty_state_layout"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btn_add_transaction"
Expand Down
Loading