diff --git a/res/layout/activity_home.xml b/res/layout/activity_home.xml index f6f8ba0801..26de730f77 100644 --- a/res/layout/activity_home.xml +++ b/res/layout/activity_home.xml @@ -1,6 +1,5 @@ - diff --git a/res/values/colors.xml b/res/values/colors.xml index 77bc0b198b..8cddfe0c97 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -4,6 +4,7 @@ #00F782 #FFFFFF + #FF453A #D8D8D8 #979797 #1B1B1B diff --git a/src/org/thoughtcrime/securesms/loki/redesign/activities/DisplayNameActivity.kt b/src/org/thoughtcrime/securesms/loki/redesign/activities/DisplayNameActivity.kt index e8ecadaca9..006c051579 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/activities/DisplayNameActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/activities/DisplayNameActivity.kt @@ -8,7 +8,6 @@ import kotlinx.android.synthetic.main.activity_display_name_v2.* import network.loki.messenger.R 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 @@ -54,7 +53,7 @@ class DisplayNameActivity : BaseActionBarActivity() { val servers = DatabaseFactory.getLokiThreadDatabase(this).getAllPublicChatServers() servers.forEach { publicChatAPI.setDisplayName(displayName, it) } } - val intent = Intent(this, ConversationListActivity::class.java) + val intent = Intent(this, HomeActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK push(intent) } diff --git a/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt b/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt index 8f5165a3ae..f38b535b54 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt @@ -1,12 +1,19 @@ package org.thoughtcrime.securesms.loki.redesign.activities +import android.annotation.SuppressLint import android.arch.lifecycle.Observer +import android.content.Context import android.content.Intent import android.database.Cursor +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Paint import android.os.Bundle import android.support.v4.app.LoaderManager import android.support.v4.content.Loader import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.helper.ItemTouchHelper import android.view.Menu import android.view.MenuItem import kotlinx.android.synthetic.main.activity_home.* @@ -16,11 +23,13 @@ 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.getColorWithID import org.thoughtcrime.securesms.loki.redesign.utilities.push import org.thoughtcrime.securesms.loki.redesign.views.ConversationView import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.mms.GlideRequests import org.thoughtcrime.securesms.util.TextSecurePreferences +import kotlin.math.abs class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListener { private lateinit var glide: GlideRequests @@ -43,6 +52,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe homeAdapter.conversationClickListener = this recyclerView.adapter = homeAdapter recyclerView.layoutManager = LinearLayoutManager(this) + ItemTouchHelper(SwipeCallback(this)).attachToRecyclerView(recyclerView) // 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 { @@ -120,5 +130,38 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe val intent = Intent(this, JoinPublicChatActivity::class.java) startActivity(intent) } + + private class SwipeCallback(val context: Context) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) { + + override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { + return false + } + + @SuppressLint("StaticFieldLeak") + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + // TODO: Implement + } + + override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dx: Float, dy: Float, actionState: Int, isCurrentlyActive: Boolean) { + if (actionState != ItemTouchHelper.ACTION_STATE_SWIPE) { + super.onChildDraw(c, recyclerView, viewHolder, dx, dy, actionState, isCurrentlyActive) + } else { + val itemView = viewHolder.itemView + val alpha = 1.0f - abs(dx) / viewHolder.itemView.width.toFloat() + if (dx < 0) { + val backgroundPaint = Paint() + backgroundPaint.color = context.resources.getColorWithID(R.color.destructive, context.theme) + c.drawRect(itemView.right.toFloat() - abs(dx), itemView.top.toFloat(), itemView.right.toFloat(), itemView.bottom.toFloat(), backgroundPaint) + val icon = BitmapFactory.decodeResource(context.resources, R.drawable.ic_trash_filled_32) + val iconPaint = Paint() + val left = itemView.right.toFloat() - abs(dx) + context.resources.getDimension(R.dimen.medium_spacing) + val top = itemView.top.toFloat() + (itemView.bottom.toFloat() - itemView.top.toFloat() - icon.height) / 2 + c.drawBitmap(icon, left, top, iconPaint) + } + viewHolder.itemView.alpha = alpha + viewHolder.itemView.translationX = dx + } + } + } // endregion } \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/loki/redesign/fragments/ScanQRCodeFragmentV2.kt b/src/org/thoughtcrime/securesms/loki/redesign/fragments/ScanQRCodeFragmentV2.kt index a9978a95bc..42743d5244 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/fragments/ScanQRCodeFragmentV2.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/fragments/ScanQRCodeFragmentV2.kt @@ -33,16 +33,10 @@ class ScanQRCodeFragmentV2 : Fragment() { override fun onResume() { super.onResume() - scanningThread.setScanListener(scanListener) cameraView.onResume() cameraView.setPreviewCallback(scanningThread) scanningThread.start() - } - - override fun onPause() { - super.onPause() - this.cameraView.onPause() - this.scanningThread.stopScanning() + scanningThread.setScanListener(scanListener) } override fun onConfigurationChanged(newConfiguration: Configuration) { @@ -55,4 +49,10 @@ class ScanQRCodeFragmentV2 : Fragment() { cameraView.onResume() cameraView.setPreviewCallback(scanningThread) } + + override fun onPause() { + super.onPause() + this.cameraView.onPause() + this.scanningThread.stopScanning() + } } \ No newline at end of file