Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.CALL_PHONE" />

<uses-permission android:name="android.permission.READ_LOGS" />

<queries>
<intent>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,18 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.NavController
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import androidx.paging.liveData
import androidx.window.layout.WindowLayoutInfo
import com.afkanerd.deku.ConversationsScreen
import com.afkanerd.deku.Datastore
import com.afkanerd.deku.DefaultSMS.Commons.Helpers
import com.afkanerd.deku.DefaultSMS.Models.Conversations.Conversation
import com.afkanerd.deku.DefaultSMS.Models.Conversations.ThreadedConversationsHandler
import com.afkanerd.deku.DefaultSMS.Models.NativeSMSDB
import com.afkanerd.deku.DefaultSMS.Models.SMSDatabaseWrapper
import com.afkanerd.deku.DefaultSMS.Models.ThreadsConfigurations
Expand All @@ -38,22 +42,18 @@ import kotlinx.serialization.json.Json

class ConversationsViewModel : ViewModel() {

// var threadId by mutableStateOf("")
// var address by mutableStateOf("")
// var text by mutableStateOf("")
// var searchQuery by mutableStateOf("")
// var subscriptionId: Int by mutableIntStateOf(-1)

var threadId = ""
var address = ""
var text = ""
var searchQuery = ""
var subscriptionId = -1
var threadId by mutableStateOf("")
var address by mutableStateOf("")
var text by mutableStateOf("")
var encryptedText by mutableStateOf("")
var searchQuery by mutableStateOf("")
var subscriptionId: Int by mutableIntStateOf(-1)

var importDetails by mutableStateOf("")

var selectedItems = mutableStateListOf<String>()
var retryDeleteItem: MutableList<Conversation> = arrayListOf()
var selectedMessage: Conversation? = null

var liveData: LiveData<MutableList<Conversation>>? = null
var remoteListenersLiveData: LiveData<MutableList<Conversation>>? = null
Expand Down Expand Up @@ -475,4 +475,69 @@ class ConversationsViewModel : ViewModel() {
Telephony.Sms.MESSAGE_TYPE_DRAFT
Datastore.getDatastore(context).conversationDao().deleteEvery()
}

fun getMessage(context: Context, messageId: String): Conversation {
return Datastore.getDatastore(context).conversationDao().getMessage(messageId)
}

fun processIntents(
context: Context,
intent: Intent,
defaultRegion: String,
): Triple<String?, String?, String?>?{
if(intent.action != null &&
((intent.action == Intent.ACTION_SENDTO) || (intent.action == Intent.ACTION_SEND))) {
val text = if(intent.hasExtra("sms_body")) intent.getStringExtra("sms_body")
else if(intent.hasExtra("android.intent.extra.TEXT")) {
intent.getStringExtra("android.intent.extra.TEXT")
} else ""

val sendToString = intent.dataString

if ((sendToString != null &&
(sendToString.contains("smsto:") ||
sendToString.contains("sms:"))) || intent.hasExtra("address")
) {
val address = Helpers.getFormatCompleteNumber(
if(intent.hasExtra("address")) intent.getStringExtra("address")
else sendToString, defaultRegion
)
val threadId = ThreadedConversationsHandler.get(context, address).thread_id
return Triple(address, threadId, text)
}
}
else if(intent.hasExtra("address")) {
var text = if(intent.hasExtra("android.intent.extra.TEXT"))
intent.getStringExtra("android.intent.extra.TEXT") else ""

val address = intent.getStringExtra("address")
val threadId = intent.getStringExtra("thread_id")
return Triple(address, threadId, text)
}
return null
}

fun navigateToConversation(
conversationsViewModel: ConversationsViewModel,
address: String,
threadId: String,
subscriptionId: Int?,
navController: NavController,
searchQuery: String? = ""
) {
conversationsViewModel.address = address
conversationsViewModel.threadId = threadId
conversationsViewModel.searchQuery = searchQuery ?: ""
conversationsViewModel.subscriptionId = subscriptionId ?: -1
conversationsViewModel.liveData = null
if(conversationsViewModel.newLayoutInfo?.displayFeatures!!.isEmpty())
navController.navigate(ConversationsScreen)
}

fun loadNatives(context: Context, conversationViewModel: ConversationsViewModel) {
CoroutineScope(Dispatchers.Default).launch {
conversationViewModel.reset(context)
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.afkanerd.deku.DefaultSMS.Extensions

import android.content.Context
import android.content.ContextWrapper
import androidx.activity.ComponentActivity


fun Context.getActivity(): ComponentActivity? = when (this) {
is ComponentActivity -> this
is ContextWrapper -> baseContext.getActivity()
else -> null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.afkanerd.deku.DefaultSMS.Models

object DevMode {
val viewLogCat = "viewLogCat"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.afkanerd.deku.DefaultSMS.Models

open class Encryption {

var id: Int = 0

var state: ByteArray? = null

var peerPublicKey: ByteArray? = null

var publicKey: ByteArray? = null

var peerAddress: String? = null

var version: Int = 0
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package com.afkanerd.deku.DefaultSMS.Settings

import android.content.Intent
import android.preference.Preference
import androidx.appcompat.app.AppCompatDelegate
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat
import com.afkanerd.deku.DefaultSMS.Models.DevMode
import com.afkanerd.deku.DefaultSMS.R
import com.afkanerd.deku.MainActivity

class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(
Expand All @@ -13,6 +20,9 @@ class SettingsFragment : PreferenceFragmentCompat() {
val languagePreference =
findPreference<androidx.preference.ListPreference?>(getString(com.afkanerd.deku.DefaultSMS.R.string.settings_locale))

val devModeLogCatPreference =
findPreference<androidx.preference.Preference?>("dev_mode")

languagePreference!!.onPreferenceChangeListener = object :
androidx.preference.Preference.OnPreferenceChangeListener {
override fun onPreferenceChange(
Expand All @@ -33,5 +43,20 @@ class SettingsFragment : PreferenceFragmentCompat() {
return true
}
}

devModeLogCatPreference!!.onPreferenceClickListener = object:
androidx.preference.Preference.OnPreferenceClickListener {
override fun onPreferenceClick(preference: androidx.preference.Preference): Boolean {
startActivity(
Intent(requireContext(), MainActivity::class.java).apply {
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME)
action = Intent.ACTION_VIEW
putExtra("view", DevMode.viewLogCat)
}
)
requireActivity().finish()
return true
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import com.afkanerd.deku.DefaultSMS.Settings.SettingsFragment
import com.afkanerd.deku.MainActivity

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,22 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import androidx.navigation.compose.rememberNavController
import com.afkanerd.deku.DefaultSMS.AdaptersViewModels.ConversationsViewModel
import com.afkanerd.deku.DefaultSMS.Commons.Helpers
import com.afkanerd.deku.DefaultSMS.Models.Conversations.Conversation
import com.afkanerd.deku.DefaultSMS.Models.SMSHandler.sendTextMessage
import com.afkanerd.deku.DefaultSMS.ui.Conversations
import com.example.compose.AppTheme
import sh.calvin.autolinktext.rememberAutoLinkText

enum class ConversationPositionTypes(val value: Int) {
NORMAL(0),
Expand Down Expand Up @@ -467,15 +453,15 @@ fun ConversationsMainDropDownMenu(
}
}

private fun getPredefinedType(type: Int) : PredefinedTypes? {
private fun getPredefinedType(type: Int) : ConversationsPredefinedTypes? {
when(type) {
Telephony.Sms.MESSAGE_TYPE_OUTBOX,
Telephony.Sms.MESSAGE_TYPE_QUEUED,
Telephony.Sms.MESSAGE_TYPE_SENT -> {
return PredefinedTypes.OUTGOING
return ConversationsPredefinedTypes.OUTGOING
}
Telephony.Sms.MESSAGE_TYPE_INBOX -> {
return PredefinedTypes.INCOMING
return ConversationsPredefinedTypes.INCOMING
}
}
return null
Expand Down Expand Up @@ -590,7 +576,7 @@ fun sendSMS(
)
}

enum class PredefinedTypes {
enum class ConversationsPredefinedTypes {
OUTGOING,
INCOMING
}
Expand Down
Loading