mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-20 06:58:26 +00:00
Merge branch 'dev' into v2-file-server
This commit is contained in:
commit
3e75ed3cc4
@ -158,8 +158,8 @@ dependencies {
|
|||||||
testImplementation 'org.robolectric:shadows-multidex:4.2'
|
testImplementation 'org.robolectric:shadows-multidex:4.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
def canonicalVersionCode = 161
|
def canonicalVersionCode = 163
|
||||||
def canonicalVersionName = "1.10.2"
|
def canonicalVersionName = "1.10.4"
|
||||||
|
|
||||||
def postFixSize = 10
|
def postFixSize = 10
|
||||||
def abiPostFix = ['armeabi-v7a' : 1,
|
def abiPostFix = ['armeabi-v7a' : 1,
|
||||||
|
@ -254,6 +254,10 @@
|
|||||||
android:name="android.support.PARENT_ACTIVITY"
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
android:value="org.thoughtcrime.securesms.loki.activities.HomeActivity" />
|
android:value="org.thoughtcrime.securesms.loki.activities.HomeActivity" />
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="org.thoughtcrime.securesms.loki.activities.OpenGroupGuidelinesActivity"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:theme="@style/Theme.TextSecure.DayNight"/>
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thoughtcrime.securesms.longmessage.LongMessageActivity"
|
android:name="org.thoughtcrime.securesms.longmessage.LongMessageActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
|
@ -381,6 +381,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
PublicChatInfoUpdateWorker.scheduleInstant(this, publicChat.getServer(), publicChat.getChannel());
|
PublicChatInfoUpdateWorker.scheduleInstant(this, publicChat.getServer(), publicChat.getChannel());
|
||||||
} else if (openGroupV2 != null) {
|
} else if (openGroupV2 != null) {
|
||||||
PublicChatInfoUpdateWorker.scheduleInstant(this, openGroupV2.getServer(), openGroupV2.getRoom());
|
PublicChatInfoUpdateWorker.scheduleInstant(this, openGroupV2.getServer(), openGroupV2.getRoom());
|
||||||
|
if (openGroupV2.getRoom().equals("session") || openGroupV2.getRoom().equals("oxen")
|
||||||
|
|| openGroupV2.getRoom().equals("lokinet") || openGroupV2.getRoom().equals("crypto")) {
|
||||||
|
View openGroupGuidelinesView = findViewById(R.id.open_group_guidelines_view);
|
||||||
|
openGroupGuidelinesView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
View rootView = findViewById(R.id.rootView);
|
View rootView = findViewById(R.id.rootView);
|
||||||
|
@ -546,7 +546,7 @@ public class ConversationFragment extends Fragment
|
|||||||
.deleteMessages(serverIDs, publicChat.getChannel(), publicChat.getServer(), isSentByUser)
|
.deleteMessages(serverIDs, publicChat.getChannel(), publicChat.getServer(), isSentByUser)
|
||||||
.success(l -> {
|
.success(l -> {
|
||||||
for (MessageRecord messageRecord : messageRecords) {
|
for (MessageRecord messageRecord : messageRecords) {
|
||||||
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id, !messageRecord.isMms());
|
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id, !messageRecord.isMms());
|
||||||
if (l.contains(serverID)) {
|
if (l.contains(serverID)) {
|
||||||
if (messageRecord.isMms()) {
|
if (messageRecord.isMms()) {
|
||||||
DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId());
|
DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId());
|
||||||
@ -569,7 +569,7 @@ public class ConversationFragment extends Fragment
|
|||||||
.deleteMessage(serverId, openGroupChat.getRoom(), openGroupChat.getServer())
|
.deleteMessage(serverId, openGroupChat.getRoom(), openGroupChat.getServer())
|
||||||
.success(l -> {
|
.success(l -> {
|
||||||
for (MessageRecord messageRecord : messageRecords) {
|
for (MessageRecord messageRecord : messageRecords) {
|
||||||
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id, !messageRecord.isMms());
|
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id, !messageRecord.isMms());
|
||||||
if (serverID != null && serverID.equals(serverId)) {
|
if (serverID != null && serverID.equals(serverId)) {
|
||||||
MessagingModuleConfiguration.shared.getMessageDataProvider().deleteMessage(messageRecord.id, !messageRecord.isMms());
|
MessagingModuleConfiguration.shared.getMessageDataProvider().deleteMessage(messageRecord.id, !messageRecord.isMms());
|
||||||
break;
|
break;
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package org.thoughtcrime.securesms.loki.activities
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import kotlinx.android.synthetic.main.activity_open_group_guidelines.*
|
||||||
|
import network.loki.messenger.R
|
||||||
|
import org.thoughtcrime.securesms.BaseActionBarActivity
|
||||||
|
|
||||||
|
class OpenGroupGuidelinesActivity : BaseActionBarActivity() {
|
||||||
|
|
||||||
|
// region Lifecycle
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setContentView(R.layout.activity_open_group_guidelines)
|
||||||
|
communityGuidelinesTextView.text = """
|
||||||
|
In order for our open group to be a fun environment, full of robust and constructive discussion, please follow these four simple rules:
|
||||||
|
|
||||||
|
1. Keep conversations on-topic and add value to the discussion (no referral links, spamming, or off-topic discussion).
|
||||||
|
|
||||||
|
2. You don't have to love everyone, but be civil (no baiting, excessively partisan arguments, threats, and so on; use common sense).
|
||||||
|
|
||||||
|
3. Do not be a shill. Comparison and criticism is reasonable, but blatant shilling is not.
|
||||||
|
|
||||||
|
4. Don't post explicit content, be it excessive offensive language, or content which is sexual or violent in nature.
|
||||||
|
|
||||||
|
If you break these rules, you’ll be warned by an admin. If your behaviour doesn’t improve, you will be removed from the open group.
|
||||||
|
|
||||||
|
If you see or experience any destructive behaviour, please contact an admin.
|
||||||
|
|
||||||
|
——————————
|
||||||
|
|
||||||
|
SCAMMER WARNING
|
||||||
|
|
||||||
|
Trust only those with an admin tag in the chat. No admin will ever DM you first. No admin will ever message you for Oxen coins.
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
}
|
@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.loki.database
|
|||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import net.sqlcipher.database.SQLiteDatabase.CONFLICT_REPLACE
|
||||||
import org.thoughtcrime.securesms.database.Database
|
import org.thoughtcrime.securesms.database.Database
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
||||||
@ -98,11 +99,11 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab
|
|||||||
|
|
||||||
override fun setServerID(messageID: Long, serverID: Long, isSms: Boolean) {
|
override fun setServerID(messageID: Long, serverID: Long, isSms: Boolean) {
|
||||||
val database = databaseHelper.writableDatabase
|
val database = databaseHelper.writableDatabase
|
||||||
val contentValues = ContentValues(2)
|
val contentValues = ContentValues(3)
|
||||||
contentValues.put(Companion.messageID, messageID)
|
contentValues.put(Companion.messageID, messageID)
|
||||||
contentValues.put(Companion.serverID, serverID)
|
contentValues.put(Companion.serverID, serverID)
|
||||||
contentValues.put(messageType, if (isSms) SMS_TYPE else MMS_TYPE)
|
contentValues.put(messageType, if (isSms) SMS_TYPE else MMS_TYPE)
|
||||||
database.insertOrUpdate(messageIDTable, contentValues, "${Companion.messageID} = ? AND ${Companion.serverID} = ?", arrayOf(messageID.toString(), serverID.toString()))
|
database.insertWithOnConflict(messageIDTable, null, contentValues, CONFLICT_REPLACE)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getOriginalThreadID(messageID: Long): Long {
|
fun getOriginalThreadID(messageID: Long): Long {
|
||||||
@ -114,11 +115,11 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab
|
|||||||
|
|
||||||
fun setOriginalThreadID(messageID: Long, serverID: Long, threadID: Long) {
|
fun setOriginalThreadID(messageID: Long, serverID: Long, threadID: Long) {
|
||||||
val database = databaseHelper.writableDatabase
|
val database = databaseHelper.writableDatabase
|
||||||
val contentValues = ContentValues(2)
|
val contentValues = ContentValues(3)
|
||||||
contentValues.put(Companion.messageID, messageID)
|
contentValues.put(Companion.messageID, messageID)
|
||||||
contentValues.put(Companion.serverID, serverID)
|
contentValues.put(Companion.serverID, serverID)
|
||||||
contentValues.put(Companion.threadID, threadID)
|
contentValues.put(Companion.threadID, threadID)
|
||||||
database.insertOrUpdate(messageThreadMappingTable, contentValues, "${Companion.messageID} = ? AND ${Companion.serverID} = ?", arrayOf(messageID.toString(), serverID.toString()))
|
database.insertWithOnConflict(messageThreadMappingTable, null, contentValues, CONFLICT_REPLACE)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getErrorMessage(messageID: Long): String? {
|
fun getErrorMessage(messageID: Long): String? {
|
||||||
|
@ -35,11 +35,10 @@ object OpenGroupUtilities {
|
|||||||
val groupInfo = OpenGroupAPIV2.getInfo(room,server).get()
|
val groupInfo = OpenGroupAPIV2.getInfo(room,server).get()
|
||||||
val application = ApplicationContext.getInstance(context)
|
val application = ApplicationContext.getInstance(context)
|
||||||
|
|
||||||
val group = application.publicChatManager.addChat(server, room, groupInfo, publicKey)
|
|
||||||
|
|
||||||
val storage = MessagingModuleConfiguration.shared.storage
|
val storage = MessagingModuleConfiguration.shared.storage
|
||||||
storage.removeLastDeletionServerId(room, server)
|
storage.removeLastDeletionServerId(room, server)
|
||||||
storage.removeLastMessageServerId(room, server)
|
storage.removeLastMessageServerId(room, server)
|
||||||
|
val group = application.publicChatManager.addChat(server, room, groupInfo, publicKey)
|
||||||
|
|
||||||
return group
|
return group
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package org.thoughtcrime.securesms.loki.views
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.widget.FrameLayout
|
||||||
|
import kotlinx.android.synthetic.main.view_open_group_guidelines.view.*
|
||||||
|
import network.loki.messenger.R
|
||||||
|
import org.thoughtcrime.securesms.conversation.ConversationActivity
|
||||||
|
import org.thoughtcrime.securesms.loki.activities.OpenGroupGuidelinesActivity
|
||||||
|
import org.thoughtcrime.securesms.loki.utilities.push
|
||||||
|
|
||||||
|
class OpenGroupGuidelinesView : FrameLayout {
|
||||||
|
|
||||||
|
constructor(context: Context) : super(context) {
|
||||||
|
setUpViewHierarchy()
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
|
||||||
|
setUpViewHierarchy()
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
|
||||||
|
setUpViewHierarchy()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpViewHierarchy() {
|
||||||
|
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||||
|
val contentView = inflater.inflate(R.layout.view_open_group_guidelines, null)
|
||||||
|
addView(contentView)
|
||||||
|
readButton.setOnClickListener {
|
||||||
|
val activity = context as ConversationActivity
|
||||||
|
val intent = Intent(activity, OpenGroupGuidelinesActivity::class.java)
|
||||||
|
activity.push(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
app/src/main/res/layout/activity_open_group_guidelines.xml
Normal file
36
app/src/main/res/layout/activity_open_group_guidelines.xml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/large_spacing"
|
||||||
|
android:layout_marginTop="@dimen/large_spacing"
|
||||||
|
android:layout_marginRight="@dimen/large_spacing"
|
||||||
|
android:textSize="@dimen/large_font_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textColor="@color/text"
|
||||||
|
android:text="Community Guidelines" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/communityGuidelinesTextView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/large_spacing"
|
||||||
|
android:layout_marginTop="@dimen/medium_spacing"
|
||||||
|
android:layout_marginRight="@dimen/large_spacing"
|
||||||
|
android:layout_marginBottom="@dimen/large_spacing"
|
||||||
|
android:textSize="@dimen/medium_font_size"
|
||||||
|
android:textColor="@color/text" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
@ -134,6 +134,12 @@
|
|||||||
android:background="?android:dividerHorizontal"
|
android:background="?android:dividerHorizontal"
|
||||||
android:elevation="1dp" />
|
android:elevation="1dp" />
|
||||||
|
|
||||||
|
<org.thoughtcrime.securesms.loki.views.OpenGroupGuidelinesView
|
||||||
|
android:id="@+id/open_group_guidelines_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/fragment_content"
|
android:id="@+id/fragment_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
72
app/src/main/res/layout/view_open_group_guidelines.xml
Normal file
72
app/src/main/res/layout/view_open_group_guidelines.xml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/cell_background"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingLeft="12dp"
|
||||||
|
android:paddingTop="@dimen/small_spacing"
|
||||||
|
android:paddingBottom="@dimen/small_spacing"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="2dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginRight="@dimen/small_spacing"
|
||||||
|
android:background="@color/accent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/titleTextView"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@color/text"
|
||||||
|
android:textSize="@dimen/small_font_size"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:text="Pinned message" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:maxWidth="260dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@color/text"
|
||||||
|
android:textSize="@dimen/small_font_size"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="Community guidelines" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:minWidth="@dimen/small_spacing" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.Session.Button.Common.ProminentOutline"
|
||||||
|
android:id="@+id/readButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/small_button_height"
|
||||||
|
android:layout_marginRight="12dp"
|
||||||
|
android:textSize="@dimen/small_font_size"
|
||||||
|
android:textStyle="normal"
|
||||||
|
android:text="Read" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1px"
|
||||||
|
android:background="?android:dividerHorizontal" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -130,12 +130,7 @@ class JobQueue : JobDelegate {
|
|||||||
}
|
}
|
||||||
// Message send jobs waiting for the attachment to upload
|
// Message send jobs waiting for the attachment to upload
|
||||||
if (job is MessageSendJob && error is MessageSendJob.AwaitingAttachmentUploadException) {
|
if (job is MessageSendJob && error is MessageSendJob.AwaitingAttachmentUploadException) {
|
||||||
val retryInterval: Long = 1000 * 4
|
|
||||||
Log.i("Loki", "Message send job waiting for attachment upload to finish.")
|
Log.i("Loki", "Message send job waiting for attachment upload to finish.")
|
||||||
timer.schedule(delay = retryInterval) {
|
|
||||||
Log.i("Loki", "Retrying ${job::class.simpleName}.")
|
|
||||||
queue.offer(job)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Regular job failure
|
// Regular job failure
|
||||||
|
@ -225,7 +225,8 @@ fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, proto: SignalS
|
|||||||
}
|
}
|
||||||
val openGroupServerID = message.openGroupServerMessageID
|
val openGroupServerID = message.openGroupServerMessageID
|
||||||
if (openGroupServerID != null) {
|
if (openGroupServerID != null) {
|
||||||
storage.setOpenGroupServerMessageID(messageID, openGroupServerID, threadID, !message.isMediaMessage())
|
val isSms = !(message.isMediaMessage() || attachments.isNotEmpty())
|
||||||
|
storage.setOpenGroupServerMessageID(messageID, openGroupServerID, threadID, isSms)
|
||||||
}
|
}
|
||||||
// Cancel any typing indicators if needed
|
// Cancel any typing indicators if needed
|
||||||
cancelTypingIndicatorsIfNeeded(message.sender!!)
|
cancelTypingIndicatorsIfNeeded(message.sender!!)
|
||||||
|
@ -73,8 +73,8 @@ class OpenGroupV2Poller(private val openGroups: List<OpenGroupV2>, private val e
|
|||||||
return OpenGroupAPIV2.compactPoll(rooms = rooms, server).successBackground { results ->
|
return OpenGroupAPIV2.compactPoll(rooms = rooms, server).successBackground { results ->
|
||||||
results.forEach { (room, results) ->
|
results.forEach { (room, results) ->
|
||||||
val serverRoomId = "$server.$room"
|
val serverRoomId = "$server.$room"
|
||||||
handleDeletedMessages(serverRoomId,results.deletions)
|
|
||||||
handleNewMessages(serverRoomId, results.messages.sortedBy { it.serverID }, isBackgroundPoll)
|
handleNewMessages(serverRoomId, results.messages.sortedBy { it.serverID }, isBackgroundPoll)
|
||||||
|
handleDeletedMessages(serverRoomId,results.deletions)
|
||||||
}
|
}
|
||||||
}.always {
|
}.always {
|
||||||
isPollOngoing = false
|
isPollOngoing = false
|
||||||
@ -120,7 +120,11 @@ class OpenGroupV2Poller(private val openGroups: List<OpenGroupV2>, private val e
|
|||||||
val threadId = messagingModule.storage.getThreadIdFor(Address.fromSerialized(address)) ?: return
|
val threadId = messagingModule.storage.getThreadIdFor(Address.fromSerialized(address)) ?: return
|
||||||
|
|
||||||
val deletedMessageIDs = deletedMessageServerIDs.mapNotNull { serverId ->
|
val deletedMessageIDs = deletedMessageServerIDs.mapNotNull { serverId ->
|
||||||
messagingModule.messageDataProvider.getMessageID(serverId, threadId)
|
val id = messagingModule.messageDataProvider.getMessageID(serverId, threadId)
|
||||||
|
if (id == null) {
|
||||||
|
Log.d("Loki", "Couldn't find server ID $serverId")
|
||||||
|
}
|
||||||
|
id
|
||||||
}
|
}
|
||||||
deletedMessageIDs.forEach { (messageId, isSms) ->
|
deletedMessageIDs.forEach { (messageId, isSms) ->
|
||||||
MessagingModuleConfiguration.shared.messageDataProvider.deleteMessage(messageId, isSms)
|
MessagingModuleConfiguration.shared.messageDataProvider.deleteMessage(messageId, isSms)
|
||||||
|
@ -58,7 +58,6 @@ public enum MaterialColor {
|
|||||||
|
|
||||||
private final String serialized;
|
private final String serialized;
|
||||||
|
|
||||||
|
|
||||||
MaterialColor(@ColorRes int mainColor, @ColorRes int tintColor, @ColorRes int shadeColor, String serialized) {
|
MaterialColor(@ColorRes int mainColor, @ColorRes int tintColor, @ColorRes int shadeColor, String serialized) {
|
||||||
this.mainColor = mainColor;
|
this.mainColor = mainColor;
|
||||||
this.tintColor = tintColor;
|
this.tintColor = tintColor;
|
||||||
@ -110,9 +109,9 @@ public enum MaterialColor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean represents(Context context, int colorValue) {
|
public boolean represents(Context context, int colorValue) {
|
||||||
return context.getResources().getColor(mainColor) == colorValue ||
|
return context.getResources().getColor(mainColor) == colorValue
|
||||||
context.getResources().getColor(tintColor) == colorValue ||
|
|| context.getResources().getColor(tintColor) == colorValue
|
||||||
context.getResources().getColor(shadeColor) == colorValue;
|
|| context.getResources().getColor(shadeColor) == colorValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String serialize() {
|
public String serialize() {
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
package org.session.libsession.utilities.color;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class MaterialColors {
|
|
||||||
|
|
||||||
public static final MaterialColorList CONVERSATION_PALETTE = new MaterialColorList(new ArrayList<>(Arrays.asList(
|
|
||||||
MaterialColor.PLUM,
|
|
||||||
MaterialColor.CRIMSON,
|
|
||||||
MaterialColor.VERMILLION,
|
|
||||||
MaterialColor.VIOLET,
|
|
||||||
MaterialColor.BLUE,
|
|
||||||
MaterialColor.INDIGO,
|
|
||||||
MaterialColor.FOREST,
|
|
||||||
MaterialColor.WINTERGREEN,
|
|
||||||
MaterialColor.TEAL,
|
|
||||||
MaterialColor.BURLAP,
|
|
||||||
MaterialColor.TAUPE,
|
|
||||||
MaterialColor.STEEL
|
|
||||||
)));
|
|
||||||
|
|
||||||
public static class MaterialColorList {
|
|
||||||
|
|
||||||
private final List<MaterialColor> colors;
|
|
||||||
|
|
||||||
private MaterialColorList(List<MaterialColor> colors) {
|
|
||||||
this.colors = colors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MaterialColor get(int index) {
|
|
||||||
return colors.get(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size() {
|
|
||||||
return colors.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @Nullable MaterialColor getByColor(Context context, int colorValue) {
|
|
||||||
for (MaterialColor color : colors) {
|
|
||||||
if (color.represents(context, colorValue)) {
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int[] asConversationColorArray(@NonNull Context context) {
|
|
||||||
int[] results = new int[colors.size()];
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
for (MaterialColor color : colors) {
|
|
||||||
results[index++] = color.toConversationColor(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +1,10 @@
|
|||||||
package org.session.libsession.utilities.color.spans;
|
package org.session.libsession.utilities.color.spans;
|
||||||
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import android.text.TextPaint;
|
import android.text.TextPaint;
|
||||||
import android.text.style.MetricAffectingSpan;
|
import android.text.style.MetricAffectingSpan;
|
||||||
|
|
||||||
public class CenterAlignedRelativeSizeSpan extends MetricAffectingSpan {
|
public class CenterAlignedRelativeSizeSpan extends MetricAffectingSpan {
|
||||||
|
|
||||||
private final float relativeSize;
|
private final float relativeSize;
|
||||||
|
|
||||||
public CenterAlignedRelativeSizeSpan(float relativeSize) {
|
public CenterAlignedRelativeSizeSpan(float relativeSize) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user