Skip to content

Commit af1cf01

Browse files
Merge pull request #360 from dekusms/staging
Staging
2 parents e1b5ac8 + f63add1 commit af1cf01

20 files changed

+379
-113
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
2121
<uses-permission android:name="android.permission.CALL_PHONE" />
2222

23+
<uses-permission android:name="android.permission.READ_LOGS" />
24+
2325
<queries>
2426
<intent>
2527
<action android:name="android.provider.Telephony.SMS_DELIVER" />

app/src/main/java/com/afkanerd/deku/DefaultSMS/AdaptersViewModels/ConversationsViewModel.kt

Lines changed: 76 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,18 @@ import androidx.lifecycle.LiveData
1313
import androidx.lifecycle.MutableLiveData
1414
import androidx.lifecycle.ViewModel
1515
import androidx.lifecycle.viewModelScope
16+
import androidx.navigation.NavController
1617
import androidx.paging.Pager
1718
import androidx.paging.PagingConfig
1819
import androidx.paging.PagingData
1920
import androidx.paging.cachedIn
2021
import androidx.paging.liveData
2122
import androidx.window.layout.WindowLayoutInfo
23+
import com.afkanerd.deku.ConversationsScreen
2224
import com.afkanerd.deku.Datastore
25+
import com.afkanerd.deku.DefaultSMS.Commons.Helpers
2326
import com.afkanerd.deku.DefaultSMS.Models.Conversations.Conversation
27+
import com.afkanerd.deku.DefaultSMS.Models.Conversations.ThreadedConversationsHandler
2428
import com.afkanerd.deku.DefaultSMS.Models.NativeSMSDB
2529
import com.afkanerd.deku.DefaultSMS.Models.SMSDatabaseWrapper
2630
import com.afkanerd.deku.DefaultSMS.Models.ThreadsConfigurations
@@ -38,22 +42,18 @@ import kotlinx.serialization.json.Json
3842

