Switch back to the official karmax Matrix SDK. (Many bugs still to fix on SimpleMatrix side)

18-refactoring
MTRNord 2018-09-28 19:40:14 +02:00
parent 44d0465696
commit 0c692b5b96
No known key found for this signature in database
GPG Key ID: E5B89311FAB91B9F
16 changed files with 301 additions and 269 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -61,7 +61,7 @@ class Room : IDialog<Message> {
}
override fun getDialogPhoto(): String {
return dialogPhoto!!
return dialogPhoto
}
fun setDialogPhoto(name: String) {

View File

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

View File

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

View File

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

View File

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