diff --git a/app/src/main/java/com/example/bondoman/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/activities/MainActivity.kt index b432cc44dd68e7dbbb2c01f14f00e5f2d6728973..097d17ac536af5d6bdc0b20e9c44654b6729d4eb 100644 --- a/app/src/main/java/com/example/bondoman/activities/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/activities/MainActivity.kt @@ -1,6 +1,7 @@ package com.example.bondoman.activities import android.os.Bundle +import android.util.Log import android.view.View import android.view.ViewGroup import android.widget.ImageButton @@ -16,11 +17,13 @@ import com.example.bondoman.fragments.SettingsFragment import com.example.bondoman.fragments.TransactionListFragment import com.example.bondoman.fragments.TransactionUpdateFragment import com.example.bondoman.fragments.TwibbonFragment -import com.example.bondoman.utils.interfaces.LayoutAppender +import com.example.bondoman.utils.interfaces.ParentActivityService import com.google.android.material.bottomnavigation.BottomNavigationView -class MainActivity : AppCompatActivity(), LayoutAppender { +class MainActivity : AppCompatActivity(), ParentActivityService { private lateinit var mainLayout: ConstraintLayout + private lateinit var backButton: ImageButton + private lateinit var headerText: TextView private fun setCurrentFragment(fragment: Fragment) { supportFragmentManager.beginTransaction().apply { @@ -44,15 +47,32 @@ class MainActivity : AppCompatActivity(), LayoutAppender { mainLayout.removeView(layout) } - override fun getParentId(): Int { + override fun getParentLayoutId(): Int { return R.id.main } + override fun showBackButton(onClick: () -> Unit) { + backButton.visibility = View.VISIBLE + backButton.setOnClickListener { onClick() } + } + + override fun hideBackButton() { + backButton.visibility = View.GONE + backButton.setOnClickListener {} + } + + override fun setHeaderText(text: String) { + Log.d("SET HEADER TO", text) + headerText.text = text + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mainLayout = findViewById(R.id.main) + backButton = mainLayout.findViewById(R.id.back_button) + headerText = mainLayout.findViewById(R.id.header_text) // back button icon orientation val backButton = findViewById<ImageButton>(R.id.back_button) diff --git a/app/src/main/java/com/example/bondoman/fragments/ScanReceiptFragment.kt b/app/src/main/java/com/example/bondoman/fragments/ScanReceiptFragment.kt index 1ae5e124be122e2b21b652dc76f6ea078bbbdbb4..263cf83623c8961bd6b35168141643b7c9bc225a 100644 --- a/app/src/main/java/com/example/bondoman/fragments/ScanReceiptFragment.kt +++ b/app/src/main/java/com/example/bondoman/fragments/ScanReceiptFragment.kt @@ -16,7 +16,6 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import com.example.bondoman.databinding.FragmentScanReceiptBinding import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors class ScanReceiptFragment : Fragment() { private lateinit var viewBinding: FragmentScanReceiptBinding @@ -65,9 +64,6 @@ class ScanReceiptFragment : Fragment() { requestPermissions() } - // Set up the listeners for take photo and video capture button - viewBinding.imageCaptureButton.setOnClickListener { takePhoto() } - // Set up the listeners for take photo and video capture button viewBinding.receiptCaptureButton.setOnClickListener { takePhoto() } } diff --git a/app/src/main/java/com/example/bondoman/fragments/TransactionAddFragment.kt b/app/src/main/java/com/example/bondoman/fragments/TransactionAddFragment.kt index c2038d10592c303b76fdf82332eddd3a77a0f332..0bd02d2401846bf14281eb4a4539fc92e90d1ec2 100644 --- a/app/src/main/java/com/example/bondoman/fragments/TransactionAddFragment.kt +++ b/app/src/main/java/com/example/bondoman/fragments/TransactionAddFragment.kt @@ -8,10 +8,19 @@ import com.example.bondoman.R import com.example.bondoman.components.TextInputComponent class TransactionAddFragment : TransactionFormFragment() { + companion object { + val headerText: String = "New Transaction" + @JvmStatic + fun newInstance() = + TransactionUpdateFragment().apply { + } + } + override fun getHeaderText(): String { + return headerText + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -26,11 +35,4 @@ class TransactionAddFragment : TransactionFormFragment() { return view } - - companion object { - @JvmStatic - fun newInstance() = - TransactionUpdateFragment().apply { - } - } } diff --git a/app/src/main/java/com/example/bondoman/fragments/TransactionFormFragment.kt b/app/src/main/java/com/example/bondoman/fragments/TransactionFormFragment.kt index 8811058bf3d5672d6219b03dcf69a714656a063a..4937ec7e843fe08a89a97d3870663cf15df5c9d3 100644 --- a/app/src/main/java/com/example/bondoman/fragments/TransactionFormFragment.kt +++ b/app/src/main/java/com/example/bondoman/fragments/TransactionFormFragment.kt @@ -8,10 +8,15 @@ import android.widget.ArrayAdapter import android.widget.AutoCompleteTextView import androidx.fragment.app.Fragment import com.example.bondoman.R +import com.example.bondoman.utils.interfaces.ParentActivityService +import com.example.bondoman.utils.interfaces.SecondaryFragment -open class TransactionFormFragment : Fragment() { +abstract class TransactionFormFragment : Fragment(), SecondaryFragment { + private lateinit var parentActivityService: ParentActivityService override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + parentActivityService = requireActivity() as ParentActivityService } override fun onCreateView( @@ -21,8 +26,9 @@ open class TransactionFormFragment : Fragment() { ): View? { // Inflate the layout for this fragment val view = inflater.inflate(R.layout.fragment_transaction_form, container, false) - val autoCompleteTextView = view.findViewById<AutoCompleteTextView>(R.id.transaction_form_auto_complete) + // set category dropdown adapter + val autoCompleteTextView = view.findViewById<AutoCompleteTextView>(R.id.transaction_form_auto_complete) val categories = listOf("satu", "dua", "tiga") val dropdownAdapter = ArrayAdapter(requireContext(), R.layout.component_dropdown_item, categories) autoCompleteTextView.setAdapter(dropdownAdapter) @@ -39,13 +45,12 @@ open class TransactionFormFragment : Fragment() { } } - return view - } + // set header text + parentActivityService.setHeaderText(getHeaderText()) - companion object { - @JvmStatic - fun newInstance() = - TransactionUpdateFragment().apply { - } + // set back button callback + parentActivityService.showBackButton { } + + return view } } diff --git a/app/src/main/java/com/example/bondoman/fragments/TransactionListFragment.kt b/app/src/main/java/com/example/bondoman/fragments/TransactionListFragment.kt index ee8f611bcbc67c7368de9a8918d5b8da754d6b63..db831af7f0ebf40db3494c08fd625ae79a1fcce0 100644 --- a/app/src/main/java/com/example/bondoman/fragments/TransactionListFragment.kt +++ b/app/src/main/java/com/example/bondoman/fragments/TransactionListFragment.kt @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView.ItemDecoration import com.example.bondoman.R import com.example.bondoman.adapters.TransactionListAdapter import com.example.bondoman.decorators.DividerItemDecorator -import com.example.bondoman.utils.interfaces.LayoutAppender +import com.example.bondoman.utils.interfaces.ParentActivityService import com.example.bondoman.utils.interfaces.TransactionClickListener import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback @@ -26,6 +26,7 @@ class TransactionListFragment : Fragment(), TransactionClickListener { private lateinit var detailLayout: BlurView private lateinit var bottomSheetBehavior: BottomSheetBehavior<out View> private val blurRadius: Float = 1f + private lateinit var parentActivityService: ParentActivityService override fun onItemClick(item: Int) { bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED @@ -33,6 +34,8 @@ class TransactionListFragment : Fragment(), TransactionClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + parentActivityService = requireActivity() as ParentActivityService } override fun onCreateView( @@ -46,9 +49,7 @@ class TransactionListFragment : Fragment(), TransactionClickListener { // add detail layout to parent activity detailLayout = inflater.inflate(R.layout.component_transaction_detail, container, false) as BlurView - if (activity is LayoutAppender) { - activity.appendLayout(detailLayout) - } + parentActivityService.appendLayout(detailLayout) // configure blur effect val decorView = activity.window.decorView as ViewGroup @@ -137,9 +138,7 @@ class TransactionListFragment : Fragment(), TransactionClickListener { super.onDestroyView() val activity = requireActivity() - if (activity is LayoutAppender) { - activity.removeLayout(detailLayout) - } + parentActivityService.removeLayout(detailLayout) } companion object { diff --git a/app/src/main/java/com/example/bondoman/fragments/TransactionUpdateFragment.kt b/app/src/main/java/com/example/bondoman/fragments/TransactionUpdateFragment.kt index 18769bf75ea9e6d630c9f14f23efaf12235fb89f..4f375e329e6a60277c6086d9ddfe5c198053fac6 100644 --- a/app/src/main/java/com/example/bondoman/fragments/TransactionUpdateFragment.kt +++ b/app/src/main/java/com/example/bondoman/fragments/TransactionUpdateFragment.kt @@ -4,10 +4,27 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import com.example.bondoman.utils.interfaces.ParentActivityService class TransactionUpdateFragment : TransactionFormFragment() { + + companion object { + val headerText: String = "Update Transaction" + @JvmStatic + fun newInstance() = + TransactionUpdateFragment().apply { + } + } + + private lateinit var parentActivityService: ParentActivityService + + override fun getHeaderText(): String { + return headerText + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + parentActivityService = requireActivity() as ParentActivityService } override fun onCreateView( @@ -19,11 +36,4 @@ class TransactionUpdateFragment : TransactionFormFragment() { val view = super.onCreateView(inflater, container, savedInstanceState) return view } - - companion object { - @JvmStatic - fun newInstance() = - TransactionUpdateFragment().apply { - } - } } diff --git a/app/src/main/java/com/example/bondoman/utils/interfaces/LayoutAppender.kt b/app/src/main/java/com/example/bondoman/utils/interfaces/ParentActivityService.kt similarity index 60% rename from app/src/main/java/com/example/bondoman/utils/interfaces/LayoutAppender.kt rename to app/src/main/java/com/example/bondoman/utils/interfaces/ParentActivityService.kt index 7107ee86a2cc0dc1a8738b83cfb9f7c882d6882d..bdccfdc3d8f5d5ded3001c111347023e96dadadf 100644 --- a/app/src/main/java/com/example/bondoman/utils/interfaces/LayoutAppender.kt +++ b/app/src/main/java/com/example/bondoman/utils/interfaces/ParentActivityService.kt @@ -3,7 +3,7 @@ package com.example.bondoman.utils.interfaces import android.view.View import android.view.ViewGroup.LayoutParams -interface LayoutAppender { +interface ParentActivityService { fun appendLayout(layout: View) fun appendLayout( @@ -13,5 +13,11 @@ interface LayoutAppender { fun removeLayout(layout: View) - fun getParentId(): Int + fun getParentLayoutId(): Int + + fun showBackButton(onClick: () -> Unit) + + fun hideBackButton() + + fun setHeaderText(text: String) } diff --git a/app/src/main/java/com/example/bondoman/utils/interfaces/SecondaryFragment.kt b/app/src/main/java/com/example/bondoman/utils/interfaces/SecondaryFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..404103727d5569aafd8989a18ce5664ff2922e3c --- /dev/null +++ b/app/src/main/java/com/example/bondoman/utils/interfaces/SecondaryFragment.kt @@ -0,0 +1,5 @@ +package com.example.bondoman.utils.interfaces + +interface SecondaryFragment { + fun getHeaderText(): String +}