package com.dmc.callcrm.ui import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.GridLayout import android.widget.TextView import androidx.fragment.app.Fragment import com.dmc.callcrm.R import com.dmc.callcrm.data.CallStats import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale class AnalyticsFragment : Fragment() { override fun onCreateView(i: LayoutInflater, c: ViewGroup?, s: Bundle?): View = i.inflate(R.layout.fragment_analytics, c, false) override fun onViewCreated(v: View, s: Bundle?) { // current month range val cal = Calendar.getInstance() cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0) cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0) val from = cal.timeInMillis val to = System.currentTimeMillis() val df = SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault()) v.findViewById(R.id.tvRange).text = "${df.format(from)} – ${df.format(to)}" val a = CallStats(requireContext()).analytics(from, to) val grid = v.findViewById(R.id.grid) grid.removeAllViews() data class Card(val label: String, val count: Int, val dur: Long?) val cards = listOf( Card("Total Phone Calls", a.total, a.totalDur), Card("Incoming Calls", a.incoming, a.incomingDur), Card("Outgoing Calls", a.outgoing, a.outgoingDur), Card("Missed Calls", a.missed, 0), Card("Rejected Calls", a.rejected, 0), Card("Never Attended", a.neverAttended, null) ) val inflater = LayoutInflater.from(context) val colW = resources.displayMetrics.widthPixels / 2 - dp(24) for (card in cards) { val view = inflater.inflate(R.layout.item_stat_card, grid, false) view.findViewById(R.id.label).text = card.label view.findViewById(R.id.count).text = card.count.toString() val durTv = view.findViewById(R.id.dur) if (card.dur != null) durTv.text = fmt(card.dur) else durTv.visibility = View.GONE val lp = GridLayout.LayoutParams().apply { width = colW } grid.addView(view, lp) } } private fun fmt(s: Long): String { val h = s / 3600; val m = (s % 3600) / 60; val sec = s % 60 return "%dh %dm %ds".format(h, m, sec) } private fun dp(x: Int) = (x * resources.displayMetrics.density).toInt() }