Partially hook up home screen logic

This commit is contained in:
Niels Andriesse
2019-12-17 15:15:13 +01:00
parent a10c056ac5
commit a2776cde0f
14 changed files with 108 additions and 19 deletions

View File

@@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.ConversationListActivity
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.util.TextSecurePreferences
import org.whispersystems.signalservice.api.crypto.ProfileCipher
@@ -54,6 +55,6 @@ class DisplayNameActivity : BaseActionBarActivity() {
servers.forEach { publicChatAPI.setDisplayName(displayName, it) }
}
startActivity(Intent(this, ConversationListActivity::class.java))
finish()
push(intent)
}
}

View File

@@ -1,15 +1,21 @@
package org.thoughtcrime.securesms.loki.redesign.activities
import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_home.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.conversation.ConversationActivity
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
class HomeActivity : PassphraseRequiredActionBarActivity {
class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListener {
constructor() : super()
@@ -21,8 +27,12 @@ class HomeActivity : PassphraseRequiredActionBarActivity {
supportActionBar!!.title = "Messages"
// Set up recycler view
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)
// Set up new conversation button
newConversationButton.setOnClickListener { createPrivateChat() }
// Set up public chats and RSS feeds if needed
if (TextSecurePreferences.getLocalNumber(this) != null) {
val application = ApplicationContext.getInstance(this)
@@ -32,4 +42,29 @@ class HomeActivity : PassphraseRequiredActionBarActivity {
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)
}
}

View File

@@ -5,6 +5,7 @@ import android.os.Bundle
import kotlinx.android.synthetic.main.activity_landing.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.loki.redesign.utilities.push
import org.thoughtcrime.securesms.loki.redesign.utilities.setUpActionBarSessionLogo
class LandingActivity : BaseActionBarActivity() {
@@ -20,11 +21,11 @@ class LandingActivity : BaseActionBarActivity() {
private fun register() {
val intent = Intent(this, RegisterActivity::class.java)
startActivity(intent)
push(intent)
}
private fun restore() {
val intent = Intent(this, RestoreActivity::class.java)
startActivity(intent)
push(intent)
}
}

View File

@@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.database.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
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.util.Base64
import org.thoughtcrime.securesms.util.Hex
@@ -103,7 +104,7 @@ class RegisterActivity : BaseActionBarActivity() {
true, System.currentTimeMillis(), true)
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
val intent = Intent(this, DisplayNameActivity::class.java)
startActivity(intent)
push(intent)
}
private fun copyPublicKey() {

View File

@@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.database.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
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.util.Base64
import org.thoughtcrime.securesms.util.Hex
@@ -92,7 +93,7 @@ class RestoreActivity : BaseActionBarActivity() {
true, System.currentTimeMillis(), true)
TextSecurePreferences.setLocalNumber(this, userHexEncodedPublicKey)
val intent = Intent(this, DisplayNameActivity::class.java)
startActivity(intent)
push(intent)
} catch (e: Exception) {
val message = if (e is MnemonicCodec.DecodingError) e.description else MnemonicCodec.DecodingError.Generic.description
return Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

View File

@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.loki.redesign.utilities
import android.content.Intent
import android.support.v7.app.ActionBar
import android.support.v7.app.AppCompatActivity
import android.view.Gravity
@@ -18,4 +19,9 @@ fun AppCompatActivity.setUpActionBarSessionLogo() {
val logoImageViewContainerLayoutParams = ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT)
supportActionBar!!.setCustomView(logoImageViewContainer, logoImageViewContainerLayoutParams)
supportActionBar!!.setDisplayShowCustomEnabled(true)
}
fun AppCompatActivity.push(intent: Intent) {
startActivity(intent)
overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out)
}

View File

@@ -1,14 +1,22 @@
package org.thoughtcrime.securesms.loki.redesign.views
import android.content.Context
import android.graphics.Typeface
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import kotlinx.android.synthetic.main.conversation_view.view.*
import network.loki.messenger.R
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 {
var thread: ThreadRecord? = null
// region Lifecycle
companion object {
@@ -29,7 +37,16 @@ class ConversationView : LinearLayout {
// region Updating
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
}

View File

@@ -10,7 +10,6 @@ import android.widget.ScrollView
import kotlinx.android.synthetic.main.fake_chat_content_view.view.*
import network.loki.messenger.R
class FakeChatView : ScrollView {
// region Settings