Switch back to the official karmax Matrix SDK. (Many bugs still to fix on SimpleMatrix side)
parent
44d0465696
commit
0c692b5b96
Binary file not shown.
|
@ -36,7 +36,7 @@
|
|||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="10" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8_161" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
|
@ -25,7 +25,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.3.0-alpha10'
|
||||
classpath 'com.android.tools.build:gradle:3.3.0-alpha12'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath 'org.ajoberstar:grgit:2.3.0'
|
||||
//classpath 'io.sentry:sentry-android-gradle-plugin:1.7.5'
|
||||
|
@ -49,6 +49,9 @@ allprojects {
|
|||
maven {
|
||||
url 'https://kamax.io/maven/releases/'
|
||||
}
|
||||
maven {
|
||||
url 'https://kamax.io/maven/snapshots/'
|
||||
}
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#Thu Sep 13 18:55:35 CEST 2018
|
||||
#Thu Sep 27 15:27:15 CEST 2018
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
|
||||
|
|
|
@ -119,13 +119,13 @@ android {
|
|||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.60"
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0-rc02'
|
||||
kapt 'androidx.annotation:annotation:1.0.0-rc02' // AndroidX annotations
|
||||
implementation 'com.google.android.material:material:1.0.0-rc02'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
kapt 'androidx.annotation:annotation:1.0.0' // AndroidX annotations
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
|
||||
implementation 'androidx.preference:preference:1.0.0-rc02'
|
||||
implementation 'androidx.preference:preference:1.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
|
||||
|
@ -133,17 +133,18 @@ dependencies {
|
|||
androidTestImplementation "com.android.support.test:runner:1.0.2"
|
||||
androidTestImplementation "com.android.support.test:rules:1.0.2"
|
||||
wearApp project(':wear')
|
||||
implementation 'com.google.android.gms:play-services-wearable:15.0.1'
|
||||
implementation 'com.google.android.gms:play-services-wearable:16.0.0'
|
||||
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
|
||||
// External Deps
|
||||
|
||||
implementation 'com.github.Nordgedanken:matrix-java-sdk:589a88f123' // Matrix Client inofficial Patch
|
||||
//implementation 'io.kamax:matrix-java-sdk:0.0.14-3-g97005d8' // Matrix SDK
|
||||
implementation 'com.github.MTRNord:matrix-java-sdk:5191d62'
|
||||
implementation 'org.slf4j:slf4j-api:1.7.25' // Logging of matrix-sdk
|
||||
implementation 'com.github.tony19:logback-android:1.1.1-12' // Logging of matrix-sdk
|
||||
implementation 'com.github.Nordgedanken:ChatKit:7871a79779' // Chat Design
|
||||
implementation "org.jetbrains.anko:anko-commons:0.10.5" // Helpers
|
||||
implementation "org.jetbrains.anko:anko-commons:0.10.6" // Helpers
|
||||
implementation 'com.github.bumptech.glide:glide:4.8.0-SNAPSHOT' // Image loading
|
||||
kapt 'com.github.bumptech.glide:compiler:4.8.0-SNAPSHOT' // Image Loading Annotations
|
||||
implementation 'de.hdodenhof:circleimageview:2.2.0' // Round Images
|
||||
|
|
|
@ -143,35 +143,43 @@ class ChatRoom : AppCompatActivity(), NavigationView.OnNavigationItemSelectedLis
|
|||
|
||||
val imageLoader = object : ImageLoader {
|
||||
override fun loadImage(imageView: ImageView, url: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("download/" + urlTemp.host + urlTemp.path)
|
||||
urlL = path.toString()
|
||||
}
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadImage(imageView: ImageView, url: String, name: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("download/" + urlTemp.host + urlTemp.path)
|
||||
urlL = path.toString()
|
||||
}
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,12 +201,8 @@ class ChatRoom : AppCompatActivity(), NavigationView.OnNavigationItemSelectedLis
|
|||
val db = AppDatabase.getInstance(SyncProcessing.view!!)
|
||||
db.roomDao().updateAll(room!!)
|
||||
}
|
||||
Logger.d(room!!.dialogName)
|
||||
Logger.d(selected)
|
||||
val messages = room!!.getMessages()
|
||||
Logger.d(messages)
|
||||
messages.forEach {
|
||||
Logger.d(it)
|
||||
messagesListAdapter?.addToStart(it, false)
|
||||
}
|
||||
}
|
||||
|
@ -290,34 +294,32 @@ class ChatRoom : AppCompatActivity(), NavigationView.OnNavigationItemSelectedLis
|
|||
|
||||
override fun onSubmit(input: CharSequence?): Boolean {
|
||||
Logger.d("Send Message: %s", input)
|
||||
doAsync {
|
||||
val parser = Parser.builder().build()
|
||||
val document = parser.parse(input.toString())
|
||||
val renderer = HtmlRenderer.builder().build()
|
||||
val renderedMD = renderer.render(document)
|
||||
val message = Message()
|
||||
val whitelist = Whitelist.none()
|
||||
whitelist.addTags("font","del","h1","h2","h3","h4","h5","h6","blockquote","p","a","ul","ol","sup","sub","li","b","i","u","strong","em","strike","code","hr","br","div","table","thead","tbody","tr","th","td","caption","pre","span","img")
|
||||
var safeRenderedMD = Jsoup.clean(renderedMD, whitelist)
|
||||
safeRenderedMD = safeRenderedMD.trimEnd('\n')
|
||||
message.setTextHTML(safeRenderedMD)
|
||||
message.user = myself
|
||||
message.id = "sending"
|
||||
runOnUiThread {
|
||||
messagesListAdapter?.addToStart(
|
||||
message,
|
||||
true
|
||||
)
|
||||
}
|
||||
val parser = Parser.builder().build()
|
||||
val document = parser.parse(input.toString())
|
||||
val renderer = HtmlRenderer.builder().build()
|
||||
val renderedMD = renderer.render(document)
|
||||
val message = Message()
|
||||
val whitelist = Whitelist.none()
|
||||
whitelist.addTags("font","del","h1","h2","h3","h4","h5","h6","blockquote","p","a","ul","ol","sup","sub","li","b","i","u","strong","em","strike","code","hr","br","div","table","thead","tbody","tr","th","td","caption","pre","span","img")
|
||||
var safeRenderedMD = Jsoup.clean(renderedMD, whitelist)
|
||||
safeRenderedMD = safeRenderedMD.trimEnd('\n')
|
||||
message.setTextHTML(safeRenderedMD)
|
||||
message.user = myself
|
||||
message.id = "sending"
|
||||
messagesListAdapter?.addToStart(
|
||||
message,
|
||||
true
|
||||
)
|
||||
this@ChatRoom.doAsync {
|
||||
Logger.d("debug send")
|
||||
val id = rawRoom?.sendFormattedText(renderedMD, input.toString())
|
||||
message.id = id!!
|
||||
runOnUiThread {
|
||||
this@ChatRoom.runOnUiThread {
|
||||
messagesListAdapter?.update(
|
||||
"sending",
|
||||
message
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package blog.nordgedanken.simplematrix.data.demoData
|
|||
import blog.nordgedanken.simplematrix.data.view.Room
|
||||
import blog.nordgedanken.simplematrix.data.view.Message
|
||||
import blog.nordgedanken.simplematrix.data.view.User
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
class DialogsFixtures private constructor() : FixturesData() {
|
||||
|
@ -21,18 +22,20 @@ class DialogsFixtures private constructor() : FixturesData() {
|
|||
calendar.add(Calendar.DAY_OF_MONTH, -(i * i))
|
||||
calendar.add(Calendar.MINUTE, -(i * i))
|
||||
|
||||
chats.add(getDialog(i, calendar.time))
|
||||
// TODO change back to Date for old version support
|
||||
chats.add(getDialog(i, Instant.now()))
|
||||
}
|
||||
|
||||
return chats
|
||||
}
|
||||
|
||||
fun getDialog(i: Int, lastMessageCreatedAt: Date): Room {
|
||||
// TODO change back to Date for old version support
|
||||
fun getDialog(i: Int, lastMessageCreatedAt: Instant): Room {
|
||||
val users = users
|
||||
val room = Room()
|
||||
|
||||
room.id = randomId
|
||||
room.setDialogName(if (users.size> 1) groupChatTitles[users.size- 2] else users[0].name)
|
||||
room.dialogName = if (users.size> 1) groupChatTitles[users.size- 2] else users[0].name
|
||||
room.dialogPhoto = if (users.size> 1) groupChatImages[users.size - 2] else randomAvatar
|
||||
room.users = users
|
||||
room.setLastMessage(getMessage(lastMessageCreatedAt))
|
||||
|
@ -64,13 +67,14 @@ class DialogsFixtures private constructor() : FixturesData() {
|
|||
return user
|
||||
}
|
||||
|
||||
private fun getMessage(date: Date): Message {
|
||||
// TODO change back to Date for old version support
|
||||
private fun getMessage(date: Instant): Message {
|
||||
val message = Message()
|
||||
|
||||
message.id = randomMxid
|
||||
message.user = user
|
||||
message.setText(randomMessage)
|
||||
message.setCreatedAt(date)
|
||||
message.setCreatedAt(Date(date.toEpochMilli()))
|
||||
|
||||
return message
|
||||
}
|
||||
|
|
|
@ -141,32 +141,32 @@ class MatrixClient {
|
|||
doAsync {
|
||||
MatrixClient.name = mxUser?.name?.get()!!
|
||||
MatrixClient.avatar_url = mxUser.avatarUrl?.get()!!
|
||||
}
|
||||
|
||||
if (cacheFound) {
|
||||
val taggedRooms = SyncProcessing().getRoomsFromCacheRaw()
|
||||
SyncProcessing().showRooms(taggedRooms)
|
||||
if (cacheFound) {
|
||||
val taggedRooms = SyncProcessing().getRoomsFromCacheRaw()
|
||||
SyncProcessing().showRooms(taggedRooms)
|
||||
|
||||
Logger.d("finished loading cache")
|
||||
view!!.runOnUiThread {
|
||||
AppUtils.showToast(view!!, "Finished loading cache", true)
|
||||
}
|
||||
view!!.runOnUiThread {
|
||||
Logger.d("removing spinner")
|
||||
ChatsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
DirectChatsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
FavsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
|
||||
ChatsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
DirectChatsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
FavsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
view!!.findViewById<ProgressBar>(R.id.load_progress)?.visibility = View.GONE
|
||||
Logger.d("finished loading cache")
|
||||
view!!.runOnUiThread {
|
||||
AppUtils.showToast(view!!, "Finished loading cache", true)
|
||||
}
|
||||
view!!.runOnUiThread {
|
||||
Logger.d("removing spinner")
|
||||
ChatsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
DirectChatsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
FavsFragment.dialogsListView!!.smoothScrollToPosition(0)
|
||||
|
||||
ChatsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
DirectChatsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
FavsFragment.dialogsListAdapter!!.sortByLastMessageDate()
|
||||
view!!.findViewById<ProgressBar>(R.id.load_progress)?.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
cache = false
|
||||
Sentry.getContext().recordBreadcrumb(
|
||||
BreadcrumbBuilder().setMessage("Cache loading finished").build()
|
||||
)
|
||||
SyncJob.startSyncing()
|
||||
}
|
||||
cache = false
|
||||
Sentry.getContext().recordBreadcrumb(
|
||||
BreadcrumbBuilder().setMessage("Cache loading finished").build()
|
||||
)
|
||||
SyncJob.startSyncing()
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@ import io.kamax.matrix.json.InvalidJsonException
|
|||
import io.kamax.matrix.json.MatrixJsonEventFactory
|
||||
import io.kamax.matrix.json.event.*
|
||||
import org.jetbrains.anko.doAsync
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Created by MTRNord on 03.09.2018.
|
||||
|
@ -307,7 +308,7 @@ class SyncProcessing {
|
|||
message.user = users[typedMatrixEvent.sender.id]!!
|
||||
}
|
||||
|
||||
message.setCreatedAt(typedMatrixEvent.time)
|
||||
message.setCreatedAt(Date(typedMatrixEvent.time.toEpochMilli()))
|
||||
room.removeEvent(it)
|
||||
messages.add(message)
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import androidx.room.Entity
|
|||
import androidx.room.PrimaryKey
|
||||
import com.stfalcon.chatkit.commons.models.MessageContentType
|
||||
import com.stfalcon.chatkit.commons.models.IMessage
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
@Entity(tableName = "messages")
|
||||
|
@ -72,8 +73,9 @@ class Message : IMessage<String>, MessageContentType.Image<String>, MessageConte
|
|||
}
|
||||
}
|
||||
|
||||
// TODO change back to Date for old version support
|
||||
override fun getCreatedAt(): Date? {
|
||||
return createdAt
|
||||
return this.createdAt
|
||||
}
|
||||
|
||||
override fun getUser(): User {
|
||||
|
|
|
@ -61,7 +61,7 @@ class Room : IDialog<Message> {
|
|||
}
|
||||
|
||||
override fun getDialogPhoto(): String {
|
||||
return dialogPhoto!!
|
||||
return dialogPhoto
|
||||
}
|
||||
|
||||
fun setDialogPhoto(name: String) {
|
||||
|
|
|
@ -42,6 +42,8 @@ import java.net.URI
|
|||
import java.util.*
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.bumptech.glide.RequestManager
|
||||
import org.jetbrains.anko.doAsync
|
||||
import java.time.Instant
|
||||
|
||||
/**
|
||||
* Created by MTRNord on 21.07.2018.
|
||||
|
@ -71,65 +73,67 @@ class ChatsFragment : Fragment(),
|
|||
|
||||
val imageLoader = object : ImageLoader {
|
||||
override fun loadImage(imageView: ImageView, url: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (urlL.isEmpty()) {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
val requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (urlL.isEmpty()) {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadImage(imageView: ImageView, url: String, name: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -201,7 +205,7 @@ class ChatsFragment : Fragment(),
|
|||
val i = dialogsListAdapter!!.itemCount
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -(i * i))
|
||||
calendar.add(Calendar.MINUTE, -(i * i))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, calendar.time))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, Instant.now()))
|
||||
dialogsListView?.smoothScrollToPosition(0)
|
||||
}
|
||||
|
||||
|
|
|
@ -46,6 +46,8 @@ import blog.nordgedanken.simplematrix.MainActivity
|
|||
import androidx.core.view.MenuItemCompat
|
||||
import com.bumptech.glide.RequestManager
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import org.jetbrains.anko.doAsync
|
||||
import java.time.Instant
|
||||
|
||||
|
||||
/**
|
||||
|
@ -76,65 +78,71 @@ class DirectChatsFragment : Fragment(),
|
|||
|
||||
val imageLoader = object : ImageLoader {
|
||||
override fun loadImage(imageView: ImageView, url: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
if (urlL.isEmpty()) {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
val requestOptions = RequestOptions()
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
if (urlL.isEmpty()) {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadImage(imageView: ImageView, url: String, name: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -207,7 +215,7 @@ class DirectChatsFragment : Fragment(),
|
|||
val i = dialogsListAdapter!!.itemCount
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -(i * i))
|
||||
calendar.add(Calendar.MINUTE, -(i * i))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, calendar.time))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, Instant.now()))
|
||||
dialogsListView?.smoothScrollToPosition(0)
|
||||
}
|
||||
}
|
|
@ -40,7 +40,8 @@ import com.stfalcon.chatkit.dialogs.DialogsList
|
|||
import com.stfalcon.chatkit.dialogs.DialogsListAdapter
|
||||
import io.sentry.Sentry
|
||||
import io.sentry.event.BreadcrumbBuilder
|
||||
import java.net.URI
|
||||
import org.jetbrains.anko.doAsync
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
|
||||
|
@ -72,66 +73,72 @@ class FavsFragment : Fragment(),
|
|||
|
||||
val imageLoader = object : ImageLoader {
|
||||
override fun loadImage(imageView: ImageView, url: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (urlL.isEmpty()) {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
val requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (urlL.isEmpty()) {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadImage(imageView: ImageView, url: String, name: String) {
|
||||
var urlL = url
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val urlTemp = URI.create(urlL)
|
||||
val path = MatrixClient.client?.getMediaPath("thumbnail/" + urlTemp.host + urlTemp.path)
|
||||
val newPath = path?.newBuilder()
|
||||
newPath?.addQueryParameter("width", "100")
|
||||
newPath?.addQueryParameter("height", "100")
|
||||
newPath?.addQueryParameter("method", "crop")
|
||||
urlL = newPath?.build().toString()
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
} else {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
doAsync {
|
||||
val urlL = url
|
||||
var data: ByteArray? = null
|
||||
if (urlL.startsWith("mxc://")) {
|
||||
val media = MatrixClient.client?.getMedia(urlL)
|
||||
if (media?.isValid!!) data = media.data
|
||||
}
|
||||
|
||||
var requestOptions = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.dontAnimate()
|
||||
if (name.count() > 1) {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
} else {
|
||||
requestOptions = requestOptions.placeholder(NameAvatar(context!!, ""))
|
||||
requestOptions = requestOptions.error(NameAvatar(context!!, ""))
|
||||
}
|
||||
|
||||
|
||||
if (urlL.isEmpty()) {
|
||||
if (name.count() > 1) {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, name.trimStart('#')[0].toString().toUpperCase()))
|
||||
?.into(imageView)
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.load(NameAvatar(context!!, ""))
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
MatrixClient.view!!.runOnUiThread {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(data)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
glide?.setDefaultRequestOptions(requestOptions)
|
||||
?.load(urlL)
|
||||
?.into(imageView)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +210,7 @@ class FavsFragment : Fragment(),
|
|||
val i = dialogsListAdapter!!.itemCount
|
||||
calendar.add(Calendar.DAY_OF_MONTH, -(i * i))
|
||||
calendar.add(Calendar.MINUTE, -(i * i))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, calendar.time))
|
||||
dialogsListAdapter!!.addItem(0, DialogsFixtures.getDialog(i, Instant.now()))
|
||||
dialogsListView?.smoothScrollToPosition(0)
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@ import io.kamax.matrix.MatrixID
|
|||
import com.google.gson.InstanceCreator
|
||||
import io.kamax.matrix.event._MatrixEvent
|
||||
import java.lang.reflect.Type
|
||||
import java.time.Instant
|
||||
|
||||
|
||||
/**
|
||||
|
@ -50,6 +51,17 @@ class Converters {
|
|||
return date!!.time
|
||||
}
|
||||
|
||||
// Type Instant
|
||||
@TypeConverter
|
||||
fun fromInstantTimestamp(value: Long?): Instant {
|
||||
return Instant.ofEpochMilli(value!!)
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun dateToInstantTimestamp(date: Instant?): Long {
|
||||
return date!!.toEpochMilli()
|
||||
}
|
||||
|
||||
//////////////////////////
|
||||
// Type Message.Image
|
||||
@TypeConverter
|
||||
|
|
Loading…
Reference in New Issue