diff --git a/app/build.gradle b/app/build.gradle index 8b453260bb..73a4e24d03 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -158,8 +158,8 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.2' } -def canonicalVersionCode = 161 -def canonicalVersionName = "1.10.2" +def canonicalVersionCode = 163 +def canonicalVersionName = "1.10.4" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2d8473b849..972ec30be1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -254,6 +254,10 @@ android:name="android.support.PARENT_ACTIVITY" android:value="org.thoughtcrime.securesms.loki.activities.HomeActivity" /> + { 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 (messageRecord.isMms()) { DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId()); @@ -569,7 +569,7 @@ public class ConversationFragment extends Fragment .deleteMessage(serverId, openGroupChat.getRoom(), openGroupChat.getServer()) .success(l -> { 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)) { MessagingModuleConfiguration.shared.getMessageDataProvider().deleteMessage(messageRecord.id, !messageRecord.isMms()); break; diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/OpenGroupGuidelinesActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/OpenGroupGuidelinesActivity.kt new file mode 100644 index 0000000000..2a9ebe5491 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/OpenGroupGuidelinesActivity.kt @@ -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 +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt index 85a66b159c..83dc565117 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.loki.database import android.content.ContentValues import android.content.Context +import net.sqlcipher.database.SQLiteDatabase.CONFLICT_REPLACE import org.thoughtcrime.securesms.database.Database import org.thoughtcrime.securesms.database.DatabaseFactory 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) { val database = databaseHelper.writableDatabase - val contentValues = ContentValues(2) + val contentValues = ContentValues(3) contentValues.put(Companion.messageID, messageID) contentValues.put(Companion.serverID, serverID) 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 { @@ -114,11 +115,11 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab fun setOriginalThreadID(messageID: Long, serverID: Long, threadID: Long) { val database = databaseHelper.writableDatabase - val contentValues = ContentValues(2) + val contentValues = ContentValues(3) contentValues.put(Companion.messageID, messageID) contentValues.put(Companion.serverID, serverID) 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? { diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt index cf8c747638..66d7263747 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt @@ -35,11 +35,10 @@ object OpenGroupUtilities { val groupInfo = OpenGroupAPIV2.getInfo(room,server).get() val application = ApplicationContext.getInstance(context) - val group = application.publicChatManager.addChat(server, room, groupInfo, publicKey) - val storage = MessagingModuleConfiguration.shared.storage storage.removeLastDeletionServerId(room, server) storage.removeLastMessageServerId(room, server) + val group = application.publicChatManager.addChat(server, room, groupInfo, publicKey) return group } diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/OpenGroupGuidelinesView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/OpenGroupGuidelinesView.kt new file mode 100644 index 0000000000..d29460866c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/views/OpenGroupGuidelinesView.kt @@ -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) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_open_group_guidelines.xml b/app/src/main/res/layout/activity_open_group_guidelines.xml new file mode 100644 index 0000000000..34d03a8f89 --- /dev/null +++ b/app/src/main/res/layout/activity_open_group_guidelines.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/conversation_activity.xml b/app/src/main/res/layout/conversation_activity.xml index 0b9ff3d077..ba9f7f27e1 100644 --- a/app/src/main/res/layout/conversation_activity.xml +++ b/app/src/main/res/layout/conversation_activity.xml @@ -134,6 +134,12 @@ android:background="?android:dividerHorizontal" android:elevation="1dp" /> + + + + + + + + + + + + + + + + + + +