enable reporting users without statuses (#1445)

This commit is contained in:
Konrad Pozniak 2019-08-17 09:08:58 +02:00 committed by GitHub
commit d13a341a35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 38 additions and 79 deletions

View file

@ -18,7 +18,6 @@ package com.keylesspalace.tusky.components.report
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.text.Spanned
import android.view.MenuItem
import androidx.appcompat.content.res.AppCompatResources
import androidx.lifecycle.Observer
@ -27,7 +26,6 @@ import com.keylesspalace.tusky.BottomSheetActivity
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.components.report.adapter.ReportPagerAdapter
import com.keylesspalace.tusky.di.ViewModelFactory
import com.keylesspalace.tusky.util.HtmlUtils
import com.keylesspalace.tusky.util.ThemeUtils
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasAndroidInjector
@ -55,8 +53,7 @@ class ReportActivity : BottomSheetActivity(), HasAndroidInjector {
throw IllegalStateException("accountId ($accountId) or accountUserName ($accountUserName) is null")
}
viewModel.init(accountId, accountUserName,
intent?.getStringExtra(STATUS_ID), intent?.getStringExtra(STATUS_CONTENT))
viewModel.init(accountId, accountUserName, intent?.getStringExtra(STATUS_ID))
setContentView(R.layout.activity_report)
@ -143,16 +140,14 @@ class ReportActivity : BottomSheetActivity(), HasAndroidInjector {
private const val ACCOUNT_ID = "account_id"
private const val ACCOUNT_USERNAME = "account_username"
private const val STATUS_ID = "status_id"
private const val STATUS_CONTENT = "status_content"
@JvmStatic
fun getIntent(context: Context, accountId: String, userName: String, statusId: String, statusContent: Spanned) =
fun getIntent(context: Context, accountId: String, userName: String, statusId: String? = null) =
Intent(context, ReportActivity::class.java)
.apply {
putExtra(ACCOUNT_ID, accountId)
putExtra(ACCOUNT_USERNAME, userName)
putExtra(STATUS_ID, statusId)
putExtra(STATUS_CONTENT, HtmlUtils.toHtml(statusContent))
}
}

View file

@ -64,21 +64,20 @@ class ReportViewModel @Inject constructor(
var reportNote: String? = null
var isRemoteNotify = false
private var statusContent: String? = null
private var statusId: String? = null
lateinit var accountUserName: String
lateinit var accountId: String
var isRemoteAccount: Boolean = false
var remoteServer: String? = null
fun init(accountId: String, userName: String, statusId: String?, statusContent: String?) {
fun init(accountId: String, userName: String, statusId: String?) {
this.accountId = accountId
this.accountUserName = userName
this.statusId = statusId
statusId?.let {
selectedIds.add(it)
}
this.statusContent = statusContent
isRemoteAccount = userName.contains('@')
if (isRemoteAccount) {
remoteServer = userName.substring(userName.indexOf('@') + 1)
@ -208,17 +207,15 @@ class ReportViewModel @Inject constructor(
}
fun setStatusChecked(status: Status, checked: Boolean) {
if (checked)
if (checked) {
selectedIds.add(status.id)
else
} else {
selectedIds.remove(status.id)
}
}
fun isStatusChecked(id: String): Boolean {
return selectedIds.contains(id)
}
fun isStatusesSelected(): Boolean {
return selectedIds.isNotEmpty()
}
}

View file

@ -72,14 +72,18 @@ class StatusesDataSource(private val accountId: String,
retryBefore = null
retryInitial = null
initialLoad.postValue(NetworkState.LOADING)
mastodonApi.statusObservable(params.requestedInitialKey).zipWith(
mastodonApi.accountStatusesObservable(accountId, params.requestedInitialKey, null, params.requestedLoadSize - 1, true),
BiFunction { status: Status, list: List<Status> ->
val ret = ArrayList<Status>()
ret.add(status)
ret.addAll(list)
return@BiFunction ret
})
if (params.requestedInitialKey == null) {
mastodonApi.accountStatusesObservable(accountId, null, null, params.requestedLoadSize, true)
} else {
mastodonApi.statusObservable(params.requestedInitialKey).zipWith(
mastodonApi.accountStatusesObservable(accountId, params.requestedInitialKey, null, params.requestedLoadSize - 1, true),
BiFunction { status: Status, list: List<Status> ->
val ret = ArrayList<Status>()
ret.add(status)
ret.addAll(list)
return@BiFunction ret
})
}
.doOnSubscribe {
disposables.add(it)
}

View file

@ -188,11 +188,7 @@ class ReportStatusesFragment : Fragment(), Injectable, AdapterHandler {
}
buttonContinue.setOnClickListener {
if (viewModel.isStatusesSelected()) {
viewModel.navigateTo(Screen.Note)
} else {
Snackbar.make(swipeRefreshLayout, R.string.error_report_too_few_statuses, Snackbar.LENGTH_LONG).show()
}
viewModel.navigateTo(Screen.Note)
}
}

View file

@ -202,7 +202,6 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
val id = status.actionableId
val accountId = status.actionableStatus.account.id
val accountUsername = status.actionableStatus.account.username
val content = status.actionableStatus.content
val statusUrl = status.actionableStatus.url
val accounts = viewModel.getAllAccountsOrderedByActive()
var openAsTitle: String? = null
@ -297,7 +296,7 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
return@setOnMenuItemClickListener true
}
R.id.status_report -> {
openReportPage(accountId, accountUsername, id, content)
openReportPage(accountId, accountUsername, id)
return@setOnMenuItemClickListener true
}
R.id.status_unreblog_private -> {
@ -367,9 +366,8 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
}
}
private fun openReportPage(accountId: String, accountUsername: String, statusId: String,
statusContent: Spanned) {
startActivity(ReportActivity.getIntent(requireContext(), accountId, accountUsername, statusId, statusContent))
private fun openReportPage(accountId: String, accountUsername: String, statusId: String) {
startActivity(ReportActivity.getIntent(requireContext(), accountId, accountUsername, statusId))
}
private fun showConfirmDeleteDialog(id: String, position: Int) {