package com.dmc.callcrm.ui import android.os.Bundle import android.provider.CallLog import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.dmc.callcrm.R import com.dmc.callcrm.data.CallStats import com.google.android.material.tabs.TabLayout class CallHistoryFragment : Fragment() { private lateinit var adapter: CallAdapter private var all: List = emptyList() private var typeFilter: Int? = null private var query = "" override fun onCreateView(i: LayoutInflater, c: ViewGroup?, s: Bundle?): View = i.inflate(R.layout.fragment_list, c, false) override fun onViewCreated(v: View, s: Bundle?) { v.findViewById(R.id.title).text = "Call History" adapter = CallAdapter(emptyList()) { num -> dial(num) } v.findViewById(R.id.list).apply { layoutManager = LinearLayoutManager(context); adapter = this@CallHistoryFragment.adapter } val tabs = v.findViewById(R.id.tabs) listOf("All Calls","Incoming","Outgoing","Missed").forEach { tabs.addTab(tabs.newTab().setText(it)) } tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(t: TabLayout.Tab) { typeFilter = when (t.position) { 1 -> CallLog.Calls.INCOMING_TYPE 2 -> CallLog.Calls.OUTGOING_TYPE 3 -> CallLog.Calls.MISSED_TYPE else -> null } reload() } override fun onTabUnselected(t: TabLayout.Tab) {} override fun onTabReselected(t: TabLayout.Tab) {} }) v.findViewById(R.id.search).addTextChangedListener(object : TextWatcher { override fun afterTextChanged(e: Editable?) { query = e?.toString()?.trim().orEmpty(); render() } override fun beforeTextChanged(s: CharSequence?, a: Int, b: Int, c: Int) {} override fun onTextChanged(s: CharSequence?, a: Int, b: Int, c: Int) {} }) reload() } private fun reload() { all = CallStats(requireContext()).recent(300, typeFilter) render() } private fun render() { val list = if (query.isEmpty()) all else all.filter { (it.name ?: "").contains(query, true) || it.number.contains(query) } adapter.submit(list) } private fun dial(number: String) { try { startActivity(android.content.Intent(android.content.Intent.ACTION_DIAL, android.net.Uri.parse("tel:$number"))) } catch (_: Exception) {} } }