Minor code improvements and bug fixes
This commit is contained in:
parent
cc18f34161
commit
415107a6c8
@ -58,12 +58,11 @@ class AddressDetailFragment : Fragment() {
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.address, menu)
|
||||
|
||||
val activity = activity
|
||||
Drawables.addIcon(activity, menu, R.id.write_message, GoogleMaterial.Icon.gmd_mail)
|
||||
Drawables.addIcon(activity, menu, R.id.share, GoogleMaterial.Icon.gmd_share)
|
||||
Drawables.addIcon(activity, menu, R.id.delete, GoogleMaterial.Icon.gmd_delete)
|
||||
Drawables.addIcon(activity, menu, R.id.export,
|
||||
CommunityMaterial.Icon.cmd_export).isVisible = item != null && item!!.privateKey != null
|
||||
val ctx = activity
|
||||
Drawables.addIcon(ctx, menu, R.id.write_message, GoogleMaterial.Icon.gmd_mail)
|
||||
Drawables.addIcon(ctx, menu, R.id.share, GoogleMaterial.Icon.gmd_share)
|
||||
Drawables.addIcon(ctx, menu, R.id.delete, GoogleMaterial.Icon.gmd_delete)
|
||||
Drawables.addIcon(ctx, menu, R.id.export, CommunityMaterial.Icon.cmd_export).isVisible = item?.privateKey != null
|
||||
|
||||
super.onCreateOptionsMenu(menu, inflater)
|
||||
}
|
||||
@ -187,9 +186,8 @@ class AddressDetailFragment : Fragment() {
|
||||
override fun onPause() {
|
||||
item?.let { item ->
|
||||
Singleton.getAddressRepository(context).save(item)
|
||||
val mainActivity = MainActivity.getInstance()
|
||||
if (mainActivity != null && item.privateKey != null) {
|
||||
mainActivity.updateIdentityEntry(item)
|
||||
if (item.privateKey != null) {
|
||||
MainActivity.getInstance()?.updateIdentityEntry(item)
|
||||
}
|
||||
}
|
||||
super.onPause()
|
||||
|
@ -56,7 +56,7 @@ class ComposeMessageFragment : Fragment() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
if (arguments != null) {
|
||||
arguments?.let { arguments ->
|
||||
var id = arguments.getSerializable(EXTRA_IDENTITY) as? BitmessageAddress
|
||||
if (context != null && (id == null || id.privateKey == null)) {
|
||||
id = Singleton.getIdentity(context)
|
||||
@ -81,9 +81,9 @@ class ComposeMessageFragment : Fragment() {
|
||||
if (arguments.containsKey(EXTRA_PARENT)) {
|
||||
parent = arguments.getSerializable(EXTRA_PARENT) as Plaintext
|
||||
}
|
||||
} else {
|
||||
} ?: {
|
||||
throw IllegalStateException("No identity set for ComposeMessageFragment")
|
||||
}
|
||||
}.invoke()
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@ -109,20 +109,18 @@ class ComposeMessageFragment : Fragment() {
|
||||
// leave current selection
|
||||
}
|
||||
}
|
||||
if (recipient != null) {
|
||||
recipient_input.setText(recipient.toString())
|
||||
}
|
||||
recipient?.let { recipient_input.setText(it.toString()) }
|
||||
}
|
||||
subject_input.setText(subject)
|
||||
body_input.setText(content)
|
||||
|
||||
if (recipient == null) {
|
||||
recipient_input.requestFocus()
|
||||
} else if (subject.isEmpty()) {
|
||||
subject_input.requestFocus()
|
||||
} else {
|
||||
body_input.requestFocus()
|
||||
body_input.setSelection(0)
|
||||
when {
|
||||
recipient == null -> recipient_input.requestFocus()
|
||||
subject.isEmpty() -> subject_input.requestFocus()
|
||||
else -> {
|
||||
body_input.requestFocus()
|
||||
body_input.setSelection(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ class CreateAddressActivity : AppCompatActivity() {
|
||||
if (subscribe.isChecked) {
|
||||
bmc.addSubscribtion(bmAddress)
|
||||
}
|
||||
if (pubkeyBytes != null) {
|
||||
pubkeyBytes?.let { pubkeyBytes ->
|
||||
try {
|
||||
val pubkeyStream = ByteArrayInputStream(pubkeyBytes)
|
||||
val stream = bmAddress.stream
|
||||
|
@ -33,7 +33,7 @@ class MessageDetailActivity : DetailActivity() {
|
||||
// http://developer.android.com/guide/components/fragments.html
|
||||
//
|
||||
if (savedInstanceState == null) {
|
||||
label = intent.getSerializableExtra(MainActivity.EXTRA_SHOW_LABEL) as Label
|
||||
label = intent.getSerializableExtra(MainActivity.EXTRA_SHOW_LABEL) as Label?
|
||||
// Create the detail fragment and add it to the activity
|
||||
// using a fragment transaction.
|
||||
val arguments = Bundle()
|
||||
|
@ -90,7 +90,7 @@ class MessageListFragment : Fragment(), ListHolder<Label> {
|
||||
}
|
||||
|
||||
override fun updateList(label: Label) {
|
||||
if (currentLabel != null && currentLabel != label) {
|
||||
if (currentLabel != null && currentLabel != label && currentLabel != backStack.peek()) {
|
||||
backStack.push(currentLabel)
|
||||
}
|
||||
if (!isResumed) {
|
||||
@ -123,9 +123,7 @@ class MessageListFragment : Fragment(), ListHolder<Label> {
|
||||
messageRepo.findMessageIds(label)
|
||||
.map { messageRepo.getMessage(it) }
|
||||
.forEach { message ->
|
||||
uiThread {
|
||||
swipeableMessageAdapter?.add(message)
|
||||
}
|
||||
uiThread { swipeableMessageAdapter?.add(message) }
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -274,9 +272,7 @@ class MessageListFragment : Fragment(), ListHolder<Label> {
|
||||
messageRepo.remove(message)
|
||||
}
|
||||
|
||||
uiThread {
|
||||
updateList(currentLabel)
|
||||
}
|
||||
uiThread { updateList(currentLabel) }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
@ -26,32 +26,27 @@ import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
|
||||
import ch.dissem.apps.abit.Identicon
|
||||
import ch.dissem.apps.abit.R
|
||||
import ch.dissem.apps.abit.repository.AndroidMessageRepository.Companion.LABEL_ARCHIVE
|
||||
import ch.dissem.apps.abit.util.Assets
|
||||
import ch.dissem.apps.abit.util.Strings.prepareMessageExtract
|
||||
import ch.dissem.bitmessage.entity.Plaintext
|
||||
import ch.dissem.bitmessage.entity.valueobject.Label
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.SwipeableItemAdapter
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.SwipeableItemConstants
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultAction
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.SwipeableItemConstants.*
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultActionMoveToSwipedDirection
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultActionRemoveItem
|
||||
import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractSwipeableItemViewHolder
|
||||
import com.h6ah4i.android.widget.advrecyclerview.utils.RecyclerViewAdapterUtils
|
||||
|
||||
import java.util.LinkedList
|
||||
|
||||
import ch.dissem.apps.abit.Identicon
|
||||
import ch.dissem.apps.abit.R
|
||||
import ch.dissem.apps.abit.util.Assets
|
||||
import ch.dissem.bitmessage.entity.Plaintext
|
||||
import ch.dissem.bitmessage.entity.valueobject.Label
|
||||
|
||||
import ch.dissem.apps.abit.repository.AndroidMessageRepository.Companion.LABEL_ARCHIVE
|
||||
import ch.dissem.apps.abit.util.Strings.prepareMessageExtract
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Adapted from the basic swipeable example by Haruki Hasegawa. See
|
||||
*
|
||||
* @author Christian Basler
|
||||
* @see [
|
||||
* https://github.com/h6ah4i/android-advancedrecyclerview](https://github.com/h6ah4i/android-advancedrecyclerview)
|
||||
* @see [https://github.com/h6ah4i/android-advancedrecyclerview](https://github.com/h6ah4i/android-advancedrecyclerview)
|
||||
*/
|
||||
class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.ViewHolder>(), SwipeableItemAdapter<SwipeableMessageAdapter.ViewHolder>, SwipeableItemConstants {
|
||||
|
||||
@ -108,16 +103,12 @@ class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.Vie
|
||||
}
|
||||
|
||||
private fun onItemViewClick(v: View) {
|
||||
if (eventListener != null) {
|
||||
eventListener!!.onItemViewClicked(v)
|
||||
}
|
||||
eventListener?.onItemViewClicked(v)
|
||||
}
|
||||
|
||||
private fun onSwipeableViewContainerClick(v: View) {
|
||||
if (eventListener != null) {
|
||||
eventListener!!.onItemViewClicked(
|
||||
RecyclerViewAdapterUtils.getParentViewHolderItemView(v))
|
||||
}
|
||||
eventListener?.onItemViewClicked(
|
||||
RecyclerViewAdapterUtils.getParentViewHolderItemView(v))
|
||||
}
|
||||
|
||||
fun getItem(position: Int) = data[position]
|
||||
@ -133,52 +124,56 @@ class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.Vie
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val item = data[position]
|
||||
|
||||
if (activateOnItemClick) {
|
||||
holder.container.setBackgroundResource(
|
||||
if (position == selectedPosition)
|
||||
R.drawable.bg_item_selected_state
|
||||
else
|
||||
R.drawable.bg_item_normal_state
|
||||
)
|
||||
}
|
||||
holder.apply {
|
||||
if (activateOnItemClick) {
|
||||
container.setBackgroundResource(
|
||||
if (position == selectedPosition)
|
||||
R.drawable.bg_item_selected_state
|
||||
else
|
||||
R.drawable.bg_item_normal_state
|
||||
)
|
||||
}
|
||||
|
||||
// set listeners
|
||||
// (if the item is *pinned*, click event comes to the itemView)
|
||||
holder.itemView.setOnClickListener(itemViewOnClickListener)
|
||||
// (if the item is *not pinned*, click event comes to the container)
|
||||
holder.container.setOnClickListener(swipeableViewContainerOnClickListener)
|
||||
// set listeners
|
||||
// (if the item is *pinned*, click event comes to the itemView)
|
||||
itemView.setOnClickListener(itemViewOnClickListener)
|
||||
// (if the item is *not pinned*, click event comes to the container)
|
||||
container.setOnClickListener(swipeableViewContainerOnClickListener)
|
||||
|
||||
// set data
|
||||
holder.avatar.setImageDrawable(Identicon(item.from))
|
||||
holder.status.setImageResource(Assets.getStatusDrawable(item.status))
|
||||
holder.status.contentDescription = holder.status.context.getString(Assets.getStatusString(item.status))
|
||||
holder.sender.text = item.from.toString()
|
||||
holder.subject.text = prepareMessageExtract(item.subject)
|
||||
holder.extract.text = prepareMessageExtract(item.text)
|
||||
if (item.isUnread()) {
|
||||
holder.sender.typeface = Typeface.DEFAULT_BOLD
|
||||
holder.subject.typeface = Typeface.DEFAULT_BOLD
|
||||
} else {
|
||||
holder.sender.typeface = Typeface.DEFAULT
|
||||
holder.subject.typeface = Typeface.DEFAULT
|
||||
// set data
|
||||
avatar.setImageDrawable(Identicon(item.from))
|
||||
status.setImageResource(Assets.getStatusDrawable(item.status))
|
||||
status.contentDescription = holder.status.context.getString(Assets.getStatusString(item.status))
|
||||
sender.text = item.from.toString()
|
||||
subject.text = prepareMessageExtract(item.subject)
|
||||
extract.text = prepareMessageExtract(item.text)
|
||||
if (item.isUnread()) {
|
||||
sender.typeface = Typeface.DEFAULT_BOLD
|
||||
subject.typeface = Typeface.DEFAULT_BOLD
|
||||
} else {
|
||||
sender.typeface = Typeface.DEFAULT
|
||||
subject.typeface = Typeface.DEFAULT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount() = data.size
|
||||
|
||||
override fun onGetSwipeReactionType(holder: ViewHolder, position: Int, x: Int, y: Int): Int {
|
||||
return if (label === LABEL_ARCHIVE || label!!.type == Label.Type.TRASH) {
|
||||
SwipeableItemConstants.REACTION_CAN_SWIPE_LEFT or SwipeableItemConstants.REACTION_CAN_NOT_SWIPE_RIGHT_WITH_RUBBER_BAND_EFFECT
|
||||
} else SwipeableItemConstants.REACTION_CAN_SWIPE_BOTH_H
|
||||
return if (label === LABEL_ARCHIVE || label?.type == Label.Type.TRASH) {
|
||||
REACTION_CAN_SWIPE_LEFT or REACTION_CAN_NOT_SWIPE_RIGHT_WITH_RUBBER_BAND_EFFECT
|
||||
} else {
|
||||
REACTION_CAN_SWIPE_BOTH_H
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SwitchIntDef")
|
||||
override fun onSetSwipeBackground(holder: ViewHolder, position: Int, type: Int) {
|
||||
var bgRes = 0
|
||||
when (type) {
|
||||
SwipeableItemConstants.DRAWABLE_SWIPE_NEUTRAL_BACKGROUND -> bgRes = R.drawable.bg_swipe_item_neutral
|
||||
SwipeableItemConstants.DRAWABLE_SWIPE_LEFT_BACKGROUND -> bgRes = R.drawable.bg_swipe_item_left
|
||||
SwipeableItemConstants.DRAWABLE_SWIPE_RIGHT_BACKGROUND -> if (label === LABEL_ARCHIVE || label!!.type == Label.Type.TRASH) {
|
||||
DRAWABLE_SWIPE_NEUTRAL_BACKGROUND -> bgRes = R.drawable.bg_swipe_item_neutral
|
||||
DRAWABLE_SWIPE_LEFT_BACKGROUND -> bgRes = R.drawable.bg_swipe_item_left
|
||||
DRAWABLE_SWIPE_RIGHT_BACKGROUND -> if (label === LABEL_ARCHIVE || label?.type == Label.Type.TRASH) {
|
||||
bgRes = R.drawable.bg_swipe_item_neutral
|
||||
} else {
|
||||
bgRes = R.drawable.bg_swipe_item_right
|
||||
@ -188,13 +183,12 @@ class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.Vie
|
||||
}
|
||||
|
||||
@SuppressLint("SwitchIntDef")
|
||||
override fun onSwipeItem(holder: ViewHolder, position: Int, result: Int): SwipeResultAction? {
|
||||
when (result) {
|
||||
SwipeableItemConstants.RESULT_SWIPED_RIGHT -> return SwipeRightResultAction(this, position)
|
||||
SwipeableItemConstants.RESULT_SWIPED_LEFT -> return SwipeLeftResultAction(this, position)
|
||||
else -> return null
|
||||
}
|
||||
}
|
||||
override fun onSwipeItem(holder: ViewHolder, position: Int, result: Int) =
|
||||
when (result) {
|
||||
RESULT_SWIPED_RIGHT -> SwipeRightResultAction(this, position)
|
||||
RESULT_SWIPED_LEFT -> SwipeLeftResultAction(this, position)
|
||||
else -> null
|
||||
}
|
||||
|
||||
fun setSelectedPosition(selectedPosition: Int) {
|
||||
val oldPosition = this.selectedPosition
|
||||
@ -210,8 +204,10 @@ class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.Vie
|
||||
override fun onPerformAction() {
|
||||
super.onPerformAction()
|
||||
|
||||
adapter?.data?.removeAt(position)
|
||||
adapter?.notifyItemRemoved(position)
|
||||
adapter?.apply {
|
||||
data.removeAt(position)
|
||||
notifyItemRemoved(position)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSlideAnimationEnd() {
|
||||
@ -233,8 +229,10 @@ class SwipeableMessageAdapter : RecyclerView.Adapter<SwipeableMessageAdapter.Vie
|
||||
override fun onPerformAction() {
|
||||
super.onPerformAction()
|
||||
|
||||
adapter?.data?.removeAt(position)
|
||||
adapter?.notifyItemRemoved(position)
|
||||
adapter?.apply {
|
||||
data.removeAt(position)
|
||||
notifyItemRemoved(position)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSlideAnimationEnd() {
|
||||
|
Loading…
Reference in New Issue
Block a user