3943
class ConversationsViewModel : ViewModel() {
4044

41-
// var threadId by mutableStateOf("")
42-
// var address by mutableStateOf("")
43-
// var text by mutableStateOf("")
44-
// var searchQuery by mutableStateOf("")
45-
// var subscriptionId: Int by mutableIntStateOf(-1)
46-
47-
var threadId = ""
48-
var address = ""
49-
var text = ""
50-
var searchQuery = ""
51-
var subscriptionId = -1
45+
var threadId by mutableStateOf("")
46+
var address by mutableStateOf("")
47+
var text by mutableStateOf("")
48+
var encryptedText by mutableStateOf("")
49+
var searchQuery by mutableStateOf("")
50+
var subscriptionId: Int by mutableIntStateOf(-1)
5251

5352
var importDetails by mutableStateOf("")
5453

5554
var selectedItems = mutableStateListOf<String>()
5655
var retryDeleteItem: MutableList<Conversation> = arrayListOf()
56+
var selectedMessage: Conversation? = null
5757

5858
var liveData: LiveData<MutableList<Conversation>>? = null
5959
var remoteListenersLiveData: LiveData<MutableList<Conversation>>? = null
@@ -475,4 +475,69 @@ class ConversationsViewModel : ViewModel() {
475475
Telephony.Sms.MESSAGE_TYPE_DRAFT
476476
Datastore.getDatastore(context).conversationDao().deleteEvery()
477477
}
478+
479+
fun getMessage(context: Context, messageId: String): Conversation {
480+
return Datastore.getDatastore(context).conversationDao().getMessage(messageId)
481+
}
482+
483+
fun processIntents(
484+
context: Context,
485+
intent: Intent,
486+
defaultRegion: String,
487+
): Triple<String?, String?, String?>?{
488+
if(intent.action != null &&
489+
((intent.action == Intent.ACTION_SENDTO) || (intent.action == Intent.ACTION_SEND))) {
490+
val text = if(intent.hasExtra("sms_body")) intent.getStringExtra("sms_body")
491+
else if(intent.hasExtra("android.intent.extra.TEXT")) {
492+
intent.getStringExtra("android.intent.extra.TEXT")
493+
} else ""
494+
495+
val sendToString = intent.dataString
496+
497+
if ((sendToString != null &&
498+
(sendToString.contains("smsto:") ||
499+
sendToString.contains("sms:"))) || intent.hasExtra("address")
500+
) {
501+
val address = Helpers.getFormatCompleteNumber(
502+
if(intent.hasExtra("address")) intent.getStringExtra("address")
503+
else sendToString, defaultRegion
504+
)
505+
val threadId = ThreadedConversationsHandler.get(context, address).thread_id
506+
return Triple(address, threadId, text)
507+
}
508+
}
509+
else if(intent.hasExtra("address")) {
510+
var text = if(intent.hasExtra("android.intent.extra.TEXT"))
511+
intent.getStringExtra("android.intent.extra.TEXT") else ""
512+
513+
val address = intent.getStringExtra("address")
514+
val threadId = intent.getStringExtra("thread_id")
515+
return Triple(address, threadId, text)
516+
}
517+
return null
518+
}
519+
520+
fun navigateToConversation(
521+
conversationsViewModel: ConversationsViewModel,
522+
address: String,
523+
threadId: String,
524+
subscriptionId: Int?,
525+
navController: NavController,
526+
searchQuery: String? = ""
527+
) {
528+
conversationsViewModel.address = address
529+
conversationsViewModel.threadId = threadId
530+
conversationsViewModel.searchQuery = searchQuery ?: ""
531+
conversationsViewModel.subscriptionId = subscriptionId ?: -1
532+
conversationsViewModel.liveData = null
533+
if(conversationsViewModel.newLayoutInfo?.displayFeatures!!.isEmpty())
534+
navController.navigate(ConversationsScreen)
535+
}
536+
537+
fun loadNatives(context: Context, conversationViewModel: ConversationsViewModel) {
538+
CoroutineScope(Dispatchers.Default).launch {
539+
conversationViewModel.reset(context)
540+
}
541+
}
542+
478543
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.afkanerd.deku.DefaultSMS.Extensions
2+
3+
import android.content.Context
4+
import android.content.ContextWrapper
5+
import androidx.activity.ComponentActivity
6+
7+
8+
fun Context.getActivity(): ComponentActivity? = when (this) {
9+
is ComponentActivity -> this
10+
is ContextWrapper -> baseContext.getActivity()
11+
else -> null
12+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.afkanerd.deku.DefaultSMS.Models
2+
3+
object DevMode {
4+
val viewLogCat = "viewLogCat"
5+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.afkanerd.deku.DefaultSMS.Models
2+
3+
open class Encryption {
4+
5+
var id: Int = 0
6+
7+
var state: ByteArray? = null
8+
9+
var peerPublicKey: ByteArray? = null
10+
11+
var publicKey: ByteArray? = null
12+
13+
var peerAddress: String? = null
14+
15+
var version: Int = 0
16+
}

app/src/main/java/com/afkanerd/deku/DefaultSMS/Settings/SettingsFragment.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package com.afkanerd.deku.DefaultSMS.Settings
22

3+
import android.content.Intent
4+
import android.preference.Preference
35
import androidx.appcompat.app.AppCompatDelegate
6+
import androidx.navigation.fragment.NavHostFragment
7+
import androidx.navigation.fragment.findNavController
48
import androidx.preference.PreferenceFragmentCompat
9+
import com.afkanerd.deku.DefaultSMS.Models.DevMode
10+
import com.afkanerd.deku.DefaultSMS.R
11+
import com.afkanerd.deku.MainActivity
512

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

23+
val devModeLogCatPreference =
24+
findPreference<androidx.preference.Preference?>("dev_mode")
25+
1626
languagePreference!!.onPreferenceChangeListener = object :
1727
androidx.preference.Preference.OnPreferenceChangeListener {
1828
override fun onPreferenceChange(
@@ -33,5 +43,20 @@ class SettingsFragment : PreferenceFragmentCompat() {
3343
return true
3444
}
3545
}
46+
47+
devModeLogCatPreference!!.onPreferenceClickListener = object:
48+
androidx.preference.Preference.OnPreferenceClickListener {
49+
override fun onPreferenceClick(preference: androidx.preference.Preference): Boolean {
50+
startActivity(
51+
Intent(requireContext(), MainActivity::class.java).apply {
52+
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME)
53+
action = Intent.ACTION_VIEW
54+
putExtra("view", DevMode.viewLogCat)
55+
}
56+
)
57+
requireActivity().finish()
58+
return true
59+
}
60+
}
3661
}
3762
}

app/src/main/java/com/afkanerd/deku/DefaultSMS/SettingsActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import android.view.MenuItem
66
import android.view.View
77
import androidx.appcompat.app.AppCompatActivity
88
import androidx.appcompat.widget.Toolbar
9+
import androidx.navigation.findNavController
10+
import androidx.navigation.fragment.NavHostFragment
911
import com.afkanerd.deku.DefaultSMS.Settings.SettingsFragment
1012
import com.afkanerd.deku.MainActivity
1113

app/src/main/java/com/afkanerd/deku/DefaultSMS/ui/Components/Conversations.kt

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,22 @@ import androidx.compose.material3.MaterialTheme
2727
import androidx.compose.material3.Surface
2828
import androidx.compose.material3.Text
2929
import androidx.compose.runtime.Composable
30-
import androidx.compose.runtime.LaunchedEffect
31-
import androidx.compose.runtime.MutableState
32-
import androidx.compose.runtime.mutableStateOf
33-
import androidx.compose.runtime.remember
3430
import androidx.compose.ui.Alignment
3531
import androidx.compose.ui.Modifier
3632
import androidx.compose.ui.draw.clip
3733
import androidx.compose.ui.graphics.Color
38-
import androidx.compose.ui.platform.LocalInspectionMode
3934
import androidx.compose.ui.res.colorResource
4035
import androidx.compose.ui.res.stringResource
4136
import androidx.compose.ui.text.AnnotatedString
42-
import androidx.compose.ui.text.SpanStyle
43-
import androidx.compose.ui.text.TextLinkStyles
44-
import androidx.compose.ui.text.buildAnnotatedString
45-
import androidx.compose.ui.text.font.FontWeight
4637
import androidx.compose.ui.text.style.TextAlign
47-
import androidx.compose.ui.text.style.TextDecoration
48-
import androidx.compose.ui.text.withStyle
4938
import androidx.compose.ui.tooling.preview.Preview
5039
import androidx.compose.ui.unit.dp
5140
import androidx.core.net.toUri
52-
import androidx.navigation.compose.rememberNavController
5341
import com.afkanerd.deku.DefaultSMS.AdaptersViewModels.ConversationsViewModel
5442
import com.afkanerd.deku.DefaultSMS.Commons.Helpers
5543
import com.afkanerd.deku.DefaultSMS.Models.Conversations.Conversation
5644
import com.afkanerd.deku.DefaultSMS.Models.SMSHandler.sendTextMessage
57-
import com.afkanerd.deku.DefaultSMS.ui.Conversations
5845
import com.example.compose.AppTheme
59-
import sh.calvin.autolinktext.rememberAutoLinkText
6046

6147
enum class ConversationPositionTypes(val value: Int) {
6248
NORMAL(0),
@@ -467,15 +453,15 @@ fun ConversationsMainDropDownMenu(
467453
}
468454
}
469455

470-
private fun getPredefinedType(type: Int) : PredefinedTypes? {
456+
private fun getPredefinedType(type: Int) : ConversationsPredefinedTypes? {
471457
when(type) {
472458
Telephony.Sms.MESSAGE_TYPE_OUTBOX,
473459
Telephony.Sms.MESSAGE_TYPE_QUEUED,
474460
Telephony.Sms.MESSAGE_TYPE_SENT -> {
475-
return PredefinedTypes.OUTGOING
461+
return ConversationsPredefinedTypes.OUTGOING
476462
}
477463
Telephony.Sms.MESSAGE_TYPE_INBOX -> {
478-
return PredefinedTypes.INCOMING
464+
return ConversationsPredefinedTypes.INCOMING
479465
}
480466
}
481467
return null
@@ -590,7 +576,7 @@ fun sendSMS(
590576
)
591577
}
592578

593-
enum class PredefinedTypes {
579+
enum class ConversationsPredefinedTypes {
594580
OUTGOING,
595581
INCOMING
596582
}

0 commit comments

Comments
 (0)