Minor refactoring

This commit is contained in:
Niels Andriesse
2021-05-17 15:18:41 +10:00
parent cf3f0fbe57
commit 6b3aa86324
13 changed files with 106 additions and 138 deletions

View File

@@ -454,8 +454,8 @@ public class MessageDetailsActivity extends PassphraseRequiredActionBarActivity
UpdateMessageData updateMessageData = UpdateMessageData.Companion.fromJSON(messageRecord.getBody());
if (updateMessageData.getKind() instanceof UpdateMessageData.Kind.OpenGroupInvitation) {
UpdateMessageData.Kind.OpenGroupInvitation data = (UpdateMessageData.Kind.OpenGroupInvitation)updateMessageData.getKind();
openGroupInvitation.setGroupName(data.getGroupName());
openGroupInvitation.setGroupUrl(data.getGroupUrl());
openGroupInvitation.setName(data.getGroupName());
openGroupInvitation.setUrl(data.getGroupUrl());
}
message.setOpenGroupInvitation(openGroupInvitation);
} else {

View File

@@ -1859,19 +1859,18 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
sendComplete(allocatedThreadId);
}
private void sendOpenGroupInvitations(String[] contactsID) {
private void sendOpenGroupInvitations(String[] contactIDs) {
final Context context = getApplicationContext();
OpenGroupV2 openGroup = DatabaseFactory.getLokiThreadDatabase(context).getOpenGroupChat(threadId);
for (String contactId: contactsID) {
Recipient recipient = Recipient.from(context, Address.fromSerialized(contactId), true);
for (String contactID : contactIDs) {
Recipient recipient = Recipient.from(context, Address.fromSerialized(contactID), true);
VisibleMessage message = new VisibleMessage();
message.setSentTimestamp(System.currentTimeMillis());
OpenGroupInvitation openGroupInvitationMessage = new OpenGroupInvitation();
openGroupInvitationMessage.setGroupName(openGroup.getName());
openGroupInvitationMessage.setGroupUrl(openGroup.getJoinURL());
openGroupInvitationMessage.setName(openGroup.getName());
openGroupInvitationMessage.setUrl(openGroup.getJoinURL());
message.setOpenGroupInvitation(openGroupInvitationMessage);
OutgoingTextMessage outgoingTextMessage = OutgoingTextMessage.fromOpenGroupInvitation(openGroupInvitationMessage, recipient, message.getSentTimestamp());
DatabaseFactory.getSmsDatabase(context).insertMessageOutbox(-1, outgoingTextMessage, message.getSentTimestamp());
MessageSender.send(message, recipient.getAddress());
}

View File

@@ -48,7 +48,8 @@ public interface MmsSmsColumns {
OUTGOING_CALL_TYPE};
//TODO clean unused keys
// TODO: Clean unused keys
// Message attributes
protected static final long MESSAGE_FORCE_SMS_BIT = 0x40;
@@ -74,9 +75,10 @@ public interface MmsSmsColumns {
protected static final long EXPIRATION_TIMER_UPDATE_BIT = 0x40000;
protected static final long GROUP_UPDATE_MESSAGE_BIT = 0x80000;
// Data Extraction Information
// Data Extraction Notification
protected static final long MEDIA_SAVED_EXTRACTION_BIT = 0x01000;
protected static final long SCREENSHOT_EXTRACTION_BIT = 0x02000;
// Open Group Invitation
protected static final long OPEN_GROUP_INVITATION_BIT = 0x04000;

View File

@@ -165,7 +165,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
mmsDatabase.endTransaction()
} else {
val smsDatabase = DatabaseFactory.getSmsDatabase(context)
val isOpenGroupInvitation = message.openGroupInvitation != null
val isOpenGroupInvitation = (message.openGroupInvitation != null)
val insertResult = if (message.sender == getUserPublicKey()) {
val textMessage = if (isOpenGroupInvitation) OutgoingTextMessage.fromOpenGroupInvitation(message.openGroupInvitation, targetRecipient, message.sentTimestamp)

View File

@@ -145,8 +145,6 @@ public abstract class DisplayRecord {
return isMediaSavedExtraction() || isScreenshotExtraction();
}
// Open Group Invitation
public boolean isOpenGroupInvitation() {
return MmsSmsColumns.Types.isOpenGroupInvitation(type);
}

View File

@@ -1,12 +1,11 @@
package org.thoughtcrime.securesms.loki.views
import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import android.widget.*
import androidx.appcompat.app.AlertDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -20,17 +19,12 @@ import org.thoughtcrime.securesms.loki.protocol.MultiDeviceProtocol
import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities
class OpenGroupInvitationView : FrameLayout {
companion object {
private const val TAG = "OpenGroupInvitationView"
}
private val joinButton: ImageView
private val openGroupIcon: ImageView
private val groupName: TextView
private val displayedUrl: TextView
private var groupUrl: String = ""
private val openGroupIconContainer: RelativeLayout
private val openGroupIconImageView: ImageView
private val nameTextView: TextView
private val urlTextView: TextView
private var url: String = ""
constructor(context: Context): this(context, null)
@@ -38,40 +32,31 @@ class OpenGroupInvitationView : FrameLayout {
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int): super(context, attrs, defStyleAttr) {
View.inflate(context, R.layout.open_group_invitation_view, this)
joinButton = findViewById(R.id.join_open_group)
openGroupIcon = findViewById(R.id.open_group_icon)
groupName = findViewById(R.id.group_name)
displayedUrl = findViewById(R.id.group_url)
joinButton.setOnClickListener { joinPublicGroup(groupUrl) }
joinButton = findViewById(R.id.join_open_group_button)
openGroupIconContainer = findViewById(R.id.open_group_icon_image_view_container)
openGroupIconImageView = findViewById(R.id.open_group_icon_image_view)
nameTextView = findViewById(R.id.name_text_view)
urlTextView = findViewById(R.id.url_text_view)
joinButton.setOnClickListener { joinOpenGroup(url) }
}
fun setOpenGroup(name: String, url: String, isOutgoing: Boolean = false) {
groupName.text = name
displayedUrl.text = OpenGroupUrlParser.trimQueryParameter(url)
groupUrl = url
if(isOutgoing) {
joinButton.visibility = View.GONE
openGroupIcon.visibility = View.VISIBLE
} else {
joinButton.visibility = View.VISIBLE
openGroupIcon.visibility = View.GONE
}
nameTextView.text = name
urlTextView.text = OpenGroupUrlParser.trimQueryParameter(url)
this.url = url
joinButton.visibility = if (isOutgoing) View.GONE else View.VISIBLE
openGroupIconContainer.visibility = if (isOutgoing) View.VISIBLE else View.GONE
}
private fun joinPublicGroup(url: String) {
private fun joinOpenGroup(url: String) {
val openGroup = OpenGroupUrlParser.parseUrl(url)
val builder = AlertDialog.Builder(context)
builder.setTitle(context.getString(R.string.ConversationActivity_join_open_group, groupName.text.toString()))
builder.setIconAttribute(R.attr.dialog_info_icon)
builder.setTitle(context.getString(R.string.ConversationActivity_join_open_group, nameTextView.text.toString()))
builder.setCancelable(true)
var message: String =
context.getString(R.string.ConversationActivity_join_open_group_confirmation_message, groupName.text.toString())
val message: String =
context.getString(R.string.ConversationActivity_join_open_group_confirmation_message, nameTextView.text.toString())
builder.setMessage(message)
builder.setPositiveButton(R.string.yes) { dialog, which ->
builder.setPositiveButton(R.string.yes) { dialog, _ ->
GlobalScope.launch(Dispatchers.IO) {
try {
dialog.dismiss()
@@ -81,23 +66,14 @@ class OpenGroupInvitationView : FrameLayout {
openGroup.room,
openGroup.serverPublicKey
)
val threadID = GroupManager.getOpenGroupThreadID(group.id, context)
val groupID = GroupUtil.getEncodedOpenGroupID(group.id.toByteArray())
MultiDeviceProtocol.forceSyncConfigurationNowIfNeeded(context)
} catch (e: Exception) {
Log.e("JoinPublicChatActivity", "Failed to join open group.", e)
Toast.makeText(
context,
R.string.activity_join_public_chat_error,
Toast.LENGTH_SHORT
).show()
Log.e("Loki", "Failed to join open group.", e)
Toast.makeText(context, R.string.activity_join_public_chat_error, Toast.LENGTH_SHORT).show()
}
}
}
builder.setNegativeButton(R.string.no, null)
builder.show()
}
}

View File

@@ -1,73 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="org.thoughtcrime.securesms.loki.views.OpenGroupInvitationView">
<LinearLayout
android:id="@+id/audio_widget_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp"
tools:ignore="MissingConstraints" >
android:paddingHorizontal="@dimen/medium_spacing"
android:orientation="horizontal">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/join_open_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:layout_margin="4dp"
<ImageButton
android:id="@+id/join_open_group_button"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/circle_tintable"
android:backgroundTint="#00E076"
android:contentDescription="@string/open_group_invitation_view__join_accessibility_description"
app:srcCompat="@drawable/ic_add_white_original_24dp" />
<ImageView
android:id="@+id/open_group_icon"
<RelativeLayout
android:id="@+id/open_group_icon_image_view_container"
android:layout_width="48dp"
android:layout_height="48dp"
android:clickable="false"
android:visibility="gone"
android:layout_margin="4dp"
android:contentDescription="@string/open_group_invitation_view__join_accessibility_description"
android:src="@drawable/ic_globe" />
android:background="@drawable/circle_tintable"
android:backgroundTint="#00E076">
<ImageView
android:id="@+id/open_group_icon_image_view"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerInParent="true"
android:contentDescription="@string/open_group_invitation_view__join_accessibility_description"
android:src="@drawable/ic_globe" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginStart="@dimen/small_spacing"
android:orientation="vertical">
<TextView
android:id="@+id/group_name"
android:id="@+id/name_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Signal.Text.Caption"
android:fontFamily="sans-serif-medium"
android:textStyle="bold"
android:textSize="@dimen/large_font_size"
android:maxLines="1"
tools:text="Open group" />
<TextView
android:id="@+id/open_group_invitation_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Signal.Text.Body"
android:textSize="@dimen/small_font_size"
android:maxLines="1"
android:text="@string/open_group_invitation_view__open_group_invitation" />
<TextView
android:id="@+id/group_url"
android:id="@+id/url_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Signal.Text.Caption"
android:textSize="@dimen/small_font_size"
android:maxLines="1"
tools:text="http://1.1.1.1" />
</LinearLayout>
</LinearLayout>
</merge>