do not allow using the app, if it isnt the default SMS handler

This commit is contained in:
tibbi 2020-04-04 16:44:40 +02:00
parent 8c29a55f86
commit 0f4e89c8a9
7 changed files with 152 additions and 7 deletions

View File

@ -3,7 +3,14 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.simplemobiletools.smsmessenger">
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
<uses-permission android:name="android.provider.Telephony.SMS_RECEIVED" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission
android:name="android.permission.USE_FINGERPRINT"
@ -35,6 +42,21 @@
android:name=".activities.ThreadActivity"
android:parentActivityName=".activities.MainActivity" />
<activity android:name=".activities.NewMessageActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
<activity
android:name=".activities.SettingsActivity"
android:label="@string/settings"
@ -59,5 +81,37 @@
android:name="com.simplemobiletools.commons.activities.FAQActivity"
android:label="@string/frequently_asked_questions"
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" />
<service
android:name=".services.HeadlessSmsSendService"
android:exported="true"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
<receiver
android:name=".receivers.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<receiver
android:name=".receivers.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
</application>
</manifest>

View File

@ -1,13 +1,17 @@
package com.simplemobiletools.smsmessenger.activities
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.provider.Telephony
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import com.simplemobiletools.commons.extensions.appLaunched
import com.simplemobiletools.commons.extensions.checkAppSideloading
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
import com.simplemobiletools.commons.helpers.PERMISSION_READ_SMS
import com.simplemobiletools.commons.helpers.isQPlus
import com.simplemobiletools.commons.models.FAQItem
import com.simplemobiletools.smsmessenger.BuildConfig
import com.simplemobiletools.smsmessenger.R
@ -22,6 +26,7 @@ import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : SimpleActivity() {
private var storedTextColor = 0
private val MAKE_DEFAULT_APP_REQUEST = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -32,14 +37,13 @@ class MainActivity : SimpleActivity() {
return
}
// while READ_SMS permission is mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases
handlePermission(PERMISSION_READ_SMS) {
if (it) {
handlePermission(PERMISSION_READ_CONTACTS) {
initMessenger()
}
if (Telephony.Sms.getDefaultSmsPackage(this) != packageName) {
if (isQPlus()) {
} else {
finish()
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivityForResult(intent, MAKE_DEFAULT_APP_REQUEST)
}
}
}
@ -70,10 +74,34 @@ class MainActivity : SimpleActivity() {
return true
}
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
super.onActivityResult(requestCode, resultCode, resultData)
if (requestCode == MAKE_DEFAULT_APP_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
askPermissions()
} else {
finish()
}
}
}
private fun storeStateVariables() {
storedTextColor = config.textColor
}
// while READ_SMS permission is mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases
private fun askPermissions() {
handlePermission(PERMISSION_READ_SMS) {
if (it) {
handlePermission(PERMISSION_READ_CONTACTS) {
initMessenger()
}
} else {
finish()
}
}
}
private fun initMessenger() {
storeStateVariables()
val messages = getMessages()

View File

@ -0,0 +1,23 @@
package com.simplemobiletools.smsmessenger.activities
import android.os.Bundle
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.onTextChangeListener
import com.simplemobiletools.commons.extensions.value
import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.adapters.ThreadAdapter
import com.simplemobiletools.smsmessenger.extensions.config
import com.simplemobiletools.smsmessenger.extensions.getMessages
import com.simplemobiletools.smsmessenger.helpers.THREAD_ID
import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME
import com.simplemobiletools.smsmessenger.helpers.THREAD_NUMBER
import com.simplemobiletools.smsmessenger.models.ThreadDateTime
import com.simplemobiletools.smsmessenger.models.ThreadItem
import kotlinx.android.synthetic.main.activity_thread.*
class NewMessageActivity : SimpleActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_message)
}
}

View File

@ -0,0 +1,11 @@
package com.simplemobiletools.smsmessenger.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class MmsReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
}
}

View File

@ -0,0 +1,11 @@
package com.simplemobiletools.smsmessenger.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class SmsReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
}
}

View File

@ -0,0 +1,11 @@
package com.simplemobiletools.smsmessenger.services
import android.app.Service
import android.content.Intent
import android.os.IBinder
class HeadlessSmsSendService : Service() {
override fun onBind(intent: Intent?): IBinder? {
return null
}
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/new_message_holder"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>