Commit a7409d78 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Implement blur extension function to Bitmap and add further details to the ui...

Implement blur extension function to Bitmap and add further details to the ui for the user details screen
parent 33f99bec
...@@ -41,14 +41,14 @@ class UserDetailsPresenter @Inject constructor( ...@@ -41,14 +41,14 @@ class UserDetailsPresenter @Inject constructor(
val chatRoom: ChatRoom? = if (localDMs.isEmpty()) { val chatRoom: ChatRoom? = if (localDMs.isEmpty()) {
val query = u.username!! val query = u.username!!
val result = retryIO("spotlight($query)") { val spotlightResult = retryIO("spotlight($query)") {
client.spotlight(query = query) client.spotlight(query = query)
} }
val userMatch = result.users.firstOrNull() val matchFromSpotlight = spotlightResult.users.firstOrNull()
if (userMatch != null) { if (matchFromSpotlight != null) {
with (userMatch) { with (matchFromSpotlight) {
ChatRoom( ChatRoom(
id = id, id = id,
type = roomTypeOf(RoomType.DIRECT_MESSAGE), type = roomTypeOf(RoomType.DIRECT_MESSAGE),
......
...@@ -2,18 +2,26 @@ package chat.rocket.android.userdetails.ui ...@@ -2,18 +2,26 @@ package chat.rocket.android.userdetails.ui
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.drawable.BitmapDrawable
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import blurred
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.chatroom.ui.chatRoomIntent import chat.rocket.android.chatroom.ui.chatRoomIntent
import chat.rocket.android.emoji.internal.GlideApp import chat.rocket.android.emoji.internal.GlideApp
import chat.rocket.android.userdetails.presentation.UserDetailsPresenter import chat.rocket.android.userdetails.presentation.UserDetailsPresenter
import chat.rocket.android.userdetails.presentation.UserDetailsView import chat.rocket.android.userdetails.presentation.UserDetailsView
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extension.orFalse import chat.rocket.android.util.extension.orFalse
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
import chat.rocket.core.model.ChatRoom import chat.rocket.core.model.ChatRoom
import com.bumptech.glide.Glide
import com.bumptech.glide.Priority
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.CenterInside
import com.bumptech.glide.load.resource.bitmap.FitCenter
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import dagger.android.AndroidInjection import dagger.android.AndroidInjection
...@@ -21,6 +29,10 @@ import dagger.android.AndroidInjector ...@@ -21,6 +29,10 @@ import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector import dagger.android.DispatchingAndroidInjector
import dagger.android.support.HasSupportFragmentInjector import dagger.android.support.HasSupportFragmentInjector
import kotlinx.android.synthetic.main.activity_user_details.* import kotlinx.android.synthetic.main.activity_user_details.*
import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.launch
import kotlinx.coroutines.experimental.withContext
import org.threeten.bp.OffsetDateTime import org.threeten.bp.OffsetDateTime
import org.threeten.bp.ZoneId import org.threeten.bp.ZoneId
import org.threeten.bp.ZoneOffset import org.threeten.bp.ZoneOffset
...@@ -73,11 +85,28 @@ class UserDetailsActivity : AppCompatActivity(), UserDetailsView, HasSupportFrag ...@@ -73,11 +85,28 @@ class UserDetailsActivity : AppCompatActivity(), UserDetailsView, HasSupportFrag
text_view_name.text = name text_view_name.text = name
text_view_username.text = username text_view_username.text = username
text_view_status.text = status.capitalize() text_view_status.text = status.capitalize()
GlideApp.with(this)
.load(avatarUrl) launch(UI) {
.centerCrop() val image = withContext(CommonPool) {
.apply(RequestOptions().transform(RoundedCorners(25))) val requestOptions = RequestOptions()
.into(image_view_avatar) .priority(Priority.IMMEDIATE)
.transforms(CenterInside(), FitCenter())
return@withContext GlideApp.with(this@UserDetailsActivity)
.asBitmap()
.load(avatarUrl)
.apply(requestOptions)
.submit()
.get()
}
toolbar.background = BitmapDrawable(resources, image.blurred(this@UserDetailsActivity))
GlideApp.with(this@UserDetailsActivity)
.asBitmap()
.transforms(RoundedCorners(25), CenterCrop())
.load(avatarUrl)
.into(image_view_avatar)
}
utcOffset?.let { utcOffset?.let {
val offsetLong = it.roundToLong() val offsetLong = it.roundToLong()
...@@ -99,6 +128,7 @@ class UserDetailsActivity : AppCompatActivity(), UserDetailsView, HasSupportFrag ...@@ -99,6 +128,7 @@ class UserDetailsActivity : AppCompatActivity(), UserDetailsView, HasSupportFrag
private fun toDirectMessage(chatRoom: ChatRoom?) { private fun toDirectMessage(chatRoom: ChatRoom?) {
chatRoom?.let { c -> chatRoom?.let { c ->
finish()
startActivity( startActivity(
chatRoomIntent( chatRoomIntent(
chatRoomId = c.id, chatRoomId = c.id,
......
import android.content.Context
import android.graphics.Bitmap
import android.renderscript.Allocation
import android.renderscript.Element
import android.renderscript.RenderScript
import android.renderscript.ScriptIntrinsicBlur
fun Bitmap.blurred(context: Context, intensity: Float = 25f): Bitmap {
if (intensity <= 0 || intensity > 25) {
throw IllegalStateException("Intensity out of range (0 < intensity <= 25).")
}
val bitmap = copy(config, true)
val rs = RenderScript.create(context)
val input = Allocation.createFromBitmap(rs, this, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT)
val output = Allocation.createTyped(rs, input.type)
val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs))
script.setRadius(intensity)
script.setInput(input)
script.forEach(output)
output.copyTo(bitmap)
return bitmap
}
...@@ -118,4 +118,4 @@ fun Menu.toList(): List<MenuItem> { ...@@ -118,4 +118,4 @@ fun Menu.toList(): List<MenuItem> {
val menuItems = ArrayList<MenuItem>(this.size()) val menuItems = ArrayList<MenuItem>(this.size())
(0 until this.size()).mapTo(menuItems) { this.getItem(it) } (0 until this.size()).mapTo(menuItems) { this.getItem(it) }
return menuItems return menuItems
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<padding
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp" />
<solid android:color="@android:color/white" />
<corners android:radius="25px" />
</shape>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment