Compare commits
26 Commits
1.1.4+fork
...
1.1.4+fork
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a667fdf32 | ||
|
|
bfafac3d4f | ||
|
|
0cafbe9f91 | ||
|
|
2fbf172729 | ||
|
|
bb9755f4af | ||
|
|
2a01377a8a | ||
|
|
61cc6d5d07 | ||
|
|
1d74a37f60 | ||
|
|
ef9645f9e7 | ||
|
|
6a103ca3f3 | ||
|
|
c22772121b | ||
|
|
de7bc69d2a | ||
|
|
2eccd572c9 | ||
|
|
824a62024b | ||
|
|
3a3cfda919 | ||
|
|
e29120cc51 | ||
|
|
197d5c6bc3 | ||
|
|
d143cc75db | ||
|
|
1635a06c54 | ||
|
|
76de0d8c70 | ||
|
|
402a995b8f | ||
|
|
f580ba7779 | ||
|
|
bc3869b920 | ||
|
|
020f4a5a1a | ||
|
|
b054caa967 | ||
|
|
82b7633650 |
@@ -1,4 +1,4 @@
|
|||||||

|

|
||||||
|
|
||||||
# Moshidon, the material you mastodon client!
|
# Moshidon, the material you mastodon client!
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId "org.joinmastodon.android.moshinda"
|
applicationId "org.joinmastodon.android.moshinda"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 66
|
versionCode 67
|
||||||
versionName "1.1.4+fork.66.moshinda"
|
versionName "1.1.4+fork.67.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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ public class GlobalUserPreferences{
|
|||||||
GREEN,
|
GREEN,
|
||||||
BLUE,
|
BLUE,
|
||||||
ORANGE,
|
ORANGE,
|
||||||
YELLOW
|
YELLOW,
|
||||||
|
RED
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ThemePreference{
|
public enum ThemePreference{
|
||||||
|
|||||||
@@ -16,7 +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.MoshidonLoginFragment;
|
import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
|
||||||
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;
|
||||||
@@ -33,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 MoshidonLoginFragment());
|
showFragmentClearingBackStack(new CustomLoginFragment());
|
||||||
}else{
|
}else{
|
||||||
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
AccountSessionManager.getInstance().maybeUpdateLocalInfo();
|
||||||
AccountSession session;
|
AccountSession session;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
|
|||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import me.grishka.appkit.api.Callback;
|
import me.grishka.appkit.api.Callback;
|
||||||
import me.grishka.appkit.api.ErrorResponse;
|
import me.grishka.appkit.api.ErrorResponse;
|
||||||
@@ -25,7 +26,7 @@ public class StatusInteractionController{
|
|||||||
this.accountID=accountID;
|
this.accountID=accountID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFavorited(Status status, boolean favorited){
|
public void setFavorited(Status status, boolean favorited, Consumer<Status> cb){
|
||||||
if(!Looper.getMainLooper().isCurrentThread())
|
if(!Looper.getMainLooper().isCurrentThread())
|
||||||
throw new IllegalStateException("Can only be called from main thread");
|
throw new IllegalStateException("Can only be called from main thread");
|
||||||
|
|
||||||
@@ -38,6 +39,8 @@ public class StatusInteractionController{
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(Status result){
|
public void onSuccess(Status result){
|
||||||
runningFavoriteRequests.remove(status.id);
|
runningFavoriteRequests.remove(status.id);
|
||||||
|
result.favouritesCount = Math.max(0, status.favouritesCount) + (favorited ? 1 : -1);
|
||||||
|
cb.accept(result);
|
||||||
E.post(new StatusCountersUpdatedEvent(result));
|
E.post(new StatusCountersUpdatedEvent(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,24 +49,17 @@ public class StatusInteractionController{
|
|||||||
runningFavoriteRequests.remove(status.id);
|
runningFavoriteRequests.remove(status.id);
|
||||||
error.showToast(MastodonApp.context);
|
error.showToast(MastodonApp.context);
|
||||||
status.favourited=!favorited;
|
status.favourited=!favorited;
|
||||||
if(favorited)
|
cb.accept(status);
|
||||||
status.favouritesCount--;
|
|
||||||
else
|
|
||||||
status.favouritesCount++;
|
|
||||||
E.post(new StatusCountersUpdatedEvent(status));
|
E.post(new StatusCountersUpdatedEvent(status));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
runningFavoriteRequests.put(status.id, req);
|
runningFavoriteRequests.put(status.id, req);
|
||||||
status.favourited=favorited;
|
status.favourited=favorited;
|
||||||
if(favorited)
|
|
||||||
status.favouritesCount++;
|
|
||||||
else
|
|
||||||
status.favouritesCount--;
|
|
||||||
E.post(new StatusCountersUpdatedEvent(status));
|
E.post(new StatusCountersUpdatedEvent(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReblogged(Status status, boolean reblogged){
|
public void setReblogged(Status status, boolean reblogged, Consumer<Status> cb){
|
||||||
if(!Looper.getMainLooper().isCurrentThread())
|
if(!Looper.getMainLooper().isCurrentThread())
|
||||||
throw new IllegalStateException("Can only be called from main thread");
|
throw new IllegalStateException("Can only be called from main thread");
|
||||||
|
|
||||||
@@ -76,6 +72,8 @@ public class StatusInteractionController{
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(Status result){
|
public void onSuccess(Status result){
|
||||||
runningReblogRequests.remove(status.id);
|
runningReblogRequests.remove(status.id);
|
||||||
|
result.reblogsCount = Math.max(0, status.reblogsCount) + (reblogged ? 1 : -1);
|
||||||
|
cb.accept(result);
|
||||||
E.post(new StatusCountersUpdatedEvent(result));
|
E.post(new StatusCountersUpdatedEvent(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,24 +82,21 @@ public class StatusInteractionController{
|
|||||||
runningReblogRequests.remove(status.id);
|
runningReblogRequests.remove(status.id);
|
||||||
error.showToast(MastodonApp.context);
|
error.showToast(MastodonApp.context);
|
||||||
status.reblogged=!reblogged;
|
status.reblogged=!reblogged;
|
||||||
if(reblogged)
|
cb.accept(status);
|
||||||
status.reblogsCount--;
|
|
||||||
else
|
|
||||||
status.reblogsCount++;
|
|
||||||
E.post(new StatusCountersUpdatedEvent(status));
|
E.post(new StatusCountersUpdatedEvent(status));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
runningReblogRequests.put(status.id, req);
|
runningReblogRequests.put(status.id, req);
|
||||||
status.reblogged=reblogged;
|
status.reblogged=reblogged;
|
||||||
if(reblogged)
|
|
||||||
status.reblogsCount++;
|
|
||||||
else
|
|
||||||
status.reblogsCount--;
|
|
||||||
E.post(new StatusCountersUpdatedEvent(status));
|
E.post(new StatusCountersUpdatedEvent(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBookmarked(Status status, boolean bookmarked){
|
public void setBookmarked(Status status, boolean bookmarked){
|
||||||
|
setBookmarked(status, bookmarked, r->{});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBookmarked(Status status, boolean bookmarked, Consumer<Status> cb){
|
||||||
if(!Looper.getMainLooper().isCurrentThread())
|
if(!Looper.getMainLooper().isCurrentThread())
|
||||||
throw new IllegalStateException("Can only be called from main thread");
|
throw new IllegalStateException("Can only be called from main thread");
|
||||||
|
|
||||||
@@ -114,6 +109,7 @@ public class StatusInteractionController{
|
|||||||
@Override
|
@Override
|
||||||
public void onSuccess(Status result){
|
public void onSuccess(Status result){
|
||||||
runningBookmarkRequests.remove(status.id);
|
runningBookmarkRequests.remove(status.id);
|
||||||
|
cb.accept(result);
|
||||||
E.post(new StatusCountersUpdatedEvent(result));
|
E.post(new StatusCountersUpdatedEvent(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +118,7 @@ public class StatusInteractionController{
|
|||||||
runningBookmarkRequests.remove(status.id);
|
runningBookmarkRequests.remove(status.id);
|
||||||
error.showToast(MastodonApp.context);
|
error.showToast(MastodonApp.context);
|
||||||
status.bookmarked=!bookmarked;
|
status.bookmarked=!bookmarked;
|
||||||
|
cb.accept(status);
|
||||||
E.post(new StatusCountersUpdatedEvent(status));
|
E.post(new StatusCountersUpdatedEvent(status));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ public class FollowRequestsListFragment extends BaseRecyclerFragment<FollowReque
|
|||||||
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter();
|
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter();
|
||||||
if (!rel.requested && !rel.followedBy && adapter != null) {
|
if (!rel.requested && !rel.followedBy && adapter != null) {
|
||||||
data.remove(item);
|
data.remove(item);
|
||||||
adapter.notifyItemRemoved(getBindingAdapterPosition());
|
adapter.notifyItemRemoved(getLayoutPosition());
|
||||||
} else {
|
} else {
|
||||||
rebind();
|
rebind();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowInsets;
|
import android.view.WindowInsets;
|
||||||
@@ -31,6 +32,7 @@ import com.squareup.otto.Subscribe;
|
|||||||
import org.joinmastodon.android.BuildConfig;
|
import org.joinmastodon.android.BuildConfig;
|
||||||
import org.joinmastodon.android.E;
|
import org.joinmastodon.android.E;
|
||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
|
import org.joinmastodon.android.GlobalUserPreferences.ColorPreference;
|
||||||
import org.joinmastodon.android.MainActivity;
|
import org.joinmastodon.android.MainActivity;
|
||||||
import org.joinmastodon.android.MastodonApp;
|
import org.joinmastodon.android.MastodonApp;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
@@ -96,7 +98,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
items.add(new HeaderItem(R.string.settings_theme));
|
items.add(new HeaderItem(R.string.settings_theme));
|
||||||
items.add(themeItem=new ThemeItem());
|
items.add(themeItem=new ThemeItem());
|
||||||
items.add(new SwitchItem(R.string.theme_true_black, R.drawable.ic_fluent_dark_theme_24_regular, GlobalUserPreferences.trueBlackTheme, this::onTrueBlackThemeChanged));
|
items.add(new SwitchItem(R.string.theme_true_black, R.drawable.ic_fluent_dark_theme_24_regular, GlobalUserPreferences.trueBlackTheme, this::onTrueBlackThemeChanged));
|
||||||
items.add(new SwitchItem(R.string.disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{
|
items.add(new SwitchItem(R.string.sk_disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{
|
||||||
GlobalUserPreferences.disableMarquee=i.checked;
|
GlobalUserPreferences.disableMarquee=i.checked;
|
||||||
GlobalUserPreferences.save();
|
GlobalUserPreferences.save();
|
||||||
}));
|
}));
|
||||||
@@ -115,7 +117,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
GlobalUserPreferences.showInteractionCounts=i.checked;
|
GlobalUserPreferences.showInteractionCounts=i.checked;
|
||||||
GlobalUserPreferences.save();
|
GlobalUserPreferences.save();
|
||||||
}));
|
}));
|
||||||
items.add(new SwitchItem(R.string.settings_always_reveal_content_warnings, R.drawable.ic_fluent_chat_warning_24_regular, GlobalUserPreferences.alwaysExpandContentWarnings, i->{
|
items.add(new SwitchItem(R.string.sk_settings_always_reveal_content_warnings, R.drawable.ic_fluent_chat_warning_24_regular, GlobalUserPreferences.alwaysExpandContentWarnings, i->{
|
||||||
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
|
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
|
||||||
GlobalUserPreferences.save();
|
GlobalUserPreferences.save();
|
||||||
}));
|
}));
|
||||||
@@ -158,15 +160,15 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
checkForUpdateItem = new TextItem(R.string.sk_check_for_update, GithubSelfUpdater.getInstance()::checkForUpdates);
|
checkForUpdateItem = new TextItem(R.string.sk_check_for_update, GithubSelfUpdater.getInstance()::checkForUpdates);
|
||||||
items.add(checkForUpdateItem);
|
items.add(checkForUpdateItem);
|
||||||
}
|
}
|
||||||
items.add(new TextItem(R.string.settings_contribute_fork, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/LucasGGamerM/moshidon")));
|
items.add(new TextItem(R.string.sk_settings_contribute, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/sk22/megalodon")));
|
||||||
items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache));
|
items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache));
|
||||||
items.add(new TextItem(R.string.clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.clear_recent_languages, R.string.confirm_clear_recent_languages, R.string.clear, ()->{
|
items.add(new TextItem(R.string.sk_clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.sk_clear_recent_languages, R.string.sk_confirm_clear_recent_languages, R.string.clear, ()->{
|
||||||
GlobalUserPreferences.recentLanguages.remove(accountID);
|
GlobalUserPreferences.recentLanguages.remove(accountID);
|
||||||
GlobalUserPreferences.save();
|
GlobalUserPreferences.save();
|
||||||
})));
|
})));
|
||||||
items.add(new TextItem(R.string.log_out, this::confirmLogOut));
|
items.add(new TextItem(R.string.log_out, this::confirmLogOut));
|
||||||
|
|
||||||
items.add(new FooterItem(getString(R.string.settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)));
|
items.add(new FooterItem(getString(R.string.sk_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -710,6 +712,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
pref = GlobalUserPreferences.ColorPreference.YELLOW;
|
pref = GlobalUserPreferences.ColorPreference.YELLOW;
|
||||||
onColorPreferenceClick(pref);
|
onColorPreferenceClick(pref);
|
||||||
}
|
}
|
||||||
|
else if(id==R.id.red_color) {
|
||||||
|
pref = GlobalUserPreferences.ColorPreference.RED;
|
||||||
|
onColorPreferenceClick(pref);
|
||||||
|
}
|
||||||
else if(id==R.id.m3_color) {
|
else if(id==R.id.m3_color) {
|
||||||
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
|
pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
|
||||||
@@ -724,6 +730,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
// UiUtils.enablePopupMenuIcons(getActivity(), popupMenu);
|
// UiUtils.enablePopupMenuIcons(getActivity(), popupMenu);
|
||||||
|
popupMenu.getMenu().findItem(R.id.m3_color).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
|
||||||
button.setOnTouchListener(popupMenu.getDragToOpenListener());
|
button.setOnTouchListener(popupMenu.getDragToOpenListener());
|
||||||
button.setOnClickListener(v->popupMenu.show());
|
button.setOnClickListener(v->popupMenu.show());
|
||||||
}
|
}
|
||||||
@@ -738,6 +745,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
case BLUE -> R.string.sk_color_theme_blue;
|
case BLUE -> R.string.sk_color_theme_blue;
|
||||||
case ORANGE -> R.string.sk_color_theme_brown;
|
case ORANGE -> R.string.sk_color_theme_brown;
|
||||||
case YELLOW -> R.string.sk_color_theme_yellow;
|
case YELLOW -> R.string.sk_color_theme_yellow;
|
||||||
|
case RED -> R.string.sk_color_theme_red;
|
||||||
case MATERIAL3 -> R.string.sk_color_theme_material3;
|
case MATERIAL3 -> R.string.sk_color_theme_material3;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -858,10 +866,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
|
|||||||
if (state == GithubSelfUpdater.UpdateState.CHECKING) return;
|
if (state == GithubSelfUpdater.UpdateState.CHECKING) return;
|
||||||
GithubSelfUpdater.UpdateInfo info=updater.getUpdateInfo();
|
GithubSelfUpdater.UpdateInfo info=updater.getUpdateInfo();
|
||||||
if(state!=GithubSelfUpdater.UpdateState.DOWNLOADED){
|
if(state!=GithubSelfUpdater.UpdateState.DOWNLOADED){
|
||||||
text.setText(getString(R.string.update_available, info.version));
|
text.setText(getString(R.string.sk_update_available, info.version));
|
||||||
button.setText(getString(R.string.download_update, UiUtils.formatFileSize(getActivity(), info.size, false)));
|
button.setText(getString(R.string.download_update, UiUtils.formatFileSize(getActivity(), info.size, false)));
|
||||||
}else{
|
}else{
|
||||||
text.setText(getString(R.string.update_ready, info.version));
|
text.setText(getString(R.string.sk_update_ready, info.version));
|
||||||
button.setText(R.string.install_update);
|
button.setText(R.string.install_update);
|
||||||
}
|
}
|
||||||
if(state==GithubSelfUpdater.UpdateState.DOWNLOADING){
|
if(state==GithubSelfUpdater.UpdateState.DOWNLOADING){
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ 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.accounts.SetAccountFollowed;
|
import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
|
import org.joinmastodon.android.fragments.ListTimelinesFragment;
|
||||||
import org.joinmastodon.android.fragments.ProfileFragment;
|
import org.joinmastodon.android.fragments.ProfileFragment;
|
||||||
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
|
||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
@@ -286,6 +287,7 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
|
|||||||
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
|
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
|
||||||
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
|
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
|
||||||
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername()));
|
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername()));
|
||||||
|
menu.findItem(R.id.manage_user_lists).setTitle(getString(R.string.sk_lists_with_user, account.getDisplayUsername())).setVisible(relationship.following);
|
||||||
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
|
||||||
MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists);
|
MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists);
|
||||||
if(relationship.following){
|
if(relationship.following){
|
||||||
@@ -372,6 +374,12 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
|
|||||||
})
|
})
|
||||||
.wrapProgress(getActivity(), R.string.loading, false)
|
.wrapProgress(getActivity(), R.string.loading, false)
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
|
}else if(id==R.id.manage_user_lists){
|
||||||
|
final Bundle args=new Bundle();
|
||||||
|
args.putString("account", accountID);
|
||||||
|
args.putString("profileAccount", account.id);
|
||||||
|
args.putString("profileDisplayUsername", account.getDisplayUsername());
|
||||||
|
Nav.go(getActivity(), ListTimelinesFragment.class, args);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,11 +36,11 @@ 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 MoshidonLoginFragment extends InstanceCatalogFragment {
|
public class CustomLoginFragment extends InstanceCatalogFragment {
|
||||||
private View headerView;
|
private View headerView;
|
||||||
|
|
||||||
public MoshidonLoginFragment() {
|
public CustomLoginFragment() {
|
||||||
super(R.layout.fragment_moshidon_welcome, 1);
|
super(R.layout.fragment_welcome_custom, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -131,7 +131,7 @@ public class MoshidonLoginFragment extends InstanceCatalogFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RecyclerView.Adapter getAdapter(){
|
protected RecyclerView.Adapter getAdapter(){
|
||||||
headerView=getActivity().getLayoutInflater().inflate(R.layout.header_megalodon_welcome, list, false);
|
headerView=getActivity().getLayoutInflater().inflate(R.layout.header_welcome_custom, list, false);
|
||||||
searchEdit=headerView.findViewById(R.id.search_edit);
|
searchEdit=headerView.findViewById(R.id.search_edit);
|
||||||
searchEdit.setOnEditorActionListener(this::onSearchEnterPressed);
|
searchEdit.setOnEditorActionListener(this::onSearchEnterPressed);
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ public class MoshidonLoginFragment extends InstanceCatalogFragment {
|
|||||||
private final RadioButton radioButton;
|
private final RadioButton radioButton;
|
||||||
|
|
||||||
public InstanceViewHolder(){
|
public InstanceViewHolder(){
|
||||||
super(getActivity(), R.layout.item_moshidon_instance, list);
|
super(getActivity(), R.layout.item_instance_custom, list);
|
||||||
|
|
||||||
// itemView.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16));
|
// itemView.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16));
|
||||||
// TypedValue value = new TypedValue();
|
// TypedValue value = new TypedValue();
|
||||||
@@ -23,7 +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.MoshidonLoginFragment;
|
import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -77,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, MoshidonLoginFragment.class, null);
|
Nav.go(activity, CustomLoginFragment.class, null);
|
||||||
dismiss();
|
dismiss();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import android.widget.ImageView;
|
|||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
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.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
@@ -23,7 +25,9 @@ import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
|
|||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.joinmastodon.android.ui.views.ProgressBarButton;
|
import org.joinmastodon.android.ui.views.ProgressBarButton;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||||
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
||||||
@@ -154,10 +158,18 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
|
|||||||
|
|
||||||
private void onFollowRequestButtonClick(View v) {
|
private void onFollowRequestButtonClick(View v) {
|
||||||
itemView.setHasTransientState(true);
|
itemView.setHasTransientState(true);
|
||||||
UiUtils.handleFollowRequest((Activity) v.getContext(), item.account, item.parentFragment.getAccountID(), item.notification.id , v == acceptButton, relationship, rel -> {
|
UiUtils.handleFollowRequest((Activity) v.getContext(), item.account, item.parentFragment.getAccountID(), null, v == acceptButton, relationship, rel -> {
|
||||||
itemView.setHasTransientState(false);
|
itemView.setHasTransientState(false);
|
||||||
item.parentFragment.putRelationship(item.account.id, rel);
|
item.parentFragment.putRelationship(item.account.id, rel);
|
||||||
|
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter();
|
||||||
|
if (!rel.requested && !rel.followedBy && adapter != null) {
|
||||||
|
int index = item.parentFragment.getDisplayItems().indexOf(item);
|
||||||
|
item.parentFragment.getDisplayItems().remove(index);
|
||||||
|
item.parentFragment.getDisplayItems().remove(index - 1);
|
||||||
|
adapter.notifyItemRangeRemoved(getLayoutPosition()-1, 2);
|
||||||
|
} else {
|
||||||
rebind();
|
rebind();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,14 @@ import android.app.Activity;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
import android.view.animation.AlphaAnimation;
|
||||||
|
import android.view.animation.Animation;
|
||||||
|
import android.view.animation.AnimationSet;
|
||||||
|
import android.view.animation.ScaleAnimation;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -24,7 +29,7 @@ import org.parceler.Parcels;
|
|||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
|
||||||
import me.grishka.appkit.Nav;
|
import me.grishka.appkit.Nav;
|
||||||
import me.grishka.appkit.utils.BindableViewHolder;
|
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class FooterStatusDisplayItem extends StatusDisplayItem{
|
public class FooterStatusDisplayItem extends StatusDisplayItem{
|
||||||
@@ -46,6 +51,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
public static class Holder extends StatusDisplayItem.Holder<FooterStatusDisplayItem>{
|
public static class Holder extends StatusDisplayItem.Holder<FooterStatusDisplayItem>{
|
||||||
private final TextView reply, boost, favorite, bookmark;
|
private final TextView reply, boost, favorite, bookmark;
|
||||||
private final ImageView share;
|
private final ImageView share;
|
||||||
|
private static final Animation opacityOut, opacityIn;
|
||||||
|
|
||||||
private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){
|
private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){
|
||||||
@Override
|
@Override
|
||||||
@@ -56,6 +62,16 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static {
|
||||||
|
opacityOut = new AlphaAnimation(1, 0.5f);
|
||||||
|
opacityOut.setDuration(200);
|
||||||
|
opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||||
|
opacityOut.setFillAfter(true);
|
||||||
|
opacityIn = new AlphaAnimation(0.5f, 1);
|
||||||
|
opacityIn.setDuration(150);
|
||||||
|
opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
public Holder(Activity activity, ViewGroup parent){
|
public Holder(Activity activity, ViewGroup parent){
|
||||||
super(activity, R.layout.display_item_footer, parent);
|
super(activity, R.layout.display_item_footer, parent);
|
||||||
reply=findViewById(R.id.reply);
|
reply=findViewById(R.id.reply);
|
||||||
@@ -74,14 +90,19 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
View favorite=findViewById(R.id.favorite_btn);
|
View favorite=findViewById(R.id.favorite_btn);
|
||||||
View share=findViewById(R.id.share_btn);
|
View share=findViewById(R.id.share_btn);
|
||||||
View bookmark=findViewById(R.id.bookmark_btn);
|
View bookmark=findViewById(R.id.bookmark_btn);
|
||||||
|
reply.setOnTouchListener(this::onButtonTouch);
|
||||||
reply.setOnClickListener(this::onReplyClick);
|
reply.setOnClickListener(this::onReplyClick);
|
||||||
reply.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
reply.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
||||||
|
boost.setOnTouchListener(this::onButtonTouch);
|
||||||
boost.setOnClickListener(this::onBoostClick);
|
boost.setOnClickListener(this::onBoostClick);
|
||||||
boost.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
boost.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
||||||
|
favorite.setOnTouchListener(this::onButtonTouch);
|
||||||
favorite.setOnClickListener(this::onFavoriteClick);
|
favorite.setOnClickListener(this::onFavoriteClick);
|
||||||
favorite.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
favorite.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
||||||
|
bookmark.setOnTouchListener(this::onButtonTouch);
|
||||||
bookmark.setOnClickListener(this::onBookmarkClick);
|
bookmark.setOnClickListener(this::onBookmarkClick);
|
||||||
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
||||||
|
share.setOnTouchListener(this::onButtonTouch);
|
||||||
share.setOnClickListener(this::onShareClick);
|
share.setOnClickListener(this::onShareClick);
|
||||||
share.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
share.setAccessibilityDelegate(buttonAccessibilityDelegate);
|
||||||
}
|
}
|
||||||
@@ -115,21 +136,43 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
|
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean onButtonTouch(View v, MotionEvent event){
|
||||||
|
int action = event.getAction();
|
||||||
|
// 20dp to center in middle of icon, because: (icon width = 24dp) / 2 + (paddingStart = 8dp)
|
||||||
|
v.setPivotX(V.dp(20));
|
||||||
|
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
|
||||||
|
v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(100).start();
|
||||||
|
if (action == MotionEvent.ACTION_UP) v.performClick();
|
||||||
|
} else if (action == MotionEvent.ACTION_DOWN) {
|
||||||
|
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(50).start();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private void onBoostClick(View v){
|
private void onBoostClick(View v){
|
||||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged);
|
v.startAnimation(opacityOut);
|
||||||
boost.setSelected(item.status.reblogged);
|
boost.setSelected(!item.status.reblogged);
|
||||||
bindButton(boost, item.status.reblogsCount);
|
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, r->{
|
||||||
|
v.startAnimation(opacityIn);
|
||||||
|
bindButton(boost, r.reblogsCount);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onFavoriteClick(View v){
|
private void onFavoriteClick(View v){
|
||||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited);
|
v.startAnimation(opacityOut);
|
||||||
favorite.setSelected(item.status.favourited);
|
favorite.setSelected(!item.status.favourited);
|
||||||
bindButton(favorite, item.status.favouritesCount);
|
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
|
||||||
|
v.startAnimation(opacityIn);
|
||||||
|
bindButton(favorite, r.favouritesCount);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onBookmarkClick(View v){
|
private void onBookmarkClick(View v){
|
||||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked);
|
v.startAnimation(opacityOut);
|
||||||
bookmark.setSelected(item.status.bookmarked);
|
bookmark.setSelected(item.status.bookmarked);
|
||||||
|
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
|
||||||
|
v.startAnimation(opacityIn);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onShareClick(View v){
|
private void onShareClick(View v){
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ 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.statuses.GetStatusSourceText;
|
import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText;
|
||||||
import org.joinmastodon.android.api.requests.statuses.GetStatusTranslation;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
import org.joinmastodon.android.fragments.ComposeFragment;
|
import org.joinmastodon.android.fragments.ComposeFragment;
|
||||||
@@ -34,7 +33,6 @@ import org.joinmastodon.android.model.Account;
|
|||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.Relationship;
|
import org.joinmastodon.android.model.Relationship;
|
||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
import org.joinmastodon.android.model.StatusTranslation;
|
|
||||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||||
import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
|
import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
@@ -241,7 +239,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(item.hasTranslateToggle){
|
if(item.hasTranslateToggle){
|
||||||
translate.setImageResource(item.status.wantsTranslation ? R.drawable.ic_translate_on : R.drawable.ic_translate_off);
|
translate.setImageResource(R.drawable.ic_translate);
|
||||||
|
translate.setSelected(item.status.wantsTranslation);
|
||||||
}
|
}
|
||||||
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
|
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
|
||||||
if(TextUtils.isEmpty(item.extraText)){
|
if(TextUtils.isEmpty(item.extraText)){
|
||||||
|
|||||||
@@ -718,6 +718,16 @@ public class UiUtils{
|
|||||||
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Yellow : R.style.Theme_Mastodon_Dark_Yellow;
|
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Yellow : R.style.Theme_Mastodon_Dark_Yellow;
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case RED:
|
||||||
|
context.setTheme(switch(GlobalUserPreferences.theme){
|
||||||
|
case AUTO ->
|
||||||
|
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Red : R.style.Theme_Mastodon_AutoLightDark_Red;
|
||||||
|
case LIGHT ->
|
||||||
|
R.style.Theme_Mastodon_Light_Red;
|
||||||
|
case DARK ->
|
||||||
|
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Red : R.style.Theme_Mastodon_Dark_Red;
|
||||||
|
});
|
||||||
|
break;
|
||||||
case MATERIAL3:
|
case MATERIAL3:
|
||||||
context.setTheme(switch(GlobalUserPreferences.theme){
|
context.setTheme(switch(GlobalUserPreferences.theme){
|
||||||
case AUTO ->
|
case AUTO ->
|
||||||
|
|||||||
6
mastodon/src/main/res/color/translate_icon.xml
Normal file
6
mastodon/src/main/res/color/translate_icon.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="?android:colorAccent" android:state_selected="true"/>
|
||||||
|
<item android:color="?android:textColorSecondary" android:state_enabled="true"/>
|
||||||
|
<item android:color="?colorSecondary"/>
|
||||||
|
</selector>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_selected="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_filled"/>
|
<item android:state_selected="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_very_filled"/>
|
||||||
<item android:state_enabled="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_regular"/>
|
<item android:state_enabled="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_regular"/>
|
||||||
<item android:drawable="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
|
<item android:drawable="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
|
||||||
</selector>
|
</selector>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<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,9.123C7.423,9.123 6.125,10.421 6.125,11.994C6.125,12.523 6.269,13.014 6.514,13.434C6.514,13.435 6.513,13.436 6.514,13.438L6.619,13.607L6.623,13.613C6.666,13.679 6.706,13.747 6.744,13.816L7.787,12.775C9.015,11.549 10.977,11.548 12.205,12.775C12.789,13.359 13.077,14.104 13.105,14.863L15.002,14.863C16.579,14.863 17.875,13.567 17.875,11.992C17.875,11.463 17.731,10.972 17.486,10.553L17.486,10.549L17.381,10.379C17.337,10.311 17.295,10.241 17.256,10.17L16.215,11.211C14.986,12.439 13.025,12.44 11.797,11.213C11.218,10.634 10.931,9.885 10.902,9.123L9,9.123z"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:fillColor="#212121"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M20.787,8.06C20.603,7.828 20.319,7.678 20,7.678c-0.552,0 -1,0.447 -1,0.999 0,0.208 0.064,0.401 0.172,0.561C19.695,10.028 20,10.975 20,11.993c0,2.759 -2.238,4.996 -4.999,4.996l-5.586,-0.001 1.294,-1.291 0.084,-0.095c0.281,-0.362 0.279,-0.872 -0.006,-1.231L10.709,14.284 10.614,14.2C10.252,13.92 9.741,13.922 9.382,14.206L9.294,14.284 6.289,17.287 6.206,17.382c-0.281,0.362 -0.279,0.872 0.006,1.231l0.078,0.087 3.005,3.003 0.094,0.083c0.392,0.305 0.96,0.277 1.32,-0.083 0.363,-0.362 0.389,-0.934 0.078,-1.326l-0.078,-0.087 -1.304,-1.303 5.596,0.001 0.241,-0.004C18.996,18.857 22,15.776 22,11.993 22,10.534 21.552,9.178 20.787,8.057Z"
|
||||||
|
android:fillColor="#212121"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M14.712,2.289 L14.625,2.211C14.233,1.901 13.661,1.926 13.298,2.289L13.22,2.376C12.91,2.768 12.936,3.34 13.298,3.702l1.299,1.297 -5.598,0 -0.241,0.004C5.004,5.13 2,8.211 2,11.993c0,1.445 0.438,2.787 1.189,3.898 0.182,0.251 0.477,0.415 0.811,0.415 0.552,0 1,-0.447 1,-0.999C5,15.091 4.931,14.891 4.815,14.729L4.68,14.511C4.248,13.772 4,12.911 4,11.993 4,9.234 6.238,6.998 8.999,6.998L14.595,6.998 13.298,8.295 13.22,8.382c-0.311,0.392 -0.285,0.964 0.078,1.326 0.391,0.39 1.024,0.39 1.414,0L17.718,6.705 17.795,6.618C18.106,6.226 18.08,5.654 17.718,5.292Z"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:fillColor="#212121"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M20.11,5.619L20.11,5.619A1.393,0.037 0,0 1,21.503 5.656L21.503,5.656A1.393,0.037 0,0 1,20.11 5.693L20.11,5.693A1.393,0.037 0,0 1,18.717 5.656L18.717,5.656A1.393,0.037 0,0 1,20.11 5.619z"
|
||||||
|
android:strokeWidth="52.513"
|
||||||
|
android:fillColor="#613583"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:fillAlpha="0.0156863"/>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<path android:pathData="M16.953 5.303c0.167-0.526-0.124-1.088-0.65-1.256-0.526-0.167-1.089 0.124-1.256 0.65-0.124 0.389-0.236 0.899-0.324 1.344-0.565 0.012-1.12 0-1.652-0.038-0.55-0.04-1.03 0.375-1.069 0.926-0.039 0.55 0.376 1.03 0.927 1.069 0.46 0.032 0.934 0.048 1.416 0.047-0.106 0.612-0.184 1.176-0.24 1.697-1.263 0.717-2.142 1.685-2.636 2.701-0.624 1.283-0.7 2.857 0.239 3.883 0.675 0.736 1.704 0.758 2.499 0.588 0.322-0.068 0.654-0.176 0.988-0.32 0.255 0.346 0.716 0.5 1.142 0.348 0.52-0.186 0.79-0.759 0.604-1.278L16.9 15.549c1.148-0.931 2.202-2.307 2.735-4.06 0.286 0.251 0.507 0.55 0.658 0.864 0.284 0.594 0.334 1.271 0.099 1.91-0.234 0.633-0.78 1.313-1.84 1.843-0.493 0.247-0.694 0.847-0.447 1.341 0.247 0.494 0.848 0.695 1.342 0.448 1.44-0.72 2.385-1.758 2.821-2.94 0.434-1.176 0.332-2.414-0.17-3.464-0.44-0.918-1.171-1.68-2.104-2.165C19.998 9.22 20 9.11 20 9c0-0.552-0.448-1-1-1-0.473 0-0.87 0.329-0.974 0.77-0.567-0.045-1.17-0.003-1.796 0.138 0.047-0.304 0.102-0.626 0.166-0.964 0.977-0.094 1.944-0.253 2.842-0.473 0.536-0.131 0.864-0.672 0.733-1.209-0.131-0.536-0.673-0.864-1.21-0.733-0.621 0.152-1.285 0.272-1.963 0.358 0.048-0.208 0.1-0.409 0.155-0.583zm-3.686 8.015c0.166-0.34 0.414-0.697 0.758-1.037 0.02 0.348 0.053 0.67 0.098 0.973 0.083 0.56 0.207 1.048 0.341 1.477-0.243 0.109-0.47 0.184-0.674 0.227-0.429 0.092-0.588 0.019-0.614 0.006l-0.004-0.001c-0.162-0.193-0.329-0.774 0.095-1.645zm4.498-2.562c-0.308 1.112-0.89 2.03-1.568 2.73-0.035-0.164-0.067-0.338-0.095-0.525-0.076-0.513-0.117-1.132-0.088-1.904 0.033-0.013 0.067-0.024 0.1-0.036l1.651-0.265zm-1.651 0.265l1.651-0.265c-0.495-0.025-1.049 0.053-1.651 0.265zM7.536 6.29c-2.02-0.589-3.67-0.038-4.456 0.33-0.5 0.234-0.716 0.83-0.482 1.33 0.234 0.5 0.83 0.715 1.33 0.481 0.53-0.248 1.66-0.626 3.048-0.222 0.365 0.107 0.569 0.248 0.69 0.37 0.122 0.123 0.204 0.27 0.258 0.454 0.067 0.225 0.087 0.446 0.09 0.69C7.84 9.68 7.655 9.64 7.459 9.606c-1.146-0.199-2.733-0.215-4.262 0.64-1.271 0.713-1.796 2.168-1.682 3.448 0.12 1.326 0.94 2.679 2.572 3.136 1.48 0.414 2.913-0.045 3.877-0.507l0.08-0.04c0.122 0.416 0.506 0.719 0.96 0.719 0.553 0 1-0.448 1-1V10.5c0-0.053 0.002-0.12 0.005-0.2 0.012-0.417 0.034-1.16-0.168-1.838C9.71 8.023 9.48 7.57 9.086 7.172S8.176 6.478 7.538 6.29H7.537zm-0.419 5.287c0.344 0.06 0.647 0.143 0.887 0.222v2.197c-0.224 0.156-0.538 0.35-0.904 0.525-0.792 0.38-1.682 0.605-2.473 0.384-0.698-0.195-1.06-0.742-1.119-1.389-0.062-0.693 0.243-1.286 0.667-1.523 0.987-0.553 2.06-0.569 2.943-0.415z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<path android:pathData="M16.961 5.987c0.13-0.394-0.082-0.818-0.475-0.949-0.393-0.13-0.818 0.083-0.948 0.476-0.148 0.445-0.304 1.04-0.42 1.512-0.736 0.026-1.446 0.018-2.067-0.024-0.413-0.028-0.771 0.284-0.8 0.697-0.027 0.413 0.285 0.771 0.698 0.8 0.563 0.038 1.19 0.05 1.844 0.037-0.144 0.765-0.241 1.449-0.3 2.064-1.215 0.642-2.061 1.504-2.539 2.412-0.613 1.166-0.66 2.556 0.206 3.443 0.571 0.584 1.408 0.64 2.129 0.485 0.405-0.087 0.825-0.248 1.24-0.474l0.018 0.046c0.145 0.389 0.577 0.586 0.965 0.44 0.388-0.144 0.585-0.576 0.44-0.964-0.056-0.152-0.114-0.291-0.17-0.424 1.023-0.936 1.915-2.308 2.285-4.047 0.638 0.312 1.07 0.836 1.278 1.4 0.227 0.613 0.213 1.312-0.097 1.952-0.308 0.636-0.933 1.265-2.015 1.681-0.387 0.149-0.58 0.583-0.431 0.97 0.149 0.386 0.582 0.579 0.969 0.43 1.387-0.533 2.33-1.402 2.827-2.427 0.494-1.02 0.518-2.143 0.154-3.127-0.414-1.116-1.3-2.01-2.505-2.424 0.002-0.073 0.003-0.147 0.003-0.222C19.25 9.336 18.914 9 18.5 9c-0.405 0-0.735 0.322-0.75 0.724-0.524-0.005-1.084 0.07-1.672 0.237 0.064-0.455 0.148-0.953 0.257-1.5 1.185-0.089 2.364-0.252 3.337-0.48 0.403-0.095 0.653-0.5 0.558-0.902-0.095-0.404-0.498-0.654-0.902-0.559-0.767 0.18-1.69 0.318-2.637 0.406 0.085-0.33 0.18-0.67 0.27-0.94zm-3.68 7.723c0.227-0.43 0.6-0.886 1.147-1.3 0.017 0.492 0.065 0.926 0.137 1.317 0.094 0.52 0.236 0.974 0.386 1.373-0.306 0.171-0.632 0.3-0.977 0.374-0.485 0.104-0.687-0.012-0.742-0.068-0.24-0.245-0.394-0.853 0.05-1.696zm4.315-2.487c-0.21 0.966-0.7 2.022-1.414 2.848-0.052-0.184-0.1-0.385-0.142-0.612-0.089-0.49-0.14-1.092-0.111-1.866 0.11-0.042 0.222-0.082 0.339-0.12 0.481-0.16 0.924-0.238 1.328-0.25zM7.96 6.53C5.72 5.878 3.958 6.681 3.385 6.997c-0.363 0.2-0.494 0.657-0.294 1.02C3.29 8.378 3.747 8.51 4.11 8.31c0.405-0.223 1.736-0.833 3.43-0.34 0.773 0.227 1.098 0.64 1.264 1.056 0.133 0.332 0.175 0.691 0.188 1.042-0.27-0.075-0.581-0.15-0.923-0.21-1.132-0.202-2.682-0.263-4.122 0.427-1.586 0.76-2.13 2.316-1.902 3.697 0.224 1.356 1.216 2.666 2.8 2.951 1.43 0.258 2.806-0.256 3.757-0.761 0.14-0.074 0.271-0.148 0.396-0.222v0.3c0 0.414 0.335 0.75 0.75 0.75 0.414 0 0.75-0.336 0.75-0.75v-5.79c0-0.454 0-1.236-0.3-1.99-0.331-0.829-1.005-1.578-2.236-1.94H7.96zm-0.153 4.804c0.483 0.086 0.898 0.206 1.19 0.305v2.506l-0.105 0.078C8.653 14.4 8.31 14.63 7.9 14.847c-0.84 0.447-1.85 0.779-2.788 0.61-0.845-0.152-1.445-0.866-1.586-1.72-0.138-0.83 0.179-1.673 1.07-2.1 1.037-0.496 2.226-0.478 3.212-0.303z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||||
|
</vector>
|
||||||
6
mastodon/src/main/res/drawable/ic_translate.xml
Normal file
6
mastodon/src/main/res/drawable/ic_translate.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_selected="true" android:drawable="@drawable/ic_fluent_translate_24_filled"/>
|
||||||
|
<item android:state_enabled="true" android:drawable="@drawable/ic_fluent_translate_24_regular"/>
|
||||||
|
<item android:drawable="@drawable/ic_fluent_translate_24_regular"/>
|
||||||
|
</selector>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<vector android:height="24dp" android:tint="#000000"
|
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<path android:fillColor="?colorSecondary" android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
|
|
||||||
</vector>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<vector android:height="24dp" android:tint="#000000"
|
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<path android:fillColor="?colorSecondary" android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
|
|
||||||
</vector>
|
|
||||||
@@ -42,8 +42,8 @@
|
|||||||
android:layout_toStartOf="@id/visibility"
|
android:layout_toStartOf="@id/visibility"
|
||||||
android:background="?android:selectableItemBackgroundBorderless"
|
android:background="?android:selectableItemBackgroundBorderless"
|
||||||
android:scaleType="center"
|
android:scaleType="center"
|
||||||
android:src="@drawable/ic_visibility"
|
android:src="@drawable/ic_translate"
|
||||||
android:tint="?android:textColorSecondary" />
|
android:tint="@color/translate_icon" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/posts_btn"
|
android:id="@+id/posts_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="56dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/following_btn"
|
android:id="@+id/following_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="56dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/followers_btn"
|
android:id="@+id/followers_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="56dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
|
|||||||
@@ -7,4 +7,5 @@
|
|||||||
<item android:id="@+id/blue_color" android:title="@string/sk_color_theme_blue"/>
|
<item android:id="@+id/blue_color" android:title="@string/sk_color_theme_blue"/>
|
||||||
<item android:id="@+id/orange_color" android:title="@string/sk_color_theme_brown"/>
|
<item android:id="@+id/orange_color" android:title="@string/sk_color_theme_brown"/>
|
||||||
<item android:id="@+id/yellow_color" android:title="@string/sk_color_theme_yellow"/>
|
<item android:id="@+id/yellow_color" android:title="@string/sk_color_theme_yellow"/>
|
||||||
|
<item android:id="@+id/red_color" android:title="@string/sk_color_theme_red"/>
|
||||||
</menu>
|
</menu>
|
||||||
@@ -56,4 +56,7 @@
|
|||||||
<string name="sk_language_name">%s (%s)</string>
|
<string name="sk_language_name">%s (%s)</string>
|
||||||
<string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string>
|
<string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string>
|
||||||
<string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string>
|
<string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string>
|
||||||
|
<string name="sk_example_domain">exemple.social</string>
|
||||||
|
<string name="sk_welcome_title">Bienvenue !</string>
|
||||||
|
<string name="sk_welcome_text">Le requin vous salue ! Pour commencer, veuillez entrer le nom de domaine de votre instance personnelle ci-dessous.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -47,4 +47,16 @@
|
|||||||
<string name="sk_settings_show_federated_timeline">Mostra timeline federata</string>
|
<string name="sk_settings_show_federated_timeline">Mostra timeline federata</string>
|
||||||
<string name="sk_disable_marquee">Disabilita scorrimento titoli</string>
|
<string name="sk_disable_marquee">Disabilita scorrimento titoli</string>
|
||||||
<string name="sk_reject_follow_request">Rifiuta richiesta di seguirti</string>
|
<string name="sk_reject_follow_request">Rifiuta richiesta di seguirti</string>
|
||||||
|
<string name="sk_translate_post">Traduci</string>
|
||||||
|
<string name="sk_translate_show_original">Mostra originale</string>
|
||||||
|
<string name="sk_translated_using">Tradotto usando %s</string>
|
||||||
|
<string name="sk_post_language">Lingua: %s</string>
|
||||||
|
<string name="sk_language_name">%s (%s)</string>
|
||||||
|
<string name="sk_confirm_clear_recent_languages">Sei sicuro di voler cancellare le lingue usate di recente\?</string>
|
||||||
|
<string name="sk_clear_recent_languages">Cancella lingue usate di recente</string>
|
||||||
|
<string name="sk_welcome_title">Benvenuto!</string>
|
||||||
|
<string name="sk_example_domain">example.social</string>
|
||||||
|
<string name="sk_poll_allow_multiple">Permetti scelta multipla</string>
|
||||||
|
<string name="sk_available_languages">Lingue disponibili</string>
|
||||||
|
<string name="sk_welcome_text">Lo squalo ti saluta! Per iniziare inserisci il dominio dell\'istanza a cui sei iscritto.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -56,4 +56,7 @@
|
|||||||
<string name="sk_available_languages">모든 언어</string>
|
<string name="sk_available_languages">모든 언어</string>
|
||||||
<string name="sk_clear_recent_languages">최근 사용한 언어 지우기</string>
|
<string name="sk_clear_recent_languages">최근 사용한 언어 지우기</string>
|
||||||
<string name="sk_confirm_clear_recent_languages">정말로 최근 사용한 언어를 지우시겠습니까\?</string>
|
<string name="sk_confirm_clear_recent_languages">정말로 최근 사용한 언어를 지우시겠습니까\?</string>
|
||||||
|
<string name="sk_example_domain">example.social</string>
|
||||||
|
<string name="sk_welcome_title">환영합니다!</string>
|
||||||
|
<string name="sk_welcome_text">상어가 당신을 맞이합니다! 시작하기 위해, 아래에 사용하시는 인스턴스의 도메인 이름을 입력해주세요.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -18,6 +18,9 @@
|
|||||||
<style name="Theme.Mastodon.AutoLightDark.Yellow" parent="Theme.Mastodon.Dark.Yellow"/>
|
<style name="Theme.Mastodon.AutoLightDark.Yellow" parent="Theme.Mastodon.Dark.Yellow"/>
|
||||||
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Yellow" parent="Theme.Mastodon.Dark.TrueBlack.Yellow"/>
|
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Yellow" parent="Theme.Mastodon.Dark.TrueBlack.Yellow"/>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.AutoLightDark.Red" parent="Theme.Mastodon.Dark.Red"/>
|
||||||
|
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Red" parent="Theme.Mastodon.Dark.TrueBlack.Red"/>
|
||||||
|
|
||||||
<style name="Theme.Mastodon.AutoLightDark.Material3" parent="Theme.Mastodon.Dark.Material3"/>
|
<style name="Theme.Mastodon.AutoLightDark.Material3" parent="Theme.Mastodon.Dark.Material3"/>
|
||||||
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Material3" parent="Theme.Mastodon.Dark.TrueBlack.Material3"/>
|
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Material3" parent="Theme.Mastodon.Dark.TrueBlack.Material3"/>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<string name="sk_mark_media_as_sensitive">Oznacz jako wrażliwe</string>
|
<string name="sk_mark_media_as_sensitive">Oznacz jako wrażliwe</string>
|
||||||
<string name="sk_user_post_notifications_on">Włączono powiadomienia dla postu %s</string>
|
<string name="sk_user_post_notifications_on">Włączono powiadomienia dla postu %s</string>
|
||||||
<string name="sk_user_post_notifications_off">Wyłączono powiadomienia dla postu %s</string>
|
<string name="sk_user_post_notifications_off">Wyłączono powiadomienia dla postu %s</string>
|
||||||
<string name="sk_federated_timeline">Globalne</string>
|
<string name="sk_federated_timeline">fediwersum</string>
|
||||||
<string name="sk_federated_timeline_info_banner">To są najnowsze post ze znanej sieci fediwersum dla twojego serwera.</string>
|
<string name="sk_federated_timeline_info_banner">To są najnowsze post ze znanej sieci fediwersum dla twojego serwera.</string>
|
||||||
<string name="sk_update_available">Moshidon %s jest dostępny do pobrania.</string>
|
<string name="sk_update_available">Moshidon %s jest dostępny do pobrania.</string>
|
||||||
<string name="sk_update_ready">Moshidon %s został pobrany i jest gotowy do instalacji.</string>
|
<string name="sk_update_ready">Moshidon %s został pobrany i jest gotowy do instalacji.</string>
|
||||||
@@ -56,4 +56,7 @@
|
|||||||
<string name="sk_language_name">%s (%s)</string>
|
<string name="sk_language_name">%s (%s)</string>
|
||||||
<string name="sk_confirm_clear_recent_languages">Czy na pewno chcesz wyczyścić ostatnio użyte języki\?</string>
|
<string name="sk_confirm_clear_recent_languages">Czy na pewno chcesz wyczyścić ostatnio użyte języki\?</string>
|
||||||
<string name="sk_clear_recent_languages">Wyczyść ostatnio użyte języki</string>
|
<string name="sk_clear_recent_languages">Wyczyść ostatnio użyte języki</string>
|
||||||
|
<string name="sk_example_domain">przykład.social</string>
|
||||||
|
<string name="sk_welcome_title">Witaj!</string>
|
||||||
|
<string name="sk_welcome_text">Rekin się kłania! Aby zacząć, wpisz adres swojej instancji poniżej.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -54,4 +54,5 @@
|
|||||||
<string name="sk_language_name">%s (%s)</string>
|
<string name="sk_language_name">%s (%s)</string>
|
||||||
<string name="sk_confirm_clear_recent_languages">Tem certeza de que deseja limpar os idiomas usados recentemente\?</string>
|
<string name="sk_confirm_clear_recent_languages">Tem certeza de que deseja limpar os idiomas usados recentemente\?</string>
|
||||||
<string name="sk_clear_recent_languages">Limpar idiomas usados recentemente</string>
|
<string name="sk_clear_recent_languages">Limpar idiomas usados recentemente</string>
|
||||||
|
<string name="sk_notify_posts">Notificações de posts</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -15,4 +15,42 @@
|
|||||||
<string name="sk_visibility_unlisted">Скрытый</string>
|
<string name="sk_visibility_unlisted">Скрытый</string>
|
||||||
<string name="sk_mark_media_as_sensitive">Отметить медиафайл как деликатный</string>
|
<string name="sk_mark_media_as_sensitive">Отметить медиафайл как деликатный</string>
|
||||||
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
|
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
|
||||||
|
<string name="sk_notification_type_status">Публикации</string>
|
||||||
|
<string name="sk_notify_posts">Отправляет публикацию</string>
|
||||||
|
<string name="sk_settings_color_picker">Цветовая схема</string>
|
||||||
|
<string name="sk_color_theme_pink">Розовый</string>
|
||||||
|
<string name="sk_color_theme_purple">Фиолетовый</string>
|
||||||
|
<string name="sk_color_theme_brown">Коричневый</string>
|
||||||
|
<string name="sk_color_theme_yellow">Жёлтый</string>
|
||||||
|
<string name="sk_translate_show_original">Показать оригинальную публикацию</string>
|
||||||
|
<string name="sk_translated_using">Переведено через %s</string>
|
||||||
|
<string name="sk_available_languages">Доступные языки</string>
|
||||||
|
<string name="sk_language_name">%s (%s)</string>
|
||||||
|
<string name="sk_welcome_title">Добро пожаловать!</string>
|
||||||
|
<string name="sk_example_domain">example.social</string>
|
||||||
|
<string name="sk_settings_load_new_posts">Автоматически загружать новые публикации</string>
|
||||||
|
<string name="sk_settings_show_replies">Показывать ответы на публикации</string>
|
||||||
|
<string name="sk_federated_timeline">Федерация</string>
|
||||||
|
<string name="sk_update_available">Moshidon %s готов к скачиванию.</string>
|
||||||
|
<string name="sk_update_ready">Moshidon %s скачан и готов к установке новой версии.</string>
|
||||||
|
<string name="sk_check_for_update">Проверить обновления</string>
|
||||||
|
<string name="sk_follow_requests">Запросы на подписку</string>
|
||||||
|
<string name="sk_lists_with_user">Списки с %s</string>
|
||||||
|
<string name="sk_confirm_unpin_post">Вы точно хотите открепить эту публикацию от профиля\?</string>
|
||||||
|
<string name="sk_unpinning">Открепление публикации…</string>
|
||||||
|
<string name="sk_federated_timeline_info_banner">Это самые последние публикации людей из вашей федерации.</string>
|
||||||
|
<string name="sk_no_update_available">Обновление отсутствует</string>
|
||||||
|
<string name="sk_list_timelines">Списки</string>
|
||||||
|
<string name="sk_accept_follow_request">Принять запрос на подписку</string>
|
||||||
|
<string name="sk_reject_follow_request">Отклонить заявку на подписку</string>
|
||||||
|
<string name="sk_settings_always_reveal_content_warnings">Всегда раскрывать предупреждения о непристойном контенте</string>
|
||||||
|
<string name="sk_settings_contribute">Внести свой код в Moshidon</string>
|
||||||
|
<string name="sk_settings_show_federated_timeline">Показывать федеративную временную шкалу</string>
|
||||||
|
<string name="sk_color_theme_green">Зелёный</string>
|
||||||
|
<string name="sk_color_theme_blue">Синий</string>
|
||||||
|
<string name="sk_translate_post">Перевести</string>
|
||||||
|
<string name="sk_post_language">Язык: %s</string>
|
||||||
|
<string name="sk_clear_recent_languages">Очистить недавно использованные языки</string>
|
||||||
|
<string name="sk_confirm_clear_recent_languages">Вы точно хотите очистить недавно использованные языки\?</string>
|
||||||
|
<string name="sk_welcome_text">Акула приветствует вас! Чтобы начать, пожалуйста, введите домен своего домашнего сервера (инстанса) ниже.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -56,4 +56,7 @@
|
|||||||
<string name="sk_no_update_available">Немає доступних оновлень</string>
|
<string name="sk_no_update_available">Немає доступних оновлень</string>
|
||||||
<string name="sk_list_timelines">Списки</string>
|
<string name="sk_list_timelines">Списки</string>
|
||||||
<string name="sk_settings_show_federated_timeline">Показувати федеративну стрічку</string>
|
<string name="sk_settings_show_federated_timeline">Показувати федеративну стрічку</string>
|
||||||
|
<string name="sk_example_domain">example.social</string>
|
||||||
|
<string name="sk_welcome_title">Вітаємо!</string>
|
||||||
|
<string name="sk_welcome_text">Акулка вас вітає! Щоб розпочати, введіть нижче доменне ім’я вашого інстансу.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -5,4 +5,5 @@
|
|||||||
<color name="blue_navigation_bar_bg">@color/blue_gray_50</color>
|
<color name="blue_navigation_bar_bg">@color/blue_gray_50</color>
|
||||||
<color name="orange_navigation_bar_bg">@color/orange_gray_50</color>
|
<color name="orange_navigation_bar_bg">@color/orange_gray_50</color>
|
||||||
<color name="yellow_navigation_bar_bg">@color/yellow_gray_50</color>
|
<color name="yellow_navigation_bar_bg">@color/yellow_gray_50</color>
|
||||||
|
<color name="red_navigation_bar_bg">@color/red_gray_50</color>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -91,6 +91,18 @@
|
|||||||
<color name="yellow_primary_800">#3c2f00</color>
|
<color name="yellow_primary_800">#3c2f00</color>
|
||||||
<color name="yellow_primary_900">#231b00</color>
|
<color name="yellow_primary_900">#231b00</color>
|
||||||
|
|
||||||
|
<color name="red_primary_25">#FFFBFA</color>
|
||||||
|
<color name="red_primary_50">#FEF3F2</color>
|
||||||
|
<color name="red_primary_100">#FEE4E2</color>
|
||||||
|
<color name="red_primary_200">#FECDCA</color>
|
||||||
|
<color name="red_primary_300">#FDA29B</color>
|
||||||
|
<color name="red_primary_400">#F97066</color>
|
||||||
|
<color name="red_primary_500">#F04438</color>
|
||||||
|
<color name="red_primary_600">#D92D20</color>
|
||||||
|
<color name="red_primary_700">#B42318</color>
|
||||||
|
<color name="red_primary_800">#912018</color>
|
||||||
|
<color name="red_primary_900">#7A271A</color>
|
||||||
|
|
||||||
<color name="custom_gray_900">#000000</color>
|
<color name="custom_gray_900">#000000</color>
|
||||||
<color name="custom_gray_800t">#cc171717</color>
|
<color name="custom_gray_800t">#cc171717</color>
|
||||||
<color name="custom_gray_800">#171717</color>
|
<color name="custom_gray_800">#171717</color>
|
||||||
@@ -147,6 +159,14 @@
|
|||||||
<color name="yellow_gray_50">#fff0ca</color>
|
<color name="yellow_gray_50">#fff0ca</color>
|
||||||
<color name="yellow_gray_25">#f7f8fa</color>
|
<color name="yellow_gray_25">#f7f8fa</color>
|
||||||
|
|
||||||
|
<color name="red_gray_400">#d69f84</color>
|
||||||
|
<color name="red_gray_300">#f4ba9e</color>
|
||||||
|
<color name="red_gray_200">#ffdbcb</color>
|
||||||
|
<color name="red_gray_100">#ffedea</color>
|
||||||
|
<color name="red_gray_50t">#ffede6ca</color>
|
||||||
|
<color name="red_gray_50">#ffede6</color>
|
||||||
|
<color name="red_gray_25">#f7f8fa</color>
|
||||||
|
|
||||||
<color name="error_25">#FFFBFA</color>
|
<color name="error_25">#FFFBFA</color>
|
||||||
<color name="error_50">#FEF3F2</color>
|
<color name="error_50">#FEF3F2</color>
|
||||||
<color name="error_100">#FEE4E2</color>
|
<color name="error_100">#FEE4E2</color>
|
||||||
@@ -211,6 +231,7 @@
|
|||||||
<color name="favorite_selected">@color/warning_500</color>
|
<color name="favorite_selected">@color/warning_500</color>
|
||||||
<color name="bookmark_selected">@color/success_500</color>
|
<color name="bookmark_selected">@color/success_500</color>
|
||||||
<color name="boost_selected">?android:colorPrimary</color>
|
<color name="boost_selected">?android:colorPrimary</color>
|
||||||
|
<color name="translate_selected">?android:colorPrimary</color>
|
||||||
|
|
||||||
<color name="shortcut_icon_background">#282C37</color>
|
<color name="shortcut_icon_background">#282C37</color>
|
||||||
<!-- <color name="shortcut_icon_foreground">@color/primary_700</color>-->
|
<!-- <color name="shortcut_icon_foreground">@color/primary_700</color>-->
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
<string name="sk_color_theme_blue">Blue</string>
|
<string name="sk_color_theme_blue">Blue</string>
|
||||||
<string name="sk_color_theme_brown">Orange</string>
|
<string name="sk_color_theme_brown">Orange</string>
|
||||||
<string name="sk_color_theme_yellow">Yellow</string>
|
<string name="sk_color_theme_yellow">Yellow</string>
|
||||||
|
<string name="sk_color_theme_red">Red</string>
|
||||||
<string name="sk_color_theme_material3">Material You</string>
|
<string name="sk_color_theme_material3">Material You</string>
|
||||||
<string name="sk_not_supported">Not supported on your device</string>
|
<string name="sk_not_supported">Not supported on your device</string>
|
||||||
<string name="sk_poll_allow_multiple">Allow multiple choices</string>
|
<string name="sk_poll_allow_multiple">Allow multiple choices</string>
|
||||||
|
|||||||
@@ -690,6 +690,97 @@
|
|||||||
<item name="android:textColorSecondary">@color/custom_gray_800</item>
|
<item name="android:textColorSecondary">@color/custom_gray_800</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Light.Red" parent="Theme.Mastodon.Light.CustomBase">
|
||||||
|
<item name="android:colorAccent">@color/red_primary_700</item>
|
||||||
|
<item name="android:colorBackground">@color/red_gray_100</item>
|
||||||
|
<item name="colorButtonText">@color/red_gray_50</item>
|
||||||
|
<item name="colorBackgroundLight">@color/red_gray_50</item>
|
||||||
|
<item name="colorBackgroundLightest">@color/red_gray_25</item>
|
||||||
|
<item name="android:statusBarColor">@color/red_gray_50</item>
|
||||||
|
<item name="android:navigationBarColor">@color/red_navigation_bar_bg</item>
|
||||||
|
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Red</item>
|
||||||
|
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Red</item>
|
||||||
|
<item name="colorPollMostVoted">@color/red_primary_500</item>
|
||||||
|
<item name="colorPollVoted">@color/red_gray_300</item>
|
||||||
|
<item name="colorAccentLight">@color/red_primary_600</item>
|
||||||
|
<item name="colorSearchField">@color/red_gray_200</item>
|
||||||
|
<item name="colorTabInactive">@color/red_gray_400</item>
|
||||||
|
<item name="colorAccentLightest">@color/red_primary_100</item>
|
||||||
|
<item name="colorSecondary">@color/red_gray_50</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Dark.Red" parent="Theme.Mastodon.Dark.CustomBase">
|
||||||
|
<item name="android:colorAccent">@color/red_primary_400</item>
|
||||||
|
<item name="android:colorPrimary">@color/red_gray_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/red_gray_50</item>
|
||||||
|
<item name="android:textColorSecondary">@color/red_gray_400</item>
|
||||||
|
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Red</item>
|
||||||
|
<item name="colorPollMostVoted">@color/red_primary_700</item>
|
||||||
|
<item name="colorAccentLight">@color/red_primary_600</item>
|
||||||
|
<item name="colorAccentLightest">@color/red_primary_800</item>
|
||||||
|
<item name="colorTabInactive">@color/red_gray_400</item>
|
||||||
|
<item name="colorSearchHint">@color/red_gray_300</item>
|
||||||
|
<item name="colorSecondary">@color/red_gray_50</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Dark.TrueBlack.Red" parent="Theme.Mastodon.Dark.Red">
|
||||||
|
<item name="android:colorAccent">@color/red_primary_400</item>
|
||||||
|
<item name="colorPollMostVoted">@color/red_primary_700</item>
|
||||||
|
<item name="colorAccentLight">@color/red_primary_600</item>
|
||||||
|
<item name="colorAccentLightest">@color/red_primary_800</item>
|
||||||
|
<item name="colorSecondary">@color/red_gray_50</item>
|
||||||
|
|
||||||
|
<item name="colorPollVoted">@color/custom_gray_800</item>
|
||||||
|
<item name="colorSearchField">@color/custom_gray_900</item>
|
||||||
|
<item name="colorBackgroundPopup">@color/custom_gray_900</item>
|
||||||
|
<item name="android:navigationBarColor">@color/black</item>
|
||||||
|
<item name="android:colorBackground">@color/black</item>
|
||||||
|
<item name="android:statusBarColor">@color/black</item>
|
||||||
|
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark.TrueBlack</item>
|
||||||
|
<item name="colorBackgroundLight">@color/black</item>
|
||||||
|
<item name="colorWindowBackground">@color/black</item>
|
||||||
|
<item name="colorButtonText">@color/black</item>
|
||||||
|
<item name="colorBackgroundLightest">@color/black</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.AutoLightDark.Red" parent="Theme.Mastodon.Light.Red"/>
|
||||||
|
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Red" parent="Theme.Mastodon.Light.Red"/>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Dialog.Alert.Dark.Red" parent="android:Theme.Material.Dialog.Alert">
|
||||||
|
<item name="android:windowTitleStyle">@style/alert_title</item>
|
||||||
|
<item name="android:dialogPreferredPadding">24dp</item>
|
||||||
|
<item name="android:windowBackground">@drawable/bg_alert</item>
|
||||||
|
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
|
||||||
|
|
||||||
|
<!-- colors -->
|
||||||
|
<item name="android:colorAccent">@color/red_primary_600</item>
|
||||||
|
<item name="android:colorPrimary">@color/red_gray_50</item>
|
||||||
|
<item name="android:colorBackground">@color/custom_gray_700</item>
|
||||||
|
<item name="android:textColorPrimary">@color/red_gray_50</item>
|
||||||
|
<item name="android:textColorSecondary">@color/red_gray_400</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Dialog.Alert.Red" parent="android:Theme.Material.Light.Dialog.Alert">
|
||||||
|
<item name="android:windowTitleStyle">@style/alert_title</item>
|
||||||
|
<item name="android:dialogPreferredPadding">24dp</item>
|
||||||
|
<item name="android:windowBackground">@drawable/bg_alert</item>
|
||||||
|
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
|
||||||
|
|
||||||
|
<!-- colors -->
|
||||||
|
<item name="android:colorAccent">@color/red_primary_700</item>
|
||||||
|
<item name="android:colorPrimary">@color/custom_gray_800</item>
|
||||||
|
<item name="android:colorBackground">@color/red_gray_100</item>
|
||||||
|
<item name="android:textColorPrimary">@color/custom_gray_800</item>
|
||||||
|
<item name="android:textColorSecondary">@color/custom_gray_500</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.Mastodon.Toolbar.Red" parent="android:ThemeOverlay.Material.ActionBar">
|
||||||
|
<item name="android:colorPrimary">@color/red_gray_50</item>
|
||||||
|
<item name="android:textColorPrimary">@color/custom_gray_800</item>
|
||||||
|
<item name="android:textColorSecondary">@color/custom_gray_800</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style name="Theme.Mastodon.Dark.Original" parent="Theme.Mastodon.Dark">
|
<style name="Theme.Mastodon.Dark.Original" parent="Theme.Mastodon.Dark">
|
||||||
<item name="android:colorAccent">@color/original_primary_400</item>
|
<item name="android:colorAccent">@color/original_primary_400</item>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
Megalodon은 <a href="https://github.com/mastodon/mastodon-android">공식 마스토돈 안드로이드 앱</a>의 수정된 버전으로, 공식 앱에서 누락된 연합 타임라인, 타임라인에 비표시하여 게시, 이미지 설명 표시와 같은 중요한 기능들을 추가했습니다.
|
Megalodon은 <a href="https://github.com/mastodon/mastodon-android">공식 마스토돈 안드로이드 앱</a>의 수정된 버전으로, 공식 앱에서 누락된 연합 타임라인, 타임라인에 비표시하여 게시, 이미지 설명 뷰어와 같은 중요한 기능들을 추가했습니다.
|
||||||
|
|
||||||
<b>주요 기능</b>
|
<b>주요 기능</b>
|
||||||
|
|
||||||
- <b>타임라인에 비표시하여 게시</b>: 모두가 볼 수 있지만 트렌드, 해시태그 및 공개된 타임라인에 보이지 않습니다.
|
- <b>타임라인에 비표시하여 게시</b>: 모두가 볼 수 있지만 트렌드, 해시태그 및 공개된 타임라인에 보이지 않습니다.
|
||||||
- <b>연합 타임라인</b>: 사용 중인 인스턴스에 연결된 연합우주의 사람들이 올린 모든 공개된 게시물을 확인하세요.
|
- <b>연합 타임라인</b>: 사용 중인 인스턴스에 연결된 연합우주의 사람들이 올린 모든 공개된 게시물을 확인하세요.
|
||||||
- <b>이미지 설명 표시</b>: 이미지나 동영상에 대체 텍스트가 있는지 빠르게 확인하세요.
|
- <b>이미지 설명 뷰어</b>: 이미지나 동영상에 대체 텍스트가 있는지 빠르게 확인하세요.
|
||||||
- <b>게시물 고정</b>: 가장 중요한 게시물을 프로필에 고정하고 “고정됨” 탭으로 다른 사용자가 고정한 게시물을 확인하세요.
|
- <b>게시물 고정</b>: 가장 중요한 게시물을 프로필에 고정하고 “고정됨” 탭으로 다른 사용자가 고정한 게시물을 확인하세요.
|
||||||
- <b>해시태그 팔로우</b>: 특정 해시태그를 팔로우하고 해시태그가 포함된 새로운 게시물을 홈 타임라인에서 바로 확인하세요.
|
- <b>해시태그 팔로우</b>: 특정 해시태그를 팔로우하고 해시태그가 포함된 새로운 게시물을 홈 타임라인에서 바로 확인하세요.
|
||||||
- <b>팔로우 요청에 응답</b>: 알림 또는 전용 팔로우 요청 목록을 통해 팔로우 요청을 허가하거나 거부하세요.
|
- <b>팔로우 요청에 응답</b>: 알림 또는 전용 팔로우 요청 목록을 통해 팔로우 요청을 허가하거나 거부하세요.
|
||||||
|
|||||||
10
metadata/ru/full_description.txt
Normal file
10
metadata/ru/full_description.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Megalodon - это модифицированная версия <a href="https://github.com/mastodon/mastodon-android">официального клиента Mastodon на Android</a>, добавляющая важные функции, отсутствующие в официальном приложении, такие как объединенная временная шкала, "скрытая" публикация и просмотр описания изображений.
|
||||||
|
|
||||||
|
<b>Основные отличия от официального клиента</b>
|
||||||
|
- <b>Скрытая Публикация</b>: Публикуйте публично, без того, чтобы ваш пост отображался в трендах, хэштегах или общедоступных временных шкалах.
|
||||||
|
- <b> Объединенная временная шкала</b>: смотрите все общедоступные сообщения от людей во всех других районах Fediverse, к которым подключен ваш домашний сервер (инстанс).
|
||||||
|
- <b> Просмотр описания изображения</b>: быстро проверьте, прикреплен ли к изображению или видео альтернативный текст.
|
||||||
|
- <b> Закрепление сообщений</b>: Прикрепите свои самые важные сообщения к своему профилю и посмотрите, что другие прикрепили, используя вкладку “Закреплено“.
|
||||||
|
- <b> Подписывайтесь на хэштеги</b>: смотрите новые сообщения с определенными хэштегами непосредственно на своей домашней временной шкале, следуя за ними.
|
||||||
|
- <b> Ответы на запросы подписчиков</b>: принимайте или отклоняйте запросы подписчиков из ваших уведомлений или специального списка запросов подписчиков.
|
||||||
|
- <b>"Удалить и исправить"</b>: очень любимая функция, которая сделала возможным редактирование без реальной функции редактирования.
|
||||||
Reference in New Issue
Block a user