Compare commits
2 Commits
1.1.4+fork
...
bugfix/#29
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f17eb9ebdc | ||
|
|
cca2fc4199 |
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId "org.joinmastodon.android.moshinda"
|
applicationId "org.joinmastodon.android.moshinda"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 86
|
versionCode 85
|
||||||
versionName "1.1.4+fork.86.moshinda"
|
versionName "1.1.4+fork.85.moshinda"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
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"
|
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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# lists.d Mastodon Blocklist (c) 2022 Greyhat Academy LICENSED UNDER: CC-BY-NC-SA 4.0
|
|
||||||
# https://raw.githubusercontent.com/greyhat-academy/lists.d/main/mastodon.domains.block.list.tsv
|
|
||||||
# This list contains domains of toxic mastodon instances
|
|
||||||
# Last-Modified: 1672044500
|
|
||||||
|
|
||||||
# gab - a neonazi social network
|
|
||||||
gab.ai
|
|
||||||
gab.com
|
|
||||||
gab.protohype.net
|
|
||||||
|
|
||||||
# consequence-free speech
|
|
||||||
social.unzensiert.to
|
|
||||||
freeatlantis.com
|
|
||||||
|
|
||||||
# reactionary bigotry and hatespeech against magrinalized groups
|
|
||||||
poa.st
|
|
||||||
freespeechextremist.com
|
|
||||||
rdrama.cc
|
|
||||||
outpoa.st
|
|
||||||
anime.website
|
|
||||||
gameliberty.club
|
|
||||||
social.byoblu.com
|
|
||||||
yggdrasil.social
|
|
||||||
smuglo.li
|
|
||||||
dogeposting.social
|
|
||||||
unsafe.space
|
|
||||||
freezepeach.xyz
|
|
||||||
|
|
||||||
# + CSAM
|
|
||||||
rojogato.com
|
|
||||||
|
|
||||||
# antivaxxer shitposting & fearmongering
|
|
||||||
shadowsocial.org
|
|
||||||
|
|
||||||
# Kiwifarms
|
|
||||||
kiwifarms.net
|
|
||||||
kiwifarms.cc
|
|
||||||
kiwifarms.is
|
|
||||||
kiwifarms.pleroma.net
|
|
||||||
|
@@ -53,10 +53,7 @@ public class ExternalShareActivity extends FragmentStackActivity{
|
|||||||
Intent intent=getIntent();
|
Intent intent=getIntent();
|
||||||
StringBuilder builder=new StringBuilder();
|
StringBuilder builder=new StringBuilder();
|
||||||
String subject = "";
|
String subject = "";
|
||||||
if (intent.hasExtra(Intent.EXTRA_SUBJECT)) {
|
if (intent.hasExtra(Intent.EXTRA_SUBJECT)) builder.append(subject = intent.getStringExtra(Intent.EXTRA_SUBJECT)).append("\n\n");
|
||||||
subject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
|
|
||||||
if (!subject.isBlank()) builder.append(subject).append("\n\n");
|
|
||||||
}
|
|
||||||
if (intent.hasExtra(Intent.EXTRA_TEXT)) builder.append(intent.getStringExtra(Intent.EXTRA_TEXT)).append("\n");
|
if (intent.hasExtra(Intent.EXTRA_TEXT)) builder.append(intent.getStringExtra(Intent.EXTRA_TEXT)).append("\n");
|
||||||
String text=builder.toString();
|
String text=builder.toString();
|
||||||
List<Uri> mediaUris;
|
List<Uri> mediaUris;
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ import org.joinmastodon.android.fragments.HomeFragment;
|
|||||||
import org.joinmastodon.android.fragments.ProfileFragment;
|
import org.joinmastodon.android.fragments.ProfileFragment;
|
||||||
import org.joinmastodon.android.fragments.ThreadFragment;
|
import org.joinmastodon.android.fragments.ThreadFragment;
|
||||||
import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
|
import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
|
||||||
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
|
import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
|
||||||
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
|
|
||||||
import org.joinmastodon.android.model.Notification;
|
import org.joinmastodon.android.model.Notification;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.joinmastodon.android.updater.GithubSelfUpdater;
|
import org.joinmastodon.android.updater.GithubSelfUpdater;
|
||||||
@@ -34,7 +33,7 @@ public class MainActivity extends FragmentStackActivity{
|
|||||||
|
|
||||||
if(savedInstanceState==null){
|
if(savedInstanceState==null){
|
||||||
if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){
|
if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){
|
||||||
showFragmentClearingBackStack(new CustomWelcomeFragment());
|
showFragmentClearingBackStack(new CustomLoginFragment());
|
||||||
}else{
|
}else{
|
||||||
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
||||||
AccountSession session;
|
AccountSession session;
|
||||||
|
|||||||
@@ -12,14 +12,11 @@ import com.google.gson.JsonParser;
|
|||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
|
||||||
import org.joinmastodon.android.BuildConfig;
|
import org.joinmastodon.android.BuildConfig;
|
||||||
import org.joinmastodon.android.MastodonApp;
|
|
||||||
import org.joinmastodon.android.api.gson.IsoInstantTypeAdapter;
|
import org.joinmastodon.android.api.gson.IsoInstantTypeAdapter;
|
||||||
import org.joinmastodon.android.api.gson.IsoLocalDateTypeAdapter;
|
import org.joinmastodon.android.api.gson.IsoLocalDateTypeAdapter;
|
||||||
import org.joinmastodon.android.api.session.AccountSession;
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -50,22 +47,9 @@ public class MastodonAPIController{
|
|||||||
private static OkHttpClient httpClient=new OkHttpClient.Builder().build();
|
private static OkHttpClient httpClient=new OkHttpClient.Builder().build();
|
||||||
|
|
||||||
private AccountSession session;
|
private AccountSession session;
|
||||||
private static List<String> badDomains = new ArrayList<>();
|
|
||||||
|
|
||||||
static{
|
static{
|
||||||
thread.start();
|
thread.start();
|
||||||
try {
|
|
||||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(
|
|
||||||
MastodonApp.context.getAssets().open("blocks.tsv")
|
|
||||||
));
|
|
||||||
String line;
|
|
||||||
while ((line = reader.readLine()) != null) {
|
|
||||||
if (line.isBlank() || line.startsWith("#")) continue;
|
|
||||||
badDomains.add(line.toLowerCase().trim());
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MastodonAPIController(@Nullable AccountSession session){
|
public MastodonAPIController(@Nullable AccountSession session){
|
||||||
@@ -73,11 +57,8 @@ public class MastodonAPIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public <T> void submitRequest(final MastodonAPIRequest<T> req){
|
public <T> void submitRequest(final MastodonAPIRequest<T> req){
|
||||||
final String host = req.getURL().getHost().toLowerCase();
|
|
||||||
final boolean isBad = badDomains.stream().anyMatch(host::endsWith);
|
|
||||||
thread.postRunnable(()->{
|
thread.postRunnable(()->{
|
||||||
try{
|
try{
|
||||||
if (isBad) throw new IllegalArgumentException();
|
|
||||||
if(req.canceled)
|
if(req.canceled)
|
||||||
return;
|
return;
|
||||||
Request.Builder builder=new Request.Builder()
|
Request.Builder builder=new Request.Builder()
|
||||||
|
|||||||
@@ -162,8 +162,6 @@ public class PushSubscriptionManager{
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(PushSubscription result){
|
public void onSuccess(PushSubscription result){
|
||||||
MastodonAPIController.runInBackground(()->{
|
MastodonAPIController.runInBackground(()->{
|
||||||
result.serverKey=result.serverKey.replace('/','_');
|
|
||||||
result.serverKey=result.serverKey.replace('+','-');
|
|
||||||
serverKey=deserializeRawPublicKey(Base64.decode(result.serverKey, Base64.URL_SAFE));
|
serverKey=deserializeRawPublicKey(Base64.decode(result.serverKey, Base64.URL_SAFE));
|
||||||
|
|
||||||
AccountSession session=AccountSessionManager.getInstance().tryGetAccount(accountID);
|
AccountSession session=AccountSessionManager.getInstance().tryGetAccount(accountID);
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
package org.joinmastodon.android.api.requests.announcements;
|
|
||||||
|
|
||||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
|
||||||
|
|
||||||
public class DismissAnnouncement extends MastodonAPIRequest<Object>{
|
|
||||||
public DismissAnnouncement(String id){
|
|
||||||
super(HttpMethod.POST, "/announcements/" + id + "/dismiss", Object.class);
|
|
||||||
setRequestBody(new Object());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package org.joinmastodon.android.api.requests.announcements;
|
|
||||||
|
|
||||||
import com.google.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
|
||||||
import org.joinmastodon.android.model.Announcement;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class GetAnnouncements extends MastodonAPIRequest<List<Announcement>> {
|
|
||||||
public GetAnnouncements(boolean withDismissed) {
|
|
||||||
super(MastodonAPIRequest.HttpMethod.GET, "/announcements", new TypeToken<>(){});
|
|
||||||
addQueryParameter("with_dismissed", withDismissed ? "true" : "false");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
package org.joinmastodon.android.fragments;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.ImageButton;
|
|
||||||
|
|
||||||
import com.squareup.otto.Subscribe;
|
|
||||||
|
|
||||||
import org.joinmastodon.android.E;
|
|
||||||
import org.joinmastodon.android.R;
|
|
||||||
import org.joinmastodon.android.api.requests.announcements.GetAnnouncements;
|
|
||||||
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
|
|
||||||
import org.joinmastodon.android.api.requests.statuses.GetScheduledStatuses;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSession;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
|
||||||
import org.joinmastodon.android.events.ScheduledStatusCreatedEvent;
|
|
||||||
import org.joinmastodon.android.events.ScheduledStatusDeletedEvent;
|
|
||||||
import org.joinmastodon.android.model.Account;
|
|
||||||
import org.joinmastodon.android.model.Announcement;
|
|
||||||
import org.joinmastodon.android.model.HeaderPaginationList;
|
|
||||||
import org.joinmastodon.android.model.Instance;
|
|
||||||
import org.joinmastodon.android.model.ScheduledStatus;
|
|
||||||
import org.joinmastodon.android.model.Status;
|
|
||||||
import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem;
|
|
||||||
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
|
||||||
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
|
||||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
|
||||||
import org.parceler.Parcels;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import me.grishka.appkit.Nav;
|
|
||||||
import me.grishka.appkit.api.PaginatedList;
|
|
||||||
import me.grishka.appkit.api.SimpleCallback;
|
|
||||||
|
|
||||||
public class AnnouncementsFragment extends BaseStatusListFragment<Announcement> {
|
|
||||||
private Instance instance;
|
|
||||||
private AccountSession session;
|
|
||||||
private List<String> unreadIDs = null;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity){
|
|
||||||
super.onAttach(activity);
|
|
||||||
setTitle(R.string.sk_announcements);
|
|
||||||
session = AccountSessionManager.getInstance().getAccount(accountID);
|
|
||||||
instance = AccountSessionManager.getInstance().getInstanceInfo(session.domain);
|
|
||||||
loadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<StatusDisplayItem> buildDisplayItems(Announcement a) {
|
|
||||||
if(TextUtils.isEmpty(a.content)) return List.of();
|
|
||||||
Account instanceUser = new Account();
|
|
||||||
instanceUser.id = instanceUser.acct = instanceUser.username = session.domain;
|
|
||||||
instanceUser.displayName = instance.title;
|
|
||||||
instanceUser.url = "https://"+session.domain+"/about";
|
|
||||||
instanceUser.avatar = instanceUser.avatarStatic = instance.thumbnail;
|
|
||||||
instanceUser.emojis = List.of();
|
|
||||||
Status fakeStatus = a.toStatus();
|
|
||||||
return List.of(
|
|
||||||
HeaderStatusDisplayItem.fromAnnouncement(a, fakeStatus, instanceUser, this, accountID, this::onMarkAsRead),
|
|
||||||
new TextStatusDisplayItem(a.id, HtmlParser.parse(a.content, a.emojis, a.mentions, a.tags, accountID), this, fakeStatus)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onMarkAsRead(String id) {
|
|
||||||
if (unreadIDs == null) return;
|
|
||||||
unreadIDs.remove(id);
|
|
||||||
if (unreadIDs.size() == 0) setResult(true, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void addAccountToKnown(Announcement s) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemClick(String id) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDataLoaded(List<Announcement> d, boolean more) {
|
|
||||||
unreadIDs = d.stream().filter(a -> !a.read).map(a -> a.id).collect(Collectors.toList());
|
|
||||||
super.onDataLoaded(d, more);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doLoadData(int offset, int count){
|
|
||||||
currentRequest=new GetAnnouncements(true)
|
|
||||||
.setCallback(new SimpleCallback<>(this){
|
|
||||||
@Override
|
|
||||||
public void onSuccess(List<Announcement> result){
|
|
||||||
onDataLoaded(result, false);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.exec(accountID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -307,14 +307,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
|
|
||||||
draftsBtn=view.findViewById(R.id.drafts_btn);
|
draftsBtn=view.findViewById(R.id.drafts_btn);
|
||||||
draftsBtn.setVisibility(View.VISIBLE);
|
draftsBtn.setVisibility(View.VISIBLE);
|
||||||
} else {
|
|
||||||
charCounter=view.findViewById(R.id.char_counter);
|
|
||||||
charCounter.setVisibility(View.VISIBLE);
|
|
||||||
charCounter.setText(String.valueOf(charLimit));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mainEditText=view.findViewById(R.id.toot_text);
|
mainEditText=view.findViewById(R.id.toot_text);
|
||||||
mainEditTextWrap=view.findViewById(R.id.toot_text_wrap);
|
mainEditTextWrap=view.findViewById(R.id.toot_text_wrap);
|
||||||
|
charCounter=view.findViewById(R.id.char_counter);
|
||||||
|
charCounter.setText(String.valueOf(charLimit));
|
||||||
scrollView=view.findViewById(R.id.scroll_view);
|
scrollView=view.findViewById(R.id.scroll_view);
|
||||||
|
|
||||||
selfName=view.findViewById(R.id.self_name);
|
selfName=view.findViewById(R.id.self_name);
|
||||||
@@ -590,10 +588,10 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
scrollView.post(() -> {
|
scrollView.post(() -> {
|
||||||
int bottom = scrollView.getChildAt(0).getBottom();
|
int bottom = scrollView.getChildAt(0).getBottom();
|
||||||
int delta = bottom - (scrollView.getScrollY() + scrollView.getHeight());
|
int delta = bottom - (scrollView.getScrollY() + scrollView.getHeight());
|
||||||
int space = GlobalUserPreferences.reduceMotion ? 0 : Math.min(V.dp(70), delta);
|
int space = GlobalUserPreferences.reduceMotion ? 0 : Math.min(V.dp(120), delta);
|
||||||
scrollView.scrollBy(0, delta - space);
|
scrollView.scrollBy(0, delta - space);
|
||||||
if (!GlobalUserPreferences.reduceMotion) {
|
if (!GlobalUserPreferences.reduceMotion) {
|
||||||
scrollView.postDelayed(() -> scrollView.smoothScrollBy(0, space), 130);
|
scrollView.postDelayed(() -> scrollView.smoothScrollBy(0, space), 100);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -623,7 +621,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
args.putParcelable("profileAccount", Parcels.wrap(replyTo.account));
|
args.putParcelable("profileAccount", Parcels.wrap(replyTo.account));
|
||||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
|
||||||
Nav.go(getActivity(), ProfileFragment.class, args);
|
Nav.go(getActivity(), ProfileFragment.class, args);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -653,10 +650,13 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
else view.findViewById(R.id.display_item_text).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, V.dp(16)));
|
else view.findViewById(R.id.display_item_text).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, V.dp(16)));
|
||||||
|
|
||||||
replyText.setText(getString(R.string.in_reply_to, replyTo.account.displayName));
|
replyText.setText(getString(R.string.in_reply_to, replyTo.account.displayName));
|
||||||
replyText.setContentDescription(getString(R.string.in_reply_to, replyTo.account.displayName) + ". " + getString(R.string.post_visibility) + ": " + UiUtils.getVisibilityText(replyTo));
|
int visibilityNameRes = switch (replyTo.visibility) {
|
||||||
replyText.setOnClickListener(v->{
|
case PUBLIC -> R.string.visibility_public;
|
||||||
scrollView.smoothScrollTo(0, 0);
|
case UNLISTED -> R.string.sk_visibility_unlisted;
|
||||||
});
|
case PRIVATE -> R.string.visibility_followers_only;
|
||||||
|
case DIRECT -> R.string.visibility_private;
|
||||||
|
};
|
||||||
|
replyText.setContentDescription(getString(R.string.in_reply_to, replyTo.account.displayName) + ". " + getString(R.string.post_visibility) + ": " + getString(visibilityNameRes));
|
||||||
|
|
||||||
ArrayList<String> mentions=new ArrayList<>();
|
ArrayList<String> mentions=new ArrayList<>();
|
||||||
String ownID=AccountSessionManager.getInstance().getAccount(accountID).self.id;
|
String ownID=AccountSessionManager.getInstance().getAccount(accountID).self.id;
|
||||||
@@ -754,10 +754,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
|
|||||||
|
|
||||||
draftsBtn = wrap.findViewById(R.id.drafts_btn);
|
draftsBtn = wrap.findViewById(R.id.drafts_btn);
|
||||||
draftsBtn.setVisibility(View.VISIBLE);
|
draftsBtn.setVisibility(View.VISIBLE);
|
||||||
}else{
|
|
||||||
charCounter = wrap.findViewById(R.id.char_counter);
|
|
||||||
charCounter.setVisibility(View.VISIBLE);
|
|
||||||
charCounter.setText(String.valueOf(charLimit));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// draftsBtn = wrap.findViewById(R.id.drafts_btn);
|
// draftsBtn = wrap.findViewById(R.id.drafts_btn);
|
||||||
|
|||||||
@@ -29,12 +29,10 @@ import com.squareup.otto.Subscribe;
|
|||||||
import org.joinmastodon.android.E;
|
import org.joinmastodon.android.E;
|
||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.api.requests.announcements.GetAnnouncements;
|
|
||||||
import org.joinmastodon.android.api.requests.timelines.GetHomeTimeline;
|
import org.joinmastodon.android.api.requests.timelines.GetHomeTimeline;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
|
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
|
||||||
import org.joinmastodon.android.events.StatusCreatedEvent;
|
import org.joinmastodon.android.events.StatusCreatedEvent;
|
||||||
import org.joinmastodon.android.model.Announcement;
|
|
||||||
import org.joinmastodon.android.model.CacheablePaginatedResponse;
|
import org.joinmastodon.android.model.CacheablePaginatedResponse;
|
||||||
import org.joinmastodon.android.model.Filter;
|
import org.joinmastodon.android.model.Filter;
|
||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
@@ -58,14 +56,11 @@ import me.grishka.appkit.utils.CubicBezierInterpolator;
|
|||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class HomeTimelineFragment extends StatusListFragment{
|
public class HomeTimelineFragment extends StatusListFragment{
|
||||||
private static final int ANNOUNCEMENTS_RESULT = 654;
|
|
||||||
|
|
||||||
private ImageButton fab;
|
private ImageButton fab;
|
||||||
private ImageView toolbarLogo;
|
private ImageView toolbarLogo;
|
||||||
private Button toolbarShowNewPostsBtn;
|
private Button toolbarShowNewPostsBtn;
|
||||||
private boolean newPostsBtnShown;
|
private boolean newPostsBtnShown;
|
||||||
private AnimatorSet currentNewPostsAnim;
|
private AnimatorSet currentNewPostsAnim;
|
||||||
private MenuItem announcements;
|
|
||||||
|
|
||||||
private String maxID;
|
private String maxID;
|
||||||
|
|
||||||
@@ -131,40 +126,16 @@ public class HomeTimelineFragment extends StatusListFragment{
|
|||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
||||||
inflater.inflate(R.menu.home, menu);
|
inflater.inflate(R.menu.home, menu);
|
||||||
announcements = menu.findItem(R.id.announcements);
|
|
||||||
|
|
||||||
new GetAnnouncements(false).setCallback(new Callback<>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(List<Announcement> result) {
|
|
||||||
boolean hasUnread = result.stream().anyMatch(a -> !a.read);
|
|
||||||
announcements.setIcon(hasUnread ? R.drawable.ic_announcements_24_badged : R.drawable.ic_fluent_megaphone_24_regular);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(ErrorResponse error) {
|
|
||||||
error.showToast(getActivity());
|
|
||||||
}
|
|
||||||
}).exec(accountID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item){
|
public boolean onOptionsItemSelected(MenuItem item){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
if (item.getItemId() == R.id.settings) Nav.go(getActivity(), SettingsFragment.class, args);
|
Nav.go(getActivity(), SettingsFragment.class, args);
|
||||||
if (item.getItemId() == R.id.announcements) {
|
|
||||||
Nav.goForResult(getActivity(), AnnouncementsFragment.class, args, ANNOUNCEMENTS_RESULT, this);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFragmentResult(int reqCode, boolean noMoreUnread, Bundle result){
|
|
||||||
if (reqCode == ANNOUNCEMENTS_RESULT && noMoreUnread) {
|
|
||||||
announcements.setIcon(R.drawable.ic_fluent_megaphone_24_regular);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newConfig){
|
public void onConfigurationChanged(Configuration newConfig){
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
@@ -217,8 +188,10 @@ public class HomeTimelineFragment extends StatusListFragment{
|
|||||||
result.get(result.size()-1).hasGapAfter=true;
|
result.get(result.size()-1).hasGapAfter=true;
|
||||||
toAdd=result;
|
toAdd=result;
|
||||||
}
|
}
|
||||||
StatusFilterPredicate filterPredicate=new StatusFilterPredicate(accountID, Filter.FilterContext.HOME);
|
List<Filter> filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList());
|
||||||
toAdd=toAdd.stream().filter(filterPredicate).collect(Collectors.toList());
|
if(!filters.isEmpty()){
|
||||||
|
toAdd=toAdd.stream().filter(new StatusFilterPredicate(filters)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
if(!toAdd.isEmpty()){
|
if(!toAdd.isEmpty()){
|
||||||
prependItems(toAdd, true);
|
prependItems(toAdd, true);
|
||||||
showNewPostsButton();
|
showNewPostsButton();
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
|
|||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
import me.grishka.appkit.views.UsableRecyclerView;
|
import me.grishka.appkit.views.UsableRecyclerView;
|
||||||
|
|
||||||
public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
public class CustomLoginFragment extends InstanceCatalogFragment {
|
||||||
private View headerView;
|
private View headerView;
|
||||||
|
|
||||||
public CustomWelcomeFragment() {
|
public CustomLoginFragment() {
|
||||||
super(R.layout.fragment_welcome_custom, 1);
|
super(R.layout.fragment_welcome_custom, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,9 +55,9 @@ public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
|||||||
dataLoaded();
|
dataLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
protected void onUpdateToolbar(){
|
protected void onUpdateToolbar(){
|
||||||
super.onUpdateToolbar();
|
// super.onUpdateToolbar();
|
||||||
|
|
||||||
if (!canGoBack()) {
|
if (!canGoBack()) {
|
||||||
ImageView toolbarLogo=new ImageView(getActivity());
|
ImageView toolbarLogo=new ImageView(getActivity());
|
||||||
@@ -137,11 +137,9 @@ public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
|||||||
|
|
||||||
headerView.findViewById(R.id.more).setVisibility(View.GONE);
|
headerView.findViewById(R.id.more).setVisibility(View.GONE);
|
||||||
headerView.findViewById(R.id.visibility).setVisibility(View.GONE);
|
headerView.findViewById(R.id.visibility).setVisibility(View.GONE);
|
||||||
headerView.findViewById(R.id.separator).setVisibility(View.GONE);
|
((TextView) headerView.findViewById(R.id.username)).setText("@moshidon");
|
||||||
headerView.findViewById(R.id.timestamp).setVisibility(View.GONE);
|
|
||||||
headerView.findViewById(R.id.unread_indicator).setVisibility(View.GONE);
|
|
||||||
((TextView) headerView.findViewById(R.id.username)).setText(R.string.sk_app_username);
|
|
||||||
((TextView) headerView.findViewById(R.id.name)).setText(R.string.sk_app_name);
|
((TextView) headerView.findViewById(R.id.name)).setText(R.string.sk_app_name);
|
||||||
|
((TextView) headerView.findViewById(R.id.timestamp)).setText(R.string.time_now);
|
||||||
((ImageView) headerView.findViewById(R.id.avatar)).setImageDrawable(getActivity().getDrawable(R.mipmap.ic_launcher));
|
((ImageView) headerView.findViewById(R.id.avatar)).setImageDrawable(getActivity().getDrawable(R.mipmap.ic_launcher));
|
||||||
((FragmentStackActivity) getActivity()).invalidateSystemBarColors(this);
|
((FragmentStackActivity) getActivity()).invalidateSystemBarColors(this);
|
||||||
|
|
||||||
@@ -206,6 +204,11 @@ public class CustomWelcomeFragment extends InstanceCatalogFragment {
|
|||||||
|
|
||||||
public InstanceViewHolder(){
|
public InstanceViewHolder(){
|
||||||
super(getActivity(), R.layout.item_instance_custom, list);
|
super(getActivity(), R.layout.item_instance_custom, list);
|
||||||
|
|
||||||
|
// itemView.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16));
|
||||||
|
// TypedValue value = new TypedValue();
|
||||||
|
// getActivity().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, value, true);
|
||||||
|
// itemView.setBackground(getActivity().getTheme().getDrawable(R.drawable.bg_search_field));
|
||||||
title=findViewById(R.id.title);
|
title=findViewById(R.id.title);
|
||||||
description=findViewById(R.id.description);
|
description=findViewById(R.id.description);
|
||||||
userCount=findViewById(R.id.user_count);
|
userCount=findViewById(R.id.user_count);
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
package org.joinmastodon.android.model;
|
|
||||||
|
|
||||||
import org.joinmastodon.android.api.RequiredField;
|
|
||||||
import org.parceler.Parcel;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Parcel
|
|
||||||
public class Announcement extends BaseModel implements DisplayItemsParent {
|
|
||||||
@RequiredField
|
|
||||||
public String id;
|
|
||||||
@RequiredField
|
|
||||||
public String content;
|
|
||||||
public Instant startsAt;
|
|
||||||
public Instant endsAt;
|
|
||||||
public boolean published;
|
|
||||||
public boolean allDay;
|
|
||||||
public Instant publishedAt;
|
|
||||||
public Instant updatedAt;
|
|
||||||
public boolean read;
|
|
||||||
public List<Emoji> emojis;
|
|
||||||
public List<Mention> mentions;
|
|
||||||
public List<Hashtag> tags;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Announcement{" +
|
|
||||||
"id='" + id + '\'' +
|
|
||||||
", content='" + content + '\'' +
|
|
||||||
", startsAt=" + startsAt +
|
|
||||||
", endsAt=" + endsAt +
|
|
||||||
", published=" + published +
|
|
||||||
", allDay=" + allDay +
|
|
||||||
", publishedAt=" + publishedAt +
|
|
||||||
", updatedAt=" + updatedAt +
|
|
||||||
", read=" + read +
|
|
||||||
", emojis=" + emojis +
|
|
||||||
", mentions=" + mentions +
|
|
||||||
", tags=" + tags +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
|
|
||||||
public Status toStatus() {
|
|
||||||
Status s = new Status();
|
|
||||||
s.id = id;
|
|
||||||
s.mediaAttachments = List.of();
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getID() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -23,8 +23,7 @@ import org.joinmastodon.android.R;
|
|||||||
import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken;
|
import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken;
|
||||||
import org.joinmastodon.android.api.session.AccountSession;
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
|
import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
|
||||||
import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
|
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -78,7 +77,7 @@ public class AccountSwitcherSheet extends BottomSheet{
|
|||||||
holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled);
|
holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled);
|
||||||
holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary)));
|
holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary)));
|
||||||
adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, ()->{
|
adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, ()->{
|
||||||
Nav.go(activity, CustomWelcomeFragment.class, null);
|
Nav.go(activity, CustomLoginFragment.class, null);
|
||||||
dismiss();
|
dismiss();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.joinmastodon.android.ui.displayitems;
|
package org.joinmastodon.android.ui.displayitems;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -10,7 +9,6 @@ import android.widget.SeekBar;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.joinmastodon.android.AudioPlayerService;
|
import org.joinmastodon.android.AudioPlayerService;
|
||||||
import org.joinmastodon.android.MastodonApp;
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
@@ -128,10 +126,6 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{
|
|||||||
lastKnownPositionTime=SystemClock.uptimeMillis();
|
lastKnownPositionTime=SystemClock.uptimeMillis();
|
||||||
this.playing=playing;
|
this.playing=playing;
|
||||||
playPauseBtn.setImageResource(playing ? R.drawable.ic_fluent_pause_circle_24_filled : R.drawable.ic_fluent_play_circle_24_filled);
|
playPauseBtn.setImageResource(playing ? R.drawable.ic_fluent_pause_circle_24_filled : R.drawable.ic_fluent_play_circle_24_filled);
|
||||||
playPauseBtn.setContentDescription(MastodonApp.context.getResources().getString(playing ? R.string.pause : R.string.play));
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
playPauseBtn.setTooltipText(playPauseBtn.getContentDescription());
|
|
||||||
}
|
|
||||||
if(!playing){
|
if(!playing){
|
||||||
lastRemainingSeconds=-1;
|
lastRemainingSeconds=-1;
|
||||||
time.setText(formatDuration((int) item.attachment.getDuration()));
|
time.setText(formatDuration((int) item.attachment.getDuration()));
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package org.joinmastodon.android.ui.displayitems;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -101,11 +100,6 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_20_regular;
|
case PRIVATE -> R.drawable.ic_fluent_people_checkmark_20_regular;
|
||||||
case DIRECT -> R.drawable.ic_fluent_mention_24_regular;
|
case DIRECT -> R.drawable.ic_fluent_mention_24_regular;
|
||||||
});
|
});
|
||||||
|
|
||||||
visibility.setContentDescription(UiUtils.getVisibilityText(s));
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
visibility.setTooltipText(visibility.getContentDescription());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.widget.Toast;
|
|||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
|
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
|
||||||
import org.joinmastodon.android.api.requests.announcements.DismissAnnouncement;
|
|
||||||
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
|
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
|
||||||
import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText;
|
import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText;
|
||||||
import org.joinmastodon.android.api.session.AccountSession;
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
@@ -36,7 +35,6 @@ import org.joinmastodon.android.fragments.ProfileFragment;
|
|||||||
import org.joinmastodon.android.fragments.ThreadFragment;
|
import org.joinmastodon.android.fragments.ThreadFragment;
|
||||||
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
import org.joinmastodon.android.model.Announcement;
|
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.Notification;
|
import org.joinmastodon.android.model.Notification;
|
||||||
import org.joinmastodon.android.model.Relationship;
|
import org.joinmastodon.android.model.Relationship;
|
||||||
@@ -54,7 +52,6 @@ import java.time.format.FormatStyle;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import me.grishka.appkit.Nav;
|
import me.grishka.appkit.Nav;
|
||||||
import me.grishka.appkit.api.APIRequest;
|
import me.grishka.appkit.api.APIRequest;
|
||||||
@@ -78,8 +75,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private String extraText;
|
private String extraText;
|
||||||
private Notification notification;
|
private Notification notification;
|
||||||
private ScheduledStatus scheduledStatus;
|
private ScheduledStatus scheduledStatus;
|
||||||
private Announcement announcement;
|
|
||||||
private Consumer<String> consumeReadAnnouncement;
|
|
||||||
|
|
||||||
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, String extraText, Notification notification, ScheduledStatus scheduledStatus){
|
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, String extraText, Notification notification, ScheduledStatus scheduledStatus){
|
||||||
super(parentID, parentFragment);
|
super(parentID, parentFragment);
|
||||||
@@ -108,13 +103,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
this.extraText=extraText;
|
this.extraText=extraText;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) {
|
|
||||||
HeaderStatusDisplayItem item = new HeaderStatusDisplayItem(a.id, instanceUser, a.startsAt, parentFragment, accountID, fakeStatus, null, null, null);
|
|
||||||
item.announcement = a;
|
|
||||||
item.consumeReadAnnouncement = consumeReadID;
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Type getType(){
|
public Type getType(){
|
||||||
return Type.HEADER;
|
return Type.HEADER;
|
||||||
@@ -134,8 +122,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class Holder extends StatusDisplayItem.Holder<HeaderStatusDisplayItem> implements ImageLoaderViewHolder{
|
public static class Holder extends StatusDisplayItem.Holder<HeaderStatusDisplayItem> implements ImageLoaderViewHolder{
|
||||||
private final TextView name, username, timestamp, extraText, separator;
|
private final TextView name, username, timestamp, extraText;
|
||||||
private final ImageView avatar, more, visibility, deleteNotification, unreadIndicator;
|
private final ImageView avatar, more, visibility, deleteNotification;
|
||||||
private final PopupMenu optionsMenu;
|
private final PopupMenu optionsMenu;
|
||||||
private Relationship relationship;
|
private Relationship relationship;
|
||||||
private APIRequest<?> currentRelationshipRequest;
|
private APIRequest<?> currentRelationshipRequest;
|
||||||
@@ -151,13 +139,11 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
super(activity, R.layout.display_item_header, parent);
|
super(activity, R.layout.display_item_header, parent);
|
||||||
name=findViewById(R.id.name);
|
name=findViewById(R.id.name);
|
||||||
username=findViewById(R.id.username);
|
username=findViewById(R.id.username);
|
||||||
separator=findViewById(R.id.separator);
|
|
||||||
timestamp=findViewById(R.id.timestamp);
|
timestamp=findViewById(R.id.timestamp);
|
||||||
avatar=findViewById(R.id.avatar);
|
avatar=findViewById(R.id.avatar);
|
||||||
more=findViewById(R.id.more);
|
more=findViewById(R.id.more);
|
||||||
visibility=findViewById(R.id.visibility);
|
visibility=findViewById(R.id.visibility);
|
||||||
deleteNotification=findViewById(R.id.delete_notification);
|
deleteNotification=findViewById(R.id.delete_notification);
|
||||||
unreadIndicator=findViewById(R.id.unread_indicator);
|
|
||||||
extraText=findViewById(R.id.extra_text);
|
extraText=findViewById(R.id.extra_text);
|
||||||
avatar.setOnClickListener(this::onAvaClick);
|
avatar.setOnClickListener(this::onAvaClick);
|
||||||
avatar.setOutlineProvider(roundCornersOutline);
|
avatar.setOutlineProvider(roundCornersOutline);
|
||||||
@@ -282,8 +268,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
public void onBind(HeaderStatusDisplayItem item){
|
public void onBind(HeaderStatusDisplayItem item){
|
||||||
name.setText(item.parsedName);
|
name.setText(item.parsedName);
|
||||||
username.setText('@'+item.user.acct);
|
username.setText('@'+item.user.acct);
|
||||||
separator.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
|
|
||||||
username.setCompoundDrawablesWithIntrinsicBounds(item.user.bot ? R.drawable.ic_fluent_bot_24_filled : 0, 0, 0, 0);
|
username.setCompoundDrawablesWithIntrinsicBounds(item.user.bot ? R.drawable.ic_fluent_bot_24_filled : 0, 0, 0, 0);
|
||||||
|
|
||||||
@@ -294,14 +278,10 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault());
|
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault());
|
||||||
timestamp.setText(item.scheduledStatus.scheduledAt.atZone(ZoneId.systemDefault()).format(formatter));
|
timestamp.setText(item.scheduledStatus.scheduledAt.atZone(ZoneId.systemDefault()).format(formatter));
|
||||||
}
|
}
|
||||||
else if ((item.status==null || item.status.editedAt==null) && item.createdAt != null)
|
else if(item.status==null || item.status.editedAt==null)
|
||||||
timestamp.setText(UiUtils.formatRelativeTimestamp(itemView.getContext(), item.createdAt));
|
timestamp.setText(UiUtils.formatRelativeTimestamp(itemView.getContext(), item.createdAt));
|
||||||
else if (item.status != null && item.status.editedAt != null)
|
else
|
||||||
timestamp.setText(item.parentFragment.getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(itemView.getContext(), item.status.editedAt)));
|
timestamp.setText(item.parentFragment.getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(itemView.getContext(), item.status.editedAt)));
|
||||||
else {
|
|
||||||
separator.setVisibility(View.GONE);
|
|
||||||
timestamp.setText("");
|
|
||||||
}
|
|
||||||
visibility.setVisibility(item.hasVisibilityToggle && !item.inset ? View.VISIBLE : View.GONE);
|
visibility.setVisibility(item.hasVisibilityToggle && !item.inset ? View.VISIBLE : View.GONE);
|
||||||
deleteNotification.setVisibility(GlobalUserPreferences.enableDeleteNotifications && item.notification!=null && !item.inset ? View.VISIBLE : View.GONE);
|
deleteNotification.setVisibility(GlobalUserPreferences.enableDeleteNotifications && item.notification!=null && !item.inset ? View.VISIBLE : View.GONE);
|
||||||
if(item.hasVisibilityToggle){
|
if(item.hasVisibilityToggle){
|
||||||
@@ -325,42 +305,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
currentRelationshipRequest.cancel();
|
currentRelationshipRequest.cancel();
|
||||||
}
|
}
|
||||||
relationship=null;
|
relationship=null;
|
||||||
|
|
||||||
String desc;
|
|
||||||
if (item.announcement != null) {
|
|
||||||
if (unreadIndicator.getVisibility() == View.GONE) {
|
|
||||||
more.setAlpha(0f);
|
|
||||||
unreadIndicator.setAlpha(0f);
|
|
||||||
unreadIndicator.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
float alpha = item.announcement.read ? 0 : 1;
|
|
||||||
more.setImageResource(R.drawable.ic_fluent_checkmark_20_filled);
|
|
||||||
desc = item.parentFragment.getString(R.string.sk_mark_as_read);
|
|
||||||
more.animate().alpha(alpha);
|
|
||||||
unreadIndicator.animate().alpha(alpha);
|
|
||||||
more.setOnClickListener(v -> {
|
|
||||||
new DismissAnnouncement(item.announcement.id).setCallback(new Callback<>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(Object o) {
|
|
||||||
item.consumeReadAnnouncement.accept(item.announcement.id);
|
|
||||||
item.announcement.read = true;
|
|
||||||
rebind();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(ErrorResponse error) {
|
|
||||||
error.showToast(item.parentFragment.getActivity());
|
|
||||||
}
|
|
||||||
}).exec(item.accountID);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
more.setImageResource(R.drawable.ic_fluent_more_vertical_20_filled);
|
|
||||||
desc = item.parentFragment.getString(R.string.more_options);
|
|
||||||
more.setOnClickListener(this::onMoreClick);
|
|
||||||
}
|
|
||||||
|
|
||||||
more.setContentDescription(desc);
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) more.setTooltipText(desc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -381,10 +325,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onAvaClick(View v){
|
private void onAvaClick(View v){
|
||||||
if (item.announcement != null) {
|
|
||||||
UiUtils.openURL(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.user.url);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", item.accountID);
|
args.putString("account", item.accountID);
|
||||||
args.putParcelable("profileAccount", Parcels.wrap(item.user));
|
args.putParcelable("profileAccount", Parcels.wrap(item.user));
|
||||||
@@ -416,7 +356,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateOptionsMenu(){
|
private void updateOptionsMenu(){
|
||||||
if (item.announcement != null) return;
|
|
||||||
boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
|
boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
|
||||||
Menu menu=optionsMenu.getMenu();
|
Menu menu=optionsMenu.getMenu();
|
||||||
|
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ public class UiUtils{
|
|||||||
pinned ? R.string.sk_confirm_pin_post_title : R.string.sk_confirm_unpin_post_title,
|
pinned ? R.string.sk_confirm_pin_post_title : R.string.sk_confirm_unpin_post_title,
|
||||||
pinned ? R.string.sk_confirm_pin_post : R.string.sk_confirm_unpin_post,
|
pinned ? R.string.sk_confirm_pin_post : R.string.sk_confirm_unpin_post,
|
||||||
pinned ? R.string.sk_pin_post : R.string.sk_unpin_post,
|
pinned ? R.string.sk_pin_post : R.string.sk_unpin_post,
|
||||||
pinned ? R.drawable.ic_fluent_pin_28_regular : R.drawable.ic_fluent_pin_off_28_regular,
|
pinned ? R.drawable.ic_fluent_pin_off_28_regular : R.drawable.ic_fluent_pin_28_regular,
|
||||||
()->{
|
()->{
|
||||||
new SetStatusPinned(status.id, pinned)
|
new SetStatusPinned(status.id, pinned)
|
||||||
.setCallback(new Callback<>() {
|
.setCallback(new Callback<>() {
|
||||||
@@ -1004,13 +1004,4 @@ public class UiUtils{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getVisibilityText(Status status) {
|
|
||||||
return MastodonApp.context.getString(switch (status.visibility) {
|
|
||||||
case PUBLIC -> R.string.visibility_public;
|
|
||||||
case UNLISTED -> R.string.sk_visibility_unlisted;
|
|
||||||
case PRIVATE -> R.string.visibility_followers_only;
|
|
||||||
case DIRECT -> R.string.visibility_private;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:drawable="@drawable/ic_fluent_megaphone_24_regular" android:left="2dp" android:right="2dp" android:top="2dp" android:bottom="2dp"/>
|
|
||||||
<item android:width="14dp" android:height="14dp" android:gravity="top|right">
|
|
||||||
<shape android:shape="oval">
|
|
||||||
<stroke android:color="?android:colorPrimary" android:width="2dp"/>
|
|
||||||
<solid android:color="?android:colorAccent"/>
|
|
||||||
</shape>
|
|
||||||
</item>
|
|
||||||
</layer-list>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<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="M9.562,3C5.419,3 2.062,6.358 2.062,10.5C2.062,11.633 2.313,12.709 2.764,13.673C2.51,14.671 2.226,15.784 2.04,16.515C1.807,17.428 2.629,18.259 3.544,18.039C4.294,17.859 5.447,17.582 6.474,17.337C7.417,17.763 8.462,18 9.562,18C13.704,18 17.062,14.642 17.062,10.5C17.062,6.358 13.704,3 9.562,3ZM3.562,10.5C3.562,7.186 6.248,4.5 9.562,4.5C12.875,4.5 15.562,7.186 15.562,10.5C15.562,13.814 12.875,16.5 9.562,16.5C8.601,16.5 7.695,16.275 6.892,15.875L6.648,15.754L6.384,15.817C5.461,16.036 4.395,16.292 3.596,16.484C3.795,15.705 4.058,14.672 4.286,13.776L4.356,13.5L4.226,13.247C3.801,12.425 3.562,11.491 3.562,10.5ZM14.562,21C12.592,21 10.8,20.241 9.462,19C9.495,19 9.528,19 9.562,19C10.28,19 10.977,18.911 11.643,18.743C12.507,19.225 13.502,19.5 14.562,19.5C15.522,19.5 16.428,19.275 17.232,18.875L17.475,18.754L17.74,18.817C18.661,19.036 19.705,19.263 20.479,19.426C20.304,18.676 20.065,17.671 19.837,16.776L19.767,16.5L19.897,16.247C20.322,15.425 20.562,14.491 20.562,13.5C20.562,11.385 19.468,9.526 17.815,8.458C17.636,7.734 17.365,7.048 17.015,6.411C19.952,7.427 22.062,10.217 22.062,13.5C22.062,14.633 21.81,15.709 21.359,16.674C21.612,17.682 21.868,18.774 22.03,19.477C22.235,20.362 21.455,21.163 20.563,20.977C19.836,20.825 18.693,20.581 17.649,20.337C16.707,20.763 15.661,21 14.562,21Z"
|
|
||||||
android:fillColor="@color/fluent_default_icon_tint" />
|
|
||||||
<path
|
|
||||||
android:pathData="M7.297,8.312L11.85,8.312A0.75,0.75 0,0 1,12.6 9.062L12.6,9.062A0.75,0.75 0,0 1,11.85 9.812L7.297,9.812A0.75,0.75 0,0 1,6.547 9.062L6.547,9.062A0.75,0.75 0,0 1,7.297 8.312z"
|
|
||||||
android:fillColor="@color/fluent_default_icon_tint" />
|
|
||||||
<path
|
|
||||||
android:pathData="M7.297,11.312L10.323,11.312A0.75,0.75 0,0 1,11.073 12.062L11.073,12.062A0.75,0.75 0,0 1,10.323 12.812L7.297,12.812A0.75,0.75 0,0 1,6.547 12.062L6.547,12.062A0.75,0.75 0,0 1,7.297 11.312z"
|
|
||||||
android:fillColor="@color/fluent_default_icon_tint" />
|
|
||||||
</vector>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--~ Copyright (c) 2022. ~ Microsoft Corporation. All rights reserved.-->
|
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item android:drawable="@drawable/ic_fluent_chat_multiple_24_regular_text" android:state_selected="true"/>
|
|
||||||
<item android:drawable="@drawable/ic_fluent_chat_multiple_24_regular"/>
|
|
||||||
</selector>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<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="M7.032 13.907l-3.471-3.905C3.285 9.692 2.81 9.664 2.5 9.939 2.193 10.215 2.165 10.69 2.44 11l4 4.5c0.287 0.322 0.786 0.336 1.091 0.031l10.5-10.5c0.293-0.293 0.293-0.767 0-1.06-0.293-0.293-0.767-0.293-1.06 0l-9.938 9.937z" android:fillColor="@color/fluent_default_icon_tint"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<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="M13 10c0 1.657-1.343 3-3 3s-3-1.343-3-3 1.343-3 3-3 3 1.343 3 3z" android:fillColor="@color/fluent_default_icon_tint"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<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="M21.907 5.622C21.969 5.83 22 6.046 22 6.263V17.74c0 1.242-1.007 2.25-2.25 2.25-0.217 0-0.433-0.032-0.641-0.094l-5.514-1.64C12.938 19.602 11.558 20.5 10 20.5c-2.142 0-3.891-1.683-3.995-3.8L6 16.5 5.999 16l-2.39-0.711C2.655 15.004 2 14.127 2 13.131V10.87c0-0.995 0.655-1.873 1.61-2.156l15.5-4.606c1.19-0.355 2.443 0.324 2.797 1.515zM7.499 16.445L7.5 16.499C7.5 17.88 8.62 19 10 19c0.885 0 1.678-0.464 2.124-1.179l-4.625-1.375zm12.037-10.9l-15.5 4.605C3.718 10.245 3.5 10.537 3.5 10.87v2.261c0 0.332 0.218 0.625 0.536 0.72l15.5 4.607c0.07 0.02 0.142 0.03 0.214 0.03 0.414 0 0.75-0.335 0.75-0.75V6.264c0-0.072-0.01-0.144-0.031-0.213-0.118-0.397-0.536-0.624-0.933-0.506z" android:fillColor="@color/fluent_default_icon_tint"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<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 6.5c-0.966 0-1.75-0.784-1.75-1.75S9.034 3 10 3s1.75 0.784 1.75 1.75S10.966 6.5 10 6.5zM10 17c-0.966 0-1.75-0.784-1.75-1.75S9.034 13.5 10 13.5s1.75 0.784 1.75 1.75S10.966 17 10 17zm-1.75-7c0 0.966 0.784 1.75 1.75 1.75s1.75-0.784 1.75-1.75S10.966 8.25 10 8.25 8.25 9.034 8.25 10z" android:fillColor="@color/fluent_default_icon_tint"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@@ -19,8 +18,6 @@
|
|||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/send_error"
|
android:id="@+id/send_error"
|
||||||
android:tooltipText="@string/sk_sending_error"
|
|
||||||
android:contentDescription="@string/sk_sending_error"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
@@ -55,16 +52,6 @@
|
|||||||
android:contentDescription="@string/sk_schedule_or_draft"
|
android:contentDescription="@string/sk_schedule_or_draft"
|
||||||
android:tooltipText="@string/sk_schedule_or_draft" />
|
android:tooltipText="@string/sk_schedule_or_draft" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/char_counter"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="@style/m3_body_large"
|
|
||||||
android:textColor="?android:textColorSecondary"
|
|
||||||
android:layout_marginHorizontal="8dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:text="500"/>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/publish_btn"
|
android:id="@+id/publish_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|||||||
@@ -28,8 +28,6 @@
|
|||||||
android:layout_marginTop="2dp"
|
android:layout_marginTop="2dp"
|
||||||
android:layout_marginStart="2dp"
|
android:layout_marginStart="2dp"
|
||||||
android:background="?android:selectableItemBackgroundBorderless"
|
android:background="?android:selectableItemBackgroundBorderless"
|
||||||
android:contentDescription="@string/delete"
|
|
||||||
android:tooltipText="@string/delete"
|
|
||||||
android:tint="#D92C2C"
|
android:tint="#D92C2C"
|
||||||
android:src="@drawable/ic_fluent_delete_20_regular"/>
|
android:src="@drawable/ic_fluent_delete_20_regular"/>
|
||||||
|
|
||||||
@@ -107,7 +105,7 @@
|
|||||||
android:layout_below="@id/retry_or_cancel_upload"
|
android:layout_below="@id/retry_or_cancel_upload"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:textColor="?colorGray200"
|
android:textColor="?colorGray200"
|
||||||
android:textSize="14sp"
|
android:textSize="14dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
@@ -139,7 +137,6 @@
|
|||||||
android:background="?android:selectableItemBackgroundBorderless"
|
android:background="?android:selectableItemBackgroundBorderless"
|
||||||
android:tint="#D92C2C"
|
android:tint="#D92C2C"
|
||||||
android:contentDescription="@string/delete"
|
android:contentDescription="@string/delete"
|
||||||
android:tooltipText="@string/delete"
|
|
||||||
android:src="@drawable/ic_fluent_delete_20_regular"/>
|
android:src="@drawable/ic_fluent_delete_20_regular"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:tint="?colorDarkIcon"
|
android:tint="?colorDarkIcon"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:src="@drawable/ic_fluent_circle_24_regular"/>
|
android:src="@drawable/ic_fluent_circle_24_regular"/>
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/edit"
|
android:id="@+id/edit"
|
||||||
@@ -42,7 +41,6 @@
|
|||||||
android:layout_height="56dp"
|
android:layout_height="56dp"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
android:tint="?colorDarkIcon"
|
android:tint="?colorDarkIcon"
|
||||||
android:contentDescription="@string/reorder"
|
|
||||||
android:src="@drawable/ic_fluent_re_order_dots_vertical_24_regular"/>
|
android:src="@drawable/ic_fluent_re_order_dots_vertical_24_regular"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:drawableStart="@drawable/ic_fluent_chat_multiple_24_selector_text"
|
android:drawableStart="@drawable/ic_fluent_chat_multiple_24_regular"
|
||||||
android:drawablePadding="8dp"
|
android:drawablePadding="8dp"
|
||||||
android:drawableTint="?android:textColorSecondary"
|
android:drawableTint="?android:textColorSecondary"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
android:background="?android:selectableItemBackgroundBorderless"
|
android:background="?android:selectableItemBackgroundBorderless"
|
||||||
android:contentDescription="@string/more_options"
|
android:contentDescription="@string/more_options"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
android:src="@drawable/ic_fluent_more_vertical_20_filled"
|
android:src="@drawable/ic_post_more"
|
||||||
android:tint="?android:textColorSecondary" />
|
android:tint="?android:textColorSecondary" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
@@ -47,21 +47,10 @@
|
|||||||
android:src="@drawable/ic_visibility"
|
android:src="@drawable/ic_visibility"
|
||||||
android:tint="?android:textColorSecondary" />
|
android:tint="?android:textColorSecondary" />
|
||||||
|
|
||||||
<ImageView
|
|
||||||
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"
|
|
||||||
android:scaleType="center"
|
|
||||||
android:src="@drawable/ic_fluent_circle_small_20_filled" />
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
android:layout_width="46sp"
|
android:layout_width="46dp"
|
||||||
android:layout_height="46sp"
|
android:layout_height="46dp"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_marginEnd="12dp" />
|
android:layout_marginEnd="12dp" />
|
||||||
@@ -69,17 +58,15 @@
|
|||||||
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
||||||
android:id="@+id/name_wrap"
|
android:id="@+id/name_wrap"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="24dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_marginTop="2sp"
|
android:layout_toStartOf="@id/visibility"
|
||||||
android:layout_toStartOf="@id/unread_indicator"
|
android:layout_toEndOf="@id/avatar">
|
||||||
android:layout_toEndOf="@id/avatar"
|
|
||||||
android:minHeight="24sp">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/name"
|
android:id="@+id/name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="24dp"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAlignment="viewStart"
|
android:textAlignment="viewStart"
|
||||||
@@ -89,7 +76,7 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/extra_text"
|
android:id="@+id/extra_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="24dp"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fontFamily="sans-serif"
|
android:fontFamily="sans-serif"
|
||||||
@@ -102,19 +89,18 @@
|
|||||||
|
|
||||||
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
<org.joinmastodon.android.ui.views.HeaderSubtitleLinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="20dp"
|
||||||
android:layout_below="@id/name_wrap"
|
android:layout_below="@id/name_wrap"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:layout_toStartOf="@id/unread_indicator"
|
android:layout_toStartOf="@id/visibility"
|
||||||
android:layout_toEndOf="@id/avatar"
|
android:layout_toEndOf="@id/avatar"
|
||||||
android:layoutDirection="locale"
|
android:layoutDirection="locale"
|
||||||
android:minHeight="20sp"
|
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/username"
|
android:id="@+id/username"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="20dp"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/m3_title_small"
|
android:textAppearance="@style/m3_title_small"
|
||||||
@@ -123,9 +109,9 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/separator"
|
android:id="@+id/separator"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="20dp"
|
||||||
android:layout_marginLeft="4sp"
|
android:layout_marginLeft="4dp"
|
||||||
android:layout_marginRight="4sp"
|
android:layout_marginRight="4dp"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
android:text="·"
|
android:text="·"
|
||||||
android:textAppearance="@style/m3_title_small" />
|
android:textAppearance="@style/m3_title_small" />
|
||||||
@@ -133,7 +119,7 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/timestamp"
|
android:id="@+id/timestamp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="20dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/m3_title_small"
|
android:textAppearance="@style/m3_title_small"
|
||||||
tools:text="3h" />
|
tools:text="3h" />
|
||||||
|
|||||||
@@ -56,10 +56,10 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/reply_text"
|
android:id="@+id/reply_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="-12dp"
|
android:layout_marginBottom="-12dp"
|
||||||
android:layout_marginStart="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingTop="16dp"
|
android:paddingTop="16dp"
|
||||||
android:paddingBottom="6dp"
|
android:paddingBottom="6dp"
|
||||||
android:textAppearance="@style/m3_title_small"
|
android:textAppearance="@style/m3_title_small"
|
||||||
@@ -68,7 +68,8 @@
|
|||||||
android:drawableTint="?android:textColorSecondary"
|
android:drawableTint="?android:textColorSecondary"
|
||||||
android:drawablePadding="6dp"
|
android:drawablePadding="6dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"/>
|
android:ellipsize="end"
|
||||||
|
android:background="?android:selectableItemBackground"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -79,8 +80,8 @@
|
|||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/self_avatar"
|
android:id="@+id/self_avatar"
|
||||||
android:layout_width="46sp"
|
android:layout_width="46dp"
|
||||||
android:layout_height="46sp"
|
android:layout_height="46dp"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_marginEnd="12dp" />
|
android:layout_marginEnd="12dp" />
|
||||||
@@ -88,9 +89,8 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/self_name"
|
android:id="@+id/self_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="24dp"
|
||||||
android:layout_toEndOf="@id/self_avatar"
|
android:layout_toEndOf="@id/self_avatar"
|
||||||
android:minHeight="24sp"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/m3_title_medium"
|
android:textAppearance="@style/m3_title_medium"
|
||||||
@@ -99,10 +99,9 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/self_username"
|
android:id="@+id/self_username"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="20dp"
|
||||||
android:layout_below="@id/self_name"
|
android:layout_below="@id/self_name"
|
||||||
android:layout_toEndOf="@id/self_avatar"
|
android:layout_toEndOf="@id/self_avatar"
|
||||||
android:minHeight="20sp"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textAppearance="@style/m3_title_small"
|
android:textAppearance="@style/m3_title_small"
|
||||||
@@ -154,7 +153,6 @@
|
|||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:background="@drawable/bg_poll_option_clickable"
|
android:background="@drawable/bg_poll_option_clickable"
|
||||||
android:outlineProvider="background"
|
android:outlineProvider="background"
|
||||||
android:contentDescription="@string/sk_poll_option_add"
|
|
||||||
android:elevation="2dp">
|
android:elevation="2dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/add_poll_option_icon"
|
android:id="@+id/add_poll_option_icon"
|
||||||
@@ -162,7 +160,6 @@
|
|||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
android:tint="?colorDarkIcon"
|
android:tint="?colorDarkIcon"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:src="@drawable/ic_fluent_add_circle_24_regular"/>
|
android:src="@drawable/ic_fluent_add_circle_24_regular"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<TextView
|
<TextView
|
||||||
@@ -423,7 +420,6 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="@style/m3_body_large"
|
android:textAppearance="@style/m3_body_large"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:visibility="gone"
|
|
||||||
tools:text="500"/>
|
tools:text="500"/>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
@@ -433,7 +429,6 @@
|
|||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:tooltipText="@string/publish"
|
android:tooltipText="@string/publish"
|
||||||
android:contentDescription="@string/publish"
|
|
||||||
android:drawableStart="@drawable/ic_fluent_send_24_selector"
|
android:drawableStart="@drawable/ic_fluent_send_24_selector"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
android:hint="@string/search_hint"
|
android:hint="@string/search_hint"
|
||||||
android:textColorHint="?colorSearchHint"
|
android:textColorHint="?colorSearchHint"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="16sp"
|
android:textSize="16dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:inputType="textFilter"
|
android:inputType="textFilter"
|
||||||
android:imeOptions="actionSearch"
|
android:imeOptions="actionSearch"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
android:textColor="?colorGray50t"
|
android:textColor="?colorGray50t"
|
||||||
android:textAllCaps="true"
|
android:textAllCaps="true"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:textSize="14sp"
|
android:textSize="14dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:background="@drawable/bg_profile_follows_you"
|
android:background="@drawable/bg_profile_follows_you"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
@@ -318,11 +318,7 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</org.joinmastodon.android.ui.views.NestedRecyclerScrollView>
|
</org.joinmastodon.android.ui.views.NestedRecyclerScrollView>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton android:id="@+id/fab" style="@style/Widget.Mastodon.Button.Compose"/>
|
||||||
android:tooltipText="@string/sk_fab_compose"
|
|
||||||
android:contentDescription="@string/sk_fab_compose"
|
|
||||||
android:id="@+id/fab"
|
|
||||||
style="@style/Widget.Mastodon.Button.Compose"/>
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="16dp"
|
android:layout_marginHorizontal="16dp"
|
||||||
android:layout_marginVertical="12dp"
|
android:layout_marginVertical="12dp"
|
||||||
android:text="@string/sk_welcome_title" />
|
android:text="@string/sk_welcome_title"
|
||||||
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
style="@style/m3_body_large"
|
style="@style/m3_body_large"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:layout_marginStart="24dp"
|
android:layout_marginStart="24dp"
|
||||||
android:textSize="16sp"
|
android:textSize="16dp"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"/>
|
android:ellipsize="end"/>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:textSize="12sp"
|
android:textSize="12dp"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textAllCaps="true"
|
android:textAllCaps="true"
|
||||||
android:paddingTop="24dp"
|
android:paddingTop="24dp"
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
android:id="@+id/emoji"
|
android:id="@+id/emoji"
|
||||||
android:layout_width="24dp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:layout_marginBottom="6dp"
|
android:layout_marginBottom="6dp"
|
||||||
android:layout_gravity="center_horizontal"/>
|
android:layout_gravity="center_horizontal"/>
|
||||||
|
|
||||||
@@ -23,7 +22,7 @@
|
|||||||
android:textAllCaps="true"
|
android:textAllCaps="true"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:textSize="14sp"
|
android:textSize="14dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:tint="?android:textColorSecondary"
|
android:tint="?android:textColorSecondary"
|
||||||
android:src="@drawable/ic_round_checkbox"/>
|
android:src="@drawable/ic_round_checkbox"/>
|
||||||
|
|
||||||
|
|||||||
@@ -12,13 +12,13 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/number"
|
android:id="@+id/number"
|
||||||
android:layout_width="24sp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="24dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:textColor="?android:colorAccent"
|
android:textColor="?android:colorAccent"
|
||||||
android:fontFamily="sans-serif-condensed"
|
android:fontFamily="sans-serif-condensed"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textSize="22sp"
|
android:textSize="22dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:includeFontPadding="false"
|
android:includeFontPadding="false"
|
||||||
tools:text="1"/>
|
tools:text="1"/>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="20sp"
|
android:textSize="20dp"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
android:layout_height="32dp"
|
android:layout_height="32dp"
|
||||||
android:background="@drawable/bg_inline_button"
|
android:background="@drawable/bg_inline_button"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="20sp"
|
android:textSize="20dp"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:paddingLeft="4dp"
|
android:paddingLeft="4dp"
|
||||||
android:paddingRight="4dp"
|
android:paddingRight="4dp"
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
/>
|
/>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/icon"
|
android:id="@+id/icon"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -10,7 +10,6 @@
|
|||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="121dp"
|
android:layout_height="121dp"
|
||||||
android:elevation="1dp"
|
android:elevation="1dp"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:foreground="?android:selectableItemBackground"
|
android:foreground="?android:selectableItemBackground"
|
||||||
android:duplicateParentState="true"
|
android:duplicateParentState="true"
|
||||||
tools:src="@drawable/theme_auto"/>
|
tools:src="@drawable/theme_auto"/>
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:id="@+id/empty"/>
|
android:id="@+id/empty"/>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton android:id="@+id/fab" style="@style/Widget.Mastodon.Button.Compose"/>
|
||||||
android:contentDescription="@string/sk_fab_compose"
|
|
||||||
android:tooltipText="@string/sk_fab_compose"
|
|
||||||
android:id="@+id/fab"
|
|
||||||
style="@style/Widget.Mastodon.Button.Compose"/>
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
||||||
@@ -71,7 +71,6 @@
|
|||||||
android:layout_width="28dp"
|
android:layout_width="28dp"
|
||||||
android:layout_height="28dp"
|
android:layout_height="28dp"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:importantForAccessibility="no"
|
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:src="@null"/>
|
android:src="@null"/>
|
||||||
<View
|
<View
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item
|
|
||||||
android:id="@+id/announcements"
|
|
||||||
android:icon="@drawable/ic_fluent_megaphone_24_regular"
|
|
||||||
android:showAsAction="always"
|
|
||||||
android:title="@string/sk_announcements" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/settings"
|
android:id="@+id/settings"
|
||||||
android:icon="@drawable/ic_fluent_settings_24_regular"
|
android:icon="@drawable/ic_fluent_settings_24_regular"
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
<string name="sk_pinned_posts">Angeheftet</string>
|
<string name="sk_pinned_posts">Angeheftet</string>
|
||||||
<string name="sk_delete_and_redraft">Löschen und neu erstellen</string>
|
<string name="sk_delete_and_redraft">Löschen und neu erstellen</string>
|
||||||
<string name="sk_confirm_delete_and_redraft_title">Beitrag löschen und neu erstellen</string>
|
<string name="sk_confirm_delete_and_redraft_title">Beitrag löschen und neu erstellen</string>
|
||||||
<string name="sk_confirm_delete_and_redraft">Bist du dir sicher, dass du diesen Beitrag löschen und neu erstellen möchtest\?</string>
|
<string name="sk_confirm_delete_and_redraft">Bist du dir sicher, dass du diesen Beitrag löschen und neu erstellen möchtest?</string>
|
||||||
<string name="sk_pin_post">An Profil anheften</string>
|
<string name="sk_pin_post">An Profil anheften</string>
|
||||||
<string name="sk_confirm_pin_post_title">Beitrag an Profil anheften</string>
|
<string name="sk_confirm_pin_post_title">Beitrag an Profil anheften</string>
|
||||||
<string name="sk_confirm_pin_post">Möchtest du den Beitrag an dein Profil anheften?</string>
|
<string name="sk_confirm_pin_post">Möchtest du den Beitrag an dein Profil anheften?</string>
|
||||||
<string name="sk_pinning">Wird angeheftet…</string>
|
<string name="sk_pinning">Wird angeheftet…</string>
|
||||||
<string name="sk_unpin_post">Von Profil lösen</string>
|
<string name="sk_unpin_post">Von Profil lösen</string>
|
||||||
<string name="sk_confirm_unpin_post_title">Angehefteten Beitrag von Profil lösen</string>
|
<string name="sk_confirm_unpin_post_title">Angehefteten Beitrag von Profil lösen</string>
|
||||||
<string name="sk_confirm_unpin_post">Bist du dir sicher, dass du den angehefteten Beitrag von deinem Profil lösen möchtest\?</string>
|
<string name="sk_confirm_unpin_post">Bist du dir sicher, dass du den angehefteten Beitrag von deinem Profil lösen möchtest?</string>
|
||||||
<string name="sk_unpinning">Wird vom Profil gelöst…</string>
|
<string name="sk_unpinning">Wird vom Profil gelöst…</string>
|
||||||
<string name="sk_image_description">Bildbeschreibung</string>
|
<string name="sk_image_description">Bildbeschreibung</string>
|
||||||
<string name="sk_visibility_unlisted">Nicht gelistet</string>
|
<string name="sk_visibility_unlisted">Nicht gelistet</string>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<string name="sk_lists_with_user">Listen mit %s</string>
|
<string name="sk_lists_with_user">Listen mit %s</string>
|
||||||
<string name="sk_settings_always_reveal_content_warnings">Inhaltswarnungen immer ausklappen</string>
|
<string name="sk_settings_always_reveal_content_warnings">Inhaltswarnungen immer ausklappen</string>
|
||||||
<string name="sk_disable_marquee">Laufschrift in Titelleisten deaktivieren</string>
|
<string name="sk_disable_marquee">Laufschrift in Titelleisten deaktivieren</string>
|
||||||
<string name="sk_disable_dividers">Beitrags Trennung deaktivieren</string>
|
<string name="sk_disable_dividers">Tröt Trennung deaktivieren</string>
|
||||||
<string name="sk_relocate_publish_button">Veröffentlichen Schaltfläche verschieben</string>
|
<string name="sk_relocate_publish_button">Veröffentlichen Schaltfläche verschieben</string>
|
||||||
<string name="sk_settings_contribute">Zu Moshidon beitragen</string>
|
<string name="sk_settings_contribute">Zu Moshidon beitragen</string>
|
||||||
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
|
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
|
||||||
@@ -75,10 +75,10 @@
|
|||||||
<string name="sk_settings_donate">Spenden</string>
|
<string name="sk_settings_donate">Spenden</string>
|
||||||
<string name="sk_delete_notification">Benachrichtigung löschen</string>
|
<string name="sk_delete_notification">Benachrichtigung löschen</string>
|
||||||
<string name="sk_delete_notification_confirm_action">Benachrichtigung löschen</string>
|
<string name="sk_delete_notification_confirm_action">Benachrichtigung löschen</string>
|
||||||
<string name="sk_delete_notification_confirm">Benachrichtigung wirklich löschen\?</string>
|
<string name="sk_delete_notification_confirm">Benachrichtigung wirklich löschen?</string>
|
||||||
<string name="sk_clear_all_notifications">Alle Benachrichtigungen löschen</string>
|
<string name="sk_clear_all_notifications">Alle Benachrichtigungen löschen</string>
|
||||||
<string name="sk_clear_all_notifications_confirm_action">Alle löschen</string>
|
<string name="sk_clear_all_notifications_confirm_action">Alle löschen</string>
|
||||||
<string name="sk_clear_all_notifications_confirm">Wirklich alle Benachrichtigungen löschen\?</string>
|
<string name="sk_clear_all_notifications_confirm">Wirklich alle Benachrichtigungen löschen?</string>
|
||||||
<string name="sk_enable_delete_notifications">Löschen von Benachrichtigungen aktivieren</string>
|
<string name="sk_enable_delete_notifications">Löschen von Benachrichtigungen aktivieren</string>
|
||||||
<string name="sk_settings_publish_button_text">Veröffentlichen-Button-Text</string>
|
<string name="sk_settings_publish_button_text">Veröffentlichen-Button-Text</string>
|
||||||
<string name="sk_settings_publish_button_text_title">Veröffentlichen-Button-Text anpassen</string>
|
<string name="sk_settings_publish_button_text_title">Veröffentlichen-Button-Text anpassen</string>
|
||||||
@@ -111,9 +111,9 @@
|
|||||||
<string name="sk_draft">Entwurf</string>
|
<string name="sk_draft">Entwurf</string>
|
||||||
<string name="sk_schedule">Planen</string>
|
<string name="sk_schedule">Planen</string>
|
||||||
<string name="sk_confirm_delete_draft_title">Entwurf löschen</string>
|
<string name="sk_confirm_delete_draft_title">Entwurf löschen</string>
|
||||||
<string name="sk_confirm_delete_draft">Möchtest du diesen entworfenen Beitrag wirklich löschen\?</string>
|
<string name="sk_confirm_delete_draft">Möchtest du diesen entworfenen Beitrag wirklich löschen?</string>
|
||||||
<string name="sk_confirm_delete_scheduled_post_title">Geplanten Beitrag löschen</string>
|
<string name="sk_confirm_delete_scheduled_post_title">Geplanten Beitrag löschen</string>
|
||||||
<string name="sk_confirm_delete_scheduled_post">Möchtest du diesen geplanten Beitrag wirklich löschen\?</string>
|
<string name="sk_confirm_delete_scheduled_post">Möchtest du diesen geplanten Beitrag wirklich löschen?</string>
|
||||||
<string name="sk_draft_or_schedule">Entwurf oder Planen</string>
|
<string name="sk_draft_or_schedule">Entwurf oder Planen</string>
|
||||||
<string name="sk_compose_draft">Beitrag wird als Entwurf gespeichert.</string>
|
<string name="sk_compose_draft">Beitrag wird als Entwurf gespeichert.</string>
|
||||||
<string name="sk_compose_scheduled">Geplant für</string>
|
<string name="sk_compose_scheduled">Geplant für</string>
|
||||||
@@ -134,11 +134,4 @@
|
|||||||
<string name="sk_no_image_desc">Die enthaltenen Bilder haben keine Beschreibung. Bitte füge eine Beschreibung hinzu, damit auch sehbehinderte Personen teilnehmen können.</string>
|
<string name="sk_no_image_desc">Die enthaltenen Bilder haben keine Beschreibung. Bitte füge eine Beschreibung hinzu, damit auch sehbehinderte Personen teilnehmen können.</string>
|
||||||
<string name="sk_emoji_recent">Kürzlich verwendet</string>
|
<string name="sk_emoji_recent">Kürzlich verwendet</string>
|
||||||
<string name="sk_clear_recent_emoji">Kürzlich verwendete Emojis löschen</string>
|
<string name="sk_clear_recent_emoji">Kürzlich verwendete Emojis löschen</string>
|
||||||
<string name="sk_disable_relocate_publish_button_to_enable_customization">Deaktiviere die Funktion "Veröffentlichen Schaltfläche verschieben", um eine Anpassung zu ermöglichen.</string>
|
|
||||||
<string name="sk_keep_only_latest_notification">Nur neueste Benachrichtigung behalten</string>
|
|
||||||
<string name="sk_announcements">Ankündigungen</string>
|
|
||||||
<string name="sk_mark_as_read">Als gelesen markieren</string>
|
|
||||||
<string name="sk_poll_option_add">Neue Umfrageoption hinzufügen</string>
|
|
||||||
<string name="sk_fab_compose">Verfassen</string>
|
|
||||||
<string name="sk_sending_error">Fehler beim Veröffentlichen</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -137,12 +137,4 @@
|
|||||||
<string name="sk_clear_recent_emoji">Clear recently used emoji</string>
|
<string name="sk_clear_recent_emoji">Clear recently used emoji</string>
|
||||||
<string name="sk_disable_relocate_publish_button_to_enable_customization">Disable "Relocate publish button" to allow customization</string>
|
<string name="sk_disable_relocate_publish_button_to_enable_customization">Disable "Relocate publish button" to allow customization</string>
|
||||||
<string name="sk_keep_only_latest_notification">Keep only latest notification</string>
|
<string name="sk_keep_only_latest_notification">Keep only latest notification</string>
|
||||||
<string name="sk_announcements">Announcements</string>
|
|
||||||
<string name="sk_mark_as_read">Mark as read</string>
|
|
||||||
|
|
||||||
<!-- accessibility labels-->
|
|
||||||
<string name="sk_poll_option_add">Add new poll option</string>
|
|
||||||
<string name="sk_fab_compose">Compose</string>
|
|
||||||
<string name="sk_sending_error">Error publishing</string>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -381,7 +381,7 @@
|
|||||||
|
|
||||||
<style name="Widget.Mastodon.M3.Button" parent="android:Widget.Material.Button">
|
<style name="Widget.Mastodon.M3.Button" parent="android:Widget.Material.Button">
|
||||||
<item name="android:textAllCaps">false</item>
|
<item name="android:textAllCaps">false</item>
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">14dp</item>
|
||||||
<item name="android:minHeight">40dp</item>
|
<item name="android:minHeight">40dp</item>
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:stateListAnimator">@null</item>
|
<item name="android:stateListAnimator">@null</item>
|
||||||
@@ -403,45 +403,45 @@
|
|||||||
|
|
||||||
<style name="alert_title">
|
<style name="alert_title">
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:textSize">24sp</item>
|
<item name="android:textSize">24dp</item>
|
||||||
<item name="android:minHeight">38dp</item>
|
<item name="android:minHeight">38dp</item>
|
||||||
<item name="android:gravity">center_vertical</item>
|
<item name="android:gravity">center_vertical</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_body_large">
|
<style name="m3_body_large">
|
||||||
<item name="android:textSize">16sp</item>
|
<item name="android:textSize">16dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:lineSpacingExtra">5dp</item>
|
<item name="android:lineSpacingExtra">5dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_body_medium">
|
<style name="m3_body_medium">
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">14dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:lineSpacingExtra">4dp</item>
|
<item name="android:lineSpacingExtra">4dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_body_small">
|
<style name="m3_body_small">
|
||||||
<item name="android:textSize">12sp</item>
|
<item name="android:textSize">12dp</item>
|
||||||
<item name="android:textColor">?android:textColorSecondary</item>
|
<item name="android:textColor">?android:textColorSecondary</item>
|
||||||
<item name="android:lineSpacingExtra">2dp</item>
|
<item name="android:lineSpacingExtra">2dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_title_medium">
|
<style name="m3_title_medium">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:textSize">16sp</item>
|
<item name="android:textSize">16dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:lineSpacingExtra">5dp</item>
|
<item name="android:lineSpacingExtra">5dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_title_small">
|
<style name="m3_title_small">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">14dp</item>
|
||||||
<item name="android:textColor">?android:textColorSecondary</item>
|
<item name="android:textColor">?android:textColorSecondary</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_label_medium">
|
<style name="m3_label_medium">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:textSize">12sp</item>
|
<item name="android:textSize">12dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:lineSpacingMultiplier">1.14</item>
|
<item name="android:lineSpacingMultiplier">1.14</item>
|
||||||
</style>
|
</style>
|
||||||
@@ -449,12 +449,12 @@
|
|||||||
<style name="m3_label_large">
|
<style name="m3_label_large">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:textColor">?android:textColorSecondary</item>
|
<item name="android:textColor">?android:textColorSecondary</item>
|
||||||
<item name="android:textSize">14sp</item>
|
<item name="android:textSize">14dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_title_large">
|
<style name="m3_title_large">
|
||||||
<item name="android:fontFamily">sans-serif-medium</item>
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
<item name="android:textSize">22sp</item>
|
<item name="android:textSize">22dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@@ -465,12 +465,12 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_headline_small">
|
<style name="m3_headline_small">
|
||||||
<item name="android:textSize">24sp</item>
|
<item name="android:textSize">24dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="m3_headline_medium">
|
<style name="m3_headline_medium">
|
||||||
<item name="android:textSize">28sp</item>
|
<item name="android:textSize">28dp</item>
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
<item name="android:textColor">?android:textColorPrimary</item>
|
||||||
<item name="android:lineSpacingExtra">3dp</item>
|
<item name="android:lineSpacingExtra">3dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
New things for release 86:
|
|
||||||
- Ability to stack notifications, ie: having multiple notifications;
|
|
||||||
- Introducing Announcements;
|
|
||||||
- Many minor UI fixes.
|
|
||||||
Reference in New Issue
Block a user