2022-07-25 15:45:09 +00:00
|
|
|
package org.thoughtcrime.securesms.conversation.mutiselect.forward
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import androidx.activity.result.contract.ActivityResultContract
|
2022-08-10 15:48:03 +00:00
|
|
|
import androidx.appcompat.widget.Toolbar
|
2022-10-11 13:19:44 +00:00
|
|
|
import androidx.core.app.ActivityCompat
|
2022-07-25 15:45:09 +00:00
|
|
|
import androidx.core.content.ContextCompat
|
|
|
|
import androidx.fragment.app.Fragment
|
2022-09-30 18:37:25 +00:00
|
|
|
import org.signal.core.util.logging.Log
|
2022-07-25 15:45:09 +00:00
|
|
|
import org.thoughtcrime.securesms.R
|
|
|
|
import org.thoughtcrime.securesms.components.FragmentWrapperActivity
|
|
|
|
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
|
|
|
|
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment.Companion.RESULT_SELECTION
|
|
|
|
|
2022-07-26 19:55:19 +00:00
|
|
|
open class MultiselectForwardActivity : FragmentWrapperActivity(), MultiselectForwardFragment.Callback, SearchConfigurationProvider {
|
2022-07-25 15:45:09 +00:00
|
|
|
|
|
|
|
companion object {
|
2022-09-30 18:37:25 +00:00
|
|
|
private val TAG = Log.tag(MultiselectForwardActivity::class.java)
|
2022-07-25 15:45:09 +00:00
|
|
|
private const val ARGS = "args"
|
|
|
|
}
|
|
|
|
|
|
|
|
private val args: MultiselectForwardFragmentArgs get() = intent.getParcelableExtra(ARGS)!!
|
|
|
|
|
|
|
|
override val contentViewId: Int = R.layout.multiselect_forward_activity
|
|
|
|
|
2022-08-10 15:48:03 +00:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
|
|
|
super.onCreate(savedInstanceState, ready)
|
|
|
|
|
|
|
|
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
|
|
|
toolbar.setTitle(args.title)
|
|
|
|
toolbar.setNavigationOnClickListener { exitFlow() }
|
|
|
|
}
|
|
|
|
|
2022-07-25 15:45:09 +00:00
|
|
|
override fun getFragment(): Fragment {
|
2022-10-07 17:35:05 +00:00
|
|
|
return MultiselectForwardFragment.create(args)
|
2022-07-25 15:45:09 +00:00
|
|
|
}
|
|
|
|
|
2022-09-30 18:37:25 +00:00
|
|
|
override fun onFinishForwardAction() {
|
|
|
|
Log.d(TAG, "Completed forward action...")
|
|
|
|
}
|
2022-07-25 15:45:09 +00:00
|
|
|
|
|
|
|
override fun exitFlow() {
|
2022-09-30 18:37:25 +00:00
|
|
|
Log.d(TAG, "Exiting flow...")
|
2022-10-11 13:19:44 +00:00
|
|
|
ActivityCompat.finishAfterTransition(this)
|
2022-07-25 15:45:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onSearchInputFocused() = Unit
|
|
|
|
|
|
|
|
override fun setResult(bundle: Bundle) {
|
|
|
|
setResult(RESULT_OK, Intent().putExtras(bundle))
|
|
|
|
}
|
|
|
|
|
|
|
|
@Suppress("WrongViewCast")
|
|
|
|
override fun getContainer(): ViewGroup {
|
|
|
|
return findViewById(R.id.fragment_container_wrapper)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun getDialogBackgroundColor(): Int {
|
|
|
|
return ContextCompat.getColor(this, R.color.signal_colorBackground)
|
|
|
|
}
|
|
|
|
|
|
|
|
class SelectionContract : ActivityResultContract<MultiselectForwardFragmentArgs, List<ContactSearchKey.RecipientSearchKey>>() {
|
|
|
|
override fun createIntent(context: Context, input: MultiselectForwardFragmentArgs): Intent {
|
|
|
|
return Intent(context, MultiselectForwardActivity::class.java).putExtra(ARGS, input)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun parseResult(resultCode: Int, intent: Intent?): List<ContactSearchKey.RecipientSearchKey> {
|
|
|
|
return if (resultCode != RESULT_OK) {
|
|
|
|
emptyList()
|
|
|
|
} else if (intent == null || !intent.hasExtra(RESULT_SELECTION)) {
|
|
|
|
throw IllegalStateException("Selection contract requires a selection.")
|
|
|
|
} else {
|
2023-01-18 14:49:47 +00:00
|
|
|
val selection: List<ContactSearchKey.RecipientSearchKey> = intent.getParcelableArrayListExtra(RESULT_SELECTION)!!
|
|
|
|
selection
|
2022-07-25 15:45:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|