Je bodge un chemin vers les mms

This commit is contained in:
odrling 2018-03-28 01:12:50 +02:00
parent 8c5fa6a49f
commit 7b12c3bb45
7 changed files with 828 additions and 66 deletions

View file

@ -55,6 +55,8 @@ dependencies {
implementation 'com.journeyapps:zxing-android-embedded:3.5.0'
implementation 'com.google.zxing:core:3.3.1'
implementation 'com.cpiz.bubbleview:bubbleview:1.0.2'
implementation 'com.klinkerapps:android-smsmms:4.3.0'
implementation 'org.apache.httpcomponents:httpcore:4.4.1'
}
dokka {

View file

@ -2,13 +2,21 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xyz.johnny.norntalk">
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.provider.Telephony.SMS_RECEIVED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<application
android:allowBackup="false"
@ -65,12 +73,17 @@
<receiver
android:name=".messages.NornSentReceiver"
android:enabled="true"/>
android:taskAffinity="xyz.johnny.norntalk.SMS_SENT"/>
<receiver
android:name=".messages.NornDeliveredReceiver"
android:enabled="true"/>
android:taskAffinity="xyz.johnny.norntalk.SMS_DELIVERED"/>
<receiver
android:name=".messages.NornMMSSentReceiver"
android:taskAffinity="com.klinker.android.messaging.MMS_SENT"/>
<service android:name="com.android.mms.transaction.TransactionService"/>
<service android:name=".messages.NornMessageService"
android:enabled="true"

View file

@ -1,17 +1,8 @@
package xyz.johnny.norntalk.messages
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.klinker.android.send_message.MmsReceivedReceiver
/**
* Classe recevant les MMS.
* Non implémentée mais nécessaire pour pouvoir définir l'application comme application SMS
*/
class NornMMSReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
TODO("not implemented")
}
}
class NornMMSReceiver: MmsReceivedReceiver()

View file

@ -0,0 +1,8 @@
package xyz.johnny.norntalk.messages
import com.klinker.android.send_message.MmsSentReceiver
/**
* Classe permettant d'avertir de l'envoi d'un MMS
*/
class NornMMSSentReceiver : MmsSentReceiver()

View file

@ -1,10 +1,7 @@
package xyz.johnny.norntalk.messages
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.AsyncTask
import android.telephony.SmsManager
import android.util.Base64
import android.util.Log
import org.bouncycastle.util.encoders.Hex
@ -13,7 +10,6 @@ import xyz.johnny.norntalk.R
import xyz.johnny.norntalk.database.NornDatabase
import xyz.johnny.norntalk.database.entities.Message
import xyz.johnny.norntalk.security.Curve
import xyz.johnny.norntalk.security.Security
import java.util.*
@ -126,6 +122,11 @@ class NornMessage constructor(text: String?, var ciphertext: String?, sender: St
*/
val id get() = dbMessage.id
/**
* Array contenant le numéro de téléphone de chaque destinataire
*/
val addresses get() = conversation.members.map { it.number }.toTypedArray()
init {
if (sender == null) {
this.sender = null
@ -248,50 +249,10 @@ class NornMessage constructor(text: String?, var ciphertext: String?, sender: St
* des propriétés de la conversation
*/
fun send(context: Context, insert: Boolean, raw: Boolean = false) {
val smsManager = SmsManager.getDefault()
// envoyer le message chiffré si la conversation est sécurisée
val text = if (this.conversation.secured && this.ciphertext != null && !raw) this.ciphertext
else this.text
Log.d(this::class.java.simpleName, "sent: " + this)
// diviser le messages en plusieurs parties pour les messages longs
val parts = smsManager.divideMessage(text)
val piSent: ArrayList<PendingIntent>?
val piDelivered: ArrayList<PendingIntent>?
if (insert) {
// création des receveurs d'envoi du message
piSent = ArrayList()
parts.forEach {
val intentSent = Intent(context, NornSentReceiver::class.java)
piSent.add(PendingIntent.getBroadcast(context, Security.random.nextInt(), intentSent, 0))
}
// création des accusés de réception du message
piDelivered = ArrayList()
parts.forEach {
val intentDelivered = Intent(context, NornDeliveredReceiver::class.java)
piDelivered.add(PendingIntent.getBroadcast(context, Security.random.nextInt(), intentDelivered, 0))
}
} else {
// désactiver les accusés de reception
piSent = null
piDelivered = null
}
if (parts.size == 1)
// envoyer le message en un seul SMS
smsManager.sendTextMessage(this.contact.number, null, text, piSent?.get(0), piDelivered?.get(0))
else
// envoyer le message en plusieurs SMS
smsManager.sendMultipartTextMessage(this.contact.number, null, parts, piSent, piDelivered)
// insérer le message dans la base de données
if (insert)
this.insertMessage(context)
Log.d(this::class.java.simpleName, "sending: " + this)
// envoyer le message
val transaction = NornTransaction(context)
transaction.sendNewMessage(this, insert, raw)
}
/**

View file

@ -23,6 +23,7 @@ class NornSentReceiver : BroadcastReceiver() {
toast.setText(R.string.message_sent)
else
toast.setText(R.string.error_send)
toast.duration = Toast.LENGTH_SHORT
toast.show()
}

File diff suppressed because it is too large Load diff