mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
adding the function fetching recent calls
This commit is contained in:
@ -45,7 +45,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:4.5.16'
|
implementation 'com.simplemobiletools:commons:4.5.17'
|
||||||
implementation 'joda-time:joda-time:2.9.9'
|
implementation 'joda-time:joda-time:2.9.9'
|
||||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
||||||
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
|
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
|
||||||
|
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
|
||||||
|
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.USE_FINGERPRINT"
|
android:name="android.permission.USE_FINGERPRINT"
|
||||||
|
@ -37,7 +37,6 @@ import kotlinx.android.synthetic.main.activity_main.*
|
|||||||
import kotlinx.android.synthetic.main.fragment_contacts.*
|
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||||
import kotlinx.android.synthetic.main.fragment_groups.*
|
import kotlinx.android.synthetic.main.fragment_groups.*
|
||||||
import kotlinx.android.synthetic.main.fragment_recents.*
|
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
|
|
||||||
class MainActivity : SimpleActivity(), RefreshContactsListener {
|
class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||||
@ -76,6 +75,11 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.GET_ACCOUNTS), 34)
|
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.GET_ACCOUNTS), 34)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val hasWriteCallLogPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALL_LOG) == PackageManager.PERMISSION_GRANTED
|
||||||
|
if (!hasWriteCallLogPermission) {
|
||||||
|
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_CALL_LOG), 35)
|
||||||
|
}
|
||||||
|
|
||||||
storeLocalAccountData()
|
storeLocalAccountData()
|
||||||
initFragments()
|
initFragments()
|
||||||
}
|
}
|
||||||
@ -467,10 +471,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
favorites_fragment?.refreshContacts(it)
|
favorites_fragment?.refreshContacts(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
|
|
||||||
recents_fragment?.refreshContacts(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (refreshTabsMask and GROUPS_TAB_MASK != 0) {
|
if (refreshTabsMask and GROUPS_TAB_MASK != 0) {
|
||||||
if (refreshTabsMask == GROUPS_TAB_MASK) {
|
if (refreshTabsMask == GROUPS_TAB_MASK) {
|
||||||
groups_fragment.skipHashComparing = true
|
groups_fragment.skipHashComparing = true
|
||||||
@ -478,6 +478,12 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
groups_fragment?.refreshContacts(it)
|
groups_fragment?.refreshContacts(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
|
||||||
|
ContactsHelper(this).getRecents {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
|
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
|
||||||
|
@ -2,11 +2,13 @@ package com.simplemobiletools.contacts.helpers
|
|||||||
|
|
||||||
import android.accounts.Account
|
import android.accounts.Account
|
||||||
import android.accounts.AccountManager
|
import android.accounts.AccountManager
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.*
|
import android.content.*
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.provider.CallLog
|
||||||
import android.provider.ContactsContract
|
import android.provider.ContactsContract
|
||||||
import android.provider.ContactsContract.CommonDataKinds
|
import android.provider.ContactsContract.CommonDataKinds
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Note
|
import android.provider.ContactsContract.CommonDataKinds.Note
|
||||||
@ -1309,4 +1311,47 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
fun getRecents(callback: (ArrayList<RecentCall>) -> Unit) {
|
||||||
|
Thread {
|
||||||
|
val calls = ArrayList<RecentCall>()
|
||||||
|
if (!activity.hasPermission(PERMISSION_WRITE_CALL_LOG)) {
|
||||||
|
callback(calls)
|
||||||
|
return@Thread
|
||||||
|
}
|
||||||
|
|
||||||
|
val uri = android.provider.CallLog.Calls.CONTENT_URI
|
||||||
|
val projection = arrayOf(
|
||||||
|
CallLog.Calls._ID,
|
||||||
|
CallLog.Calls.NUMBER,
|
||||||
|
CallLog.Calls.DATE,
|
||||||
|
CallLog.Calls.DURATION,
|
||||||
|
CallLog.Calls.CACHED_NAME,
|
||||||
|
CallLog.Calls.TYPE
|
||||||
|
)
|
||||||
|
|
||||||
|
val sorting = "${CallLog.Calls._ID} DESC LIMIT 50"
|
||||||
|
|
||||||
|
var cursor: Cursor? = null
|
||||||
|
try {
|
||||||
|
cursor = activity.contentResolver.query(uri, projection, null, null, sorting)
|
||||||
|
if (cursor?.moveToFirst() == true) {
|
||||||
|
do {
|
||||||
|
val id = cursor.getIntValue(CallLog.Calls._ID)
|
||||||
|
val number = cursor.getStringValue(CallLog.Calls.NUMBER)
|
||||||
|
val date = cursor.getLongValue(CallLog.Calls.DATE)
|
||||||
|
val duration = cursor.getIntValue(CallLog.Calls.DURATION)
|
||||||
|
val name = cursor.getStringValue(CallLog.Calls.CACHED_NAME) ?: ""
|
||||||
|
val type = cursor.getIntValue(CallLog.Calls.TYPE)
|
||||||
|
val recentCall = RecentCall(id, number, date, duration, name, type)
|
||||||
|
calls.add(recentCall)
|
||||||
|
} while (cursor.moveToNext())
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
cursor?.close()
|
||||||
|
}
|
||||||
|
callback(calls)
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
package com.simplemobiletools.contacts.models
|
||||||
|
|
||||||
|
data class RecentCall(var id: Int, var number: String, var date: Long, var duration: Int, var name: String, var type: Int)
|
Reference in New Issue
Block a user