Compare commits
97 Commits
v1.1.5+for
...
v1.1.5+for
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1053d2ac0c | ||
|
|
0123b17602 | ||
|
|
1dace6ead9 | ||
|
|
3287cf69c1 | ||
|
|
a2854524a9 | ||
|
|
71c06c0762 | ||
|
|
e30df6067d | ||
|
|
912a354b1c | ||
|
|
71f830ea82 | ||
|
|
bd109a9139 | ||
|
|
c82b4445ff | ||
|
|
9a7d149dae | ||
|
|
c66e576461 | ||
|
|
2a47d2fe77 | ||
|
|
331d490f4f | ||
|
|
8d722a2130 | ||
|
|
6863363452 | ||
|
|
10e66a58eb | ||
|
|
3a5c27eadc | ||
|
|
8c6bce4f73 | ||
|
|
17e1cd1fe9 | ||
|
|
d7aceffc8f | ||
|
|
bcb3e217cd | ||
|
|
229c19664c | ||
|
|
8bdbb2adef | ||
|
|
907c5a2ca1 | ||
|
|
2a2bfebf48 | ||
|
|
eba59549ec | ||
|
|
9478a71693 | ||
|
|
b01d7a417a | ||
|
|
80c77292ed | ||
|
|
488e6dda04 | ||
|
|
689f676668 | ||
|
|
a06db9a3ab | ||
|
|
a7283cbed8 | ||
|
|
bc70d5e212 | ||
|
|
441686740a | ||
|
|
ac0df083f2 | ||
|
|
e10762d5fa | ||
|
|
0ca4663c29 | ||
|
|
7efd9341b1 | ||
|
|
3d8693b2bd | ||
|
|
a3b5f3c926 | ||
|
|
f9f4a1d1ef | ||
|
|
dd536002d0 | ||
|
|
4f8e381c84 | ||
|
|
3b6b212c9e | ||
|
|
bf429ee263 | ||
|
|
e7b1301b71 | ||
|
|
6726e9523c | ||
|
|
3ffcc7cef2 | ||
|
|
e6232f6d3b | ||
|
|
5efc431192 | ||
|
|
c3b75782b1 | ||
|
|
ec6f3f0cc3 | ||
|
|
136c3cfb4a | ||
|
|
79d1dbd3b7 | ||
|
|
f2e1663c41 | ||
|
|
5c73f37599 | ||
|
|
7f239abf2f | ||
|
|
a07f7c232a | ||
|
|
4a60a5190f | ||
|
|
69986fd869 | ||
|
|
e2ca572d45 | ||
|
|
746e41fdbc | ||
|
|
091f1f1e8c | ||
|
|
844ec185a6 | ||
|
|
5622eaed83 | ||
|
|
dbf25da1db | ||
|
|
d35a416084 | ||
|
|
098acb85e4 | ||
|
|
9d67337913 | ||
|
|
914861775a | ||
|
|
c12a6eaee6 | ||
|
|
5de23581fe | ||
|
|
413141df1e | ||
|
|
5f48870a90 | ||
|
|
86e781cdea | ||
|
|
34ebd9219f | ||
|
|
41688c4670 | ||
|
|
0d30cd973e | ||
|
|
5ed80ca40a | ||
|
|
78958085c3 | ||
|
|
a1798b6666 | ||
|
|
baa7dd6302 | ||
|
|
ba93e5bac3 | ||
|
|
2358d3c602 | ||
|
|
cf61626901 | ||
|
|
349a1115a6 | ||
|
|
8fa4980ba5 | ||
|
|
099d0ccf94 | ||
|
|
35a1de7888 | ||
|
|
6fc850b5ba | ||
|
|
96f13defd4 | ||
|
|
36dd07aa38 | ||
|
|
6a831539ad | ||
|
|
c679f5529e |
@@ -152,6 +152,8 @@ There's also a handful of custom strings exclusive to this projects that would n
|
||||
* [Display server announcements](https://github.com/sk22/megalodon/commit/84179bc207d6b69cc2a770a3c28fa0a39b0b54e8)
|
||||
* [Create](https://github.com/sk22/megalodon/commit/294595513a45037359b31377aafc25ae5b58d8e7), [edit](https://github.com/sk22/megalodon/commit/d47797bf7ac8cff3f9ba1cfee219a1bb2af21da6) and [delete](https://github.com/sk22/megalodon/commit/54c29fd787fc2cd0dfd2787ad796b8190f795973) lists
|
||||
* [Soft-blocking (by blocking and immediately unblocking)](https://github.com/sk22/megalodon/commit/e75d350b7a2709259e9fc5138e0e1f361bdb0972)
|
||||
* [Pinnable custom timelines](https://github.com/sk22/megalodon/pull/338/commits)
|
||||
* Support for local-only posts
|
||||
|
||||
|
||||
### Behavior
|
||||
@@ -175,6 +177,8 @@ There's also a handful of custom strings exclusive to this projects that would n
|
||||
* [Preserve whitespaces in HTML](https://github.com/sk22/megalodon/commit/7d876bddc7a07d98f0fecbf62b13bdb9fcce3412)
|
||||
* [Long-click to copy links](https://github.com/sk22/megalodon/commit/b32e32274923a94742a9926ef38785f746d41405)
|
||||
* Improved filtering using Mastodon 4.0 API: [#202](https://github.com/sk22/megalodon/pull/202), [#212](https://github.com/sk22/megalodon/pull/212), [#255](https://github.com/sk22/megalodon/pull/255) by [@thiagojedi](https://github.com/thiagojedi)
|
||||
* [Support admin notifications](https://github.com/sk22/megalodon/commit/c12a6eaee6b609bc53eb0a45d9199f37d5241801) and [notifications for edited reblogged posts](https://github.com/sk22/megalodon/commit/900e8fb2e9353002c16d15e06b78d2731e121601)
|
||||
* [Android file opener added back in addition to image picker](https://github.com/sk22/megalodon/commit/3a6ace53d5ab01e28077c9c930cb6ed487b78031)
|
||||
|
||||
|
||||
### Visual
|
||||
@@ -190,6 +194,8 @@ There's also a handful of custom strings exclusive to this projects that would n
|
||||
* [Animations for interaction buttons](https://github.com/mastodon/mastodon-android/compare/master...sk22:megalodon:feature/animate-buttons)
|
||||
* [Dedicated icons for different notification types](https://github.com/sk22/megalodon/pull/178) by [@florian-obernberger](https://github.com/florian-obernberger)
|
||||
* Scale text according to system settings
|
||||
* Header in timeline for followed hashtags
|
||||
* [Indicator for missing alt texts](https://github.com/sk22/megalodon/commit/c0c276f03e793b78c478c17dfdef24a66ef7cedb)
|
||||
|
||||
|
||||
## Building
|
||||
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
applicationId "org.joinmastodon.android.sk"
|
||||
minSdk 23
|
||||
targetSdk 33
|
||||
versionCode 70
|
||||
versionName "1.1.5+fork.70"
|
||||
versionCode 73
|
||||
versionName "1.1.5+fork.73"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
|
||||
}
|
||||
|
||||
@@ -12,8 +12,10 @@ import org.joinmastodon.android.model.TimelineDefinition;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class GlobalUserPreferences{
|
||||
public static boolean playGifs;
|
||||
@@ -22,6 +24,7 @@ public class GlobalUserPreferences{
|
||||
public static boolean showReplies;
|
||||
public static boolean showBoosts;
|
||||
public static boolean loadNewPosts;
|
||||
public static boolean showNewPostsButton;
|
||||
public static boolean showInteractionCounts;
|
||||
public static boolean alwaysExpandContentWarnings;
|
||||
public static boolean disableMarquee;
|
||||
@@ -44,6 +47,8 @@ public class GlobalUserPreferences{
|
||||
private final static Type pinnedTimelinesType = new TypeToken<Map<String, List<TimelineDefinition>>>() {}.getType();
|
||||
public static Map<String, List<String>> recentLanguages;
|
||||
public static Map<String, List<TimelineDefinition>> pinnedTimelines;
|
||||
public static Set<String> accountsWithLocalOnlySupport;
|
||||
public static Set<String> accountsInGlitchMode;
|
||||
|
||||
private static SharedPreferences getPrefs(){
|
||||
return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE);
|
||||
@@ -63,6 +68,7 @@ public class GlobalUserPreferences{
|
||||
showReplies=prefs.getBoolean("showReplies", true);
|
||||
showBoosts=prefs.getBoolean("showBoosts", true);
|
||||
loadNewPosts=prefs.getBoolean("loadNewPosts", true);
|
||||
showNewPostsButton=prefs.getBoolean("showNewPostsButton", true);
|
||||
showInteractionCounts=prefs.getBoolean("showInteractionCounts", false);
|
||||
alwaysExpandContentWarnings=prefs.getBoolean("alwaysExpandContentWarnings", false);
|
||||
disableMarquee=prefs.getBoolean("disableMarquee", false);
|
||||
@@ -81,6 +87,8 @@ public class GlobalUserPreferences{
|
||||
theme=ThemePreference.values()[prefs.getInt("theme", 0)];
|
||||
recentLanguages=fromJson(prefs.getString("recentLanguages", null), recentLanguagesType, new HashMap<>());
|
||||
pinnedTimelines=fromJson(prefs.getString("pinnedTimelines", null), pinnedTimelinesType, new HashMap<>());
|
||||
accountsWithLocalOnlySupport=prefs.getStringSet("accountsWithLocalOnlySupport", new HashSet<>());
|
||||
accountsInGlitchMode=prefs.getStringSet("accountsInGlitchMode", new HashSet<>());
|
||||
|
||||
try {
|
||||
color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.PINK.name()));
|
||||
@@ -97,6 +105,7 @@ public class GlobalUserPreferences{
|
||||
.putBoolean("showReplies", showReplies)
|
||||
.putBoolean("showBoosts", showBoosts)
|
||||
.putBoolean("loadNewPosts", loadNewPosts)
|
||||
.putBoolean("showNewPostsButton", showNewPostsButton)
|
||||
.putBoolean("trueBlackTheme", trueBlackTheme)
|
||||
.putBoolean("showInteractionCounts", showInteractionCounts)
|
||||
.putBoolean("alwaysExpandContentWarnings", alwaysExpandContentWarnings)
|
||||
@@ -116,6 +125,8 @@ public class GlobalUserPreferences{
|
||||
.putString("color", color.name())
|
||||
.putString("recentLanguages", gson.toJson(recentLanguages))
|
||||
.putString("pinnedTimelines", gson.toJson(pinnedTimelines))
|
||||
.putStringSet("accountsWithLocalOnlySupport", accountsWithLocalOnlySupport)
|
||||
.putStringSet("accountsInGlitchMode", accountsInGlitchMode)
|
||||
.apply();
|
||||
}
|
||||
|
||||
|
||||
@@ -153,6 +153,8 @@ public class PushNotificationReceiver extends BroadcastReceiver{
|
||||
case POLL -> R.drawable.ic_fluent_poll_24_filled;
|
||||
case STATUS -> R.drawable.ic_fluent_chat_24_filled;
|
||||
case UPDATE -> R.drawable.ic_fluent_history_24_filled;
|
||||
case REPORT -> R.drawable.ic_fluent_warning_24_filled;
|
||||
case SIGN_UP -> R.drawable.ic_fluent_person_available_24_filled;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ public class CreateStatus extends MastodonAPIRequest<Status>{
|
||||
public Poll poll;
|
||||
public String inReplyToId;
|
||||
public boolean sensitive;
|
||||
public boolean localOnly;
|
||||
public String spoilerText;
|
||||
public StatusPrivacy visibility;
|
||||
public Instant scheduledAt;
|
||||
|
||||
@@ -56,8 +56,7 @@ public class AccountTimelineFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if(getActivity()==null) return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -92,6 +92,7 @@ public class AnnouncementsFragment extends BaseStatusListFragment<Announcement>
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Announcement> result){
|
||||
if (getActivity() == null) return;
|
||||
List<Announcement> unread = result.stream().filter(a -> !a.read).collect(toList());
|
||||
List<Announcement> read = result.stream().filter(a -> a.read).collect(toList());
|
||||
onDataLoaded(unread, true);
|
||||
|
||||
@@ -25,6 +25,7 @@ public class BookmarkedStatusListFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Status> result){
|
||||
if (getActivity() == null) return;
|
||||
if(result.nextPageUri!=null)
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
|
||||
@@ -151,6 +151,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
private static final int IMAGE_DESCRIPTION_RESULT=363;
|
||||
private static final int SCHEDULED_STATUS_OPENED_RESULT=161;
|
||||
private static final int MAX_ATTACHMENTS=4;
|
||||
private static final String GLITCH_LOCAL_ONLY_SUFFIX = "👁";
|
||||
private static final Pattern GLITCH_LOCAL_ONLY_PATTERN = Pattern.compile("[\\s\\S]*" + GLITCH_LOCAL_ONLY_SUFFIX + "[\uFE00-\uFE0F]*");
|
||||
private static final String TAG="ComposeFragment";
|
||||
|
||||
private static final Pattern MENTION_PATTERN=Pattern.compile("(^|[^\\/\\w])@(([a-z0-9_]+)@[a-z0-9\\.\\-]+[a-z0-9]+)", Pattern.CASE_INSENSITIVE);
|
||||
@@ -163,7 +165,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
private final BreakIterator breakIterator=BreakIterator.getCharacterInstance();
|
||||
|
||||
private SizeListenerLinearLayout contentView;
|
||||
private TextView selfName, selfUsername;
|
||||
private TextView selfName, selfUsername, selfExtraText, extraText;
|
||||
private ImageView selfAvatar;
|
||||
private Account self;
|
||||
private String instanceDomain;
|
||||
@@ -212,6 +214,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
private View sendingOverlay;
|
||||
private WindowManager wm;
|
||||
private StatusPrivacy statusVisibility=StatusPrivacy.PUBLIC;
|
||||
private boolean localOnly;
|
||||
private ComposeAutocompleteSpan currentAutocompleteSpan;
|
||||
private FrameLayout mainEditTextWrap;
|
||||
private ComposeAutocompleteViewController autocompleteViewController;
|
||||
@@ -242,9 +245,10 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
instance=AccountSessionManager.getInstance().getInstanceInfo(instanceDomain);
|
||||
languageResolver=new MastodonLanguage.LanguageResolver(instance);
|
||||
redraftStatus=getArguments().getBoolean("redraftStatus", false);
|
||||
if(getArguments().containsKey("editStatus")){
|
||||
if(getArguments().containsKey("editStatus"))
|
||||
editingStatus=Parcels.unwrap(getArguments().getParcelable("editStatus"));
|
||||
}
|
||||
if(getArguments().containsKey("replyTo"))
|
||||
replyTo=Parcels.unwrap(getArguments().getParcelable("replyTo"));
|
||||
if(instance==null){
|
||||
Nav.finish(this);
|
||||
return;
|
||||
@@ -302,6 +306,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
selfName=view.findViewById(R.id.self_name);
|
||||
selfUsername=view.findViewById(R.id.self_username);
|
||||
selfAvatar=view.findViewById(R.id.self_avatar);
|
||||
selfExtraText=view.findViewById(R.id.self_extra_text);
|
||||
HtmlParser.setTextWithCustomEmoji(selfName, self.displayName, self.emojis);
|
||||
selfUsername.setText('@'+self.username+'@'+instanceDomain);
|
||||
ViewImageLoader.load(selfAvatar, null, new UrlImageLoaderRequest(self.avatar));
|
||||
@@ -343,6 +348,10 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
pollBtn.setOnClickListener(v->togglePoll());
|
||||
emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText));
|
||||
spoilerBtn.setOnClickListener(v->toggleSpoiler());
|
||||
|
||||
localOnly = savedInstanceState != null ? savedInstanceState.getBoolean("localOnly") :
|
||||
editingStatus != null ? editingStatus.localOnly : replyTo != null && replyTo.localOnly;
|
||||
|
||||
buildVisibilityPopup(visibilityBtn);
|
||||
visibilityBtn.setOnClickListener(v->visibilityPopup.show());
|
||||
visibilityBtn.setOnTouchListener(visibilityPopup.getDragToOpenListener());
|
||||
@@ -461,7 +470,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
case UNLISTED -> R.id.vis_unlisted;
|
||||
case PRIVATE -> R.id.vis_followers;
|
||||
case DIRECT -> R.id.vis_private;
|
||||
case LOCAL -> R.id.vis_local;
|
||||
}).setChecked(true);
|
||||
visibilityPopup.getMenu().findItem(R.id.local_only).setChecked(localOnly);
|
||||
|
||||
autocompleteViewController=new ComposeAutocompleteViewController(getActivity(), accountID);
|
||||
autocompleteViewController.setCompletionSelectedListener(this::onAutocompleteOptionSelected);
|
||||
@@ -488,6 +499,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
outState.putBoolean("pollAllowMultiple", pollAllowMultipleItem.isSelected());
|
||||
}
|
||||
outState.putBoolean("sensitive", sensitive);
|
||||
outState.putBoolean("localOnly", localOnly);
|
||||
outState.putBoolean("hasSpoiler", hasSpoiler);
|
||||
outState.putString("language", language);
|
||||
if(!attachments.isEmpty()){
|
||||
@@ -611,6 +623,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
}
|
||||
});
|
||||
View originalPost = view.findViewById(R.id.original_post);
|
||||
extraText = view.findViewById(R.id.extra_text);
|
||||
originalPost.setVisibility(View.VISIBLE);
|
||||
originalPost.setOnClickListener(v->{
|
||||
Bundle args=new Bundle();
|
||||
@@ -643,9 +656,10 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
view.findViewById(R.id.visibility).setVisibility(View.GONE);
|
||||
Drawable visibilityIcon = getActivity().getDrawable(switch(replyTo.visibility){
|
||||
case PUBLIC -> R.drawable.ic_fluent_earth_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_people_community_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_lock_open_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_lock_closed_20_filled;
|
||||
case DIRECT -> R.drawable.ic_fluent_mention_20_regular;
|
||||
case LOCAL -> R.drawable.ic_fluent_eye_20_regular;
|
||||
});
|
||||
ImageView moreBtn = view.findViewById(R.id.more);
|
||||
moreBtn.setImageDrawable(visibilityIcon);
|
||||
@@ -669,6 +683,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
case UNLISTED -> R.string.sk_visibility_unlisted;
|
||||
case PRIVATE -> R.string.visibility_followers_only;
|
||||
case DIRECT -> R.string.visibility_private;
|
||||
case LOCAL -> R.string.sk_local_only;
|
||||
};
|
||||
replyText.setContentDescription(getString(R.string.in_reply_to, replyTo.account.displayName) + ". " + getString(R.string.post_visibility) + ": " + getString(visibilityNameRes));
|
||||
replyText.setOnClickListener(v->{
|
||||
@@ -749,6 +764,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
}
|
||||
|
||||
updateSensitive();
|
||||
updateHeaders();
|
||||
|
||||
if(editingStatus!=null){
|
||||
updateCharCounter();
|
||||
@@ -884,6 +900,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
if(hasSpoiler){
|
||||
charCount+=spoilerEdit.length();
|
||||
}
|
||||
if (localOnly && GlobalUserPreferences.accountsInGlitchMode.contains(accountID)) {
|
||||
charCount -= GLITCH_LOCAL_ONLY_SUFFIX.length();
|
||||
}
|
||||
charCounter.setText(String.valueOf(charLimit-charCount));
|
||||
trimmedCharCount=text.toString().trim().length();
|
||||
updatePublishButtonState();
|
||||
@@ -976,8 +995,14 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
private void publish(boolean force){
|
||||
String text=mainEditText.getText().toString();
|
||||
CreateStatus.Request req=new CreateStatus.Request();
|
||||
if (localOnly &&
|
||||
GlobalUserPreferences.accountsInGlitchMode.contains(accountID) &&
|
||||
!GLITCH_LOCAL_ONLY_PATTERN.matcher(text).matches()) {
|
||||
text += " " + GLITCH_LOCAL_ONLY_SUFFIX;
|
||||
}
|
||||
req.status=text;
|
||||
req.visibility=statusVisibility;
|
||||
req.localOnly=localOnly;
|
||||
req.visibility=localOnly && instance.pleroma != null ? StatusPrivacy.LOCAL : statusVisibility;
|
||||
req.sensitive=sensitive;
|
||||
req.language=language;
|
||||
req.scheduledAt = scheduledAt;
|
||||
@@ -1758,12 +1783,33 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
return attachments.size();
|
||||
}
|
||||
|
||||
private void updateHeaders() {
|
||||
UiUtils.setExtraTextInfo(getContext(), selfExtraText, statusVisibility, localOnly);
|
||||
if (replyTo != null) UiUtils.setExtraTextInfo(getContext(), extraText, replyTo.visibility, replyTo.localOnly);
|
||||
}
|
||||
|
||||
private void buildVisibilityPopup(View v){
|
||||
visibilityPopup=new PopupMenu(getActivity(), v);
|
||||
visibilityPopup.inflate(R.menu.compose_visibility);
|
||||
Menu m=visibilityPopup.getMenu();
|
||||
MenuItem localOnlyItem = visibilityPopup.getMenu().findItem(R.id.local_only);
|
||||
boolean prefsSaysSupported = GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID);
|
||||
if (instance.pleroma != null) {
|
||||
m.findItem(R.id.vis_local).setVisible(true);
|
||||
} else if (localOnly || prefsSaysSupported) {
|
||||
localOnlyItem.setVisible(true);
|
||||
localOnlyItem.setChecked(localOnly);
|
||||
Status status = editingStatus != null ? editingStatus : replyTo;
|
||||
if (!prefsSaysSupported) {
|
||||
GlobalUserPreferences.accountsWithLocalOnlySupport.add(accountID);
|
||||
if (GLITCH_LOCAL_ONLY_PATTERN.matcher(status.getStrippedText()).matches()) {
|
||||
GlobalUserPreferences.accountsInGlitchMode.add(accountID);
|
||||
}
|
||||
GlobalUserPreferences.save();
|
||||
}
|
||||
}
|
||||
UiUtils.enablePopupMenuIcons(getActivity(), visibilityPopup);
|
||||
m.setGroupCheckable(0, true, true);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) m.setGroupDividerEnabled(true);
|
||||
visibilityPopup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item){
|
||||
@@ -1776,19 +1822,24 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
statusVisibility=StatusPrivacy.PRIVATE;
|
||||
}else if(id==R.id.vis_private){
|
||||
statusVisibility=StatusPrivacy.DIRECT;
|
||||
}else if(id==R.id.vis_local){
|
||||
statusVisibility=StatusPrivacy.LOCAL;
|
||||
}
|
||||
if (id == R.id.local_only) {
|
||||
localOnly = !item.isChecked();
|
||||
item.setChecked(localOnly);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
}
|
||||
item.setChecked(true);
|
||||
updateVisibilityIcon();
|
||||
updateHeaders();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void loadDefaultStatusVisibility(Bundle savedInstanceState) {
|
||||
if(getArguments().containsKey("replyTo")){
|
||||
replyTo=Parcels.unwrap(getArguments().getParcelable("replyTo"));
|
||||
statusVisibility = replyTo.visibility;
|
||||
}
|
||||
if(replyTo != null) statusVisibility = replyTo.visibility;
|
||||
|
||||
// A saved privacy setting from a previous compose session wins over the reply visibility
|
||||
if(savedInstanceState !=null){
|
||||
@@ -1797,17 +1848,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
|
||||
AccountSessionManager asm = AccountSessionManager.getInstance();
|
||||
Preferences prefs = asm.getAccount(accountID).preferences;
|
||||
if (prefs != null && replyTo != null) {
|
||||
if (prefs != null) {
|
||||
// Only override the reply visibility if our preference is more private
|
||||
// (or we're replying to ourselves)
|
||||
// (and we're not replying to ourselves, or not at all)
|
||||
if (prefs.postingDefaultVisibility.isLessVisibleThan(statusVisibility) &&
|
||||
!asm.isSelf(accountID, replyTo.account)) {
|
||||
statusVisibility = switch (prefs.postingDefaultVisibility) {
|
||||
case PUBLIC -> StatusPrivacy.PUBLIC;
|
||||
case UNLISTED -> StatusPrivacy.UNLISTED;
|
||||
case PRIVATE -> StatusPrivacy.PRIVATE;
|
||||
case DIRECT -> StatusPrivacy.DIRECT;
|
||||
};
|
||||
(replyTo == null || !asm.isSelf(accountID, replyTo.account))) {
|
||||
statusVisibility = prefs.postingDefaultVisibility;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1823,9 +1869,10 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
||||
}
|
||||
visibilityBtn.setImageResource(switch(statusVisibility){
|
||||
case PUBLIC -> R.drawable.ic_fluent_earth_24_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_people_community_24_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_24_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_lock_open_24_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_lock_closed_24_filled;
|
||||
case DIRECT -> R.drawable.ic_fluent_mention_24_regular;
|
||||
case LOCAL -> R.drawable.ic_fluent_eye_24_regular;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -146,6 +146,7 @@ public class EditTimelinesFragment extends BaseRecyclerFragment<TimelineDefiniti
|
||||
}
|
||||
|
||||
private void updateOptionsMenu() {
|
||||
if (getActivity() == null) return;
|
||||
optionsMenu.clear();
|
||||
timelineByMenuItem.clear();
|
||||
|
||||
@@ -156,7 +157,7 @@ public class EditTimelinesFragment extends BaseRecyclerFragment<TimelineDefiniti
|
||||
SubMenu timelinesMenu = menu.addSubMenu(R.string.sk_timeline);
|
||||
timelinesMenu.getItem().setIcon(R.drawable.ic_fluent_timeline_24_regular);
|
||||
SubMenu listsMenu = menu.addSubMenu(R.string.sk_list);
|
||||
listsMenu.getItem().setIcon(R.drawable.ic_fluent_people_list_24_regular);
|
||||
listsMenu.getItem().setIcon(R.drawable.ic_fluent_people_24_regular);
|
||||
SubMenu hashtagsMenu = menu.addSubMenu(R.string.sk_hashtag);
|
||||
hashtagsMenu.getItem().setIcon(R.drawable.ic_fluent_number_symbol_24_regular);
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ public class FavoritedStatusListFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Status> result){
|
||||
if (getActivity() == null) return;
|
||||
if(result.nextPageUri!=null)
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
|
||||
@@ -80,6 +80,7 @@ public class FollowRequestsListFragment extends BaseRecyclerFragment<FollowReque
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Account> result){
|
||||
if (getActivity() == null) return;
|
||||
if(result.nextPageUri!=null)
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
|
||||
@@ -55,6 +55,7 @@ public class FollowedHashtagsFragment extends BaseRecyclerFragment<Hashtag> impl
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Hashtag> result){
|
||||
if (getActivity() == null) return;
|
||||
if(result.nextPageUri!=null)
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
|
||||
@@ -70,6 +70,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment {
|
||||
new GetHashtag(hashtag).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(Hashtag hashtag) {
|
||||
if (getActivity() == null) return;
|
||||
updateTitle(hashtag.name);
|
||||
updateFollowingState(hashtag.following);
|
||||
}
|
||||
@@ -91,6 +92,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment {
|
||||
new SetHashtagFollowed(hashtag, following).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(Hashtag i) {
|
||||
if (getActivity() == null) return;
|
||||
if (i.following == following) Toast.makeText(getActivity(), getString(i.following ? R.string.followed_user : R.string.unfollowed_user, "#" + i.name), Toast.LENGTH_SHORT).show();
|
||||
updateFollowingState(i.following);
|
||||
}
|
||||
@@ -117,6 +119,7 @@ public class HashtagTimelineFragment extends PinnableStatusListFragment {
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -95,8 +95,8 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
private TimelineDefinition[] timelines;
|
||||
private final Map<Integer, TimelineDefinition> timelinesByMenuItem = new HashMap<>();
|
||||
private SubMenu hashtagsMenu, listsMenu;
|
||||
private Menu optionsMenu;
|
||||
private MenuInflater optionsMenuInflater;
|
||||
private PopupMenu overflowPopup;
|
||||
private View overflowActionView = null;
|
||||
private boolean announcementsBadged, settingsBadged;
|
||||
|
||||
@Override
|
||||
@@ -153,6 +153,12 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
|
||||
view.addView(pager, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
|
||||
overflowActionView = UiUtils.makeOverflowActionView(getContext());
|
||||
overflowPopup = new PopupMenu(getContext(), overflowActionView);
|
||||
overflowPopup.setOnMenuItemClickListener(this::onOptionsItemSelected);
|
||||
overflowActionView.setOnClickListener(l -> overflowPopup.show());
|
||||
overflowActionView.setOnTouchListener(overflowPopup.getDragToOpenListener());
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -231,21 +237,62 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
if(GithubSelfUpdater.needSelfUpdating()){
|
||||
updateUpdateState(GithubSelfUpdater.getInstance().getState());
|
||||
}
|
||||
|
||||
new GetLists().setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> lists) {
|
||||
updateList(lists, listItems);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountID);
|
||||
|
||||
new GetFollowedHashtags().setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Hashtag> hashtags) {
|
||||
updateList(hashtags, hashtagsItems);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountID);
|
||||
|
||||
new GetAnnouncements(false).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(List<Announcement> result) {
|
||||
if (getActivity() == null) return;
|
||||
if (result.stream().anyMatch(a -> !a.read)) {
|
||||
announcementsBadged = true;
|
||||
announcements.setVisible(false);
|
||||
announcementsAction.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getActivity());
|
||||
}
|
||||
}).exec(accountID);
|
||||
}
|
||||
|
||||
private void addListsToOptionsMenu() {
|
||||
private void addListsToOverflowMenu() {
|
||||
Context ctx = getContext();
|
||||
listsMenu.clear();
|
||||
listsMenu.getItem().setVisible(listItems.size() > 0);
|
||||
UiUtils.insetPopupMenuIcon(ctx, UiUtils.makeBackItem(listsMenu));
|
||||
listItems.forEach((id, list) -> {
|
||||
MenuItem item = listsMenu.add(Menu.NONE, id, Menu.NONE, list.title);
|
||||
item.setIcon(R.drawable.ic_fluent_people_list_24_regular);
|
||||
item.setIcon(R.drawable.ic_fluent_people_24_regular);
|
||||
UiUtils.insetPopupMenuIcon(ctx, item);
|
||||
});
|
||||
}
|
||||
|
||||
private void addHashtagsToOptionsMenu() {
|
||||
private void addHashtagsToOverflowMenu() {
|
||||
Context ctx = getContext();
|
||||
hashtagsMenu.clear();
|
||||
hashtagsMenu.getItem().setVisible(hashtagsItems.size() > 0);
|
||||
@@ -291,79 +338,46 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
}
|
||||
}
|
||||
|
||||
private void createOptionsMenu() {
|
||||
optionsMenu.clear();
|
||||
optionsMenuInflater.inflate(R.menu.home, optionsMenu);
|
||||
announcements = optionsMenu.findItem(R.id.announcements);
|
||||
announcementsAction = optionsMenu.findItem(R.id.announcements_action);
|
||||
settings = optionsMenu.findItem(R.id.settings);
|
||||
settingsAction = optionsMenu.findItem(R.id.settings_action);
|
||||
hashtagsMenu = optionsMenu.findItem(R.id.hashtags).getSubMenu();
|
||||
listsMenu = optionsMenu.findItem(R.id.lists).getSubMenu();
|
||||
private void updateOverflowMenu() {
|
||||
if (getActivity() == null) return;
|
||||
Menu m = overflowPopup.getMenu();
|
||||
m.clear();
|
||||
overflowPopup.inflate(R.menu.home_overflow);
|
||||
announcements = m.findItem(R.id.announcements);
|
||||
settings = m.findItem(R.id.settings);
|
||||
hashtagsMenu = m.findItem(R.id.hashtags).getSubMenu();
|
||||
listsMenu = m.findItem(R.id.lists).getSubMenu();
|
||||
|
||||
announcements.setVisible(!announcementsBadged);
|
||||
announcementsAction.setVisible(announcementsBadged);
|
||||
settings.setVisible(!settingsBadged);
|
||||
settingsAction.setVisible(settingsBadged);
|
||||
|
||||
UiUtils.enableOptionsMenuIcons(getContext(), optionsMenu,
|
||||
R.id.overflow, R.id.announcements_action, R.id.settings_action);
|
||||
UiUtils.enablePopupMenuIcons(getContext(), overflowPopup);
|
||||
|
||||
addListsToOptionsMenu();
|
||||
addHashtagsToOptionsMenu();
|
||||
addListsToOverflowMenu();
|
||||
addHashtagsToOverflowMenu();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
m.setGroupDividerEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
||||
this.optionsMenu = menu;
|
||||
this.optionsMenuInflater = inflater;
|
||||
createOptionsMenu();
|
||||
inflater.inflate(R.menu.home, menu);
|
||||
|
||||
new GetLists().setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> lists) {
|
||||
updateList(lists, listItems);
|
||||
}
|
||||
menu.findItem(R.id.overflow).setActionView(overflowActionView);
|
||||
announcementsAction = menu.findItem(R.id.announcements_action);
|
||||
settingsAction = menu.findItem(R.id.settings_action);
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountID);
|
||||
|
||||
new GetFollowedHashtags().setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Hashtag> hashtags) {
|
||||
updateList(hashtags, hashtagsItems);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountID);
|
||||
|
||||
new GetAnnouncements(false).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(List<Announcement> result) {
|
||||
if (result.stream().anyMatch(a -> !a.read)) {
|
||||
announcementsBadged = true;
|
||||
announcements.setVisible(false);
|
||||
announcementsAction.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getActivity());
|
||||
}
|
||||
}).exec(accountID);
|
||||
updateOverflowMenu();
|
||||
}
|
||||
|
||||
private <T> void updateList(List<T> addItems, Map<Integer, T> items) {
|
||||
if (addItems.size() == 0) return;
|
||||
for (int i = 0; i < addItems.size(); i++) items.put(View.generateViewId(), addItems.get(i));
|
||||
createOptionsMenu();
|
||||
updateOverflowMenu();
|
||||
}
|
||||
|
||||
private void updateSwitcherMenu() {
|
||||
@@ -427,8 +441,7 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
Hashtag hashtag;
|
||||
|
||||
if (item.getItemId() == R.id.menu_back) {
|
||||
createOptionsMenu();
|
||||
optionsMenu.performIdentifierAction(R.id.overflow, 0);
|
||||
getToolbar().post(() -> overflowPopup.show());
|
||||
return true;
|
||||
} else if (id == R.id.settings || id == R.id.settings_action) {
|
||||
Nav.go(getActivity(), SettingsFragment.class, args);
|
||||
@@ -563,6 +576,14 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
@Override
|
||||
public void onDestroyView(){
|
||||
super.onDestroyView();
|
||||
if (overflowPopup != null) {
|
||||
overflowPopup.dismiss();
|
||||
overflowPopup = null;
|
||||
}
|
||||
if (switcherPopup != null) {
|
||||
switcherPopup.dismiss();
|
||||
switcherPopup = null;
|
||||
}
|
||||
if(GithubSelfUpdater.needSelfUpdating()){
|
||||
E.unregister(this);
|
||||
}
|
||||
@@ -625,10 +646,10 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
|
||||
if (shouldBeInList) {
|
||||
existingThings.put(existingThing.isPresent()
|
||||
? existingThing.get().getKey() : View.generateViewId(), makeNewThing.get());
|
||||
createOptionsMenu();
|
||||
updateOverflowMenu();
|
||||
} else if (existingThing.isPresent() && !shouldBeInList) {
|
||||
existingThings.remove(existingThing.get().getKey());
|
||||
createOptionsMenu();
|
||||
updateOverflowMenu();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,8 +58,7 @@ public class HomeTimelineFragment extends FabStatusListFragment {
|
||||
.getHomeTimeline(offset>0 ? maxID : null, count, refreshing, new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(CacheablePaginatedResponse<List<Status>> result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if (getActivity() == null) return;
|
||||
List<Status> filteredItems = filterPosts(result.items);
|
||||
onDataLoaded(filteredItems, !result.items.isEmpty());
|
||||
maxID=result.maxID;
|
||||
@@ -150,7 +149,7 @@ public class HomeTimelineFragment extends FabStatusListFragment {
|
||||
toAdd=toAdd.stream().filter(filterPredicate).collect(Collectors.toList());
|
||||
if(!toAdd.isEmpty()){
|
||||
prependItems(toAdd, true);
|
||||
if (parent != null) parent.showNewPostsButton();
|
||||
if (parent != null && GlobalUserPreferences.showNewPostsButton) parent.showNewPostsButton();
|
||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putHomeTimeline(toAdd, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
|
||||
new GetList(listID).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(ListTimeline listTimeline) {
|
||||
if (getActivity() == null) return;
|
||||
// TODO: save updated info
|
||||
if (!listTimeline.title.equals(listTitle)) setTitle(listTimeline.title);
|
||||
if (listTimeline.repliesPolicy != null && !listTimeline.repliesPolicy.equals(repliesPolicy)) {
|
||||
@@ -88,7 +89,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
|
||||
editor.applyList(listTitle, repliesPolicy);
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.sk_edit_list_title)
|
||||
.setIcon(R.drawable.ic_fluent_people_list_28_regular)
|
||||
.setIcon(R.drawable.ic_fluent_people_28_regular)
|
||||
.setView(editor)
|
||||
.setPositiveButton(R.string.save, (d, which) -> {
|
||||
String newTitle = editor.getTitle().trim();
|
||||
@@ -96,6 +97,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
|
||||
new UpdateList(listID, newTitle, editor.getRepliesPolicy()).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(ListTimeline list) {
|
||||
if (getActivity() == null) return;
|
||||
setTitle(list.title);
|
||||
listTitle = list.title;
|
||||
repliesPolicy = list.repliesPolicy;
|
||||
@@ -131,6 +133,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
|
||||
.setCallback(new SimpleCallback<>(this) {
|
||||
@Override
|
||||
public void onSuccess(List<Status> result) {
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -42,130 +42,132 @@ import me.grishka.appkit.utils.BindableViewHolder;
|
||||
import me.grishka.appkit.views.UsableRecyclerView;
|
||||
|
||||
public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> implements ScrollableToTop {
|
||||
private String accountId;
|
||||
private String profileAccountId;
|
||||
private final HashMap<String, Boolean> userInListBefore = new HashMap<>();
|
||||
private final HashMap<String, Boolean> userInList = new HashMap<>();
|
||||
private ListsAdapter adapter;
|
||||
private String accountId;
|
||||
private String profileAccountId;
|
||||
private final HashMap<String, Boolean> userInListBefore = new HashMap<>();
|
||||
private final HashMap<String, Boolean> userInList = new HashMap<>();
|
||||
private ListsAdapter adapter;
|
||||
|
||||
public ListTimelinesFragment() {
|
||||
super(10);
|
||||
}
|
||||
public ListTimelinesFragment() {
|
||||
super(10);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Bundle args=getArguments();
|
||||
accountId=args.getString("account");
|
||||
setHasOptionsMenu(true);
|
||||
E.register(this);
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Bundle args=getArguments();
|
||||
accountId=args.getString("account");
|
||||
setHasOptionsMenu(true);
|
||||
E.register(this);
|
||||
|
||||
if(args.containsKey("profileAccount")){
|
||||
if(args.containsKey("profileAccount")){
|
||||
profileAccountId=args.getString("profileAccount");
|
||||
String profileDisplayUsername = args.getString("profileDisplayUsername");
|
||||
setTitle(getString(R.string.sk_lists_with_user, profileDisplayUsername));
|
||||
} else {
|
||||
} else {
|
||||
setTitle(R.string.sk_your_lists);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onShown(){
|
||||
super.onShown();
|
||||
if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading)
|
||||
@Override
|
||||
protected void onShown(){
|
||||
super.onShown();
|
||||
if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading)
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
list.addItemDecoration(new DividerItemDecoration(getActivity(), R.attr.colorPollVoted, 0.5f, 56, 16));
|
||||
}
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
list.addItemDecoration(new DividerItemDecoration(getActivity(), R.attr.colorPollVoted, 0.5f, 56, 16));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_list, menu);
|
||||
}
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_list, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.create) {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.create) {
|
||||
ListTimelineEditor editor = new ListTimelineEditor(getContext());
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.sk_create_list_title)
|
||||
.setIcon(R.drawable.ic_fluent_people_add_28_regular)
|
||||
.setView(editor)
|
||||
.setPositiveButton(R.string.sk_create, (d, which) ->
|
||||
new CreateList(editor.getTitle(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(ListTimeline list) {
|
||||
.setTitle(R.string.sk_create_list_title)
|
||||
.setIcon(R.drawable.ic_fluent_people_add_28_regular)
|
||||
.setView(editor)
|
||||
.setPositiveButton(R.string.sk_create, (d, which) ->
|
||||
new CreateList(editor.getTitle(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(ListTimeline list) {
|
||||
saveListMembership(list.id, true);
|
||||
data.add(0, list);
|
||||
adapter.notifyItemRangeInserted(0, 1);
|
||||
E.post(new ListUpdatedCreatedEvent(list.id, list.title, list.repliesPolicy));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountId)
|
||||
)
|
||||
.setNegativeButton(R.string.cancel, (d, which) -> {})
|
||||
.show();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}).exec(accountId)
|
||||
)
|
||||
.setNegativeButton(R.string.cancel, (d, which) -> {})
|
||||
.show();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void saveListMembership(String listId, boolean isMember) {
|
||||
userInList.put(listId, isMember);
|
||||
List<String> accountIdList = Collections.singletonList(profileAccountId);
|
||||
MastodonAPIRequest<Object> req = isMember ? new AddAccountsToList(listId, accountIdList) : new RemoveAccountsFromList(listId, accountIdList);
|
||||
req.setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(Object o) {}
|
||||
private void saveListMembership(String listId, boolean isMember) {
|
||||
userInList.put(listId, isMember);
|
||||
List<String> accountIdList = Collections.singletonList(profileAccountId);
|
||||
MastodonAPIRequest<Object> req = isMember ? new AddAccountsToList(listId, accountIdList) : new RemoveAccountsFromList(listId, accountIdList);
|
||||
req.setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(Object o) {}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
@Override
|
||||
public void onError(ErrorResponse error) {
|
||||
error.showToast(getContext());
|
||||
}
|
||||
}).exec(accountId);
|
||||
}
|
||||
}
|
||||
}).exec(accountId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLoadData(int offset, int count){
|
||||
userInListBefore.clear();
|
||||
userInList.clear();
|
||||
currentRequest=(profileAccountId != null ? new GetLists(profileAccountId) : new GetLists())
|
||||
.setCallback(new SimpleCallback<>(this) {
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> lists) {
|
||||
@Override
|
||||
protected void doLoadData(int offset, int count){
|
||||
userInListBefore.clear();
|
||||
userInList.clear();
|
||||
currentRequest=(profileAccountId != null ? new GetLists(profileAccountId) : new GetLists())
|
||||
.setCallback(new SimpleCallback<>(this) {
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> lists) {
|
||||
if (getActivity() == null) return;
|
||||
for (ListTimeline l : lists) userInListBefore.put(l.id, true);
|
||||
userInList.putAll(userInListBefore);
|
||||
if (profileAccountId == null || !lists.isEmpty()) onDataLoaded(lists, false);
|
||||
if (profileAccountId == null) return;
|
||||
|
||||
currentRequest=new GetLists().setCallback(new SimpleCallback<>(ListTimelinesFragment.this) {
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> allLists) {
|
||||
List<ListTimeline> newLists = new ArrayList<>();
|
||||
for (ListTimeline l : allLists) {
|
||||
if (lists.stream().noneMatch(e -> e.id.equals(l.id))) newLists.add(l);
|
||||
if (!userInListBefore.containsKey(l.id)) {
|
||||
userInListBefore.put(l.id, false);
|
||||
}
|
||||
}
|
||||
userInList.putAll(userInListBefore);
|
||||
onDataLoaded(newLists, false);
|
||||
}
|
||||
@Override
|
||||
public void onSuccess(List<ListTimeline> allLists) {
|
||||
if (getActivity() == null) return;
|
||||
List<ListTimeline> newLists = new ArrayList<>();
|
||||
for (ListTimeline l : allLists) {
|
||||
if (lists.stream().noneMatch(e -> e.id.equals(l.id))) newLists.add(l);
|
||||
if (!userInListBefore.containsKey(l.id)) {
|
||||
userInListBefore.put(l.id, false);
|
||||
}
|
||||
}
|
||||
userInList.putAll(userInListBefore);
|
||||
onDataLoaded(newLists, false);
|
||||
}
|
||||
}).exec(accountId);
|
||||
}
|
||||
})
|
||||
.exec(accountId);
|
||||
}
|
||||
}
|
||||
})
|
||||
.exec(accountId);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onListDeletedEvent(ListDeletedEvent event) {
|
||||
@Subscribe
|
||||
public void onListDeletedEvent(ListDeletedEvent event) {
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
ListTimeline item = data.get(i);
|
||||
if (item.id.equals(event.id)) {
|
||||
@@ -174,7 +176,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onListUpdatedCreatedEvent(ListUpdatedCreatedEvent event) {
|
||||
@@ -189,70 +191,70 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RecyclerView.Adapter<ListViewHolder> getAdapter() {
|
||||
return adapter = new ListsAdapter();
|
||||
}
|
||||
@Override
|
||||
protected RecyclerView.Adapter<ListViewHolder> getAdapter() {
|
||||
return adapter = new ListsAdapter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrollToTop() {
|
||||
smoothScrollRecyclerViewToTop(list);
|
||||
}
|
||||
@Override
|
||||
public void scrollToTop() {
|
||||
smoothScrollRecyclerViewToTop(list);
|
||||
}
|
||||
|
||||
private class ListsAdapter extends RecyclerView.Adapter<ListViewHolder>{
|
||||
@NonNull
|
||||
@Override
|
||||
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
|
||||
private class ListsAdapter extends RecyclerView.Adapter<ListViewHolder>{
|
||||
@NonNull
|
||||
@Override
|
||||
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
|
||||
return new ListViewHolder();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
|
||||
holder.bind(data.get(position));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return data.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ListViewHolder extends BindableViewHolder<ListTimeline> implements UsableRecyclerView.Clickable{
|
||||
private final TextView title;
|
||||
private final CheckBox listToggle;
|
||||
private class ListViewHolder extends BindableViewHolder<ListTimeline> implements UsableRecyclerView.Clickable{
|
||||
private final TextView title;
|
||||
private final CheckBox listToggle;
|
||||
|
||||
public ListViewHolder(){
|
||||
public ListViewHolder(){
|
||||
super(getActivity(), R.layout.item_text, list);
|
||||
title=findViewById(R.id.title);
|
||||
listToggle=findViewById(R.id.list_toggle);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(ListTimeline item) {
|
||||
@Override
|
||||
public void onBind(ListTimeline item) {
|
||||
title.setText(item.title);
|
||||
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(R.drawable.ic_fluent_people_list_24_regular), null, null, null);
|
||||
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(R.drawable.ic_fluent_people_24_regular), null, null, null);
|
||||
if (profileAccountId != null) {
|
||||
Boolean checked = userInList.get(item.id);
|
||||
listToggle.setVisibility(View.VISIBLE);
|
||||
listToggle.setChecked(userInList.containsKey(item.id) && checked != null && checked);
|
||||
listToggle.setOnClickListener(this::onClickToggle);
|
||||
Boolean checked = userInList.get(item.id);
|
||||
listToggle.setVisibility(View.VISIBLE);
|
||||
listToggle.setChecked(userInList.containsKey(item.id) && checked != null && checked);
|
||||
listToggle.setOnClickListener(this::onClickToggle);
|
||||
} else {
|
||||
listToggle.setVisibility(View.GONE);
|
||||
listToggle.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onClickToggle(View view) {
|
||||
private void onClickToggle(View view) {
|
||||
saveListMembership(item.id, listToggle.isChecked());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
@Override
|
||||
public void onClick() {
|
||||
Bundle args=new Bundle();
|
||||
args.putString("account", accountId);
|
||||
args.putString("listID", item.id);
|
||||
args.putString("listTitle", item.title);
|
||||
if (item.repliesPolicy != null) args.putInt("repliesPolicy", item.repliesPolicy.ordinal());
|
||||
Nav.go(getActivity(), ListTimelineFragment.class, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,6 +187,7 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc
|
||||
new GetFollowRequests(null, 1).setCallback(new Callback<>() {
|
||||
@Override
|
||||
public void onSuccess(HeaderPaginationList<Account> accounts) {
|
||||
if (getActivity() == null) return;
|
||||
getToolbar().getMenu().findItem(R.id.follow_requests).setVisible(!accounts.isEmpty());
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.joinmastodon.android.fragments;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
|
||||
import com.squareup.otto.Subscribe;
|
||||
@@ -12,15 +13,19 @@ import org.joinmastodon.android.api.requests.markers.SaveMarkers;
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.events.PollUpdatedEvent;
|
||||
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
|
||||
import org.joinmastodon.android.model.Account;
|
||||
import org.joinmastodon.android.model.Notification;
|
||||
import org.joinmastodon.android.model.PaginatedResponse;
|
||||
import org.joinmastodon.android.model.Status;
|
||||
import org.joinmastodon.android.ui.displayitems.AccountCardStatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.displayitems.AccountStatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.displayitems.ImageStatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
||||
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
|
||||
import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.parceler.Parcels;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -71,6 +76,8 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
|
||||
@Override
|
||||
protected List<StatusDisplayItem> buildDisplayItems(Notification n){
|
||||
Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null :
|
||||
n.report.targetAccount;
|
||||
String extraText=switch(n.type){
|
||||
case FOLLOW -> getString(R.string.user_followed_you);
|
||||
case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request);
|
||||
@@ -79,8 +86,10 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
case FAVORITE -> getString(R.string.user_favorited);
|
||||
case POLL -> getString(R.string.poll_ended);
|
||||
case UPDATE -> getString(R.string.sk_post_edited);
|
||||
case SIGN_UP -> getString(R.string.sk_signed_up);
|
||||
case REPORT -> getString(R.string.sk_reported);
|
||||
};
|
||||
HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, null, extraText, n, null) : null;
|
||||
HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, extraText, n, null) : null;
|
||||
if(n.status!=null){
|
||||
ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n);
|
||||
if(titleItem!=null){
|
||||
@@ -94,8 +103,13 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
items.add(0, titleItem);
|
||||
return items;
|
||||
}else if(titleItem!=null){
|
||||
AccountCardStatusDisplayItem card=new AccountCardStatusDisplayItem(n.id, this, n.account, n);
|
||||
return Arrays.asList(titleItem, card);
|
||||
AccountCardStatusDisplayItem card=new AccountCardStatusDisplayItem(n.id, this,
|
||||
reportTarget != null ? reportTarget : n.account, n);
|
||||
TextStatusDisplayItem text = n.report != null && !TextUtils.isEmpty(n.report.comment) ?
|
||||
new TextStatusDisplayItem(n.id, n.report.comment, this,
|
||||
Status.ofFake(n.id, n.report.comment, n.createdAt), true) :
|
||||
null;
|
||||
return text == null ? Arrays.asList(titleItem, card) : Arrays.asList(titleItem, text, card);
|
||||
}else{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@@ -116,8 +130,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
.getNotifications(offset>0 ? maxID : null, count, onlyMentions, onlyPosts, refreshing, new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(PaginatedResponse<List<Notification>> result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if (getActivity() == null) return;
|
||||
if(refreshing)
|
||||
relationships.clear();
|
||||
onDataLoaded(result.items.stream().filter(n->n.type!=null).collect(Collectors.toList()), !result.items.isEmpty());
|
||||
@@ -164,6 +177,9 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
if(status.inReplyToAccountId!=null && knownAccounts.containsKey(status.inReplyToAccountId))
|
||||
args.putParcelable("inReplyToAccount", Parcels.wrap(knownAccounts.get(status.inReplyToAccountId)));
|
||||
Nav.go(getActivity(), ThreadFragment.class, args);
|
||||
}else if(n.report != null){
|
||||
String domain = AccountSessionManager.getInstance().getAccount(accountID).domain;
|
||||
UiUtils.launchWebBrowser(getActivity(), "https://"+domain+"/admin/reports/"+n.report.id);
|
||||
}else{
|
||||
Bundle args=new Bundle();
|
||||
args.putString("account", accountID);
|
||||
|
||||
@@ -312,6 +312,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(Account result){
|
||||
if (getActivity() == null) return;
|
||||
account=result;
|
||||
isOwnProfile=AccountSessionManager.getInstance().isSelf(accountID, account);
|
||||
bindHeaderView();
|
||||
@@ -679,6 +680,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
}
|
||||
|
||||
private void updateRelationship(){
|
||||
if (getActivity() == null) return;
|
||||
invalidateOptionsMenu();
|
||||
actionButton.setVisibility(View.VISIBLE);
|
||||
notifyButton.setVisibility(relationship.following ? View.VISIBLE : View.GONE);
|
||||
@@ -688,7 +690,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
notifyProgress.setIndeterminateTintList(notifyButton.getTextColors());
|
||||
followsYouView.setVisibility(relationship.followedBy ? View.VISIBLE : View.GONE);
|
||||
notifyButton.setSelected(relationship.notifying);
|
||||
if (getActivity() != null) notifyButton.setContentDescription(getString(relationship.notifying ? R.string.sk_user_post_notifications_on : R.string.sk_user_post_notifications_off, '@'+account.username));
|
||||
notifyButton.setContentDescription(getString(relationship.notifying ? R.string.sk_user_post_notifications_on : R.string.sk_user_post_notifications_off, '@'+account.username));
|
||||
}
|
||||
|
||||
private void onScrollChanged(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY){
|
||||
@@ -771,8 +773,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
@Override
|
||||
public void onSuccess(Account result){
|
||||
editModeLoading=false;
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if (getActivity() == null) return;
|
||||
enterEditMode(result);
|
||||
setActionProgressVisible(false);
|
||||
}
|
||||
@@ -780,8 +781,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
@Override
|
||||
public void onError(ErrorResponse error){
|
||||
editModeLoading=false;
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if (getActivity() == null) return;
|
||||
error.showToast(getActivity());
|
||||
setActionProgressVisible(false);
|
||||
}
|
||||
@@ -884,6 +884,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||
public void onSuccess(Account result){
|
||||
account=result;
|
||||
AccountSessionManager.getInstance().updateAccountInfo(accountID, account);
|
||||
if (getActivity() == null) return;
|
||||
exitEditMode();
|
||||
setActionProgressVisible(false);
|
||||
}
|
||||
|
||||
@@ -109,6 +109,7 @@ public class ScheduledStatusListFragment extends BaseStatusListFragment<Schedule
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
nextMaxID=null;
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, nextMaxID!=null);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.util.LruCache;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -77,6 +78,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
private ArrayList<Item> items=new ArrayList<>();
|
||||
private ThemeItem themeItem;
|
||||
private NotificationPolicyItem notificationPolicyItem;
|
||||
private SwitchItem showNewPostsButtonItem, glitchModeItem;
|
||||
private String accountID;
|
||||
private boolean needUpdateNotificationSettings;
|
||||
private boolean needAppRestart;
|
||||
@@ -165,9 +167,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
}));
|
||||
items.add(new SwitchItem(R.string.sk_settings_show_alt_indicator, R.drawable.ic_fluent_scan_text_24_regular, GlobalUserPreferences.showAltIndicator, i->{
|
||||
GlobalUserPreferences.showAltIndicator=i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
items.add(new SwitchItem(R.string.sk_settings_show_no_alt_indicator, R.drawable.ic_fluent_important_24_regular, GlobalUserPreferences.showNoAltIndicator, i->{
|
||||
GlobalUserPreferences.showNoAltIndicator=i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
|
||||
items.add(new HeaderItem(R.string.settings_behavior));
|
||||
@@ -224,8 +228,18 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
GlobalUserPreferences.showBoosts=i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
items.add(new SwitchItem(R.string.sk_settings_load_new_posts, R.drawable.ic_fluent_arrow_up_24_regular, GlobalUserPreferences.loadNewPosts, i->{
|
||||
items.add(new SwitchItem(R.string.sk_settings_load_new_posts, R.drawable.ic_fluent_arrow_sync_24_regular, GlobalUserPreferences.loadNewPosts, i->{
|
||||
GlobalUserPreferences.loadNewPosts=i.checked;
|
||||
showNewPostsButtonItem.enabled = i.checked;
|
||||
if (!i.checked) {
|
||||
GlobalUserPreferences.showNewPostsButton = false;
|
||||
showNewPostsButtonItem.checked = false;
|
||||
}
|
||||
if (list.findViewHolderForAdapterPosition(items.indexOf(showNewPostsButtonItem)) instanceof SwitchViewHolder svh) svh.rebind();
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
items.add(showNewPostsButtonItem = new SwitchItem(R.string.sk_settings_see_new_posts_button, R.drawable.ic_fluent_arrow_up_24_regular, GlobalUserPreferences.showNewPostsButton, i->{
|
||||
GlobalUserPreferences.showNewPostsButton=i.checked;
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
|
||||
@@ -237,7 +251,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
items.add(new SwitchItem(R.string.notify_reblog, R.drawable.ic_fluent_arrow_repeat_all_24_regular, pushSubscription.alerts.reblog, i->onNotificationsChanged(PushNotification.Type.REBLOG, i.checked)));
|
||||
items.add(new SwitchItem(R.string.notify_mention, R.drawable.ic_fluent_mention_24_regular, pushSubscription.alerts.mention, i->onNotificationsChanged(PushNotification.Type.MENTION, i.checked)));
|
||||
items.add(new SwitchItem(R.string.sk_notify_update, R.drawable.ic_fluent_history_24_regular, pushSubscription.alerts.update, i->onNotificationsChanged(PushNotification.Type.UPDATE, i.checked)));
|
||||
items.add(new SwitchItem(R.string.sk_notify_posts, R.drawable.ic_fluent_alert_24_regular, pushSubscription.alerts.status, i->onNotificationsChanged(PushNotification.Type.STATUS, i.checked)));
|
||||
items.add(new SwitchItem(R.string.sk_notify_posts, R.drawable.ic_fluent_chat_24_regular, pushSubscription.alerts.status, i->onNotificationsChanged(PushNotification.Type.STATUS, i.checked)));
|
||||
|
||||
items.add(new HeaderItem(R.string.settings_account));
|
||||
items.add(new TextItem(R.string.sk_settings_profile, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/settings/profile"), R.drawable.ic_fluent_open_24_regular));
|
||||
@@ -256,10 +270,37 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
items.add(new TextItem(R.string.settings_privacy_policy, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+session.domain+"/terms"), R.drawable.ic_fluent_open_24_regular));
|
||||
items.add(new TextItem(R.string.log_out, this::confirmLogOut, R.drawable.ic_fluent_sign_out_24_regular));
|
||||
|
||||
items.add(new HeaderItem(R.string.sk_instance_features));
|
||||
items.add(new SwitchItem(R.string.sk_settings_support_local_only, 0, GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID), i->{
|
||||
glitchModeItem.enabled = i.checked;
|
||||
if (i.checked) {
|
||||
GlobalUserPreferences.accountsWithLocalOnlySupport.add(accountID);
|
||||
if (instance.pleroma == null) GlobalUserPreferences.accountsInGlitchMode.add(accountID);
|
||||
} else {
|
||||
GlobalUserPreferences.accountsWithLocalOnlySupport.remove(accountID);
|
||||
GlobalUserPreferences.accountsInGlitchMode.remove(accountID);
|
||||
}
|
||||
glitchModeItem.checked = GlobalUserPreferences.accountsInGlitchMode.contains(accountID);
|
||||
if (list.findViewHolderForAdapterPosition(items.indexOf(glitchModeItem)) instanceof SwitchViewHolder svh) svh.rebind();
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
items.add(new SmallTextItem(getString(R.string.sk_settings_local_only_explanation)));
|
||||
items.add(glitchModeItem = new SwitchItem(R.string.sk_settings_glitch_instance, 0, GlobalUserPreferences.accountsInGlitchMode.contains(accountID), i->{
|
||||
if (i.checked) {
|
||||
GlobalUserPreferences.accountsInGlitchMode.add(accountID);
|
||||
} else {
|
||||
GlobalUserPreferences.accountsInGlitchMode.remove(accountID);
|
||||
}
|
||||
GlobalUserPreferences.save();
|
||||
}));
|
||||
glitchModeItem.enabled = GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID);
|
||||
items.add(new SmallTextItem(getString(R.string.sk_settings_glitch_mode_explanation)));
|
||||
|
||||
items.add(new HeaderItem(R.string.sk_settings_about));
|
||||
items.add(new TextItem(R.string.sk_settings_contribute, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/sk22/megalodon"), R.drawable.ic_fluent_open_24_regular));
|
||||
items.add(new TextItem(R.string.sk_settings_donate, ()->UiUtils.launchWebBrowser(getActivity(), "https://ko-fi.com/xsk22"), R.drawable.ic_fluent_heart_24_regular));
|
||||
clearImageCacheItem = new TextItem(R.string.settings_clear_cache, UiUtils.formatFileSize(getContext(), imageCache.getDiskCache().size(), true), this::clearImageCache, 0);
|
||||
LruCache<?, ?> cache = imageCache == null ? null : imageCache.getLruCache();
|
||||
clearImageCacheItem = new TextItem(R.string.settings_clear_cache, UiUtils.formatFileSize(getContext(), cache != null ? cache.size() : 0, true), this::clearImageCache, 0);
|
||||
items.add(clearImageCacheItem);
|
||||
items.add(new TextItem(R.string.sk_clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.sk_clear_recent_languages, R.string.sk_confirm_clear_recent_languages, R.string.clear, ()->{
|
||||
GlobalUserPreferences.recentLanguages.remove(accountID);
|
||||
@@ -492,6 +533,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
}
|
||||
|
||||
private void onLoggedOut(){
|
||||
if (getActivity() == null) return;
|
||||
AccountSessionManager.getInstance().removeAccount(accountID);
|
||||
getActivity().finish();
|
||||
Intent intent=new Intent(getActivity(), MainActivity.class);
|
||||
@@ -940,19 +982,19 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
||||
|
||||
private class SmallTextViewHolder extends BindableViewHolder<SmallTextItem> {
|
||||
private final TextView text;
|
||||
;
|
||||
|
||||
public SmallTextViewHolder(){
|
||||
super(getActivity(), R.layout.item_settings_text, list);
|
||||
text = itemView.findViewById(R.id.text);
|
||||
text.setTextColor(UiUtils.getThemeColor(getActivity(), android.R.attr.textColorSecondary));
|
||||
text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
|
||||
text.setPaddingRelative(text.getPaddingStart(), 0, text.getPaddingEnd(), text.getPaddingBottom());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(SmallTextItem item){
|
||||
text.setText(item.text);
|
||||
text.setTextColor(UiUtils.getThemeColor(getActivity(), android.R.attr.textColorSecondary));
|
||||
text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -173,16 +173,7 @@ public class SplashFragment extends AppKitFragment{
|
||||
TextView title=new TextView(getActivity());
|
||||
title.setTextAppearance(R.style.m3_headline_medium);
|
||||
title.setText(switch(page){
|
||||
case 0 -> {
|
||||
String src=getString(R.string.welcome_page1_title);
|
||||
SpannableString ss=new SpannableString(src);
|
||||
int start=src.indexOf("{logo}");
|
||||
if(start!=-1){
|
||||
LogoSpan span=new LogoSpan(getResources().getDrawable(R.drawable.splash_logo, getActivity().getTheme()));
|
||||
ss.setSpan(span, start, start+6, 0);
|
||||
}
|
||||
yield ss;
|
||||
}
|
||||
case 0 -> getString(R.string.welcome_page1_title);
|
||||
case 1 -> getString(R.string.welcome_page2_title);
|
||||
case 2 -> getString(R.string.welcome_page3_title);
|
||||
default -> throw new IllegalStateException("Unexpected value: "+page);
|
||||
@@ -204,26 +195,4 @@ public class SplashFragment extends AppKitFragment{
|
||||
ll.addView(text, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
}
|
||||
}
|
||||
|
||||
private class LogoSpan extends ReplacementSpan{
|
||||
private final Drawable drawable;
|
||||
|
||||
private LogoSpan(Drawable drawable){
|
||||
this.drawable=drawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm){
|
||||
return drawable.getIntrinsicWidth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint){
|
||||
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
|
||||
canvas.save();
|
||||
canvas.translate(x, y-V.dp(20));
|
||||
drawable.draw(canvas);
|
||||
canvas.restore();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ public class StatusEditHistoryFragment extends StatusListFragment{
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
Collections.sort(result, Comparator.comparing((Status s)->s.createdAt).reversed());
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, false);
|
||||
}
|
||||
})
|
||||
@@ -139,7 +140,8 @@ public class StatusEditHistoryFragment extends StatusListFragment{
|
||||
action=getString(R.string.edit_multiple_changed);
|
||||
}
|
||||
}
|
||||
items.add(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" · "+date, Collections.emptyList(), 0, null, null));
|
||||
String sep = getString(R.string.sk_separator);
|
||||
items.add(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" "+sep+" "+date, Collections.emptyList(), 0, null, null));
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -61,8 +61,7 @@ public class ThreadFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(StatusContext result){
|
||||
if(getActivity()==null)
|
||||
return;
|
||||
if (getActivity() == null) return;
|
||||
if(refreshing){
|
||||
data.clear();
|
||||
displayItems.clear();
|
||||
|
||||
@@ -101,6 +101,7 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
|
||||
for(Relationship rel:result){
|
||||
relationships.put(rel.id, rel);
|
||||
}
|
||||
if (getActivity() == null) return;
|
||||
if(list==null)
|
||||
return;
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
@@ -370,6 +371,7 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
|
||||
@Override
|
||||
public void onSuccess(Relationship result){
|
||||
relationships.put(AccountViewHolder.this.item.account.id, result);
|
||||
if (getActivity() == null) return;
|
||||
bindRelationship();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ public abstract class PaginatedAccountListFragment extends BaseAccountListFragme
|
||||
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
|
||||
else
|
||||
nextMaxID=null;
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result.stream().map(AccountItem::new).collect(Collectors.toList()), nextMaxID!=null);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -74,6 +74,7 @@ public class DiscoverAccountsFragment extends BaseRecyclerFragment<DiscoverAccou
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<FollowSuggestion> result){
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result.stream().map(fs->new AccountWrapper(fs.account)).collect(Collectors.toList()), false);
|
||||
loadRelationships();
|
||||
}
|
||||
@@ -108,6 +109,7 @@ public class DiscoverAccountsFragment extends BaseRecyclerFragment<DiscoverAccou
|
||||
public void onSuccess(List<Relationship> result){
|
||||
relationshipsRequest=null;
|
||||
relationships=result.stream().collect(Collectors.toMap(rel->rel.id, Function.identity()));
|
||||
if (getActivity() == null) return;
|
||||
if(list==null)
|
||||
return;
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
|
||||
@@ -59,6 +59,7 @@ public class DiscoverNewsFragment extends BaseRecyclerFragment<Card> implements
|
||||
imageRequests=result.stream()
|
||||
.map(card->TextUtils.isEmpty(card.image) ? null : new UrlImageLoaderRequest(card.image, V.dp(150), V.dp(150)))
|
||||
.collect(Collectors.toList());
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, false);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -22,6 +22,7 @@ public class DiscoverPostsFragment extends StatusListFragment implements IsOnTop
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
}).exec(accountID);
|
||||
|
||||
@@ -29,6 +29,7 @@ public class FederatedTimelineFragment extends FabStatusListFragment {
|
||||
public void onSuccess(List<Status> result){
|
||||
if(!result.isEmpty())
|
||||
maxID=result.get(result.size()-1).id;
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result.stream().filter(new StatusFilterPredicate(accountID, Filter.FilterContext.PUBLIC)).collect(Collectors.toList()), !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -29,6 +29,7 @@ public class LocalTimelineFragment extends FabStatusListFragment {
|
||||
public void onSuccess(List<Status> result){
|
||||
if(!result.isEmpty())
|
||||
maxID=result.get(result.size()-1).id;
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result.stream().filter(new StatusFilterPredicate(accountID, Filter.FilterContext.PUBLIC)).collect(Collectors.toList()), !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -124,6 +124,7 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult> impleme
|
||||
|
||||
@Override
|
||||
protected void doLoadData(int offset, int count){
|
||||
if (getActivity() == null) return;
|
||||
resetEmptyText();
|
||||
if(isInRecentMode()){
|
||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().getRecentSearches(sr->{
|
||||
@@ -156,6 +157,7 @@ public class SearchFragment extends BaseStatusListFragment<SearchResult> impleme
|
||||
}
|
||||
prevDisplayItems=new ArrayList<>(displayItems);
|
||||
unfilteredResults=results;
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(filterSearchResults(results), false);
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ public class TrendingHashtagsFragment extends BaseRecyclerFragment<Hashtag> impl
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Hashtag> result){
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, false);
|
||||
}
|
||||
})
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -19,6 +20,7 @@ import org.joinmastodon.android.model.Instance;
|
||||
import org.joinmastodon.android.ui.DividerItemDecoration;
|
||||
import org.joinmastodon.android.ui.OutlineProviders;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.utils.ElevationOnScrollListener;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.parceler.Parcels;
|
||||
@@ -42,6 +44,7 @@ import me.grishka.appkit.utils.BindableViewHolder;
|
||||
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.V;
|
||||
import me.grishka.appkit.views.FragmentRootLinearLayout;
|
||||
import me.grishka.appkit.views.UsableRecyclerView;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.Callback;
|
||||
@@ -58,6 +61,7 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
private ArrayList<Item> items=new ArrayList<>();
|
||||
private Call currentRequest;
|
||||
private ItemsAdapter itemsAdapter;
|
||||
private ElevationOnScrollListener onScrollListener;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
@@ -72,7 +76,7 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
setNavigationBarColor(UiUtils.getThemeColor(activity, R.attr.colorWindowBackground));
|
||||
instance=Parcels.unwrap(getArguments().getParcelable("instance"));
|
||||
|
||||
items.add(new Item("Mastodon for Android Privacy Policy", "joinmastodon.org", "https://joinmastodon.org/android/privacy", "https://joinmastodon.org/favicon-32x32.png"));
|
||||
items.add(new Item("Mastodon for Android Privacy Policy", getString(R.string.privacy_policy_explanation), "joinmastodon.org", "https://joinmastodon.org/android/privacy", "https://joinmastodon.org/favicon-32x32.png"));
|
||||
loadServerPrivacyPolicy();
|
||||
}
|
||||
|
||||
@@ -93,18 +97,24 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
list.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
View headerView=inflater.inflate(R.layout.item_list_header_simple, list, false);
|
||||
TextView text=headerView.findViewById(R.id.text);
|
||||
text.setText(R.string.privacy_policy_subtitle);
|
||||
text.setText(getString(R.string.privacy_policy_subtitle, instance.uri));
|
||||
|
||||
adapter=new MergeRecyclerAdapter();
|
||||
adapter.addAdapter(new SingleViewRecyclerAdapter(headerView));
|
||||
adapter.addAdapter(itemsAdapter=new ItemsAdapter());
|
||||
list.setAdapter(adapter);
|
||||
list.addItemDecoration(new DividerItemDecoration(getActivity(), R.attr.colorM3SurfaceVariant, 1, 56, 0, DividerItemDecoration.NOT_FIRST));
|
||||
|
||||
btn=view.findViewById(R.id.btn_next);
|
||||
btn.setOnClickListener(v->onButtonClick());
|
||||
buttonBar=view.findViewById(R.id.button_bar);
|
||||
|
||||
Button backBtn=view.findViewById(R.id.btn_back);
|
||||
backBtn.setText(getString(R.string.server_policy_disagree, instance.uri));
|
||||
backBtn.setOnClickListener(v->{
|
||||
setResult(false, null);
|
||||
Nav.finish(this);
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -113,13 +123,17 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
setStatusBarColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background));
|
||||
view.setBackgroundColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background));
|
||||
list.addOnScrollListener(onScrollListener=new ElevationOnScrollListener((FragmentRootLinearLayout) view, buttonBar, getToolbar()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUpdateToolbar(){
|
||||
super.onUpdateToolbar();
|
||||
getToolbar().setBackground(null);
|
||||
getToolbar().setBackgroundResource(R.drawable.bg_onboarding_panel);
|
||||
getToolbar().setElevation(0);
|
||||
if(onScrollListener!=null){
|
||||
onScrollListener.setViews(buttonBar, getToolbar());
|
||||
}
|
||||
}
|
||||
|
||||
protected void onButtonClick(){
|
||||
@@ -158,7 +172,7 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
if(!response.isSuccessful())
|
||||
return;
|
||||
Document doc=Jsoup.parse(Objects.requireNonNull(body).byteStream(), Objects.requireNonNull(body.contentType()).charset(StandardCharsets.UTF_8).name(), req.url().toString());
|
||||
final Item item=new Item(doc.title(), instance.uri, req.url().toString(), "https://"+instance.uri+"/favicon.ico");
|
||||
final Item item=new Item(doc.title(), null, instance.uri, req.url().toString(), "https://"+instance.uri+"/favicon.ico");
|
||||
Activity activity=getActivity();
|
||||
if(activity!=null){
|
||||
activity.runOnUiThread(()->{
|
||||
@@ -192,16 +206,23 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
|
||||
private class ItemViewHolder extends BindableViewHolder<Item> implements UsableRecyclerView.Clickable{
|
||||
private final TextView title;
|
||||
private final TextView subtitle;
|
||||
|
||||
public ItemViewHolder(){
|
||||
super(getActivity(), R.layout.item_privacy_policy_link, list);
|
||||
title=findViewById(R.id.title);
|
||||
title.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|
||||
subtitle=findViewById(R.id.subtitle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(Item item){
|
||||
title.setText(item.title);
|
||||
if(TextUtils.isEmpty(item.subtitle)){
|
||||
subtitle.setVisibility(View.GONE);
|
||||
}else{
|
||||
subtitle.setVisibility(View.VISIBLE);
|
||||
subtitle.setText(item.subtitle);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,10 +232,11 @@ public class GoogleMadeMeAddThisFragment extends ToolbarFragment{
|
||||
}
|
||||
|
||||
private static class Item{
|
||||
public String title, domain, url, faviconUrl;
|
||||
public String title, subtitle, domain, url, faviconUrl;
|
||||
|
||||
public Item(String title, String domain, String url, String faviconUrl){
|
||||
public Item(String title, String subtitle, String domain, String url, String faviconUrl){
|
||||
this.title=title;
|
||||
this.subtitle=subtitle;
|
||||
this.domain=domain;
|
||||
this.url=url;
|
||||
this.faviconUrl=faviconUrl;
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
package org.joinmastodon.android.fragments.onboarding;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
@@ -20,7 +14,6 @@ import android.view.WindowInsets;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.HorizontalScrollView;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.RadioButton;
|
||||
@@ -38,6 +31,7 @@ import org.joinmastodon.android.ui.BetterItemAnimator;
|
||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.ui.views.FilterChipView;
|
||||
import org.joinmastodon.android.utils.ElevationOnScrollListener;
|
||||
import org.parceler.Parcels;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -56,11 +50,7 @@ import me.grishka.appkit.Nav;
|
||||
import me.grishka.appkit.api.Callback;
|
||||
import me.grishka.appkit.api.ErrorResponse;
|
||||
import me.grishka.appkit.fragments.OnBackPressedListener;
|
||||
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
||||
import me.grishka.appkit.utils.BindableViewHolder;
|
||||
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
||||
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.V;
|
||||
@@ -215,47 +205,7 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
setStatusBarColor(0);
|
||||
topBar=view.findViewById(R.id.top_bar);
|
||||
|
||||
LayerDrawable topBg=(LayerDrawable) topBar.getBackground().mutate();
|
||||
topBar.setBackground(topBg);
|
||||
Drawable topOverlay=topBg.findDrawableByLayerId(R.id.color_overlay);
|
||||
topOverlay.setAlpha(0);
|
||||
|
||||
LayerDrawable btmBg=(LayerDrawable) buttonBar.getBackground().mutate();
|
||||
buttonBar.setBackground(btmBg);
|
||||
Drawable btmOverlay=btmBg.findDrawableByLayerId(R.id.color_overlay);
|
||||
btmOverlay.setAlpha(0);
|
||||
|
||||
list.addOnScrollListener(new RecyclerView.OnScrollListener(){
|
||||
private boolean isAtTop=true;
|
||||
private Animator currentPanelsAnim;
|
||||
@Override
|
||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){
|
||||
boolean newAtTop=recyclerView.getChildCount()==0 || (recyclerView.getChildAdapterPosition(recyclerView.getChildAt(0))==0 && recyclerView.getChildAt(0).getTop()==recyclerView.getPaddingTop());
|
||||
if(newAtTop!=isAtTop){
|
||||
isAtTop=newAtTop;
|
||||
if(currentPanelsAnim!=null)
|
||||
currentPanelsAnim.cancel();
|
||||
|
||||
AnimatorSet set=new AnimatorSet();
|
||||
set.playTogether(
|
||||
ObjectAnimator.ofInt(topOverlay, "alpha", isAtTop ? 0 : 20),
|
||||
ObjectAnimator.ofInt(btmOverlay, "alpha", isAtTop ? 0 : 20),
|
||||
ObjectAnimator.ofFloat(topBar, View.TRANSLATION_Z, isAtTop ? 0 : V.dp(3)),
|
||||
ObjectAnimator.ofFloat(buttonBar, View.TRANSLATION_Z, isAtTop ? 0 : V.dp(3))
|
||||
);
|
||||
set.setDuration(150);
|
||||
set.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||
set.addListener(new AnimatorListenerAdapter(){
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation){
|
||||
currentPanelsAnim=null;
|
||||
}
|
||||
});
|
||||
set.start();
|
||||
currentPanelsAnim=set;
|
||||
}
|
||||
}
|
||||
});
|
||||
list.addOnScrollListener(new ElevationOnScrollListener(null, topBar, buttonBar));
|
||||
|
||||
searchEdit=view.findViewById(R.id.search_edit);
|
||||
searchEdit.setOnEditorActionListener(this::onSearchEnterPressed);
|
||||
@@ -366,6 +316,9 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
}).collect(Collectors.toList());
|
||||
focusThing=view.findViewById(R.id.focus_thing);
|
||||
focusThing.requestFocus();
|
||||
|
||||
view.findViewById(R.id.btn_random_instance).setOnClickListener(this::onPickRandomInstanceClick);
|
||||
nextButton.setEnabled(chosenInstance!=null);
|
||||
}
|
||||
|
||||
private void onRegionFilterClick(View v){
|
||||
@@ -396,22 +349,6 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
updateFilteredList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNextClick(View v){
|
||||
if(chosenInstance==null){
|
||||
String lang=Locale.getDefault().getLanguage();
|
||||
List<CatalogInstance> instances=data.stream().filter(ci->!ci.approvalRequired && ("general".equals(ci.category) || (ci.categories!=null && ci.categories.contains("general"))) && (lang.equals(ci.language) || (ci.languages!=null && ci.languages.contains(lang)))).collect(Collectors.toList());
|
||||
if(instances.isEmpty()){
|
||||
instances=data.stream().filter(ci->!ci.approvalRequired && ("general".equals(ci.category) || (ci.categories!=null && ci.categories.contains("general")))).collect(Collectors.toList());
|
||||
}
|
||||
if(instances.isEmpty()){
|
||||
return;
|
||||
}
|
||||
chosenInstance=instances.get(new Random().nextInt(instances.size()));
|
||||
}
|
||||
super.onNextClick(v);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void proceedWithAuthOrSignup(Instance instance){
|
||||
getActivity().getSystemService(InputMethodManager.class).hideSoftInputFromWindow(contentView.getWindowToken(), 0);
|
||||
@@ -428,6 +365,19 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
Nav.go(getActivity(), InstanceRulesFragment.class, args);
|
||||
}
|
||||
|
||||
private void onPickRandomInstanceClick(View v){
|
||||
String lang=Locale.getDefault().getLanguage();
|
||||
List<CatalogInstance> instances=data.stream().filter(ci->!ci.approvalRequired && ("general".equals(ci.category) || (ci.categories!=null && ci.categories.contains("general"))) && (lang.equals(ci.language) || (ci.languages!=null && ci.languages.contains(lang)))).collect(Collectors.toList());
|
||||
if(instances.isEmpty()){
|
||||
instances=data.stream().filter(ci->!ci.approvalRequired && ("general".equals(ci.category) || (ci.categories!=null && ci.categories.contains("general")))).collect(Collectors.toList());
|
||||
}
|
||||
if(instances.isEmpty()){
|
||||
return;
|
||||
}
|
||||
chosenInstance=instances.get(new Random().nextInt(instances.size()));
|
||||
onNextClick(v);
|
||||
}
|
||||
|
||||
// private String getEmojiForCategory(String category){
|
||||
// return switch(category){
|
||||
// case "all" -> "💬";
|
||||
@@ -577,7 +527,7 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
updateFilteredList();
|
||||
}
|
||||
|
||||
private class InstancesAdapter extends UsableRecyclerView.Adapter<InstanceCatalogSignupFragment.InstanceViewHolder> implements ImageLoaderRecyclerAdapter{
|
||||
private class InstancesAdapter extends UsableRecyclerView.Adapter<InstanceCatalogSignupFragment.InstanceViewHolder>{
|
||||
public InstancesAdapter(){
|
||||
super(imgLoader);
|
||||
}
|
||||
@@ -603,22 +553,11 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
public int getItemViewType(int position){
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getImageCountForItem(int position){
|
||||
return filteredData.get(position).thumbnailRequest!=null ? 1 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageLoaderRequest getImageRequest(int position, int image){
|
||||
return filteredData.get(position).thumbnailRequest;
|
||||
}
|
||||
}
|
||||
|
||||
private class InstanceViewHolder extends BindableViewHolder<CatalogInstance> implements UsableRecyclerView.DisableableClickable, ImageLoaderViewHolder{
|
||||
private class InstanceViewHolder extends BindableViewHolder<CatalogInstance> implements UsableRecyclerView.DisableableClickable{
|
||||
private final TextView title, description;
|
||||
private final RadioButton radioButton;
|
||||
private final ImageView thumbnail;
|
||||
private boolean enabled;
|
||||
|
||||
public InstanceViewHolder(){
|
||||
@@ -626,15 +565,12 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
title=findViewById(R.id.title);
|
||||
description=findViewById(R.id.description);
|
||||
radioButton=findViewById(R.id.radiobtn);
|
||||
thumbnail=findViewById(R.id.image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(CatalogInstance item){
|
||||
title.setText(item.normalizedDomain);
|
||||
radioButton.setChecked(chosenInstance==item);
|
||||
if(item.thumbnailRequest==null)
|
||||
thumbnail.setImageDrawable(null);
|
||||
Instance realInstance=instancesCache.get(item.normalizedDomain);
|
||||
float alpha;
|
||||
if(realInstance!=null && !realInstance.registrations){
|
||||
@@ -649,7 +585,6 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
title.setAlpha(alpha);
|
||||
description.setAlpha(alpha);
|
||||
radioButton.setAlpha(alpha);
|
||||
thumbnail.setAlpha(alpha);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -672,6 +607,9 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
adapter.notifyItemChanged(idx);
|
||||
}
|
||||
}
|
||||
if(!nextButton.isEnabled()){
|
||||
nextButton.setEnabled(true);
|
||||
}
|
||||
radioButton.setChecked(true);
|
||||
if(chosenInstance==null)
|
||||
nextButton.setEnabled(true);
|
||||
@@ -679,16 +617,6 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
loadInstanceInfo(chosenInstance.domain, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImage(int index, Drawable image){
|
||||
thumbnail.setImageDrawable(image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearImage(int index){
|
||||
setImage(index, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(){
|
||||
return enabled;
|
||||
@@ -710,4 +638,5 @@ public class InstanceCatalogSignupFragment extends InstanceCatalogFragment imple
|
||||
return (this==GENERAL)==isGeneral;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.joinmastodon.android.model.Instance;
|
||||
import org.joinmastodon.android.ui.DividerItemDecoration;
|
||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
import org.joinmastodon.android.utils.ElevationOnScrollListener;
|
||||
import org.parceler.Parcels;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -28,6 +29,7 @@ import me.grishka.appkit.utils.BindableViewHolder;
|
||||
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
||||
import me.grishka.appkit.utils.V;
|
||||
import me.grishka.appkit.views.FragmentRootLinearLayout;
|
||||
import me.grishka.appkit.views.UsableRecyclerView;
|
||||
|
||||
public class InstanceRulesFragment extends ToolbarFragment{
|
||||
@@ -36,6 +38,9 @@ public class InstanceRulesFragment extends ToolbarFragment{
|
||||
private Button btn;
|
||||
private View buttonBar;
|
||||
private Instance instance;
|
||||
private ElevationOnScrollListener onScrollListener;
|
||||
|
||||
private static final int RULES_REQUEST=376;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
@@ -71,6 +76,8 @@ public class InstanceRulesFragment extends ToolbarFragment{
|
||||
btn.setOnClickListener(v->onButtonClick());
|
||||
buttonBar=view.findViewById(R.id.button_bar);
|
||||
|
||||
view.findViewById(R.id.btn_back).setOnClickListener(v->Nav.finish(this));
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -79,19 +86,31 @@ public class InstanceRulesFragment extends ToolbarFragment{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
// setStatusBarColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background));
|
||||
// view.setBackgroundColor(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Background));
|
||||
list.addOnScrollListener(onScrollListener=new ElevationOnScrollListener((FragmentRootLinearLayout) view, buttonBar, getToolbar()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUpdateToolbar(){
|
||||
super.onUpdateToolbar();
|
||||
getToolbar().setBackground(null);
|
||||
getToolbar().setBackgroundResource(R.drawable.bg_onboarding_panel);
|
||||
getToolbar().setElevation(0);
|
||||
if(onScrollListener!=null){
|
||||
onScrollListener.setViews(buttonBar, getToolbar());
|
||||
}
|
||||
}
|
||||
|
||||
protected void onButtonClick(){
|
||||
Bundle args=new Bundle();
|
||||
args.putParcelable("instance", Parcels.wrap(instance));
|
||||
Nav.go(getActivity(), GoogleMadeMeAddThisFragment.class, args);
|
||||
Nav.goForResult(getActivity(), GoogleMadeMeAddThisFragment.class, args, RULES_REQUEST, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFragmentResult(int reqCode, boolean success, Bundle result){
|
||||
super.onFragmentResult(reqCode, success, result);
|
||||
if(reqCode==RULES_REQUEST && !success){
|
||||
Nav.finish(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -89,6 +89,7 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{
|
||||
.setCallback(new SimpleCallback<>(this){
|
||||
@Override
|
||||
public void onSuccess(List<Status> result){
|
||||
if (getActivity() == null) return;
|
||||
onDataLoaded(result, !result.isEmpty());
|
||||
}
|
||||
})
|
||||
|
||||
@@ -42,17 +42,9 @@ public class Announcement extends BaseModel implements DisplayItemsParent {
|
||||
}
|
||||
|
||||
public Status toStatus() {
|
||||
Status s = new Status();
|
||||
s.id = id;
|
||||
s.mediaAttachments = List.of();
|
||||
Status s = Status.ofFake(id, content, publishedAt);
|
||||
s.createdAt = startsAt != null ? startsAt : publishedAt;
|
||||
if (updatedAt != null) s.editedAt = updatedAt;
|
||||
s.content = s.text = content;
|
||||
s.spoilerText = "";
|
||||
s.visibility = StatusPrivacy.PUBLIC;
|
||||
s.mentions = List.of();
|
||||
s.tags = List.of();
|
||||
s.emojis = List.of();
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,6 +84,8 @@ public class Instance extends BaseModel{
|
||||
|
||||
public V2 v2;
|
||||
|
||||
public Pleroma pleroma;
|
||||
|
||||
@Override
|
||||
public void postprocess() throws ObjectValidationException{
|
||||
super.postprocess();
|
||||
@@ -193,4 +195,9 @@ public class Instance extends BaseModel{
|
||||
public boolean enabled;
|
||||
}
|
||||
}
|
||||
|
||||
@Parcel
|
||||
public static class Pleroma extends BaseModel {
|
||||
// metadata etc
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ public class Notification extends BaseModel implements DisplayItemsParent{
|
||||
public Instant createdAt;
|
||||
@RequiredField
|
||||
public Account account;
|
||||
|
||||
public Status status;
|
||||
public Report report;
|
||||
|
||||
@Override
|
||||
public void postprocess() throws ObjectValidationException{
|
||||
@@ -50,6 +50,17 @@ public class Notification extends BaseModel implements DisplayItemsParent{
|
||||
@SerializedName("status")
|
||||
STATUS,
|
||||
@SerializedName("update")
|
||||
UPDATE
|
||||
UPDATE,
|
||||
@SerializedName("admin.sign_up")
|
||||
SIGN_UP,
|
||||
@SerializedName("admin.report")
|
||||
REPORT
|
||||
}
|
||||
|
||||
@Parcel
|
||||
public static class Report {
|
||||
public String id;
|
||||
public String comment;
|
||||
public Account targetAccount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,11 @@ public class PushNotification extends BaseModel{
|
||||
@SerializedName("status")
|
||||
STATUS(R.string.sk_notification_type_status),
|
||||
@SerializedName("update")
|
||||
UPDATE(R.string.sk_notification_type_update);
|
||||
UPDATE(R.string.sk_notification_type_update),
|
||||
@SerializedName("admin.sign_up")
|
||||
SIGN_UP(R.string.sk_sign_ups),
|
||||
@SerializedName("admin.report")
|
||||
REPORT(R.string.sk_new_reports);
|
||||
|
||||
@StringRes
|
||||
public final int localizedName;
|
||||
|
||||
@@ -47,6 +47,14 @@ public class PushSubscription extends BaseModel implements Cloneable{
|
||||
public boolean status;
|
||||
public boolean update;
|
||||
|
||||
// set to true here because i didn't add any items for those to the settings
|
||||
// (so i don't have to determine whether the user is an admin to show the items or not, and
|
||||
// admins can still disable those through the android notifications settings)
|
||||
@SerializedName("admin.sign_up")
|
||||
public boolean adminSignUp = true;
|
||||
@SerializedName("admin.report")
|
||||
public boolean adminReport = true;
|
||||
|
||||
public static Alerts ofAll(){
|
||||
Alerts alerts=new Alerts();
|
||||
alerts.follow=alerts.favourite=alerts.reblog=alerts.mention=alerts.poll=alerts.status=alerts.update=true;
|
||||
@@ -63,6 +71,8 @@ public class PushSubscription extends BaseModel implements Cloneable{
|
||||
", poll="+poll+
|
||||
", status="+status+
|
||||
", update="+update+
|
||||
", adminSignUp="+adminSignUp+
|
||||
", adminReport="+adminReport+
|
||||
'}';
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ public class Status extends BaseModel implements DisplayItemsParent{
|
||||
public Card card;
|
||||
public String language;
|
||||
public String text;
|
||||
public boolean localOnly;
|
||||
|
||||
public boolean favourited;
|
||||
public boolean reblogged;
|
||||
@@ -83,6 +84,7 @@ public class Status extends BaseModel implements DisplayItemsParent{
|
||||
reblog.postprocess();
|
||||
|
||||
spoilerRevealed=GlobalUserPreferences.alwaysExpandContentWarnings || !sensitive;
|
||||
if (visibility.equals(StatusPrivacy.LOCAL)) localOnly = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -144,4 +146,18 @@ public class Status extends BaseModel implements DisplayItemsParent{
|
||||
strippedText=HtmlParser.strip(content);
|
||||
return strippedText;
|
||||
}
|
||||
|
||||
public static Status ofFake(String id, String text, Instant createdAt) {
|
||||
Status s = new Status();
|
||||
s.id = id;
|
||||
s.mediaAttachments = List.of();
|
||||
s.createdAt = createdAt;
|
||||
s.content = s.text = text;
|
||||
s.spoilerText = "";
|
||||
s.visibility = StatusPrivacy.PUBLIC;
|
||||
s.mentions = List.of();
|
||||
s.tags = List.of();
|
||||
s.emojis = List.of();
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@ public enum StatusPrivacy{
|
||||
@SerializedName("private")
|
||||
PRIVATE(2),
|
||||
@SerializedName("direct")
|
||||
DIRECT(3);
|
||||
DIRECT(3),
|
||||
@SerializedName("local")
|
||||
LOCAL(4); // akkoma
|
||||
|
||||
private int privacy;
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ public class TimelineDefinition {
|
||||
private @Nullable String hashtagName;
|
||||
|
||||
public static TimelineDefinition ofList(String listId, String listTitle) {
|
||||
TimelineDefinition def = new TimelineDefinition(TimelineType.LIST, listTitle);
|
||||
TimelineDefinition def = new TimelineDefinition(TimelineType.LIST);
|
||||
def.listId = listId;
|
||||
def.listTitle = listTitle;
|
||||
return def;
|
||||
@@ -42,7 +42,7 @@ public class TimelineDefinition {
|
||||
}
|
||||
|
||||
public static TimelineDefinition ofHashtag(String hashtag) {
|
||||
TimelineDefinition def = new TimelineDefinition(TimelineType.HASHTAG, hashtag);
|
||||
TimelineDefinition def = new TimelineDefinition(TimelineType.HASHTAG);
|
||||
def.hashtagName = hashtag;
|
||||
return def;
|
||||
}
|
||||
@@ -58,11 +58,6 @@ public class TimelineDefinition {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public TimelineDefinition(TimelineType type, String title) {
|
||||
this.type = type;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getTitle(Context ctx) {
|
||||
return title != null ? title : getDefaultTitle(ctx);
|
||||
}
|
||||
@@ -142,7 +137,8 @@ public class TimelineDefinition {
|
||||
}
|
||||
|
||||
public TimelineDefinition copy() {
|
||||
TimelineDefinition def = new TimelineDefinition(type, title);
|
||||
TimelineDefinition def = new TimelineDefinition(type);
|
||||
def.title = title;
|
||||
def.listId = listId;
|
||||
def.listTitle = listTitle;
|
||||
def.hashtagName = hashtagName;
|
||||
@@ -222,7 +218,7 @@ public class TimelineDefinition {
|
||||
LOCAL(R.drawable.ic_fluent_people_community_24_regular, R.string.sk_timeline_local, true),
|
||||
FEDERATED(R.drawable.ic_fluent_earth_24_regular, R.string.sk_timeline_federated, true),
|
||||
POST_NOTIFICATIONS(R.drawable.ic_fluent_chat_24_regular, R.string.sk_timeline_posts, true),
|
||||
LIST(R.drawable.ic_fluent_people_list_24_regular, R.string.sk_list, true),
|
||||
LIST(R.drawable.ic_fluent_people_24_regular, R.string.sk_list, true),
|
||||
HASHTAG(R.drawable.ic_fluent_number_symbol_24_regular, R.string.sk_hashtag, true);
|
||||
|
||||
public final int iconRes, nameRes;
|
||||
|
||||
@@ -96,9 +96,10 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{
|
||||
|
||||
visibility.setImageResource(switch (s.visibility) {
|
||||
case PUBLIC -> R.drawable.ic_fluent_earth_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_people_community_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_lock_open_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_lock_closed_20_filled;
|
||||
case DIRECT -> R.drawable.ic_fluent_mention_20_regular;
|
||||
case LOCAL -> R.drawable.ic_fluent_eye_20_regular;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
||||
boost.setSelected(item.status.reblogged);
|
||||
favorite.setSelected(item.status.favourited);
|
||||
bookmark.setSelected(item.status.bookmarked);
|
||||
boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED
|
||||
boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED || item.status.visibility==StatusPrivacy.LOCAL
|
||||
|| (item.status.visibility==StatusPrivacy.PRIVATE && item.status.account.id.equals(AccountSessionManager.getInstance().getAccount(item.accountID).self.id)));
|
||||
}
|
||||
|
||||
@@ -239,8 +239,8 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
||||
|
||||
Drawable checkMark = ctx.getDrawable(R.drawable.ic_fluent_checkmark_circle_20_regular);
|
||||
Drawable publicDrawable = ctx.getDrawable(R.drawable.ic_fluent_earth_24_regular);
|
||||
Drawable unlistedDrawable = ctx.getDrawable(R.drawable.ic_fluent_people_community_24_regular);
|
||||
Drawable followersDrawable = ctx.getDrawable(R.drawable.ic_fluent_people_checkmark_24_regular);
|
||||
Drawable unlistedDrawable = ctx.getDrawable(R.drawable.ic_fluent_lock_open_24_regular);
|
||||
Drawable followersDrawable = ctx.getDrawable(R.drawable.ic_fluent_lock_closed_24_filled);
|
||||
|
||||
StatusPrivacy defaultVisibility = session.preferences != null ? session.preferences.postingDefaultVisibility : null;
|
||||
// e.g. post visibility is unlisted, but default is public
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.SubMenu;
|
||||
@@ -43,6 +42,7 @@ import org.joinmastodon.android.model.Notification;
|
||||
import org.joinmastodon.android.model.Relationship;
|
||||
import org.joinmastodon.android.model.ScheduledStatus;
|
||||
import org.joinmastodon.android.model.Status;
|
||||
import org.joinmastodon.android.model.StatusPrivacy;
|
||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||
import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
@@ -52,6 +52,7 @@ import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.FormatStyle;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@@ -318,12 +319,15 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
||||
}
|
||||
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
|
||||
if(TextUtils.isEmpty(item.extraText)){
|
||||
extraText.setVisibility(View.GONE);
|
||||
if (item.status != null) {
|
||||
UiUtils.setExtraTextInfo(item.parentFragment.getContext(), extraText, item.status.visibility, item.status.localOnly);
|
||||
}
|
||||
}else{
|
||||
extraText.setVisibility(View.VISIBLE);
|
||||
extraText.setText(item.extraText);
|
||||
}
|
||||
more.setVisibility(item.inset ? View.GONE : View.VISIBLE);
|
||||
more.setVisibility(item.inset || (item.notification != null && item.notification.report != null)
|
||||
? View.GONE : View.VISIBLE);
|
||||
avatar.setClickable(!item.inset);
|
||||
avatar.setContentDescription(item.parentFragment.getString(R.string.avatar_description, item.user.acct));
|
||||
if(currentRelationshipRequest!=null){
|
||||
@@ -351,6 +355,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
||||
public void onSuccess(Object o) {
|
||||
item.consumeReadAnnouncement.accept(item.announcement.id);
|
||||
item.announcement.read = true;
|
||||
if (item.parentFragment.getActivity() == null) return;
|
||||
rebind();
|
||||
}
|
||||
|
||||
@@ -423,6 +428,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
||||
}
|
||||
|
||||
private void updateOptionsMenu(){
|
||||
if (item.parentFragment.getActivity() == null) return;
|
||||
if (item.announcement != null) return;
|
||||
boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
|
||||
Menu menu=optionsMenu.getMenu();
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.ViewTreeObserver;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
@@ -37,12 +38,12 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
}
|
||||
|
||||
public static class Holder extends ImageStatusDisplayItem.Holder<PhotoStatusDisplayItem>{
|
||||
private final FrameLayout altTextWrapper, altTextOpen;
|
||||
private final FrameLayout altTextWrapper;
|
||||
private final TextView altTextButton;
|
||||
private final ImageView noAltTextButton;
|
||||
private final View altTextScroller;
|
||||
private final ImageButton altTextClose;
|
||||
private final TextView altText;
|
||||
private final TextView altText, noAltText;
|
||||
|
||||
private View altOrNoAltButton;
|
||||
private boolean altTextShown;
|
||||
@@ -51,13 +52,15 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
public Holder(Activity activity, ViewGroup parent){
|
||||
super(activity, R.layout.display_item_photo, parent);
|
||||
altTextWrapper=findViewById(R.id.alt_text_wrapper);
|
||||
altTextOpen=findViewById(R.id.alt_text_open);
|
||||
altTextButton=findViewById(R.id.alt_button);
|
||||
noAltTextButton=findViewById(R.id.no_alt_button);
|
||||
altTextScroller=findViewById(R.id.alt_text_scroller);
|
||||
altTextClose=findViewById(R.id.alt_text_close);
|
||||
altText=findViewById(R.id.alt_text);
|
||||
noAltText=findViewById(R.id.no_alt_text);
|
||||
|
||||
altTextButton.setOnClickListener(this::onShowHideClick);
|
||||
noAltTextButton.setOnClickListener(this::onShowHideClick);
|
||||
altTextClose.setOnClickListener(this::onShowHideClick);
|
||||
// altTextScroller.setNestedScrollingEnabled(true);
|
||||
}
|
||||
@@ -78,24 +81,25 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
altTextButton.setAlpha(1f);
|
||||
noAltTextButton.setAlpha(1f);
|
||||
altTextWrapper.setVisibility(View.VISIBLE);
|
||||
altTextOpen.setOnClickListener(this::onShowHideClick);
|
||||
|
||||
if (altTextMissing){
|
||||
if (GlobalUserPreferences.showNoAltIndicator) {
|
||||
noAltTextButton.setVisibility(View.VISIBLE);
|
||||
noAltText.setVisibility(View.VISIBLE);
|
||||
altTextWrapper.setBackgroundResource(R.drawable.bg_image_no_alt_overlay);
|
||||
altTextButton.setVisibility(View.GONE);
|
||||
altText.setText(R.string.sk_no_alt_text);
|
||||
altText.setPadding(V.dp(8), 0, 0, 0);
|
||||
altText.setVisibility(View.GONE);
|
||||
} else {
|
||||
altTextWrapper.setVisibility(View.GONE);
|
||||
}
|
||||
}else{
|
||||
if (GlobalUserPreferences.showAltIndicator) {
|
||||
noAltTextButton.setVisibility(View.GONE);
|
||||
noAltText.setVisibility(View.GONE);
|
||||
altTextWrapper.setBackgroundResource(R.drawable.bg_image_alt_overlay);
|
||||
altTextButton.setVisibility(View.VISIBLE);
|
||||
altTextButton.setText(R.string.sk_alt_button);
|
||||
altText.setVisibility(View.VISIBLE);
|
||||
altText.setText(item.attachment.description);
|
||||
altText.setPadding(0, 0, 0, 0);
|
||||
} else {
|
||||
@@ -105,9 +109,7 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
}
|
||||
|
||||
private void onShowHideClick(View v){
|
||||
boolean show=v.getId()==R.id.alt_text_open;
|
||||
|
||||
altTextOpen.setOnClickListener(show ? null : this::onShowHideClick);
|
||||
boolean show=v.getId()==R.id.alt_button || v.getId()==R.id.no_alt_button;
|
||||
|
||||
if(altTextShown==show)
|
||||
return;
|
||||
@@ -128,8 +130,7 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
// This is the current size...
|
||||
int prevLeft=altTextWrapper.getLeft();
|
||||
int prevRight=altTextWrapper.getRight();
|
||||
int prevBottom=altTextWrapper.getBottom();
|
||||
int prevTop=altTextOpen.getTop();
|
||||
int prevTop=altTextWrapper.getTop();
|
||||
altTextWrapper.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
|
||||
@Override
|
||||
public boolean onPreDraw(){
|
||||
@@ -146,8 +147,7 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
||||
set.playTogether(
|
||||
ObjectAnimator.ofInt(altTextWrapper, "left", prevLeft, altTextWrapper.getLeft()),
|
||||
ObjectAnimator.ofInt(altTextWrapper, "right", prevRight, altTextWrapper.getRight()),
|
||||
ObjectAnimator.ofInt(altTextWrapper, "bottom", prevBottom, altTextWrapper.getBottom()),
|
||||
ObjectAnimator.ofInt(altTextOpen, "top", prevTop, altTextOpen.getTop()),
|
||||
ObjectAnimator.ofInt(altTextWrapper, "top", prevTop, altTextWrapper.getTop()),
|
||||
ObjectAnimator.ofFloat(altOrNoAltButton, View.ALPHA, show ? 1f : 0f, show ? 0f : 1f),
|
||||
ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, show ? 0f : 1f, show ? 1f : 0f),
|
||||
ObjectAnimator.ofFloat(altTextClose, View.ALPHA, show ? 0f : 1f, show ? 1f : 0f)
|
||||
|
||||
@@ -39,10 +39,11 @@ public class PollFooterStatusDisplayItem extends StatusDisplayItem{
|
||||
@Override
|
||||
public void onBind(PollFooterStatusDisplayItem item){
|
||||
String text=item.parentFragment.getResources().getQuantityString(R.plurals.x_voters, item.poll.votersCount, item.poll.votersCount);
|
||||
String sep=item.parentFragment.getString(R.string.sk_separator);
|
||||
if(item.poll.expiresAt!=null && !item.poll.isExpired()){
|
||||
text+=" · "+UiUtils.formatTimeLeft(itemView.getContext(), item.poll.expiresAt);
|
||||
text+=" "+sep+" "+UiUtils.formatTimeLeft(itemView.getContext(), item.poll.expiresAt);
|
||||
}else if(item.poll.isExpired()){
|
||||
text+=" · "+item.parentFragment.getString(R.string.poll_closed);
|
||||
text+=" "+sep+" "+item.parentFragment.getString(R.string.poll_closed);
|
||||
}
|
||||
this.text.setText(text);
|
||||
button.setVisibility(item.poll.isExpired() || item.poll.voted || (!item.poll.multiple && !GlobalUserPreferences.voteButtonForSingleChoice) ? View.GONE : View.VISIBLE);
|
||||
|
||||
@@ -55,8 +55,8 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
||||
this.visibility = visibility;
|
||||
this.iconEnd = visibility != null ? switch (visibility) {
|
||||
case PUBLIC -> R.drawable.ic_fluent_earth_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_people_community_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_20_regular;
|
||||
case UNLISTED -> R.drawable.ic_fluent_lock_open_20_regular;
|
||||
case PRIVATE -> R.drawable.ic_fluent_lock_closed_20_filled;
|
||||
default -> 0;
|
||||
} : 0;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
|
||||
import org.joinmastodon.android.fragments.HomeTabFragment;
|
||||
import org.joinmastodon.android.fragments.HomeTimelineFragment;
|
||||
import org.joinmastodon.android.fragments.ListTimelineFragment;
|
||||
import org.joinmastodon.android.fragments.ProfileFragment;
|
||||
import org.joinmastodon.android.fragments.ThreadFragment;
|
||||
import org.joinmastodon.android.model.Account;
|
||||
@@ -105,8 +106,11 @@ public abstract class StatusDisplayItem{
|
||||
args.putParcelable("profileAccount", Parcels.wrap(account));
|
||||
Nav.go(fragment.getActivity(), ProfileFragment.class, args);
|
||||
}));
|
||||
} else if (!(status.tags.isEmpty() || fragment instanceof HashtagTimelineFragment) &&
|
||||
fragment.getParentFragment() instanceof HomeTabFragment home
|
||||
} else if (
|
||||
!(status.tags.isEmpty() ||
|
||||
fragment instanceof HashtagTimelineFragment ||
|
||||
fragment instanceof ListTimelineFragment
|
||||
) && fragment.getParentFragment() instanceof HomeTabFragment home
|
||||
) {
|
||||
home.getHashtags().stream()
|
||||
.filter(followed -> status.tags.stream()
|
||||
|
||||
@@ -141,8 +141,9 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
||||
}
|
||||
|
||||
Instance instanceInfo = AccountSessionManager.getInstance().getInstanceInfo(item.session.domain);
|
||||
boolean translateEnabled = !item.disableTranslate && instanceInfo.v2 != null &&
|
||||
instanceInfo.v2.configuration.translation != null && instanceInfo.v2.configuration.translation.enabled;
|
||||
boolean translateEnabled = !item.disableTranslate && instanceInfo != null &&
|
||||
instanceInfo.v2 != null && instanceInfo.v2.configuration.translation != null &&
|
||||
instanceInfo.v2.configuration.translation.enabled;
|
||||
|
||||
translateWrap.setVisibility(
|
||||
(!GlobalUserPreferences.translateButtonOpenedOnly || item.textSelectable) &&
|
||||
@@ -163,6 +164,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
||||
public void onSuccess(TranslatedStatus translatedStatus) {
|
||||
item.translation = translatedStatus;
|
||||
item.translated = true;
|
||||
if (item.parentFragment.getActivity() == null) return;
|
||||
translateProgress.setVisibility(View.GONE);
|
||||
translateButton.setClickable(true);
|
||||
translateButton.animate().alpha(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(50).start();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,116 @@
|
||||
package org.joinmastodon.android.utils;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.view.View;
|
||||
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
||||
import me.grishka.appkit.utils.V;
|
||||
import me.grishka.appkit.views.FragmentRootLinearLayout;
|
||||
|
||||
public class ElevationOnScrollListener extends RecyclerView.OnScrollListener implements View.OnScrollChangeListener{
|
||||
private boolean isAtTop;
|
||||
private Animator currentPanelsAnim;
|
||||
private View[] views;
|
||||
private FragmentRootLinearLayout fragmentRootLayout;
|
||||
|
||||
public ElevationOnScrollListener(FragmentRootLinearLayout fragmentRootLayout, View... views){
|
||||
isAtTop=true;
|
||||
this.fragmentRootLayout=fragmentRootLayout;
|
||||
this.views=views;
|
||||
for(View v:views){
|
||||
Drawable bg=v.getBackground().mutate();
|
||||
v.setBackground(bg);
|
||||
if(bg instanceof LayerDrawable ld){
|
||||
Drawable overlay=ld.findDrawableByLayerId(R.id.color_overlay);
|
||||
if(overlay!=null){
|
||||
overlay.setAlpha(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setViews(View... views){
|
||||
List<View> oldViews=Arrays.asList(this.views);
|
||||
this.views=views;
|
||||
for(View v:views){
|
||||
if(oldViews.contains(v))
|
||||
continue;
|
||||
Drawable bg=v.getBackground().mutate();
|
||||
v.setBackground(bg);
|
||||
if(bg instanceof LayerDrawable ld){
|
||||
Drawable overlay=ld.findDrawableByLayerId(R.id.color_overlay);
|
||||
if(overlay!=null){
|
||||
overlay.setAlpha(isAtTop ? 0 : 20);
|
||||
}
|
||||
}
|
||||
v.setTranslationZ(isAtTop ? 0 : V.dp(3));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){
|
||||
boolean newAtTop=recyclerView.getChildCount()==0 || (recyclerView.getChildAdapterPosition(recyclerView.getChildAt(0))==0 && recyclerView.getChildAt(0).getTop()==recyclerView.getPaddingTop());
|
||||
handleScroll(recyclerView.getContext(), newAtTop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY){
|
||||
handleScroll(v.getContext(), scrollY==0);
|
||||
}
|
||||
|
||||
private void handleScroll(Context context, boolean newAtTop){
|
||||
if(newAtTop!=isAtTop){
|
||||
isAtTop=newAtTop;
|
||||
if(currentPanelsAnim!=null)
|
||||
currentPanelsAnim.cancel();
|
||||
|
||||
AnimatorSet set=new AnimatorSet();
|
||||
ArrayList<Animator> anims=new ArrayList<>();
|
||||
for(View v:views){
|
||||
if(v.getBackground() instanceof LayerDrawable ld){
|
||||
Drawable overlay=ld.findDrawableByLayerId(R.id.color_overlay);
|
||||
if(overlay!=null){
|
||||
anims.add(ObjectAnimator.ofInt(overlay, "alpha", isAtTop ? 0 : 20));
|
||||
}
|
||||
}
|
||||
anims.add(ObjectAnimator.ofFloat(v, View.TRANSLATION_Z, isAtTop ? 0 : V.dp(3)));
|
||||
}
|
||||
if(fragmentRootLayout!=null){
|
||||
int color;
|
||||
if(isAtTop){
|
||||
color=UiUtils.getThemeColor(context, R.attr.toolbarBackground);
|
||||
}else{
|
||||
color=UiUtils.alphaBlendColors(UiUtils.getThemeColor(context, R.attr.toolbarBackground), UiUtils.getThemeColor(context, R.attr.colorWindowBackground), 0.07843137f);
|
||||
}
|
||||
anims.add(ObjectAnimator.ofArgb(fragmentRootLayout, "statusBarColor", color));
|
||||
}
|
||||
set.playTogether(anims);
|
||||
set.setDuration(150);
|
||||
set.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||
set.addListener(new AnimatorListenerAdapter(){
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation){
|
||||
currentPanelsAnim=null;
|
||||
}
|
||||
});
|
||||
set.start();
|
||||
currentPanelsAnim=set;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#E894000C"/>
|
||||
<corners android:radius="24dp"/>
|
||||
<solid android:color="#D49E050A"/>
|
||||
<corners android:radius="20dp"/>
|
||||
</shape>
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<color android:color="?colorM3Background"/>
|
||||
<color android:color="?colorWindowBackground"/>
|
||||
</item>
|
||||
<item android:id="@+id/color_overlay">
|
||||
<color android:color="?colorM3Primary"/>
|
||||
<color android:color="?toolbarBackground"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M16.25 5.18c-0.25 0.33-0.187 0.8 0.142 1.051C18.18 7.595 19.25 9.708 19.25 12c0 3.736-2.826 6.812-6.457 7.207l0.677-0.677c0.293-0.293 0.293-0.767 0-1.06-0.267-0.267-0.683-0.29-0.977-0.073L12.41 17.47l-2 2c-0.266 0.266-0.29 0.683-0.073 0.976l0.073 0.084 2 2c0.293 0.293 0.768 0.293 1.06 0 0.267-0.266 0.291-0.683 0.073-0.976L13.47 21.47l-0.75-0.75c4.495-0.365 8.03-4.13 8.03-8.72 0-2.765-1.292-5.317-3.448-6.961-0.33-0.252-0.8-0.188-1.051 0.141zm-5.72-3.71c-0.293 0.293-0.293 0.767 0 1.06l0.75 0.75C6.784 3.645 3.25 7.41 3.25 12c0 2.645 1.181 5.097 3.18 6.75 0.32 0.263 0.793 0.218 1.057-0.102 0.263-0.319 0.218-0.792-0.1-1.055-1.66-1.37-2.637-3.4-2.637-5.593 0-3.736 2.825-6.811 6.456-7.207L10.53 5.47c-0.293 0.293-0.293 0.767 0 1.06 0.293 0.293 0.768 0.293 1.061 0l2-2c0.293-0.293 0.293-0.767 0-1.06l-2-2c-0.293-0.293-0.768-0.293-1.06 0z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
|
||||
<path android:pathData="M3.26 11.602C3.942 8.327 6.793 6 10 6c3.206 0 6.057 2.327 6.74 5.602 0.057 0.27 0.322 0.444 0.593 0.387 0.27-0.056 0.443-0.32 0.387-0.591C16.943 7.673 13.693 5 10 5c-3.693 0-6.943 2.673-7.72 6.398-0.056 0.27 0.117 0.535 0.388 0.591 0.27 0.057 0.535-0.117 0.591-0.387zM10 8c-1.933 0-3.5 1.567-3.5 3.5S8.067 15 10 15s3.5-1.567 3.5-3.5S11.933 8 10 8zm-2.5 3.5C7.5 10.12 8.62 9 10 9s2.5 1.12 2.5 2.5S11.38 14 10 14s-2.5-1.12-2.5-2.5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M2.75 18h12.5c0.414 0 0.75 0.335 0.75 0.75 0 0.38-0.282 0.693-0.648 0.743L15.25 19.5H2.75C2.336 19.5 2 19.164 2 18.75c0-0.38 0.282-0.694 0.648-0.744L2.75 18h12.5-12.5zm0-6.5h18.5c0.414 0 0.75 0.335 0.75 0.75 0 0.38-0.282 0.693-0.648 0.743L21.25 13H2.75C2.336 13 2 12.664 2 12.25c0-0.38 0.282-0.694 0.648-0.743L2.75 11.5h18.5-18.5zm0-6.497h15.5c0.414 0 0.75 0.336 0.75 0.75 0 0.38-0.282 0.693-0.648 0.743L18.25 6.503H2.75C2.336 6.503 2 6.167 2 5.753c0-0.38 0.282-0.694 0.648-0.743L2.75 5.003h15.5-15.5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
|
||||
<path android:pathData="M16.25 21c0.414 0 0.75 0.336 0.75 0.75s-0.336 0.75-0.75 0.75H3.75C3.336 22.5 3 22.164 3 21.75S3.336 21 3.75 21h12.5zm7.998-7.502c0.415 0 0.75 0.336 0.75 0.75s-0.335 0.75-0.75 0.75h-20.5c-0.414 0-0.75-0.336-0.75-0.75s0.336-0.75 0.75-0.75h20.5zM20.25 6C20.664 6 21 6.336 21 6.75S20.664 7.5 20.25 7.5H3.75C3.336 7.5 3 7.164 3 6.75S3.336 6 3.75 6h16.5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
|
||||
<path android:pathData="M10 2c1.657 0 3 1.343 3 3v1h1c1.105 0 2 0.895 2 2v7c0 1.105-0.895 2-2 2H6c-1.105 0-2-0.895-2-2V8c0-1.105 0.895-2 2-2h1V5c0-1.657 1.343-3 3-3zm4 5H6C5.448 7 5 7.448 5 8v7c0 0.552 0.448 1 1 1h8c0.552 0 1-0.448 1-1V8c0-0.552-0.448-1-1-1zm-4 3.5c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1zM10 3C8.895 3 8 3.895 8 5v1h4V5c0-1.105-0.895-2-2-2z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M12 2c2.21 0 4 1.79 4 4v2h2.5C19.328 8 20 8.672 20 9.5v11c0 0.828-0.672 1.5-1.5 1.5h-13C4.672 22 4 21.328 4 20.5v-11C4 8.672 4.672 8 5.5 8H8V6c0-2.21 1.79-4 4-4zm0 11.5c-0.828 0-1.5 0.672-1.5 1.5s0.672 1.5 1.5 1.5c0.829 0 1.5-0.672 1.5-1.5s-0.671-1.5-1.5-1.5zM12 4c-1.105 0-2 0.895-2 2v2h4V6c0-1.105-0.895-2-2-2z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M12 2c2.21 0 4 1.79 4 4v2h1.75C18.993 8 20 9.007 20 10.25v9.5c0 1.243-1.007 2.25-2.25 2.25H6.25C5.007 22 4 20.993 4 19.75v-9.5C4 9.007 5.007 8 6.25 8H8V6c0-2.21 1.79-4 4-4zm5.75 7.5H6.25c-0.414 0-0.75 0.336-0.75 0.75v9.5c0 0.414 0.336 0.75 0.75 0.75h11.5c0.414 0 0.75-0.336 0.75-0.75v-9.5c0-0.414-0.336-0.75-0.75-0.75zm-5.75 4c0.829 0 1.5 0.672 1.5 1.5s-0.671 1.5-1.5 1.5c-0.828 0-1.5-0.672-1.5-1.5s0.672-1.5 1.5-1.5zm0-10c-1.38 0-2.5 1.12-2.5 2.5v2h5V6c0-1.38-1.12-2.5-2.5-2.5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
|
||||
<path android:pathData="M9.997 2c1.44 0 2.666 1.01 2.944 2.402 0.054 0.27-0.122 0.534-0.392 0.588-0.271 0.054-0.534-0.121-0.588-0.392C11.775 3.673 10.958 3 9.996 3 8.941 3 8.076 3.817 8 4.853l-0.006 0.15V7H14c1.105 0 2 0.895 2 2v7c0 1.105-0.895 2-2 2H6c-1.105 0-2-0.895-2-2V9c0-1.105 0.895-2 2-2h0.995V5.002C6.995 3.344 8.339 2 9.997 2zM14 8H6C5.448 8 5 8.448 5 9v7c0 0.552 0.448 1 1 1h8c0.552 0 1-0.448 1-1V9c0-0.552-0.448-1-1-1zm-4 3.5c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M12 2.004c1.875 0 3.334 1.206 3.928 3.003 0.13 0.393-0.084 0.817-0.477 0.947-0.394 0.13-0.818-0.083-0.948-0.477C14.102 4.262 13.185 3.504 12 3.504c-1.407 0-2.42 0.958-2.496 2.551L9.499 6.25v1.749h8.251c1.19 0 2.166 0.926 2.245 2.097L20 10.25v9.496c0 1.19-0.925 2.166-2.096 2.245l-0.154 0.005H6.25c-1.19 0-2.166-0.925-2.245-2.096L4 19.746V10.25c0-1.191 0.925-2.166 2.096-2.245L6.25 8l1.749-0.001v-1.75C8 3.712 9.71 2.005 12 2.005zM17.75 9.5H6.25c-0.38 0-0.694 0.282-0.743 0.648L5.5 10.25v9.496c0 0.38 0.282 0.693 0.648 0.743l0.102 0.007h11.5c0.38 0 0.694-0.282 0.743-0.648l0.007-0.102V10.25c0-0.38-0.282-0.694-0.648-0.743L17.75 9.5zm-5.75 4c0.828 0 1.499 0.67 1.499 1.498 0 0.827-0.671 1.498-1.499 1.498-0.828 0-1.499-0.67-1.499-1.498s0.671-1.499 1.499-1.499z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
|
||||
<path android:pathData="M9.5 5C7.015 5 5 7.015 5 9.5S7.015 14 9.5 14 14 11.985 14 9.5 11.985 5 9.5 5zm-3 4.5c0-1.657 1.343-3 3-3s3 1.343 3 3-1.343 3-3 3-3-1.343-3-3zM20 7c-1.933 0-3.5 1.567-3.5 3.5S18.067 14 20 14s3.5-1.567 3.5-3.5S21.933 7 20 7zm-2 3.5c0-1.105 0.895-2 2-2s2 0.895 2 2-0.895 2-2 2-2-0.895-2-2zM2 18.25C2 17.007 3.007 16 4.25 16h10.5c1.243 0 2.25 1.007 2.25 2.25v0.531l-0.003 0.057c-0.002 0.046-0.006 0.109-0.014 0.185-0.017 0.153-0.049 0.363-0.11 0.612-0.125 0.497-0.373 1.156-0.867 1.815C14.992 22.803 13.058 24 9.5 24c-3.558 0-5.492-1.197-6.506-2.55-0.495-0.659-0.742-1.318-0.866-1.815-0.062-0.249-0.094-0.459-0.11-0.612-0.009-0.076-0.013-0.139-0.015-0.185L2 18.781V18.25zm1.5 0.495v0.018l0.009 0.1c0.01 0.094 0.03 0.235 0.074 0.408 0.087 0.347 0.261 0.813 0.61 1.279 0.674 0.897 2.115 1.95 5.307 1.95s4.633-1.053 5.306-1.95c0.35-0.466 0.524-0.932 0.61-1.279 0.044-0.173 0.065-0.314 0.075-0.408 0.005-0.046 0.007-0.08 0.008-0.1l0.001-0.018V18.25c0-0.414-0.336-0.75-0.75-0.75H4.25c-0.414 0-0.75 0.336-0.75 0.75v0.495zm13.6 2.875c0.773 0.237 1.727 0.38 2.898 0.38 2.77 0 4.318-0.796 5.159-1.756 0.411-0.47 0.622-0.947 0.73-1.315 0.053-0.184 0.08-0.34 0.096-0.457 0.007-0.059 0.01-0.107 0.013-0.145l0.002-0.047v-0.03c0-1.243-1.007-2.25-2.25-2.25h-6.654c0.394 0.411 0.682 0.926 0.818 1.5h5.837c0.41 0 0.745 0.33 0.75 0.74l-0.005 0.046c-0.006 0.047-0.019 0.125-0.047 0.223-0.057 0.194-0.174 0.468-0.42 0.747-0.471 0.54-1.547 1.244-4.029 1.244-0.941 0-1.68-0.101-2.261-0.257-0.132 0.414-0.333 0.89-0.637 1.377z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M17.5 12c3.038 0 5.5 2.463 5.5 5.5 0 3.038-2.462 5.5-5.5 5.5-3.037 0-5.5-2.462-5.5-5.5 0-3.037 2.463-5.5 5.5-5.5zm-5.477 2C11.376 15.01 11 16.21 11 17.5c0 1.63 0.6 3.12 1.592 4.262-0.795 0.16-1.66 0.24-2.592 0.24-3.42 0-5.944-1.073-7.486-3.237-0.332-0.466-0.51-1.024-0.51-1.596v-0.92C2.004 15.007 3.01 14 4.253 14h7.77zm2.83 3.147c-0.194-0.196-0.51-0.196-0.706 0-0.196 0.195-0.196 0.512 0 0.707l2 2c0.195 0.195 0.512 0.195 0.707 0l4-4c0.195-0.195 0.195-0.512 0-0.707-0.195-0.196-0.512-0.196-0.707 0L16.5 18.793l-1.646-1.646zM10 2.005c2.762 0 5 2.239 5 5s-2.238 5-5 5c-2.761 0-5-2.239-5-5s2.239-5 5-5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||
<path android:pathData="M10.03 3.659c0.856-1.548 3.081-1.548 3.937 0l7.746 14.001c0.83 1.5-0.255 3.34-1.969 3.34H4.254c-1.715 0-2.8-1.84-1.97-3.34l7.746-14zM12.997 17c0-0.552-0.447-0.999-0.998-0.999C11.447 16.001 11 16.448 11 17s0.447 1 0.999 1c0.551 0 0.998-0.448 0.998-1zm-0.259-7.853C12.688 8.782 12.374 8.5 11.995 8.5c-0.415 0-0.75 0.336-0.75 0.75l0.004 4.502 0.007 0.102c0.05 0.366 0.364 0.648 0.743 0.648 0.415 0 0.75-0.337 0.75-0.751l-0.004-4.502-0.007-0.101z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||
</vector>
|
||||
@@ -1,27 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="134dp"
|
||||
android:height="34dp"
|
||||
android:viewportWidth="313"
|
||||
android:viewportHeight="81">
|
||||
<path
|
||||
android:pathData="M72.95,18.45C71.82,9.95 64.5,3.24 55.85,1.95C54.38,1.73 48.85,0.93 36.02,0.93H35.92C23.09,0.93 20.34,1.73 18.87,1.95C10.44,3.22 2.76,9.23 0.88,17.84C-0,22.08 -0.1,26.78 0.07,31.09C0.31,37.27 0.36,43.43 0.91,49.6C1.29,53.69 1.95,57.74 2.9,61.73C4.68,69.11 11.86,75.25 18.9,77.75C26.43,80.35 34.53,80.79 42.29,79C43.14,78.79 43.98,78.56 44.82,78.29C46.71,77.68 48.92,77 50.55,75.81C50.57,75.8 50.59,75.77 50.6,75.75C50.61,75.72 50.62,75.7 50.62,75.66V69.7C50.62,69.7 50.62,69.65 50.6,69.62C50.6,69.6 50.57,69.58 50.55,69.56C50.53,69.55 50.5,69.54 50.48,69.53C50.45,69.53 50.43,69.53 50.41,69.53C45.43,70.73 40.33,71.34 35.23,71.33C26.43,71.33 24.06,67.09 23.39,65.34C22.85,63.82 22.5,62.22 22.36,60.61C22.36,60.59 22.36,60.57 22.37,60.54C22.37,60.52 22.39,60.49 22.42,60.48C22.44,60.47 22.46,60.46 22.49,60.44H22.57C27.46,61.64 32.48,62.25 37.51,62.25C38.72,62.25 39.92,62.25 41.14,62.21C46.19,62.06 51.52,61.81 56.51,60.82C56.63,60.8 56.76,60.77 56.87,60.75C64.72,59.21 72.19,54.42 72.95,42.27C72.97,41.79 73.04,37.25 73.04,36.76C73.04,35.07 73.58,24.79 72.96,18.48L72.95,18.45Z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:startX="36.62"
|
||||
android:startY="0.93"
|
||||
android:endX="36.62"
|
||||
android:endY="80.07"
|
||||
android:type="linear">
|
||||
<item android:offset="0" android:color="#FF6364FF"/>
|
||||
<item android:offset="1" android:color="#FF563ACC"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:pathData="M14.81,23.2C14.81,20.72 16.77,18.72 19.2,18.72C21.62,18.72 23.58,20.73 23.58,23.2C23.58,25.67 21.62,27.68 19.2,27.68C16.77,27.68 14.81,25.67 14.81,23.2Z"
|
||||
android:fillColor="#000"/>
|
||||
<path
|
||||
android:pathData="M80.02,27.06V47.66H72.03V27.67C72.03,23.45 70.3,21.32 66.83,21.32C63,21.32 61.07,23.87 61.07,28.87V39.82H53.14V28.87C53.14,23.84 51.24,21.32 47.38,21.32C43.92,21.32 42.18,23.45 42.18,27.67V47.65H34.21V27.06C34.21,22.86 35.25,19.51 37.35,17.03C39.53,14.54 42.37,13.29 45.89,13.29C49.97,13.29 53.07,14.9 55.11,18.11L57.11,21.52L59.1,18.11C61.14,14.91 64.23,13.29 68.32,13.29C71.84,13.29 74.69,14.55 76.86,17.03C78.96,19.51 80.01,22.83 80.01,27.06H80.02ZM107.49,37.3C109.15,35.51 109.93,33.29 109.93,30.59C109.93,27.89 109.14,25.65 107.49,23.94C105.91,22.15 103.89,21.3 101.45,21.3C99.02,21.3 97.01,22.15 95.41,23.94C93.83,25.65 93.04,27.89 93.04,30.59C93.04,33.29 93.83,35.53 95.41,37.3C97,39 99.02,39.87 101.45,39.87C103.89,39.87 105.9,39.02 107.49,37.3ZM109.93,14.12H117.8V47.06H109.93V43.18C107.55,46.41 104.26,48 99.99,48C95.71,48 92.42,46.36 89.5,43C86.64,39.64 85.18,35.48 85.18,30.61C85.18,25.74 86.65,21.65 89.5,18.29C92.43,14.93 95.92,13.23 99.99,13.23C104.06,13.23 107.55,14.81 109.93,18.02V14.14V14.12ZM144.26,29.97C146.58,31.76 147.73,34.25 147.67,37.41C147.67,40.77 146.52,43.41 144.14,45.24C141.76,47.03 138.89,47.94 135.41,47.94C129.13,47.94 124.87,45.3 122.61,40.11L129.43,35.96C130.34,38.78 132.35,40.25 135.41,40.25C138.22,40.25 139.62,39.33 139.62,37.42C139.62,36.03 137.79,34.78 134.07,33.8C132.66,33.41 131.5,33.01 130.6,32.68C129.31,32.16 128.22,31.56 127.31,30.83C125.05,29.04 123.9,26.68 123.9,23.65C123.9,20.42 124.99,17.85 127.19,16C129.45,14.09 132.19,13.18 135.48,13.18C140.73,13.18 144.56,15.48 147.07,20.16L140.37,24.1C139.4,21.86 137.74,20.74 135.48,20.74C133.11,20.74 131.95,21.65 131.95,23.44C131.95,24.83 133.78,26.08 137.5,27.06C140.37,27.72 142.63,28.7 144.26,29.97H144.27H144.26ZM169.26,22.27H162.37V35.98C162.37,37.63 162.98,38.63 164.15,39.08C165,39.4 166.71,39.47 169.27,39.34V47.05C163.98,47.71 160.14,47.17 157.88,45.41C155.62,43.7 154.53,40.53 154.53,36V22.27H149.23V14.1H154.53V7.46L162.39,4.89V14.12H169.29V22.29H169.27L169.26,22.27ZM194.34,37.1C195.92,35.4 196.71,33.22 196.71,30.58C196.71,27.94 195.92,25.78 194.34,24.05C192.74,22.35 190.79,21.48 188.42,21.48C186.04,21.48 184.09,22.33 182.49,24.05C180.97,25.84 180.18,28 180.18,30.58C180.18,33.16 180.97,35.31 182.49,37.1C184.08,38.81 186.04,39.67 188.42,39.67C190.79,39.67 192.74,38.82 194.34,37.1ZM176.96,42.96C173.85,39.6 172.32,35.52 172.32,30.58C172.32,25.63 173.85,21.62 176.96,18.26C180.07,14.9 183.91,13.19 188.42,13.19C192.92,13.19 196.77,14.9 199.87,18.26C202.97,21.62 204.57,25.77 204.57,30.58C204.57,35.39 202.97,39.6 199.87,42.96C196.76,46.32 192.98,47.96 188.42,47.96C183.85,47.96 180.06,46.32 176.96,42.96ZM230.86,37.29C232.45,35.5 233.24,33.28 233.24,30.58C233.24,27.87 232.45,25.63 230.86,23.93C229.28,22.14 227.26,21.29 224.82,21.29C222.39,21.29 220.37,22.14 218.73,23.93C217.14,25.63 216.35,27.87 216.35,30.58C216.35,33.28 217.14,35.52 218.73,37.29C220.38,38.99 222.45,39.86 224.82,39.86C227.2,39.86 229.27,39 230.86,37.29ZM233.24,0.92H241.11V47.05H233.24V43.17C230.93,46.39 227.63,47.99 223.36,47.99C219.09,47.99 215.75,46.35 212.8,42.98C209.93,39.62 208.48,35.47 208.48,30.6C208.48,25.73 209.95,21.64 212.8,18.28C215.72,14.92 219.26,13.22 223.36,13.22C227.45,13.22 230.93,14.8 233.24,18.01V0.93V0.92ZM268.74,37.07C270.32,35.36 271.12,33.18 271.12,30.54C271.12,27.9 270.32,25.74 268.74,24.01C267.15,22.31 265.21,21.45 262.82,21.45C260.43,21.45 258.5,22.3 256.9,24.01C255.37,25.8 254.58,27.96 254.58,30.54C254.58,33.12 255.37,35.28 256.9,37.07C258.48,38.77 260.44,39.64 262.82,39.64C265.2,39.64 267.14,38.78 268.74,37.07ZM251.36,42.92C248.26,39.56 246.73,35.48 246.73,30.54C246.73,25.6 248.25,21.58 251.36,18.22C254.47,14.86 258.32,13.15 262.82,13.15C267.32,13.15 271.18,14.86 274.27,18.22C277.38,21.58 278.97,25.73 278.97,30.54C278.97,35.35 277.38,39.56 274.27,42.92C271.16,46.28 267.38,47.93 262.82,47.93C258.26,47.93 254.46,46.28 251.36,42.92ZM313,26.78V47.01H305.14V27.84C305.14,25.66 304.59,24.01 303.48,22.77C302.45,21.65 300.98,21.07 299.09,21.07C294.65,21.07 292.39,23.77 292.39,29.24V47.03H284.53V14.1H292.39V17.81C294.28,14.71 297.28,13.19 301.47,13.19C304.82,13.19 307.57,14.37 309.71,16.81C311.91,19.24 313,22.54 313,26.82"
|
||||
android:fillColor="#000"/>
|
||||
</vector>
|
||||
@@ -3,23 +3,16 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingLeft="16dp">
|
||||
android:paddingTop="11dp"
|
||||
android:paddingEnd="4dp"
|
||||
android:paddingStart="16dp">
|
||||
|
||||
<!--
|
||||
okay look, i know marginEnd = -9.9dp looks silly, but i was trying *really* hard to align this
|
||||
more button to the overflow button in the action bar and -9.9 was the best i could come up with
|
||||
after trying for way too long
|
||||
-->
|
||||
<ImageView
|
||||
android:id="@+id/more"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginTop="-6dp"
|
||||
android:layout_marginEnd="-9.9dp"
|
||||
android:background="?android:actionBarItemBackground"
|
||||
android:contentDescription="@string/more_options"
|
||||
android:scaleType="center"
|
||||
@@ -30,7 +23,6 @@
|
||||
android:id="@+id/delete_notification"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_marginTop="-6dp"
|
||||
android:layout_toStartOf="@id/more"
|
||||
android:visibility="gone"
|
||||
android:background="?android:actionBarItemBackground"
|
||||
@@ -43,7 +35,6 @@
|
||||
android:id="@+id/visibility"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_marginTop="-6dp"
|
||||
android:layout_toStartOf="@id/delete_notification"
|
||||
android:background="?android:actionBarItemBackground"
|
||||
android:scaleType="center"
|
||||
@@ -54,7 +45,6 @@
|
||||
android:id="@+id/unread_indicator"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:layout_marginTop="-6dp"
|
||||
android:layout_toStartOf="@id/visibility"
|
||||
android:visibility="gone"
|
||||
android:tint="?android:colorAccent"
|
||||
@@ -67,14 +57,15 @@
|
||||
android:layout_height="46sp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginEnd="12dp" />
|
||||
android:layout_marginEnd="12dp"
|
||||
android:layout_marginTop="5dp" />
|
||||
|
||||
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
||||
android:id="@+id/name_wrap"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="12dp"
|
||||
android:layout_marginTop="2sp"
|
||||
android:layout_marginTop="7dp"
|
||||
android:layout_toStartOf="@id/unread_indicator"
|
||||
android:layout_toEndOf="@id/avatar"
|
||||
android:minHeight="24sp">
|
||||
@@ -93,7 +84,7 @@
|
||||
android:id="@+id/extra_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginStart="8sp"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
@@ -130,7 +121,7 @@
|
||||
android:layout_marginLeft="4sp"
|
||||
android:layout_marginRight="4sp"
|
||||
android:importantForAccessibility="no"
|
||||
android:text="·"
|
||||
android:text="@string/sk_separator"
|
||||
android:textAppearance="@style/m3_title_small" />
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -13,76 +13,79 @@
|
||||
|
||||
<!-- This is hidden from screenreaders because that same alt text is set as content description on the ImageView -->
|
||||
<FrameLayout
|
||||
android:id="@+id/alt_text_open"
|
||||
android:id="@+id/alt_text_wrapper"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|bottom"
|
||||
android:padding="12dp">
|
||||
android:layout_margin="12dp"
|
||||
android:importantForAccessibility="noHideDescendants"
|
||||
android:background="@drawable/bg_image_alt_overlay">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/alt_text_wrapper"
|
||||
<ImageView
|
||||
android:id="@+id/no_alt_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|bottom"
|
||||
android:importantForAccessibility="noHideDescendants"
|
||||
android:background="@drawable/bg_image_alt_overlay">
|
||||
android:padding="4dp"
|
||||
android:src="@drawable/ic_fluent_important_20_filled"
|
||||
android:tint="?colorGray25" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/alt_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/m3_label_large"
|
||||
android:textColor="?colorGray25"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:paddingVertical="1dp"
|
||||
android:text="@string/sk_alt_button"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/no_alt_button"
|
||||
<ImageButton
|
||||
android:id="@+id/alt_text_close"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="end|top"
|
||||
android:src="@drawable/ic_baseline_close_24"
|
||||
android:tint="#FFF"
|
||||
android:background="?android:actionBarItemBackground"/>
|
||||
|
||||
<org.joinmastodon.android.ui.views.NestableScrollView
|
||||
android:id="@+id/alt_text_scroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="40dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="4dp"
|
||||
android:src="@drawable/ic_fluent_important_20_filled"
|
||||
android:tint="@color/gray_25" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/alt_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/m3_label_large"
|
||||
android:textColor="@color/gray_25"
|
||||
android:gravity="center"
|
||||
android:includeFontPadding="false"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:paddingVertical="1dp"
|
||||
android:text="@string/sk_alt_button"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/alt_text_close"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="end|top"
|
||||
android:src="@drawable/ic_baseline_close_24"
|
||||
android:tint="#FFF"
|
||||
android:background="?android:actionBarItemBackground"/>
|
||||
|
||||
<org.joinmastodon.android.ui.views.NestableScrollView
|
||||
android:id="@+id/alt_text_scroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="40dp">
|
||||
|
||||
<LinearLayout
|
||||
<TextView
|
||||
android:id="@+id/alt_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:layout_margin="8dp"
|
||||
android:textAppearance="@style/m3_body_medium"
|
||||
android:textColor="?colorGray25"
|
||||
tools:text="Alt text goes here"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/alt_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:textAppearance="@style/m3_body_medium"
|
||||
android:textColor="#FFF"
|
||||
tools:text="Alt text goes here"/>
|
||||
<TextView
|
||||
android:id="@+id/no_alt_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="14dp"
|
||||
android:textAppearance="@style/m3_label_large"
|
||||
android:textColor="?colorGray25"
|
||||
android:text="@string/sk_no_alt_text"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</org.joinmastodon.android.ui.views.NestableScrollView>
|
||||
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</org.joinmastodon.android.ui.views.NestableScrollView>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</org.joinmastodon.android.ui.views.ImageAttachmentFrameLayout>
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/self_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/self_avatar"
|
||||
android:layout_marginTop="2sp"
|
||||
@@ -97,6 +97,20 @@
|
||||
android:textAppearance="@style/m3_title_medium"
|
||||
tools:text="Eugen" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/self_extra_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2sp"
|
||||
android:layout_marginStart="8sp"
|
||||
android:layout_toEndOf="@id/self_name"
|
||||
android:ellipsize="end"
|
||||
android:fontFamily="sans-serif"
|
||||
android:singleLine="true"
|
||||
android:textAlignment="viewStart"
|
||||
android:textAppearance="@style/m3_title_medium"
|
||||
tools:text="@string/sk_local_only" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/self_username"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -58,13 +58,14 @@
|
||||
android:id="@+id/btn_resend"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="36dp"
|
||||
android:text="@string/resend"
|
||||
android:paddingTop="0dp"
|
||||
android:paddingBottom="0dp"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingRight="12dp"
|
||||
android:fontFeatureSettings="'tnum'"
|
||||
style="@style/Widget.Mastodon.M3.Button.Text"/>
|
||||
style="@style/Widget.Mastodon.M3.Button.Filled"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -135,6 +135,16 @@
|
||||
android:textColor="?colorM3OnSurfaceVariant"
|
||||
android:text="@string/signup_random_server_explain"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_random_instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginTop="8dp"
|
||||
style="@style/Widget.Mastodon.M3.Button.Text"
|
||||
android:text="@string/pick_server_for_me"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_next"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<me.grishka.appkit.views.FragmentRootLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
@@ -11,10 +11,22 @@
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<LinearLayout
|
||||
android:background="@drawable/bg_onboarding_panel"
|
||||
android:id="@+id/button_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:visibility="gone"
|
||||
android:orientation="vertical">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_back"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginTop="8dp"
|
||||
style="@style/Widget.Mastodon.M3.Button.Text"
|
||||
android:text="@string/server_rules_disagree"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_next"
|
||||
@@ -31,4 +43,4 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</me.grishka.appkit.views.FragmentRootLinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -31,6 +31,7 @@
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:paddingHorizontal="8dp"
|
||||
android:paddingVertical="8dp"
|
||||
android:gravity="center_vertical"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
android:drawablePadding="16dp"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:text="@string/sk_visibility_unlisted"
|
||||
android:drawableStart="@drawable/ic_fluent_people_community_24_regular" />
|
||||
android:drawableStart="@drawable/ic_fluent_lock_open_24_regular" />
|
||||
<TextView
|
||||
android:id="@+id/vis_followers"
|
||||
android:layout_width="match_parent"
|
||||
@@ -71,7 +71,7 @@
|
||||
android:drawablePadding="16dp"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:text="@string/visibility_followers_only"
|
||||
android:drawableStart="@drawable/ic_fluent_people_checkmark_24_regular" />
|
||||
android:drawableStart="@drawable/ic_fluent_lock_closed_24_regular" />
|
||||
<View
|
||||
android:id="@+id/separator"
|
||||
android:layout_height="1dp"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:id="@+id/radiobtn"
|
||||
android:layout_width="28dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginEnd="14dp"
|
||||
android:layout_marginStart="-3dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentStart="true"
|
||||
@@ -21,21 +21,11 @@
|
||||
android:focusable="false"
|
||||
android:clickable="false"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_toEndOf="@id/radiobtn"
|
||||
android:scaleType="centerCrop"
|
||||
tools:src="#0f0"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/image"
|
||||
android:layout_toEndOf="@id/radiobtn"
|
||||
android:layout_alignParentTop="true"
|
||||
android:textAppearance="@style/m3_body_large"
|
||||
android:singleLine="true"
|
||||
@@ -50,7 +40,7 @@
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/image"
|
||||
android:layout_toEndOf="@id/radiobtn"
|
||||
android:layout_below="@id/title"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:textAppearance="@style/m3_body_medium"
|
||||
|
||||
@@ -1,18 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingEnd="24dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:paddingStart="16dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="?colorM3Primary"
|
||||
android:drawableStart="@drawable/ic_outline_link_24"
|
||||
android:drawablePadding="16dp"
|
||||
android:drawableTint="?colorM3Primary"
|
||||
tools:text="Privacy Policy - example.social">
|
||||
android:paddingEnd="24dp">
|
||||
|
||||
<View
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:backgroundTint="?colorM3Primary"
|
||||
android:background="@drawable/ic_outline_link_24"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/icon"
|
||||
android:layout_marginStart="16dp"
|
||||
android:textAppearance="@style/m3_body_large"
|
||||
android:textColor="?colorM3Primary"
|
||||
tools:text="Privacy Policy - example.social"/>
|
||||
|
||||
</TextView>
|
||||
<TextView
|
||||
android:id="@+id/subtitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/icon"
|
||||
android:layout_below="@id/title"
|
||||
android:layout_marginStart="16dp"
|
||||
android:textAppearance="@style/m3_body_medium"
|
||||
android:textColor="?colorM3OnSurfaceVariant"
|
||||
tools:text="Privacy Policy - example.social"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,15 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/vis_public"
|
||||
android:icon="@drawable/ic_fluent_earth_24_regular"
|
||||
android:title="@string/visibility_public"/>
|
||||
<item android:id="@+id/vis_unlisted"
|
||||
android:icon="@drawable/ic_fluent_people_community_24_regular"
|
||||
android:title="@string/sk_visibility_unlisted"/>
|
||||
<item android:id="@+id/vis_followers"
|
||||
android:icon="@drawable/ic_fluent_people_checkmark_24_regular"
|
||||
android:title="@string/visibility_followers_only"/>
|
||||
<item android:id="@+id/vis_private"
|
||||
android:icon="@drawable/ic_fluent_mention_24_regular"
|
||||
android:title="@string/visibility_private"/>
|
||||
<group android:id="@+id/local_only_group" android:checkableBehavior="all">
|
||||
<item
|
||||
android:id="@+id/local_only"
|
||||
android:visible="false"
|
||||
android:icon="@drawable/ic_fluent_eye_24_regular"
|
||||
android:title="@string/sk_local_only" />
|
||||
</group>
|
||||
<group android:id="@+id/visibility_group" android:checkableBehavior="single">
|
||||
<item android:id="@+id/vis_local"
|
||||
android:visible="false"
|
||||
android:icon="@drawable/ic_fluent_eye_24_regular"
|
||||
android:title="@string/sk_local_only"/>
|
||||
<item android:id="@+id/vis_public"
|
||||
android:icon="@drawable/ic_fluent_earth_24_regular"
|
||||
android:title="@string/visibility_public"/>
|
||||
<item android:id="@+id/vis_unlisted"
|
||||
android:icon="@drawable/ic_fluent_lock_open_24_regular"
|
||||
android:title="@string/sk_visibility_unlisted"/>
|
||||
<item android:id="@+id/vis_followers"
|
||||
android:icon="@drawable/ic_fluent_lock_closed_24_regular"
|
||||
android:title="@string/visibility_followers_only"/>
|
||||
<item android:id="@+id/vis_private"
|
||||
android:icon="@drawable/ic_fluent_mention_24_regular"
|
||||
android:title="@string/visibility_private"/>
|
||||
</group>
|
||||
</menu>
|
||||
@@ -19,34 +19,5 @@
|
||||
android:id="@+id/overflow"
|
||||
android:title="@string/more_options"
|
||||
android:icon="@drawable/ic_fluent_more_vertical_24_regular"
|
||||
android:showAsAction="always">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/settings"
|
||||
android:icon="@drawable/ic_fluent_settings_24_regular"
|
||||
android:title="@string/settings" />
|
||||
<item
|
||||
android:id="@+id/announcements"
|
||||
android:icon="@drawable/ic_fluent_megaphone_24_regular"
|
||||
android:title="@string/sk_announcements" />
|
||||
<item
|
||||
android:id="@+id/edit_timelines"
|
||||
android:icon="@drawable/ic_fluent_edit_24_regular"
|
||||
android:title="@string/sk_edit_timelines" />
|
||||
<item
|
||||
android:id="@+id/lists"
|
||||
android:icon="@drawable/ic_fluent_people_list_24_regular"
|
||||
android:title="@string/sk_your_lists"
|
||||
android:visible="false">
|
||||
<menu />
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/hashtags"
|
||||
android:icon="@drawable/ic_fluent_number_symbol_24_regular"
|
||||
android:title="@string/sk_hashtags_you_follow"
|
||||
android:visible="false">
|
||||
<menu />
|
||||
</item>
|
||||
</menu>
|
||||
</item>
|
||||
android:showAsAction="always" />
|
||||
</menu>
|
||||
33
mastodon/src/main/res/menu/home_overflow.xml
Normal file
33
mastodon/src/main/res/menu/home_overflow.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group android:id="@+id/top">
|
||||
<item
|
||||
android:id="@+id/settings"
|
||||
android:icon="@drawable/ic_fluent_settings_24_regular"
|
||||
android:title="@string/settings" />
|
||||
<item
|
||||
android:id="@+id/announcements"
|
||||
android:icon="@drawable/ic_fluent_megaphone_24_regular"
|
||||
android:title="@string/sk_announcements" />
|
||||
<item
|
||||
android:id="@+id/edit_timelines"
|
||||
android:icon="@drawable/ic_fluent_edit_24_regular"
|
||||
android:title="@string/sk_edit_timelines" />
|
||||
</group>
|
||||
<group android:id="@+id/bottom">
|
||||
<item
|
||||
android:id="@+id/lists"
|
||||
android:icon="@drawable/ic_fluent_people_24_regular"
|
||||
android:title="@string/sk_your_lists"
|
||||
android:visible="false">
|
||||
<menu />
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/hashtags"
|
||||
android:icon="@drawable/ic_fluent_number_symbol_24_regular"
|
||||
android:title="@string/sk_hashtags_you_follow"
|
||||
android:visible="false">
|
||||
<menu />
|
||||
</item>
|
||||
</group>
|
||||
</menu>
|
||||
@@ -12,7 +12,7 @@
|
||||
<item android:id="@+id/block" android:title="@string/block_user" android:icon="@drawable/ic_fluent_person_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/follow" android:title="@string/follow_user" android:icon="@drawable/ic_fluent_person_add_24_regular"/>
|
||||
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_list_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/report" android:title="@string/report_user" android:icon="@drawable/ic_fluent_warning_24_regular"/>
|
||||
<item android:id="@+id/bookmark" android:title="@string/add_bookmark" android:icon="@drawable/ic_fluent_bookmark_24_regular"/>
|
||||
<item android:id="@+id/copy_link" android:title="@string/sk_copy_link_to_post" android:icon="@drawable/ic_fluent_link_24_regular"/>
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
<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/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"/>
|
||||
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_list_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/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
|
||||
</menu>
|
||||
@@ -2,7 +2,7 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/followed_hashtags" android:title="@string/sk_hashtags_you_follow" android:icon="@drawable/ic_fluent_number_symbol_24_regular" android:showAsAction="always"/>
|
||||
<item android:id="@+id/bookmarks" android:title="@string/bookmarks" android:icon="@drawable/ic_fluent_bookmark_multiple_24_regular" android:showAsAction="always"/>
|
||||
<item android:id="@+id/manage_user_lists" android:title="@string/sk_your_lists" android:icon="@drawable/ic_fluent_people_list_24_regular"/>
|
||||
<item android:id="@+id/manage_user_lists" android:title="@string/sk_your_lists" android:icon="@drawable/ic_fluent_people_24_regular"/>
|
||||
<item android:id="@+id/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular"/>
|
||||
<item android:id="@+id/scheduled" android:title="@string/sk_unsent_posts" android:icon="@drawable/ic_fluent_folder_open_24_regular"/>
|
||||
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<string name="sk_follow_requests">Ceisiadau dilyn</string>
|
||||
<string name="sk_accept_follow_request">Derbyn cais dilyn</string>
|
||||
<string name="sk_reject_follow_request">Gwrthod cais dilyn</string>
|
||||
<string name="sk_lists_with_user">Golygu rhestrau gyda %s</string>
|
||||
<string name="sk_lists_with_user">Rhestrau gyda %s</string>
|
||||
<string name="sk_disable_marquee">Analluogi testun sgrolio mewn bariau teitl</string>
|
||||
<string name="sk_settings_show_federated_timeline">Dangos ffrwd ffederasiwn</string>
|
||||
<string name="sk_translated_using">Wedi\'i gyfieithu gyda %s</string>
|
||||
@@ -148,4 +148,82 @@
|
||||
<string name="sk_delete_list_confirm">Ydych chi\'n sicr eich bod eisiau dileu\'r rhestr %s\?</string>
|
||||
<string name="sk_recent_searches_placeholder">Teipiwch rhywbeth i ddechrau chwilio</string>
|
||||
<string name="sk_remove_follower_confirm">Tynnu %s fel dilynwr drwy eu rhwystro a\'i ddadrwystro ar unwaith\?</string>
|
||||
<string name="sk_edit_timelines">Golygu ffrydiau…</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_alt_text_missing_title">Dim testun alt</string>
|
||||
<string name="sk_alt_text_missing">O leiaf un atodiad heb ei ddisgrifio.</string>
|
||||
<string name="sk_publish_anyway">Cyhoeddi beth bynnag</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Analluogi nodyn atgoffa testun alt</string>
|
||||
<string name="sk_post_edited">Wedi\'i olygu</string>
|
||||
<string name="sk_notification_type_update">Negeseuon wedi\'u golygu</string>
|
||||
<string name="sk_notify_posts_info_banner">Os ydych chi\'n galluogi hysbysiadau post ar gyfer rhai pobl, bydd eu postiadau newydd yn ymddangos yma.</string>
|
||||
<string name="sk_timelines">Ffrydiau</string>
|
||||
<string name="sk_timeline_posts">Postiadau</string>
|
||||
<string name="sk_timelines_add">Ychwanegu</string>
|
||||
<string name="sk_timeline">Ffrwd</string>
|
||||
<string name="sk_list">Rhestr</string>
|
||||
<string name="sk_hashtag">Atalnod</string>
|
||||
<string name="sk_pin_timeline">Pinio ffrwd</string>
|
||||
<string name="sk_unpin_timeline">Dadbinio ffrwd</string>
|
||||
<string name="sk_pinned_timeline">Wedi\'i binio i gartref</string>
|
||||
<string name="sk_unpinned_timeline">Wedi\'i ddadbinio o gartref</string>
|
||||
<string name="sk_remove">Tynnu</string>
|
||||
<string name="sk_timeline_icon">Eicon</string>
|
||||
<string name="sk_icon_heart">Calon</string>
|
||||
<string name="sk_icon_star">Seren</string>
|
||||
<string name="sk_edit_timeline">Golygu ffrwd</string>
|
||||
<string name="sk_icon_city">Dinas</string>
|
||||
<string name="sk_icon_cat">Cath</string>
|
||||
<string name="sk_icon_dog">Ci</string>
|
||||
<string name="sk_icon_rabbit">Cwningen</string>
|
||||
<string name="sk_icon_turtle">Crwban</string>
|
||||
<string name="sk_icon_balloon">Balŵn</string>
|
||||
<string name="sk_icon_image">Delwedd</string>
|
||||
<string name="sk_icon_bot">Bot</string>
|
||||
<string name="sk_icon_language">Iaith</string>
|
||||
<string name="sk_icon_location">Lleoliad</string>
|
||||
<string name="sk_icon_megaphone">Megaffon</string>
|
||||
<string name="sk_icon_microphone">Meicroffon</string>
|
||||
<string name="sk_icon_microscope">Microsgop</string>
|
||||
<string name="sk_icon_keyboard">Allweddell</string>
|
||||
<string name="sk_icon_coffee">Coffi</string>
|
||||
<string name="sk_icon_laugh">Chwerthin</string>
|
||||
<string name="sk_icon_news">Newyddion</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Palet lliwiau</string>
|
||||
<string name="sk_icon_academic_cap">Cap academaidd</string>
|
||||
<string name="sk_icon_tag">Tag</string>
|
||||
<string name="sk_icon_stethoscope">Stethosgop</string>
|
||||
<string name="sk_icon_weather">Tywydd</string>
|
||||
<string name="sk_icon_games">Gemau</string>
|
||||
<string name="sk_icon_code">Côd</string>
|
||||
<string name="sk_icon_light_bulb">Bwlb golau</string>
|
||||
<string name="sk_icon_train">Trên</string>
|
||||
<string name="sk_icon_clapper_board">Bwrdd clapper</string>
|
||||
<string name="sk_icon_leaves">Dail</string>
|
||||
<string name="sk_icon_sport">Chwaraeon</string>
|
||||
<string name="sk_icon_aperture">Agorfa</string>
|
||||
<string name="sk_icon_music">Cerddoriaeth</string>
|
||||
<string name="sk_icon_people">Pobl</string>
|
||||
<string name="sk_icon_health">Iechyd</string>
|
||||
<string name="sk_icon_important">Pwysig</string>
|
||||
<string name="sk_icon_chat">Siarad</string>
|
||||
<string name="sk_icon_shield">Taran</string>
|
||||
<string name="sk_icon_book">Llyfr</string>
|
||||
<string name="sk_icon_map">Map</string>
|
||||
<string name="sk_icon_math_formula">Fformiwla mathemateg</string>
|
||||
<string name="sk_icon_backpack">Backpack</string>
|
||||
<string name="sk_icon_briefcase">Cas papurau</string>
|
||||
<string name="sk_icon_fire">Tân</string>
|
||||
<string name="sk_icon_bug">Byg</string>
|
||||
<string name="sk_icon_pizza">Pitsa</string>
|
||||
<string name="sk_icon_gavel">Morthwyl</string>
|
||||
<string name="sk_icon_gauge">Mesur</string>
|
||||
<string name="sk_icon_headphones">Clustffonau</string>
|
||||
<string name="sk_icon_human">Person</string>
|
||||
<string name="sk_icon_globe">Byd</string>
|
||||
<string name="sk_attach_file">Atodi ffeil</string>
|
||||
<string name="sk_icon_pin">Pin</string>
|
||||
<string name="sk_notify_update">Golygu neges wedi\'i hybu</string>
|
||||
<string name="sk_icon_bicycle">Beic</string>
|
||||
</resources>
|
||||
@@ -224,4 +224,28 @@
|
||||
<string name="sk_icon_megaphone">Megaphon</string>
|
||||
<string name="sk_icon_light_bulb">Glühbirne</string>
|
||||
<string name="sk_icon_globe">Globus</string>
|
||||
<string name="sk_attach_file">Datei anhängen</string>
|
||||
<string name="sk_icon_pin">Stecknadel</string>
|
||||
<string name="sk_no_results">Keine Ergebnisse</string>
|
||||
<string name="sk_save_draft">Entwurf speichern\?</string>
|
||||
<string name="sk_no_alt_text">Keine Bildbeschreibung</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indikator für Bildbeschreibungen</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indikator für fehlende Bildbeschreibungen</string>
|
||||
<string name="sk_updater_enable_pre_releases">Vorab-Versionen einschalten</string>
|
||||
<string name="sk_searching">Wird gesucht…</string>
|
||||
<string name="sk_save_draft_message">Änderungen speichern oder Entwurf jetzt veröffentlichen\?</string>
|
||||
<string name="sk_inline_local_only">nur lokal</string>
|
||||
<string name="sk_inline_direct">an Erwähnte</string>
|
||||
<string name="sk_separator">·</string>
|
||||
<string name="sk_local_only">Nur lokale Instanz</string>
|
||||
<string name="sk_instance_features">Instanz-Features</string>
|
||||
<string name="sk_settings_support_local_only">Server unterstützt lokales Posten</string>
|
||||
<string name="sk_settings_local_only_explanation">Deine Heim-Instanz muss hierzu lokales Posten unterstützen. Die meisten modifizierten Versionen von Mastodon tun das, Mastodon selbst allerdings nicht.</string>
|
||||
<string name="sk_settings_glitch_instance">Glitch-kompatibles Nur-lokal-Posten</string>
|
||||
<string name="sk_settings_glitch_mode_explanation">Nur einschalten, wenn deine Heim-Instanz auf Glitch läuft. Nicht benötigt für Hometown oder Akkoma.</string>
|
||||
<string name="sk_signed_up">hat sich registriert</string>
|
||||
<string name="sk_reported">hat gemeldet</string>
|
||||
<string name="sk_sign_ups">Registrierungen</string>
|
||||
<string name="sk_new_reports">Neue Meldungen</string>
|
||||
<string name="sk_settings_see_new_posts_button">“Neue Beiträge anzeigen”-Button</string>
|
||||
</resources>
|
||||
@@ -32,7 +32,7 @@
|
||||
<string name="sk_follow_requests">Solicitudes de seguimiento</string>
|
||||
<string name="sk_accept_follow_request">Aceptar solicitud de seguimiento</string>
|
||||
<string name="sk_reject_follow_request">Rechazar solicitud de seguimiento</string>
|
||||
<string name="sk_lists_with_user">Editar listas con %s</string>
|
||||
<string name="sk_lists_with_user">Listas con %s</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">Mostrar siempre advertencias de contenido</string>
|
||||
<string name="sk_disable_marquee">Desactivar desplazamiento de texto en barras del título</string>
|
||||
<string name="sk_settings_contribute">Contribuir a Megalodon</string>
|
||||
@@ -142,10 +142,96 @@
|
||||
<string name="sk_timeline_home">Inicio</string>
|
||||
<string name="sk_timeline_federated">Federación</string>
|
||||
<string name="sk_timeline_local">Local</string>
|
||||
<string name="sk_recent_searches_placeholder">Escribe algo para empezar a buscar</string>
|
||||
<string name="sk_recent_searches_placeholder">Escribe para empezar a buscar</string>
|
||||
<string name="sk_remove_follower">Eliminar como seguidor</string>
|
||||
<string name="sk_remove_follower_confirm">¿Eliminar a %s como seguidor bloqueándolo y desbloqueándolo inmediatamente\?</string>
|
||||
<string name="sk_do_remove_follower">Eliminar</string>
|
||||
<string name="sk_remove_follower_success">Seguidor eliminado con éxito</string>
|
||||
<string name="sk_changelog">Lista de cambios</string>
|
||||
<string name="sk_icon_heart">Corazón</string>
|
||||
<string name="sk_list">Lista</string>
|
||||
<string name="sk_alt_text_missing_title">Falta texto alternativo</string>
|
||||
<string name="sk_alt_text_missing">Por lo menos un elemento anexado no contiene descripción.</string>
|
||||
<string name="sk_publish_anyway">Publicar de todas formas</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Deshabilitar el recordatorio de texto alternativo</string>
|
||||
<string name="sk_notify_posts_info_banner">Si tienes habilitadas las notificaciones de publicación para algunas personas, sus nuevas publicaciones aparecerán aquí.</string>
|
||||
<string name="sk_timelines">Cronologías</string>
|
||||
<string name="sk_icon_city">Ciudad</string>
|
||||
<string name="sk_icon_cat">Gato</string>
|
||||
<string name="sk_icon_dog">Perro</string>
|
||||
<string name="sk_icon_rabbit">Conejo</string>
|
||||
<string name="sk_icon_turtle">Tortuga</string>
|
||||
<string name="sk_icon_balloon">Globo</string>
|
||||
<string name="sk_icon_image">Imagen</string>
|
||||
<string name="sk_icon_bot">Robot</string>
|
||||
<string name="sk_icon_language">Idioma</string>
|
||||
<string name="sk_icon_location">Localización</string>
|
||||
<string name="sk_attach_file">Adjuntar un archivo</string>
|
||||
<string name="sk_icon_megaphone">Megáfono</string>
|
||||
<string name="sk_icon_microphone">Micrófono</string>
|
||||
<string name="sk_icon_microscope">Microscopio</string>
|
||||
<string name="sk_icon_keyboard">Teclado</string>
|
||||
<string name="sk_icon_coffee">Café</string>
|
||||
<string name="sk_icon_laugh">Risa</string>
|
||||
<string name="sk_icon_news">Noticias</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Paleta de colores</string>
|
||||
<string name="sk_icon_academic_cap">Gorro académico</string>
|
||||
<string name="sk_icon_tag">Etiqueta</string>
|
||||
<string name="sk_icon_stethoscope">Estetoscopio</string>
|
||||
<string name="sk_icon_weather">Tiempo</string>
|
||||
<string name="sk_icon_games">Juegos</string>
|
||||
<string name="sk_icon_code">Código</string>
|
||||
<string name="sk_icon_light_bulb">Bombilla</string>
|
||||
<string name="sk_icon_train">Tren</string>
|
||||
<string name="sk_icon_clapper_board">Claqueta</string>
|
||||
<string name="sk_icon_leaves">Hojas</string>
|
||||
<string name="sk_icon_sport">Deporte</string>
|
||||
<string name="sk_icon_aperture">Abertura</string>
|
||||
<string name="sk_icon_music">Música</string>
|
||||
<string name="sk_icon_people">Personas</string>
|
||||
<string name="sk_icon_health">Salud</string>
|
||||
<string name="sk_icon_important">Importante</string>
|
||||
<string name="sk_icon_chat">Chat</string>
|
||||
<string name="sk_icon_shield">Escudo</string>
|
||||
<string name="sk_icon_book">Libro</string>
|
||||
<string name="sk_icon_bicycle">Bicicleta</string>
|
||||
<string name="sk_icon_map">Mapa</string>
|
||||
<string name="sk_icon_math_formula">Fórmula matemática</string>
|
||||
<string name="sk_icon_backpack">Mochila</string>
|
||||
<string name="sk_icon_briefcase">Maletín</string>
|
||||
<string name="sk_icon_fire">Fuego</string>
|
||||
<string name="sk_icon_bug">Fallo</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Grava</string>
|
||||
<string name="sk_icon_gauge">Calibre</string>
|
||||
<string name="sk_icon_headphones">Auriculares</string>
|
||||
<string name="sk_icon_human">Humano</string>
|
||||
<string name="sk_icon_globe">Globo</string>
|
||||
<string name="sk_edit_timeline">Editar cronología</string>
|
||||
<string name="sk_icon_pin">Pin</string>
|
||||
<string name="sk_edit_timelines">Editar cronologías</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_post_edited">editado</string>
|
||||
<string name="sk_notification_type_update">Publicaciones editadas</string>
|
||||
<string name="sk_notify_update">Edita un mensaje reblogueado</string>
|
||||
<string name="sk_searching">Buscando…</string>
|
||||
<string name="sk_no_results">Sin resultados</string>
|
||||
<string name="sk_save_draft">¿Guardar el borrador\?</string>
|
||||
<string name="sk_no_alt_text">No hay texto alternativo disponible</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicador para textos alternativos</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicador para textos alternativos que faltan</string>
|
||||
<string name="sk_updater_enable_pre_releases">Habilitar pre-lanzamientos</string>
|
||||
<string name="sk_timeline_posts">Publicaciones</string>
|
||||
<string name="sk_timelines_add">Añadir</string>
|
||||
<string name="sk_timeline">Cronología</string>
|
||||
<string name="sk_hashtag">Hashtag</string>
|
||||
<string name="sk_pin_timeline">Fijar cronología</string>
|
||||
<string name="sk_unpin_timeline">Desfijar cronología</string>
|
||||
<string name="sk_pinned_timeline">Fijado al inicio</string>
|
||||
<string name="sk_unpinned_timeline">Desfijado del inicio</string>
|
||||
<string name="sk_remove">Eliminado</string>
|
||||
<string name="sk_timeline_icon">Icono</string>
|
||||
<string name="sk_icon_star">Estrella</string>
|
||||
<string name="sk_save_draft_message">¿Quieres guardar los cambios para este borrador o publicarlo ahora\?</string>
|
||||
</resources>
|
||||
@@ -124,4 +124,112 @@
|
||||
<string name="sk_compose_no_schedule">Ez programatu</string>
|
||||
<string name="sk_compose_no_draft">Ez egin zirriborrorik</string>
|
||||
<string name="sk_settings_reduce_motion">Animazioen mugimenduak gutxitu</string>
|
||||
<string name="sk_timeline_home">Hasiera</string>
|
||||
<string name="sk_timeline_local">Lokala</string>
|
||||
<string name="sk_timeline_federated">Federatua</string>
|
||||
<string name="sk_announcements">Iragarpenak</string>
|
||||
<string name="sk_settings_about_instance">Instantziari buruz</string>
|
||||
<string name="sk_settings_single_notification">Jakinarazpen bakarra erakutsi</string>
|
||||
<string name="sk_create">Sortu</string>
|
||||
<string name="sk_list_name_hint">Zerrendaren izena</string>
|
||||
<string name="sk_list_replies_policy_list">Kideen zerrenda</string>
|
||||
<string name="sk_list_replies_policy_followed">Jarraitzen dituzun erabiltzaileak</string>
|
||||
<string name="sk_list_replies_policy_none">Bat ere ez</string>
|
||||
<string name="sk_delete_list">Ezabatu zerrenda</string>
|
||||
<string name="sk_edit_list_title">Editatu zerrenda</string>
|
||||
<string name="sk_your_lists">Zure zerrendak</string>
|
||||
<string name="sk_delete_list_confirm">Ziur al zaude %s zerrenda ezabatu nahi duzula\?</string>
|
||||
<string name="sk_recent_searches_placeholder">Idatzi bilatzen hasteko</string>
|
||||
<string name="sk_remove_follower_confirm">%s jarraitzailetatik ezabatu nahi duzu blokeatu eta berehala desblokeatuz\?</string>
|
||||
<string name="sk_do_remove_follower">Ezabatu</string>
|
||||
<string name="sk_remove_follower_success">Jarraitzailea ezabatu da</string>
|
||||
<string name="sk_changelog">Aldaketen zerrenda</string>
|
||||
<string name="sk_alt_text_missing">Eranskin batek gutxienez ez du deskribapenik.</string>
|
||||
<string name="sk_publish_anyway">Argitaratu hala ere</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Desgaitu testu alternatiboaren jakinarazpena</string>
|
||||
<string name="sk_timelines">Denbora-lerroak</string>
|
||||
<string name="sk_timeline_posts">Bidalketak</string>
|
||||
<string name="sk_timelines_add">Gehitu</string>
|
||||
<string name="sk_timeline">Denbora-lerroa</string>
|
||||
<string name="sk_list">Zerrenda</string>
|
||||
<string name="sk_hashtag">Hashtag-a</string>
|
||||
<string name="sk_pin_timeline">Denbora-lerroa finkatu</string>
|
||||
<string name="sk_unpin_timeline">Denbora-lerroa askatu</string>
|
||||
<string name="sk_pinned_timeline">Hasieran finkatua</string>
|
||||
<string name="sk_unpinned_timeline">Hasieratik askatua</string>
|
||||
<string name="sk_remove">Ezabatu</string>
|
||||
<string name="sk_timeline_icon">Ikonoa</string>
|
||||
<string name="sk_icon_heart">Bihotza</string>
|
||||
<string name="sk_icon_star">Izarra</string>
|
||||
<string name="sk_icon_city">Hiria</string>
|
||||
<string name="sk_icon_cat">Katua</string>
|
||||
<string name="sk_icon_dog">Txakurra</string>
|
||||
<string name="sk_icon_rabbit">Untxia</string>
|
||||
<string name="sk_icon_turtle">Dordoka</string>
|
||||
<string name="sk_icon_balloon">Puxika</string>
|
||||
<string name="sk_icon_image">Irudia</string>
|
||||
<string name="sk_icon_bot">Errobota</string>
|
||||
<string name="sk_icon_language">Hizkuntza</string>
|
||||
<string name="sk_icon_location">Lekua</string>
|
||||
<string name="sk_attach_file">Gehitu fitxategia</string>
|
||||
<string name="sk_icon_megaphone">Megafonoa</string>
|
||||
<string name="sk_icon_microphone">Mikrofonoa</string>
|
||||
<string name="sk_icon_microscope">Mikroskopioa</string>
|
||||
<string name="sk_icon_keyboard">Teklatua</string>
|
||||
<string name="sk_icon_coffee">Kafea</string>
|
||||
<string name="sk_icon_laugh">Irribarrea</string>
|
||||
<string name="sk_icon_news">Berriak</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Kolore paleta</string>
|
||||
<string name="sk_icon_academic_cap">Kapel akademikoa</string>
|
||||
<string name="sk_icon_tag">Etiketa</string>
|
||||
<string name="sk_icon_stethoscope">Estetoskopioa</string>
|
||||
<string name="sk_icon_weather">Eguraldia</string>
|
||||
<string name="sk_icon_games">Jokuak</string>
|
||||
<string name="sk_icon_code">Kodea</string>
|
||||
<string name="sk_icon_light_bulb">Bonbila</string>
|
||||
<string name="sk_icon_train">Trena</string>
|
||||
<string name="sk_icon_clapper_board">Klaketa</string>
|
||||
<string name="sk_icon_leaves">Hostoak</string>
|
||||
<string name="sk_icon_sport">Kirola</string>
|
||||
<string name="sk_icon_aperture">Irekiera</string>
|
||||
<string name="sk_icon_music">Musika</string>
|
||||
<string name="sk_icon_people">Jendea</string>
|
||||
<string name="sk_icon_health">Osasuna</string>
|
||||
<string name="sk_icon_important">Garrantzitsua</string>
|
||||
<string name="sk_icon_chat">Txata</string>
|
||||
<string name="sk_icon_shield">Armarria</string>
|
||||
<string name="sk_icon_book">Liburua</string>
|
||||
<string name="sk_icon_bicycle">Bizikleta</string>
|
||||
<string name="sk_icon_map">Mapa</string>
|
||||
<string name="sk_icon_math_formula">Matematika formula</string>
|
||||
<string name="sk_icon_backpack">Motxila</string>
|
||||
<string name="sk_icon_briefcase">Maleta</string>
|
||||
<string name="sk_icon_fire">Sua</string>
|
||||
<string name="sk_icon_bug">Akatsa</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Legarra</string>
|
||||
<string name="sk_icon_gauge">Kalibrea</string>
|
||||
<string name="sk_icon_headphones">Entzungailuak</string>
|
||||
<string name="sk_icon_human">Gizakia</string>
|
||||
<string name="sk_icon_globe">Globoa</string>
|
||||
<string name="sk_edit_timeline">Denbora-lerroa editatu</string>
|
||||
<string name="sk_icon_pin">📌, izen bezala</string>
|
||||
<string name="sk_edit_timelines">Denbora-lerroak editatu</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_post_edited">Editatua</string>
|
||||
<string name="sk_notification_type_update">Bidalketa editatua</string>
|
||||
<string name="sk_notify_update">Bultzatutako bidalketa editatu</string>
|
||||
<string name="sk_no_results">Emaitzarik ez</string>
|
||||
<string name="sk_save_draft">Zirriborroa gorde\?</string>
|
||||
<string name="sk_no_alt_text">Ez dago testu alternatiborik eskuragarri</string>
|
||||
<string name="sk_settings_show_alt_indicator">Testu alternatiboen indikatzailea</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Falta diren testu alternatiboen indikatzailea</string>
|
||||
<string name="sk_mark_as_read">Markatu irakurritako gisa</string>
|
||||
<string name="sk_create_list_title">Zerrenda sortu</string>
|
||||
<string name="sk_list_replies_policy">Erakutsi honen erantzunak</string>
|
||||
<string name="sk_remove_follower">Jarraitzailetatik ezabatu</string>
|
||||
<string name="sk_alt_text_missing_title">Testu alternatiboa falta da</string>
|
||||
<string name="sk_searching">Bilatzen…</string>
|
||||
<string name="sk_save_draft_message">Zirriborro honetako aldaketak gorde edo argitaratu nahi dituzu\?</string>
|
||||
</resources>
|
||||
@@ -143,7 +143,7 @@
|
||||
<string name="sk_timeline_federated">Fédération</string>
|
||||
<string name="sk_timeline_local">Communauté</string>
|
||||
<string name="sk_timeline_home">Accueil</string>
|
||||
<string name="sk_recent_searches_placeholder">Tapez quelque chose pour commencer la recherche</string>
|
||||
<string name="sk_recent_searches_placeholder">Écrivez pour lancer la recherche</string>
|
||||
<string name="sk_do_remove_follower">Supprimer</string>
|
||||
<string name="sk_remove_follower_success">Abonné supprimé avec succès</string>
|
||||
<string name="sk_changelog">Journal des modifications</string>
|
||||
@@ -174,4 +174,79 @@
|
||||
<string name="sk_notify_update">Modifie un article reposté</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Désactiver le rappel de texte alternatif</string>
|
||||
<string name="sk_notification_type_update">Messages modifiés</string>
|
||||
<string name="sk_icon_code">Code</string>
|
||||
<string name="sk_icon_city">Ville</string>
|
||||
<string name="sk_icon_cat">Chat</string>
|
||||
<string name="sk_icon_dog">Chien</string>
|
||||
<string name="sk_icon_rabbit">Lapin</string>
|
||||
<string name="sk_icon_turtle">Tortue</string>
|
||||
<string name="sk_icon_balloon">Ballon</string>
|
||||
<string name="sk_icon_image">Image</string>
|
||||
<string name="sk_icon_bot">Robot</string>
|
||||
<string name="sk_icon_language">Langage</string>
|
||||
<string name="sk_icon_location">Emplacement</string>
|
||||
<string name="sk_icon_megaphone">Mégaphone</string>
|
||||
<string name="sk_icon_microphone">Microphone</string>
|
||||
<string name="sk_icon_keyboard">Clavier</string>
|
||||
<string name="sk_icon_coffee">Café</string>
|
||||
<string name="sk_icon_laugh">Rire</string>
|
||||
<string name="sk_icon_news">Actualités</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Palette de couleurs</string>
|
||||
<string name="sk_icon_academic_cap">Chapeau universitaire</string>
|
||||
<string name="sk_icon_tag">Étiquette</string>
|
||||
<string name="sk_icon_stethoscope">Stéthoscope</string>
|
||||
<string name="sk_icon_weather">Temps</string>
|
||||
<string name="sk_icon_games">Jeux</string>
|
||||
<string name="sk_icon_light_bulb">Ampoule</string>
|
||||
<string name="sk_icon_train">Train</string>
|
||||
<string name="sk_icon_clapper_board">Clap</string>
|
||||
<string name="sk_icon_leaves">Feuilles</string>
|
||||
<string name="sk_icon_sport">Sport</string>
|
||||
<string name="sk_icon_aperture">Ouverture</string>
|
||||
<string name="sk_icon_music">Musique</string>
|
||||
<string name="sk_icon_people">Personnes</string>
|
||||
<string name="sk_icon_health">Santé</string>
|
||||
<string name="sk_icon_important">Important</string>
|
||||
<string name="sk_icon_chat">Discussion</string>
|
||||
<string name="sk_icon_shield">Bouclier</string>
|
||||
<string name="sk_icon_book">Livre</string>
|
||||
<string name="sk_icon_bicycle">Vélo</string>
|
||||
<string name="sk_icon_map">Carte</string>
|
||||
<string name="sk_icon_math_formula">Formule mathématique</string>
|
||||
<string name="sk_icon_backpack">Sac à dos</string>
|
||||
<string name="sk_icon_briefcase">Mallette</string>
|
||||
<string name="sk_icon_fire">Feu</string>
|
||||
<string name="sk_icon_bug">Insecte</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Marteau</string>
|
||||
<string name="sk_icon_gauge">Jauge</string>
|
||||
<string name="sk_icon_headphones">Écouteurs</string>
|
||||
<string name="sk_icon_human">Humain</string>
|
||||
<string name="sk_icon_globe">Globe</string>
|
||||
<string name="sk_attach_file">Joindre un fichier</string>
|
||||
<string name="sk_icon_microscope">Microscope</string>
|
||||
<string name="sk_icon_pin">Épingle</string>
|
||||
<string name="sk_searching">Recherche…</string>
|
||||
<string name="sk_no_results">Aucun résultat</string>
|
||||
<string name="sk_save_draft">Enregistrer le brouillon \?</string>
|
||||
<string name="sk_no_alt_text">Aucun texte alternatif disponible</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicateur pour les textes alternatifs</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicateur de textes alternatifs manquants</string>
|
||||
<string name="sk_updater_enable_pre_releases">Activer les versions préliminaires</string>
|
||||
<string name="sk_save_draft_message">Voulez-vous enregistrer les modifications apportées à ce brouillon ou le publier maintenant \?</string>
|
||||
<string name="sk_inline_local_only">local uniquement</string>
|
||||
<string name="sk_inline_direct">uniquement mentionné</string>
|
||||
<string name="sk_separator">·</string>
|
||||
<string name="sk_local_only">Instance locale uniquement</string>
|
||||
<string name="sk_settings_support_local_only">Le serveur prend uniquement en charge la publication locale</string>
|
||||
<string name="sk_settings_glitch_mode_explanation">Activez cette option si votre instance domestique s\'exécute sur Glitch. Non nécessaire pour Hometown ou Akkoma.</string>
|
||||
<string name="sk_settings_glitch_instance">Glitch mode local uniquement</string>
|
||||
<string name="sk_signed_up">signé</string>
|
||||
<string name="sk_reported">signalé</string>
|
||||
<string name="sk_sign_ups">Utilisateurs s\'inscrivant</string>
|
||||
<string name="sk_new_reports">Nouveaux signalements</string>
|
||||
<string name="sk_settings_see_new_posts_button">Bouton \"Afficher les nouveaux messages\"</string>
|
||||
<string name="sk_instance_features">Fonctionnalités des instances</string>
|
||||
<string name="sk_settings_local_only_explanation">Votre instance locale doit prendre en charge la publication locale uniquement pour que cela fonctionne. La plupart des versions modifiées de Mastodon le font, mais pas Mastodon.</string>
|
||||
</resources>
|
||||
@@ -14,7 +14,7 @@
|
||||
<string name="sk_confirm_unpin_post">Tes a certeza de querer desafixar esta publicación\?</string>
|
||||
<string name="sk_unpinning">Desafixando publicación…</string>
|
||||
<string name="sk_image_description">Descrición da imaxe</string>
|
||||
<string name="sk_lists_with_user">Editar listas con %s</string>
|
||||
<string name="sk_lists_with_user">Listas con %s</string>
|
||||
<string name="sk_visibility_unlisted">Non listado</string>
|
||||
<string name="sk_settings_show_replies">Mostrar respostas</string>
|
||||
<string name="sk_settings_show_boosts">Mostrar promocións</string>
|
||||
@@ -128,7 +128,7 @@
|
||||
<string name="sk_delete_list">Eliminar lista</string>
|
||||
<string name="sk_edit_list_title">Editar lista</string>
|
||||
<string name="sk_your_lists">Listas</string>
|
||||
<string name="sk_recent_searches_placeholder">Escribe algo para iniciar a busca</string>
|
||||
<string name="sk_recent_searches_placeholder">Escribe para iniciar a busca</string>
|
||||
<string name="sk_remove_follower">Eliminar como seguidora</string>
|
||||
<string name="sk_remove_follower_confirm">Eliminar a %s como seguidora bloqueándoa e inmediatamente desbloqueándoa\?</string>
|
||||
<string name="sk_do_remove_follower">Eliminar</string>
|
||||
@@ -148,4 +148,90 @@
|
||||
<string name="sk_clear_all_notifications">Borrar todas as notificacións</string>
|
||||
<string name="sk_clear_all_notifications_confirm_action">Borrar todo</string>
|
||||
<string name="sk_clear_all_notifications_confirm">Seguro que queres borrar todas as notificacións\?</string>
|
||||
<string name="sk_icon_pin">Pincho</string>
|
||||
<string name="sk_alt_text_missing">Alomenos un dos adxuntos non ten descrición.</string>
|
||||
<string name="sk_alt_text_missing_title">Falta o texto descritivo</string>
|
||||
<string name="sk_publish_anyway">Publicar igualmente</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Desactivar aviso de texto alternativo</string>
|
||||
<string name="sk_edit_timelines">Editar cronoloxías</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_post_edited">editada</string>
|
||||
<string name="sk_notification_type_update">Publicación editada</string>
|
||||
<string name="sk_notify_posts_info_banner">Se activas as notificacións de publicación para algunhas persoas, aparecerán aquí as novas publicacións.</string>
|
||||
<string name="sk_timelines">Cronoloxías</string>
|
||||
<string name="sk_timeline_posts">Publicacións</string>
|
||||
<string name="sk_timelines_add">Engadir</string>
|
||||
<string name="sk_timeline">Cronoloxía</string>
|
||||
<string name="sk_list">Lista</string>
|
||||
<string name="sk_hashtag">Cancelo</string>
|
||||
<string name="sk_pin_timeline">Fixar cronoloxía</string>
|
||||
<string name="sk_unpin_timeline">Desafixar cronoloxía</string>
|
||||
<string name="sk_pinned_timeline">Fixada ao inicio</string>
|
||||
<string name="sk_unpinned_timeline">Desafixada de inicio</string>
|
||||
<string name="sk_remove">Quitar</string>
|
||||
<string name="sk_timeline_icon">Ícona</string>
|
||||
<string name="sk_icon_heart">Corazón</string>
|
||||
<string name="sk_icon_star">Estrela</string>
|
||||
<string name="sk_edit_timeline">Editar cronoloxía</string>
|
||||
<string name="sk_icon_city">Cidade</string>
|
||||
<string name="sk_icon_cat">Gato</string>
|
||||
<string name="sk_icon_dog">Can</string>
|
||||
<string name="sk_icon_rabbit">Coello</string>
|
||||
<string name="sk_icon_turtle">Tartaruga</string>
|
||||
<string name="sk_icon_balloon">Globo</string>
|
||||
<string name="sk_icon_image">Imaxe</string>
|
||||
<string name="sk_icon_bot">Robot</string>
|
||||
<string name="sk_icon_language">Idioma</string>
|
||||
<string name="sk_icon_location">Localización</string>
|
||||
<string name="sk_icon_megaphone">Megáfono</string>
|
||||
<string name="sk_icon_microphone">Micrófono</string>
|
||||
<string name="sk_icon_microscope">Microscopio</string>
|
||||
<string name="sk_icon_keyboard">Teclado</string>
|
||||
<string name="sk_icon_coffee">Café</string>
|
||||
<string name="sk_icon_laugh">Sorriso</string>
|
||||
<string name="sk_icon_news">Novas</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Paleta de cores</string>
|
||||
<string name="sk_icon_academic_cap">Pucho académico</string>
|
||||
<string name="sk_icon_tag">Etiqueta</string>
|
||||
<string name="sk_icon_stethoscope">Estetoscopio</string>
|
||||
<string name="sk_icon_weather">Meteo</string>
|
||||
<string name="sk_icon_games">Xogos</string>
|
||||
<string name="sk_icon_code">Código</string>
|
||||
<string name="sk_icon_light_bulb">Lámpada</string>
|
||||
<string name="sk_icon_train">Tren</string>
|
||||
<string name="sk_icon_leaves">Follas</string>
|
||||
<string name="sk_icon_sport">Deporte</string>
|
||||
<string name="sk_icon_aperture">Apertura</string>
|
||||
<string name="sk_icon_music">Música</string>
|
||||
<string name="sk_icon_people">Persoas</string>
|
||||
<string name="sk_icon_health">Saúde</string>
|
||||
<string name="sk_icon_important">Importante</string>
|
||||
<string name="sk_icon_chat">Conversa</string>
|
||||
<string name="sk_icon_shield">Escudo</string>
|
||||
<string name="sk_icon_book">Libro</string>
|
||||
<string name="sk_icon_bicycle">Bicicleta</string>
|
||||
<string name="sk_icon_map">Mapa</string>
|
||||
<string name="sk_icon_backpack">Mochila</string>
|
||||
<string name="sk_icon_briefcase">Maleta</string>
|
||||
<string name="sk_icon_fire">Lume</string>
|
||||
<string name="sk_icon_bug">Verme</string>
|
||||
<string name="sk_icon_pizza">Piza</string>
|
||||
<string name="sk_icon_headphones">Auriculares</string>
|
||||
<string name="sk_icon_human">Persoa</string>
|
||||
<string name="sk_icon_globe">Globo</string>
|
||||
<string name="sk_attach_file">Anexar ficheiro</string>
|
||||
<string name="sk_icon_clapper_board">Claqueta</string>
|
||||
<string name="sk_icon_gavel">Mazo</string>
|
||||
<string name="sk_icon_gauge">Indicador</string>
|
||||
<string name="sk_icon_math_formula">Fórmula matemática</string>
|
||||
<string name="sk_notify_update">Edita unha publicación promovida</string>
|
||||
<string name="sk_no_results">Sen resultados</string>
|
||||
<string name="sk_save_draft">Gardar borrador\?</string>
|
||||
<string name="sk_no_alt_text">Sen texto descriptivo</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicador de texto alternativo</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicador para a falta de texto alt</string>
|
||||
<string name="sk_updater_enable_pre_releases">Activar pre-publicacións</string>
|
||||
<string name="sk_searching">Buscando…</string>
|
||||
<string name="sk_save_draft_message">Queres gardar os cambios deste borrador ou publicalo agora\?</string>
|
||||
</resources>
|
||||
@@ -145,7 +145,7 @@
|
||||
<string name="sk_timeline_federated">Federasi</string>
|
||||
<string name="sk_timeline_home">Beranda</string>
|
||||
<string name="sk_timeline_local">Lokal</string>
|
||||
<string name="sk_recent_searches_placeholder">Ketik sesuatu untuk memulai mencari</string>
|
||||
<string name="sk_recent_searches_placeholder">Ketik untuk memulai mencari</string>
|
||||
<string name="sk_remove_follower">Hapus sebagai pengikut</string>
|
||||
<string name="sk_remove_follower_confirm">Hapus %s sebagai pengikut dengan memblokir dan membuka blokir secara cepat\?</string>
|
||||
<string name="sk_do_remove_follower">Hapus</string>
|
||||
@@ -157,7 +157,7 @@
|
||||
<string name="sk_publish_anyway">Terbitkan saja</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Nonaktifkan pengingat teks alternatif</string>
|
||||
<string name="sk_timeline_posts">Kiriman</string>
|
||||
<string name="sk_timelines">Lini masa</string>
|
||||
<string name="sk_timelines">Lini Masa</string>
|
||||
<string name="sk_timelines_add">Tambahkan</string>
|
||||
<string name="sk_timeline">Lini masa</string>
|
||||
<string name="sk_list">Daftar</string>
|
||||
@@ -176,4 +176,78 @@
|
||||
<string name="sk_notification_type_update">Kiriman tersunting</string>
|
||||
<string name="sk_notify_update">Menyunting kiriman yang telah dibagikan</string>
|
||||
<string name="sk_notify_posts_info_banner">Jika Anda mengaktifkan notifikasi kiriman untuk beberapa orang, kiriman baru mereka akan muncul di sini.</string>
|
||||
<string name="sk_icon_city">Kota</string>
|
||||
<string name="sk_icon_cat">Kucing</string>
|
||||
<string name="sk_icon_dog">Anjing</string>
|
||||
<string name="sk_icon_turtle">Kura-Kura</string>
|
||||
<string name="sk_icon_balloon">Balon</string>
|
||||
<string name="sk_icon_image">Gambar</string>
|
||||
<string name="sk_icon_bot">Bot</string>
|
||||
<string name="sk_icon_language">Bahasa</string>
|
||||
<string name="sk_icon_location">Lokasi</string>
|
||||
<string name="sk_icon_megaphone">Megafon</string>
|
||||
<string name="sk_icon_microphone">Mikrofon</string>
|
||||
<string name="sk_icon_microscope">Mikroskop</string>
|
||||
<string name="sk_icon_keyboard">Keyboard</string>
|
||||
<string name="sk_icon_coffee">Kopi</string>
|
||||
<string name="sk_icon_laugh">Tertawa</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Palet warna</string>
|
||||
<string name="sk_icon_academic_cap">Topi akademis</string>
|
||||
<string name="sk_icon_tag">Tagar</string>
|
||||
<string name="sk_icon_stethoscope">Stetoskop</string>
|
||||
<string name="sk_icon_weather">Cuaca</string>
|
||||
<string name="sk_icon_games">Permainan</string>
|
||||
<string name="sk_icon_code">Kode</string>
|
||||
<string name="sk_icon_light_bulb">Bohlam lampu</string>
|
||||
<string name="sk_icon_train">Kereta</string>
|
||||
<string name="sk_icon_clapper_board">Papan tepuk</string>
|
||||
<string name="sk_icon_sport">Olahraga</string>
|
||||
<string name="sk_icon_aperture">Bukaan</string>
|
||||
<string name="sk_icon_music">Musik</string>
|
||||
<string name="sk_icon_people">Orang</string>
|
||||
<string name="sk_icon_health">Kesehatan</string>
|
||||
<string name="sk_icon_important">Penting</string>
|
||||
<string name="sk_icon_chat">Obrolan</string>
|
||||
<string name="sk_icon_shield">Perisai</string>
|
||||
<string name="sk_icon_book">Buku</string>
|
||||
<string name="sk_icon_bicycle">Sepeda</string>
|
||||
<string name="sk_icon_map">Peta</string>
|
||||
<string name="sk_icon_math_formula">Formula matematika</string>
|
||||
<string name="sk_icon_briefcase">Koper</string>
|
||||
<string name="sk_icon_fire">Api</string>
|
||||
<string name="sk_icon_bug">Kutu</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Palu</string>
|
||||
<string name="sk_icon_headphones">Headphone</string>
|
||||
<string name="sk_icon_human">Manusia</string>
|
||||
<string name="sk_icon_globe">Globe</string>
|
||||
<string name="sk_attach_file">Lampirkan berkas</string>
|
||||
<string name="sk_icon_pin">Pin</string>
|
||||
<string name="sk_icon_rabbit">Kelinci</string>
|
||||
<string name="sk_icon_news">Berita</string>
|
||||
<string name="sk_icon_leaves">Daun</string>
|
||||
<string name="sk_icon_backpack">Tas ransel</string>
|
||||
<string name="sk_icon_gauge">Ukuran</string>
|
||||
<string name="sk_no_results">Tidak ada hasil</string>
|
||||
<string name="sk_no_alt_text">Tidak ada teks alternatif yang tersedia</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indikator teks alternatif</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indikator untuk teks alternatif yang tidak ada</string>
|
||||
<string name="sk_updater_enable_pre_releases">Aktifkan prarilis</string>
|
||||
<string name="sk_searching">Mencari…</string>
|
||||
<string name="sk_save_draft_message">Apakah Anda ingin menyimpan perubahan Anda ke draf ini atau menerbitkannya sekarang\?</string>
|
||||
<string name="sk_inline_local_only">hanya lokal</string>
|
||||
<string name="sk_inline_direct">hanya tersebut</string>
|
||||
<string name="sk_separator">·</string>
|
||||
<string name="sk_local_only">Hanya lokal</string>
|
||||
<string name="sk_instance_features">Fitur server</string>
|
||||
<string name="sk_settings_glitch_instance">Mode hanya lokal Glitch</string>
|
||||
<string name="sk_settings_glitch_mode_explanation">Aktifkan ini jika server rumah Anda berjalan pada Glitch. Tidak dibutuhkan untuk Hometown atau Akkoma.</string>
|
||||
<string name="sk_signed_up">terdaftar</string>
|
||||
<string name="sk_reported">dilaporkan</string>
|
||||
<string name="sk_sign_ups">Pendaftaran pengguna</string>
|
||||
<string name="sk_new_reports">Laporan baru</string>
|
||||
<string name="sk_settings_see_new_posts_button">Tombol “Lihat kiriman baru”</string>
|
||||
<string name="sk_settings_local_only_explanation">Server rumah Anda harus mendukung pengiriman hanya lokal untuk ini bekerja. Kebanyakan versi Mastodon yang dimodifikasi bisa, tetapi Mastodon tidak.</string>
|
||||
<string name="sk_settings_support_local_only">Server hanya mendukung pengiriman hanya lokal</string>
|
||||
</resources>
|
||||
@@ -42,7 +42,7 @@
|
||||
<string name="sk_no_update_available">Non ci sono aggiornamenti disponibili</string>
|
||||
<string name="sk_list_timelines">Liste</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">Apri sempre contenuti segnalati come sensibili</string>
|
||||
<string name="sk_lists_with_user">Modifica liste con %s</string>
|
||||
<string name="sk_lists_with_user">Liste con %s</string>
|
||||
<string name="sk_settings_contribute">Contribuisci a Megalodon</string>
|
||||
<string name="sk_settings_show_federated_timeline">Mostra timeline federata</string>
|
||||
<string name="sk_disable_marquee">Disabilita scorrimento titoli</string>
|
||||
@@ -67,8 +67,8 @@
|
||||
<string name="sk_favorite_as">Inserisci tra i preferiti con un altro account</string>
|
||||
<string name="sk_favorited_as">Inserito tra i preferiti come %s</string>
|
||||
<string name="sk_already_favorited">Già tra i preferiti</string>
|
||||
<string name="sk_reblog_as">Esegui il reblog con un altro account</string>
|
||||
<string name="sk_already_reblogged">Reblog già eseguito</string>
|
||||
<string name="sk_reblog_as">Condividi con un altro account</string>
|
||||
<string name="sk_already_reblogged">Condivisione già eseguita</string>
|
||||
<string name="sk_settings_profile">Imposta il profilo</string>
|
||||
<string name="sk_settings_posting">Preferenze dei post</string>
|
||||
<string name="sk_settings_filters">Configura filtri</string>
|
||||
@@ -86,8 +86,8 @@
|
||||
<string name="sk_clear_all_notifications_confirm">Sei sicuro di volere eliminare tutte le notifiche\?</string>
|
||||
<string name="sk_loading_fediverse_resource_title">Cercando nel Fediverso</string>
|
||||
<string name="sk_quote_post">Crea un post riguardo a questo</string>
|
||||
<string name="sk_undo_reblog">Annulla il reblog</string>
|
||||
<string name="sk_reblog_with_visibility">Esegui il reblog con visibilità</string>
|
||||
<string name="sk_undo_reblog">Annulla la condivisione</string>
|
||||
<string name="sk_reblog_with_visibility">Condividi con visibilità</string>
|
||||
<string name="sk_copy_link_to_post">Copia il link del post</string>
|
||||
<string name="sk_open_with_account">Apri con un altro account</string>
|
||||
<string name="sk_resource_not_found">La risorsa non può essere trovata</string>
|
||||
@@ -131,7 +131,7 @@
|
||||
<string name="sk_loading_resource_on_instance_title">Cercando in %s</string>
|
||||
<string name="sk_hashtags_you_follow">Hashtags che segui</string>
|
||||
<string name="sk_already_bookmarked">Già salvato</string>
|
||||
<string name="sk_reblogged_as">Reblog eseguito come %s</string>
|
||||
<string name="sk_reblogged_as">Condivisione eseguita come %s</string>
|
||||
<string name="sk_unsent_posts">Post annullati</string>
|
||||
<string name="sk_confirm_save_draft">Salva bozza\?</string>
|
||||
<string name="sk_confirm_save_changes">Salva le modifiche\?</string>
|
||||
@@ -142,10 +142,96 @@
|
||||
<string name="sk_timeline_home">Home</string>
|
||||
<string name="sk_confirm_delete_draft">Sei sicuro di volere eliminare questo post in bozza\?</string>
|
||||
<string name="sk_scheduled_too_soon">I post devono essere programmati almeno tra 10 minuti.</string>
|
||||
<string name="sk_recent_searches_placeholder">Scrivi qualcosa per iniziare a cercare</string>
|
||||
<string name="sk_recent_searches_placeholder">Scrivi per iniziare a cercare</string>
|
||||
<string name="sk_remove_follower">Rimuovi come follower</string>
|
||||
<string name="sk_remove_follower_confirm">Rimuovi %s come follower bloccandolo e sboccandolo immediatamente\?</string>
|
||||
<string name="sk_do_remove_follower">Rimuovi</string>
|
||||
<string name="sk_remove_follower_success">Follower rimosso con successo</string>
|
||||
<string name="sk_changelog">Registro delle modifiche</string>
|
||||
<string name="sk_alt_text_missing_title">Testo alternativo mancante</string>
|
||||
<string name="sk_publish_anyway">Pubblica comunque</string>
|
||||
<string name="sk_timelines">Linee temporali</string>
|
||||
<string name="sk_timeline_posts">Post</string>
|
||||
<string name="sk_timelines_add">Aggiungi</string>
|
||||
<string name="sk_timeline">Linea temporale</string>
|
||||
<string name="sk_list">Lista</string>
|
||||
<string name="sk_hashtag">Hashtag</string>
|
||||
<string name="sk_pin_timeline">Fissa timeline</string>
|
||||
<string name="sk_unpin_timeline">Rimuovi timeline</string>
|
||||
<string name="sk_pinned_timeline">Fissato nella home</string>
|
||||
<string name="sk_unpinned_timeline">Rimosso dalla home</string>
|
||||
<string name="sk_remove">Rimuovi</string>
|
||||
<string name="sk_timeline_icon">Icona</string>
|
||||
<string name="sk_icon_heart">Cuore</string>
|
||||
<string name="sk_icon_star">Stella</string>
|
||||
<string name="sk_icon_city">Città</string>
|
||||
<string name="sk_icon_cat">Gatto</string>
|
||||
<string name="sk_icon_dog">Cane</string>
|
||||
<string name="sk_icon_rabbit">Coniglio</string>
|
||||
<string name="sk_icon_turtle">Tartaruga</string>
|
||||
<string name="sk_icon_balloon">Palloncino</string>
|
||||
<string name="sk_icon_image">Immagine</string>
|
||||
<string name="sk_icon_bot">Bot</string>
|
||||
<string name="sk_icon_language">Lingua</string>
|
||||
<string name="sk_icon_location">Posizione</string>
|
||||
<string name="sk_icon_megaphone">Megafono</string>
|
||||
<string name="sk_icon_microphone">Microfono</string>
|
||||
<string name="sk_icon_microscope">Microscopio</string>
|
||||
<string name="sk_icon_keyboard">Tastiera del pianoforte</string>
|
||||
<string name="sk_icon_coffee">Caffè</string>
|
||||
<string name="sk_icon_laugh">Risata</string>
|
||||
<string name="sk_icon_news">Notizie</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Tavolozza di colori</string>
|
||||
<string name="sk_alt_text_missing">Almeno un allegato non contiene una descrizione.</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Disabilita gli avvertimenti per la descrizione</string>
|
||||
<string name="sk_notify_posts_info_banner">Se abiliti le notifiche per i post per alcune persone, i loro nuovi post appariranno qui.</string>
|
||||
<string name="sk_icon_academic_cap">Tocco universitario</string>
|
||||
<string name="sk_icon_tag">Etichetta</string>
|
||||
<string name="sk_icon_stethoscope">Stetoscopio</string>
|
||||
<string name="sk_icon_weather">Meteo</string>
|
||||
<string name="sk_icon_games">Giochi</string>
|
||||
<string name="sk_icon_code">Codice</string>
|
||||
<string name="sk_icon_light_bulb">Lampadina</string>
|
||||
<string name="sk_icon_train">Treno</string>
|
||||
<string name="sk_icon_clapper_board">Ciak</string>
|
||||
<string name="sk_icon_leaves">Foglie</string>
|
||||
<string name="sk_icon_sport">Sport</string>
|
||||
<string name="sk_icon_aperture">Apertura</string>
|
||||
<string name="sk_icon_music">Musica</string>
|
||||
<string name="sk_icon_people">Persone</string>
|
||||
<string name="sk_icon_health">Salute</string>
|
||||
<string name="sk_icon_important">Importante</string>
|
||||
<string name="sk_icon_chat">Chat</string>
|
||||
<string name="sk_icon_shield">Scudo</string>
|
||||
<string name="sk_icon_book">Libro</string>
|
||||
<string name="sk_icon_bicycle">Bicicletta</string>
|
||||
<string name="sk_icon_map">Mappa</string>
|
||||
<string name="sk_icon_math_formula">Formula matematica</string>
|
||||
<string name="sk_icon_backpack">Zaino</string>
|
||||
<string name="sk_icon_briefcase">Valigetta</string>
|
||||
<string name="sk_icon_fire">Fuoco</string>
|
||||
<string name="sk_icon_bug">Insetto</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Martelletto</string>
|
||||
<string name="sk_icon_gauge">Indicatore</string>
|
||||
<string name="sk_icon_headphones">Cuffie</string>
|
||||
<string name="sk_icon_human">Umano</string>
|
||||
<string name="sk_icon_globe">Mappamondo</string>
|
||||
<string name="sk_edit_timeline">Modifica timeline</string>
|
||||
<string name="sk_edit_timelines">Modifica timelines</string>
|
||||
<string name="sk_notify_update">Modifica un post condiviso</string>
|
||||
<string name="sk_notification_type_update">Post modificati</string>
|
||||
<string name="sk_attach_file">Allega file</string>
|
||||
<string name="sk_icon_pin">Puntina</string>
|
||||
<string name="sk_alt_button">Descrizione</string>
|
||||
<string name="sk_post_edited">modificato</string>
|
||||
<string name="sk_searching">Ricerca…</string>
|
||||
<string name="sk_no_results">Nessun risultato</string>
|
||||
<string name="sk_save_draft">Salva bozza\?</string>
|
||||
<string name="sk_save_draft_message">Vuoi salvare le modifiche a questa bozza o pubblicarla ora\?</string>
|
||||
<string name="sk_no_alt_text">Nessuna descrizione disponibile</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicatore per le descrizioni</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicatore per descrizioni mancanti</string>
|
||||
<string name="sk_updater_enable_pre_releases">Abilita prerilasci</string>
|
||||
</resources>
|
||||
@@ -29,7 +29,7 @@
|
||||
<string name="sk_follow_requests">팔로우 요청</string>
|
||||
<string name="sk_accept_follow_request">팔로우 요청 수락</string>
|
||||
<string name="sk_reject_follow_request">팔로우 요청 거부</string>
|
||||
<string name="sk_lists_with_user">%s 님이 포함된 리스트 수정</string>
|
||||
<string name="sk_lists_with_user">%s 님이 포함된 리스트</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">열람주의 게시물을 항상 펼치기</string>
|
||||
<string name="sk_disable_marquee">제목 표시줄의 텍스트 스크롤 비활성화</string>
|
||||
<string name="sk_app_name">Megalodon</string>
|
||||
@@ -139,7 +139,7 @@
|
||||
<string name="sk_list_replies_policy_followed">팔로우한 사용자 누구나</string>
|
||||
<string name="sk_list_replies_policy_none">아무도 없음</string>
|
||||
<string name="sk_delete_list">리스트 삭제</string>
|
||||
<string name="sk_edit_list_title">리스트 편집</string>
|
||||
<string name="sk_edit_list_title">리스트 수정</string>
|
||||
<string name="sk_your_lists">리스트</string>
|
||||
<string name="sk_settings_single_notification">하나의 알림만 표시</string>
|
||||
<string name="sk_recent_searches_placeholder">검색할 내용을 입력하세요</string>
|
||||
@@ -148,4 +148,90 @@
|
||||
<string name="sk_changelog">변경 사항</string>
|
||||
<string name="sk_remove_follower">팔로워에서 제거</string>
|
||||
<string name="sk_remove_follower_confirm">%s 님을 차단하고 바로 차단 해제하여 팔로워에서 제거하시겠습니까\?</string>
|
||||
<string name="sk_alt_text_missing">하나 이상의 첨부 파일이 대체 텍스트를 포함하지 않고 있습니다.</string>
|
||||
<string name="sk_publish_anyway">그래도 게시</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">대체 텍스트 리마인더 해제</string>
|
||||
<string name="sk_alt_text_missing_title">대체 텍스트 누락</string>
|
||||
<string name="sk_timeline_posts">게시물</string>
|
||||
<string name="sk_notify_posts_info_banner">특정 계정의 게시물 알림을 켜 둔 경우, 이 곳에 해당 계정의 새로운 게시물이 나타납니다.</string>
|
||||
<string name="sk_timelines_add">추가</string>
|
||||
<string name="sk_timeline">타임라인</string>
|
||||
<string name="sk_list">리스트</string>
|
||||
<string name="sk_hashtag">해시태그</string>
|
||||
<string name="sk_pin_timeline">타임라인 고정</string>
|
||||
<string name="sk_unpin_timeline">타임라인 고정 해제</string>
|
||||
<string name="sk_pinned_timeline">홈에 고정함</string>
|
||||
<string name="sk_unpinned_timeline">홈에서 고정 해제함</string>
|
||||
<string name="sk_remove">삭제</string>
|
||||
<string name="sk_timeline_icon">아이콘</string>
|
||||
<string name="sk_icon_heart">하트</string>
|
||||
<string name="sk_icon_star">별</string>
|
||||
<string name="sk_timelines">타임라인 목록</string>
|
||||
<string name="sk_icon_city">도시</string>
|
||||
<string name="sk_icon_cat">고양이</string>
|
||||
<string name="sk_icon_dog">개</string>
|
||||
<string name="sk_icon_rabbit">토끼</string>
|
||||
<string name="sk_icon_turtle">거북이</string>
|
||||
<string name="sk_icon_balloon">풍선</string>
|
||||
<string name="sk_icon_image">이미지</string>
|
||||
<string name="sk_icon_bot">봇</string>
|
||||
<string name="sk_icon_language">언어</string>
|
||||
<string name="sk_icon_location">위치</string>
|
||||
<string name="sk_attach_file">파일 첨부</string>
|
||||
<string name="sk_icon_megaphone">확성기</string>
|
||||
<string name="sk_icon_microphone">마이크</string>
|
||||
<string name="sk_icon_microscope">현미경</string>
|
||||
<string name="sk_icon_keyboard">키보드</string>
|
||||
<string name="sk_icon_coffee">커피</string>
|
||||
<string name="sk_icon_laugh">웃음</string>
|
||||
<string name="sk_icon_news">뉴스</string>
|
||||
<string name="sk_icon_pi">파이</string>
|
||||
<string name="sk_icon_color_palette">팔레트</string>
|
||||
<string name="sk_icon_academic_cap">학사모</string>
|
||||
<string name="sk_icon_tag">태그</string>
|
||||
<string name="sk_icon_stethoscope">청진기</string>
|
||||
<string name="sk_icon_weather">날씨</string>
|
||||
<string name="sk_icon_games">게임</string>
|
||||
<string name="sk_icon_code">코드</string>
|
||||
<string name="sk_icon_light_bulb">전구</string>
|
||||
<string name="sk_icon_train">기차</string>
|
||||
<string name="sk_icon_clapper_board">클래퍼보드</string>
|
||||
<string name="sk_icon_leaves">잎</string>
|
||||
<string name="sk_icon_sport">스포츠</string>
|
||||
<string name="sk_icon_aperture">조리개</string>
|
||||
<string name="sk_icon_music">음악</string>
|
||||
<string name="sk_icon_people">사람들</string>
|
||||
<string name="sk_icon_health">건강</string>
|
||||
<string name="sk_icon_important">중요</string>
|
||||
<string name="sk_icon_chat">대화</string>
|
||||
<string name="sk_icon_shield">방패</string>
|
||||
<string name="sk_icon_book">책</string>
|
||||
<string name="sk_icon_bicycle">자전거</string>
|
||||
<string name="sk_icon_map">지도</string>
|
||||
<string name="sk_icon_math_formula">수식</string>
|
||||
<string name="sk_icon_backpack">배낭</string>
|
||||
<string name="sk_icon_briefcase">서류가방</string>
|
||||
<string name="sk_icon_fire">불</string>
|
||||
<string name="sk_icon_bug">벌레</string>
|
||||
<string name="sk_icon_pizza">피자</string>
|
||||
<string name="sk_icon_gavel">의사봉</string>
|
||||
<string name="sk_icon_gauge">게이지</string>
|
||||
<string name="sk_icon_headphones">헤드폰</string>
|
||||
<string name="sk_icon_human">사람</string>
|
||||
<string name="sk_icon_globe">세계</string>
|
||||
<string name="sk_edit_timeline">타임라인 수정</string>
|
||||
<string name="sk_icon_pin">압정</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_post_edited">수정함</string>
|
||||
<string name="sk_notify_update">리블로그한 게시물 수정</string>
|
||||
<string name="sk_notification_type_update">게시물 수정함</string>
|
||||
<string name="sk_edit_timelines">타임라인 목록 편집</string>
|
||||
<string name="sk_searching">찾는 중…</string>
|
||||
<string name="sk_no_results">결과 없음</string>
|
||||
<string name="sk_save_draft">초안을 저장하시겠습니까\?</string>
|
||||
<string name="sk_no_alt_text">대체 텍스트 없음</string>
|
||||
<string name="sk_updater_enable_pre_releases">사전 릴리스 활성화</string>
|
||||
<string name="sk_save_draft_message">변경 사항을 초안으로 저장하거나 지금 게시하시겠습니까\?</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">대체 텍스트 누락 여부 표시</string>
|
||||
<string name="sk_settings_show_alt_indicator">대체 텍스트 설정 여부 표시</string>
|
||||
</resources>
|
||||
@@ -33,7 +33,7 @@
|
||||
<string name="sk_list_timelines">Lijsten</string>
|
||||
<string name="sk_reject_follow_request">Volgverzoek afwijzen</string>
|
||||
<string name="sk_accept_follow_request">Volgverzoek accepteren</string>
|
||||
<string name="sk_lists_with_user">Bewerk lijsten met %s</string>
|
||||
<string name="sk_lists_with_user">Lijsten met %s</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">Onthul altijd inhoudswaarschuwingen</string>
|
||||
<string name="sk_disable_marquee">Schakel scrollende tekst in titelbalken uit</string>
|
||||
<string name="sk_settings_contribute">Bijdragen aan Megalodon</string>
|
||||
@@ -46,7 +46,7 @@
|
||||
<string name="sk_translate_post">Vertaal</string>
|
||||
<string name="sk_poll_allow_multiple">Meerdere keuzes toestaan</string>
|
||||
<string name="sk_clear_recent_languages">Wis recent gebruikte talen</string>
|
||||
<string name="sk_welcome_text">De haai groet je! Graag je home instance naam hieronder invullen om te beginnen.</string>
|
||||
<string name="sk_welcome_text">De haai groet je! Graag je instance naam (Mastodon server) hieronder invullen om te beginnen.</string>
|
||||
<string name="sk_welcome_title">Welkom!</string>
|
||||
<string name="sk_translated_using">Vertaald met %s</string>
|
||||
<string name="sk_post_language">Taal: %s</string>
|
||||
@@ -143,6 +143,91 @@
|
||||
<string name="sk_remove_follower">Verwijder als volger</string>
|
||||
<string name="sk_do_remove_follower">Verwijder</string>
|
||||
<string name="sk_remove_follower_success">Volger succesvol verwijderd</string>
|
||||
<string name="sk_recent_searches_placeholder">Type iets om te beginnen met zoeken</string>
|
||||
<string name="sk_recent_searches_placeholder">Type om te beginnen met zoeken</string>
|
||||
<string name="sk_remove_follower_confirm">Verwijder %s als volger door te blokkeren en meteen te de-blokkeren\?</string>
|
||||
<string name="sk_post_edited">bewerkt</string>
|
||||
<string name="sk_notify_update">Bewerkt een geboost bericht</string>
|
||||
<string name="sk_list">Lijst</string>
|
||||
<string name="sk_icon_star">Ster</string>
|
||||
<string name="sk_timeline_posts">Berichten</string>
|
||||
<string name="sk_timelines_add">Toevoegen</string>
|
||||
<string name="sk_alt_text_missing_title">Ontbrekende alt text</string>
|
||||
<string name="sk_alt_text_missing">Minstens één bijlage bevat geen omschrijving.</string>
|
||||
<string name="sk_publish_anyway">Toch publiceren</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Alt text herinnering uitschakelen</string>
|
||||
<string name="sk_notify_posts_info_banner">Als je meldingen voor berichten van bepaalde mensen inschakelt, dan zie je hier hun nieuwe berichten.</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_city">Stad</string>
|
||||
<string name="sk_icon_cat">Kat</string>
|
||||
<string name="sk_icon_dog">Hond</string>
|
||||
<string name="sk_icon_turtle">Schildpad</string>
|
||||
<string name="sk_icon_balloon">Ballon</string>
|
||||
<string name="sk_icon_image">Plaatje</string>
|
||||
<string name="sk_icon_bot">Bot</string>
|
||||
<string name="sk_icon_language">Taal</string>
|
||||
<string name="sk_icon_location">Locatie</string>
|
||||
<string name="sk_icon_megaphone">Megafoon</string>
|
||||
<string name="sk_icon_microphone">Microfoon</string>
|
||||
<string name="sk_icon_microscope">Microscoop</string>
|
||||
<string name="sk_icon_keyboard">Keyboard</string>
|
||||
<string name="sk_icon_coffee">Koffie</string>
|
||||
<string name="sk_icon_laugh">Lach</string>
|
||||
<string name="sk_edit_timeline">Bewerk tijdlijn</string>
|
||||
<string name="sk_icon_color_palette">Kleurpalet</string>
|
||||
<string name="sk_icon_tag">Label</string>
|
||||
<string name="sk_icon_stethoscope">Stethoscoop</string>
|
||||
<string name="sk_icon_weather">Weer</string>
|
||||
<string name="sk_icon_games">Spellen</string>
|
||||
<string name="sk_icon_code">Code</string>
|
||||
<string name="sk_icon_light_bulb">Gloeilamp</string>
|
||||
<string name="sk_icon_train">Trein</string>
|
||||
<string name="sk_icon_leaves">Bladeren</string>
|
||||
<string name="sk_icon_sport">Sport</string>
|
||||
<string name="sk_icon_music">Muziek</string>
|
||||
<string name="sk_icon_people">Mensen</string>
|
||||
<string name="sk_icon_health">Gezondheid</string>
|
||||
<string name="sk_icon_important">Belangrijk</string>
|
||||
<string name="sk_icon_shield">Schild</string>
|
||||
<string name="sk_icon_book">Boek</string>
|
||||
<string name="sk_icon_bicycle">Fiets</string>
|
||||
<string name="sk_icon_math_formula">Formule</string>
|
||||
<string name="sk_icon_backpack">Rugzak</string>
|
||||
<string name="sk_icon_fire">Vuur</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gavel">Hamer</string>
|
||||
<string name="sk_icon_headphones">Koptelefoon</string>
|
||||
<string name="sk_icon_human">Mens</string>
|
||||
<string name="sk_icon_globe">Wereldbol</string>
|
||||
<string name="sk_attach_file">Voeg bestand toe</string>
|
||||
<string name="sk_edit_timelines">Bewerk tijdlijnen</string>
|
||||
<string name="sk_notification_type_update">Bewerkte berichten</string>
|
||||
<string name="sk_timelines">Tijdlijnen</string>
|
||||
<string name="sk_timeline">Tijdlijn</string>
|
||||
<string name="sk_hashtag">Hashtag</string>
|
||||
<string name="sk_pin_timeline">Zet tijdlijn vast</string>
|
||||
<string name="sk_unpin_timeline">Maak tijdlijn los</string>
|
||||
<string name="sk_remove">Verwijder</string>
|
||||
<string name="sk_timeline_icon">Icoon</string>
|
||||
<string name="sk_icon_heart">Hart</string>
|
||||
<string name="sk_icon_rabbit">Konijn</string>
|
||||
<string name="sk_icon_news">Nieuws</string>
|
||||
<string name="sk_icon_academic_cap">Afstudeerhoed</string>
|
||||
<string name="sk_icon_chat">Chat</string>
|
||||
<string name="sk_icon_map">Kaart</string>
|
||||
<string name="sk_icon_briefcase">Koffer</string>
|
||||
<string name="sk_icon_bug">Insect</string>
|
||||
<string name="sk_icon_gauge">Meter</string>
|
||||
<string name="sk_icon_aperture">Diafragma</string>
|
||||
<string name="sk_icon_clapper_board">Filmklapper</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_icon_pin">Punaise</string>
|
||||
<string name="sk_searching">Zoeken…</string>
|
||||
<string name="sk_no_results">Geen resultaten</string>
|
||||
<string name="sk_save_draft">Concept opslaan\?</string>
|
||||
<string name="sk_no_alt_text">Geen alt tekst beschikbaar</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicator voor alt tekst</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicator voor ontbrekende alt tekst</string>
|
||||
<string name="sk_updater_enable_pre_releases">Pre-releases inschakelen</string>
|
||||
<string name="sk_save_draft_message">Wil je de wijzingen aan dit concept opslaan of dit nu publiceren\?</string>
|
||||
<string name="sk_schedule_or_draft">Inplannen of concept</string>
|
||||
</resources>
|
||||
@@ -31,7 +31,7 @@
|
||||
<string name="sk_follow_requests">Prośby o obserwację</string>
|
||||
<string name="sk_accept_follow_request">Zaakceptuj prośby o obserwację</string>
|
||||
<string name="sk_reject_follow_request">Odrzuć prośby o obserwację</string>
|
||||
<string name="sk_lists_with_user">Edytuj listy z %s</string>
|
||||
<string name="sk_lists_with_user">Listy z %s</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">Zawsze odkrywaj ostrzeżenia o zawartości</string>
|
||||
<string name="sk_disable_marquee">Wyłącz tekst przewijany w paskach tytułowych</string>
|
||||
<string name="sk_settings_contribute">Wspomóż Megalodon</string>
|
||||
@@ -143,4 +143,109 @@
|
||||
<string name="sk_edit_list_title">Edytuj listę</string>
|
||||
<string name="sk_your_lists">Twoje listy</string>
|
||||
<string name="sk_recent_searches_placeholder">Wpisz coś, aby rozpocząć wyszukiwanie</string>
|
||||
<string name="sk_do_remove_follower">Usuń</string>
|
||||
<string name="sk_remove_follower_success">Z powodzeniem usunięto obserwatora</string>
|
||||
<string name="sk_changelog">Lista zmian</string>
|
||||
<string name="sk_alt_text_missing">Przynajmniej jeden z załączników nie posiada opisu.</string>
|
||||
<string name="sk_alt_text_missing_title">Brakujący tekst alternatywny</string>
|
||||
<string name="sk_publish_anyway">Opublikuj mimo tego</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Wyłącz przypomnienie o dodawaniu opisu</string>
|
||||
<string name="sk_edit_timelines">Edytuj osi czasu</string>
|
||||
<string name="sk_alt_button">OPIS</string>
|
||||
<string name="sk_post_edited">edytowano</string>
|
||||
<string name="sk_notification_type_update">Edytowano wpis</string>
|
||||
<string name="sk_notify_posts_info_banner">Jeśli włączysz powiadomienie o wpisach dla kogoś, ich nowe wpisy pojawią się tutaj.</string>
|
||||
<string name="sk_timelines">Osie czasu</string>
|
||||
<string name="sk_timeline_posts">Wpisy</string>
|
||||
<string name="sk_timelines_add">Dodaj</string>
|
||||
<string name="sk_timeline">Oś czasu</string>
|
||||
<string name="sk_list">Lista</string>
|
||||
<string name="sk_hashtag">Hasztag</string>
|
||||
<string name="sk_pin_timeline">Przypnij oś czasu</string>
|
||||
<string name="sk_unpin_timeline">Odepnij oś czasu</string>
|
||||
<string name="sk_pinned_timeline">Przypięto do widoku głównego</string>
|
||||
<string name="sk_unpinned_timeline">Odpięto od widoku głównego</string>
|
||||
<string name="sk_remove">Usuń</string>
|
||||
<string name="sk_timeline_icon">Ikona</string>
|
||||
<string name="sk_icon_heart">Serce</string>
|
||||
<string name="sk_icon_star">Gwiazda</string>
|
||||
<string name="sk_edit_timeline">Edytuj oś czasu</string>
|
||||
<string name="sk_icon_city">Miasto</string>
|
||||
<string name="sk_icon_cat">Kot</string>
|
||||
<string name="sk_icon_dog">Pies</string>
|
||||
<string name="sk_icon_rabbit">Królik</string>
|
||||
<string name="sk_icon_turtle">Żółw</string>
|
||||
<string name="sk_icon_balloon">Balon</string>
|
||||
<string name="sk_icon_image">Obrazek</string>
|
||||
<string name="sk_icon_bot">Bot</string>
|
||||
<string name="sk_icon_language">Język</string>
|
||||
<string name="sk_icon_location">Lokacja</string>
|
||||
<string name="sk_icon_megaphone">Megafon</string>
|
||||
<string name="sk_icon_microphone">Mikrofon</string>
|
||||
<string name="sk_icon_microscope">Mikroskop</string>
|
||||
<string name="sk_icon_keyboard">Klawiatura muzyczna</string>
|
||||
<string name="sk_icon_coffee">Kawa</string>
|
||||
<string name="sk_icon_laugh">Śmiech</string>
|
||||
<string name="sk_icon_news">Wiadomości</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_color_palette">Paleta kolorów</string>
|
||||
<string name="sk_icon_academic_cap">Czapka studencka</string>
|
||||
<string name="sk_icon_tag">Tag</string>
|
||||
<string name="sk_attach_file">Załącz plik</string>
|
||||
<string name="sk_icon_stethoscope">Stetoskop</string>
|
||||
<string name="sk_icon_weather">Pogoda</string>
|
||||
<string name="sk_icon_games">Gry</string>
|
||||
<string name="sk_icon_code">Kod</string>
|
||||
<string name="sk_icon_light_bulb">Żarówka</string>
|
||||
<string name="sk_icon_train">Pociąg</string>
|
||||
<string name="sk_icon_clapper_board">Klaps</string>
|
||||
<string name="sk_icon_leaves">Liście</string>
|
||||
<string name="sk_icon_sport">Sport</string>
|
||||
<string name="sk_icon_aperture">Apertura</string>
|
||||
<string name="sk_icon_music">Muzyka</string>
|
||||
<string name="sk_icon_people">Ludzie</string>
|
||||
<string name="sk_icon_important">Ważne</string>
|
||||
<string name="sk_icon_chat">Czat</string>
|
||||
<string name="sk_icon_shield">Tarcza</string>
|
||||
<string name="sk_icon_book">Książka</string>
|
||||
<string name="sk_icon_bicycle">Rower</string>
|
||||
<string name="sk_icon_map">Mapa</string>
|
||||
<string name="sk_icon_math_formula">Wzór matematyczny</string>
|
||||
<string name="sk_icon_backpack">Plecak</string>
|
||||
<string name="sk_icon_briefcase">Teczka</string>
|
||||
<string name="sk_icon_fire">Ogień</string>
|
||||
<string name="sk_icon_bug">Robak</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_gauge">Miernik</string>
|
||||
<string name="sk_icon_headphones">Słuchawki</string>
|
||||
<string name="sk_icon_human">Człowiek</string>
|
||||
<string name="sk_icon_globe">Glob</string>
|
||||
<string name="sk_notify_update">Edytuje reblogowany wpis</string>
|
||||
<string name="sk_icon_pin">Pinezka</string>
|
||||
<string name="sk_remove_follower">Usuń obserwującego</string>
|
||||
<string name="sk_remove_follower_confirm">Usunąć %s z obserwatorów, poprzez zablokowanie i natychmiastowe odblokowanie ich\?</string>
|
||||
<string name="sk_icon_health">Zdrowie</string>
|
||||
<string name="sk_icon_gavel">Młotek</string>
|
||||
<string name="sk_no_results">Brak wyników</string>
|
||||
<string name="sk_save_draft_message">Czy chcesz zapisać zmiany w tej kopii roboczej czy ją opublikować\?</string>
|
||||
<string name="sk_no_alt_text">Brak opisu alternatywnego</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indykator opisu</string>
|
||||
<string name="sk_updater_enable_pre_releases">Włącz wersje testowe</string>
|
||||
<string name="sk_searching">Szukanie…</string>
|
||||
<string name="sk_save_draft">Zapisać kopię roboczą\?</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indykator brakującego opisu</string>
|
||||
<string name="sk_separator">·</string>
|
||||
<string name="sk_local_only">Tylko-lokalne</string>
|
||||
<string name="sk_settings_support_local_only">Serwer zezwala na publikowanie w trybie lokalnym</string>
|
||||
<string name="sk_settings_glitch_instance">Tryb lokalny Glitch</string>
|
||||
<string name="sk_inline_local_only">tylko-lokalnie</string>
|
||||
<string name="sk_inline_direct">tylko-oznaczeni</string>
|
||||
<string name="sk_settings_glitch_mode_explanation">Włącz to jeśli twoja domowa instancja korzysta z Glitch. Nie jest to wymagane w przypadku Hometown oraz Akkoma.</string>
|
||||
<string name="sk_signed_up">zarejestrowano</string>
|
||||
<string name="sk_reported">zareportowano</string>
|
||||
<string name="sk_sign_ups">Rejestrujący się użytkownicy</string>
|
||||
<string name="sk_new_reports">Nowe raporty</string>
|
||||
<string name="sk_settings_see_new_posts_button">Przycisk \"Pokaż nowe wpisy\"</string>
|
||||
<string name="sk_instance_features">Funkcje instancji</string>
|
||||
<string name="sk_settings_local_only_explanation">Twoja instancja domowa musi wspierać publikowanie w trybie lokalnym. Większość zmodyfikowanych wersji Mastodona to wspiera, ale podstawowy Mastodon nie.</string>
|
||||
</resources>
|
||||
@@ -1,35 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="sk_confirm_delete_and_redraft">Você tem certeza que deseja excluir e reescrever esta postagem\?</string>
|
||||
<string name="sk_confirm_delete_and_redraft">Você tem certeza que deseja excluir e reescrever esta publicação\?</string>
|
||||
<string name="sk_delete_and_redraft">Excluir e reescrever</string>
|
||||
<string name="sk_confirm_delete_and_redraft_title">Excluir e reescrever postagem</string>
|
||||
<string name="sk_confirm_delete_and_redraft_title">Excluir e reescrever publicação</string>
|
||||
<string name="sk_pin_post">Fixar no perfil</string>
|
||||
<string name="sk_confirm_pin_post_title">Fixar postagem no perfil</string>
|
||||
<string name="sk_confirm_pin_post">Você deseja fixar esta postagem em seu perfil\?</string>
|
||||
<string name="sk_confirm_pin_post_title">Fixar publicação no perfil</string>
|
||||
<string name="sk_confirm_pin_post">Você deseja fixar esta publicação em seu perfil\?</string>
|
||||
<string name="sk_pinning">Fixando publicação…</string>
|
||||
<string name="sk_app_name">Megalodon</string>
|
||||
<string name="sk_pinned_posts">Fixado</string>
|
||||
<string name="sk_unpin_post">Desafixar do perfil</string>
|
||||
<string name="sk_confirm_unpin_post_title">Desafixar postagem do perfil</string>
|
||||
<string name="sk_confirm_unpin_post">Você tem certeza que deseja desafixar esta postagem\?</string>
|
||||
<string name="sk_unpinning">Desafixando postagem…</string>
|
||||
<string name="sk_confirm_unpin_post_title">Desafixar publicação do perfil</string>
|
||||
<string name="sk_confirm_unpin_post">Você tem certeza que deseja desafixar esta publicação\?</string>
|
||||
<string name="sk_unpinning">Desafixando publicação…</string>
|
||||
<string name="sk_image_description">Descrição da imagem</string>
|
||||
<string name="sk_settings_show_replies">Mostrar respostas</string>
|
||||
<string name="sk_settings_show_boosts">Mostrar boosts</string>
|
||||
<string name="sk_settings_load_new_posts">Carregar novas postagens automaticamente</string>
|
||||
<string name="sk_settings_load_new_posts">Carregar novas publicações automaticamente</string>
|
||||
<string name="sk_mark_media_as_sensitive">Marcar mídia como sensível</string>
|
||||
<string name="sk_settings_app_version">Megalodon v%1$s (%2$d)</string>
|
||||
<string name="sk_lists_with_user">Editar listas com %s</string>
|
||||
<string name="sk_user_post_notifications_on">Ativar as notificações de postagem para %s</string>
|
||||
<string name="sk_lists_with_user">Listas com %s</string>
|
||||
<string name="sk_user_post_notifications_on">Ativar as notificações de publicação para %s</string>
|
||||
<string name="sk_federated_timeline">Federação</string>
|
||||
<string name="sk_federated_timeline_info_banner">Estas são as postagens mais recentes das pessoas em sua federação.</string>
|
||||
<string name="sk_federated_timeline_info_banner">Estas são as publicações mais recentes das pessoas em sua federação.</string>
|
||||
<string name="sk_update_available">Megalodon %s está pronto para baixar.</string>
|
||||
<string name="sk_update_ready">Megalodon %s foi baixado e está pronto para instalar.</string>
|
||||
<string name="sk_check_for_update">Verificar se há atualizações</string>
|
||||
<string name="sk_no_update_available">Nenhuma atualização disponível</string>
|
||||
<string name="sk_list_timelines">Listas</string>
|
||||
<string name="sk_follow_requests">Solicitações para seguir</string>
|
||||
<string name="sk_user_post_notifications_off">Desativar as notificações de postagem para %s</string>
|
||||
<string name="sk_user_post_notifications_off">Desativar as notificações de publicação para %s</string>
|
||||
<string name="sk_accept_follow_request">Aceitar solicitação para seguir</string>
|
||||
<string name="sk_reject_follow_request">Recusar solicitação para seguir</string>
|
||||
<string name="sk_settings_always_reveal_content_warnings">Sempre revelar avisos de conteúdo</string>
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="sk_settings_rules">Regras</string>
|
||||
<string name="sk_tabs_disable_swipe">Desativar deslizamento entre abas</string>
|
||||
<string name="sk_settings_profile">Configurar perfil</string>
|
||||
<string name="sk_settings_posting">Preferências de postagem</string>
|
||||
<string name="sk_settings_posting">Preferências de publicação</string>
|
||||
<string name="sk_settings_filters">Configurar filtros</string>
|
||||
<string name="sk_delete_notification_confirm">Você tem certeza que deseja excluir esta notificação\?</string>
|
||||
<string name="sk_delete_notification">Excluir notificação</string>
|
||||
@@ -81,7 +81,7 @@
|
||||
<string name="sk_undo_reblog">Desfazer reblog</string>
|
||||
<string name="sk_reblog_with_visibility">Reblogar com visibilidade</string>
|
||||
<string name="sk_hashtags_you_follow">Hashtags que você segue</string>
|
||||
<string name="sk_copy_link_to_post">Copiar link da postagem</string>
|
||||
<string name="sk_copy_link_to_post">Copiar link da publicação</string>
|
||||
<string name="sk_loading_resource_on_instance_title">Procurando em %s</string>
|
||||
<string name="sk_open_with_account">Abrir com outra conta</string>
|
||||
<string name="sk_resource_not_found">Recurso não foi encontrado</string>
|
||||
@@ -98,18 +98,18 @@
|
||||
<string name="sk_reblog_as">Reblogar com outra conta</string>
|
||||
<string name="sk_schedule">Agendar</string>
|
||||
<string name="sk_draft">Rascunho</string>
|
||||
<string name="sk_unsent_posts">Postagens não enviadas</string>
|
||||
<string name="sk_unsent_posts">Publicações não enviadas</string>
|
||||
<string name="sk_confirm_delete_draft_title">Excluir rascunho</string>
|
||||
<string name="sk_confirm_delete_draft">Você tem certeza que deseja excluir este rascunho\?</string>
|
||||
<string name="sk_confirm_delete_scheduled_post_title">Excluir postagem agendada</string>
|
||||
<string name="sk_confirm_delete_scheduled_post">Você tem certeza que deseja excluir esta postagem agendada\?</string>
|
||||
<string name="sk_compose_draft">A postagem será salva como rascunho.</string>
|
||||
<string name="sk_confirm_delete_scheduled_post_title">Excluir publicação agendada</string>
|
||||
<string name="sk_confirm_delete_scheduled_post">Você tem certeza que deseja excluir esta publicação agendada\?</string>
|
||||
<string name="sk_compose_draft">A publicação será salva como rascunho.</string>
|
||||
<string name="sk_compose_scheduled">Agendado para</string>
|
||||
<string name="sk_draft_saved">Rascunho salvo</string>
|
||||
<string name="sk_post_scheduled">Postagem agendada</string>
|
||||
<string name="sk_post_scheduled">Publicação agendada</string>
|
||||
<string name="sk_forward_report_to">Encaminhar para %s</string>
|
||||
<string name="sk_scheduled_too_soon_title">O horário agendado está muito próximo</string>
|
||||
<string name="sk_scheduled_too_soon">A postagem deve ser agendada com pelo menos 10 minutos de antecedência.</string>
|
||||
<string name="sk_scheduled_too_soon">A publicação deve ser agendada com pelo menos 10 minutos de antecedência.</string>
|
||||
<string name="sk_confirm_save_draft">Salvar rascunho\?</string>
|
||||
<string name="sk_confirm_save_changes">Salvar alterações\?</string>
|
||||
<string name="sk_mark_as_draft">Marcar como rascunho</string>
|
||||
@@ -142,9 +142,97 @@
|
||||
<string name="sk_timeline_home">Início</string>
|
||||
<string name="sk_timeline_local">Local</string>
|
||||
<string name="sk_timeline_federated">Federação</string>
|
||||
<string name="sk_recent_searches_placeholder">Digite algo para iniciar a busca</string>
|
||||
<string name="sk_recent_searches_placeholder">Digite para começar a pesquisar</string>
|
||||
<string name="sk_remove_follower_confirm">Remover %s como seguidor bloqueando e desbloqueando em seguida\?</string>
|
||||
<string name="sk_do_remove_follower">Remover</string>
|
||||
<string name="sk_remove_follower_success">Seguidor removido com sucesso</string>
|
||||
<string name="sk_remove_follower">Remover como seguidor</string>
|
||||
<string name="sk_publish_anyway">Publicar mesmo assim</string>
|
||||
<string name="sk_notify_posts_info_banner">Se você ativar as notificações de publicação para algumas pessoas, as novas publicações delas aparecerão aqui.</string>
|
||||
<string name="sk_timelines_add">Adicionar</string>
|
||||
<string name="sk_list">Lista</string>
|
||||
<string name="sk_hashtag">Hashtag</string>
|
||||
<string name="sk_timeline_icon">Ícone</string>
|
||||
<string name="sk_icon_heart">Coração</string>
|
||||
<string name="sk_icon_star">Estrela</string>
|
||||
<string name="sk_icon_city">Cidade</string>
|
||||
<string name="sk_icon_cat">Gato</string>
|
||||
<string name="sk_icon_rabbit">Coelho</string>
|
||||
<string name="sk_icon_turtle">Tartaruga</string>
|
||||
<string name="sk_icon_balloon">Balão</string>
|
||||
<string name="sk_icon_image">Imagem</string>
|
||||
<string name="sk_icon_bot">Robô</string>
|
||||
<string name="sk_icon_location">Localização</string>
|
||||
<string name="sk_icon_megaphone">Megafone</string>
|
||||
<string name="sk_icon_microphone">Microfone</string>
|
||||
<string name="sk_icon_microscope">Microscópio</string>
|
||||
<string name="sk_icon_coffee">Café</string>
|
||||
<string name="sk_icon_color_palette">Paleta de cores</string>
|
||||
<string name="sk_icon_stethoscope">Estetoscópio</string>
|
||||
<string name="sk_icon_weather">Clima</string>
|
||||
<string name="sk_icon_games">Jogos</string>
|
||||
<string name="sk_icon_code">Código</string>
|
||||
<string name="sk_icon_light_bulb">Lâmpada</string>
|
||||
<string name="sk_icon_leaves">Folhas</string>
|
||||
<string name="sk_icon_sport">Esporte</string>
|
||||
<string name="sk_icon_music">Música</string>
|
||||
<string name="sk_icon_people">Pessoas</string>
|
||||
<string name="sk_icon_health">Saúde</string>
|
||||
<string name="sk_icon_important">Importante</string>
|
||||
<string name="sk_icon_shield">Escudo</string>
|
||||
<string name="sk_icon_book">Livro</string>
|
||||
<string name="sk_icon_bicycle">Bicicleta</string>
|
||||
<string name="sk_icon_map">Mapa</string>
|
||||
<string name="sk_icon_math_formula">Fórmula matemática</string>
|
||||
<string name="sk_icon_backpack">Mochila</string>
|
||||
<string name="sk_icon_fire">Fogo</string>
|
||||
<string name="sk_icon_pizza">Pizza</string>
|
||||
<string name="sk_icon_human">Humano</string>
|
||||
<string name="sk_icon_globe">Globo</string>
|
||||
<string name="sk_attach_file">Anexar arquivo</string>
|
||||
<string name="sk_post_edited">editado</string>
|
||||
<string name="sk_notification_type_update">Publicações editadas</string>
|
||||
<string name="sk_notify_update">Edita uma publicação reblogada</string>
|
||||
<string name="sk_icon_train">Trem</string>
|
||||
<string name="sk_alt_text_missing_title">Sem texto descritivo</string>
|
||||
<string name="sk_alt_text_missing">Pelo menos um anexo não contém uma descrição.</string>
|
||||
<string name="sk_settings_disable_alt_text_reminder">Desativar lembrete de texto descritivo</string>
|
||||
<string name="sk_remove">Remover</string>
|
||||
<string name="sk_searching">Procurando…</string>
|
||||
<string name="sk_no_results">Sem resultados</string>
|
||||
<string name="sk_save_draft">Salvar rascunho\?</string>
|
||||
<string name="sk_save_draft_message">Você deseja salvar as alterações do rascunho ou publicar agora\?</string>
|
||||
<string name="sk_no_alt_text">Nenhuma descrição disponível</string>
|
||||
<string name="sk_icon_dog">Cachorro</string>
|
||||
<string name="sk_icon_pi">Pi</string>
|
||||
<string name="sk_icon_news">Notícias</string>
|
||||
<string name="sk_icon_laugh">Riso</string>
|
||||
<string name="sk_icon_gavel">Martelo</string>
|
||||
<string name="sk_icon_briefcase">Pasta</string>
|
||||
<string name="sk_icon_chat">Bate-papo</string>
|
||||
<string name="sk_icon_clapper_board">Claquete</string>
|
||||
<string name="sk_alt_button">ALT</string>
|
||||
<string name="sk_updater_enable_pre_releases">Ativar pré-lançamentos</string>
|
||||
<string name="sk_changelog">Novidades</string>
|
||||
<string name="sk_timelines">Linhas do tempo</string>
|
||||
<string name="sk_pin_timeline">Fixar linha do tempo</string>
|
||||
<string name="sk_unpin_timeline">Desafixar linha do tempo</string>
|
||||
<string name="sk_pinned_timeline">Fixado ao início</string>
|
||||
<string name="sk_unpinned_timeline">Desafixado do início</string>
|
||||
<string name="sk_timeline_posts">Publicações</string>
|
||||
<string name="sk_timeline">Linha do tempo</string>
|
||||
<string name="sk_icon_language">Idioma</string>
|
||||
<string name="sk_icon_academic_cap">Capelo</string>
|
||||
<string name="sk_icon_tag">Etiqueta</string>
|
||||
<string name="sk_icon_keyboard">Teclado</string>
|
||||
<string name="sk_icon_headphones">Fones de ouvido</string>
|
||||
<string name="sk_icon_aperture">Abertura</string>
|
||||
<string name="sk_edit_timeline">Editar linha do tempo</string>
|
||||
<string name="sk_icon_gauge">Medidor</string>
|
||||
<string name="sk_icon_bug">Besouro</string>
|
||||
<string name="sk_edit_timelines">Editar linhas do tempo</string>
|
||||
<string name="sk_icon_pin">Alfinete</string>
|
||||
<string name="sk_settings_show_alt_indicator">Indicador para textos descritivos</string>
|
||||
<string name="sk_settings_show_no_alt_indicator">Indicador para ausência de textos descritivos</string>
|
||||
<string name="sk_instance_features">Recursos da instância</string>
|
||||
</resources>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user