Fixer des bugs un peu partout

This commit is contained in:
odrling 2018-03-31 22:08:51 +02:00
parent 1d1de2390a
commit bfb0764d82
10 changed files with 46 additions and 123 deletions

View file

@ -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)

View file

@ -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

View file

@ -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")
}
}

View file

@ -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()
}
}

View file

@ -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
*

View file

@ -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:

View file

@ -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 {

View file

@ -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)

View file

@ -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) {

View file

@ -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"