Fixer des bugs un peu partout
This commit is contained in:
parent
1d1de2390a
commit
bfb0764d82
|
@ -43,8 +43,7 @@ class ComposeActivity : ComposeView.SendActivity() {
|
|||
msg.medias.add(media)
|
||||
|
||||
// envoyer le message
|
||||
msg.send(context)
|
||||
return msg
|
||||
return if (msg.send(context)) msg else null
|
||||
} catch (e: Exception) {
|
||||
val stream = ByteArrayOutputStream()
|
||||
val out = PrintStream(stream)
|
||||
|
|
|
@ -67,23 +67,24 @@ class ConversationActivity: ComposeView.SendActivity() {
|
|||
|
||||
}
|
||||
|
||||
class SendTask(activity: ConversationActivity, val text: String, val medias: ArrayList<NornMedia>) : AsyncTask<Void, Void, NornMessage>() {
|
||||
class SendTask(activity: ConversationActivity, val text: String, val medias: ArrayList<NornMedia>) : AsyncTask<Void, Void, NornMessage?>() {
|
||||
|
||||
val activity = WeakReference<ConversationActivity>(activity)
|
||||
|
||||
override fun doInBackground(vararg params: Void): NornMessage {
|
||||
override fun doInBackground(vararg params: Void): NornMessage? {
|
||||
val activity = this.activity.get()!!
|
||||
val msg = NornMessage(text, activity.conversation, Date(), activity)
|
||||
for (media in medias)
|
||||
msg.medias.add(media)
|
||||
|
||||
msg.send(activity)
|
||||
return msg
|
||||
return if (msg.send(activity)) msg else null
|
||||
}
|
||||
|
||||
override fun onPostExecute(nMessage: NornMessage) {
|
||||
override fun onPostExecute(nMessage: NornMessage?) {
|
||||
// transmettre le message à toutes les activités
|
||||
NornMessageDispatcher.send(nMessage)
|
||||
if (nMessage != null)
|
||||
NornMessageDispatcher.send(nMessage)
|
||||
|
||||
Log.d(this::class.java.simpleName, nMessage.toString())
|
||||
}
|
||||
|
||||
|
@ -107,6 +108,7 @@ class ConversationActivity: ComposeView.SendActivity() {
|
|||
private val conversation get() = NornConversation.getConversation(_conversationId!!, this)
|
||||
|
||||
override fun initialize() {
|
||||
super.initialize()
|
||||
// lorsque l'utilisateur lance la conversation par l'application Contacts
|
||||
if (this.intent.action != null) {
|
||||
// trouver le contact dans l'Intent
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
package xyz.johnny.norntalk.messages
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import com.klinker.android.send_message.MmsReceivedReceiver
|
||||
|
||||
/**
|
||||
* Classe recevant les MMS.
|
||||
*/
|
||||
class NornMMSReceiver: MmsReceivedReceiver()
|
||||
class NornMMSReceiver: MmsReceivedReceiver() {
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent?) {
|
||||
Log.d(this::class.java.simpleName, "MMS received")
|
||||
}
|
||||
|
||||
}
|
|
@ -1,8 +1,20 @@
|
|||
package xyz.johnny.norntalk.messages
|
||||
|
||||
import com.klinker.android.send_message.MmsSentReceiver
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import xyz.johnny.norntalk.R
|
||||
|
||||
/**
|
||||
* Classe permettant d'avertir de l'envoi d'un MMS
|
||||
*/
|
||||
class NornMMSSentReceiver : MmsSentReceiver()
|
||||
class NornMMSSentReceiver : BroadcastReceiver() {
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent?) {
|
||||
Log.d(this::class.java.simpleName, "MMS sent")
|
||||
Toast.makeText(context, context.getString(R.string.message_sent), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
}
|
|
@ -281,19 +281,12 @@ class NornMessage constructor(text: String?, var ciphertext: String?, sender: St
|
|||
* @param raw Si Vrai le message sera envoyé en clair, sinon le message sera chiffré en fonction
|
||||
* des propriétés de la conversation
|
||||
*/
|
||||
fun send(context: Context, insert: Boolean, raw: Boolean = false) {
|
||||
fun send(context: Context, insert: Boolean = true, raw: Boolean = false): Boolean {
|
||||
Log.d(this::class.java.simpleName, "sending: " + this)
|
||||
val transaction = NornTransaction(context)
|
||||
transaction.sendNewMessage(this, insert, raw)
|
||||
return transaction.sendNewMessage(this, insert, raw)
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoyer un message. Le message sera inséré dans la base de données
|
||||
*
|
||||
* @param context Contexte courant
|
||||
*/
|
||||
fun send(context: Context) = send(context, true)
|
||||
|
||||
/**
|
||||
* Chiffre le contenu du message
|
||||
*
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package xyz.johnny.norntalk.messages
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -85,7 +84,6 @@ class NornMessageReceiver : BroadcastReceiver() {
|
|||
message.setPublicKey(context)
|
||||
|
||||
/*
|
||||
*
|
||||
* Si la conversation n'est pas déjà notée comme sécurisée on envoi un message à
|
||||
* l'expéditeur du message afin d'être sûr qu'il aient reçu notre clé publique.
|
||||
* Les échanges s'effectuent donc ainsi:
|
||||
|
|
|
@ -80,9 +80,12 @@ class NornTransaction constructor(private val context: Context) {
|
|||
* @param raw Si Vrai le message sera envoyé en clair, sinon le message sera chiffré en fonction
|
||||
* des propriétés de la conversation
|
||||
*/
|
||||
fun sendNewMessage(message: NornMessage, insert: Boolean, raw: Boolean) {
|
||||
fun sendNewMessage(message: NornMessage, insert: Boolean, raw: Boolean): Boolean {
|
||||
if (message.medias.isEmpty()) {
|
||||
this.sendSmsMessage(message, insert, raw)
|
||||
if (message.text.isBlank())
|
||||
return false
|
||||
else
|
||||
this.sendSmsMessage(message, insert, raw)
|
||||
} else {
|
||||
try {
|
||||
Looper.prepare()
|
||||
|
@ -92,6 +95,7 @@ class NornTransaction constructor(private val context: Context) {
|
|||
DownloadManager.init(context)
|
||||
this.sendMmsMessage(message)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -426,20 +430,6 @@ class NornTransaction constructor(private val context: Context) {
|
|||
val info = MessageInfo()
|
||||
info.bytes = bytesToSend
|
||||
|
||||
if (saveMessage) {
|
||||
try {
|
||||
val persister = PduPersister.getPduPersister(context)
|
||||
info.location = persister.persist(sendRequest, Uri.parse("content://mms/outbox"), true, settings.group, null)
|
||||
} catch (e: Exception) {
|
||||
Log.v("sending_mms_library", "error saving mms message")
|
||||
Log.e(TAG, "exception thrown", e)
|
||||
|
||||
// use the old way if something goes wrong with the persister
|
||||
insert(context, recipients, parts, subject)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
val query = context.contentResolver.query(info.location!!, arrayOf("thread_id"), null, null, null)
|
||||
if (query != null && query.moveToFirst()) {
|
||||
|
@ -467,9 +457,9 @@ class NornTransaction constructor(private val context: Context) {
|
|||
val mSendFile = File(context.cacheDir, fileName)
|
||||
|
||||
val sendReq = buildPdu(context, addresses, subject, parts)
|
||||
val persister = PduPersister.getPduPersister(context)
|
||||
val messageUri = persister.persist(sendReq, Uri.parse("content://mms/outbox"),
|
||||
true, settings.group, null)
|
||||
//val persister = PduPersister.getPduPersister(context)
|
||||
//val messageUri = persister.persist(sendReq, null,
|
||||
// false, settings.group, null)
|
||||
|
||||
val intent: Intent
|
||||
if (explicitSentMmsReceiver == null) {
|
||||
|
@ -479,7 +469,7 @@ class NornTransaction constructor(private val context: Context) {
|
|||
intent = explicitSentMmsReceiver
|
||||
}
|
||||
|
||||
intent.putExtra(MmsSentReceiver.EXTRA_CONTENT_URI, messageUri.toString())
|
||||
//intent.putExtra(MmsSentReceiver.EXTRA_CONTENT_URI, messageUri.toString())
|
||||
intent.putExtra(MmsSentReceiver.EXTRA_FILE_PATH, mSendFile.path)
|
||||
val pendingIntent = PendingIntent.getBroadcast(
|
||||
context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)
|
||||
|
@ -614,79 +604,6 @@ class NornTransaction constructor(private val context: Context) {
|
|||
return part.data.size
|
||||
}
|
||||
|
||||
private fun insert(context: Context, to: Array<String>, parts: Array<MMSPart>?, subject: String?): Uri? {
|
||||
try {
|
||||
val destUri = Uri.parse("content://mms")
|
||||
|
||||
val recipients = HashSet<String>()
|
||||
recipients.addAll(Arrays.asList(*to))
|
||||
val thread_id = Utils.getOrCreateThreadId(context, recipients)
|
||||
|
||||
// Create a dummy sms
|
||||
val dummyValues = ContentValues()
|
||||
dummyValues.put("thread_id", thread_id)
|
||||
dummyValues.put("body", " ")
|
||||
val dummySms = context.contentResolver.insert(Uri.parse("content://sms/sent"), dummyValues)
|
||||
|
||||
// Create a new message entry
|
||||
val now = System.currentTimeMillis()
|
||||
val mmsValues = ContentValues()
|
||||
mmsValues.put("thread_id", thread_id)
|
||||
mmsValues.put("date", now / 1000L)
|
||||
mmsValues.put("msg_box", 4)
|
||||
//mmsValues.put("m_id", System.currentTimeMillis());
|
||||
mmsValues.put("read", true)
|
||||
mmsValues.put("sub", subject ?: "")
|
||||
mmsValues.put("sub_cs", 106)
|
||||
mmsValues.put("ct_t", "application/vnd.wap.multipart.related")
|
||||
|
||||
var imageBytes: Long = 0
|
||||
|
||||
for (part in parts!!) {
|
||||
imageBytes += part.Data.size.toLong()
|
||||
}
|
||||
|
||||
mmsValues.put("exp", imageBytes)
|
||||
|
||||
mmsValues.put("m_cls", "personal")
|
||||
mmsValues.put("m_type", 128) // 132 (RETRIEVE CONF) 130 (NOTIF IND) 128 (SEND REQ)
|
||||
mmsValues.put("v", 19)
|
||||
mmsValues.put("pri", 129)
|
||||
mmsValues.put("tr_id", "T" + java.lang.Long.toHexString(now))
|
||||
mmsValues.put("resp_st", 128)
|
||||
|
||||
// Insert message
|
||||
val res = context.contentResolver.insert(destUri, mmsValues)
|
||||
val messageId = res!!.lastPathSegment.trim { it <= ' ' }
|
||||
|
||||
// Create part
|
||||
for (part in parts) {
|
||||
if (part.MimeType.startsWith("image")) {
|
||||
createPartImage(context, messageId, part.Data, part.MimeType)
|
||||
} else if (part.MimeType.startsWith("text")) {
|
||||
createPartText(context, messageId, String(part.Data, Charsets.UTF_8))
|
||||
}
|
||||
}
|
||||
|
||||
// Create addresses
|
||||
for (addr in to) {
|
||||
createAddr(context, messageId, addr)
|
||||
}
|
||||
|
||||
//res = Uri.parse(destUri + "/" + messageId);
|
||||
|
||||
// Delete dummy sms
|
||||
context.contentResolver.delete(dummySms!!, null, null)
|
||||
|
||||
return res
|
||||
} catch (e: Exception) {
|
||||
Log.v("sending_mms_library", "still an error saving... :(")
|
||||
Log.e(TAG, "exception thrown", e)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
// create the image part to be stored in database
|
||||
@Throws(Exception::class)
|
||||
private fun createPartImage(context: Context, id: String, imageBytes: ByteArray, mimeType: String): Uri {
|
||||
|
|
|
@ -5,7 +5,6 @@ import android.content.Intent
|
|||
import android.graphics.Typeface
|
||||
import android.support.constraint.ConstraintLayout
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import kotlinx.android.synthetic.main.conversation_view.view.*
|
||||
import xyz.johnny.norntalk.ConversationActivity
|
||||
import xyz.johnny.norntalk.messages.NornMessage
|
||||
|
@ -42,7 +41,6 @@ class ConversationView : ConstraintLayout {
|
|||
*/
|
||||
fun setMessage(msg: NornMessage) {
|
||||
this._message = msg
|
||||
Log.d(this::class.java.simpleName, message.toString())
|
||||
|
||||
// assigner le contact au QuickContactBadge
|
||||
if (message.contact.uri == null)
|
||||
|
|
|
@ -2,7 +2,6 @@ package xyz.johnny.norntalk.ui_components
|
|||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.widget.RelativeLayout
|
||||
import com.cpiz.android.bubbleview.BubbleStyle
|
||||
import com.cpiz.android.bubbleview.BubbleTextView
|
||||
|
@ -33,8 +32,6 @@ class MessageView : BubbleTextView {
|
|||
this._message = msg
|
||||
this.text = msg.text
|
||||
|
||||
Log.d(this::class.java.simpleName, msg.toString())
|
||||
|
||||
// changer l'affichage du message en fonction de l'expéditeur
|
||||
val params = this.layoutParams as RelativeLayout.LayoutParams
|
||||
if (this.message.sender == null) {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<EditText
|
||||
android:id="@+id/composeInput"
|
||||
android:layout_width="@dimen/match_constraint"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="4dp"
|
||||
|
@ -42,9 +42,7 @@
|
|||
style="@style/Widget.AppCompat.Button.Borderless"
|
||||
android:layout_width="26dp"
|
||||
android:layout_height="26dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginStart="14dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:background="@drawable/ic_photo"
|
||||
android:backgroundTint="@color/Grey"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
|
Loading…
Reference in a new issue