Skip to content
Snippets Groups Projects
Commit 454ea8de authored by Nigel Sahl's avatar Nigel Sahl
Browse files

update: graph display

parent 25687560
No related merge requests found
......@@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelProvider
import com.example.nerbos.R
import com.example.nerbos.databinding.FragmentStatisticBinding
......@@ -32,6 +33,8 @@ class StatisticFragment : Fragment() {
private lateinit var transactionViewModel: TransactionViewModel
private lateinit var authentication: Authentication
private lateinit var pieChart: PieChart
private lateinit var binding: FragmentStatisticBinding
private val liveDataReady = MutableLiveData<Boolean>()
private var sumIncome: Float = 0.0f
private var sumOutcome : Float = 0.0f
......@@ -47,7 +50,7 @@ class StatisticFragment : Fragment() {
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
val binding = FragmentStatisticBinding.inflate(inflater, container, false)
binding = FragmentStatisticBinding.inflate(inflater, container, false)
pieChart = binding.pieChart
// Create an authentication object
......@@ -66,19 +69,99 @@ class StatisticFragment : Fragment() {
sumOutcome += it.nominal
}
}
// Notify the data is ready
liveDataReady.postValue(true)
}
// Set up the pie chart
pieChartSetup()
// Display the pie chart
displayPieChart()
return binding.root
}
// Display a pie chart of the income and outcome
private fun pieChartSetup() {
// Set the pie chart: percentage, description, extra offsets
pieChart.setUsePercentValues(true)
pieChart.description.isEnabled = false
pieChart.setExtraOffsets(5f, 10f, 5f, 5f)
// Set the pie chart: drag deceleration, hole, hole color
pieChart.setDragDecelerationFrictionCoef(0.95f)
pieChart.isDrawHoleEnabled = true
pieChart.setHoleColor(requireContext().getColor(R.color.primary_bg))
// Set the pie chart: transparent circle, hole color, hole radius, draw center text
pieChart.setTransparentCircleColor(requireContext().getColor(R.color.primary_bg))
pieChart.setTransparentCircleAlpha(110)
pieChart.holeRadius = 42f
pieChart.transparentCircleRadius = 48f
pieChart.setDrawCenterText(true)
// Set the pie chart: rotation angle, rotation enabled, tap, animation
pieChart.setRotationAngle(0f)
pieChart.isRotationEnabled = true
pieChart.isHighlightPerTapEnabled = true
pieChart.animateY(1400, Easing.EaseInOutQuad)
// Set the pie chart: legend and entry label
pieChart.legend.isEnabled = false
pieChart.setEntryLabelColor(Color.BLACK)
pieChart.setEntryLabelTextSize(12f)
}
private fun setPieData(){
// Set the pie chart: data
val entries: ArrayList<PieEntry> = ArrayList()
entries.add(PieEntry(sumIncome, resources.getString(R.string.income)))
entries.add(PieEntry(sumOutcome, resources.getString(R.string.outcome)))
// Create a pie data set
val dataSet = PieDataSet(entries, resources.getString(R.string.pie_chart))
// Set the pie data set properties
dataSet.setDrawIcons(false)
dataSet.sliceSpace = 3f
dataSet.iconsOffset = MPPointF(0f, 40f)
dataSet.selectionShift = 5f
// Set the pie data set: colors
val colors: ArrayList<Int> = ArrayList()
colors.add(requireContext().getColor(R.color.purple_200))
colors.add(requireContext().getColor(R.color.red))
dataSet.colors = colors
// Set the pie data set: text size, text color, text typeface
val data = PieData(dataSet)
data.setValueFormatter(PercentFormatter())
data.setValueTextSize(15f)
data.setValueTypeface(Typeface.DEFAULT_BOLD)
data.setValueTextColor(Color.BLACK)
pieChart.setData(data)
pieChart.highlightValues(null)
}
private fun displayPieChart() {
// wait until the income and outcome are calculated
// Observe the LiveData object to update the pie chart when the data is ready
liveDataReady.observe(viewLifecycleOwner) { dataReady ->
if (dataReady) {
// Set the pie data
setPieData()
// Invalidate the pie chart (refresh)
pieChart.invalidate()
// Reset the sum of income and outcome
val incomeNumber = binding.totalIncomeNumber
val outcomeNumber = binding.totalOutcomeNumber
// make it to currency format with separetion 000 . and ,00 and give Rp in front
incomeNumber.text = "Rp " + String.format("%,.2f", sumIncome)
outcomeNumber.text = "Rp " + String.format("%,.2f", sumOutcome)
}
}
}
}
\ No newline at end of file
......@@ -40,6 +40,7 @@
android:layout_marginBottom="5dp" />
<LinearLayout
android:id="@+id/totalIncomeOutcome"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_below="@+id/pieChart"
......@@ -77,6 +78,41 @@
app:drawableTint="@color/red" />
</LinearLayout>
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_below="@+id/totalIncomeOutcome"
android:layout_marginTop="15dp"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:weightSum="2">
<TextView
android:id="@+id/totalIncomeNumber"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="@string/income"
android:textAlignment="center"
android:textColor="@color/white" />
<TextView
android:id="@+id/totalOutcomeNumber"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_weight="1"
android:gravity="center"
android:padding="4dp"
android:text="@string/outcome"
android:textAlignment="center"
android:textColor="@color/white" />
</LinearLayout>
</RelativeLayout>
</FrameLayout>
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment