2019-12-17 14:27:59 +01:00
|
|
|
package org.thoughtcrime.securesms.loki.redesign.activities
|
|
|
|
|
2019-12-19 11:15:58 +01:00
|
|
|
import android.arch.lifecycle.Observer
|
2019-12-17 15:15:13 +01:00
|
|
|
import android.content.Intent
|
2019-12-19 11:49:23 +01:00
|
|
|
import android.database.Cursor
|
2019-12-17 14:27:59 +01:00
|
|
|
import android.os.Bundle
|
2019-12-19 11:49:23 +01:00
|
|
|
import android.support.v4.app.LoaderManager
|
|
|
|
import android.support.v4.content.Loader
|
2019-12-17 14:27:59 +01:00
|
|
|
import android.support.v7.widget.LinearLayoutManager
|
2019-12-18 15:25:23 +01:00
|
|
|
import android.view.Menu
|
|
|
|
import android.view.MenuItem
|
2019-12-17 14:27:59 +01:00
|
|
|
import kotlinx.android.synthetic.main.activity_home.*
|
|
|
|
import network.loki.messenger.R
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext
|
|
|
|
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
2019-12-17 15:15:13 +01:00
|
|
|
import org.thoughtcrime.securesms.conversation.ConversationActivity
|
2019-12-17 14:27:59 +01:00
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
2019-12-17 15:15:13 +01:00
|
|
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
|
|
|
import org.thoughtcrime.securesms.loki.redesign.utilities.push
|
|
|
|
import org.thoughtcrime.securesms.loki.redesign.views.ConversationView
|
2019-12-19 11:15:58 +01:00
|
|
|
import org.thoughtcrime.securesms.mms.GlideApp
|
|
|
|
import org.thoughtcrime.securesms.mms.GlideRequests
|
2019-12-17 14:27:59 +01:00
|
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
|
|
|
|
2019-12-17 15:15:13 +01:00
|
|
|
class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListener {
|
2019-12-19 11:15:58 +01:00
|
|
|
private lateinit var glide: GlideRequests
|
2019-12-17 14:27:59 +01:00
|
|
|
|
2019-12-18 11:36:09 +01:00
|
|
|
// region Lifecycle
|
2019-12-17 14:27:59 +01:00
|
|
|
constructor() : super()
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
|
|
|
|
super.onCreate(savedInstanceState, isReady)
|
|
|
|
// Set content view
|
|
|
|
setContentView(R.layout.activity_home)
|
|
|
|
// Set title
|
|
|
|
supportActionBar!!.title = "Messages"
|
2019-12-19 11:15:58 +01:00
|
|
|
// Set up Glide
|
|
|
|
glide = GlideApp.with(this)
|
2019-12-17 14:27:59 +01:00
|
|
|
// Set up recycler view
|
|
|
|
val cursor = DatabaseFactory.getThreadDatabase(this).conversationList
|
2019-12-19 11:15:58 +01:00
|
|
|
val homeAdapter = HomeAdapter(this, cursor)
|
|
|
|
homeAdapter.glide = glide
|
|
|
|
homeAdapter.conversationClickListener = this
|
|
|
|
recyclerView.adapter = homeAdapter
|
2019-12-17 14:27:59 +01:00
|
|
|
recyclerView.layoutManager = LinearLayoutManager(this)
|
2019-12-19 11:49:23 +01:00
|
|
|
// This is a workaround for the fact that CursorRecyclerViewAdapter doesn't actually auto-update (even though it says it will)
|
|
|
|
LoaderManager.getInstance(this).restartLoader(0, null, object : LoaderManager.LoaderCallbacks<Cursor> {
|
|
|
|
|
|
|
|
override fun onCreateLoader(id: Int, bundle: Bundle?): Loader<Cursor> {
|
|
|
|
return HomeLoader(this@HomeActivity)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onLoadFinished(loader: Loader<Cursor>, cursor: Cursor?) {
|
|
|
|
homeAdapter.changeCursor(cursor)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onLoaderReset(cursor: Loader<Cursor>) {
|
|
|
|
homeAdapter.changeCursor(null)
|
|
|
|
}
|
|
|
|
})
|
2019-12-17 15:15:13 +01:00
|
|
|
// Set up new conversation button
|
|
|
|
newConversationButton.setOnClickListener { createPrivateChat() }
|
2019-12-19 11:15:58 +01:00
|
|
|
// Set up typing observer
|
2019-12-19 11:49:23 +01:00
|
|
|
ApplicationContext.getInstance(this).typingStatusRepository.typingThreads.observe(this, Observer<Set<Long>> { threadIDs ->
|
|
|
|
val adapter = recyclerView.adapter as HomeAdapter
|
|
|
|
adapter.typingThreadIDs = threadIDs ?: setOf()
|
2019-12-19 11:15:58 +01:00
|
|
|
})
|
2019-12-17 14:27:59 +01:00
|
|
|
// Set up public chats and RSS feeds if needed
|
|
|
|
if (TextSecurePreferences.getLocalNumber(this) != null) {
|
|
|
|
val application = ApplicationContext.getInstance(this)
|
|
|
|
application.createDefaultPublicChatsIfNeeded()
|
|
|
|
application.createRSSFeedsIfNeeded()
|
|
|
|
application.lokiPublicChatManager.startPollersIfNeeded()
|
|
|
|
application.startRSSFeedPollersIfNeeded()
|
|
|
|
}
|
|
|
|
}
|
2019-12-18 15:25:23 +01:00
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
|
|
|
menuInflater.inflate(R.menu.menu_home, menu)
|
|
|
|
return true
|
|
|
|
}
|
2019-12-18 11:36:09 +01:00
|
|
|
// endregion
|
2019-12-17 15:15:13 +01:00
|
|
|
|
2019-12-18 15:25:23 +01:00
|
|
|
// region Interaction
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
2019-12-19 11:49:23 +01:00
|
|
|
val id = item.itemId
|
2019-12-18 15:25:23 +01:00
|
|
|
when (id) {
|
|
|
|
R.id.joinPublicChatItem -> joinPublicChat()
|
|
|
|
else -> { /* Do nothing */ }
|
|
|
|
}
|
|
|
|
return super.onOptionsItemSelected(item)
|
|
|
|
}
|
|
|
|
|
2019-12-17 15:15:13 +01:00
|
|
|
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() {
|
2019-12-18 15:25:23 +01:00
|
|
|
val intent = Intent(this, CreatePrivateChatActivity::class.java)
|
2019-12-17 15:15:13 +01:00
|
|
|
startActivity(intent)
|
|
|
|
}
|
2019-12-18 15:25:23 +01:00
|
|
|
|
|
|
|
private fun joinPublicChat() {
|
|
|
|
val intent = Intent(this, JoinPublicChatActivity::class.java)
|
|
|
|
startActivity(intent)
|
|
|
|
}
|
|
|
|
// endregion
|
2019-12-17 14:27:59 +01:00
|
|
|
}
|