Remove string-based quote feature
This commit is contained in:
parent
4d33e477a7
commit
3a912cf7a9
|
@ -171,7 +171,8 @@ public final class SavedTootActivity extends BaseActivity implements SavedTootAd
|
||||||
/*mentionedUsernames*/null,
|
/*mentionedUsernames*/null,
|
||||||
item.getInReplyToId(),
|
item.getInReplyToId(),
|
||||||
/*quoteId*/null,
|
/*quoteId*/null,
|
||||||
/*quoteUrl*/null,
|
/*quoteStatusAuthor*/null,
|
||||||
|
/*quoteStatusContent*/null,
|
||||||
/*replyVisibility*/null,
|
/*replyVisibility*/null,
|
||||||
item.getVisibility(),
|
item.getVisibility(),
|
||||||
item.getContentWarning(),
|
item.getContentWarning(),
|
||||||
|
|
|
@ -255,7 +255,8 @@ public class NotificationsAdapter extends RecyclerView.Adapter {
|
||||||
statusDisplayOptions.showBotOverlay(),
|
statusDisplayOptions.showBotOverlay(),
|
||||||
statusDisplayOptions.useBlurhash(),
|
statusDisplayOptions.useBlurhash(),
|
||||||
CardViewMode.NONE,
|
CardViewMode.NONE,
|
||||||
statusDisplayOptions.confirmReblogs()
|
statusDisplayOptions.confirmReblogs(),
|
||||||
|
statusDisplayOptions.quoteEnabled()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -754,6 +754,10 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
|
||||||
favouriteButton.setClickable(!isNotestock);
|
favouriteButton.setClickable(!isNotestock);
|
||||||
|
|
||||||
if (quoteButton != null) {
|
if (quoteButton != null) {
|
||||||
|
if (!statusDisplayOptions.quoteEnabled()) {
|
||||||
|
quoteButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
quoteButton.setOnClickListener(view -> {
|
quoteButton.setOnClickListener(view -> {
|
||||||
int position = getAdapterPosition();
|
int position = getAdapterPosition();
|
||||||
if (position != RecyclerView.NO_POSITION) {
|
if (position != RecyclerView.NO_POSITION) {
|
||||||
|
|
|
@ -65,7 +65,8 @@ public final class TimelineAdapter extends RecyclerView.Adapter {
|
||||||
statusDisplayOptions.showBotOverlay(),
|
statusDisplayOptions.showBotOverlay(),
|
||||||
statusDisplayOptions.useBlurhash(),
|
statusDisplayOptions.useBlurhash(),
|
||||||
statusDisplayOptions.cardViewMode(),
|
statusDisplayOptions.cardViewMode(),
|
||||||
statusDisplayOptions.confirmReblogs()
|
statusDisplayOptions.confirmReblogs(),
|
||||||
|
statusDisplayOptions.quoteEnabled()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ class ComposeActivity : BaseActivity(),
|
||||||
this.composeOptions = intent.getParcelableExtra<ComposeOptions?>(COMPOSE_OPTIONS_EXTRA)
|
this.composeOptions = intent.getParcelableExtra<ComposeOptions?>(COMPOSE_OPTIONS_EXTRA)
|
||||||
viewModel.setup(composeOptions)
|
viewModel.setup(composeOptions)
|
||||||
setupReplyViews(composeOptions?.replyingStatusAuthor)
|
setupReplyViews(composeOptions?.replyingStatusAuthor)
|
||||||
setupQuoteView(composeOptions?.quoteUrl)
|
setupQuoteView(composeOptions?.quoteStatusAuthor)
|
||||||
val tootText = composeOptions?.tootText
|
val tootText = composeOptions?.tootText
|
||||||
if (!tootText.isNullOrEmpty()) {
|
if (!tootText.isNullOrEmpty()) {
|
||||||
composeEditField.setText(tootText)
|
composeEditField.setText(tootText)
|
||||||
|
@ -301,11 +301,31 @@ class ComposeActivity : BaseActivity(),
|
||||||
composeOptions?.replyingStatusContent?.let { composeReplyContentView.text = it }
|
composeOptions?.replyingStatusContent?.let { composeReplyContentView.text = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupQuoteView(quoteUrl: String?) {
|
private fun setupQuoteView(quoteStatusAuthor: String?) {
|
||||||
if (quoteUrl != null) {
|
if (quoteStatusAuthor != null) {
|
||||||
composeQuoteView.show()
|
composeQuoteView.show()
|
||||||
composeQuoteView.text = getString(R.string.quote_to, quoteUrl)
|
composeQuoteView.text = getString(R.string.quote_to, quoteStatusAuthor)
|
||||||
|
val arrowDownIcon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_arrow_drop_down).apply { sizeDp = 12 }
|
||||||
|
|
||||||
|
ThemeUtils.setDrawableTint(this, arrowDownIcon, android.R.attr.textColorTertiary)
|
||||||
|
composeQuoteView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, arrowDownIcon, null)
|
||||||
|
|
||||||
|
composeQuoteView.setOnClickListener {
|
||||||
|
TransitionManager.beginDelayedTransition(composeQuoteContentView.parent as ViewGroup)
|
||||||
|
|
||||||
|
if (composeQuoteContentView.isVisible) {
|
||||||
|
composeQuoteContentView.hide()
|
||||||
|
composeQuoteView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, arrowDownIcon, null)
|
||||||
|
} else {
|
||||||
|
composeQuoteContentView.show()
|
||||||
|
val arrowUpIcon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_arrow_drop_up).apply { sizeDp = 12 }
|
||||||
|
|
||||||
|
ThemeUtils.setDrawableTint(this, arrowUpIcon, android.R.attr.textColorTertiary)
|
||||||
|
composeReplyView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, arrowUpIcon, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
composeOptions?.quoteStatusContent?.let { composeQuoteContentView.text = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupContentWarningField(startingContentWarning: String?) {
|
private fun setupContentWarningField(startingContentWarning: String?) {
|
||||||
|
@ -1083,7 +1103,8 @@ class ComposeActivity : BaseActivity(),
|
||||||
var mentionedUsernames: Set<String>? = null,
|
var mentionedUsernames: Set<String>? = null,
|
||||||
var inReplyToId: String? = null,
|
var inReplyToId: String? = null,
|
||||||
var quoteId: String? = null,
|
var quoteId: String? = null,
|
||||||
var quoteUrl: String? = null,
|
var quoteStatusAuthor: String? = null,
|
||||||
|
var quoteStatusContent: String? = null,
|
||||||
var replyVisibility: Status.Visibility? = null,
|
var replyVisibility: Status.Visibility? = null,
|
||||||
var visibility: Status.Visibility? = null,
|
var visibility: Status.Visibility? = null,
|
||||||
var contentWarning: String? = null,
|
var contentWarning: String? = null,
|
||||||
|
|
|
@ -61,7 +61,8 @@ class ComposeViewModel
|
||||||
private var startingContentWarning: String = ""
|
private var startingContentWarning: String = ""
|
||||||
private var inReplyToId: String? = null
|
private var inReplyToId: String? = null
|
||||||
private var quoteId: String? = null
|
private var quoteId: String? = null
|
||||||
private var quoteUrl: String? = null
|
private var quoteStatusAuthor: String? = null
|
||||||
|
private var quoteStatusContent: String? = null
|
||||||
private var startingVisibility: Status.Visibility = Status.Visibility.UNKNOWN
|
private var startingVisibility: Status.Visibility = Status.Visibility.UNKNOWN
|
||||||
|
|
||||||
private var contentWarningStateChanged: Boolean = false
|
private var contentWarningStateChanged: Boolean = false
|
||||||
|
@ -268,14 +269,8 @@ class ComposeViewModel
|
||||||
mediaDescriptions.add(item.description ?: "")
|
mediaDescriptions.add(item.description ?: "")
|
||||||
}
|
}
|
||||||
|
|
||||||
var text = content
|
|
||||||
if (domain !in CAN_USE_QUOTE_ID && quoteId != null) {
|
|
||||||
text += "\n~~~~~~~~~~\n[$quoteUrl]"
|
|
||||||
quoteId = null
|
|
||||||
}
|
|
||||||
|
|
||||||
val tootToSend = TootToSend(
|
val tootToSend = TootToSend(
|
||||||
text,
|
content,
|
||||||
spoilerText,
|
spoilerText,
|
||||||
statusVisibility.value!!.serverString(),
|
statusVisibility.value!!.serverString(),
|
||||||
mediaUris.isNotEmpty() && (markMediaAsSensitive.value!! || showContentWarning.value!!),
|
mediaUris.isNotEmpty() && (markMediaAsSensitive.value!! || showContentWarning.value!!),
|
||||||
|
@ -394,7 +389,8 @@ class ComposeViewModel
|
||||||
inReplyToId = composeOptions?.inReplyToId
|
inReplyToId = composeOptions?.inReplyToId
|
||||||
|
|
||||||
quoteId = composeOptions?.quoteId
|
quoteId = composeOptions?.quoteId
|
||||||
quoteUrl = composeOptions?.quoteUrl
|
quoteStatusAuthor = composeOptions?.quoteStatusAuthor
|
||||||
|
quoteStatusContent = composeOptions?.quoteStatusContent
|
||||||
|
|
||||||
val contentWarning = composeOptions?.contentWarning
|
val contentWarning = composeOptions?.contentWarning
|
||||||
if (contentWarning != null) {
|
if (contentWarning != null) {
|
||||||
|
@ -485,7 +481,7 @@ const val DEFAULT_CHARACTER_LIMIT = 500
|
||||||
private const val DEFAULT_MAX_OPTION_COUNT = 4
|
private const val DEFAULT_MAX_OPTION_COUNT = 4
|
||||||
private const val DEFAULT_MAX_OPTION_LENGTH = 25
|
private const val DEFAULT_MAX_OPTION_LENGTH = 25
|
||||||
|
|
||||||
private val CAN_USE_QUOTE_ID = arrayOf("odakyu.app", "itabashi.0j0.jp", "biwakodon.com", "dtp-mstdn.jp", "nitiasa.com",
|
val CAN_USE_QUOTE_ID = arrayOf("odakyu.app", "itabashi.0j0.jp", "biwakodon.com", "dtp-mstdn.jp", "nitiasa.com",
|
||||||
"comm.cx", "fedibird.com", "qoto.org", "kurage.cc", "m.eula.dev", "otogamer.me", "sgp.hostdon.ne.jp",
|
"comm.cx", "fedibird.com", "qoto.org", "kurage.cc", "m.eula.dev", "otogamer.me", "sgp.hostdon.ne.jp",
|
||||||
"pomdon.work", "obapom.work")
|
"pomdon.work", "obapom.work")
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import com.keylesspalace.tusky.AccountActivity
|
import com.keylesspalace.tusky.AccountActivity
|
||||||
import com.keylesspalace.tusky.R
|
import com.keylesspalace.tusky.R
|
||||||
import com.keylesspalace.tusky.ViewTagActivity
|
import com.keylesspalace.tusky.ViewTagActivity
|
||||||
|
import com.keylesspalace.tusky.components.compose.CAN_USE_QUOTE_ID
|
||||||
import com.keylesspalace.tusky.db.AppDatabase
|
import com.keylesspalace.tusky.db.AppDatabase
|
||||||
import com.keylesspalace.tusky.di.Injectable
|
import com.keylesspalace.tusky.di.Injectable
|
||||||
import com.keylesspalace.tusky.di.ViewModelFactory
|
import com.keylesspalace.tusky.di.ViewModelFactory
|
||||||
|
@ -67,7 +68,8 @@ class ConversationsFragment : SFragment(), StatusActionListener, Injectable, Res
|
||||||
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
||||||
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
||||||
cardViewMode = CardViewMode.NONE,
|
cardViewMode = CardViewMode.NONE,
|
||||||
confirmReblogs = preferences.getBoolean("confirmReblogs", true)
|
confirmReblogs = preferences.getBoolean("confirmReblogs", true),
|
||||||
|
quoteEnabled = accountManager.activeAccount?.domain in CAN_USE_QUOTE_ID
|
||||||
)
|
)
|
||||||
|
|
||||||
adapter = ConversationAdapter(statusDisplayOptions, this, ::onTopLoaded, viewModel::retry)
|
adapter = ConversationAdapter(statusDisplayOptions, this, ::onTopLoaded, viewModel::retry)
|
||||||
|
|
|
@ -34,6 +34,7 @@ import com.keylesspalace.tusky.AccountActivity
|
||||||
import com.keylesspalace.tusky.R
|
import com.keylesspalace.tusky.R
|
||||||
import com.keylesspalace.tusky.ViewMediaActivity
|
import com.keylesspalace.tusky.ViewMediaActivity
|
||||||
import com.keylesspalace.tusky.ViewTagActivity
|
import com.keylesspalace.tusky.ViewTagActivity
|
||||||
|
import com.keylesspalace.tusky.components.compose.CAN_USE_QUOTE_ID
|
||||||
import com.keylesspalace.tusky.components.report.ReportViewModel
|
import com.keylesspalace.tusky.components.report.ReportViewModel
|
||||||
import com.keylesspalace.tusky.components.report.Screen
|
import com.keylesspalace.tusky.components.report.Screen
|
||||||
import com.keylesspalace.tusky.components.report.adapter.AdapterHandler
|
import com.keylesspalace.tusky.components.report.adapter.AdapterHandler
|
||||||
|
@ -118,7 +119,8 @@ class ReportStatusesFragment : Fragment(), Injectable, AdapterHandler {
|
||||||
showBotOverlay = false,
|
showBotOverlay = false,
|
||||||
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
||||||
cardViewMode = CardViewMode.NONE,
|
cardViewMode = CardViewMode.NONE,
|
||||||
confirmReblogs = preferences.getBoolean("confirmReblogs", true)
|
confirmReblogs = preferences.getBoolean("confirmReblogs", true),
|
||||||
|
quoteEnabled = accountManager.activeAccount?.domain in CAN_USE_QUOTE_ID
|
||||||
)
|
)
|
||||||
|
|
||||||
adapter = StatusesAdapter(statusDisplayOptions,
|
adapter = StatusesAdapter(statusDisplayOptions,
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.util.Log
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.paging.PagedList
|
import androidx.paging.PagedList
|
||||||
|
import com.keylesspalace.tusky.components.compose.CAN_USE_QUOTE_ID
|
||||||
import com.keylesspalace.tusky.components.search.adapter.SearchNotestockRepository
|
import com.keylesspalace.tusky.components.search.adapter.SearchNotestockRepository
|
||||||
import com.keylesspalace.tusky.components.search.adapter.SearchRepository
|
import com.keylesspalace.tusky.components.search.adapter.SearchRepository
|
||||||
import com.keylesspalace.tusky.db.AccountEntity
|
import com.keylesspalace.tusky.db.AccountEntity
|
||||||
|
@ -37,6 +38,7 @@ class SearchViewModel @Inject constructor(
|
||||||
val mediaPreviewEnabled = activeAccount?.mediaPreviewEnabled ?: false
|
val mediaPreviewEnabled = activeAccount?.mediaPreviewEnabled ?: false
|
||||||
val alwaysShowSensitiveMedia = activeAccount?.alwaysShowSensitiveMedia ?: false
|
val alwaysShowSensitiveMedia = activeAccount?.alwaysShowSensitiveMedia ?: false
|
||||||
val alwaysOpenSpoiler = activeAccount?.alwaysOpenSpoiler ?: false
|
val alwaysOpenSpoiler = activeAccount?.alwaysOpenSpoiler ?: false
|
||||||
|
val quoteEnabled = activeAccount?.domain in CAN_USE_QUOTE_ID
|
||||||
|
|
||||||
private val statusesRepository = SearchRepository<Pair<Status, StatusViewData.Concrete>>(mastodonApi)
|
private val statusesRepository = SearchRepository<Pair<Status, StatusViewData.Concrete>>(mastodonApi)
|
||||||
private val accountsRepository = SearchRepository<Account>(mastodonApi)
|
private val accountsRepository = SearchRepository<Account>(mastodonApi)
|
||||||
|
|
|
@ -68,7 +68,8 @@ class SearchNotestockFragment : SearchFragment<Pair<Status, StatusViewData.Concr
|
||||||
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
||||||
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
||||||
cardViewMode = CardViewMode.NONE,
|
cardViewMode = CardViewMode.NONE,
|
||||||
confirmReblogs = preferences.getBoolean("confirmReblogs", false)
|
confirmReblogs = preferences.getBoolean("confirmReblogs", false),
|
||||||
|
quoteEnabled = viewModel.quoteEnabled
|
||||||
)
|
)
|
||||||
|
|
||||||
searchRecyclerView.addItemDecoration(DividerItemDecoration(searchRecyclerView.context, DividerItemDecoration.VERTICAL))
|
searchRecyclerView.addItemDecoration(DividerItemDecoration(searchRecyclerView.context, DividerItemDecoration.VERTICAL))
|
||||||
|
@ -214,7 +215,8 @@ class SearchNotestockFragment : SearchFragment<Pair<Status, StatusViewData.Concr
|
||||||
|
|
||||||
val intent = ComposeActivity.startIntent(requireContext(), ComposeOptions(
|
val intent = ComposeActivity.startIntent(requireContext(), ComposeOptions(
|
||||||
quoteId = status.actionableId,
|
quoteId = status.actionableId,
|
||||||
quoteUrl = actionableStatus.url,
|
quoteStatusAuthor = actionableStatus.account.localUsername,
|
||||||
|
quoteStatusContent = actionableStatus.content.toString(),
|
||||||
replyVisibility = actionableStatus.visibility,
|
replyVisibility = actionableStatus.visibility,
|
||||||
contentWarning = actionableStatus.spoilerText,
|
contentWarning = actionableStatus.spoilerText,
|
||||||
mentionedUsernames = mentionedUsernames
|
mentionedUsernames = mentionedUsernames
|
||||||
|
|
|
@ -83,7 +83,8 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
|
||||||
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
showBotOverlay = preferences.getBoolean("showBotOverlay", true),
|
||||||
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
useBlurhash = preferences.getBoolean("useBlurhash", true),
|
||||||
cardViewMode = CardViewMode.NONE,
|
cardViewMode = CardViewMode.NONE,
|
||||||
confirmReblogs = preferences.getBoolean("confirmReblogs", true)
|
confirmReblogs = preferences.getBoolean("confirmReblogs", true),
|
||||||
|
quoteEnabled = viewModel.quoteEnabled
|
||||||
)
|
)
|
||||||
|
|
||||||
searchRecyclerView.addItemDecoration(DividerItemDecoration(searchRecyclerView.context, DividerItemDecoration.VERTICAL))
|
searchRecyclerView.addItemDecoration(DividerItemDecoration(searchRecyclerView.context, DividerItemDecoration.VERTICAL))
|
||||||
|
@ -235,7 +236,8 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
|
||||||
|
|
||||||
val intent = ComposeActivity.startIntent(requireContext(), ComposeOptions(
|
val intent = ComposeActivity.startIntent(requireContext(), ComposeOptions(
|
||||||
quoteId = status.actionableId,
|
quoteId = status.actionableId,
|
||||||
quoteUrl = actionableStatus.url,
|
quoteStatusAuthor = actionableStatus.account.localUsername,
|
||||||
|
quoteStatusContent = actionableStatus.content.toString(),
|
||||||
replyVisibility = actionableStatus.visibility,
|
replyVisibility = actionableStatus.visibility,
|
||||||
contentWarning = actionableStatus.spoilerText,
|
contentWarning = actionableStatus.spoilerText,
|
||||||
mentionedUsernames = mentionedUsernames
|
mentionedUsernames = mentionedUsernames
|
||||||
|
|
|
@ -60,6 +60,7 @@ import com.keylesspalace.tusky.appstore.EventHub;
|
||||||
import com.keylesspalace.tusky.appstore.FavoriteEvent;
|
import com.keylesspalace.tusky.appstore.FavoriteEvent;
|
||||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent;
|
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent;
|
||||||
import com.keylesspalace.tusky.appstore.ReblogEvent;
|
import com.keylesspalace.tusky.appstore.ReblogEvent;
|
||||||
|
import com.keylesspalace.tusky.components.compose.ComposeViewModelKt;
|
||||||
import com.keylesspalace.tusky.db.AccountEntity;
|
import com.keylesspalace.tusky.db.AccountEntity;
|
||||||
import com.keylesspalace.tusky.db.AccountManager;
|
import com.keylesspalace.tusky.db.AccountManager;
|
||||||
import com.keylesspalace.tusky.di.Injectable;
|
import com.keylesspalace.tusky.di.Injectable;
|
||||||
|
@ -88,6 +89,7 @@ import com.keylesspalace.tusky.viewdata.StatusViewData;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -251,7 +253,8 @@ public class NotificationsFragment extends SFragment implements
|
||||||
preferences.getBoolean("showBotOverlay", true),
|
preferences.getBoolean("showBotOverlay", true),
|
||||||
preferences.getBoolean("useBlurhash", true),
|
preferences.getBoolean("useBlurhash", true),
|
||||||
CardViewMode.NONE,
|
CardViewMode.NONE,
|
||||||
preferences.getBoolean("confirmReblogs", true)
|
preferences.getBoolean("confirmReblogs", true),
|
||||||
|
Arrays.asList(ComposeViewModelKt.getCAN_USE_QUOTE_ID()).contains(accountManager.getActiveAccount().getDomain())
|
||||||
);
|
);
|
||||||
|
|
||||||
adapter = new NotificationsAdapter(accountManager.getActiveAccount().getAccountId(),
|
adapter = new NotificationsAdapter(accountManager.getActiveAccount().getAccountId(),
|
||||||
|
|
|
@ -174,7 +174,6 @@ public abstract class SFragment extends BaseFragment implements Injectable {
|
||||||
String id = status.getActionableId();
|
String id = status.getActionableId();
|
||||||
Status actionableStatus = status.getActionableStatus();
|
Status actionableStatus = status.getActionableStatus();
|
||||||
Status.Visibility visibility = actionableStatus.getVisibility();
|
Status.Visibility visibility = actionableStatus.getVisibility();
|
||||||
String url = actionableStatus.getUrl();
|
|
||||||
Status.Mention[] mentions = actionableStatus.getMentions();
|
Status.Mention[] mentions = actionableStatus.getMentions();
|
||||||
Set<String> mentionedUsernames = new LinkedHashSet<>();
|
Set<String> mentionedUsernames = new LinkedHashSet<>();
|
||||||
mentionedUsernames.add(actionableStatus.getAccount().getUsername());
|
mentionedUsernames.add(actionableStatus.getAccount().getUsername());
|
||||||
|
@ -187,12 +186,10 @@ public abstract class SFragment extends BaseFragment implements Injectable {
|
||||||
mentionedUsernames.add(mention.getUsername());
|
mentionedUsernames.add(mention.getUsername());
|
||||||
}
|
}
|
||||||
mentionedUsernames.remove(loggedInUsername);
|
mentionedUsernames.remove(loggedInUsername);
|
||||||
if (status.getReblog() != null) {
|
|
||||||
url = status.getReblog().getUrl();
|
|
||||||
}
|
|
||||||
ComposeOptions composeOptions = new ComposeOptions();
|
ComposeOptions composeOptions = new ComposeOptions();
|
||||||
composeOptions.setQuoteId(id);
|
composeOptions.setQuoteId(id);
|
||||||
composeOptions.setQuoteUrl(url);
|
composeOptions.setQuoteStatusAuthor(actionableStatus.getAccount().getLocalUsername());
|
||||||
|
composeOptions.setQuoteStatusContent(actionableStatus.getContent().toString());
|
||||||
composeOptions.setReplyVisibility(visibility);
|
composeOptions.setReplyVisibility(visibility);
|
||||||
composeOptions.setMentionedUsernames(mentionedUsernames);
|
composeOptions.setMentionedUsernames(mentionedUsernames);
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ import com.keylesspalace.tusky.appstore.StatusComposedEvent;
|
||||||
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
|
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
|
||||||
import com.keylesspalace.tusky.appstore.StreamUpdateEvent;
|
import com.keylesspalace.tusky.appstore.StreamUpdateEvent;
|
||||||
import com.keylesspalace.tusky.appstore.UnfollowEvent;
|
import com.keylesspalace.tusky.appstore.UnfollowEvent;
|
||||||
|
import com.keylesspalace.tusky.components.compose.ComposeViewModelKt;
|
||||||
import com.keylesspalace.tusky.db.AccountEntity;
|
import com.keylesspalace.tusky.db.AccountEntity;
|
||||||
import com.keylesspalace.tusky.db.AccountManager;
|
import com.keylesspalace.tusky.db.AccountManager;
|
||||||
import com.keylesspalace.tusky.di.Injectable;
|
import com.keylesspalace.tusky.di.Injectable;
|
||||||
|
@ -101,7 +102,6 @@ import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
@ -251,7 +251,8 @@ public class TimelineFragment extends SFragment implements
|
||||||
preferences.getBoolean("showCardsInTimelines", false) ?
|
preferences.getBoolean("showCardsInTimelines", false) ?
|
||||||
CardViewMode.INDENTED :
|
CardViewMode.INDENTED :
|
||||||
CardViewMode.NONE,
|
CardViewMode.NONE,
|
||||||
preferences.getBoolean("confirmReblogs", true)
|
preferences.getBoolean("confirmReblogs", true),
|
||||||
|
Arrays.asList(ComposeViewModelKt.getCAN_USE_QUOTE_ID()).contains(accountManager.getActiveAccount().getDomain())
|
||||||
);
|
);
|
||||||
adapter = new TimelineAdapter(dataSource, statusDisplayOptions, this);
|
adapter = new TimelineAdapter(dataSource, statusDisplayOptions, this);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ import com.keylesspalace.tusky.appstore.FavoriteEvent;
|
||||||
import com.keylesspalace.tusky.appstore.ReblogEvent;
|
import com.keylesspalace.tusky.appstore.ReblogEvent;
|
||||||
import com.keylesspalace.tusky.appstore.StatusComposedEvent;
|
import com.keylesspalace.tusky.appstore.StatusComposedEvent;
|
||||||
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
|
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
|
||||||
|
import com.keylesspalace.tusky.components.compose.ComposeViewModelKt;
|
||||||
import com.keylesspalace.tusky.di.Injectable;
|
import com.keylesspalace.tusky.di.Injectable;
|
||||||
import com.keylesspalace.tusky.entity.Filter;
|
import com.keylesspalace.tusky.entity.Filter;
|
||||||
import com.keylesspalace.tusky.entity.Poll;
|
import com.keylesspalace.tusky.entity.Poll;
|
||||||
|
@ -68,6 +69,7 @@ import com.keylesspalace.tusky.view.ConversationLineItemDecoration;
|
||||||
import com.keylesspalace.tusky.viewdata.StatusViewData;
|
import com.keylesspalace.tusky.viewdata.StatusViewData;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -136,7 +138,8 @@ public final class ViewThreadFragment extends SFragment implements
|
||||||
preferences.getBoolean("showCardsInTimelines", false) ?
|
preferences.getBoolean("showCardsInTimelines", false) ?
|
||||||
CardViewMode.INDENTED :
|
CardViewMode.INDENTED :
|
||||||
CardViewMode.NONE,
|
CardViewMode.NONE,
|
||||||
preferences.getBoolean("confirmReblogs", true)
|
preferences.getBoolean("confirmReblogs", true),
|
||||||
|
Arrays.asList(ComposeViewModelKt.getCAN_USE_QUOTE_ID()).contains(accountManager.getActiveAccount().getDomain())
|
||||||
);
|
);
|
||||||
adapter = new ThreadAdapter(statusDisplayOptions, this);
|
adapter = new ThreadAdapter(statusDisplayOptions, this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,5 +14,7 @@ data class StatusDisplayOptions(
|
||||||
@get:JvmName("cardViewMode")
|
@get:JvmName("cardViewMode")
|
||||||
val cardViewMode: CardViewMode,
|
val cardViewMode: CardViewMode,
|
||||||
@get:JvmName("confirmReblogs")
|
@get:JvmName("confirmReblogs")
|
||||||
val confirmReblogs: Boolean
|
val confirmReblogs: Boolean,
|
||||||
|
@get:JvmName("quoteEnabled")
|
||||||
|
val quoteEnabled: Boolean
|
||||||
)
|
)
|
|
@ -92,13 +92,31 @@
|
||||||
android:id="@+id/composeQuoteView"
|
android:id="@+id/composeQuoteView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="6dp"
|
|
||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="16dp"
|
||||||
android:layout_marginRight="16dp"
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_marginBottom="6dp"
|
||||||
android:drawablePadding="6dp"
|
android:drawablePadding="6dp"
|
||||||
android:textSize="?attr/status_text_small"
|
android:textSize="?attr/status_text_small"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:visibility="gone" />
|
android:visibility="gone"
|
||||||
|
tools:text="Quote @username"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<androidx.emoji.widget.EmojiTextView
|
||||||
|
android:id="@+id/composeQuoteContentView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="2dp"
|
||||||
|
android:background="?attr/colorBackgroundAccent"
|
||||||
|
android:lineSpacingMultiplier="1.1"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingRight="16dp"
|
||||||
|
android:paddingBottom="4dp"
|
||||||
|
android:textSize="?attr/status_text_small"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:text="Post content which may be preeettyy long, so please, make sure there's enough room for everything, okay? Not kidding. I wish Eugen answered me more often, sigh."
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/composeContentWarningBar"
|
android:id="@+id/composeContentWarningBar"
|
||||||
|
|
Loading…
Reference in New Issue