Compare commits
51 Commits
v2.1.6+for
...
v2.1.6+for
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8f0891f3a | ||
|
|
f25906a694 | ||
|
|
e52699bb1c | ||
|
|
712826451f | ||
|
|
3b3065d8bd | ||
|
|
e11fe7d8cf | ||
|
|
9a2f7475c9 | ||
|
|
6dffb10906 | ||
|
|
71039d6901 | ||
|
|
db18c7a0d0 | ||
|
|
7e80ed6af2 | ||
|
|
bdd2b90581 | ||
|
|
50d017d8ba | ||
|
|
98e003437c | ||
|
|
d5d06af614 | ||
|
|
1c930ca3bb | ||
|
|
0f0c1093d4 | ||
|
|
2ad5dc5a74 | ||
|
|
e02e0865bd | ||
|
|
59ee1af75d | ||
|
|
c04584dfa6 | ||
|
|
190a3b5b08 | ||
|
|
f5a67e65f0 | ||
|
|
498078b6e0 | ||
|
|
de8c289ca7 | ||
|
|
07b205a746 | ||
|
|
a7941310bc | ||
|
|
864b6dcdac | ||
|
|
d3744bb397 | ||
|
|
7d1853bc88 | ||
|
|
9f0db755d1 | ||
|
|
06819806be | ||
|
|
526f5e319b | ||
|
|
30a4d0efd9 | ||
|
|
d419dba44a | ||
|
|
87da6b9b81 | ||
|
|
67cc1553da | ||
|
|
9a985aad29 | ||
|
|
fd98159fce | ||
|
|
42fac30e63 | ||
|
|
18e7f14c16 | ||
|
|
7b263800a6 | ||
|
|
17387a32b2 | ||
|
|
3fe642c2f2 | ||
|
|
9225447409 | ||
|
|
e05dee64b7 | ||
|
|
7f30973b39 | ||
|
|
25da9bb2d0 | ||
|
|
e17b49e704 | ||
|
|
db661b56cb | ||
|
|
638e1bf8e9 |
@@ -15,8 +15,8 @@ android {
|
|||||||
applicationId "org.joinmastodon.android.sk"
|
applicationId "org.joinmastodon.android.sk"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 103
|
versionCode 105
|
||||||
versionName "2.1.6+fork.103"
|
versionName "2.1.6+fork.105"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
|
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ public class GlobalUserPreferences{
|
|||||||
public static boolean collapseLongPosts;
|
public static boolean collapseLongPosts;
|
||||||
public static boolean spectatorMode;
|
public static boolean spectatorMode;
|
||||||
public static boolean autoHideFab;
|
public static boolean autoHideFab;
|
||||||
public static boolean compactReblogReplyLine;
|
|
||||||
public static boolean allowRemoteLoading;
|
public static boolean allowRemoteLoading;
|
||||||
public static boolean forwardReportDefault;
|
public static boolean forwardReportDefault;
|
||||||
public static AutoRevealMode autoRevealEqualSpoilers;
|
public static AutoRevealMode autoRevealEqualSpoilers;
|
||||||
@@ -112,12 +111,11 @@ public class GlobalUserPreferences{
|
|||||||
collapseLongPosts=prefs.getBoolean("collapseLongPosts", true);
|
collapseLongPosts=prefs.getBoolean("collapseLongPosts", true);
|
||||||
spectatorMode=prefs.getBoolean("spectatorMode", false);
|
spectatorMode=prefs.getBoolean("spectatorMode", false);
|
||||||
autoHideFab=prefs.getBoolean("autoHideFab", true);
|
autoHideFab=prefs.getBoolean("autoHideFab", true);
|
||||||
compactReblogReplyLine=prefs.getBoolean("compactReblogReplyLine", true);
|
|
||||||
allowRemoteLoading=prefs.getBoolean("allowRemoteLoading", true);
|
allowRemoteLoading=prefs.getBoolean("allowRemoteLoading", true);
|
||||||
autoRevealEqualSpoilers=AutoRevealMode.valueOf(prefs.getString("autoRevealEqualSpoilers", AutoRevealMode.THREADS.name()));
|
autoRevealEqualSpoilers=AutoRevealMode.valueOf(prefs.getString("autoRevealEqualSpoilers", AutoRevealMode.THREADS.name()));
|
||||||
forwardReportDefault=prefs.getBoolean("forwardReportDefault", true);
|
forwardReportDefault=prefs.getBoolean("forwardReportDefault", true);
|
||||||
disableM3PillActiveIndicator=prefs.getBoolean("disableM3PillActiveIndicator", false);
|
disableM3PillActiveIndicator=prefs.getBoolean("disableM3PillActiveIndicator", false);
|
||||||
showNavigationLabels=prefs.getBoolean("showNavigationLabels", false);
|
showNavigationLabels=prefs.getBoolean("showNavigationLabels", true);
|
||||||
displayPronounsInTimelines=prefs.getBoolean("displayPronounsInTimelines", true);
|
displayPronounsInTimelines=prefs.getBoolean("displayPronounsInTimelines", true);
|
||||||
displayPronounsInThreads=prefs.getBoolean("displayPronounsInThreads", true);
|
displayPronounsInThreads=prefs.getBoolean("displayPronounsInThreads", true);
|
||||||
displayPronounsInUserListings=prefs.getBoolean("displayPronounsInUserListings", true);
|
displayPronounsInUserListings=prefs.getBoolean("displayPronounsInUserListings", true);
|
||||||
@@ -170,7 +168,6 @@ public class GlobalUserPreferences{
|
|||||||
.putBoolean("collapseLongPosts", collapseLongPosts)
|
.putBoolean("collapseLongPosts", collapseLongPosts)
|
||||||
.putBoolean("spectatorMode", spectatorMode)
|
.putBoolean("spectatorMode", spectatorMode)
|
||||||
.putBoolean("autoHideFab", autoHideFab)
|
.putBoolean("autoHideFab", autoHideFab)
|
||||||
.putBoolean("compactReblogReplyLine", compactReblogReplyLine)
|
|
||||||
.putBoolean("allowRemoteLoading", allowRemoteLoading)
|
.putBoolean("allowRemoteLoading", allowRemoteLoading)
|
||||||
.putString("autoRevealEqualSpoilers", autoRevealEqualSpoilers.name())
|
.putString("autoRevealEqualSpoilers", autoRevealEqualSpoilers.name())
|
||||||
.putBoolean("forwardReportDefault", forwardReportDefault)
|
.putBoolean("forwardReportDefault", forwardReportDefault)
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ import org.joinmastodon.android.MastodonApp;
|
|||||||
import org.joinmastodon.android.api.requests.statuses.SetStatusBookmarked;
|
import org.joinmastodon.android.api.requests.statuses.SetStatusBookmarked;
|
||||||
import org.joinmastodon.android.api.requests.statuses.SetStatusFavorited;
|
import org.joinmastodon.android.api.requests.statuses.SetStatusFavorited;
|
||||||
import org.joinmastodon.android.api.requests.statuses.SetStatusReblogged;
|
import org.joinmastodon.android.api.requests.statuses.SetStatusReblogged;
|
||||||
|
import org.joinmastodon.android.events.ReblogDeletedEvent;
|
||||||
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
|
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
|
||||||
|
import org.joinmastodon.android.events.StatusCreatedEvent;
|
||||||
|
import org.joinmastodon.android.events.StatusDeletedEvent;
|
||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
import org.joinmastodon.android.model.StatusPrivacy;
|
import org.joinmastodon.android.model.StatusPrivacy;
|
||||||
|
|
||||||
@@ -82,7 +85,11 @@ public class StatusInteractionController{
|
|||||||
runningReblogRequests.remove(status.id);
|
runningReblogRequests.remove(status.id);
|
||||||
result.reblogsCount = Math.max(0, status.reblogsCount + (reblogged ? 1 : -1));
|
result.reblogsCount = Math.max(0, status.reblogsCount + (reblogged ? 1 : -1));
|
||||||
cb.accept(result);
|
cb.accept(result);
|
||||||
if (updateCounters) E.post(new StatusCountersUpdatedEvent(result));
|
if(updateCounters){
|
||||||
|
E.post(new StatusCountersUpdatedEvent(result));
|
||||||
|
if(reblogged) E.post(new StatusCreatedEvent(reblog, accountID));
|
||||||
|
else E.post(new ReblogDeletedEvent(status.id, accountID));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package org.joinmastodon.android.events;
|
||||||
|
|
||||||
|
public class ReblogDeletedEvent{
|
||||||
|
public final String statusID;
|
||||||
|
public final String accountID;
|
||||||
|
|
||||||
|
public ReblogDeletedEvent(String statusID, String accountID){
|
||||||
|
this.statusID=statusID;
|
||||||
|
this.accountID=accountID;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package org.joinmastodon.android.events;
|
package org.joinmastodon.android.events;
|
||||||
|
|
||||||
import org.joinmastodon.android.model.ScheduledStatus;
|
|
||||||
|
|
||||||
public class ScheduledStatusDeletedEvent{
|
public class ScheduledStatusDeletedEvent{
|
||||||
public final String id;
|
public final String id;
|
||||||
public final String accountID;
|
public final String accountID;
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import android.text.TextWatcher;
|
|||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.text.style.BackgroundColorSpan;
|
import android.text.style.BackgroundColorSpan;
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.view.HapticFeedbackConstants;
|
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@@ -111,11 +110,11 @@ import java.time.format.DateTimeFormatter;
|
|||||||
import java.time.format.FormatStyle;
|
import java.time.format.FormatStyle;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -798,6 +797,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
||||||
inflater.inflate(editingStatus==null ? R.menu.compose : R.menu.compose_edit, menu);
|
inflater.inflate(editingStatus==null ? R.menu.compose : R.menu.compose_edit, menu);
|
||||||
@@ -828,19 +828,34 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
languageButton = wrap.findViewById(R.id.language_btn);
|
languageButton = wrap.findViewById(R.id.language_btn);
|
||||||
languageButton.setOnClickListener(v->showLanguageAlert());
|
languageButton.setOnClickListener(v->showLanguageAlert());
|
||||||
languageButton.setOnLongClickListener(v->{
|
languageButton.setOnLongClickListener(v->{
|
||||||
languageButton.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
|
|
||||||
if(!getLocalPrefs().bottomEncoding){
|
if(!getLocalPrefs().bottomEncoding){
|
||||||
getLocalPrefs().bottomEncoding=true;
|
getLocalPrefs().bottomEncoding=true;
|
||||||
getLocalPrefs().save();
|
getLocalPrefs().save();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
publishButton.post(()->publishButton.setMinimumWidth(publishButton.getWidth()));
|
||||||
|
|
||||||
publishButton.setOnClickListener(v->{
|
publishButton.setOnClickListener(v->{
|
||||||
if(GlobalUserPreferences.altTextReminders && editingStatus==null)
|
Consumer<Boolean> draftCheckComplete=(isDraft)->{
|
||||||
checkAltTextsAndPublish();
|
if(GlobalUserPreferences.altTextReminders && !isDraft) checkAltTextsAndPublish();
|
||||||
else
|
else publish();
|
||||||
publish();
|
};
|
||||||
|
|
||||||
|
boolean isAlreadyDraft=scheduledAt!=null && scheduledAt.isAfter(DRAFTS_AFTER_INSTANT);
|
||||||
|
if(editingStatus!=null && scheduledAt!=null && isAlreadyDraft) {
|
||||||
|
new M3AlertDialogBuilder(getActivity())
|
||||||
|
.setTitle(R.string.sk_save_draft)
|
||||||
|
.setMessage(R.string.sk_save_draft_message)
|
||||||
|
.setPositiveButton(R.string.save, (d, w)->draftCheckComplete.accept(isAlreadyDraft))
|
||||||
|
.setNegativeButton(R.string.publish, (d, w)->{
|
||||||
|
updateScheduledAt(null);
|
||||||
|
draftCheckComplete.accept(false);
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}else{
|
||||||
|
draftCheckComplete.accept(isAlreadyDraft);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
draftsBtn.setOnClickListener(v-> draftOptionsPopup.show());
|
draftsBtn.setOnClickListener(v-> draftOptionsPopup.show());
|
||||||
draftsBtn.setOnTouchListener(draftOptionsPopup.getDragToOpenListener());
|
draftsBtn.setOnTouchListener(draftOptionsPopup.getDragToOpenListener());
|
||||||
@@ -853,7 +868,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
: languageResolver.getDefault());
|
: languageResolver.getDefault());
|
||||||
|
|
||||||
if(isInstancePixelfed()) spoilerBtn.setVisibility(View.GONE);
|
if(isInstancePixelfed()) spoilerBtn.setVisibility(View.GONE);
|
||||||
if (isInstancePixelfed() || (editingStatus != null && scheduledStatus == null)) {
|
if(isInstancePixelfed() || (editingStatus!=null && !redraftStatus)) {
|
||||||
// editing an already published post
|
// editing an already published post
|
||||||
draftsBtn.setVisibility(View.GONE);
|
draftsBtn.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
@@ -977,7 +992,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getNavigationIconDrawableResource(){
|
protected int getNavigationIconDrawableResource(){
|
||||||
return R.drawable.ic_baseline_close_24;
|
return R.drawable.ic_fluent_dismiss_24_regular;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1053,9 +1068,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void actuallyPublish(){
|
private void actuallyPublish(){
|
||||||
actuallyPublish(false);
|
|
||||||
}
|
|
||||||
private void actuallyPublish(boolean force){
|
|
||||||
String text=mainEditText.getText().toString();
|
String text=mainEditText.getText().toString();
|
||||||
CreateStatus.Request req=new CreateStatus.Request();
|
CreateStatus.Request req=new CreateStatus.Request();
|
||||||
if("bottom".equals(postLang.encoding)){
|
if("bottom".equals(postLang.encoding)){
|
||||||
@@ -1079,19 +1091,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
req.mediaAttributes=mediaViewController.getAttachmentAttributes();
|
req.mediaAttributes=mediaViewController.getAttachmentAttributes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ask whether to publish now when editing an existing draft
|
|
||||||
if (!force && editingStatus != null && scheduledAt != null && scheduledAt.isAfter(DRAFTS_AFTER_INSTANT)) {
|
|
||||||
new M3AlertDialogBuilder(getActivity())
|
|
||||||
.setTitle(R.string.sk_save_draft)
|
|
||||||
.setMessage(R.string.sk_save_draft_message)
|
|
||||||
.setPositiveButton(R.string.save, (d, w) -> actuallyPublish(true))
|
|
||||||
.setNegativeButton(R.string.publish, (d, w) -> {
|
|
||||||
updateScheduledAt(null);
|
|
||||||
actuallyPublish();
|
|
||||||
})
|
|
||||||
.show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(replyTo!=null || (editingStatus != null && editingStatus.inReplyToId!=null)){
|
if(replyTo!=null || (editingStatus != null && editingStatus.inReplyToId!=null)){
|
||||||
req.inReplyToId=editingStatus!=null ? editingStatus.inReplyToId : replyTo.id;
|
req.inReplyToId=editingStatus!=null ? editingStatus.inReplyToId : replyTo.id;
|
||||||
}
|
}
|
||||||
@@ -1290,7 +1289,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
if(attachmentsPending) new M3AlertDialogBuilder(getActivity())
|
if(attachmentsPending) new M3AlertDialogBuilder(getActivity())
|
||||||
.setTitle(R.string.sk_unfinished_attachments)
|
.setTitle(R.string.sk_unfinished_attachments)
|
||||||
.setMessage(R.string.sk_unfinished_attachments_message)
|
.setMessage(R.string.sk_unfinished_attachments_message)
|
||||||
.setPositiveButton(R.string.edit, (d, w) -> {})
|
.setPositiveButton(R.string.ok, (d, w)->{})
|
||||||
.setNegativeButton(R.string.discard, (d, w)->Nav.finish(this))
|
.setNegativeButton(R.string.discard, (d, w)->Nav.finish(this))
|
||||||
.show();
|
.show();
|
||||||
else new M3AlertDialogBuilder(getActivity())
|
else new M3AlertDialogBuilder(getActivity())
|
||||||
|
|||||||
@@ -400,10 +400,9 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
|||||||
addListsToOverflowMenu();
|
addListsToOverflowMenu();
|
||||||
addHashtagsToOverflowMenu();
|
addHashtagsToOverflowMenu();
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && !UiUtils.isEMUI()) {
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.P && !UiUtils.isEMUI())
|
||||||
m.setGroupDividerEnabled(true);
|
m.setGroupDividerEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
|||||||
continue;
|
continue;
|
||||||
Status contentStatus=ntf.status.getContentStatus();
|
Status contentStatus=ntf.status.getContentStatus();
|
||||||
if(contentStatus.poll!=null && contentStatus.poll.id.equals(ev.poll.id)){
|
if(contentStatus.poll!=null && contentStatus.poll.id.equals(ev.poll.id)){
|
||||||
updatePoll(ntf.id, ntf.status, ev.poll);
|
updatePoll(ntf.id, contentStatus, ev.poll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -762,12 +762,13 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
getActivity(), s.getID(), account.url, false
|
getActivity(), s.getID(), account.url, false
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
menu.findItem(R.id.share).setTitle(R.string.share_user);
|
|
||||||
if(isOwnProfile) {
|
if(isOwnProfile) {
|
||||||
if (isInstancePixelfed()) menu.findItem(R.id.scheduled).setVisible(false);
|
if (isInstancePixelfed()) menu.findItem(R.id.scheduled).setVisible(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menu.findItem(R.id.manage_user_lists).setTitle(getString(R.string.sk_lists_with_user, account.getShortUsername()));
|
||||||
MenuItem mute=menu.findItem(R.id.mute);
|
MenuItem mute=menu.findItem(R.id.mute);
|
||||||
mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername()));
|
mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername()));
|
||||||
mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_0_24_regular : R.drawable.ic_fluent_speaker_off_24_regular);
|
mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_0_24_regular : R.drawable.ic_fluent_speaker_off_24_regular);
|
||||||
@@ -776,19 +777,22 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getShortUsername()));
|
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getShortUsername()));
|
||||||
menu.findItem(R.id.manage_user_lists).setVisible(relationship.following);
|
menu.findItem(R.id.manage_user_lists).setVisible(relationship.following);
|
||||||
menu.findItem(R.id.soft_block).setVisible(relationship.followedBy && !relationship.following);
|
menu.findItem(R.id.soft_block).setVisible(relationship.followedBy && !relationship.following);
|
||||||
if (relationship.following) {
|
|
||||||
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
||||||
|
if (relationship.following) {
|
||||||
hideBoosts.setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getShortUsername()));
|
hideBoosts.setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getShortUsername()));
|
||||||
hideBoosts.setIcon(relationship.showingReblogs ? R.drawable.ic_fluent_arrow_repeat_all_off_24_regular : R.drawable.ic_fluent_arrow_repeat_all_24_regular);
|
hideBoosts.setIcon(relationship.showingReblogs ? R.drawable.ic_fluent_arrow_repeat_all_off_24_regular : R.drawable.ic_fluent_arrow_repeat_all_24_regular);
|
||||||
UiUtils.insetPopupMenuIcon(getContext(), hideBoosts);
|
UiUtils.insetPopupMenuIcon(getContext(), hideBoosts);
|
||||||
menu.findItem(R.id.manage_user_lists).setTitle(getString(R.string.sk_lists_with_user, account.getShortUsername()));
|
hideBoosts.setVisible(true);
|
||||||
} else {
|
} else {
|
||||||
menu.findItem(R.id.hide_boosts).setVisible(false);
|
hideBoosts.setVisible(false);
|
||||||
|
}
|
||||||
|
MenuItem blockDomain=menu.findItem(R.id.block_domain);
|
||||||
|
if(!account.isLocal()){
|
||||||
|
blockDomain.setTitle(getString(relationship.domainBlocking ? R.string.unblock_domain : R.string.block_domain, account.getDomain()));
|
||||||
|
blockDomain.setVisible(true);
|
||||||
|
}else{
|
||||||
|
blockDomain.setVisible(false);
|
||||||
}
|
}
|
||||||
if(!account.isLocal())
|
|
||||||
menu.findItem(R.id.block_domain).setTitle(getString(relationship.domainBlocking ? R.string.unblock_domain : R.string.block_domain, account.getDomain()));
|
|
||||||
else
|
|
||||||
menu.findItem(R.id.block_domain).setVisible(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -800,11 +804,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
intent.putExtra(Intent.EXTRA_TEXT, account.url);
|
intent.putExtra(Intent.EXTRA_TEXT, account.url);
|
||||||
startActivity(Intent.createChooser(intent, item.getTitle()));
|
startActivity(Intent.createChooser(intent, item.getTitle()));
|
||||||
}else if(id==R.id.mute){
|
}else if(id==R.id.mute){
|
||||||
confirmToggleMuted();
|
UiUtils.confirmToggleMuteUser(getActivity(), accountID, account, relationship.muting, this::updateRelationship);
|
||||||
}else if(id==R.id.block){
|
}else if(id==R.id.block){
|
||||||
confirmToggleBlocked();
|
UiUtils.confirmToggleBlockUser(getActivity(), accountID, account, relationship.blocking, this::updateRelationship);
|
||||||
}else if(id==R.id.soft_block){
|
}else if(id==R.id.soft_block){
|
||||||
confirmSoftBlockUser();
|
UiUtils.confirmSoftBlockUser(getActivity(), accountID, account, this::updateRelationship);
|
||||||
}else if(id==R.id.report){
|
}else if(id==R.id.report){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
@@ -1101,7 +1105,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
updateMetadataHeight();
|
updateMetadataHeight();
|
||||||
|
|
||||||
Toolbar toolbar=getToolbar();
|
Toolbar toolbar=getToolbar();
|
||||||
Drawable close=getToolbarContext().getDrawable(R.drawable.ic_baseline_close_24).mutate();
|
Drawable close=getToolbarContext().getDrawable(R.drawable.ic_fluent_dismiss_24_regular).mutate();
|
||||||
close.setTint(UiUtils.getThemeColor(getToolbarContext(), R.attr.colorM3OnSurfaceVariant));
|
close.setTint(UiUtils.getThemeColor(getToolbarContext(), R.attr.colorM3OnSurfaceVariant));
|
||||||
toolbar.setNavigationIcon(close);
|
toolbar.setNavigationIcon(close);
|
||||||
toolbar.setNavigationContentDescription(R.string.discard);
|
toolbar.setNavigationContentDescription(R.string.discard);
|
||||||
@@ -1207,18 +1211,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void confirmToggleMuted(){
|
|
||||||
UiUtils.confirmToggleMuteUser(getActivity(), accountID, account, relationship.muting, this::updateRelationship);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void confirmToggleBlocked(){
|
|
||||||
UiUtils.confirmToggleBlockUser(getActivity(), accountID, account, relationship.blocking, this::updateRelationship);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void confirmSoftBlockUser(){
|
|
||||||
UiUtils.confirmSoftBlockUser(getActivity(), accountID, account, this::updateRelationship);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateRelationship(Relationship r){
|
private void updateRelationship(Relationship r){
|
||||||
relationship=r;
|
relationship=r;
|
||||||
updateRelationship();
|
updateRelationship();
|
||||||
|
|||||||
@@ -119,6 +119,15 @@ public class ScheduledStatusListFragment extends BaseStatusListFragment<Schedule
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onShown(){
|
||||||
|
super.onShown();
|
||||||
|
// because, for some reason, when navigating back from compose fragment,
|
||||||
|
// match_parent would otherwise be incorrect (leaving a gap for the keyboard
|
||||||
|
// where there is none)
|
||||||
|
list.post(list::requestLayout);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doLoadData(int offset, int count){
|
protected void doLoadData(int offset, int count){
|
||||||
currentRequest=new GetScheduledStatuses(offset==0 ? null : nextMaxID, count)
|
currentRequest=new GetScheduledStatuses(offset==0 ? null : nextMaxID, count)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
|||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent;
|
import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent;
|
||||||
import org.joinmastodon.android.events.PollUpdatedEvent;
|
import org.joinmastodon.android.events.PollUpdatedEvent;
|
||||||
|
import org.joinmastodon.android.events.ReblogDeletedEvent;
|
||||||
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
|
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
|
||||||
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
|
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
|
||||||
import org.joinmastodon.android.events.StatusCreatedEvent;
|
import org.joinmastodon.android.events.StatusCreatedEvent;
|
||||||
@@ -28,6 +29,7 @@ import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
|||||||
import org.parceler.Parcels;
|
import org.parceler.Parcels;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -142,12 +144,12 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Status getContentStatusByID(String id){
|
public Status getContentStatusByID(String id){
|
||||||
Status s=getStatusByID(id);
|
Status s=getStatusByID(id);
|
||||||
return s==null ? null : s.getContentStatus();
|
return s==null ? null : s.getContentStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Status getStatusByID(String id){
|
public Status getStatusByID(String id){
|
||||||
for(Status s:data){
|
for(Status s:data){
|
||||||
if(s.id.equals(id)){
|
if(s.id.equals(id)){
|
||||||
return s;
|
return s;
|
||||||
@@ -174,43 +176,58 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeStatus(Status status){
|
private void iterateRemoveStatus(List<Status> l, String id){
|
||||||
data.remove(status);
|
Iterator<Status> it=l.iterator();
|
||||||
preloadedData.remove(status);
|
while(it.hasNext()){
|
||||||
int index=-1, ancestorFirstIndex = -1, ancestorLastIndex = -1;
|
if(it.next().getContentStatus().id.equals(id)){
|
||||||
for(int i=0;i<displayItems.size();i++){
|
it.remove();
|
||||||
StatusDisplayItem item = displayItems.get(i);
|
|
||||||
if(status.id.equals(item.parentID)){
|
|
||||||
index=i;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (item.parentID.equals(status.inReplyToId)) {
|
|
||||||
if (ancestorFirstIndex == -1) ancestorFirstIndex = i;
|
|
||||||
ancestorLastIndex = i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex, boolean deleteContent){
|
||||||
// did we find an ancestor that is also the status' neighbor?
|
// did we find an ancestor that is also the status' neighbor?
|
||||||
if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){
|
if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){
|
||||||
for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){
|
for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){
|
||||||
StatusDisplayItem item=displayItems.get(i);
|
StatusDisplayItem item=displayItems.get(i);
|
||||||
|
String id=deleteContent ? item.getContentID() : item.parentID;
|
||||||
// update ancestor to have no descendant anymore
|
// update ancestor to have no descendant anymore
|
||||||
if (item.parentID.equals(status.inReplyToId)) item.hasDescendantNeighbor = false;
|
if(id.equals(status.inReplyToId)) item.hasDescendantNeighbor=false;
|
||||||
}
|
}
|
||||||
adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex-ancestorFirstIndex+1);
|
adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex-ancestorFirstIndex+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(index==-1)
|
if(index==-1) return;
|
||||||
return;
|
|
||||||
int lastIndex;
|
int lastIndex;
|
||||||
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
|
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
|
||||||
if(!displayItems.get(lastIndex).parentID.equals(status.id))
|
StatusDisplayItem item=displayItems.get(lastIndex);
|
||||||
break;
|
String id=deleteContent ? item.getContentID() : item.parentID;
|
||||||
|
if(!id.equals(status.id)) break;
|
||||||
}
|
}
|
||||||
displayItems.subList(index, lastIndex).clear();
|
displayItems.subList(index, lastIndex).clear();
|
||||||
adapter.notifyItemRangeRemoved(index, lastIndex-index);
|
adapter.notifyItemRangeRemoved(index, lastIndex-index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void removeStatus(Status status){
|
||||||
|
boolean deleteContent=status==status.getContentStatus();
|
||||||
|
int ancestorFirstIndex=-1, ancestorLastIndex=-1;
|
||||||
|
for(int i=0;i<displayItems.size();i++){
|
||||||
|
StatusDisplayItem item=displayItems.get(i);
|
||||||
|
String id=deleteContent ? item.getContentID() : item.parentID;
|
||||||
|
if(id.equals(status.id)){
|
||||||
|
removeStatusDisplayItems(status, i, ancestorFirstIndex, ancestorLastIndex, deleteContent);
|
||||||
|
ancestorFirstIndex=ancestorLastIndex=-1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(id.equals(status.inReplyToId)){
|
||||||
|
if(ancestorFirstIndex==-1) ancestorFirstIndex=i;
|
||||||
|
ancestorLastIndex=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iterateRemoveStatus(data, status.id);
|
||||||
|
iterateRemoveStatus(preloadedData, status.id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newConfig) {
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
@@ -277,6 +294,18 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
|||||||
removeStatus(status);
|
removeStatus(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onReblogDeleted(ReblogDeletedEvent ev){
|
||||||
|
if(!ev.accountID.equals(accountID))
|
||||||
|
return;
|
||||||
|
for(Status item : data){
|
||||||
|
if(item.getContentStatus().id.equals(ev.statusID) && item.reblog!=null){
|
||||||
|
removeStatus(item);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusCreated(StatusCreatedEvent ev){
|
public void onStatusCreated(StatusCreatedEvent ev){
|
||||||
if(!ev.accountID.equals(accountID))
|
if(!ev.accountID.equals(accountID))
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.graphics.Rect;
|
|||||||
import android.graphics.drawable.Animatable;
|
import android.graphics.drawable.Animatable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -65,6 +66,8 @@ public class DiscoverAccountsFragment extends MastodonRecyclerFragment<DiscoverA
|
|||||||
public void onCreate(Bundle savedInstanceState){
|
public void onCreate(Bundle savedInstanceState){
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
accountID=getArguments().getString("account");
|
accountID=getArguments().getString("account");
|
||||||
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
|
||||||
|
setRetainInstance(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package org.joinmastodon.android.fragments.discover;
|
|||||||
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@@ -14,14 +14,12 @@ import org.joinmastodon.android.api.requests.trends.GetTrendingLinks;
|
|||||||
import org.joinmastodon.android.fragments.ScrollableToTop;
|
import org.joinmastodon.android.fragments.ScrollableToTop;
|
||||||
import org.joinmastodon.android.model.Card;
|
import org.joinmastodon.android.model.Card;
|
||||||
import org.joinmastodon.android.model.viewmodel.CardViewModel;
|
import org.joinmastodon.android.model.viewmodel.CardViewModel;
|
||||||
import org.joinmastodon.android.ui.DividerItemDecoration;
|
|
||||||
import org.joinmastodon.android.ui.OutlineProviders;
|
import org.joinmastodon.android.ui.OutlineProviders;
|
||||||
import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable;
|
import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable;
|
||||||
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
|
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -32,11 +30,9 @@ import me.grishka.appkit.api.SimpleCallback;
|
|||||||
import me.grishka.appkit.fragments.BaseRecyclerFragment;
|
import me.grishka.appkit.fragments.BaseRecyclerFragment;
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||||
import me.grishka.appkit.imageloader.ListImageLoaderAdapter;
|
|
||||||
import me.grishka.appkit.imageloader.ListImageLoaderWrapper;
|
import me.grishka.appkit.imageloader.ListImageLoaderWrapper;
|
||||||
import me.grishka.appkit.imageloader.RecyclerViewDelegate;
|
import me.grishka.appkit.imageloader.RecyclerViewDelegate;
|
||||||
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
||||||
import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest;
|
|
||||||
import me.grishka.appkit.utils.BindableViewHolder;
|
import me.grishka.appkit.utils.BindableViewHolder;
|
||||||
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
||||||
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
||||||
@@ -60,6 +56,8 @@ public class DiscoverNewsFragment extends BaseRecyclerFragment<CardViewModel> im
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
accountID=getArguments().getString("account");
|
accountID=getArguments().getString("account");
|
||||||
bannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.TRENDING_LINKS, accountID);
|
bannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.TRENDING_LINKS, accountID);
|
||||||
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
|
||||||
|
setRetainInstance(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.joinmastodon.android.fragments.discover;
|
package org.joinmastodon.android.fragments.discover;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -9,8 +10,6 @@ import org.joinmastodon.android.R;
|
|||||||
import org.joinmastodon.android.api.requests.trends.GetTrendingHashtags;
|
import org.joinmastodon.android.api.requests.trends.GetTrendingHashtags;
|
||||||
import org.joinmastodon.android.fragments.ScrollableToTop;
|
import org.joinmastodon.android.fragments.ScrollableToTop;
|
||||||
import org.joinmastodon.android.model.Hashtag;
|
import org.joinmastodon.android.model.Hashtag;
|
||||||
import org.joinmastodon.android.ui.DividerItemDecoration;
|
|
||||||
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
|
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.joinmastodon.android.ui.views.HashtagChartView;
|
import org.joinmastodon.android.ui.views.HashtagChartView;
|
||||||
|
|
||||||
@@ -34,6 +33,8 @@ public class TrendingHashtagsFragment extends BaseRecyclerFragment<Hashtag> impl
|
|||||||
public void onCreate(Bundle savedInstanceState){
|
public void onCreate(Bundle savedInstanceState){
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
accountID=getArguments().getString("account");
|
accountID=getArguments().getString("account");
|
||||||
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N)
|
||||||
|
setRetainInstance(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -83,9 +83,10 @@ public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateFilteredList(){
|
protected void updateFilteredList(){
|
||||||
boolean addFakeInstance = currentSearchQuery.length()>0 && currentSearchQuery.matches("^\\S+\\.[^\\.]+$");
|
String query=getCurrentSearchQuery();
|
||||||
|
boolean addFakeInstance=query.length()>0 && query.matches("^\\S+\\.[^\\.]+$");
|
||||||
if(addFakeInstance){
|
if(addFakeInstance){
|
||||||
fakeInstance.domain=fakeInstance.normalizedDomain=currentSearchQuery;
|
fakeInstance.domain=fakeInstance.normalizedDomain=query;
|
||||||
fakeInstance.description=getString(R.string.loading_instance);
|
fakeInstance.description=getString(R.string.loading_instance);
|
||||||
if(filteredData.size()>0 && filteredData.get(0)==fakeInstance){
|
if(filteredData.size()>0 && filteredData.get(0)==fakeInstance){
|
||||||
if(list.findViewHolderForAdapterPosition(1) instanceof InstanceViewHolder ivh){
|
if(list.findViewHolderForAdapterPosition(1) instanceof InstanceViewHolder ivh){
|
||||||
@@ -99,12 +100,12 @@ public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
|||||||
}
|
}
|
||||||
ArrayList<CatalogInstance> prevData=new ArrayList<>(filteredData);
|
ArrayList<CatalogInstance> prevData=new ArrayList<>(filteredData);
|
||||||
filteredData.clear();
|
filteredData.clear();
|
||||||
if(currentSearchQuery.length()>0){
|
if(query.length()>0){
|
||||||
boolean foundExactMatch=false;
|
boolean foundExactMatch=false;
|
||||||
for(CatalogInstance inst:data){
|
for(CatalogInstance inst:data){
|
||||||
if(inst.normalizedDomain.contains(currentSearchQuery)){
|
if(inst.normalizedDomain.contains(query)){
|
||||||
filteredData.add(inst);
|
filteredData.add(inst);
|
||||||
if(inst.normalizedDomain.equals(currentSearchQuery))
|
if(inst.normalizedDomain.equals(query))
|
||||||
foundExactMatch=true;
|
foundExactMatch=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,10 +93,10 @@ abstract class InstanceCatalogFragment extends MastodonRecyclerFragment<CatalogI
|
|||||||
currentSearchQuery=searchEdit.getText().toString().toLowerCase().trim();
|
currentSearchQuery=searchEdit.getText().toString().toLowerCase().trim();
|
||||||
updateFilteredList();
|
updateFilteredList();
|
||||||
searchEdit.removeCallbacks(searchDebouncer);
|
searchEdit.removeCallbacks(searchDebouncer);
|
||||||
Instance instance=instancesCache.get(normalizeInstanceDomain(currentSearchQuery));
|
Instance instance=instancesCache.get(normalizeInstanceDomain(getCurrentSearchQuery()));
|
||||||
if(instance==null){
|
if(instance==null){
|
||||||
showProgressDialog();
|
showProgressDialog();
|
||||||
loadInstanceInfo(currentSearchQuery, false);
|
loadInstanceInfo(getCurrentSearchQuery(), false);
|
||||||
}else{
|
}else{
|
||||||
proceedWithAuthOrSignup(instance);
|
proceedWithAuthOrSignup(instance);
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ abstract class InstanceCatalogFragment extends MastodonRecyclerFragment<CatalogI
|
|||||||
protected void onSearchChangedDebounced(){
|
protected void onSearchChangedDebounced(){
|
||||||
currentSearchQuery=searchEdit.getText().toString().toLowerCase().trim();
|
currentSearchQuery=searchEdit.getText().toString().toLowerCase().trim();
|
||||||
updateFilteredList();
|
updateFilteredList();
|
||||||
loadInstanceInfo(currentSearchQuery, false);
|
loadInstanceInfo(getCurrentSearchQuery(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<CatalogInstance> sortInstances(List<CatalogInstance> result){
|
protected List<CatalogInstance> sortInstances(List<CatalogInstance> result){
|
||||||
@@ -126,9 +126,16 @@ abstract class InstanceCatalogFragment extends MastodonRecyclerFragment<CatalogI
|
|||||||
instanceProgressDialog.show();
|
instanceProgressDialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getCurrentSearchQuery(){
|
||||||
|
String[] parts=currentSearchQuery.split("@");
|
||||||
|
return parts.length>0 ? parts[parts.length-1] : "";
|
||||||
|
}
|
||||||
|
|
||||||
protected String normalizeInstanceDomain(String _domain){
|
protected String normalizeInstanceDomain(String _domain){
|
||||||
if(TextUtils.isEmpty(_domain))
|
if(TextUtils.isEmpty(_domain))
|
||||||
return null;
|
return null;
|
||||||
|
String[] parts=_domain.split("@");
|
||||||
|
_domain=parts[parts.length - 1];
|
||||||
if(_domain.contains(":")){
|
if(_domain.contains(":")){
|
||||||
try{
|
try{
|
||||||
_domain=Uri.parse(_domain).getAuthority();
|
_domain=Uri.parse(_domain).getAuthority();
|
||||||
@@ -198,7 +205,7 @@ abstract class InstanceCatalogFragment extends MastodonRecyclerFragment<CatalogI
|
|||||||
instanceProgressDialog=null;
|
instanceProgressDialog=null;
|
||||||
proceedWithAuthOrSignup(result);
|
proceedWithAuthOrSignup(result);
|
||||||
}
|
}
|
||||||
if(Objects.equals(domain, currentSearchQuery) || Objects.equals(currentSearchQuery, redirects.get(domain)) || Objects.equals(currentSearchQuery, redirectsInverse.get(domain))){
|
if(Objects.equals(domain, getCurrentSearchQuery()) || Objects.equals(getCurrentSearchQuery(), redirects.get(domain)) || Objects.equals(getCurrentSearchQuery(), redirectsInverse.get(domain))){
|
||||||
boolean found=false;
|
boolean found=false;
|
||||||
for(CatalogInstance ci:filteredData){
|
for(CatalogInstance ci:filteredData){
|
||||||
if(ci.domain.equals(domain) && ci!=fakeInstance){
|
if(ci.domain.equals(domain) && ci!=fakeInstance){
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ public class ReportDoneFragment extends MastodonToolbarFragment{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getNavigationIconDrawableResource(){
|
protected int getNavigationIconDrawableResource(){
|
||||||
return R.drawable.ic_baseline_close_24;
|
return R.drawable.ic_fluent_dismiss_24_regular;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
|||||||
GlobalUserPreferences.overlayMedia=overlayMediaItem.checked;
|
GlobalUserPreferences.overlayMedia=overlayMediaItem.checked;
|
||||||
GlobalUserPreferences.useCustomTabs=customTabsItem.checked;
|
GlobalUserPreferences.useCustomTabs=customTabsItem.checked;
|
||||||
GlobalUserPreferences.altTextReminders=altTextItem.checked;
|
GlobalUserPreferences.altTextReminders=altTextItem.checked;
|
||||||
GlobalUserPreferences.confirmUnfollow=customTabsItem.checked;
|
GlobalUserPreferences.confirmUnfollow=confirmUnfollowItem.checked;
|
||||||
GlobalUserPreferences.confirmBoost=confirmBoostItem.checked;
|
GlobalUserPreferences.confirmBoost=confirmBoostItem.checked;
|
||||||
GlobalUserPreferences.confirmDeletePost=confirmDeleteItem.checked;
|
GlobalUserPreferences.confirmDeletePost=confirmDeleteItem.checked;
|
||||||
GlobalUserPreferences.forwardReportDefault=forwardReportsItem.checked;
|
GlobalUserPreferences.forwardReportDefault=forwardReportsItem.checked;
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class SearchViewHelper{
|
|||||||
searchLayout.addView(searchEdit, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
|
searchLayout.addView(searchEdit, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
|
||||||
|
|
||||||
clearSearchButton=new ImageButton(context);
|
clearSearchButton=new ImageButton(context);
|
||||||
clearSearchButton.setImageResource(R.drawable.ic_baseline_close_24);
|
clearSearchButton.setImageResource(R.drawable.ic_fluent_dismiss_24_regular);
|
||||||
clearSearchButton.setContentDescription(context.getString(R.string.clear));
|
clearSearchButton.setContentDescription(context.getString(R.string.clear));
|
||||||
clearSearchButton.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(context, R.attr.colorM3OnSurfaceVariant)));
|
clearSearchButton.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(context, R.attr.colorM3OnSurfaceVariant)));
|
||||||
clearSearchButton.setBackground(UiUtils.getThemeDrawable(toolbarContext, android.R.attr.actionBarItemBackground));
|
clearSearchButton.setBackground(UiUtils.getThemeDrawable(toolbarContext, android.R.attr.actionBarItemBackground));
|
||||||
|
|||||||
@@ -1,24 +1,17 @@
|
|||||||
package org.joinmastodon.android.ui.displayitems;
|
package org.joinmastodon.android.ui.displayitems;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.Card;
|
|
||||||
import org.joinmastodon.android.model.Status;
|
|
||||||
import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable;
|
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
|
||||||
|
|
||||||
public class FileStatusDisplayItem extends StatusDisplayItem{
|
public class FileStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final Attachment attachment;
|
private final Attachment attachment;
|
||||||
|
|
||||||
|
|||||||
@@ -172,7 +172,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
} else if (action == MotionEvent.ACTION_DOWN) {
|
} else if (action == MotionEvent.ACTION_DOWN) {
|
||||||
longClickPerformed = false;
|
longClickPerformed = false;
|
||||||
touchingView = v;
|
touchingView = v;
|
||||||
v.setPivotX(V.sp(28));
|
|
||||||
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start();
|
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start();
|
||||||
if (disabled) return true;
|
if (disabled) return true;
|
||||||
v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
|
v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import me.grishka.appkit.utils.V;
|
|||||||
|
|
||||||
public class GapStatusDisplayItem extends StatusDisplayItem{
|
public class GapStatusDisplayItem extends StatusDisplayItem{
|
||||||
public boolean loading;
|
public boolean loading;
|
||||||
private Status status;
|
private final Status status;
|
||||||
|
|
||||||
public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){
|
public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){
|
||||||
super(parentID, parentFragment);
|
super(parentID, parentFragment);
|
||||||
|
|||||||
@@ -209,7 +209,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}else if(item.scheduledStatus!=null){
|
}else if(item.scheduledStatus!=null){
|
||||||
args.putString("sourceText", item.status.text);
|
args.putString("sourceText", item.status.text);
|
||||||
args.putString("sourceSpoiler", item.status.spoilerText);
|
args.putString("sourceSpoiler", item.status.spoilerText);
|
||||||
args.putBoolean("redraftStatus", true);
|
|
||||||
args.putParcelable("scheduledStatus", Parcels.wrap(item.scheduledStatus));
|
args.putParcelable("scheduledStatus", Parcels.wrap(item.scheduledStatus));
|
||||||
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
|
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
|
||||||
}else{
|
}else{
|
||||||
@@ -243,7 +242,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
if (item.scheduledStatus != null) {
|
if (item.scheduledStatus != null) {
|
||||||
UiUtils.confirmDeleteScheduledPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.scheduledStatus, ()->{});
|
UiUtils.confirmDeleteScheduledPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.scheduledStatus, ()->{});
|
||||||
} else {
|
} else {
|
||||||
UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{});
|
UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{}, false);
|
||||||
}
|
}
|
||||||
}else if(id==R.id.pin || id==R.id.unpin) {
|
}else if(id==R.id.pin || id==R.id.unpin) {
|
||||||
UiUtils.confirmPinPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, !item.status.pinned, s->{});
|
UiUtils.confirmPinPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, !item.status.pinned, s->{});
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ import android.text.SpannableStringBuilder;
|
|||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
@@ -40,7 +38,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private StatusPrivacy visibility;
|
private StatusPrivacy visibility;
|
||||||
@DrawableRes
|
@DrawableRes
|
||||||
private int iconEnd;
|
private int iconEnd;
|
||||||
private CustomEmojiHelper emojiHelper=new CustomEmojiHelper(), fullTextEmojiHelper;
|
private CustomEmojiHelper emojiHelper=new CustomEmojiHelper();
|
||||||
private View.OnClickListener handleClick;
|
private View.OnClickListener handleClick;
|
||||||
public boolean needBottomPadding;
|
public boolean needBottomPadding;
|
||||||
ReblogOrReplyLineStatusDisplayItem extra;
|
ReblogOrReplyLineStatusDisplayItem extra;
|
||||||
@@ -58,21 +56,13 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
HtmlParser.parseCustomEmoji(ssb, emojis);
|
HtmlParser.parseCustomEmoji(ssb, emojis);
|
||||||
this.text=ssb;
|
this.text=ssb;
|
||||||
emojiHelper.setText(ssb);
|
emojiHelper.setText(ssb);
|
||||||
|
this.fullText=fullText;
|
||||||
this.icon=icon;
|
this.icon=icon;
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.handleClick=handleClick;
|
this.handleClick=handleClick;
|
||||||
TypedValue outValue = new TypedValue();
|
TypedValue outValue = new TypedValue();
|
||||||
context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
|
context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
|
||||||
updateVisibility(visibility);
|
updateVisibility(visibility);
|
||||||
|
|
||||||
if (fullText != null) {
|
|
||||||
fullTextEmojiHelper = new CustomEmojiHelper();
|
|
||||||
SpannableStringBuilder fullTextSsb = new SpannableStringBuilder(fullText);
|
|
||||||
HtmlParser.parseCustomEmoji(fullTextSsb, emojis);
|
|
||||||
this.fullText=fullTextSsb;
|
|
||||||
fullTextEmojiHelper.setText(fullTextSsb);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateVisibility(StatusPrivacy visibility) {
|
public void updateVisibility(StatusPrivacy visibility) {
|
||||||
@@ -92,34 +82,27 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getImageCount(){
|
public int getImageCount(){
|
||||||
return emojiHelper.getImageCount();
|
return emojiHelper.getImageCount() + (extra!=null ? extra.emojiHelper.getImageCount() : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ImageLoaderRequest getImageRequest(int index){
|
public ImageLoaderRequest getImageRequest(int index){
|
||||||
return emojiHelper.getImageRequest(index);
|
CustomEmojiHelper helper=index<emojiHelper.getImageCount() ? emojiHelper : extra.emojiHelper;
|
||||||
|
return helper.getImageRequest(index%emojiHelper.getImageCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Holder extends StatusDisplayItem.Holder<ReblogOrReplyLineStatusDisplayItem> implements ImageLoaderViewHolder{
|
public static class Holder extends StatusDisplayItem.Holder<ReblogOrReplyLineStatusDisplayItem> implements ImageLoaderViewHolder{
|
||||||
private final TextView text, extraText;
|
private final TextView text, extraText;
|
||||||
private final View separator;
|
private final View separator;
|
||||||
private final ViewGroup parent;
|
|
||||||
|
|
||||||
public Holder(Activity activity, ViewGroup parent){
|
public Holder(Activity activity, ViewGroup parent){
|
||||||
super(activity, R.layout.display_item_reblog_or_reply_line, parent);
|
super(activity, R.layout.display_item_reblog_or_reply_line, parent);
|
||||||
this.parent = parent;
|
|
||||||
text=findViewById(R.id.text);
|
text=findViewById(R.id.text);
|
||||||
extraText=findViewById(R.id.extra_text);
|
extraText=findViewById(R.id.extra_text);
|
||||||
separator=findViewById(R.id.separator);
|
separator=findViewById(R.id.separator);
|
||||||
if (GlobalUserPreferences.compactReblogReplyLine) {
|
|
||||||
parent.addOnLayoutChangeListener((v, l, t, right, b, ol, ot, oldRight, ob) -> {
|
|
||||||
if (right != oldRight) layoutLine();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindLine(ReblogOrReplyLineStatusDisplayItem item, TextView text) {
|
private void bindLine(ReblogOrReplyLineStatusDisplayItem item, TextView text) {
|
||||||
if (item.fullText != null) text.setContentDescription(item.fullText);
|
|
||||||
text.setText(item.text);
|
text.setText(item.text);
|
||||||
text.setCompoundDrawablesRelativeWithIntrinsicBounds(item.icon, 0, item.iconEnd, 0);
|
text.setCompoundDrawablesRelativeWithIntrinsicBounds(item.icon, 0, item.iconEnd, 0);
|
||||||
text.setOnClickListener(item.handleClick);
|
text.setOnClickListener(item.handleClick);
|
||||||
@@ -133,7 +116,10 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
case LOCAL -> R.string.sk_local_only;
|
case LOCAL -> R.string.sk_local_only;
|
||||||
default -> 0;
|
default -> 0;
|
||||||
} : 0;
|
} : 0;
|
||||||
if (visibilityText != 0) text.setContentDescription(item.text + " (" + ctx.getString(visibilityText) + ")");
|
String visibilityDescription=visibilityText!=0 ? " (" + ctx.getString(visibilityText) + ")" : null;
|
||||||
|
text.setContentDescription(item.fullText==null && visibilityDescription==null ? null :
|
||||||
|
(item.fullText!=null ? item.fullText : item.text)
|
||||||
|
+ (visibilityDescription!=null ? visibilityDescription : ""));
|
||||||
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.N)
|
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.N)
|
||||||
UiUtils.fixCompoundDrawableTintOnAndroid6(text);
|
UiUtils.fixCompoundDrawableTintOnAndroid6(text);
|
||||||
text.setCompoundDrawableTintList(text.getTextColors());
|
text.setCompoundDrawableTintList(text.getTextColors());
|
||||||
@@ -146,31 +132,14 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
extraText.setVisibility(item.extra == null ? View.GONE : View.VISIBLE);
|
extraText.setVisibility(item.extra == null ? View.GONE : View.VISIBLE);
|
||||||
separator.setVisibility(item.extra == null ? View.GONE : View.VISIBLE);
|
separator.setVisibility(item.extra == null ? View.GONE : View.VISIBLE);
|
||||||
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
|
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
|
||||||
layoutLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void layoutLine() {
|
|
||||||
// layout line only if above header, compact and has extra
|
|
||||||
if (!GlobalUserPreferences.compactReblogReplyLine || item.extra == null) return;
|
|
||||||
itemView.measure(
|
|
||||||
View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY),
|
|
||||||
View.MeasureSpec.UNSPECIFIED);
|
|
||||||
boolean isVertical = ((LinearLayout) itemView).getOrientation() == LinearLayout.VERTICAL;
|
|
||||||
extraText.setPaddingRelative(extraText.getPaddingStart(), item.extra != null && isVertical ? 0 : V.dp(16), extraText.getPaddingEnd(), extraText.getPaddingBottom());
|
|
||||||
separator.setVisibility(item.extra != null && !isVertical ? View.VISIBLE : View.GONE);
|
|
||||||
((LinearLayout) itemView).removeView(extraText);
|
|
||||||
if (isVertical) ((LinearLayout) itemView).addView(extraText);
|
|
||||||
else ((LinearLayout) itemView).addView(extraText, 0);
|
|
||||||
text.setText(isVertical ? item.fullText : item.text);
|
|
||||||
if (item.extra != null) {
|
|
||||||
extraText.setText(isVertical ? item.extra.fullText : item.extra.text);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setImage(int index, Drawable image){
|
public void setImage(int index, Drawable image){
|
||||||
item.emojiHelper.setImageDrawable(index, image);
|
CustomEmojiHelper helper=index<item.emojiHelper.getImageCount() ? item.emojiHelper : item.extra.emojiHelper;
|
||||||
|
helper.setImageDrawable(index%item.emojiHelper.getImageCount(), image);
|
||||||
text.invalidate();
|
text.invalidate();
|
||||||
|
extraText.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import android.text.TextUtils;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
||||||
@@ -22,6 +24,7 @@ import org.joinmastodon.android.fragments.HashtagTimelineFragment;
|
|||||||
import org.joinmastodon.android.fragments.HomeTabFragment;
|
import org.joinmastodon.android.fragments.HomeTabFragment;
|
||||||
import org.joinmastodon.android.fragments.ListTimelineFragment;
|
import org.joinmastodon.android.fragments.ListTimelineFragment;
|
||||||
import org.joinmastodon.android.fragments.ProfileFragment;
|
import org.joinmastodon.android.fragments.ProfileFragment;
|
||||||
|
import org.joinmastodon.android.fragments.StatusListFragment;
|
||||||
import org.joinmastodon.android.fragments.ThreadFragment;
|
import org.joinmastodon.android.fragments.ThreadFragment;
|
||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
@@ -88,6 +91,16 @@ public abstract class StatusDisplayItem{
|
|||||||
this.parentFragment=parentFragment;
|
this.parentFragment=parentFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public String getContentID(){
|
||||||
|
if(parentFragment instanceof StatusListFragment slf){
|
||||||
|
Status s=slf.getContentStatusByID(parentID);
|
||||||
|
return s!=null ? s.id : parentID;
|
||||||
|
}else{
|
||||||
|
return parentID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public abstract Type getType();
|
public abstract Type getType();
|
||||||
|
|
||||||
public int getImageCount(){
|
public int getImageCount(){
|
||||||
@@ -129,7 +142,7 @@ public abstract class StatusDisplayItem{
|
|||||||
String parentID = parent.getID();
|
String parentID = parent.getID();
|
||||||
String text = threadReply ? fragment.getString(R.string.sk_show_thread)
|
String text = threadReply ? fragment.getString(R.string.sk_show_thread)
|
||||||
: account == null ? fragment.getString(R.string.sk_in_reply)
|
: account == null ? fragment.getString(R.string.sk_in_reply)
|
||||||
: GlobalUserPreferences.compactReblogReplyLine && status.reblog != null ? account.displayName
|
: status.reblog != null ? account.displayName
|
||||||
: fragment.getString(R.string.in_reply_to, account.displayName);
|
: fragment.getString(R.string.in_reply_to, account.displayName);
|
||||||
String fullText = threadReply ? fragment.getString(R.string.sk_show_thread)
|
String fullText = threadReply ? fragment.getString(R.string.sk_show_thread)
|
||||||
: account == null ? fragment.getString(R.string.sk_in_reply)
|
: account == null ? fragment.getString(R.string.sk_in_reply)
|
||||||
@@ -164,7 +177,7 @@ public abstract class StatusDisplayItem{
|
|||||||
if(status.reblog!=null){
|
if(status.reblog!=null){
|
||||||
boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account);
|
boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account);
|
||||||
String fullText = fragment.getString(R.string.user_boosted, status.account.displayName);
|
String fullText = fragment.getString(R.string.user_boosted, status.account.displayName);
|
||||||
String text = GlobalUserPreferences.compactReblogReplyLine && replyLine != null ? status.account.displayName : fullText;
|
String text = replyLine != null ? status.account.displayName : fullText;
|
||||||
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, text, status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20sp_filled, isOwnPost ? status.visibility : null, i->{
|
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, text, status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20sp_filled, isOwnPost ? status.visibility : null, i->{
|
||||||
args.putParcelable("profileAccount", Parcels.wrap(status.account));
|
args.putParcelable("profileAccount", Parcels.wrap(status.account));
|
||||||
Nav.go(fragment.getActivity(), ProfileFragment.class, args);
|
Nav.go(fragment.getActivity(), ProfileFragment.class, args);
|
||||||
@@ -192,7 +205,7 @@ public abstract class StatusDisplayItem{
|
|||||||
.map(ReblogOrReplyLineStatusDisplayItem.class::cast)
|
.map(ReblogOrReplyLineStatusDisplayItem.class::cast)
|
||||||
.findFirst();
|
.findFirst();
|
||||||
|
|
||||||
if (primaryLine.isPresent() && GlobalUserPreferences.compactReblogReplyLine) {
|
if (primaryLine.isPresent()) {
|
||||||
primaryLine.get().extra = replyLine;
|
primaryLine.get().extra = replyLine;
|
||||||
} else {
|
} else {
|
||||||
items.add(replyLine);
|
items.add(replyLine);
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ public class HtmlParser{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void parseCustomEmoji(SpannableStringBuilder ssb, List<Emoji> emojis){
|
public static void parseCustomEmoji(SpannableStringBuilder ssb, List<Emoji> emojis){
|
||||||
|
if(emojis==null) return;
|
||||||
Map<String, Emoji> emojiByCode =
|
Map<String, Emoji> emojiByCode =
|
||||||
emojis.stream()
|
emojis.stream()
|
||||||
.collect(
|
.collect(
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ import org.joinmastodon.android.E;
|
|||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
import org.joinmastodon.android.MastodonApp;
|
import org.joinmastodon.android.MastodonApp;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.CacheController;
|
||||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||||
import org.joinmastodon.android.api.MastodonErrorResponse;
|
import org.joinmastodon.android.api.MastodonErrorResponse;
|
||||||
import org.joinmastodon.android.api.StatusInteractionController;
|
import org.joinmastodon.android.api.StatusInteractionController;
|
||||||
@@ -625,24 +626,26 @@ public class UiUtils {
|
|||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback) {
|
|
||||||
confirmDeletePost(activity, accountID, status, resultCallback, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft) {
|
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft) {
|
||||||
|
Status s=status.getContentStatus();
|
||||||
showConfirmationAlert(activity,
|
showConfirmationAlert(activity,
|
||||||
forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title,
|
forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title,
|
||||||
forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete,
|
forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete,
|
||||||
forRedraft ? R.string.sk_delete_and_redraft : R.string.delete,
|
forRedraft ? R.string.sk_delete_and_redraft : R.string.delete,
|
||||||
forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular,
|
forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular,
|
||||||
() -> new DeleteStatus(status.id)
|
() -> new DeleteStatus(s.id)
|
||||||
.setCallback(new Callback<>() {
|
.setCallback(new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Status result) {
|
public void onSuccess(Status result) {
|
||||||
resultCallback.accept(result);
|
resultCallback.accept(result);
|
||||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().deleteStatus(status.id);
|
CacheController cache=AccountSessionManager.get(accountID).getCacheController();
|
||||||
|
cache.deleteStatus(s.id);
|
||||||
|
E.post(new StatusDeletedEvent(s.id, accountID));
|
||||||
|
if(status!=s){
|
||||||
|
cache.deleteStatus(status.id);
|
||||||
E.post(new StatusDeletedEvent(status.id, accountID));
|
E.post(new StatusDeletedEvent(status.id, accountID));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(ErrorResponse error) {
|
public void onError(ErrorResponse error) {
|
||||||
@@ -797,8 +800,9 @@ public class UiUtils {
|
|||||||
} else if (relationship.muting) {
|
} else if (relationship.muting) {
|
||||||
confirmToggleMuteUser(activity, accountID, account, true, resultCallback);
|
confirmToggleMuteUser(activity, accountID, account, true, resultCallback);
|
||||||
} else {
|
} else {
|
||||||
|
Runnable action=()->{
|
||||||
progressCallback.accept(true);
|
progressCallback.accept(true);
|
||||||
new SetAccountFollowed(account.id, !relationship.following && !relationship.requested, true, false)
|
new SetAccountFollowed(account.id, !relationship.following && !relationship.requested, true)
|
||||||
.setCallback(new Callback<>(){
|
.setCallback(new Callback<>(){
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Relationship result){
|
public void onSuccess(Relationship result){
|
||||||
@@ -816,6 +820,12 @@ public class UiUtils {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
|
};
|
||||||
|
if(relationship.following && GlobalUserPreferences.confirmUnfollow){
|
||||||
|
showConfirmationAlert(activity, null, activity.getString(R.string.unfollow_confirmation, account.getDisplayUsername()), activity.getString(R.string.unfollow), R.drawable.ic_fluent_person_delete_24_regular, action);
|
||||||
|
}else{
|
||||||
|
action.run();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1711,7 +1721,7 @@ public class UiUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<String> extractPronouns(Context context, @Nullable Account account) {
|
public static Optional<String> extractPronouns(Context context, @Nullable Account account) {
|
||||||
if (account == null) return Optional.empty();
|
if (account==null || account.fields==null) return Optional.empty();
|
||||||
String localizedPronouns=context.getString(R.string.sk_pronouns_label).toLowerCase();
|
String localizedPronouns=context.getString(R.string.sk_pronouns_label).toLowerCase();
|
||||||
|
|
||||||
// higher = worse. the lowest number wins. also i'm sorry for writing this
|
// higher = worse. the lowest number wins. also i'm sorry for writing this
|
||||||
|
|||||||
@@ -4,11 +4,12 @@ import android.animation.Animator;
|
|||||||
import android.animation.AnimatorListenerAdapter;
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.animation.AnimatorSet;
|
import android.animation.AnimatorSet;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
|
import android.animation.ValueAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -19,6 +20,7 @@ import android.text.TextUtils;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewOutlineProvider;
|
||||||
import android.widget.HorizontalScrollView;
|
import android.widget.HorizontalScrollView;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@@ -27,8 +29,8 @@ import android.widget.ProgressBar;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.StringRes;
|
||||||
|
|
||||||
import org.joinmastodon.android.MastodonApp;
|
import org.joinmastodon.android.MastodonApp;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
@@ -51,11 +53,8 @@ import org.parceler.Parcel;
|
|||||||
import org.parceler.Parcels;
|
import org.parceler.Parcels;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -204,6 +203,15 @@ public class ComposeMediaViewController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateButton(ImageButton btn, @DrawableRes int drawableId, @StringRes int labelId){
|
||||||
|
btn.setImageResource(drawableId);
|
||||||
|
String label=fragment.getContext().getString(labelId);
|
||||||
|
btn.setContentDescription(label);
|
||||||
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
|
||||||
|
btn.setTooltipText(label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private View createMediaAttachmentView(DraftMediaAttachment draft){
|
private View createMediaAttachmentView(DraftMediaAttachment draft){
|
||||||
View thumb=fragment.getActivity().getLayoutInflater().inflate(R.layout.compose_media_thumb, attachmentsView, false);
|
View thumb=fragment.getActivity().getLayoutInflater().inflate(R.layout.compose_media_thumb, attachmentsView, false);
|
||||||
ImageView img=thumb.findViewById(R.id.thumb);
|
ImageView img=thumb.findViewById(R.id.thumb);
|
||||||
@@ -231,12 +239,11 @@ public class ComposeMediaViewController{
|
|||||||
draft.removeButton.setOnClickListener(this::onRemoveMediaAttachmentClick);
|
draft.removeButton.setOnClickListener(this::onRemoveMediaAttachmentClick);
|
||||||
draft.editButton.setTag(draft);
|
draft.editButton.setTag(draft);
|
||||||
|
|
||||||
thumb.setOutlineProvider(OutlineProviders.roundedRect(12));
|
thumb.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
|
||||||
thumb.setClipToOutline(true);
|
thumb.setClipToOutline(true);
|
||||||
img.setOutlineProvider(OutlineProviders.roundedRect(12));
|
img.setOutlineProvider(OutlineProviders.roundedRect(12));
|
||||||
img.setClipToOutline(true);
|
img.setClipToOutline(true);
|
||||||
|
|
||||||
thumb.setBackgroundColor(UiUtils.getThemeColor(fragment.getActivity(), R.attr.colorM3Surface));
|
|
||||||
thumb.setOnLongClickListener(v->{
|
thumb.setOnLongClickListener(v->{
|
||||||
if(!v.hasTransientState() && attachments.size()>1){
|
if(!v.hasTransientState() && attachments.size()>1){
|
||||||
attachmentsView.startDragging(v);
|
attachmentsView.startDragging(v);
|
||||||
@@ -266,11 +273,11 @@ public class ComposeMediaViewController{
|
|||||||
draft.subtitleView.setText(subtitleRes);
|
draft.subtitleView.setText(subtitleRes);
|
||||||
}
|
}
|
||||||
draft.titleView.setText(fragment.getString(R.string.attachment_x_percent_uploaded, 0));
|
draft.titleView.setText(fragment.getString(R.string.attachment_x_percent_uploaded, 0));
|
||||||
draft.removeButton.setImageResource(R.drawable.ic_baseline_close_24);
|
updateButton(draft.removeButton, R.drawable.ic_fluent_dismiss_24_regular, R.string.delete);
|
||||||
|
|
||||||
if(draft.state==AttachmentUploadState.ERROR){
|
if(draft.state==AttachmentUploadState.ERROR){
|
||||||
draft.titleView.setText(R.string.upload_failed);
|
draft.titleView.setText(R.string.upload_failed);
|
||||||
draft.editButton.setImageResource(R.drawable.ic_fluent_arrow_counterclockwise_24_regular);
|
updateButton(draft.removeButton, R.drawable.ic_fluent_arrow_counterclockwise_24_regular, R.string.retry);
|
||||||
draft.editButton.setOnClickListener(this::onRetryOrCancelMediaUploadClick);
|
draft.editButton.setOnClickListener(this::onRetryOrCancelMediaUploadClick);
|
||||||
draft.progressBar.setVisibility(View.GONE);
|
draft.progressBar.setVisibility(View.GONE);
|
||||||
draft.setUseErrorColors(true);
|
draft.setUseErrorColors(true);
|
||||||
@@ -280,7 +287,7 @@ public class ComposeMediaViewController{
|
|||||||
draft.editButton.setOnClickListener(this::onEditMediaDescriptionClick);
|
draft.editButton.setOnClickListener(this::onEditMediaDescriptionClick);
|
||||||
}else{
|
}else{
|
||||||
draft.editButton.setVisibility(View.GONE);
|
draft.editButton.setVisibility(View.GONE);
|
||||||
draft.removeButton.setImageResource(R.drawable.ic_baseline_close_24);
|
updateButton(draft.removeButton, R.drawable.ic_fluent_dismiss_24_regular, R.string.delete);
|
||||||
if(draft.state==AttachmentUploadState.PROCESSING){
|
if(draft.state==AttachmentUploadState.PROCESSING){
|
||||||
draft.titleView.setText(R.string.upload_processing);
|
draft.titleView.setText(R.string.upload_processing);
|
||||||
}else{
|
}else{
|
||||||
@@ -374,7 +381,7 @@ public class ComposeMediaViewController{
|
|||||||
// attachment.retryButton.setContentDescription(fragment.getString(R.string.retry_upload));
|
// attachment.retryButton.setContentDescription(fragment.getString(R.string.retry_upload));
|
||||||
|
|
||||||
V.setVisibilityAnimated(attachment.editButton, View.VISIBLE);
|
V.setVisibilityAnimated(attachment.editButton, View.VISIBLE);
|
||||||
attachment.editButton.setImageResource(R.drawable.ic_fluent_arrow_counterclockwise_24_regular);
|
updateButton(attachment.editButton, R.drawable.ic_fluent_arrow_counterclockwise_24_regular, R.string.retry);
|
||||||
attachment.editButton.setOnClickListener(ComposeMediaViewController.this::onRetryOrCancelMediaUploadClick);
|
attachment.editButton.setOnClickListener(ComposeMediaViewController.this::onRetryOrCancelMediaUploadClick);
|
||||||
attachment.setUseErrorColors(true);
|
attachment.setUseErrorColors(true);
|
||||||
V.setVisibilityAnimated(attachment.progressBar, View.GONE);
|
V.setVisibilityAnimated(attachment.progressBar, View.GONE);
|
||||||
@@ -478,8 +485,8 @@ public class ComposeMediaViewController{
|
|||||||
throw new IllegalStateException("Unexpected state "+attachment.state);
|
throw new IllegalStateException("Unexpected state "+attachment.state);
|
||||||
attachment.uploadRequest=null;
|
attachment.uploadRequest=null;
|
||||||
attachment.state=AttachmentUploadState.DONE;
|
attachment.state=AttachmentUploadState.DONE;
|
||||||
attachment.editButton.setImageResource(R.drawable.ic_fluent_edit_24_regular);
|
updateButton(attachment.editButton, R.drawable.ic_fluent_edit_24_regular, R.string.sk_edit_alt_text);
|
||||||
attachment.removeButton.setImageResource(R.drawable.ic_fluent_delete_24_regular);
|
updateButton(attachment.removeButton, R.drawable.ic_fluent_dismiss_24_regular, R.string.delete);
|
||||||
attachment.editButton.setOnClickListener(this::onEditMediaDescriptionClick);
|
attachment.editButton.setOnClickListener(this::onEditMediaDescriptionClick);
|
||||||
V.setVisibilityAnimated(attachment.progressBar, View.GONE);
|
V.setVisibilityAnimated(attachment.progressBar, View.GONE);
|
||||||
V.setVisibilityAnimated(attachment.editButton, View.VISIBLE);
|
V.setVisibilityAnimated(attachment.editButton, View.VISIBLE);
|
||||||
@@ -708,18 +715,21 @@ public class ComposeMediaViewController{
|
|||||||
if(errorTransitionAnimator!=null)
|
if(errorTransitionAnimator!=null)
|
||||||
errorTransitionAnimator.cancel();
|
errorTransitionAnimator.cancel();
|
||||||
AnimatorSet set=new AnimatorSet();
|
AnimatorSet set=new AnimatorSet();
|
||||||
int color1, color2, color3;
|
int defaultBg=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3Surface);
|
||||||
|
int errorBg=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3ErrorContainer);
|
||||||
|
int color2, color3;
|
||||||
if(use){
|
if(use){
|
||||||
color1=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3ErrorContainer);
|
|
||||||
color2=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3Error);
|
color2=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3Error);
|
||||||
color3=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnErrorContainer);
|
color3=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnErrorContainer);
|
||||||
}else{
|
}else{
|
||||||
color1=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3Surface);
|
|
||||||
color2=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnSurface);
|
color2=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnSurface);
|
||||||
color3=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnSurfaceVariant);
|
color3=UiUtils.getThemeColor(view.getContext(), R.attr.colorM3OnSurfaceVariant);
|
||||||
}
|
}
|
||||||
|
GradientDrawable bg=(GradientDrawable) view.getBackground().mutate();
|
||||||
|
ValueAnimator bgAnim=ValueAnimator.ofArgb(use ? defaultBg : errorBg, use ? errorBg : defaultBg);
|
||||||
|
bgAnim.addUpdateListener(anim->bg.setColor((Integer) anim.getAnimatedValue()));
|
||||||
set.playTogether(
|
set.playTogether(
|
||||||
ObjectAnimator.ofArgb(view, "backgroundColor", ((ColorDrawable)view.getBackground()).getColor(), color1),
|
bgAnim,
|
||||||
ObjectAnimator.ofArgb(titleView, "textColor", titleView.getCurrentTextColor(), color2),
|
ObjectAnimator.ofArgb(titleView, "textColor", titleView.getCurrentTextColor(), color2),
|
||||||
ObjectAnimator.ofArgb(subtitleView, "textColor", subtitleView.getCurrentTextColor(), color3),
|
ObjectAnimator.ofArgb(subtitleView, "textColor", subtitleView.getCurrentTextColor(), color3),
|
||||||
ObjectAnimator.ofArgb(removeButton.getDrawable(), "tint", subtitleView.getCurrentTextColor(), color3)
|
ObjectAnimator.ofArgb(removeButton.getDrawable(), "tint", subtitleView.getCurrentTextColor(), color3)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.app.Fragment;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Animatable;
|
import android.graphics.drawable.Animatable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.style.TypefaceSpan;
|
import android.text.style.TypefaceSpan;
|
||||||
@@ -25,6 +26,7 @@ import org.joinmastodon.android.GlobalUserPreferences;
|
|||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed;
|
import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
|
import org.joinmastodon.android.fragments.ListsFragment;
|
||||||
import org.joinmastodon.android.fragments.ProfileFragment;
|
import org.joinmastodon.android.fragments.ProfileFragment;
|
||||||
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
@@ -98,6 +100,9 @@ public class AccountViewHolder extends BindableViewHolder<AccountViewModel> impl
|
|||||||
contextMenu=new PopupMenu(fragment.getActivity(), menuAnchor);
|
contextMenu=new PopupMenu(fragment.getActivity(), menuAnchor);
|
||||||
contextMenu.inflate(R.menu.profile);
|
contextMenu.inflate(R.menu.profile);
|
||||||
contextMenu.setOnMenuItemClickListener(this::onContextMenuItemSelected);
|
contextMenu.setOnMenuItemClickListener(this::onContextMenuItemSelected);
|
||||||
|
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.P && !UiUtils.isEMUI())
|
||||||
|
contextMenu.getMenu().setGroupDividerEnabled(true);
|
||||||
|
UiUtils.enablePopupMenuIcons(fragment.getContext(), contextMenu);
|
||||||
|
|
||||||
setStyle(AccessoryType.BUTTON, false);
|
setStyle(AccessoryType.BUTTON, false);
|
||||||
}
|
}
|
||||||
@@ -212,14 +217,20 @@ public class AccountViewHolder extends BindableViewHolder<AccountViewModel> impl
|
|||||||
Menu menu=contextMenu.getMenu();
|
Menu menu=contextMenu.getMenu();
|
||||||
Account account=item.account;
|
Account account=item.account;
|
||||||
|
|
||||||
menu.findItem(R.id.share).setTitle(fragment.getString(R.string.share_user, account.getDisplayUsername()));
|
|
||||||
menu.findItem(R.id.manage_user_lists).setTitle(fragment.getString(R.string.sk_lists_with_user, account.getShortUsername()));
|
menu.findItem(R.id.manage_user_lists).setTitle(fragment.getString(R.string.sk_lists_with_user, account.getShortUsername()));
|
||||||
menu.findItem(R.id.mute).setTitle(fragment.getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
|
MenuItem mute=menu.findItem(R.id.mute);
|
||||||
menu.findItem(R.id.block).setTitle(fragment.getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
|
mute.setTitle(fragment.getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername()));
|
||||||
menu.findItem(R.id.report).setTitle(fragment.getString(R.string.report_user, account.getDisplayUsername()));
|
mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_0_24_regular : R.drawable.ic_fluent_speaker_off_24_regular);
|
||||||
|
UiUtils.insetPopupMenuIcon(fragment.getContext(), mute);
|
||||||
|
menu.findItem(R.id.block).setTitle(fragment.getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getShortUsername()));
|
||||||
|
menu.findItem(R.id.report).setTitle(fragment.getString(R.string.report_user, account.getShortUsername()));
|
||||||
|
menu.findItem(R.id.manage_user_lists).setVisible(relationship.following);
|
||||||
|
menu.findItem(R.id.soft_block).setVisible(relationship.followedBy && !relationship.following);
|
||||||
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
||||||
if(relationship.following){
|
if(relationship.following){
|
||||||
hideBoosts.setTitle(fragment.getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getDisplayUsername()));
|
hideBoosts.setTitle(fragment.getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getShortUsername()));
|
||||||
|
hideBoosts.setIcon(relationship.showingReblogs ? R.drawable.ic_fluent_arrow_repeat_all_off_24_regular : R.drawable.ic_fluent_arrow_repeat_all_24_regular);
|
||||||
|
UiUtils.insetPopupMenuIcon(fragment.getContext(), hideBoosts);
|
||||||
hideBoosts.setVisible(true);
|
hideBoosts.setVisible(true);
|
||||||
}else{
|
}else{
|
||||||
hideBoosts.setVisible(false);
|
hideBoosts.setVisible(false);
|
||||||
@@ -274,6 +285,8 @@ public class AccountViewHolder extends BindableViewHolder<AccountViewModel> impl
|
|||||||
UiUtils.confirmToggleMuteUser(fragment.getActivity(), accountID, account, relationship.muting, this::updateRelationship);
|
UiUtils.confirmToggleMuteUser(fragment.getActivity(), accountID, account, relationship.muting, this::updateRelationship);
|
||||||
}else if(id==R.id.block){
|
}else if(id==R.id.block){
|
||||||
UiUtils.confirmToggleBlockUser(fragment.getActivity(), accountID, account, relationship.blocking, this::updateRelationship);
|
UiUtils.confirmToggleBlockUser(fragment.getActivity(), accountID, account, relationship.blocking, this::updateRelationship);
|
||||||
|
}else if(id==R.id.soft_block){
|
||||||
|
UiUtils.confirmSoftBlockUser(fragment.getActivity(), accountID, account, this::updateRelationship);
|
||||||
}else if(id==R.id.report){
|
}else if(id==R.id.report){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
@@ -303,6 +316,12 @@ public class AccountViewHolder extends BindableViewHolder<AccountViewModel> impl
|
|||||||
})
|
})
|
||||||
.wrapProgress(fragment.getActivity(), R.string.loading, false)
|
.wrapProgress(fragment.getActivity(), R.string.loading, false)
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
|
}else if(id==R.id.manage_user_lists){
|
||||||
|
final Bundle args=new Bundle();
|
||||||
|
args.putString("account", accountID);
|
||||||
|
args.putString("profileAccount", account.id);
|
||||||
|
args.putString("profileDisplayUsername", account.getDisplayUsername());
|
||||||
|
Nav.go(fragment.getActivity(), ListsFragment.class, args);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<solid android:color="?colorM3Surface" />
|
||||||
<stroke android:color="?colorM3OutlineVariant" android:width="1dp"/>
|
<stroke android:color="?colorM3OutlineVariant" android:width="1dp"/>
|
||||||
<corners android:radius="11dp"/>
|
<corners android:radius="12dp"/>
|
||||||
</shape>
|
</shape>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<vector android:height="24dp" android:tint="#000000"
|
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
|
|
||||||
</vector>
|
|
||||||
@@ -5,8 +5,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp">
|
||||||
android:paddingBottom="4dp">
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/language_btn"
|
android:id="@+id/language_btn"
|
||||||
@@ -18,14 +17,17 @@
|
|||||||
android:drawableStart="@drawable/ic_fluent_local_language_16_regular"
|
android:drawableStart="@drawable/ic_fluent_local_language_16_regular"
|
||||||
android:drawablePadding="8dp"
|
android:drawablePadding="8dp"
|
||||||
android:drawableTint="?colorM3OnSurfaceVariant"
|
android:drawableTint="?colorM3OnSurfaceVariant"
|
||||||
|
android:contentDescription="@string/language"
|
||||||
|
android:tooltipText="@string/language"
|
||||||
android:textColor="?colorM3OnSurfaceVariant" />
|
android:textColor="?colorM3OnSurfaceVariant" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/drafts_btn"
|
android:id="@+id/drafts_btn"
|
||||||
style="@style/Widget.Mastodon.M3.Button.Text"
|
style="@style/Widget.Mastodon.M3.Button.Text"
|
||||||
android:background="@drawable/bg_button_m3_text_circle"
|
android:background="@drawable/bg_button_m3_text_circle"
|
||||||
android:layout_width="40dp"
|
android:layout_width="48dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="-6dp"
|
||||||
android:src="@drawable/ic_fluent_clock_20_regular"
|
android:src="@drawable/ic_fluent_clock_20_regular"
|
||||||
android:tint="?colorM3OnSurfaceVariant"
|
android:tint="?colorM3OnSurfaceVariant"
|
||||||
android:contentDescription="@string/sk_schedule_or_draft"
|
android:contentDescription="@string/sk_schedule_or_draft"
|
||||||
@@ -37,7 +39,7 @@
|
|||||||
android:id="@+id/publish_btn"
|
android:id="@+id/publish_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="6dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end" />
|
android:ellipsize="end" />
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:foreground="@drawable/fg_compose_attachment">
|
android:background="@drawable/bg_compose_attachment">
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/drag_layer"
|
android:id="@+id/drag_layer"
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_above="@id/title"
|
android:layout_above="@id/title"
|
||||||
|
android:layout_margin="1dp"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
tools:src="#0f0"/>
|
tools:src="#0f0"/>
|
||||||
@@ -57,9 +58,11 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:src="@drawable/ic_fluent_delete_24_regular"
|
android:contentDescription="@string/delete"
|
||||||
|
android:tooltipText="@string/delete"
|
||||||
|
android:src="@drawable/ic_fluent_dismiss_24_regular"
|
||||||
android:tint="?colorM3OnSurfaceVariant"
|
android:tint="?colorM3OnSurfaceVariant"
|
||||||
android:backgroundTint="?colorM3OnSurfaceVariant"
|
android:backgroundTint="?colorM3OnSurfaceVariant"
|
||||||
android:background="@drawable/bg_round_ripple"/>
|
android:background="@drawable/bg_round_ripple"/>
|
||||||
@@ -70,8 +73,9 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:layout_toStartOf="@id/delete"
|
android:layout_toStartOf="@id/delete"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginBottom="4dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:contentDescription="@string/sk_edit_alt_text"
|
||||||
|
android:tooltipText="@string/sk_edit_alt_text"
|
||||||
android:src="@drawable/ic_fluent_edit_24_regular"
|
android:src="@drawable/ic_fluent_edit_24_regular"
|
||||||
android:tint="?colorM3OnSurfaceVariant"
|
android:tint="?colorM3OnSurfaceVariant"
|
||||||
android:backgroundTint="?colorM3OnSurfaceVariant"
|
android:backgroundTint="?colorM3OnSurfaceVariant"
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.joinmastodon.android.ui.views.MaxWidthFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<org.joinmastodon.android.ui.views.MaxWidthFrameLayout
|
||||||
android:maxWidth="600sp"
|
android:maxWidth="600sp"
|
||||||
app:defaultWidth="450sp"
|
app:defaultWidth="450sp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -17,8 +21,8 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingHorizontal="11sp">
|
android:paddingHorizontal="15dp">
|
||||||
<!-- avatar width (46sp) / 2 - button width (24sp) / 2 -->
|
<!-- avatar width (46sp) / 2 - button width (24dp) / 2 -->
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
@@ -28,12 +32,14 @@
|
|||||||
android:id="@+id/reply_btn"
|
android:id="@+id/reply_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingVertical="12dp">
|
android:transformPivotX="24dp"
|
||||||
|
android:transformPivotY="24dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24sp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginVertical="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
android:duplicateParentState="true"
|
android:duplicateParentState="true"
|
||||||
android:src="@drawable/ic_fluent_chat_multiple_24_selector_text"
|
android:src="@drawable/ic_fluent_chat_multiple_24_selector_text"
|
||||||
android:tint="?colorM3OnSurfaceVariant"
|
android:tint="?colorM3OnSurfaceVariant"
|
||||||
@@ -44,7 +50,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
android:minWidth="16dp"
|
android:minWidth="12dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textAppearance="@style/m3_label_large"
|
android:textAppearance="@style/m3_label_large"
|
||||||
android:textColor="?colorM3OnSurfaceVariant"
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
@@ -63,12 +69,14 @@
|
|||||||
android:id="@+id/boost_btn"
|
android:id="@+id/boost_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingVertical="12dp">
|
android:transformPivotX="24dp"
|
||||||
|
android:transformPivotY="24dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24sp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginVertical="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
android:duplicateParentState="true"
|
android:duplicateParentState="true"
|
||||||
android:src="@drawable/ic_boost"
|
android:src="@drawable/ic_boost"
|
||||||
android:tint="@color/boost_icon"
|
android:tint="@color/boost_icon"
|
||||||
@@ -79,7 +87,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
android:minWidth="16dp"
|
android:minWidth="12dp"
|
||||||
android:duplicateParentState="true"
|
android:duplicateParentState="true"
|
||||||
android:textColor="@color/boost_icon"
|
android:textColor="@color/boost_icon"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
@@ -99,13 +107,15 @@
|
|||||||
android:id="@+id/favorite_btn"
|
android:id="@+id/favorite_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingVertical="12dp">
|
android:transformPivotX="24dp"
|
||||||
|
android:transformPivotY="24dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/favorite_icon"
|
android:id="@+id/favorite_icon"
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24sp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginVertical="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
android:duplicateParentState="true"
|
android:duplicateParentState="true"
|
||||||
android:src="@drawable/ic_fluent_star_24_selector"
|
android:src="@drawable/ic_fluent_star_24_selector"
|
||||||
android:tint="@color/favorite_icon"
|
android:tint="@color/favorite_icon"
|
||||||
@@ -116,7 +126,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
android:minWidth="16dp"
|
android:minWidth="12dp"
|
||||||
android:textColor="@color/favorite_icon"
|
android:textColor="@color/favorite_icon"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textAppearance="@style/m3_label_large"
|
android:textAppearance="@style/m3_label_large"
|
||||||
@@ -135,13 +145,14 @@
|
|||||||
android:id="@+id/bookmark_btn"
|
android:id="@+id/bookmark_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingVertical="12dp">
|
android:transformPivotX="24dp"
|
||||||
|
android:transformPivotY="24dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/bookmark"
|
android:id="@+id/bookmark"
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24sp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginHorizontal="16dp"
|
android:layout_margin="12dp"
|
||||||
android:src="@drawable/ic_fluent_bookmark_24_selector"
|
android:src="@drawable/ic_fluent_bookmark_24_selector"
|
||||||
android:tint="@color/bookmark_icon"
|
android:tint="@color/bookmark_icon"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
@@ -153,13 +164,15 @@
|
|||||||
android:id="@+id/share_btn"
|
android:id="@+id/share_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:paddingVertical="12dp">
|
android:transformPivotX="24dp"
|
||||||
|
android:transformPivotY="24dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/share"
|
android:id="@+id/share"
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24sp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginHorizontal="16dp"
|
android:layout_marginVertical="12dp"
|
||||||
|
android:layout_marginHorizontal="12dp"
|
||||||
android:src="@drawable/ic_fluent_share_24_regular"
|
android:src="@drawable/ic_fluent_share_24_regular"
|
||||||
android:tint="?colorM3OnSurfaceVariant"
|
android:tint="?colorM3OnSurfaceVariant"
|
||||||
android:gravity="center_vertical"/>
|
android:gravity="center_vertical"/>
|
||||||
@@ -173,6 +186,9 @@
|
|||||||
android:id="@+id/footer_emoji_keyboard_container"
|
android:id="@+id/footer_emoji_keyboard_container"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
|
||||||
</org.joinmastodon.android.ui.views.MaxWidthFrameLayout>
|
</org.joinmastodon.android.ui.views.MaxWidthFrameLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
@@ -13,8 +13,7 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical">
|
||||||
android:background="?android:selectableItemBackground">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/icon"
|
android:id="@+id/icon"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.joinmastodon.android.ui.views.AutoOrientationLinearLayout
|
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -47,4 +47,4 @@
|
|||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"/>
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
</org.joinmastodon.android.ui.views.AutoOrientationLinearLayout>
|
</org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout>
|
||||||
@@ -470,6 +470,8 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:background="@drawable/bg_icon_button"
|
android:background="@drawable/bg_icon_button"
|
||||||
android:padding="0px"
|
android:padding="0px"
|
||||||
|
android:tint="@color/action_bar_icons"
|
||||||
|
android:tintMode="src_in"
|
||||||
android:contentDescription="@string/add_media"
|
android:contentDescription="@string/add_media"
|
||||||
android:tooltipText="@string/add_media"
|
android:tooltipText="@string/add_media"
|
||||||
android:src="@drawable/ic_fluent_image_add_24_regular"/>
|
android:src="@drawable/ic_fluent_image_add_24_regular"/>
|
||||||
@@ -480,6 +482,8 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:background="@drawable/bg_icon_button"
|
android:background="@drawable/bg_icon_button"
|
||||||
android:padding="0px"
|
android:padding="0px"
|
||||||
|
android:tint="@color/action_bar_icons"
|
||||||
|
android:tintMode="src_in"
|
||||||
android:contentDescription="@string/add_poll"
|
android:contentDescription="@string/add_poll"
|
||||||
android:tooltipText="@string/add_poll"
|
android:tooltipText="@string/add_poll"
|
||||||
android:src="@drawable/ic_fluent_poll_24_selector"/>
|
android:src="@drawable/ic_fluent_poll_24_selector"/>
|
||||||
@@ -490,6 +494,8 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:background="@drawable/bg_icon_button"
|
android:background="@drawable/bg_icon_button"
|
||||||
android:padding="0px"
|
android:padding="0px"
|
||||||
|
android:tint="@color/action_bar_icons"
|
||||||
|
android:tintMode="src_in"
|
||||||
android:contentDescription="@string/emoji"
|
android:contentDescription="@string/emoji"
|
||||||
android:tooltipText="@string/emoji"
|
android:tooltipText="@string/emoji"
|
||||||
android:src="@drawable/ic_fluent_emoji_24_selector"/>
|
android:src="@drawable/ic_fluent_emoji_24_selector"/>
|
||||||
@@ -500,6 +506,8 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:background="@drawable/bg_icon_button"
|
android:background="@drawable/bg_icon_button"
|
||||||
android:padding="0px"
|
android:padding="0px"
|
||||||
|
android:tint="@color/action_bar_icons"
|
||||||
|
android:tintMode="src_in"
|
||||||
android:contentDescription="@string/content_warning"
|
android:contentDescription="@string/content_warning"
|
||||||
android:tooltipText="@string/content_warning"
|
android:tooltipText="@string/content_warning"
|
||||||
android:src="@drawable/ic_fluent_chat_warning_24_selector"/>
|
android:src="@drawable/ic_fluent_chat_warning_24_selector"/>
|
||||||
@@ -510,6 +518,8 @@
|
|||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:background="@drawable/bg_icon_button"
|
android:background="@drawable/bg_icon_button"
|
||||||
android:padding="0px"
|
android:padding="0px"
|
||||||
|
android:tint="@color/action_bar_icons"
|
||||||
|
android:tintMode="src_in"
|
||||||
android:contentDescription="@string/sk_content_type"
|
android:contentDescription="@string/sk_content_type"
|
||||||
android:tooltipText="@string/sk_content_type"
|
android:tooltipText="@string/sk_content_type"
|
||||||
android:src="@drawable/ic_fluent_text_edit_style_24_selector"/>
|
android:src="@drawable/ic_fluent_text_edit_style_24_selector"/>
|
||||||
|
|||||||
@@ -291,20 +291,18 @@
|
|||||||
android:id="@+id/profile_counters"
|
android:id="@+id/profile_counters"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="8dp"
|
android:layout_marginHorizontal="4dp">
|
||||||
android:layout_marginRight="8dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
style="@style/Widget.Mastodon.M3.Button.Text"
|
||||||
android:id="@+id/followers_btn"
|
android:id="@+id/followers_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="48dp"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/bg_button_borderless_rounded"
|
android:minHeight="48dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingLeft="8dp"
|
android:paddingStart="12dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingEnd="12dp">
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:paddingBottom="4dp">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/followers_count"
|
android:id="@+id/followers_count"
|
||||||
@@ -335,6 +333,7 @@
|
|||||||
android:id="@+id/profile_counters_separator"
|
android:id="@+id/profile_counters_separator"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
|
android:layout_marginHorizontal="-4dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/sk_separator"
|
android:text="@string/sk_separator"
|
||||||
android:textAppearance="@style/m3_label_large"
|
android:textAppearance="@style/m3_label_large"
|
||||||
@@ -342,16 +341,15 @@
|
|||||||
android:textColor="?colorM3OnSurfaceVariant" />
|
android:textColor="?colorM3OnSurfaceVariant" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
style="@style/Widget.Mastodon.M3.Button.Text"
|
||||||
android:id="@+id/following_btn"
|
android:id="@+id/following_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="48dp"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/bg_button_borderless_rounded"
|
android:minHeight="48dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingLeft="8dp"
|
android:paddingStart="12dp"
|
||||||
android:paddingTop="4dp"
|
android:paddingEnd="12dp">
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:paddingBottom="4dp">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/following_count"
|
android:id="@+id/following_count"
|
||||||
@@ -359,11 +357,11 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
android:fontFamily="sans-serif-black"
|
android:fontFamily="sans-serif-black"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="?colorM3OnSurfaceVariant"
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
android:textSize="14dp"
|
|
||||||
tools:text="123" />
|
tools:text="123" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|||||||
@@ -128,9 +128,9 @@
|
|||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
|
android:layout_marginTop="6dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_gravity="bottom"
|
android:paddingTop="3dp"
|
||||||
android:paddingTop="4dp"
|
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:minHeight="44dp">
|
android:minHeight="44dp">
|
||||||
|
|
||||||
@@ -142,23 +142,66 @@
|
|||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/posts_count"
|
android:id="@+id/posts_count"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:textAppearance="@style/m3_title_medium"
|
android:layout_marginEnd="4dp"
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:fontFamily="sans-serif-black"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
tools:text="123" />
|
tools:text="123" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/posts_label"
|
android:id="@+id/posts_label"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginStart="4sp"
|
|
||||||
android:textAppearance="@style/m3_body_large"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="middle"
|
android:ellipsize="middle"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
tools:text="posts" />
|
tools:text="posts" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/followers_btn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/followers_count"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:fontFamily="sans-serif-black"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
|
tools:text="123" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/followers_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:ellipsize="middle"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
|
tools:text="followers" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -169,50 +212,33 @@
|
|||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical">
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/following_count"
|
android:id="@+id/following_count"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:textAppearance="@style/m3_title_medium"
|
android:layout_marginEnd="4dp"
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:fontFamily="sans-serif-black"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
tools:text="123" />
|
tools:text="123" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/following_label"
|
android:id="@+id/following_label"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginStart="4sp"
|
|
||||||
android:textAppearance="@style/m3_body_large"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="middle"
|
android:ellipsize="middle"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="@style/m3_label_large"
|
||||||
|
android:textColor="?colorM3OnSurfaceVariant"
|
||||||
tools:text="following" />
|
tools:text="following" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/followers_btn"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="2dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/followers_count"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="@style/m3_title_medium"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="123"/>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/followers_label"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="4sp"
|
|
||||||
android:textAppearance="@style/m3_body_large"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="middle"
|
|
||||||
tools:text="followers"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</org.joinmastodon.android.ui.views.AutoOrientationLinearLayout>
|
</org.joinmastodon.android.ui.views.AutoOrientationLinearLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
@@ -223,7 +249,7 @@
|
|||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
android:paddingEnd="4dp"
|
android:paddingEnd="4dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingBottom="8dp"
|
android:paddingBottom="10dp"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
|
|
||||||
<org.joinmastodon.android.ui.views.ProgressBarButton
|
<org.joinmastodon.android.ui.views.ProgressBarButton
|
||||||
@@ -260,7 +286,7 @@
|
|||||||
android:paddingStart="4dp"
|
android:paddingStart="4dp"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="16dp"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingBottom="8dp"
|
android:paddingBottom="10dp"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
|
|
||||||
<org.joinmastodon.android.ui.views.ProgressBarButton
|
<org.joinmastodon.android.ui.views.ProgressBarButton
|
||||||
@@ -296,7 +322,7 @@
|
|||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:paddingStart="8dp"
|
android:paddingStart="8dp"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="16dp"
|
||||||
android:paddingBottom="8dp"
|
android:paddingBottom="10dp"
|
||||||
android:clipToPadding="false">
|
android:clipToPadding="false">
|
||||||
|
|
||||||
<org.joinmastodon.android.ui.views.ProgressBarButton
|
<org.joinmastodon.android.ui.views.ProgressBarButton
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
android:layout_width="40dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:layout_gravity="end|top"
|
android:layout_gravity="end|top"
|
||||||
android:src="@drawable/ic_baseline_close_24"
|
android:src="@drawable/ic_fluent_dismiss_24_regular"
|
||||||
android:tint="?colorM3DarkOnSurface"
|
android:tint="?colorM3DarkOnSurface"
|
||||||
android:background="?android:actionBarItemBackground"/>
|
android:background="?android:actionBarItemBackground"/>
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,6 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:paddingTop="12dp"
|
android:paddingTop="12dp"
|
||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:tooltipText="@string/sk_tab_profile"
|
android:tooltipText="@string/sk_tab_profile"
|
||||||
|
|||||||
@@ -1,15 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<group android:id="@+id/menu_group1">
|
||||||
<item android:id="@+id/open_with_account" android:title="@string/sk_open_with_account" android:visible="false" android:icon="@drawable/ic_fluent_person_swap_24_regular">
|
<item android:id="@+id/open_with_account" android:title="@string/sk_open_with_account" android:visible="false" android:icon="@drawable/ic_fluent_person_swap_24_regular">
|
||||||
<menu android:id="@+id/accounts" />
|
<menu android:id="@+id/accounts" />
|
||||||
</item>
|
</item>
|
||||||
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
|
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
|
||||||
|
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
|
||||||
|
</group>
|
||||||
|
<group android:id="@+id/menu_group2">
|
||||||
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_24_regular"/>
|
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_24_regular"/>
|
||||||
<item android:id="@+id/mute" android:title="@string/mute_user" android:icon="@drawable/ic_fluent_speaker_off_24_regular"/>
|
<item android:id="@+id/mute" android:title="@string/mute_user" android:icon="@drawable/ic_fluent_speaker_off_24_regular"/>
|
||||||
|
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user" android:icon="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
|
||||||
<item android:id="@+id/block" android:title="@string/block_user" android:icon="@drawable/ic_fluent_person_prohibited_24_regular"/>
|
<item android:id="@+id/block" android:title="@string/block_user" android:icon="@drawable/ic_fluent_person_prohibited_24_regular"/>
|
||||||
<item android:id="@+id/soft_block" android:title="@string/sk_remove_follower" android:icon="@drawable/ic_fluent_person_delete_24_regular"/>
|
<item android:id="@+id/soft_block" android:title="@string/sk_remove_follower" android:icon="@drawable/ic_fluent_person_delete_24_regular"/>
|
||||||
<item android:id="@+id/report" android:title="@string/report_user" android:icon="@drawable/ic_fluent_warning_24_regular"/>
|
<item android:id="@+id/report" android:title="@string/report_user" android:icon="@drawable/ic_fluent_warning_24_regular"/>
|
||||||
<item android:id="@+id/block_domain" android:title="@string/block_domain" android:icon="@drawable/ic_fluent_shield_prohibited_24_regular"/>
|
<item android:id="@+id/block_domain" android:title="@string/block_domain" android:icon="@drawable/ic_fluent_shield_prohibited_24_regular"/>
|
||||||
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user" android:icon="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
|
</group>
|
||||||
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
|
|
||||||
</menu>
|
</menu>
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<string name="sk_settings_enable_marquee">Laufschrift in Titelleisten deaktivieren</string>
|
<string name="sk_settings_enable_marquee">Laufschrift in Titelleisten deaktivieren</string>
|
||||||
<string name="sk_settings_contribute">Zu Megalodon beitragen</string>
|
<string name="sk_settings_contribute">Zu Megalodon beitragen</string>
|
||||||
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
|
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
|
||||||
<string name="sk_notification_type_posts">Beitrags-Benachrichtigungen</string>
|
<string name="sk_notification_type_posts">Beitrags-Benachrichtigungen</string>
|
||||||
<string name="sk_settings_color_palette">Farbschema</string>
|
<string name="sk_settings_color_palette">Farbschema</string>
|
||||||
<string name="sk_color_palette_pink">Pink</string>
|
<string name="sk_color_palette_pink">Pink</string>
|
||||||
<string name="sk_color_palette_purple">Violett</string>
|
<string name="sk_color_palette_purple">Violett</string>
|
||||||
|
|||||||
@@ -599,7 +599,21 @@
|
|||||||
<item quantity="one">%,d ανάρτηση σήμερα</item>
|
<item quantity="one">%,d ανάρτηση σήμερα</item>
|
||||||
<item quantity="other">%,d αναρτήσεις σήμερα</item>
|
<item quantity="other">%,d αναρτήσεις σήμερα</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="error_playing_video">Σφάλμα αναπαραγωγής βίντεο</string>
|
||||||
|
<string name="timeline_following">Ακολουθείς</string>
|
||||||
|
<string name="lists">Λίστες</string>
|
||||||
|
<string name="followed_hashtags">Ετικέτες που ακολουθούνται</string>
|
||||||
|
<string name="no_lists">Δεν έχεις καμία λίστα ακόμα.</string>
|
||||||
|
<string name="no_followed_hashtags">Δεν ακολουθείς καμία ετικέτα.</string>
|
||||||
|
<string name="manage_lists">Διαχείριση λιστών</string>
|
||||||
|
<string name="manage_hashtags">Διαχείριση ετικετών</string>
|
||||||
<!-- Screen reader description for the menu on the home timeline screen -->
|
<!-- Screen reader description for the menu on the home timeline screen -->
|
||||||
|
<string name="dropdown_menu">Αναπτυσσόμενο μενού</string>
|
||||||
|
<string name="edit_list">Επεξεργασία λίστας</string>
|
||||||
|
<string name="list_members">Μέλη λίστας</string>
|
||||||
|
<string name="delete_list">Διαγραφή λίστας</string>
|
||||||
<!-- %s is the name of the list -->
|
<!-- %s is the name of the list -->
|
||||||
|
<string name="delete_list_confirm">Διαγραφή “%s”;</string>
|
||||||
|
<string name="list_exclusive">Απόκρυψη μελών στο Ακολουθείς</string>
|
||||||
<!-- %s is a username -->
|
<!-- %s is a username -->
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -404,4 +404,7 @@
|
|||||||
<string name="sk_muted_accounts">Cuentas silenciadas</string>
|
<string name="sk_muted_accounts">Cuentas silenciadas</string>
|
||||||
<string name="sk_settings_like_icon">Utilizar el corazón como icono favorito</string>
|
<string name="sk_settings_like_icon">Utilizar el corazón como icono favorito</string>
|
||||||
<string name="sk_recently_used">Utilizado recientemente</string>
|
<string name="sk_recently_used">Utilizado recientemente</string>
|
||||||
|
<string name="sk_set_as_default">Establecer por defecto</string>
|
||||||
|
<string name="sk_settings_color_palette_default">Por defecto (%s)</string>
|
||||||
|
<string name="sk_settings_underlined_links">Enlaces subrayados</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -402,7 +402,10 @@
|
|||||||
<string name="sk_time_days">%d jours</string>
|
<string name="sk_time_days">%d jours</string>
|
||||||
<string name="sk_trending_posts_info_banner">Ces publications gagnent actuellement du terrain sur le Fediverse.</string>
|
<string name="sk_trending_posts_info_banner">Ces publications gagnent actuellement du terrain sur le Fediverse.</string>
|
||||||
<string name="sk_blocked_accounts">Comptes bloqués</string>
|
<string name="sk_blocked_accounts">Comptes bloqués</string>
|
||||||
<string name="sk_muted_accounts">Comptes silenciés</string>
|
<string name="sk_muted_accounts">Comptes masqués</string>
|
||||||
<string name="sk_settings_like_icon">Utiliser le cœur comme icône pour les favoris</string>
|
<string name="sk_settings_like_icon">Utiliser le cœur comme icône pour les favoris</string>
|
||||||
<string name="sk_recently_used">Utilisé récemment</string>
|
<string name="sk_recently_used">Utilisé récemment</string>
|
||||||
|
<string name="sk_set_as_default">Définir par défaut</string>
|
||||||
|
<string name="sk_settings_color_palette_default">Par défaut (%s)</string>
|
||||||
|
<string name="sk_settings_underlined_links">Liens soulignés</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -396,6 +396,9 @@
|
|||||||
<string name="sk_post_contains_media">Kiriman berisi media</string>
|
<string name="sk_post_contains_media">Kiriman berisi media</string>
|
||||||
<string name="sk_blocked_accounts">Akun yang diblokir</string>
|
<string name="sk_blocked_accounts">Akun yang diblokir</string>
|
||||||
<string name="sk_muted_accounts">Akun yang dibisukan</string>
|
<string name="sk_muted_accounts">Akun yang dibisukan</string>
|
||||||
<string name="sk_settings_like_icon">Gunakam hati sebagai ikon favorit</string>
|
<string name="sk_settings_like_icon">Gunakan hati sebagai ikon favorit</string>
|
||||||
<string name="sk_recently_used">Baru-baru ini digunakan</string>
|
<string name="sk_recently_used">Baru-baru ini digunakan</string>
|
||||||
|
<string name="sk_set_as_default">Tetapkan sebagai bawaan</string>
|
||||||
|
<string name="sk_settings_color_palette_default">Bawaan (%s)</string>
|
||||||
|
<string name="sk_settings_underlined_links">Tautan yang digarisbawahi</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -401,4 +401,7 @@
|
|||||||
<string name="sk_muted_accounts">Conturi amuțite</string>
|
<string name="sk_muted_accounts">Conturi amuțite</string>
|
||||||
<string name="sk_settings_like_icon">Folosiți inimă ca iconița favorite</string>
|
<string name="sk_settings_like_icon">Folosiți inimă ca iconița favorite</string>
|
||||||
<string name="sk_recently_used">Recent folosit</string>
|
<string name="sk_recently_used">Recent folosit</string>
|
||||||
|
<string name="sk_set_as_default">Setați ca implicit</string>
|
||||||
|
<string name="sk_settings_color_palette_default">Implicit (%s)</string>
|
||||||
|
<string name="sk_settings_underlined_links">Link-uri subliniate</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -10,11 +10,12 @@
|
|||||||
<string name="finishing_auth">Slutför autentisering…</string>
|
<string name="finishing_auth">Slutför autentisering…</string>
|
||||||
<string name="user_boosted">%s boostade</string>
|
<string name="user_boosted">%s boostade</string>
|
||||||
<string name="in_reply_to">Som svar på %s</string>
|
<string name="in_reply_to">Som svar på %s</string>
|
||||||
<string name="notifications">Notiser</string>
|
<string name="notifications">Aviseringar</string>
|
||||||
<string name="user_followed_you">%s följde dig</string>
|
<string name="user_followed_you">%s följde dig</string>
|
||||||
<string name="user_sent_follow_request">%s skickade en förfrågan om att följa dig</string>
|
<string name="user_sent_follow_request">%s skickade en förfrågan om att följa dig</string>
|
||||||
<string name="user_favorited">%s favoritmarkerade ditt inlägg</string>
|
<string name="user_favorited">%s favoritmarkerade ditt inlägg</string>
|
||||||
<string name="notification_boosted">%s boostade ditt inlägg</string>
|
<string name="notification_boosted">%s boostade ditt inlägg</string>
|
||||||
|
<string name="poll_ended">Se resultatet av en omröstning du röstade i</string>
|
||||||
<string name="share_toot_title">Dela</string>
|
<string name="share_toot_title">Dela</string>
|
||||||
<string name="settings">Inställningar</string>
|
<string name="settings">Inställningar</string>
|
||||||
<string name="publish">Publicera</string>
|
<string name="publish">Publicera</string>
|
||||||
@@ -105,7 +106,7 @@
|
|||||||
<string name="do_unblock">Avblockera</string>
|
<string name="do_unblock">Avblockera</string>
|
||||||
<string name="button_blocked">Blockerad</string>
|
<string name="button_blocked">Blockerad</string>
|
||||||
<string name="action_vote">Rösta</string>
|
<string name="action_vote">Rösta</string>
|
||||||
<string name="delete">Radera</string>
|
<string name="delete">Ta bort</string>
|
||||||
<string name="confirm_delete_title">Radera inlägg</string>
|
<string name="confirm_delete_title">Radera inlägg</string>
|
||||||
<string name="confirm_delete">Är du säker på att du vill radera detta inlägg?</string>
|
<string name="confirm_delete">Är du säker på att du vill radera detta inlägg?</string>
|
||||||
<string name="deleting">Raderar…</string>
|
<string name="deleting">Raderar…</string>
|
||||||
@@ -118,12 +119,15 @@
|
|||||||
<string name="hashtags">Hashtaggar</string>
|
<string name="hashtags">Hashtaggar</string>
|
||||||
<string name="news">Nyheter</string>
|
<string name="news">Nyheter</string>
|
||||||
<string name="for_you">För dig</string>
|
<string name="for_you">För dig</string>
|
||||||
|
<string name="all_notifications">Alla</string>
|
||||||
<string name="mentions">Omnämningar</string>
|
<string name="mentions">Omnämningar</string>
|
||||||
<plurals name="x_people_talking">
|
<plurals name="x_people_talking">
|
||||||
<item quantity="one">%d person pratar</item>
|
<item quantity="one">%d person pratar</item>
|
||||||
<item quantity="other">%d personer pratar</item>
|
<item quantity="other">%d personer pratar</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="report_title">Rapportera %s</string>
|
<string name="report_title">Rapportera %s</string>
|
||||||
|
<string name="report_choose_reason">Vad är fel med det här inlägget?</string>
|
||||||
|
<string name="report_choose_reason_account">Vad är fel med %s?</string>
|
||||||
<string name="report_choose_reason_subtitle">Välj den bästa träffen</string>
|
<string name="report_choose_reason_subtitle">Välj den bästa träffen</string>
|
||||||
<string name="report_reason_personal">Jag gillar det inte</string>
|
<string name="report_reason_personal">Jag gillar det inte</string>
|
||||||
<string name="report_reason_personal_subtitle">Det är inget som du vill se</string>
|
<string name="report_reason_personal_subtitle">Det är inget som du vill se</string>
|
||||||
@@ -131,6 +135,7 @@
|
|||||||
<string name="report_reason_spam_subtitle">Skadliga länkar, bedrägligt beteende eller repetitiva svar</string>
|
<string name="report_reason_spam_subtitle">Skadliga länkar, bedrägligt beteende eller repetitiva svar</string>
|
||||||
<string name="report_reason_violation">Det bryter mot serverns regler</string>
|
<string name="report_reason_violation">Det bryter mot serverns regler</string>
|
||||||
<string name="report_reason_violation_subtitle">Du är medveten om att det bryter mot specifika regler</string>
|
<string name="report_reason_violation_subtitle">Du är medveten om att det bryter mot specifika regler</string>
|
||||||
|
<string name="report_reason_other">Det är något annat</string>
|
||||||
<string name="report_reason_other_subtitle">Frågan passar inte in i andra kategorier</string>
|
<string name="report_reason_other_subtitle">Frågan passar inte in i andra kategorier</string>
|
||||||
<string name="report_choose_rule">Vilka regler överträds?</string>
|
<string name="report_choose_rule">Vilka regler överträds?</string>
|
||||||
<string name="report_choose_rule_subtitle">Välj alla som stämmer</string>
|
<string name="report_choose_rule_subtitle">Välj alla som stämmer</string>
|
||||||
@@ -139,9 +144,14 @@
|
|||||||
<string name="report_comment_title">Finns det något annat vi borde veta?</string>
|
<string name="report_comment_title">Finns det något annat vi borde veta?</string>
|
||||||
<string name="report_comment_hint">Ytterligare kommentarer</string>
|
<string name="report_comment_hint">Ytterligare kommentarer</string>
|
||||||
<string name="sending_report">Skickar rapport…</string>
|
<string name="sending_report">Skickar rapport…</string>
|
||||||
|
<string name="report_sent_title">Tack för att du rapporterar, vi kommer att titta på detta.</string>
|
||||||
|
<string name="report_sent_subtitle">Medan vi granskar detta kan du vidta åtgärder mot %s:</string>
|
||||||
<string name="unfollow_user">Avfölj %s</string>
|
<string name="unfollow_user">Avfölj %s</string>
|
||||||
<string name="unfollow">Avfölj</string>
|
<string name="unfollow">Avfölj</string>
|
||||||
|
<string name="mute_user_explain">Du kommer inte se deras inlägg. De kan fortfarande följa dig och se dina inlägg. De kommer inte veta att de är tystade.</string>
|
||||||
|
<string name="block_user_explain">Du kommer inte se deras inlägg. De kommer inte kunna se dina inlägg eller följa dig. De kommer kunna se att de är blockerade.</string>
|
||||||
<string name="report_personal_title">Vill du inte se detta?</string>
|
<string name="report_personal_title">Vill du inte se detta?</string>
|
||||||
|
<string name="report_personal_subtitle">Här är dina alternativ för att bestämma vad du ser på Mastodon:</string>
|
||||||
<string name="back">Tillbaka</string>
|
<string name="back">Tillbaka</string>
|
||||||
<string name="search_communities">Servernamn eller URL</string>
|
<string name="search_communities">Servernamn eller URL</string>
|
||||||
<string name="instance_rules_title">Serverregler</string>
|
<string name="instance_rules_title">Serverregler</string>
|
||||||
@@ -168,19 +178,23 @@
|
|||||||
<string name="category_tech">Teknik</string>
|
<string name="category_tech">Teknik</string>
|
||||||
<string name="confirm_email_title">Kolla din inkorg</string>
|
<string name="confirm_email_title">Kolla din inkorg</string>
|
||||||
<!-- %s is the email address -->
|
<!-- %s is the email address -->
|
||||||
|
<string name="confirm_email_subtitle">Klicka på länken som vi har skickat till dig för att bekräfta %s. Vi väntar här.</string>
|
||||||
<string name="confirm_email_didnt_get">Fick du ingen länk?</string>
|
<string name="confirm_email_didnt_get">Fick du ingen länk?</string>
|
||||||
<string name="resend">Skicka igen</string>
|
<string name="resend">Skicka igen</string>
|
||||||
<string name="open_email_app">Öppna e-postappen</string>
|
<string name="open_email_app">Öppna e-postappen</string>
|
||||||
<string name="resent_email">Bekräftelse via e-post skickad</string>
|
<string name="resent_email">Bekräftelse via e-post skickad</string>
|
||||||
|
<string name="compose_hint">Skriv eller klistra in vad du har på hjärtat</string>
|
||||||
<string name="content_warning">Innehållsvarning</string>
|
<string name="content_warning">Innehållsvarning</string>
|
||||||
<string name="save">Spara</string>
|
<string name="save">Spara</string>
|
||||||
<string name="add_alt_text">Lägg till alternativtext</string>
|
<string name="add_alt_text">Lägg till alternativtext</string>
|
||||||
<string name="visibility_public">Offentlig</string>
|
<string name="visibility_public">Offentlig</string>
|
||||||
<string name="visibility_followers_only">Endast följare</string>
|
<string name="visibility_followers_only">Endast följare</string>
|
||||||
|
<string name="visibility_private">Bara omnämnda personer</string>
|
||||||
<string name="recent_searches">Nyligen</string>
|
<string name="recent_searches">Nyligen</string>
|
||||||
<string name="skip">Hoppa över</string>
|
<string name="skip">Hoppa över</string>
|
||||||
<string name="notification_type_follow">Nya följare</string>
|
<string name="notification_type_follow">Nya följare</string>
|
||||||
<string name="notification_type_favorite">Favoriter</string>
|
<string name="notification_type_favorite">Favoriter</string>
|
||||||
|
<string name="notification_type_reblog">Boostar</string>
|
||||||
<string name="notification_type_mention">Omnämningar</string>
|
<string name="notification_type_mention">Omnämningar</string>
|
||||||
<string name="notification_type_poll">Omröstningar</string>
|
<string name="notification_type_poll">Omröstningar</string>
|
||||||
<string name="choose_account">Välj konto</string>
|
<string name="choose_account">Välj konto</string>
|
||||||
@@ -188,6 +202,7 @@
|
|||||||
<string name="media_attachment_unsupported_type">Filen %s är av en typ som inte stöds</string>
|
<string name="media_attachment_unsupported_type">Filen %s är av en typ som inte stöds</string>
|
||||||
<string name="media_attachment_too_big">Filen %1$s överskrider storleksgränsen på %2$s MB</string>
|
<string name="media_attachment_too_big">Filen %1$s överskrider storleksgränsen på %2$s MB</string>
|
||||||
<string name="settings_theme">Utseende</string>
|
<string name="settings_theme">Utseende</string>
|
||||||
|
<string name="theme_auto">Använd systeminställning</string>
|
||||||
<string name="theme_light">Ljust</string>
|
<string name="theme_light">Ljust</string>
|
||||||
<string name="theme_dark">Mörkt</string>
|
<string name="theme_dark">Mörkt</string>
|
||||||
<string name="settings_behavior">Beteende</string>
|
<string name="settings_behavior">Beteende</string>
|
||||||
@@ -201,6 +216,8 @@
|
|||||||
<string name="settings_app_version">Mastodon för Android v%1$s (%2$d)</string>
|
<string name="settings_app_version">Mastodon för Android v%1$s (%2$d)</string>
|
||||||
<string name="media_cache_cleared">Mediacache rensad</string>
|
<string name="media_cache_cleared">Mediacache rensad</string>
|
||||||
<string name="confirm_log_out">Logga ut från %s?</string>
|
<string name="confirm_log_out">Logga ut från %s?</string>
|
||||||
|
<string name="sensitive_content_explain">Författaren markerade detta medium som känsligt.</string>
|
||||||
|
<string name="avatar_description">Gå till %ss profil</string>
|
||||||
<string name="more_options">Fler alternativ</string>
|
<string name="more_options">Fler alternativ</string>
|
||||||
<string name="new_post">Nytt inlägg</string>
|
<string name="new_post">Nytt inlägg</string>
|
||||||
<string name="button_reply">Svara</string>
|
<string name="button_reply">Svara</string>
|
||||||
@@ -217,7 +234,10 @@
|
|||||||
<string name="follow_user">Följ %s</string>
|
<string name="follow_user">Följ %s</string>
|
||||||
<string name="unfollowed_user">Avföljde %s</string>
|
<string name="unfollowed_user">Avföljde %s</string>
|
||||||
<string name="followed_user">Du följer nu %s</string>
|
<string name="followed_user">Du följer nu %s</string>
|
||||||
|
<string name="following_user_requested">Begär att följa %s</string>
|
||||||
<string name="open_in_browser">Öppna i webbläsare</string>
|
<string name="open_in_browser">Öppna i webbläsare</string>
|
||||||
|
<string name="hide_boosts_from_user">Dölj boostar från %s</string>
|
||||||
|
<string name="show_boosts_from_user">Visa boostar från %s</string>
|
||||||
<string name="signup_reason">Varför vill du gå med?</string>
|
<string name="signup_reason">Varför vill du gå med?</string>
|
||||||
<string name="signup_reason_note">Detta kommer hjälpa oss att granska din ansökan.</string>
|
<string name="signup_reason_note">Detta kommer hjälpa oss att granska din ansökan.</string>
|
||||||
<string name="clear">Rensa</string>
|
<string name="clear">Rensa</string>
|
||||||
@@ -231,7 +251,12 @@
|
|||||||
<string name="error_saving_file">Fel vid sparande av fil</string>
|
<string name="error_saving_file">Fel vid sparande av fil</string>
|
||||||
<string name="file_saved">Filen sparad</string>
|
<string name="file_saved">Filen sparad</string>
|
||||||
<string name="downloading">Laddar ner…</string>
|
<string name="downloading">Laddar ner…</string>
|
||||||
|
<string name="no_app_to_handle_action">Det finns ingen app för att hantera denna åtgärd</string>
|
||||||
|
<string name="local_timeline">Lokal</string>
|
||||||
|
<string name="trending_posts_info_banner">Detta är de inlägg som engagerar på Mastodon.</string>
|
||||||
|
<string name="trending_links_info_banner">Det här är nyheterna som det talas om på Mastodon.</string>
|
||||||
<!-- %s is the server domain -->
|
<!-- %s is the server domain -->
|
||||||
|
<string name="local_timeline_info_banner">Detta är alla inlägg från alla användare på din server (%s).</string>
|
||||||
<string name="recommended_accounts_info_banner">Du kanske gillar dessa konton baserat på andra konton du följer.</string>
|
<string name="recommended_accounts_info_banner">Du kanske gillar dessa konton baserat på andra konton du följer.</string>
|
||||||
<string name="see_new_posts">Se nya inlägg</string>
|
<string name="see_new_posts">Se nya inlägg</string>
|
||||||
<string name="load_missing_posts">Ladda saknade inlägg</string>
|
<string name="load_missing_posts">Ladda saknade inlägg</string>
|
||||||
@@ -306,6 +331,7 @@
|
|||||||
<string name="login_title">Välkommen tillbaka</string>
|
<string name="login_title">Välkommen tillbaka</string>
|
||||||
<string name="login_subtitle">Logga in på den server där du skapade ditt konto.</string>
|
<string name="login_subtitle">Logga in på den server där du skapade ditt konto.</string>
|
||||||
<string name="server_url">Server-URL</string>
|
<string name="server_url">Server-URL</string>
|
||||||
|
<string name="signup_random_server_explain">Vi kommer att välja en server baserat på ditt språk om du fortsätter utan att göra ett val.</string>
|
||||||
<string name="server_filter_any_language">Vilket språk som helst</string>
|
<string name="server_filter_any_language">Vilket språk som helst</string>
|
||||||
<string name="server_filter_instant_signup">Omedelbar registrering</string>
|
<string name="server_filter_instant_signup">Omedelbar registrering</string>
|
||||||
<string name="server_filter_manual_review">Manuell granskning</string>
|
<string name="server_filter_manual_review">Manuell granskning</string>
|
||||||
@@ -327,13 +353,16 @@
|
|||||||
<string name="popular_on_mastodon">Populärt på Mastodon</string>
|
<string name="popular_on_mastodon">Populärt på Mastodon</string>
|
||||||
<string name="follow_all">Följ alla</string>
|
<string name="follow_all">Följ alla</string>
|
||||||
<string name="server_rules_disagree">Instämmer inte alls</string>
|
<string name="server_rules_disagree">Instämmer inte alls</string>
|
||||||
|
<string name="privacy_policy_explanation">TL;DR: Vi samlar inte in eller bearbetar något.</string>
|
||||||
<!-- %s is server domain -->
|
<!-- %s is server domain -->
|
||||||
<string name="server_policy_disagree">Håller inte med %s</string>
|
<string name="server_policy_disagree">Håller inte med %s</string>
|
||||||
<string name="profile_bio">Biografi</string>
|
<string name="profile_bio">Biografi</string>
|
||||||
<!-- Shown in a progress dialog when you tap "follow all" -->
|
<!-- Shown in a progress dialog when you tap "follow all" -->
|
||||||
<string name="sending_follows">Följer användare…</string>
|
<string name="sending_follows">Följer användare…</string>
|
||||||
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
|
<!-- %1$s is server domain, %2$s is email domain. You can reorder these placeholders to fit your language better. -->
|
||||||
|
<string name="signup_email_domain_blocked">%1$s tillåter inte registrering från %2$s. Prova en annan eller <a>välj en annan server</a>.</string>
|
||||||
<string name="spoiler_show">Visa ändå</string>
|
<string name="spoiler_show">Visa ändå</string>
|
||||||
|
<string name="spoiler_hide">Dölj igen</string>
|
||||||
<string name="poll_multiple_choice">Välj en eller flera</string>
|
<string name="poll_multiple_choice">Välj en eller flera</string>
|
||||||
<string name="save_changes">Spara ändringar</string>
|
<string name="save_changes">Spara ändringar</string>
|
||||||
<string name="profile_timeline">Tidslinje</string>
|
<string name="profile_timeline">Tidslinje</string>
|
||||||
@@ -349,9 +378,12 @@
|
|||||||
<string name="welcome_to_mastodon">Välkommen till Mastodon</string>
|
<string name="welcome_to_mastodon">Välkommen till Mastodon</string>
|
||||||
<string name="welcome_paragraph1">Mastodon är ett decentraliserat socialt nätverk, vilket innebär att inget enskilt företag kontrollerar det. Det består av många oberoende servrar, alla sammankopplade.</string>
|
<string name="welcome_paragraph1">Mastodon är ett decentraliserat socialt nätverk, vilket innebär att inget enskilt företag kontrollerar det. Det består av många oberoende servrar, alla sammankopplade.</string>
|
||||||
<string name="what_are_servers">Vad är servrar?</string>
|
<string name="what_are_servers">Vad är servrar?</string>
|
||||||
|
<string name="opening_link">Öppnar länk…</string>
|
||||||
|
<string name="link_not_supported">Denna länk stöds inte i appen</string>
|
||||||
<string name="log_out_all_accounts">Logga ut från alla konton</string>
|
<string name="log_out_all_accounts">Logga ut från alla konton</string>
|
||||||
<string name="confirm_log_out_all_accounts">Logga ut från alla konton?</string>
|
<string name="confirm_log_out_all_accounts">Logga ut från alla konton?</string>
|
||||||
<string name="retry">Försök igen</string>
|
<string name="retry">Försök igen</string>
|
||||||
|
<string name="post_failed">Misslyckades att skapa inlägg</string>
|
||||||
<!-- %s is formatted file size ("467 KB image") -->
|
<!-- %s is formatted file size ("467 KB image") -->
|
||||||
<string name="attachment_description_image">%s bild</string>
|
<string name="attachment_description_image">%s bild</string>
|
||||||
<string name="attachment_description_video">%s video</string>
|
<string name="attachment_description_video">%s video</string>
|
||||||
@@ -362,33 +394,80 @@
|
|||||||
<string name="attachment_type_audio">Ljud</string>
|
<string name="attachment_type_audio">Ljud</string>
|
||||||
<string name="attachment_type_gif">GIF</string>
|
<string name="attachment_type_gif">GIF</string>
|
||||||
<string name="attachment_type_unknown">Fil</string>
|
<string name="attachment_type_unknown">Fil</string>
|
||||||
|
<string name="add_poll_option">Lägg till röstningsalternativ</string>
|
||||||
|
<string name="poll_length">Undersökningens längd</string>
|
||||||
|
<string name="poll_style">Stil</string>
|
||||||
|
<string name="compose_poll_single_choice">Välj en</string>
|
||||||
|
<string name="compose_poll_multiple_choice">Flera val</string>
|
||||||
|
<string name="delete_poll_option">Ta bort röstningsalternativ</string>
|
||||||
|
<string name="poll_style_title">Undersökningsstil</string>
|
||||||
|
<string name="alt_text">Alt-Text</string>
|
||||||
<string name="help">Hjälp</string>
|
<string name="help">Hjälp</string>
|
||||||
|
<string name="what_is_alt_text">Vad är alt-text?</string>
|
||||||
<string name="edit_post">Redigera inlägg</string>
|
<string name="edit_post">Redigera inlägg</string>
|
||||||
<string name="no_verified_link">Ingen verifierad länk</string>
|
<string name="no_verified_link">Ingen verifierad länk</string>
|
||||||
|
<string name="compose_autocomplete_emoji_empty">Bläddra bland emoji</string>
|
||||||
|
<string name="compose_autocomplete_users_empty">Hitta den du söker efter</string>
|
||||||
|
<string name="no_search_results">Kunde inte hitta något för dessa söktermer</string>
|
||||||
<string name="language">Språk</string>
|
<string name="language">Språk</string>
|
||||||
<string name="language_default">Standard</string>
|
<string name="language_default">Standard</string>
|
||||||
|
<string name="language_system">System</string>
|
||||||
|
<string name="language_detecting">Identifiera språk</string>
|
||||||
|
<string name="language_cant_detect">Det gick inte att identifiera språk</string>
|
||||||
|
<string name="language_detected">Identifierat</string>
|
||||||
|
<string name="media_hidden">Dold media</string>
|
||||||
|
<string name="post_hidden">Inlägg dolt</string>
|
||||||
<string name="report_title_post">Rapportera inlägg</string>
|
<string name="report_title_post">Rapportera inlägg</string>
|
||||||
|
<string name="forward_report_explanation">Kontot kommer från en annan server. Vill du skicka en anonymiserad kopia av rapporten dit också?</string>
|
||||||
<!-- %s is the server domain -->
|
<!-- %s is the server domain -->
|
||||||
|
<string name="forward_report_to_server">Vidarebefordra till %s</string>
|
||||||
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
|
<!-- Shown on the "stamp" on the screen that appears after you report a post/user. Please keep the translation short, preferably a single word -->
|
||||||
<string name="reported">Rapporterad</string>
|
<string name="reported">Rapporterad</string>
|
||||||
|
<string name="muted_user">Tystade %s</string>
|
||||||
|
<string name="report_sent_already_blocked">Du har redan blockerat den här användaren, så det finns inget annat du behöver göra medan vi granskar din rapport.</string>
|
||||||
|
<string name="report_personal_already_blocked">Du har redan blockerat den här användaren, så det finns inget annat du behöver göra.\n\nTack för att du hjälper till att hålla Mastodon en säker plats för alla!</string>
|
||||||
|
<string name="blocked_user">Blockerade %s</string>
|
||||||
<string name="mark_all_notifications_read">Markera alla som lästa</string>
|
<string name="mark_all_notifications_read">Markera alla som lästa</string>
|
||||||
|
<string name="settings_display">Skärm</string>
|
||||||
<string name="settings_filters">Filter</string>
|
<string name="settings_filters">Filter</string>
|
||||||
<string name="settings_server_explanation">Översikt, regler och moderatorer</string>
|
<string name="settings_server_explanation">Översikt, regler och moderatorer</string>
|
||||||
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
|
<!-- %s is the app name (Mastodon, key app_name). I made it a placeholder so everything Just Works™ with forks -->
|
||||||
<string name="about_app">Om %s</string>
|
<string name="about_app">Om %s</string>
|
||||||
|
<string name="default_post_language">Standardspråk för inlägg</string>
|
||||||
|
<string name="settings_alt_text_reminders">Lägg till alt-textpåminnelser</string>
|
||||||
|
<string name="settings_confirm_unfollow">Fråga innan du avföljer någon</string>
|
||||||
|
<string name="settings_confirm_boost">Fråga innan du boostar</string>
|
||||||
<string name="settings_confirm_delete_post">Fråga innan du raderar inlägg</string>
|
<string name="settings_confirm_delete_post">Fråga innan du raderar inlägg</string>
|
||||||
|
<string name="pause_all_notifications">Pausa alla</string>
|
||||||
|
<string name="pause_notifications_off">Av</string>
|
||||||
|
<string name="notifications_policy_anyone">Alla</string>
|
||||||
<string name="notifications_policy_followed">Personer som följer dig</string>
|
<string name="notifications_policy_followed">Personer som följer dig</string>
|
||||||
|
<string name="notifications_policy_follower">Personer du följer</string>
|
||||||
<string name="notifications_policy_no_one">Ingen</string>
|
<string name="notifications_policy_no_one">Ingen</string>
|
||||||
|
<string name="settings_notifications_policy">Få aviseringar från</string>
|
||||||
|
<string name="notification_type_mentions_and_replies">Omnämningar och svar</string>
|
||||||
|
<string name="pause_all_notifications_title">Pausa alla aviseringar</string>
|
||||||
<plurals name="x_weeks">
|
<plurals name="x_weeks">
|
||||||
<item quantity="one">%d vecka</item>
|
<item quantity="one">%d vecka</item>
|
||||||
<item quantity="other">%d veckor</item>
|
<item quantity="other">%d veckor</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<!-- %1$s is the date (may be relative, e.g. "today" or "yesterday"), %2$s is the time. You can reorder these placeholders if that works better for your language -->
|
<!-- %1$s is the date (may be relative, e.g. "today" or "yesterday"), %2$s is the time. You can reorder these placeholders if that works better for your language -->
|
||||||
|
<string name="today">idag</string>
|
||||||
|
<string name="yesterday">igår</string>
|
||||||
|
<string name="tomorrow">i morgon</string>
|
||||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||||
|
<string name="pause_notifications_banner">Aviseringar kommer att återupptas %s.</string>
|
||||||
|
<string name="resume_notifications_now">Återuppta nu</string>
|
||||||
|
<string name="open_system_notification_settings">Gå till aviseringsinställningar</string>
|
||||||
<string name="about_server">Om</string>
|
<string name="about_server">Om</string>
|
||||||
<string name="server_rules">Regler</string>
|
<string name="server_rules">Regler</string>
|
||||||
<string name="server_administrator">Administratör</string>
|
<string name="server_administrator">Administratör</string>
|
||||||
|
<string name="send_email_to_server_admin">Meddela administratör</string>
|
||||||
|
<string name="settings_even_more">Ännu fler inställningar</string>
|
||||||
|
<string name="settings_show_cws">Visa innehållsvarningar</string>
|
||||||
|
<string name="settings_hide_sensitive_media">Dölj media markerad som känsligt</string>
|
||||||
|
<string name="settings_show_interaction_counts">Antal inläggsinteraktioner</string>
|
||||||
<string name="settings_show_emoji_in_names">Anpassad emoji i visningsnamn</string>
|
<string name="settings_show_emoji_in_names">Anpassad emoji i visningsnamn</string>
|
||||||
<plurals name="in_x_hours">
|
<plurals name="in_x_hours">
|
||||||
<item quantity="one">om %d timme</item>
|
<item quantity="one">om %d timme</item>
|
||||||
@@ -398,29 +477,51 @@
|
|||||||
<item quantity="one">%d timme sedan</item>
|
<item quantity="one">%d timme sedan</item>
|
||||||
<item quantity="other">%d timmar sedan</item>
|
<item quantity="other">%d timmar sedan</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="count_one">En</string>
|
||||||
<string name="count_two">Två</string>
|
<string name="count_two">Två</string>
|
||||||
<string name="count_three">Tre</string>
|
<string name="count_three">Tre</string>
|
||||||
<string name="count_four">Fyra</string>
|
<string name="count_four">Fyra</string>
|
||||||
<!-- %s is the username -->
|
<!-- %s is the username -->
|
||||||
|
<string name="unfollow_confirmation">Avfölj %s?</string>
|
||||||
<string name="filter_active">Aktiv</string>
|
<string name="filter_active">Aktiv</string>
|
||||||
<string name="filter_inactive">Inaktiv</string>
|
<string name="filter_inactive">Inaktiv</string>
|
||||||
<string name="settings_add_filter">Lägg till filter</string>
|
<string name="settings_add_filter">Lägg till filter</string>
|
||||||
<string name="settings_edit_filter">Redigera filter</string>
|
<string name="settings_edit_filter">Redigera filter</string>
|
||||||
|
<string name="settings_filter_duration">Varaktighet</string>
|
||||||
|
<string name="settings_filter_muted_words">Tystade ord</string>
|
||||||
|
<string name="settings_filter_context">Tysta från</string>
|
||||||
|
<string name="settings_filter_show_cw">Visa med innehållsvarning</string>
|
||||||
<string name="settings_delete_filter">Radera filter</string>
|
<string name="settings_delete_filter">Radera filter</string>
|
||||||
|
<string name="filter_duration_forever">För alltid</string>
|
||||||
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
<!-- %s is the timestamp ("tomorrow at 12:34") -->
|
||||||
<string name="selection_2_options">%1$s och %2$s</string>
|
<string name="selection_2_options">%1$s och %2$s</string>
|
||||||
<string name="selection_3_options">%1$s, %2$s och %3$s</string>
|
<string name="selection_3_options">%1$s, %2$s och %3$s</string>
|
||||||
|
<string name="filter_context_home_lists">Hem & listor</string>
|
||||||
|
<string name="filter_context_notifications">Aviseringar</string>
|
||||||
|
<string name="filter_context_public_timelines">Publika tidslinjer</string>
|
||||||
|
<string name="filter_context_threads_replies">Trådar & svar</string>
|
||||||
<string name="filter_context_profiles">Profiler</string>
|
<string name="filter_context_profiles">Profiler</string>
|
||||||
|
<string name="settings_filter_title">Rubrik</string>
|
||||||
|
<string name="settings_delete_filter_title">Ta bort filter ”%s”?</string>
|
||||||
<string name="settings_delete_filter_confirmation">Detta filter kommer raderas från ditt konto på alla dina enheter.</string>
|
<string name="settings_delete_filter_confirmation">Detta filter kommer raderas från ditt konto på alla dina enheter.</string>
|
||||||
|
<string name="add_muted_word">Lägg till tystat ord</string>
|
||||||
|
<string name="edit_muted_word">Redigera tystat ord</string>
|
||||||
<string name="add">Lägg till</string>
|
<string name="add">Lägg till</string>
|
||||||
<string name="filter_word_or_phrase">Ord eller fras</string>
|
<string name="filter_word_or_phrase">Ord eller fras</string>
|
||||||
|
<string name="settings_delete_filter_word">Ta bort ordet ”%s”?</string>
|
||||||
<string name="enter_selection_mode">Välj</string>
|
<string name="enter_selection_mode">Välj</string>
|
||||||
<string name="select_all">Välj alla</string>
|
<string name="select_all">Välj alla</string>
|
||||||
|
<string name="settings_filter_duration_title">Filtervaraktighet</string>
|
||||||
|
<string name="filter_duration_custom">Anpassad</string>
|
||||||
<plurals name="settings_delete_x_filter_words">
|
<plurals name="settings_delete_x_filter_words">
|
||||||
<item quantity="one">Radera %d ord?</item>
|
<item quantity="one">Radera %d ord?</item>
|
||||||
<item quantity="other">Radera %d ord?</item>
|
<item quantity="other">Radera %d ord?</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="required_form_field_blank">Får inte vara tomt</string>
|
||||||
|
<string name="filter_word_already_in_list">Redan finns i listan</string>
|
||||||
|
<string name="app_update_ready">Appuppdateringen är redo</string>
|
||||||
<string name="app_update_version">Version %s</string>
|
<string name="app_update_version">Version %s</string>
|
||||||
|
<string name="downloading_update">Ladda ner (%d%%)</string>
|
||||||
<!-- Shown like a content warning, %s is the name of the filter -->
|
<!-- Shown like a content warning, %s is the name of the filter -->
|
||||||
<string name="post_matches_filter_x">Matchar filter \"%s\"</string>
|
<string name="post_matches_filter_x">Matchar filter \"%s\"</string>
|
||||||
<string name="search_mastodon">Sök i Mastodon</string>
|
<string name="search_mastodon">Sök i Mastodon</string>
|
||||||
@@ -428,6 +529,8 @@
|
|||||||
<string name="search_open_url">Öppna URL i Mastodon</string>
|
<string name="search_open_url">Öppna URL i Mastodon</string>
|
||||||
<string name="posts_matching_hashtag">Inlägg med \"%s\"</string>
|
<string name="posts_matching_hashtag">Inlägg med \"%s\"</string>
|
||||||
<string name="search_go_to_account">Gå till %s</string>
|
<string name="search_go_to_account">Gå till %s</string>
|
||||||
|
<string name="posts_matching_string">Inlägg med \"%s\"</string>
|
||||||
|
<string name="accounts_matching_string">Personer med ”%s”</string>
|
||||||
<!-- Shown in the post header. Please keep it short -->
|
<!-- Shown in the post header. Please keep it short -->
|
||||||
<string name="time_seconds_ago_short">%ds sedan</string>
|
<string name="time_seconds_ago_short">%ds sedan</string>
|
||||||
<string name="time_minutes_ago_short">%dm sedan</string>
|
<string name="time_minutes_ago_short">%dm sedan</string>
|
||||||
@@ -436,7 +539,38 @@
|
|||||||
<!-- %s is the name of the post language -->
|
<!-- %s is the name of the post language -->
|
||||||
<string name="translate_post">Översätt från %s</string>
|
<string name="translate_post">Översätt från %s</string>
|
||||||
<!-- %1$s is the language, %2$s is the name of the translation service -->
|
<!-- %1$s is the language, %2$s is the name of the translation service -->
|
||||||
|
<string name="post_translated">Översatt från %1$s med %2$s</string>
|
||||||
|
<string name="translation_show_original">Visa original</string>
|
||||||
|
<string name="translation_failed">Översättningen misslyckades. Det kan hända att administratören inte har aktiverat översättningar på den här servern eller att servern kör en äldre version av Mastodon som inte har stöd för översättningar ännu.</string>
|
||||||
|
<string name="settings_privacy">Integritet och räckvidd</string>
|
||||||
|
<string name="settings_indexable">Inkludera offentliga inlägg i sökresultaten</string>
|
||||||
|
<string name="error_playing_video">Fel vid videouppspelning</string>
|
||||||
|
<string name="timeline_following">Följer</string>
|
||||||
|
<string name="lists">Listor</string>
|
||||||
|
<string name="followed_hashtags">Följda hashtaggar</string>
|
||||||
|
<string name="no_lists">Du har inga listor ännu.</string>
|
||||||
|
<string name="no_followed_hashtags">Du följer inga hashtaggar.</string>
|
||||||
|
<string name="manage_lists">Hantera listor</string>
|
||||||
|
<string name="manage_hashtags">Hantera hashtaggar</string>
|
||||||
<!-- Screen reader description for the menu on the home timeline screen -->
|
<!-- Screen reader description for the menu on the home timeline screen -->
|
||||||
|
<string name="dropdown_menu">Nedrullningsmeny</string>
|
||||||
|
<string name="edit_list">Redigera lista</string>
|
||||||
|
<string name="list_members">Lista medlemmar</string>
|
||||||
|
<string name="delete_list">Ta bort lista</string>
|
||||||
<!-- %s is the name of the list -->
|
<!-- %s is the name of the list -->
|
||||||
|
<string name="delete_list_confirm">Ta bort “%s”?</string>
|
||||||
|
<string name="list_exclusive">Dölj medlemmar i Följer</string>
|
||||||
|
<string name="list_name">Listnamn</string>
|
||||||
|
<string name="list_show_replies_to">Visa svar till</string>
|
||||||
|
<string name="list_replies_no_one">Ingen</string>
|
||||||
|
<string name="list_replies_members">Listmedlemmar</string>
|
||||||
|
<string name="confirm_remove_list_members">Ta bort medlemmar?</string>
|
||||||
|
<string name="remove">Ta bort</string>
|
||||||
|
<string name="add_list_member">Lägg till medlem</string>
|
||||||
|
<string name="search_among_people_you_follow">Sök bland personer du följer</string>
|
||||||
|
<string name="add_user_to_list">Lägg till i lista…</string>
|
||||||
|
<string name="add_user_to_list_title">Lägg till i lista</string>
|
||||||
<!-- %s is a username -->
|
<!-- %s is a username -->
|
||||||
|
<string name="remove_from_list">Ta bort från lista</string>
|
||||||
|
<string name="confirm_remove_list_member">Ta bort medlem?</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -406,4 +406,7 @@
|
|||||||
<string name="sk_muted_accounts">Ігноровані облікові записи</string>
|
<string name="sk_muted_accounts">Ігноровані облікові записи</string>
|
||||||
<string name="sk_settings_like_icon">Використовувати серце як піктограму «Вподобане»</string>
|
<string name="sk_settings_like_icon">Використовувати серце як піктограму «Вподобане»</string>
|
||||||
<string name="sk_recently_used">Недавно використані</string>
|
<string name="sk_recently_used">Недавно використані</string>
|
||||||
|
<string name="sk_settings_underlined_links">Підкреслені посилання</string>
|
||||||
|
<string name="sk_set_as_default">Установити типово</string>
|
||||||
|
<string name="sk_settings_color_palette_default">Усталена (%s)</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -397,4 +397,7 @@
|
|||||||
<string name="sk_muted_accounts">已静音账号</string>
|
<string name="sk_muted_accounts">已静音账号</string>
|
||||||
<string name="sk_settings_like_icon">使用心形作为收藏图标</string>
|
<string name="sk_settings_like_icon">使用心形作为收藏图标</string>
|
||||||
<string name="sk_recently_used">最近使用</string>
|
<string name="sk_recently_used">最近使用</string>
|
||||||
|
<string name="sk_set_as_default">设为默认</string>
|
||||||
|
<string name="sk_settings_color_palette_default">默认(%s)</string>
|
||||||
|
<string name="sk_settings_underlined_links">链接加下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -293,7 +293,7 @@
|
|||||||
<string name="sk_expand">Expand</string>
|
<string name="sk_expand">Expand</string>
|
||||||
<string name="sk_collapse">Collapse</string>
|
<string name="sk_collapse">Collapse</string>
|
||||||
<string name="sk_settings_collapse_long_posts">Collapse very long posts</string>
|
<string name="sk_settings_collapse_long_posts">Collapse very long posts</string>
|
||||||
<string name="sk_unfinished_attachments">Fix attachments?</string>
|
<string name="sk_unfinished_attachments">Uploading attachments</string>
|
||||||
<string name="sk_unfinished_attachments_message">Some attachments haven’t finished uploading.</string>
|
<string name="sk_unfinished_attachments_message">Some attachments haven’t finished uploading.</string>
|
||||||
<string name="sk_settings_hide_interaction">Hide interaction buttons</string>
|
<string name="sk_settings_hide_interaction">Hide interaction buttons</string>
|
||||||
<string name="sk_follow_as">Follow from other account</string>
|
<string name="sk_follow_as">Follow from other account</string>
|
||||||
@@ -411,4 +411,5 @@
|
|||||||
<string name="sk_recently_used">Recently used</string>
|
<string name="sk_recently_used">Recently used</string>
|
||||||
<string name="sk_settings_underlined_links">Underlined links</string>
|
<string name="sk_settings_underlined_links">Underlined links</string>
|
||||||
<string name="sk_set_as_default">Set as default</string>
|
<string name="sk_set_as_default">Set as default</string>
|
||||||
|
<string name="sk_edit_alt_text">Edit alt text</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
<b>Mae Megalodon yn fersiwn wedi'i addasu o'r <href="https://github.com/mastodon/mastodon-android"> app swyddogol Mastodon Android </a> gan ychwanegu nodweddion pwysig sydd ar goll yn yr ap swyddogol, megis ffrwd y ffederasiwn, postio heb ei restru a gwyliwr disgrifiad delwedd.
|
Mae Megalodon yn fersiwn wedi'i addasu o'r <a href="https://github.com/mastodon/mastodon-android">app swyddogol Mastodon Android</a> gan ychwanegu nodweddion pwysig sydd ar goll yn yr ap swyddogol, megis ffrwd y ffederasiwn, postio heb ei restru a gwyliwr disgrifiad delwedd.
|
||||||
|
|
||||||
Nodweddion allweddol
|
<b>Nodweddion allweddol</b>
|
||||||
|
|
||||||
- <b> postio heb ei restru </b>: Postiwch yn gyhoeddus heb gael eich neges yn ymddangos mewn pynciau trendio, hashnodau neu ffrydiau cyhoeddus.
|
- <b>Postio heb ei restru</b>: Postiwch yn gyhoeddus heb gael eich neges yn ymddangos mewn pynciau trendio, hashnodau neu ffrydiau cyhoeddus.
|
||||||
- <b>Ffrwd y ffederasiwn</b>: Gwelwch yr holl negeseuon cyhoeddus gan bobl ar bob gweinydd arall yn y fydysawd mae eich gweinydd cartref wedi'i gysylltu iddo.
|
- <b>Ffrwd y ffederasiwn</b>: Gwelwch yr holl negeseuon cyhoeddus gan bobl ar bob gweinydd arall yn y fydysawd mae eich gweinydd cartref wedi'i gysylltu iddo.
|
||||||
- <b>Ffrydiau personol</b>: Pinio unrhyw restr neu hashnod i dab cartref Megalodon er mwyn llithro rhwng eich hoff bynciau a phobl
|
- <b>Ffrydiau personol</b>: Pinio unrhyw restr neu hashnod i dab cartref Megalodon er mwyn llithro rhwng eich hoff bynciau a phobl
|
||||||
- <b>Drafftiau a negeseuon wedi'u trefnu</b>: Yn caniatáu paratoi neges a'i threfnu i'w anfon yn awtomatig ar adeg benodol.
|
- <b>Drafftiau a negeseuon wedi'u trefnu</b>: Yn caniatáu paratoi neges a'i threfnu i'w anfon yn awtomatig ar adeg benodol.
|
||||||
- <b>Pinio negeseuon</b>: Piniwch eich negeseuon pwysicaf i'ch proffil a gweld beth mae eraill wedi pinio gan ddefnyddio'r tab "Pinned".
|
- <b>Pinio negeseuon</b>: Piniwch eich negeseuon pwysicaf i'ch proffil a gweld beth mae eraill wedi pinio gan ddefnyddio'r tab "Pinned".
|
||||||
- <b>Dilyn hashnodau</b>: Gweler negeseuon newydd gyda hashnodau penodol yn uniongyrchol yn eich llinell amser cartref trwy eu dilyn.
|
- <b>Dilyn hashnodau</b>: Gweler negeseuon newydd gyda hashnodau penodol yn uniongyrchol yn eich llinell amser cartref trwy eu dilyn.
|
||||||
- <b>Ateb ceisiadau dilyn</b>: Derbyn neu wrthod ceisiadau dilyn yn eich hysbysiadau neu'r rhestr ceisiadau Dilyn pwrpasol.
|
- <b>Ateb ceisiadau dilyn</b>: Derbyn neu wrthod ceisiadau dilyn yn eich hysbysiadau neu'r rhestr ceisiadau Dilyn pwrpasol.
|
||||||
- <b>Dileu ac ail-ddrafftio</b>: Y nodwedd boblogaidd a wnaeth olygu'n bosibl heb swyddogaeth olygu go iawn. <b>Dewis iaith</b>: Dewiswch iaith yn ddi-boen ar gyfer pob neges rydych chi'n ei gwneud felly mae hidlyddion a chyfieithu yn gweithio'n gywir.
|
- <b>Dileu ac ail-ddrafftio</b>: Y nodwedd boblogaidd a wnaeth olygu'n bosibl heb swyddogaeth olygu go iawn.
|
||||||
|
- <b>Dewis iaith</b>: Dewiswch iaith yn ddi-boen ar gyfer pob neges rydych chi'n ei gwneud felly mae hidlyddion a chyfieithu yn gweithio'n gywir.
|
||||||
- <b>Cyfieithu</b>: Cyfieithu negeseuon yn hawdd y tu mewn i Megalodon! Dim ond os yw'r nodwedd ar gael hefyd ar eich gweinydd Mastodon.
|
- <b>Cyfieithu</b>: Cyfieithu negeseuon yn hawdd y tu mewn i Megalodon! Dim ond os yw'r nodwedd ar gael hefyd ar eich gweinydd Mastodon.
|
||||||
- <b>Dangosydd gwelededd neges</b>: Wrth agor neu ateb neges, bydd eicon defnyddiol sy'n nodi gwelededd y neges yn ymddangos.
|
- <b>Dangosydd gwelededd neges</b>: Wrth agor neu ateb neges, bydd eicon defnyddiol sy'n nodi gwelededd y neges yn ymddangos.
|
||||||
- <b>Themâu lliw</b>: Oni ddylech chi hoffi'r lliw Pinc diofyn (mae'r siarc yn eich barnu'n dawel), mae themâu lliw Moshidon ar gael.
|
- <b>Themâu lliw</b>: Oni ddylech chi hoffi'r lliw Pinc diofyn (mae'r siarc yn eich barnu'n dawel), mae themâu lliw Moshidon ar gael.
|
||||||
|
|||||||
Reference in New Issue
Block a user