Skip to content

Commit

Permalink
Merge pull request #155 from m-kmr/reblog_action
Browse files Browse the repository at this point in the history
add visibility select and change reblog action
  • Loading branch information
bl-lia authored Jun 17, 2018
2 parents 8e65327 + e7d78a1 commit f90a653
Show file tree
Hide file tree
Showing 25 changed files with 222 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class StatusDataRepository
private val statusDataStoreFactory: StatusDataStoreFactory
): StatusRepository {

override fun post(text: String, warning: String?, sensitive: Boolean?, mediaId: String?): Single<Status> =
statusDataStoreFactory.create().post(text, warning, sensitive, mediaId)
override fun post(text: String, warning: String?, inReplyToId: Int?, sensitive: Boolean?, visibility: String?, mediaId: String?): Single<Status> =
statusDataStoreFactory.create().post(text, warning, inReplyToId, sensitive, visibility, mediaId)

override fun post(statusForm: StatusForm): Single<Status> =
statusDataStoreFactory.create().post(statusForm)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class ApiStatusDataStore(
private val statusService: StatusService
) : StatusDataStore {

override fun post(text: String, warning: String?, sensitive: Boolean?, mediaId: String?): Single<Status> {
override fun post(text: String, warning: String?, inReplyToId: Int?, sensitive: Boolean?, visibility: String?, mediaId: String?): Single<Status> {
val mediaIds: List<String>? =
if (mediaId != null) {
listOf(mediaId)
Expand All @@ -29,7 +29,9 @@ class ApiStatusDataStore(
return statusService.post(
text = text,
warning = warning,
inReplyToId = inReplyToId,
sensitive = sensitive,
visibility = visibility,
mediaIds = mediaIds
)
}
Expand All @@ -45,8 +47,9 @@ class ApiStatusDataStore(
return statusService.post(
text = statusForm.status,
warning = statusForm.spoilerText,
inReplyTo = statusForm.inReplyToId,
inReplyToId = statusForm.inReplyToId,
sensitive = statusForm.sensitive,
visibility = statusForm.visibility,
mediaIds = mediaIds
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ interface StatusDataStore {
fun post(
text: String,
warning: String? = null,
inReplyToId: Int? = null,
sensitive: Boolean? = null,
visibility: String? = null,
mediaId: String? = null
): Single<Status>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ interface StatusService {
@Field("spoiler_text")
warning: String? = null,
@Field("in_reply_to_id")
inReplyTo: Int? = null,
inReplyToId: Int? = null,
@Field("sensitive")
sensitive: Boolean? = null,
@Field("visibility")
visibility: String? = null,
@Field("media_ids[]")
mediaIds: List<String>? = null
): Single<Status>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
var favourited: Boolean = false
var mediaAttachments: List<Media>? = null
var sensitive: Boolean = false
var visibility: String? = null
var createdAt: Date? = null
var url: String? = null

Expand All @@ -57,6 +58,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
"reblogged" -> reblogged = input.nextBooleanExtra(false)
"media_attachments" -> mediaAttachments = input.mediaList()
"sensitive" -> sensitive = input.nextBooleanExtra(false)
"visibility" -> visibility = input.nextStringExtra()
"created_at" -> createdAt = DateTime.parse(input.nextString()).toDate()
"url" -> url = input.nextStringExtra()
else -> input.skipValue()
Expand All @@ -75,6 +77,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
favourited = favourited,
mediaAttachments = mediaAttachments ?: listOf(),
sensitive = sensitive,
visibility = visibility,
createdAt = createdAt,
url = url)
}
Expand All @@ -94,6 +97,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
var reblogged: Boolean = false
var mediaAttachments: List<Media>? = null
var sensitive: Boolean = false
var visibility: String? = null
var createdAt: Date? = null
var url: String? = null

Expand All @@ -114,6 +118,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
"reblogged" -> reblogged = nextBooleanExtra(false)
"media_attachments" -> mediaAttachments = mediaList()
"sensitive" -> sensitive = nextBooleanExtra(false)
"visibility" -> visibility = nextStringExtra()
"created_at" -> createdAt = DateTime.parse(nextStringExtra()).toDate()
"url" -> url = nextStringExtra()
else -> skipValue()
Expand All @@ -131,6 +136,7 @@ class StatusTypeAdapter : TypeAdapter<Status>() {
favourited = favourited,
mediaAttachments = mediaAttachments ?: listOf(),
sensitive = sensitive,
visibility = visibility,
createdAt = createdAt,
url = url)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ data class Status(
val favourited: Boolean,
val mediaAttachments: List<Media> = listOf(),
val sensitive: Boolean = false,
val visibility: String? = null,
val createdAt: Date? = null,
val url: String?
) {
Expand All @@ -33,6 +34,7 @@ data class Status(
reblogged = reblogged,
favourited = favourited,
sensitive = sensitive,
visibility = visibility,
createdAt = createdAt,
url = url
).also { realmStatus ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ open class RealmStatus(
open var favourited: Boolean = false,
open var mediaAttachments: RealmList<RealmMedia> = RealmList(),
open var sensitive: Boolean = false,
open var visibility: String? = null,
open var createdAt: Date? = null,
open var url: String? = null
): RealmObject() {
Expand All @@ -30,6 +31,7 @@ open class RealmStatus(
favourited = favourited,
mediaAttachments = mediaAttachments.map { it.toMedia() },
sensitive = sensitive,
visibility = visibility,
createdAt = createdAt,
url = url
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,20 @@ class PostStatusUseCase(
private fun postParam(params: Array<out Any>): Single<Status> {
val text = params[0] as String
val warning = params[1] as String
val sensitive = params[2] as Boolean
if (params.size > 3) {
val mediaId: Int? = params[3] as Int?
val inReplyToId = params[2] as Int
val sensitive = params[3] as Boolean
val visibility = params[4] as String
if (params.size > 5) {
val mediaId: Int? = params[5] as Int?
val mediaIdString: String? =
if (mediaId != null) {
mediaId.toString()
} else {
null
}
return statusRepository.post(text, warning, sensitive, mediaIdString)
return statusRepository.post(text, warning, inReplyToId, sensitive, visibility, mediaIdString)
} else {
return statusRepository.post(text, warning, sensitive)
return statusRepository.post(text, warning, inReplyToId, sensitive, visibility)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ interface StatusRepository {
fun post(
text: String,
warning: String? = null,
inReplyToId: Int? = null,
sensitive: Boolean? = null,
visibility: String? = null,
mediaId: String? = null
): Single<Status>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ data class StatusForm(
val inReplyToId: Int? = null,
val mediaIds: List<Int> = listOf(),
val sensitive: Boolean = false,
val spoilerText: String? = null) {
val spoilerText: String? = null,
val visibility: String? = null) {

fun debug(): String =
"status: %s, spoilerText: %s, mediaId: %s".format(status, spoilerText, mediaIds.joinToString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,12 +181,18 @@ class TimelineItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}

private fun initActions(status: Status) {
val visibility = status.visibility

reblogButton.background =
if (status.reblogged) {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_reblog)
} else {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_unreblog)
}
if (visibility == "direct") {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_direct)
} else if (visibility == "private") {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_private)
} else if (status.reblogged) {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_reblog)
} else {
ContextCompat.getDrawable(itemView.context, R.drawable.ic_reblog_unreblog)
}

favouriteButton.background =
if (status.favourited) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,17 +117,19 @@ class AccountFragment : RxFragment() {
}
adapter.onClickReblog.subscribe { status ->
val target = status.reblog ?: status
presenter.reblog(target)
.compose(bindToLifecycle())
.subscribe { status, error ->
if (error != null) {
showError(error)
return@subscribe
}
if (target.visibility == "public" || target.visibility == "unlisted") {
presenter.reblog(target)
.compose(bindToLifecycle())
.subscribe { status, error ->
if (error != null) {
showError(error)
return@subscribe
}

val updateTarget = status.reblog ?: status
adapter.update(updateTarget)
}
val updateTarget = status.reblog ?: status
adapter.update(updateTarget)
}
}
}
adapter.onClickFavourite.subscribe { status ->
val target = status.reblog ?: status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ import android.support.design.widget.Snackbar
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.PopupMenu
import android.widget.TextView
import android.widget.Toast
import com.bl_lia.kirakiratter.App
import com.bl_lia.kirakiratter.R
import com.bl_lia.kirakiratter.domain.extension.preparedErrorMessage
Expand Down Expand Up @@ -54,6 +57,8 @@ class KatsuFragment : RxFragment() {
lateinit var presenter: KatsuPresenter

val mediaUris = ArrayList<Uri>()
val visibility = arrayOf("public", "unlisted", "private", "direct")
var vindex = 0

private val component: StatusComponent by lazy {
DaggerStatusComponent.builder()
Expand All @@ -73,6 +78,15 @@ class KatsuFragment : RxFragment() {
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val visibilityListener = View.OnClickListener { it ->
when (it.id) {
R.id.visibility_menu -> {
showPopup(it)
}
}
}
visibility_menu.setOnClickListener(visibilityListener)

button_katsu.setOnClickListener {
val header = content_warning_edittext.text.toString()
val body = katsu_content_body.text.toString()
Expand All @@ -91,7 +105,8 @@ class KatsuFragment : RxFragment() {
warning = header,
attachment = mediaUris,
sensitive = nsfw,
inReplyToId = replyTo)
inReplyToId = replyTo,
visibility = visibility[vindex])
.compose(bindToLifecycle())
.subscribe { status, error ->
button_katsu.isEnabled = true
Expand Down Expand Up @@ -193,6 +208,40 @@ class KatsuFragment : RxFragment() {
}
}

private fun showPopup(view: View) {
var popup: PopupMenu?
popup = PopupMenu(this.context, view)
popup.inflate(R.menu.menu_visibility)

popup.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item: MenuItem? ->
when (item!!.itemId) {
R.id.menu_public -> {
visibility_menu.setBackgroundResource(R.drawable.ic_public_black_24dp)
Toast.makeText(this.context, item.title, Toast.LENGTH_SHORT).show()
vindex = 0
}
R.id.menu_unlisted -> {
visibility_menu.setBackgroundResource(R.drawable.ic_lock_open_black_24dp)
Toast.makeText(this.context, item.title, Toast.LENGTH_SHORT).show()
vindex = 1
}
R.id.menu_private -> {
visibility_menu.setBackgroundResource(R.drawable.ic_lock_outline_black_24dp)
Toast.makeText(this.context, item.title, Toast.LENGTH_SHORT).show()
vindex = 2
}
R.id.menu_direct -> {
visibility_menu.setBackgroundResource(R.drawable.ic_email_black_24dp)
Toast.makeText(this.context, item.title, Toast.LENGTH_SHORT).show()
vindex = 3
}
}
true
})

popup.show()
}

private fun setHint() {
val hintHeader = content_warning_textinput.hint
content_warning_textinput.hint = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,19 @@ class TimelineFragment : RxFragment(), ScrollableFragment {
startActivity(intent)
}
adapter.onClickReblog.subscribe { status ->
presenter.reblog(status)
.subscribe { status, error ->
if (error != null) {
showError(error)
return@subscribe
}
if (status.visibility == "public" || status.visibility == "unlisted") {
presenter.reblog(status)
.subscribe { status, error ->
if (error != null) {
showError(error)
return@subscribe
}

status.reblog?.let {
adapter.update(it)
status.reblog?.let {
adapter.update(it)
}
}
}
}
}
adapter.onClickFavourite.subscribe { status ->
presenter.favourite(status)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class KatsuPresenter
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

fun post(text: String, warning: String? = null, inReplyToId: Int? = null, sensitive: Boolean = false, attachment: List<Uri> = listOf()): Single<Status> {
fun post(text: String, warning: String? = null, inReplyToId: Int? = null, sensitive: Boolean = false,visibility: String? = null, attachment: List<Uri> = listOf()): Single<Status> {

if (attachment.isNotEmpty()) {
return Single.concat(attachment.map { uploadMedia.execute(it) })
Expand All @@ -46,14 +46,17 @@ class KatsuPresenter
spoilerText = warning,
inReplyToId = inReplyToId,
sensitive = sensitive,
visibility = visibility,
mediaIds = medias.map { it.id }
))
}
} else {
return postStatus.execute(StatusForm(
status = text,
spoilerText = warning,
inReplyToId = inReplyToId
inReplyToId = inReplyToId,
sensitive = sensitive,
visibility = visibility
))
}
}
Expand Down
Loading

0 comments on commit f90a653

Please sign in to comment.