This commit is contained in:
lunaticbum
2024-09-11 18:28:11 +09:00
parent 7b9dab0891
commit 384881bf07
4 changed files with 54 additions and 27 deletions
@@ -71,8 +71,6 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowLayoutInfo
import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
@@ -144,8 +144,7 @@ internal class LauncherHome : Fragment() {
val commandHandler = Handler(Looper.getMainLooper()) val commandHandler = Handler(Looper.getMainLooper())
val smsUpdate = Runnable { val smsUpdate = Runnable {
BLog.LOGE("observeForever smsList.size >>> ${smsList.size}")
binding.recentSms.text = "최근 문자 [${smsList.size}]"
chooseAdpater() chooseAdpater()
} }
@@ -606,41 +605,40 @@ internal class LauncherHome : Fragment() {
binding.notice.isSelected = false binding.notice.isSelected = false
} }
} else if(binding.recentSms.isSelected){ } else if(binding.recentSms.isSelected){
if (smsList.size > 0) { WorkersDb.getRealm().apply {
try { val result = query<RecentSms>().query("rcvDate >= $0 OR pstDate >= $0 ", dateParam)
smsList.sortByDescending { it.rcvDate } .sort(Pair("pstDate",Sort.DESCENDING),Pair("rcvDate", Sort.DESCENDING)).find()
binding.smsList.visibility = View.VISIBLE if (result.size > 0) {
// Handler(Looper.getMainLooper()).post { try {
binding.smsList.visibility = View.VISIBLE BLog.LOGE("observeForever smsList.size >>> ${result.size}")
mSmsLogsAdapter.updateData(smsList) binding.recentSms.text = "최근 문자 [${result.size}]"
binding.missedCalls.isSelected = false binding.smsList.visibility = View.VISIBLE
binding.otherCheck.isSelected = false smsList.clear()
binding.notice.isSelected = false smsList.addAll(copyFromRealm(result))
// } mSmsLogsAdapter.updateData(smsList)
} catch (e : Exception) { binding.missedCalls.isSelected = false
binding.otherCheck.isSelected = false
binding.notice.isSelected = false
} catch (e: Exception) {
}
} }
} }
} else if(binding.otherCheck.isSelected) { } else if(binding.otherCheck.isSelected) {
// Handler(Looper.getMainLooper()).post {
binding.missedCalls.isSelected = false binding.missedCalls.isSelected = false
binding.recentSms.isSelected = false binding.recentSms.isSelected = false
binding.notice.isSelected = false binding.notice.isSelected = false
binding.infoList.visibility = View.VISIBLE binding.infoList.visibility = View.VISIBLE
binding.otherCheck.text = "최근 정보[${lasted?.size ?: "-"}]" binding.otherCheck.text = "최근 정보[${lasted?.size ?: "-"}]"
lasted?.let { mRssAdapter.updateData(it) } lasted?.let { mRssAdapter.updateData(it) }
// }
} }
else if(binding.notice.isSelected) { else if(binding.notice.isSelected) {
// Handler(Looper.getMainLooper()).post {
binding.missedCalls.isSelected = false binding.missedCalls.isSelected = false
binding.recentSms.isSelected = false binding.recentSms.isSelected = false
binding.otherCheck.isSelected = false binding.otherCheck.isSelected = false
binding.notiList.visibility = View.VISIBLE binding.notiList.visibility = View.VISIBLE
binding.notice.text = "알림 센터[${lastedNoti?.size ?: "-"}]" binding.notice.text = "알림 센터[${lastedNoti?.size ?: "-"}]"
lastedNoti?.let { mNotiAdapter.updateData(it)} lastedNoti?.let { mNotiAdapter.updateData(it)}
// }
} }
commandHandler.postDelayed(hideListView, UPDATE_DELAY * 5) commandHandler.postDelayed(hideListView, UPDATE_DELAY * 5)
} }
@@ -8,6 +8,12 @@ import android.net.Uri
import android.provider.Telephony import android.provider.Telephony
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import com.google.gson.Gson import com.google.gson.Gson
import io.realm.kotlin.ext.query
import io.realm.kotlin.ext.realmListOf
import io.realm.kotlin.types.RealmList
import io.realm.kotlin.types.RealmObject
import io.realm.kotlin.types.annotations.Ignore
import io.realm.kotlin.types.annotations.PrimaryKey
import rasel.lunar.launcher.LauncherActivity.Companion.lActivity import rasel.lunar.launcher.LauncherActivity.Companion.lActivity
import rasel.lunar.launcher.home.LauncherHome.Companion.smsList import rasel.lunar.launcher.home.LauncherHome.Companion.smsList
import rasel.lunar.launcher.utils.BLog import rasel.lunar.launcher.utils.BLog
@@ -30,7 +36,7 @@ class RecentSmsGetter : BaseGetter {
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
override fun realWork(): Result { override fun realWork(): Result {
var dateParam = beforeDay(Date(),7).toString() var dateParam = beforeDay(Date(),30).toString()
val managedCursor = lActivity?.contentResolver?.query( val managedCursor = lActivity?.contentResolver?.query(
Telephony.Sms.CONTENT_URI, arrayOf( Telephony.Sms.CONTENT_URI, arrayOf(
Telephony.Sms.THREAD_ID, Telephony.Sms.THREAD_ID,
@@ -83,7 +89,13 @@ class RecentSmsGetter : BaseGetter {
log.isMms = false log.isMms = false
// BLog.LOGE("RecentSmsGetter resultData put ${phNumber +"_"+ reciveDate} >>> ${log.toJson()}") // BLog.LOGE("RecentSmsGetter resultData put ${phNumber +"_"+ reciveDate} >>> ${log.toJson()}")
log.sender = getContactName(applicationContext.contentResolver,phNumber) ?: "" log.sender = getContactName(applicationContext.contentResolver,phNumber) ?: ""
smsList.add(log) WorkersDb.getRealm().apply {
if (query<RecentSms>("id == $0", id).find().size == 0) {
writeBlocking {
copyToRealm(log)
}
}
}
} }
} catch (e: Exception) { } catch (e: Exception) {
@@ -100,7 +112,8 @@ class RecentSmsGetter : BaseGetter {
} }
internal class RecentSms { internal class RecentSms : RealmObject {
@PrimaryKey
var id : String = "" var id : String = ""
var isMms : Boolean = false var isMms : Boolean = false
var addr : String = "" var addr : String = ""
@@ -109,6 +122,11 @@ internal class RecentSms {
var pstDate : Long = 0L var pstDate : Long = 0L
var body : String = "" var body : String = ""
var person : String = "" var person : String = ""
var images : RealmList<String> = realmListOf()
var videos : RealmList<String> = realmListOf()
var audios : RealmList<String> = realmListOf()
var texts : RealmList<String> = realmListOf()
@Ignore
var mmsContents : HashMap<String?,ArrayList<String>> = hashMapOf() var mmsContents : HashMap<String?,ArrayList<String>> = hashMapOf()
var sender : String = "" var sender : String = ""
@@ -133,10 +151,16 @@ internal class RecentSms {
this.id = id this.id = id
this.rcvDate = date this.rcvDate = date
this.mmsContents = body this.mmsContents = body
this.images.addAll(mmsContents.get("image")!!)
this.audios.addAll(mmsContents.get("audio")!!)
this.texts.addAll(mmsContents.get("text")!!)
this.videos.addAll(mmsContents.get("video")!!)
this.addr = sender this.addr = sender
this.isMms = true this.isMms = true
} }
constructor()
fun toJson() : String { fun toJson() : String {
return Gson().toJson(this) return Gson().toJson(this)
} }
@@ -301,7 +325,7 @@ internal class MmsQueryHelper(
fun convertData(cursor: Cursor?) { fun convertData(cursor: Cursor?) {
cursor ?: return cursor ?: return
val dateTime = beforeDay(Date(),7) val dateTime = beforeDay(Date(),30)
cursor.use { cursor.use {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
@@ -310,7 +334,14 @@ internal class MmsQueryHelper(
}.getOrNull() }.getOrNull()
data?.let { data?.let {
if (it?.pstDate ?: 0L > dateTime || it?.rcvDate ?: 0L > dateTime) { if (it?.pstDate ?: 0L > dateTime || it?.rcvDate ?: 0L > dateTime) {
smsList.add(it) WorkersDb.getRealm().apply {
if (query<RecentSms>("id == $0", it.id).find().size == 0) {
writeBlocking {
copyToRealm(it)
}
}
}
// smsList.add(it)
} }
} }
} while (cursor.moveToNext()) } while (cursor.moveToNext())
@@ -17,7 +17,7 @@ import kotlin.reflect.KClass
object WorkersDb { object WorkersDb {
val clazz : Set<KClass<out BaseRealmObject>> = setOf(RssData::class, NotificationItem::class, AppInfo::class,SimpleContact::class, RecentCall::class) val clazz : Set<KClass<out BaseRealmObject>> = setOf(RssData::class, NotificationItem::class, AppInfo::class,SimpleContact::class, RecentCall::class, RecentSms::class)
val schemaVersion : Long = 0L val schemaVersion : Long = 0L
private var pRealm : Realm? = null private var pRealm : Realm? = null