mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-16 21:51:26 +00:00
Partially hook up home screen logic
This commit is contained in:
parent
a10c056ac5
commit
a2776cde0f
@ -1,7 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
<set
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:interpolator="@android:anim/decelerate_interpolator">
|
android:interpolator="@android:anim/decelerate_interpolator">
|
||||||
|
|
||||||
<scale
|
<scale
|
||||||
android:duration="150"
|
android:duration="150"
|
||||||
android:fromXScale="1.0"
|
android:fromXScale="1.0"
|
||||||
@ -10,8 +12,10 @@
|
|||||||
android:toYScale="0.85"
|
android:toYScale="0.85"
|
||||||
android:pivotX="50%"
|
android:pivotX="50%"
|
||||||
android:pivotY="50%" />
|
android:pivotY="50%" />
|
||||||
|
|
||||||
<alpha
|
<alpha
|
||||||
android:duration="150"
|
android:duration="150"
|
||||||
android:fromAlpha="1.0"
|
android:fromAlpha="1.0"
|
||||||
android:toAlpha="0.6" />
|
android:toAlpha="0.6" />
|
||||||
|
|
||||||
</set>
|
</set>
|
@ -1,9 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
<set
|
||||||
android:interpolator="@android:anim/decelerate_interpolator">
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator">
|
||||||
|
|
||||||
<translate
|
<translate
|
||||||
android:duration="250"
|
android:duration="150"
|
||||||
android:fromXDelta="-100%"
|
android:fromXDelta="-100%"
|
||||||
android:toXDelta="0%" />
|
android:toXDelta="0%" />
|
||||||
|
|
||||||
</set>
|
</set>
|
@ -1,9 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
<set
|
||||||
android:interpolator="@android:anim/decelerate_interpolator">
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:anim/decelerate_interpolator">
|
||||||
|
|
||||||
<translate
|
<translate
|
||||||
android:duration="250"
|
android:duration="150"
|
||||||
android:fromXDelta="100%"
|
android:fromXDelta="100%"
|
||||||
android:toXDelta="0%" />
|
android:toXDelta="0%" />
|
||||||
|
|
||||||
</set>
|
</set>
|
9
res/drawable/conversation_view_background.xml
Normal file
9
res/drawable/conversation_view_background.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ripple
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:color="@color/cell_selected">
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<color android:color="@color/cell_background" />
|
||||||
|
</item>
|
||||||
|
</ripple>
|
@ -25,6 +25,7 @@
|
|||||||
android:background="@drawable/new_conversation_button_background" />
|
android:background="@drawable/new_conversation_button_background" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
|
android:id="@+id/newConversationButton"
|
||||||
android:layout_width="@dimen/new_conversation_button_size"
|
android:layout_width="@dimen/new_conversation_button_size"
|
||||||
android:layout_height="@dimen/new_conversation_button_size"
|
android:layout_height="@dimen/new_conversation_button_size"
|
||||||
android:layout_centerInParent="true"
|
android:layout_centerInParent="true"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/cell_background"
|
android:background="@drawable/conversation_view_background"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical">
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
@ -31,12 +31,15 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/displayNameTextView"
|
android:id="@+id/displayNameTextView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"
|
||||||
android:textSize="@dimen/medium_font_size"
|
android:textSize="@dimen/medium_font_size"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@color/text"
|
android:textColor="@color/text"
|
||||||
@ -52,6 +55,8 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="@dimen/medium_spacing"
|
android:layout_marginLeft="@dimen/medium_spacing"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"
|
||||||
android:textSize="@dimen/small_font_size"
|
android:textSize="@dimen/small_font_size"
|
||||||
android:textColor="@color/text"
|
android:textColor="@color/text"
|
||||||
android:alpha="0.4"
|
android:alpha="0.4"
|
||||||
@ -62,12 +67,15 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/snippetTextView"
|
android:id="@+id/snippetTextView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"
|
||||||
android:textSize="@dimen/medium_font_size"
|
android:textSize="@dimen/medium_font_size"
|
||||||
android:textColor="@color/text"
|
android:textColor="@color/text"
|
||||||
android:text="Sorry, gotta go fight crime again" />
|
android:text="Sorry, gotta go fight crime again" />
|
||||||
|
@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.ApplicationContext
|
|||||||
import org.thoughtcrime.securesms.BaseActionBarActivity
|
import org.thoughtcrime.securesms.BaseActionBarActivity
|
||||||
import org.thoughtcrime.securesms.ConversationListActivity
|
import org.thoughtcrime.securesms.ConversationListActivity
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
||||||
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||||
import org.whispersystems.signalservice.api.crypto.ProfileCipher
|
import org.whispersystems.signalservice.api.crypto.ProfileCipher
|
||||||
@ -54,6 +55,6 @@ class DisplayNameActivity : BaseActionBarActivity() {
|
|||||||
servers.forEach { publicChatAPI.setDisplayName(displayName, it) }
|
servers.forEach { publicChatAPI.setDisplayName(displayName, it) }
|
||||||
}
|
}
|
||||||
startActivity(Intent(this, ConversationListActivity::class.java))
|
startActivity(Intent(this, ConversationListActivity::class.java))
|
||||||
finish()
|
push(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,15 +1,21 @@
|
|||||||
package org.thoughtcrime.securesms.loki.redesign.activities
|
package org.thoughtcrime.securesms.loki.redesign.activities
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v7.widget.LinearLayoutManager
|
import android.support.v7.widget.LinearLayoutManager
|
||||||
import kotlinx.android.synthetic.main.activity_home.*
|
import kotlinx.android.synthetic.main.activity_home.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import org.thoughtcrime.securesms.ApplicationContext
|
import org.thoughtcrime.securesms.ApplicationContext
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
||||||
|
import org.thoughtcrime.securesms.conversation.ConversationActivity
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
||||||
|
import org.thoughtcrime.securesms.loki.NewConversationActivity
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.views.ConversationView
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||||
|
|
||||||
class HomeActivity : PassphraseRequiredActionBarActivity {
|
class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListener {
|
||||||
|
|
||||||
constructor() : super()
|
constructor() : super()
|
||||||
|
|
||||||
@ -21,8 +27,12 @@ class HomeActivity : PassphraseRequiredActionBarActivity {
|
|||||||
supportActionBar!!.title = "Messages"
|
supportActionBar!!.title = "Messages"
|
||||||
// Set up recycler view
|
// Set up recycler view
|
||||||
val cursor = DatabaseFactory.getThreadDatabase(this).conversationList
|
val cursor = DatabaseFactory.getThreadDatabase(this).conversationList
|
||||||
recyclerView.adapter = ConversationAdapter(this, cursor)
|
val conversationAdapter = ConversationAdapter(this, cursor)
|
||||||
|
conversationAdapter.conversationClickListener = this
|
||||||
|
recyclerView.adapter = conversationAdapter
|
||||||
recyclerView.layoutManager = LinearLayoutManager(this)
|
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||||
|
// Set up new conversation button
|
||||||
|
newConversationButton.setOnClickListener { createPrivateChat() }
|
||||||
// Set up public chats and RSS feeds if needed
|
// Set up public chats and RSS feeds if needed
|
||||||
if (TextSecurePreferences.getLocalNumber(this) != null) {
|
if (TextSecurePreferences.getLocalNumber(this) != null) {
|
||||||
val application = ApplicationContext.getInstance(this)
|
val application = ApplicationContext.getInstance(this)
|
||||||
@ -32,4 +42,29 @@ class HomeActivity : PassphraseRequiredActionBarActivity {
|
|||||||
application.startRSSFeedPollersIfNeeded()
|
application.startRSSFeedPollersIfNeeded()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onConversationClick(view: ConversationView) {
|
||||||
|
val thread = view.thread ?: return
|
||||||
|
openConversation(thread)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLongConversationClick(view: ConversationView) {
|
||||||
|
// TODO: Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openConversation(thread: ThreadRecord) {
|
||||||
|
val intent = Intent(this, ConversationActivity::class.java)
|
||||||
|
intent.putExtra(ConversationActivity.ADDRESS_EXTRA, thread.recipient.getAddress())
|
||||||
|
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, thread.threadId)
|
||||||
|
intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, thread.distributionType)
|
||||||
|
intent.putExtra(ConversationActivity.TIMING_EXTRA, System.currentTimeMillis())
|
||||||
|
intent.putExtra(ConversationActivity.LAST_SEEN_EXTRA, thread.lastSeen)
|
||||||
|
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, -1)
|
||||||
|
push(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createPrivateChat() {
|
||||||
|
val intent = Intent(this, NewConversationActivity::class.java)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
|||||||
import kotlinx.android.synthetic.main.activity_landing.*
|
import kotlinx.android.synthetic.main.activity_landing.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import org.thoughtcrime.securesms.BaseActionBarActivity
|
import org.thoughtcrime.securesms.BaseActionBarActivity
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
||||||
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
||||||
|
|
||||||
class LandingActivity : BaseActionBarActivity() {
|
class LandingActivity : BaseActionBarActivity() {
|
||||||
@ -20,11 +21,11 @@ class LandingActivity : BaseActionBarActivity() {
|
|||||||
|
|
||||||
private fun register() {
|
private fun register() {
|
||||||
val intent = Intent(this, RegisterActivity::class.java)
|
val intent = Intent(this, RegisterActivity::class.java)
|
||||||
startActivity(intent)
|
push(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun restore() {
|
private fun restore() {
|
||||||
val intent = Intent(this, RestoreActivity::class.java)
|
val intent = Intent(this, RestoreActivity::class.java)
|
||||||
startActivity(intent)
|
push(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
|||||||
import org.thoughtcrime.securesms.database.Address
|
import org.thoughtcrime.securesms.database.Address
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
import org.thoughtcrime.securesms.database.IdentityDatabase
|
import org.thoughtcrime.securesms.database.IdentityDatabase
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
||||||
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
||||||
import org.thoughtcrime.securesms.util.Base64
|
import org.thoughtcrime.securesms.util.Base64
|
||||||
import org.thoughtcrime.securesms.util.Hex
|
import org.thoughtcrime.securesms.util.Hex
|
||||||
@ -103,7 +104,7 @@ class RegisterActivity : BaseActionBarActivity() {
|
|||||||
true, System.currentTimeMillis(), true)
|
true, System.currentTimeMillis(), true)
|
||||||
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
|
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
|
||||||
val intent = Intent(this, DisplayNameActivity::class.java)
|
val intent = Intent(this, DisplayNameActivity::class.java)
|
||||||
startActivity(intent)
|
push(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyPublicKey() {
|
private fun copyPublicKey() {
|
||||||
|
@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
|||||||
import org.thoughtcrime.securesms.database.Address
|
import org.thoughtcrime.securesms.database.Address
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
import org.thoughtcrime.securesms.database.IdentityDatabase
|
import org.thoughtcrime.securesms.database.IdentityDatabase
|
||||||
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
||||||
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
|
||||||
import org.thoughtcrime.securesms.util.Base64
|
import org.thoughtcrime.securesms.util.Base64
|
||||||
import org.thoughtcrime.securesms.util.Hex
|
import org.thoughtcrime.securesms.util.Hex
|
||||||
@ -92,7 +93,7 @@ class RestoreActivity : BaseActionBarActivity() {
|
|||||||
true, System.currentTimeMillis(), true)
|
true, System.currentTimeMillis(), true)
|
||||||
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
|
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
|
||||||
val intent = Intent(this, DisplayNameActivity::class.java)
|
val intent = Intent(this, DisplayNameActivity::class.java)
|
||||||
startActivity(intent)
|
push(intent)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
val message = if (e is MnemonicCodec.DecodingError) e.description else MnemonicCodec.DecodingError.Generic.description
|
val message = if (e is MnemonicCodec.DecodingError) e.description else MnemonicCodec.DecodingError.Generic.description
|
||||||
return Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
return Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.thoughtcrime.securesms.loki.redesign.utilities
|
package org.thoughtcrime.securesms.loki.redesign.utilities
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.support.v7.app.ActionBar
|
import android.support.v7.app.ActionBar
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
@ -19,3 +20,8 @@ fun AppCompatActivity.setUpActionBarSessionLogo() {
|
|||||||
supportActionBar!!.setCustomView(logoImageViewContainer, logoImageViewContainerLayoutParams)
|
supportActionBar!!.setCustomView(logoImageViewContainer, logoImageViewContainerLayoutParams)
|
||||||
supportActionBar!!.setDisplayShowCustomEnabled(true)
|
supportActionBar!!.setDisplayShowCustomEnabled(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun AppCompatActivity.push(intent: Intent) {
|
||||||
|
startActivity(intent)
|
||||||
|
overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out)
|
||||||
|
}
|
@ -1,14 +1,22 @@
|
|||||||
package org.thoughtcrime.securesms.loki.redesign.views
|
package org.thoughtcrime.securesms.loki.redesign.views
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.graphics.Typeface
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
|
import kotlinx.android.synthetic.main.conversation_view.view.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
||||||
|
import org.thoughtcrime.securesms.loki.LokiAPIUtilities.populateUserHexEncodedPublicKeyCacheIfNeeded
|
||||||
|
import org.thoughtcrime.securesms.loki.MentionUtilities.highlightMentions
|
||||||
|
import org.thoughtcrime.securesms.util.DateUtils
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class ConversationView : LinearLayout {
|
class ConversationView : LinearLayout {
|
||||||
|
var thread: ThreadRecord? = null
|
||||||
|
|
||||||
// region Lifecycle
|
// region Lifecycle
|
||||||
companion object {
|
companion object {
|
||||||
@ -29,7 +37,16 @@ class ConversationView : LinearLayout {
|
|||||||
|
|
||||||
// region Updating
|
// region Updating
|
||||||
fun bind(thread: ThreadRecord) {
|
fun bind(thread: ThreadRecord) {
|
||||||
|
this.thread = thread
|
||||||
|
populateUserHexEncodedPublicKeyCacheIfNeeded(thread.threadId, context) // FIXME: This is a terrible place to do this
|
||||||
|
unreadMessagesIndicatorView.visibility = if (thread.unreadCount > 0) View.VISIBLE else View.INVISIBLE
|
||||||
|
val senderDisplayName = if (thread.recipient.isLocalNumber) context.getString(R.string.note_to_self) else thread.recipient.name
|
||||||
|
displayNameTextView.text = senderDisplayName
|
||||||
|
timestampTextView.text = DateUtils.getBriefRelativeTimeSpanString(context, Locale.getDefault(), thread.date)
|
||||||
|
val rawSnippet = thread.getDisplayBody(context)
|
||||||
|
val snippet = highlightMentions(rawSnippet, thread.threadId, context)
|
||||||
|
snippetTextView.text = snippet
|
||||||
|
snippetTextView.typeface = if (thread.unreadCount > 0) Typeface.DEFAULT_BOLD else Typeface.DEFAULT
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
@ -10,7 +10,6 @@ import android.widget.ScrollView
|
|||||||
import kotlinx.android.synthetic.main.fake_chat_content_view.view.*
|
import kotlinx.android.synthetic.main.fake_chat_content_view.view.*
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
|
|
||||||
|
|
||||||
class FakeChatView : ScrollView {
|
class FakeChatView : ScrollView {
|
||||||
|
|
||||||
// region Settings
|
// region Settings
|
||||||
|
Loading…
x
Reference in New Issue
Block a user