Compare commits

...

52 Commits

Author SHA1 Message Date
LucasGGamerM
85b135fa34 docs: add 104 changelog 2024-01-27 10:28:56 -03:00
LucasGGamerM
a195aa56ca build: bump version number 2024-01-27 10:24:28 -03:00
butterflyoffire
b694329bda Translated using Weblate (Arabic (Algeria))
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/ar_DZ/
2024-01-27 13:21:36 +00:00
CDN18
79362b59c4 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/zh_Hans/
2024-01-27 13:21:36 +00:00
CDN18
fa51b6acb2 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/zh_Hans/
2024-01-27 13:21:36 +00:00
CDN18
0aa277ee72 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
2024-01-27 13:21:36 +00:00
Linerly
d111be7293 Translated using Weblate (Indonesian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/id/
2024-01-27 13:21:36 +00:00
Linerly
dd06292b53 Translated using Weblate (Indonesian)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/id/
2024-01-27 13:21:36 +00:00
SomeTr
98953e8afa Translated using Weblate (Ukrainian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/uk/
2024-01-27 13:21:36 +00:00
legiz
8a8cefe68a Translated using Weblate (Russian)
Currently translated at 22.2% (8 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/ru/
2024-01-27 13:21:36 +00:00
legiz
bbd72e299b Translated using Weblate (Russian)
Currently translated at 96.9% (96 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/ru/
2024-01-27 13:21:36 +00:00
gallegonovato
24b227f665 Translated using Weblate (Spanish)
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2024-01-27 13:21:36 +00:00
gallegonovato
71118b1f84 Translated using Weblate (Spanish)
Currently translated at 97.2% (35 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2024-01-27 13:21:36 +00:00
rffontenelle
095e1543fe Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2024-01-27 13:21:36 +00:00
alextecplayz
7bdd9811da Translated using Weblate (Romanian)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/ro/
2024-01-27 13:21:36 +00:00
dontobi
c086900ae6 Translated using Weblate (German)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2024-01-27 13:21:36 +00:00
dontobi
143df89855 Translated using Weblate (German)
Currently translated at 100.0% (36 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2024-01-27 13:21:36 +00:00
RTRedreovic
b0da6897a0 Translated using Weblate (Esperanto)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/eo/
2024-01-27 13:21:36 +00:00
SomeTr
b798bbf234 Translated using Weblate (Ukrainian)
Currently translated at 97.2% (35 of 36 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/uk/
2024-01-27 13:21:36 +00:00
SomeTr
93ba515a29 Translated using Weblate (Ukrainian)
Currently translated at 83.8% (83 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/uk/
2024-01-27 13:21:36 +00:00
ghose
df5bfa77c6 Translated using Weblate (Galician)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/gl/
2024-01-27 13:21:36 +00:00
gallegonovato
797293fc4b Translated using Weblate (Spanish)
Currently translated at 100.0% (99 of 99 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2024-01-27 13:21:36 +00:00
LucasGGamerM
a1a4c59b83 fix(polls): maybe fix on vote poll crash issues 2024-01-12 20:51:59 -03:00
LucasGGamerM
38f74c96bf feat(metadata): use @luis142's in store listing images! 2024-01-10 21:20:36 -03:00
LucasGGamerM
9f29d72212 chore: change order of toolbar icons in photoViewer 2023-12-27 21:09:29 -03:00
LucasGGamerM
9786e324b7 style: fix typo in PhotoViewer error logs 2023-12-27 10:34:59 -03:00
LucasGGamerM
a7fef67d48 fix: swap saveViaDownloadManager to shareAfterDownloading in failed sharing action
I forgot to change the functions when I wrote it
2023-12-27 10:12:32 -03:00
LucasGGamerM
30726cb364 feat: allow sharing attachments from PhotoViewer
Addresses #290
2023-12-27 09:59:13 -03:00
LucasGGamerM
e0ff1f6725 fix(#307): use longs instead of ints in Pleroma/Akkoma instance poll configs
Who the hell had the idea to use longs for this >:C
2023-12-26 18:05:48 -03:00
LucasGGamerM
d8cc578537 fix(profile): take away favorites from the topbar icons list
This fixes a thing where the menu entry would just be weird
2023-12-24 23:20:48 -03:00
LucasGGamerM
f9f863ea5e fix(profile-note): add noteEdit must not be empty before hiding the note button 2023-12-23 15:37:23 -03:00
LucasGGamerM
2efb79f6cb fix(profile-note): hide keyboard when edit note box goes away 2023-12-23 10:10:46 -03:00
LucasGGamerM
d534557915 fix(profile): throw share button back into 3-dot menu 2023-12-23 10:03:06 -03:00
LucasGGamerM
68ebc1aa93 feat: swap note button icon 2023-12-23 10:01:35 -03:00
LucasGGamerM
251d90e0ec Merge pull request #321 from FineFindus/fix/profile-appbar-menu
feat: move icons to profile appbar
2023-12-23 09:46:13 -03:00
FineFindus
ccd313533b feat(profile): add note delete icon 2023-12-23 11:54:06 +01:00
FineFindus
f70ea97d9e feat(profile): always show add note and share 2023-12-23 11:28:54 +01:00
FineFindus
3c9efdbbf2 feat(profile): save note onHidden 2023-12-23 11:27:07 +01:00
FineFindus
3bd67f9ab1 feat(profile): move favorites to overflow menu 2023-12-23 11:25:36 +01:00
FineFindus
42946eca44 Revert "feat: make profile note box be visible at all times"
This reverts commit d6c05f0850.
2023-12-23 11:23:51 +01:00
LucasGGamerM
b2d502ae79 feat: add open in browser button to instance about fragment 2023-12-22 10:09:28 -03:00
LucasGGamerM
4d9f625ff4 refactor(statusDisplayItem): move status hidden filter check to start of method to allow an early return
This optimises things by not computing the list of stuff when the status is simply not going to be rendered
2023-12-21 20:01:52 -03:00
LucasGGamerM
18e3fadb26 refactor(profile-note): remove save button, automatically save on focus change/exit 2023-12-21 19:42:29 -03:00
LucasGGamerM
0364d95300 feat: make profile note box be consistent with the other text input boxes in the app 2023-12-21 19:34:47 -03:00
LucasGGamerM
d6c05f0850 feat: make profile note box be visible at all times 2023-12-21 18:38:59 -03:00
LucasGGamerM
5cc94fa2b0 fix: hopefully this addresses a crash when opening an unsent post with an audio file (again)
Crash fix hopefully
2023-12-17 17:20:36 -03:00
LucasGGamerM
08d4c135ea fix: hopefully this addresses a crash when opening an unsent post with an audio file
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2023-12-17 17:04:22 -03:00
LucasGGamerM
6220a20734 fix: crash when publishing a scheduled post with the relocated publish button and an error occurs
Goddamnit, at least its fixed
2023-12-17 16:48:30 -03:00
LucasGGamerM
f1c55aa5e8 fix: crash that sometimes happens when longclicking emoji in compose
I have no idea how it happens, nor why. But I am sure this will fix it
2023-12-17 13:23:09 -03:00
LucasGGamerM
b8fe1fd640 build: not compile appkit unnecessarily on nightly builds 2023-12-15 18:21:28 -03:00
LucasGGamerM
928506b360 build: comment out release signing config because nightly refuses to build with it
Wtf is wrong with this
2023-12-15 18:17:21 -03:00
LucasGGamerM
167a2e1e2f build: add release signing config for fdroidRelease 2023-12-15 13:04:06 -03:00
112 changed files with 412 additions and 192 deletions

View File

@@ -11,27 +11,27 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Appkit Repo # - name: Checkout Appkit Repo
uses: actions/checkout@v3 # uses: actions/checkout@v3
with: # with:
repository: grishka/appkit # repository: grishka/appkit
#
- name: set up JDK 17 # - name: set up JDK 17
uses: actions/setup-java@v3 # uses: actions/setup-java@v3
with: # with:
java-version: '17' # java-version: '17'
distribution: 'corretto' # distribution: 'corretto'
cache: gradle # cache: gradle
#
- name: Comment out signing config in appkits gradle file # - name: Comment out signing config in appkits gradle file
run: | # run: |
sed -i 's/sign publishing\.publications\.release/\/\/ sign publishing.publications.release/' appkit/maven-push.gradle # sed -i 's/sign publishing\.publications\.release/\/\/ sign publishing.publications.release/' appkit/maven-push.gradle
#
- name: Grant execute permission for gradlew for Appkit # - name: Grant execute permission for gradlew for Appkit
run: chmod +x gradlew # run: chmod +x gradlew
#
- name: Compile appkit # - name: Compile appkit
run: ./gradlew publishToMavenLocal # run: ./gradlew publishToMavenLocal
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: set up JDK 17 - name: set up JDK 17

View File

@@ -16,8 +16,8 @@ android {
applicationId "org.joinmastodon.android.moshinda" applicationId "org.joinmastodon.android.moshinda"
minSdk 23 minSdk 23
targetSdk 33 targetSdk 33
versionCode 103 versionCode 104
versionName "2.1.4+fork.103.moshinda" versionName "2.1.4+fork.104.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW'] resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
} }
@@ -44,6 +44,28 @@ android {
keyPassword = properties.getProperty('SIGNING_KEY_PASSWORD') keyPassword = properties.getProperty('SIGNING_KEY_PASSWORD')
} }
} }
// release{
// storeFile = file("keystore/release_keystore.jks")
// storePassword System.getenv("RELEASE_SIGNING_STORE_PASSWORD")
// if (storePassword == null) {
// Properties properties = new Properties()
// properties.load(project.rootProject.file('local.properties').newDataInputStream())
// storePassword = properties.getProperty('RELEASE_SIGNING_STORE_PASSWORD')
// }
// keyAlias System.getenv("RELEASE_SIGNING_KEY_ALIAS")
// if (keyAlias == null) {
// Properties properties = new Properties()
// properties.load(project.rootProject.file('local.properties').newDataInputStream())
// keyAlias = properties.getProperty('RELEASE_SIGNING_KEY_ALIAS')
// }
// keyPassword System.getenv("RELEASE_SIGNING_KEY_PASSWORD")
// if (keyPassword == null) {
// Properties properties = new Properties()
// properties.load(project.rootProject.file('local.properties').newDataInputStream())
// keyPassword = properties.getProperty('RELEASE_SIGNING_KEY_PASSWORD')
// }
// }
} }
buildTypes { buildTypes {
@@ -81,7 +103,10 @@ android {
versionNameSuffix '-play' versionNameSuffix '-play'
} }
githubRelease { initWith release } githubRelease { initWith release }
fdroidRelease { initWith release } fdroidRelease {
initWith release
// signingConfig signingConfigs.release
}
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_17

View File

@@ -574,6 +574,25 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
} }
i++; i++;
} }
// This is a temporary measure to deal with the app crashing when the poll isn't updated.
// This is needed because of a possible id mismatch that screws with things
if(firstOptionIndex==-1 || footerIndex==-1){
for(StatusDisplayItem item:displayItems){
if(status.id.equals(itemID)){
if(item instanceof SpoilerStatusDisplayItem){
spoilerItem=(SpoilerStatusDisplayItem) item;
}else if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){
firstOptionIndex=i;
}else if(item instanceof PollFooterStatusDisplayItem){
footerIndex=i;
break;
}
}
i++;
}
}
if(firstOptionIndex==-1 || footerIndex==-1) if(firstOptionIndex==-1 || footerIndex==-1)
throw new IllegalStateException("Can't find all poll items in displayItems"); throw new IllegalStateException("Can't find all poll items in displayItems");
List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1); List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1);

View File

@@ -1293,7 +1293,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
.setPositiveButton(R.string.ok, (a, b)->{}) .setPositiveButton(R.string.ok, (a, b)->{})
.show(); .show();
handlePublishError(null); handlePublishError(null);
publishButton.setEnabled(false); (GlobalUserPreferences.relocatePublishButton ? publishButtonRelocated : publishButton).setEnabled(false);
} }
if (replyTo == null) updateRecentLanguages(); if (replyTo == null) updateRecentLanguages();
@@ -1320,7 +1320,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
result.preview=true; result.preview=true;
wm.removeView(sendingOverlay); wm.removeView(sendingOverlay);
sendingOverlay=null; sendingOverlay=null;
publishButton.setEnabled(true); (GlobalUserPreferences.relocatePublishButton ? publishButtonRelocated : publishButton).setEnabled(true);
V.setVisibilityAnimated(sendProgress, View.GONE); V.setVisibilityAnimated(sendProgress, View.GONE);
InputMethodManager imm=getActivity().getSystemService(InputMethodManager.class); InputMethodManager imm=getActivity().getSystemService(InputMethodManager.class);
imm.hideSoftInputFromWindow(contentView.getWindowToken(), 0); imm.hideSoftInputFromWindow(contentView.getWindowToken(), 0);

View File

@@ -154,7 +154,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
private SwipeRefreshLayout refreshLayout; private SwipeRefreshLayout refreshLayout;
private View followersBtn, followingBtn; private View followersBtn, followingBtn;
private EditText nameEdit, bioEdit; private EditText nameEdit, bioEdit;
private ProgressBar actionProgress, notifyProgress, noteSaveProgress; private ProgressBar actionProgress, notifyProgress;
private FrameLayout[] tabViews; private FrameLayout[] tabViews;
private TabLayoutMediator tabLayoutMediator; private TabLayoutMediator tabLayoutMediator;
private TextView followsYouView; private TextView followsYouView;
@@ -197,7 +197,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
// profile note // profile note
private FrameLayout noteWrap; private FrameLayout noteWrap;
private ImageButton noteSaveBtn;
private EditText noteEdit; private EditText noteEdit;
@Override @Override
@@ -220,7 +219,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
if(!isOwnProfile) if(!isOwnProfile)
loadRelationship(); loadRelationship();
else if (isInstanceAkkoma()) { else if (isInstanceAkkoma()) {
maxFields = getInstance().get().pleroma.metadata.fieldsLimits.maxFields; maxFields = (int) getInstance().get().pleroma.metadata.fieldsLimits.maxFields;
} }
}else{ }else{
profileAccountID=getArguments().getString("profileAccountID"); profileAccountID=getArguments().getString("profileAccountID");
@@ -271,7 +270,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
bioEditWrap=content.findViewById(R.id.bio_edit_wrap); bioEditWrap=content.findViewById(R.id.bio_edit_wrap);
actionProgress=content.findViewById(R.id.action_progress); actionProgress=content.findViewById(R.id.action_progress);
notifyProgress=content.findViewById(R.id.notify_progress); notifyProgress=content.findViewById(R.id.notify_progress);
noteSaveProgress=content.findViewById(R.id.note_save_progress);
fab=content.findViewById(R.id.fab); fab=content.findViewById(R.id.fab);
followsYouView=content.findViewById(R.id.follows_you); followsYouView=content.findViewById(R.id.follows_you);
countersLayout=content.findViewById(R.id.profile_counters); countersLayout=content.findViewById(R.id.profile_counters);
@@ -288,46 +286,14 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
noteEdit=content.findViewById(R.id.note_edit); noteEdit=content.findViewById(R.id.note_edit);
noteWrap=content.findViewById(R.id.note_edit_wrap); noteWrap=content.findViewById(R.id.note_edit_wrap);
noteSaveBtn=content.findViewById(R.id.note_save_btn);
noteSaveBtn.setOnClickListener((v->{
savePrivateNote(noteEdit.getText().toString());
InputMethodManager imm=(InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(this.getView().getRootView().getWindowToken(), 0);
noteEdit.clearFocus();
noteSaveBtn.clearFocus();
}));
noteEdit.setOnFocusChangeListener((v, hasFocus)->{ noteEdit.setOnFocusChangeListener((v, hasFocus)->{
if(hasFocus){ if(hasFocus){
hideFab(); hideFab();
V.setVisibilityAnimated(noteSaveBtn, View.VISIBLE);
noteEdit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); noteEdit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
}else if(!noteSaveBtn.hasFocus()){ }else{
showFab(); showFab();
hideNoteSaveBtnIfNotDirty(); savePrivateNote(noteEdit.getText().toString());
}
});
noteEdit.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
if(relationship!=null && noteSaveBtn.getVisibility()!=View.VISIBLE && !s.toString().equals(relationship.note))
V.setVisibilityAnimated(noteSaveBtn, View.VISIBLE);
}
@Override
public void afterTextChanged(Editable s){}
});
noteSaveBtn.setOnFocusChangeListener((v, hasFocus)->{
if(!hasFocus && !noteEdit.hasFocus()){
showFab();
hideNoteSaveBtnIfNotDirty();
} }
}); });
@@ -495,12 +461,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
return sizeWrapper; return sizeWrapper;
} }
private void hideNoteSaveBtnIfNotDirty(){
if(noteEdit.getText().toString().equals(relationship.note)){
V.setVisibilityAnimated(noteSaveBtn, View.INVISIBLE);
}
}
private void showPrivateNote(){ private void showPrivateNote(){
noteWrap.setVisibility(View.VISIBLE); noteWrap.setVisibility(View.VISIBLE);
noteEdit.setText(relationship.note); noteEdit.setText(relationship.note);
@@ -517,8 +477,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
invalidateOptionsMenu(); invalidateOptionsMenu();
return; return;
} }
V.setVisibilityAnimated(noteSaveProgress, View.VISIBLE);
V.setVisibilityAnimated(noteSaveBtn, View.INVISIBLE);
new SetPrivateNote(profileAccountID, note).setCallback(new Callback<>() { new SetPrivateNote(profileAccountID, note).setCallback(new Callback<>() {
@Override @Override
public void onSuccess(Relationship result) { public void onSuccess(Relationship result) {
@@ -529,8 +487,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
@Override @Override
public void onError(ErrorResponse error) { public void onError(ErrorResponse error) {
error.showToast(getContext()); error.showToast(getContext());
V.setVisibilityAnimated(noteSaveProgress, View.GONE);
V.setVisibilityAnimated(noteSaveBtn, View.VISIBLE);
} }
}).exec(accountID); }).exec(accountID);
} }
@@ -693,6 +649,13 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
getChildFragmentManager().putFragment(outState, "pinnedPosts", pinnedPostsFragment); getChildFragmentManager().putFragment(outState, "pinnedPosts", pinnedPostsFragment);
} }
@Override
public void onHidden(){
if (relationship != null && !noteEdit.getText().toString().equals(relationship.note)){
savePrivateNote(noteEdit.getText().toString());
}
}
@Override @Override
public void onConfigurationChanged(Configuration newConfig){ public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
@@ -857,9 +820,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
return; return;
inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu); inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu);
if(isOwnProfile){ if(isOwnProfile){
UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.scheduled, R.id.bookmarks, R.id.favorites); UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.scheduled, R.id.bookmarks);
}else{ }else{
UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags, R.id.favorites, R.id.scheduled); UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.edit_note);
} }
boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1; boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
MenuItem openWithAccounts = menu.findItem(R.id.open_with_account); MenuItem openWithAccounts = menu.findItem(R.id.open_with_account);
@@ -902,8 +865,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
}else{ }else{
blockDomain.setVisible(false); blockDomain.setVisible(false);
} }
menu.findItem(R.id.edit_note).setTitle(noteWrap.getVisibility()==View.GONE && (relationship.note==null || relationship.note.isEmpty()) boolean canAddNote = noteWrap.getVisibility()==View.GONE && (relationship.note==null || relationship.note.isEmpty());
? R.string.sk_add_note : R.string.sk_delete_note); menu.findItem(R.id.edit_note).setTitle(canAddNote ? R.string.sk_add_note : R.string.sk_delete_note);
} }
@Override @Override
@@ -994,8 +957,13 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
InputMethodManager imm=getActivity().getSystemService(InputMethodManager.class); InputMethodManager imm=getActivity().getSystemService(InputMethodManager.class);
imm.showSoftInput(noteEdit, 0); imm.showSoftInput(noteEdit, 0);
}, 100); }, 100);
}else if(relationship.note.isEmpty()){ }else if(relationship.note.isEmpty() && noteEdit.getText().toString().isEmpty()){
hidePrivateNote(); hidePrivateNote();
noteEdit.clearFocus();
noteEdit.postDelayed(()->{
InputMethodManager imm=getActivity().getSystemService(InputMethodManager.class);
imm.hideSoftInputFromWindow(noteEdit.getWindowToken(), 0);
}, 100);
UiUtils.beginLayoutTransition(scrollableContent); UiUtils.beginLayoutTransition(scrollableContent);
}else{ }else{
new M3AlertDialogBuilder(getActivity()) new M3AlertDialogBuilder(getActivity())
@@ -1038,13 +1006,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
UiUtils.setRelationshipToActionButtonM3(relationship, actionButton); UiUtils.setRelationshipToActionButtonM3(relationship, actionButton);
actionProgress.setIndeterminateTintList(actionButton.getTextColors()); actionProgress.setIndeterminateTintList(actionButton.getTextColors());
notifyProgress.setIndeterminateTintList(notifyButton.getTextColors()); notifyProgress.setIndeterminateTintList(notifyButton.getTextColors());
noteSaveProgress.setIndeterminateTintList(noteEdit.getTextColors());
followsYouView.setVisibility(relationship.followedBy ? View.VISIBLE : View.GONE); followsYouView.setVisibility(relationship.followedBy ? View.VISIBLE : View.GONE);
notifyButton.setSelected(relationship.notifying); notifyButton.setSelected(relationship.notifying);
notifyButton.setContentDescription(getString(relationship.notifying ? R.string.sk_user_post_notifications_on : R.string.sk_user_post_notifications_off, '@'+account.username)); notifyButton.setContentDescription(getString(relationship.notifying ? R.string.sk_user_post_notifications_on : R.string.sk_user_post_notifications_off, '@'+account.username));
noteEdit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); noteEdit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
V.setVisibilityAnimated(noteSaveProgress, View.GONE);
V.setVisibilityAnimated(noteSaveBtn, View.INVISIBLE);
UiUtils.beginLayoutTransition(scrollableContent); UiUtils.beginLayoutTransition(scrollableContent);
} }

View File

@@ -160,6 +160,8 @@ public class SettingsServerFragment extends AppKitFragment{
args.putString("account", accountID); args.putString("account", accountID);
args.putString("domain", instance.normalizedUri); args.putString("domain", instance.normalizedUri);
Nav.go(getActivity(), CustomLocalTimelineFragment.class, args); Nav.go(getActivity(), CustomLocalTimelineFragment.class, args);
} else if (id==R.id.open_in_browser){
UiUtils.launchWebBrowser(getActivity(), new Uri.Builder().scheme("https").authority(instance.uri).appendPath("about").build().toString());
} }
return true; return true;
} }

View File

@@ -245,19 +245,19 @@ public class Instance extends BaseModel{
@Parcel @Parcel
public static class FieldsLimits { public static class FieldsLimits {
public int maxFields; public long maxFields;
public int maxRemoteFields; public long maxRemoteFields;
public int nameLength; public long nameLength;
public int valueLength; public long valueLength;
} }
} }
} }
@Parcel @Parcel
public static class PleromaPollLimits { public static class PleromaPollLimits {
public int maxExpiration; public long maxExpiration;
public int maxOptionChars; public long maxOptionChars;
public int maxOptions; public long maxOptions;
public int minExpiration; public long minExpiration;
} }
} }

View File

@@ -375,7 +375,7 @@ public class CustomEmojiPopupKeyboard extends PopupKeyboard{
@Override @Override
public boolean onLongClick(){ public boolean onLongClick(){
if(!isRecentEmojiCategory) return false; if(!isRecentEmojiCategory || requests.size() < getAbsoluteAdapterPosition()-1 || 0 > getAbsoluteAdapterPosition()-1) return false;
requests.remove(getAbsoluteAdapterPosition()-1); requests.remove(getAbsoluteAdapterPosition()-1);
getBindingAdapter().notifyItemRemoved(getAbsoluteAdapterPosition()); getBindingAdapter().notifyItemRemoved(getAbsoluteAdapterPosition());
getBindingAdapter().notifyItemChanged(0); getBindingAdapter().notifyItemChanged(0);

View File

@@ -39,7 +39,7 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{
super(parentID, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.attachment=attachment; this.attachment=attachment;
imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? status.account.avatarStatic : attachment.previewUrl, V.dp(100), V.dp(100)); imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? (status.account != null ? status.account.avatarStatic : "") : attachment.previewUrl, V.dp(100), V.dp(100));
} }
@Override @Override

View File

@@ -167,6 +167,10 @@ public abstract class StatusDisplayItem{
args.putString("account", accountID); args.putString("account", accountID);
ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus s ? s : null; ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus s ? s : null;
// Hide statuses that have a filter action of hide
if(!new StatusFilterPredicate(accountID, filterContext, FilterAction.HIDE).test(status))
return new ArrayList<StatusDisplayItem>() ;
HeaderStatusDisplayItem header=null; HeaderStatusDisplayItem header=null;
boolean hideCounts=!AccountSessionManager.get(accountID).getLocalPreferences().showInteractionCounts; boolean hideCounts=!AccountSessionManager.get(accountID).getLocalPreferences().showInteractionCounts;
@@ -363,10 +367,6 @@ public abstract class StatusDisplayItem{
} }
} }
// Hide statuses that have a filter action of hide
if(!new StatusFilterPredicate(accountID, filterContext, FilterAction.HIDE).test(status))
return new ArrayList<StatusDisplayItem>() ;
List<StatusDisplayItem> nonGapItems=gap!=null ? items.subList(0, items.size()-1) : items; List<StatusDisplayItem> nonGapItems=gap!=null ? items.subList(0, items.size()-1) : items;
WarningFilteredStatusDisplayItem warning=applyingFilter==null ? null : WarningFilteredStatusDisplayItem warning=applyingFilter==null ? null :
new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, nonGapItems, applyingFilter); new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, nonGapItems, applyingFilter);

View File

@@ -51,10 +51,12 @@ import org.joinmastodon.android.api.MastodonAPIController;
import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.Attachment;
import org.joinmastodon.android.ui.ImageDescriptionSheet; import org.joinmastodon.android.ui.ImageDescriptionSheet;
import org.joinmastodon.android.ui.M3AlertDialogBuilder; import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.utils.FileProvider;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -72,6 +74,9 @@ import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.utils.CubicBezierInterpolator; import me.grishka.appkit.utils.CubicBezierInterpolator;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.FragmentRootLinearLayout; import me.grishka.appkit.views.FragmentRootLinearLayout;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okio.BufferedSink; import okio.BufferedSink;
import okio.Okio; import okio.Okio;
import okio.Sink; import okio.Sink;
@@ -195,6 +200,14 @@ public class PhotoViewer implements ZoomPanView.Listener{
return true; return true;
}) })
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
toolbar.getMenu()
.add(R.string.button_share)
.setIcon(R.drawable.ic_fluent_share_24_regular)
.setOnMenuItemClickListener(item -> {
shareCurrentFile();
return true;
})
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
uiOverlay.setAlpha(0f); uiOverlay.setAlpha(0f);
videoControls=uiOverlay.findViewById(R.id.video_player_controls); videoControls=uiOverlay.findViewById(R.id.video_player_controls);
videoSeekBar=uiOverlay.findViewById(R.id.seekbar); videoSeekBar=uiOverlay.findViewById(R.id.seekbar);
@@ -441,6 +454,44 @@ public class PhotoViewer implements ZoomPanView.Listener{
pauseVideo(); pauseVideo();
} }
private void shareCurrentFile(){
Attachment att=attachments.get(pager.getCurrentItem());
Intent intent = new Intent(Intent.ACTION_SEND);
if(att.type==Attachment.Type.IMAGE){
UrlImageLoaderRequest req=new UrlImageLoaderRequest(att.url);
try{
File file=ImageCache.getInstance(activity).getFile(req);
if(file==null){
shareAfterDownloading(att);
return;
}
MastodonAPIController.runInBackground(()->{
File imageDir = new File(activity.getCacheDir(), ".");
File renamedFile;
file.renameTo(renamedFile = new File(imageDir, Uri.parse(att.url).getLastPathSegment()));
Uri outputUri = FileProvider.getUriForFile(activity, activity.getPackageName() + ".fileprovider", renamedFile);
// setting type to image
intent.setType(mimeTypeForFileName(outputUri.getLastPathSegment()));
intent.putExtra(Intent.EXTRA_STREAM, outputUri);
// calling startactivity() to share
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.button_share)));
});
}catch(IOException x){
Log.w(TAG, "shareCurrentFile: ", x);
Toast.makeText(activity, R.string.error, Toast.LENGTH_SHORT).show();
}
}else{
shareAfterDownloading(att);
}
}
private void saveCurrentFile(){ private void saveCurrentFile(){
if(Build.VERSION.SDK_INT>=29){ if(Build.VERSION.SDK_INT>=29){
doSaveCurrentFile(); doSaveCurrentFile();
@@ -545,6 +596,47 @@ public class PhotoViewer implements ZoomPanView.Listener{
Toast.makeText(activity, R.string.downloading, Toast.LENGTH_SHORT).show(); Toast.makeText(activity, R.string.downloading, Toast.LENGTH_SHORT).show();
} }
private void shareAfterDownloading(Attachment att){
Uri uri=Uri.parse(att.url);
MastodonAPIController.runInBackground(()->{
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(att.url).build();
Response response = client.newCall(request).execute();
Toast.makeText(activity, R.string.downloading, Toast.LENGTH_SHORT);
if (!response.isSuccessful()) {
throw new IOException("" + response);
}
File imageDir = new File(activity.getCacheDir(), ".");
InputStream inputStream = response.body().byteStream();
File file = new File(imageDir, uri.getLastPathSegment());
FileOutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
Intent intent = new Intent(Intent.ACTION_SEND);
Uri outputUri = FileProvider.getUriForFile(activity, activity.getPackageName() + ".fileprovider", file);
intent.setType(mimeTypeForFileName(outputUri.getLastPathSegment()));
intent.putExtra(Intent.EXTRA_STREAM, outputUri);
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.button_share)));
} catch(IOException e){
Toast.makeText(activity, R.string.error, Toast.LENGTH_SHORT).show();
}
});
}
private void onAudioFocusChanged(int change){ private void onAudioFocusChanged(int change){
if(change==AudioManager.AUDIOFOCUS_LOSS || change==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || change==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){ if(change==AudioManager.AUDIOFOCUS_LOSS || change==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || change==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){
pauseVideo(); pauseVideo();

View File

@@ -82,9 +82,9 @@ public class ComposePollViewController{
maxPollOptionLength=instance.configuration.polls.maxCharactersPerOption; maxPollOptionLength=instance.configuration.polls.maxCharactersPerOption;
} else { } else {
if(instance!=null && instance.pollLimits!=null && instance.pollLimits.maxOptions>0) if(instance!=null && instance.pollLimits!=null && instance.pollLimits.maxOptions>0)
maxPollOptions=instance.pollLimits.maxOptions; maxPollOptions= (int) instance.pollLimits.maxOptions;
if(instance!=null && instance.pollLimits!=null && instance.pollLimits.maxOptionChars>0) if(instance!=null && instance.pollLimits!=null && instance.pollLimits.maxOptionChars>0)
maxPollOptionLength=instance.pollLimits.maxOptionChars; maxPollOptionLength= (int) instance.pollLimits.maxOptionChars;
} }
pollOptionsView=pollWrap.findViewById(R.id.poll_options); pollOptionsView=pollWrap.findViewById(R.id.poll_options);

View File

@@ -0,0 +1,9 @@
<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="M5.754,22.005C4.511,22.004 3.504,20.997 3.504,19.755L3.502,5.75C3.502,4.508 4.509,3.5 5.752,3.5L6.499,3.499L6.5,2.75C6.5,2.37 6.782,2.057 7.148,2.007L7.25,2C7.63,2 7.944,2.282 7.993,2.648L8,2.75L7.999,3.499H11.001L11.002,2.75C11.002,2.37 11.284,2.057 11.65,2.007L11.752,2C12.132,2 12.445,2.282 12.495,2.648L12.502,2.75L12.501,3.499H15.499L15.5,2.75C15.5,2.37 15.782,2.057 16.148,2.007L16.25,2C16.63,2 16.944,2.282 16.993,2.648L17,2.75L16.999,3.499L17.749,3.5C18.991,3.5 19.998,4.507 19.999,5.75L20,16.75C20,16.809 19.993,16.868 19.979,16.925L19.95,17.019L19.905,17.115L19.885,17.147C19.856,17.195 19.821,17.24 19.78,17.28L15.276,21.785C15.249,21.811 15.221,21.836 15.191,21.858L15.276,21.785C15.243,21.817 15.208,21.846 15.171,21.872L15.083,21.924L14.967,21.971L14.854,21.997L14.8,22.003L14.745,22.005H5.754ZM17.748,5H5.742C5.333,5.005 5.002,5.339 5.002,5.75L5.004,19.754C5.004,20.169 5.34,20.505 5.754,20.505L13.994,20.504L13.995,18.25C13.995,17.059 14.92,16.084 16.091,16.005L16.245,16H18.499L18.499,5.75C18.499,5.336 18.163,5 17.748,5ZM17.438,17.5H16.245C15.866,17.5 15.552,17.782 15.502,18.148L15.495,18.25L15.494,19.444L17.438,17.5ZM7.25,16H11.248C11.663,16 11.998,16.336 11.998,16.75C11.998,17.13 11.716,17.444 11.35,17.493L11.248,17.5H7.25C6.836,17.5 6.5,17.164 6.5,16.75C6.5,16.37 6.782,16.056 7.148,16.007L7.25,16H11.248H7.25ZM7.25,12H16.248C16.663,12 16.998,12.336 16.998,12.75C16.998,13.13 16.716,13.443 16.35,13.493L16.248,13.5H7.25C6.836,13.5 6.5,13.164 6.5,12.75C6.5,12.37 6.782,12.057 7.148,12.007L7.25,12H16.248H7.25ZM7.25,8H16.248C16.663,8 16.998,8.336 16.998,8.75C16.998,9.13 16.716,9.443 16.35,9.493L16.248,9.5H7.25C6.836,9.5 6.5,9.164 6.5,8.75C6.5,8.37 6.782,8.057 7.148,8.007L7.25,8H16.248H7.25Z"
android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group>
<clip-path
android:pathData="M-2.996,-2.995L28,-2.995L28,28L-2.996,28ZM12.371,11.8c-0.449,-0.466 -1.157,0.217 -0.675,0.651l1.912,1.846c7.457,7.199 9.861,9.522 7.457,7.199l2.404,2.323c0.45,0.435 1.125,-0.217 0.675,-0.652z"/>
<path
android:pathData="m11,15c0,-0.351 0.06,-0.687 0.171,-1L4.253,14c-1.242,0 -2.249,1.007 -2.249,2.249v0.578c0,0.893 0.319,1.756 0.898,2.435 1.566,1.834 3.952,2.739 7.098,2.739 0.398,0 0.783,-0.014 1.156,-0.043 -0.101,-0.301 -0.156,-0.623 -0.156,-0.958v-0.535c-0.321,0.024 -0.655,0.036 -1,0.036 -2.738,0 -4.704,-0.746 -5.958,-2.214C3.695,17.881 3.504,17.362 3.504,16.827v-0.578c0,-0.414 0.335,-0.749 0.749,-0.749L11,15.5ZM10,2.005c2.761,0 5,2.239 5,5 0,2.761 -2.239,5 -5,5 -2.761,0 -5,-2.239 -5,-5 0,-2.761 2.239,-5 5,-5zM10,3.505c-1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5zM12,15c0,-1.105 0.895,-2 2,-2h7c1.105,0 2,0.896 2,2v6c0,1.105 -0.895,2 -2,2h-7c-1.105,0 -2,-0.895 -2,-2zM14.5,16c-0.276,0 -0.5,0.224 -0.5,0.5 0,0.276 0.224,0.5 0.5,0.5h6c0.276,0 0.5,-0.224 0.5,-0.5 0,-0.276 -0.224,-0.5 -0.5,-0.5zM14.5,19c-0.276,0 -0.5,0.224 -0.5,0.5 0,0.276 0.224,0.5 0.5,0.5h6c0.276,0 0.5,-0.224 0.5,-0.5 0,-0.276 -0.224,-0.5 -0.5,-0.5z"
android:fillColor="@color/fluent_default_icon_tint"/>
</group>
<path
android:pathData="m11.568,12.296c-0.449,-0.466 -1.157,0.217 -0.675,0.651l1.912,1.846c7.457,7.199 9.861,9.522 7.457,7.199l2.404,2.323c0.45,0.435 1.125,-0.217 0.675,-0.652z"
android:strokeWidth="0.625337"
android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@@ -217,59 +217,30 @@
</LinearLayout> </LinearLayout>
<FrameLayout <org.joinmastodon.android.ui.views.FloatingHintEditTextLayout
android:id="@+id/note_edit_wrap"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/username"
android:id="@+id/note_edit_wrap"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"
android:layout_marginHorizontal="16dp" android:layout_marginHorizontal="16dp"
app:labelTextColor="@color/m3_outlined_text_field_label"
android:foreground="@drawable/bg_m3_outlined_text_field"
android:visibility="gone"> android:visibility="gone">
<EditText <EditText
android:id="@+id/note_edit" android:id="@+id/note_edit"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="52dp" android:minHeight="52dp"
android:paddingVertical="15dp" android:maxHeight="200dp"
android:textColor="?colorM3OnSurface" android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:padding="16dp"
android:background="@null"
android:inputType="text|textMultiLine|textCapSentences" android:inputType="text|textMultiLine|textCapSentences"
android:singleLine="false"
android:background="@drawable/bg_note_edit"
android:paddingEnd="52dp"
android:paddingStart="20dp"
android:elevation="0dp"
android:hint="@string/mo_personal_note" android:hint="@string/mo_personal_note"
tools:ignore="RtlSymmetry" /> tools:ignore="RtlSymmetry" />
</org.joinmastodon.android.ui.views.FloatingHintEditTextLayout>
<FrameLayout
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_gravity="end">
<ImageButton
android:id="@+id/note_save_btn"
android:layout_width="52dp"
android:layout_height="52dp"
android:visibility="invisible"
android:background="@drawable/bg_button_m3_text_circle"
android:tooltipText="@string/sk_confirm_changes"
android:contentDescription="@string/sk_confirm_changes"
android:src="@drawable/ic_fluent_checkmark_24_regular"/>
<ProgressBar
android:id="@+id/note_save_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
style="?android:progressBarStyleSmall"
android:indeterminate="true"
android:visibility="gone" />
</FrameLayout>
</FrameLayout>
<org.joinmastodon.android.ui.views.LinkedTextView <org.joinmastodon.android.ui.views.LinkedTextView
android:id="@+id/bio" android:id="@+id/bio"

View File

@@ -2,4 +2,5 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/> <item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
<item android:id="@+id/open_timeline" android:title="@string/mo_instance_info_open_timeline" android:icon="@drawable/ic_fluent_timeline_24_regular"/> <item android:id="@+id/open_timeline" android:title="@string/mo_instance_info_open_timeline" android:icon="@drawable/ic_fluent_timeline_24_regular"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
</menu> </menu>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/menu_group1"> <group android:id="@+id/menu_group1">
<item android:id="@+id/edit_note" android:title="@string/sk_add_note" android:icon="@drawable/ic_fluent_person_note_24_regular" /> <item android:id="@+id/edit_note" android:title="@string/sk_add_note" android:icon="@drawable/ic_fluent_notepad_24_regular" android:showAsAction="ifRoom" />
</group> </group>
<group android:id="@+id/menu_group2"> <group android:id="@+id/menu_group2">
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_24_regular"/> <item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_24_regular"/>

View File

@@ -4,7 +4,7 @@
<item android:id="@+id/followed_hashtags" android:title="@string/sk_hashtags_you_follow" android:icon="@drawable/ic_fluent_number_symbol_24_regular"/> <item android:id="@+id/followed_hashtags" android:title="@string/sk_hashtags_you_follow" android:icon="@drawable/ic_fluent_number_symbol_24_regular"/>
<item android:id="@+id/bookmarks" android:title="@string/bookmarks" android:icon="@drawable/ic_fluent_bookmark_multiple_24_regular" android:showAsAction="always"/> <item android:id="@+id/bookmarks" android:title="@string/bookmarks" android:icon="@drawable/ic_fluent_bookmark_multiple_24_regular" android:showAsAction="always"/>
<item android:id="@+id/manage_user_lists" android:title="@string/sk_your_lists" android:icon="@drawable/ic_fluent_people_24_regular"/> <item android:id="@+id/manage_user_lists" android:title="@string/sk_your_lists" android:icon="@drawable/ic_fluent_people_24_regular"/>
<item android:id="@+id/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular" android:showAsAction="always"/> <item android:id="@+id/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular"/>
<item android:id="@+id/muted_accounts" android:title="@string/sk_muted_accounts" android:icon="@drawable/ic_fluent_speaker_off_24_regular"/> <item android:id="@+id/muted_accounts" android:title="@string/sk_muted_accounts" android:icon="@drawable/ic_fluent_speaker_off_24_regular"/>
<item android:id="@+id/blocked_accounts" android:title="@string/sk_blocked_accounts" android:icon="@drawable/ic_fluent_shield_24_regular"/> <item android:id="@+id/blocked_accounts" android:title="@string/sk_blocked_accounts" android:icon="@drawable/ic_fluent_shield_24_regular"/>
<item android:id="@+id/scheduled" android:title="@string/sk_unsent_posts" android:icon="@drawable/ic_fluent_folder_open_24_regular" android:showAsAction="always"/> <item android:id="@+id/scheduled" android:title="@string/sk_unsent_posts" android:icon="@drawable/ic_fluent_folder_open_24_regular" android:showAsAction="always"/>

View File

@@ -93,4 +93,5 @@
<string name="mo_settings_show_posts_without_alt_summary">سيتم إخفاء المنشورات في جميع الخيوط الزمنية، ولكن يمكن كشفها في خيوط المحادثات وفي الإشعارات</string> <string name="mo_settings_show_posts_without_alt_summary">سيتم إخفاء المنشورات في جميع الخيوط الزمنية، ولكن يمكن كشفها في خيوط المحادثات وفي الإشعارات</string>
<string name="mo_swap_bookmark_with_reblog">استبدال إجراء الإضافة إلى الفواصل المرجعية بإعادة النشر</string> <string name="mo_swap_bookmark_with_reblog">استبدال إجراء الإضافة إلى الفواصل المرجعية بإعادة النشر</string>
<string name="mo_setting_haptic_feedback_summary">اهتز عند التفاعل مع المنشورات</string> <string name="mo_setting_haptic_feedback_summary">اهتز عند التفاعل مع المنشورات</string>
<string name="mo_notification_filter_reset">إعادة التعيين إلى الإفتراضية</string>
</resources> </resources>

View File

@@ -99,4 +99,5 @@
<string name="mo_unmuting">Stummschaltung aufheben…</string> <string name="mo_unmuting">Stummschaltung aufheben…</string>
<string name="mo_confirm_to_mute_hashtag">Sind Sie sicher, dass Sie diesen Hashtag stummschalten möchten\?</string> <string name="mo_confirm_to_mute_hashtag">Sind Sie sicher, dass Sie diesen Hashtag stummschalten möchten\?</string>
<string name="mo_filter_notifications">Benachrichtigungen filtern</string> <string name="mo_filter_notifications">Benachrichtigungen filtern</string>
<string name="mo_notification_filter_reset">Auf Standardwerte zurücksetzen</string>
</resources> </resources>

View File

@@ -91,4 +91,5 @@
<string name="mo_relocate_publish_button">Reloki aifŝi butonon</string> <string name="mo_relocate_publish_button">Reloki aifŝi butonon</string>
<string name="mo_duration_days_3">3 tagoj</string> <string name="mo_duration_days_3">3 tagoj</string>
<string name="mo_setting_remote_follower_summary">Montri sekvantojn de aliaj instancoj</string> <string name="mo_setting_remote_follower_summary">Montri sekvantojn de aliaj instancoj</string>
<string name="mo_notification_filter_reset">Restarigi al defaŭlta</string>
</resources> </resources>

View File

@@ -96,4 +96,5 @@
<string name="mo_mute_hashtag">Silenciar etiqueta</string> <string name="mo_mute_hashtag">Silenciar etiqueta</string>
<string name="mo_confirm_to_mute_hashtag">¿Seguro que quieres silenciar esta etiqueta\?</string> <string name="mo_confirm_to_mute_hashtag">¿Seguro que quieres silenciar esta etiqueta\?</string>
<string name="mo_filter_notifications">Filtrar las notificaciones</string> <string name="mo_filter_notifications">Filtrar las notificaciones</string>
<string name="mo_notification_filter_reset">Restablecer valores por defecto</string>
</resources> </resources>

View File

@@ -92,4 +92,5 @@
<string name="mo_instance_registration_open">Aberto</string> <string name="mo_instance_registration_open">Aberto</string>
<string name="mo_duration_days_3">3 días</string> <string name="mo_duration_days_3">3 días</string>
<string name="mo_setting_remote_follower_summary">Mostrar seguidoras doutras instancias</string> <string name="mo_setting_remote_follower_summary">Mostrar seguidoras doutras instancias</string>
<string name="mo_notification_filter_reset">Restablecer por defecto</string>
</resources> </resources>

View File

@@ -93,4 +93,5 @@
<string name="mo_double_tap_to_search">Ketuk ganda untuk membuka pencarian</string> <string name="mo_double_tap_to_search">Ketuk ganda untuk membuka pencarian</string>
<string name="mo_setting_haptic_feedback_summary">Bergetar ketika berinteraksi dengan kiriman</string> <string name="mo_setting_haptic_feedback_summary">Bergetar ketika berinteraksi dengan kiriman</string>
<string name="mo_confirm_to_mute_hashtag">Apakah Anda yakin ingin membisukan tagar ini\?</string> <string name="mo_confirm_to_mute_hashtag">Apakah Anda yakin ingin membisukan tagar ini\?</string>
<string name="mo_notification_filter_reset">Atur ulang ke bawaan</string>
</resources> </resources>

View File

@@ -98,4 +98,5 @@
<string name="mo_confirm_to_mute_hashtag">Você tem certeza que quer silenciar esta hashtag\?</string> <string name="mo_confirm_to_mute_hashtag">Você tem certeza que quer silenciar esta hashtag\?</string>
<string name="mo_mutes">Silenciados</string> <string name="mo_mutes">Silenciados</string>
<string name="mo_filter_notifications">Filtrar notificações</string> <string name="mo_filter_notifications">Filtrar notificações</string>
<string name="mo_notification_filter_reset">Redefinir para padrão</string>
</resources> </resources>

View File

@@ -93,4 +93,5 @@
<string name="mo_double_tap_to_search">Apăsați dublu pentru a deschide căutarea</string> <string name="mo_double_tap_to_search">Apăsați dublu pentru a deschide căutarea</string>
<string name="mo_confirm_to_mute_hashtag">Sunteți sigur că doriți să amuțiți acest hashtag\?</string> <string name="mo_confirm_to_mute_hashtag">Sunteți sigur că doriți să amuțiți acest hashtag\?</string>
<string name="mo_filter_notifications">Filtrați notificările</string> <string name="mo_filter_notifications">Filtrați notificările</string>
<string name="mo_notification_filter_reset">Resetați la valorile implicite</string>
</resources> </resources>

View File

@@ -70,4 +70,23 @@
<string name="mo_setting_haptic_feedback_summary">Вибрировать при взаимодействии с постами</string> <string name="mo_setting_haptic_feedback_summary">Вибрировать при взаимодействии с постами</string>
<string name="mo_color_palette_black_and_white">Чёрно-белая</string> <string name="mo_color_palette_black_and_white">Чёрно-белая</string>
<string name="mo_composer_behavior">Поведение экрана создания публикации</string> <string name="mo_composer_behavior">Поведение экрана создания публикации</string>
<string name="mo_unmute_hashtag">Включение звука у хештега</string>
<string name="mo_show_media_preview">Показывать предварительный просмотр мультимедиа на временной ленте</string>
<string name="mo_settings_show_posts_without_alt">Показать сообщения с отсутствующим альтернативным текстом у медиаконтента</string>
<string name="mo_muted_accounts">Приглушённые аккаунты</string>
<string name="mo_confirm_to_unmute_conversation">Вы уверены, что хотите включить звук в этой беседе?</string>
<string name="mo_confirm_to_unmute_hashtag">Вы уверены, что хотите включить звук у данного хештега?</string>
<string name="mo_blocked_accounts">Заблокированные аккаунты</string>
<string name="mo_settings_show_posts_without_alt_summary">Сообщения будут скрыты во всех лентах, но их можно будет увидеть в темах и уведомлениях.</string>
<string name="mo_confirm_to_mute_conversation">Вы уверены, что хотите приглушить эту беседу?</string>
<string name="mo_notification_filter_reset">Восстановление значений по умолчанию</string>
<string name="mo_muted_conversation_successfully">Беседа успешно приглушена</string>
<string name="mo_mute_conversation">Приглушение беседы</string>
<string name="mo_recent_emoji_cleared">Последние смайлы очищены</string>
<string name="mo_mute_hashtag">Приглушение хештега</string>
<string name="mo_filter_notifications">Фильтр уведомлений</string>
<string name="mo_muting">Отключение звука…</string>
<string name="mo_unmuting">Возвращение звука…</string>
<string name="mo_double_tap_to_search">Тапните дважды, чтобы открыть поиск</string>
<string name="mo_confirm_to_mute_hashtag">Вы уверены, что хотите приглушить данный хештег?</string>
</resources> </resources>

View File

@@ -77,4 +77,6 @@
<string name="mo_recent_emoji_cleared">Нещодавні емоджі очищено</string> <string name="mo_recent_emoji_cleared">Нещодавні емоджі очищено</string>
<string name="mo_muted_accounts">Ігноровані облікові записи</string> <string name="mo_muted_accounts">Ігноровані облікові записи</string>
<string name="mo_blocked_accounts">Заблоковані облікові записи</string> <string name="mo_blocked_accounts">Заблоковані облікові записи</string>
<string name="mo_notification_filter_reset">Скинути до замовчування</string>
<string name="mo_filter_notifications">Фільтрувати сповіщення</string>
</resources> </resources>

View File

@@ -5,8 +5,8 @@
<string name="mo_disable_dividers">禁用帖文分隔线</string> <string name="mo_disable_dividers">禁用帖文分隔线</string>
<string name="mo_relocate_publish_button">重新定位发布按钮</string> <string name="mo_relocate_publish_button">重新定位发布按钮</string>
<string name="mo_hide_compose_button_while_scrolling_setting">滚动时隐藏撰写按钮</string> <string name="mo_hide_compose_button_while_scrolling_setting">滚动时隐藏撰写按钮</string>
<string name="mo_welcome_text">要开始使用,请在下面输入您的实例的域名。</string> <string name="mo_welcome_text">要开始使用,请在下面输入您的所在实例的域名。</string>
<string name="mo_personal_note">添加关于此个人资料的备注</string> <string name="mo_personal_note">添加关于此账户的备注</string>
<string name="mo_personal_note_confirm">确认更改备注</string> <string name="mo_personal_note_confirm">确认更改备注</string>
<string name="mo_personal_note_update_failed">保存备注失败</string> <string name="mo_personal_note_update_failed">保存备注失败</string>
<string name="mo_settings_contribute">为Moshidon做出贡献</string> <string name="mo_settings_contribute">为Moshidon做出贡献</string>
@@ -14,7 +14,7 @@
<string name="mo_update_ready">Moshidon %s 已下载并准备安装。</string> <string name="mo_update_ready">Moshidon %s 已下载并准备安装。</string>
<string name="mo_no_image_desc_title">无图片描述</string> <string name="mo_no_image_desc_title">无图片描述</string>
<string name="mo_no_image_desc">包含的图像没有描述。请考虑添加描述,以便让视障人士参与。</string> <string name="mo_no_image_desc">包含的图像没有描述。请考虑添加描述,以便让视障人士参与。</string>
<string name="mo_clear_recent_emoji">清除最近使用的表情符号</string> <string name="mo_clear_recent_emoji">清除最近使用的emoji</string>
<string name="mo_disable_relocate_publish_button_to_enable_customization">禁用重新定位发布按钮以允许自定义</string> <string name="mo_disable_relocate_publish_button_to_enable_customization">禁用重新定位发布按钮以允许自定义</string>
<string name="mo_poll_option_add">添加新的投票选项</string> <string name="mo_poll_option_add">添加新的投票选项</string>
<string name="mo_fab_compose">撰写</string> <string name="mo_fab_compose">撰写</string>
@@ -22,7 +22,7 @@
<string name="mo_filtered">已过滤:%s</string> <string name="mo_filtered">已过滤:%s</string>
<string name="mo_disable_reminder_to_add_alt_text">禁用添加ALT文本的提醒</string> <string name="mo_disable_reminder_to_add_alt_text">禁用添加ALT文本的提醒</string>
<string name="mo_add_custom_server_local_timeline">添加自定义实例的本地时间线</string> <string name="mo_add_custom_server_local_timeline">添加自定义实例的本地时间线</string>
<string name="mo_notification_action_replied">成功回复 %s 的帖文</string> <string name="mo_notification_action_replied">成功回复 %s 的帖文</string>
<string name="mo_duration_minutes_5">5分钟</string> <string name="mo_duration_minutes_5">5分钟</string>
<string name="mo_duration_hours_6">6小时</string> <string name="mo_duration_hours_6">6小时</string>
<string name="mo_duration_days_1">1天</string> <string name="mo_duration_days_1">1天</string>
@@ -33,14 +33,14 @@
<string name="mo_duration_hours_1">1小时</string> <string name="mo_duration_hours_1">1小时</string>
<string name="mo_change_default_reply_visibility_to_unlisted">默认以“不公开可见”发送回复</string> <string name="mo_change_default_reply_visibility_to_unlisted">默认以“不公开可见”发送回复</string>
<string name="mo_duration_days_7">7天</string> <string name="mo_duration_days_7">7天</string>
<string name="mo_composer_behavior">写作行为</string> <string name="mo_composer_behavior">编辑器行为</string>
<string name="mo_miscellaneous_settings">杂项设置</string> <string name="mo_miscellaneous_settings">杂项设置</string>
<string name="mo_share_open_url">应用内打开</string> <string name="mo_share_open_url">应用内打开</string>
<string name="mo_disable_double_tap_to_swipe_between_tabs">禁用双击以切换标签页</string> <string name="mo_disable_double_tap_to_swipe_between_tabs">禁用双击以切换标签页</string>
<string name="mo_download_latest_nightly_release">下载最新的每日版</string> <string name="mo_download_latest_nightly_release">下载最新的每日版</string>
<string name="mo_load_remote_followers">加载远程账户的关注和粉丝</string> <string name="mo_load_remote_followers">加载外站账户的关注和粉丝</string>
<string name="mo_mention_reblogger_automatically">自动在回复中提及转发帖子的账户</string> <string name="mo_mention_reblogger_automatically">自动在回复中提及转发帖子的账户</string>
<string name="mo_swap_bookmark_with_reblog">使用转载操作替换收藏操作</string> <string name="mo_swap_bookmark_with_reblog">交换转贴与收藏的位置</string>
<string name="mo_confirm_unfollow_title">取消关注</string> <string name="mo_confirm_unfollow_title">取消关注</string>
<string name="mo_confirm_unfollow">确认取消关注 %s</string> <string name="mo_confirm_unfollow">确认取消关注 %s</string>
<string name="mo_instance_admin">管理者</string> <string name="mo_instance_admin">管理者</string>
@@ -58,7 +58,7 @@
<string name="mo_setting_uniform_summary">全部通知统一使用应用图标</string> <string name="mo_setting_uniform_summary">全部通知统一使用应用图标</string>
<string name="mo_setting_reduced_motion_summary">禁用互动动画</string> <string name="mo_setting_reduced_motion_summary">禁用互动动画</string>
<string name="mo_setting_play_gif_summary">自动播放头像与表情中的GIF图片</string> <string name="mo_setting_play_gif_summary">自动播放头像与表情中的GIF图片</string>
<string name="mo_setting_remote_follower_summary">显示来自其他实例的关注者</string> <string name="mo_setting_remote_follower_summary">显示来自其他实例的粉丝</string>
<string name="mo_setting_relocate_publish_summary">将发布按钮移至底栏</string> <string name="mo_setting_relocate_publish_summary">将发布按钮移至底栏</string>
<string name="mo_swap_bookmark_with_reblog_summary">在通知中收藏或转发帖文</string> <string name="mo_swap_bookmark_with_reblog_summary">在通知中收藏或转发帖文</string>
<string name="mo_setting_disable_swipe_summary">滑动以切换浏览的时间线</string> <string name="mo_setting_disable_swipe_summary">滑动以切换浏览的时间线</string>
@@ -67,13 +67,13 @@
<string name="mo_setting_default_reply_privacy_summary">回复将不会被显示在发现功能中</string> <string name="mo_setting_default_reply_privacy_summary">回复将不会被显示在发现功能中</string>
<string name="mo_setting_interaction_count_summary">在时间线中显示与帖文互动的人数</string> <string name="mo_setting_interaction_count_summary">在时间线中显示与帖文互动的人数</string>
<string name="mo_enable_dividers">显示帖文分割线</string> <string name="mo_enable_dividers">显示帖文分割线</string>
<string name="mo_notification_management_settings">管理消息通知</string> <string name="mo_notification_management_settings">管理通知</string>
<string name="mo_setting_true_black_summary">AMOLED屏幕上可能更省电</string> <string name="mo_setting_true_black_summary">AMOLED屏幕上可能更省电</string>
<string name="mo_double_tap_to_swipe_between_tabs">双击以在选项卡之间滑动</string> <string name="mo_double_tap_to_swipe_between_tabs">双击以在选项卡之间滑动</string>
<string name="mo_unmute_hashtag">取消禁用话题标签通知</string> <string name="mo_unmute_hashtag">取消禁用话题标签通知</string>
<string name="mo_haptic_feedback">震动反馈</string> <string name="mo_haptic_feedback">震动反馈</string>
<string name="mo_show_media_preview">在时间线中显示媒体文件预览</string> <string name="mo_show_media_preview">在时间线中显示媒体文件预览</string>
<string name="mo_settings_show_posts_without_alt">显示含有缺少 alt 文本的媒体的</string> <string name="mo_settings_show_posts_without_alt">显示含有缺少 alt 文本的媒体的</string>
<string name="mo_muted_accounts">已静音的账户</string> <string name="mo_muted_accounts">已静音的账户</string>
<string name="mo_camera_not_available">没有可用的摄像头!</string> <string name="mo_camera_not_available">没有可用的摄像头!</string>
<string name="mo_unmuted_conversation_successfully">已成功取消禁用对话通知</string> <string name="mo_unmuted_conversation_successfully">已成功取消禁用对话通知</string>
@@ -81,7 +81,7 @@
<string name="mo_confirm_to_unmute_hashtag">您确定要取消禁用此话题标签的通知吗?</string> <string name="mo_confirm_to_unmute_hashtag">您确定要取消禁用此话题标签的通知吗?</string>
<string name="mo_blocked_accounts">已屏蔽的账户</string> <string name="mo_blocked_accounts">已屏蔽的账户</string>
<string name="mo_color_palette_black_and_white">黑白</string> <string name="mo_color_palette_black_and_white">黑白</string>
<string name="mo_settings_show_posts_without_alt_summary">文将从所有时间线中隐藏,但可在对话和通知中显示</string> <string name="mo_settings_show_posts_without_alt_summary">文将从所有时间线中隐藏,但可在对话和通知中显示</string>
<string name="mo_confirm_to_mute_conversation">您确定要禁用此对话的通知吗?</string> <string name="mo_confirm_to_mute_conversation">您确定要禁用此对话的通知吗?</string>
<string name="mo_muted_conversation_successfully">已成功禁用对话通知</string> <string name="mo_muted_conversation_successfully">已成功禁用对话通知</string>
<string name="mo_unmute_conversation">取消禁用对话通知</string> <string name="mo_unmute_conversation">取消禁用对话通知</string>
@@ -91,7 +91,8 @@
<string name="mo_muting">禁用通知…</string> <string name="mo_muting">禁用通知…</string>
<string name="mo_unmuting">取消禁用通知…</string> <string name="mo_unmuting">取消禁用通知…</string>
<string name="mo_double_tap_to_search">双击以打开搜索</string> <string name="mo_double_tap_to_search">双击以打开搜索</string>
<string name="mo_setting_haptic_feedback_summary">在与文交互时震动</string> <string name="mo_setting_haptic_feedback_summary">在与文交互时震动</string>
<string name="mo_confirm_to_mute_hashtag">您确定要禁用此话题标签的通知吗?</string> <string name="mo_confirm_to_mute_hashtag">您确定要禁用此话题标签的通知吗?</string>
<string name="mo_filter_notifications">过滤通知</string> <string name="mo_filter_notifications">过滤通知</string>
<string name="mo_notification_filter_reset">重置为默认值</string>
</resources> </resources>

View File

@@ -0,0 +1,9 @@
Diese neue Version kommt mit den folgenden Änderungen:
- Neues, komplett aktualisiertes Material 3 Design von Upstream
- Unterstützung für UnifiedPush-Benachrichtigungen (Danke @FineFindus!)
- Sperrungen und Stummschaltungen sind jetzt in deinem Profil sichtbar
- Hashtags können jetzt direkt in der Hashtag-Ansicht stummgeschaltet werden
- Emoji-Reaktionen sind jetzt auf Instanzen möglich, die sie unterstützen (Danke @sk22!)
- Das Bearbeiten von Filtern in der App ist jetzt auch möglich (Danke an Upstream)
- Medienvorschauen können jetzt in Timelines ausgeblendet werden
- Neues Schwarz-Weiß-Thema hinzugefügt

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 954 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -0,0 +1,2 @@
- Enabled sharing directly from the image viewer (No need to download the media to share it anymore)
- Many minor bugfixes and improvements

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 945 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@@ -0,0 +1,11 @@
Esta nueva versión viene con:
- Material design 3 completamente actualizado
- Notificaciones UnifiedPush (¡Gracias @FineFindus!)
- Los bloqueos y silenciamientos son ahora visibles desde tu perfil
- Ahora puedes silenciar hashtags directamente desde la vista de hashtags.
- Reacciones Emoji ahora son una soportados (¡Gracias @sk22!)
- Ahora también es posible editar filtros en la aplicación (Gracias)
- Ahora puedes ocultar las vistas previas de los medios en las líneas de tiempo.
- Tema en blanco y negro
- Es posible silenciar conversaciones
- Pequeñas correcciones mejoras

View File

@@ -0,0 +1,6 @@
- Ahora se guarda el último registro de fallos y está listo para copiarse desde la página de configuración "Acerca de Megalodon".
- Añadir y mostrar notas personales en los perfiles
- Las modificaciones de texto ahora se resaltan en el historial de edición
- Akkoma: Los mensajes citados se muestran en la línea de tiempo; traducción; vista previa de los mensajes antes de publicarlos
- Añadidos marcadores y tus favoritos como líneas de tiempo pinnables
- Varios errores corregidos

View File

@@ -1,9 +1,8 @@
- Fragmen pengaturan yang didesain ulang sepenuhnya - Fragmen pengaturan yg didesain ulang sepenuhnya
- Pintasan kamera baru ditambahkan ke fragmen Komposisi - Pintasan kamera baru ditambahkan ke fragmen Komposisi
- Memperbaiki banyak kerusakan pada Calckey - Memperbaiki banyak kerusakan pada Calckey
- Banyak perbaikan pada Akkoma/Pleroma - Banyak perbaikan pada Akkoma/Pleroma
- Banyak perbaikan pada filter perilaku - Banyak perbaikan pada filter perilaku
- Lembar Akun baru yang didesain ulang - Lembar Akun baru yg didesain ulang
- Tambahkan opsi untuk mengubah gaya konten postingan (Teks biasa, penurunan harga, dll) pada instance yang mendukungnya - Tambahkan opsi untuk mengubah gaya konten postingan (Teks biasa, penurunan harga, dll) pada server yang mendukungnya
- Tambahkan kemampuan untuk melihat info server seseorang dengan mengetuk nama penggunanya di dalam profil siapa pun - Tambahkan fitur untuk melihat info server seseorang dengan mengetuk nama penggunanya di dalam profil siapa pun
- Banyak sekali perbaikan dan peningkatan kecil

View File

@@ -0,0 +1,11 @@
Rilis baru ini hadir dgn:
- Desain Material 3 baru
- Dukungan notifikasi UnifiedPush
- Blokir & bisu sekarang terlihat dr profil Anda
- Sekarang dapat menonaktifkan tagar langsung dari tampilan tagar
- Reaksi emoji kini menjadi hal yg penting pada server yg mendukungnya
- Edit filter di aplikasi sekarang bisa
- Sekarang dapat menyembunyikan pratinjau media dr lini masa
- Tema hitam baru ditambahkan
- Mematikan percakapan sekarang dapat dilakukan
- Bnyk perbaikan & peningkatan kecil

View File

@@ -0,0 +1,6 @@
- Log kerusakan terbaru kini disimpan dan siap disalin dari halaman pengaturan "Tentang Megalodon".
- Tambahkan dan tampilkan catatan pribadi di profil
- Modifikasi teks sekarang disorot dalam riwayat edit
- Akkoma: Postingan yang dikutip ditampilkan di lini masa; terjemahan; pratinjau posting sebelum dipublikasikan
- Menambahkan Markah dan Favorit Anda sebagai lini masa yang dapat disematkan
- Berbagai perbaikan kutu

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,9 @@
- Полностью переработан фрагмент настроек
- Во фрагмент композиции добавлен новый ярлык камеры.
- Исправлено множество сбоев в Calckey.
- Множество улучшений Akkoma/Pleroma.
- Множество улучшений в поведении фильтров.
- Новый переработанный лист счета.
- Добавлена возможность изменения стиля контента публикации (обычный текст, Markdown и т. д.) в экземплярах, которые это поддерживают.
- Добавьте возможность просматривать информацию о своем сервере, нажав на свое имя пользователя в чьем-либо профиле.
- Множество мелких исправлений и улучшений

View File

@@ -0,0 +1 @@
Android клиент Mastodon в дизайне Material You и дополнительными функциями

1
metadata/ru/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View File

@@ -0,0 +1,11 @@
Цей новий випуск містить:
- Новий, повністю оновлений дизайн Material 3
- Підтримка сповіщень UnifiedPush (Дякуємо @FineFindus!)
- Блокування та вимкнення звуку тепер видно з вашого профілю
- Тепер ви можете вимкнути хештеги безпосередньо з вікна хештегів
- Реакції емоджі тепер доступні для екземплярів, які її підтримують (Дякуємо @sk22!)
- Редагування фільтрів у додатку тепер також можливе
- Тепер можна приховати попередній перегляд медіа у стрічках
- Додано нову чорно-білу тему
- Тепер можливе вимкнення розмов
- Багато дрібних виправлень і покращень

View File

@@ -0,0 +1,6 @@
- Останній журнал збоїв тепер зберігається готовий до копіювання зі сторінки налаштувань «Про Megalodon»
- Додавайте та відображайте особисті нотатки в профілях
- Зміни тексту тепер підсвічуються в історії редагувань
- Akkoma: Цитовані повідомлення відображаються у стрічці; переклад; попередній перегляд дописів перед публікацією
- Додано закладки та вподобане як стрічки, які можна закріпити
- Різні виправлення помилок

View File

@@ -2,4 +2,4 @@
- Нові темно-сірі тони для всіх тем - Нові темно-сірі тони для всіх тем
- Більш чіткий заповнений значок репосту - Більш чіткий заповнений значок репосту
- Анімація для кнопок взаємодії - Анімація для кнопок взаємодії
- Виправлення помилок (збій у деяких публікаціях, "Списки з", мова публікації за замовчуванням) - Виправлення помилок (збій у деяких публікаціях, «Списки з», мова публікації за замовчуванням)

View File

@@ -1,7 +1,7 @@
- Налаштування кнопки "Опублікувати" - Налаштування кнопки «Опублікувати»
- Відкривання посилань Fediverse у програмі - Відкривання посилань Федісвіту в застосунку
- Тривале натискання кнопки репосту, щоб цитувати публікацію - Тривале натискання кнопки репосту, щоб цитувати публікацію
- Копіювання URL допису при тривалому натисканні кнопки "Репост" - Копіювання URL допису при тривалому натисканні кнопки «Репост»
- Реалізовано видалення сповіщень - Реалізовано видалення сповіщень
- Окремі значки для сповіщень - Окремі значки для сповіщень
- Нові сірі кольори - Нові сірі кольори

View File

@@ -1,10 +1,10 @@
- Чернетки та заплановані дописи - Чернетки та заплановані дописи
- Відображання вихідної публікації під час відповіді - Відображання вихідної публікації під час відповіді
- Фільтри, сумісні з Mastodon 4.0 (функції "приховати з попередженням" ще немає) - Фільтри, сумісні з Mastodon 4.0 (функції «Приховати з попередженням» ще немає)
- Натисніть і утримуйте, щоб взаємодіяти з публікаціями з інших облікових записів, у які ви ввійшли - Натисніть і утримуйте, щоб взаємодіяти з публікаціями з інших облікових записів, у які ви ввійшли
- Значки у всіх меню - Значки у всіх меню
- Перемикач для пересилання звітів - Перемикач для пересилання звітів
- Додано згадку під час використання функції "Опублікувати про це". - Додано згадку під час використання функції «Опублікувати про це».
- Опція: єдина іконка повідомлень - Опція: єдина іконка повідомлень
- Можливість доступу до списку правил з налаштувань - Можливість доступу до списку правил з налаштувань
- Виправлення помилок - Виправлення помилок

View File

@@ -1,7 +1,7 @@
- Нова домашня вкладка з загальнодоступними стрічками - Нова домашня вкладка з загальнодоступними стрічками
- Показ оголошень сервера - Показ оголошень сервера
- Текст масштабується відповідно до налаштувань системи - Текст масштабується відповідно до налаштувань системи
- Покращено фільтрацію ("Приховати з попередженням" ще не працює) від @thiagojedi - Покращено фільтрацію («Приховати з попередженням» ще не працює) від @thiagojedi
- Функції керування списком - Функції керування списком
- Видаляйте послідовників, м'яко заблокувавши їх - Видаляйте послідовників, м'яко заблокувавши їх
- Заборонено зв'язки з фашистами - Заборонено зв'язки з фашистами

View File

@@ -6,4 +6,4 @@
- Більше категорій сповіщень - Більше категорій сповіщень
- Додано засіб відкриття файлів - Додано засіб відкриття файлів
- Підказувати під час збереження відредагованої чернетки - Підказувати під час збереження відредагованої чернетки
- Можливість відключити кнопку "Переглянути нові публікації" - Можливість відключити кнопку «Переглянути нові публікації»

View File

@@ -6,4 +6,4 @@
- Більше категорій сповіщень - Більше категорій сповіщень
- Додано засіб відкриття файлів - Додано засіб відкриття файлів
- Підказувати під час збереження відредагованої чернетки - Підказувати під час збереження відредагованої чернетки
- Можливість відключити кнопку "Переглянути нові публікації" - Можливість відключити кнопку «Переглянути нові публікації»

View File

@@ -1 +1 @@
Тепер додано необов’язковий перемикач для переміщення кнопки "Опублікувати" в більш доступне положення! Тепер це за замовчуванням! Тепер додано необов’язковий перемикач для переміщення кнопки «Опублікувати» в більш доступне положення! Тепер це за замовчуванням!

View File

@@ -1,3 +1,3 @@
Випуск 97 додає: Випуск 97 додає:
- Нову функцію користувацьких локальних стрічок. Доступ до нього можна отримати в меню додавання стрічок - Нову функцію користувацьких локальних стрічок. Доступ до неї можна отримати в меню додавання стрічок
- Незначні виправлення та покращення - Незначні виправлення та покращення

View File

@@ -1,16 +1,16 @@
Moshidon - це модифікована версія офіційної програми <a href="https://github.com/mastodon/mastodon-android"> Mastodon для Android </a>, до якої додано важливі функції, яких немає в офіційній програмі, як-от об’єднана стрічка, приховані дописи та переглядач описів зображень. Moshidon це модифікована версія офіційної програми <a href="https://github.com/mastodon/mastodon-android"> Mastodon для Android </a>, до якої додано важливі функції, яких немає в офіційній програмі, як-от об’єднана стрічка, приховані дописи та переглядач описів зображень.
<b>Ключові особливості</b> <b>Ключові особливості</b>
- <b>Багато кольорів</b>: Тема "Material You" і багато барвистих варіантів! - <b>Багато кольорів</b>: Тема «Material You» і багато барвистих варіантів!
- <b>Відфільтровані дописи!</b>: можливість відображати відфільтровані дописи з попередженням! - <b>Відфільтровані дописи!</b>: можливість відображати відфільтровані дописи з попередженням!
- <b>Кнопка перекладу</b>: додає кнопку перекладу! - <b>Кнопка перекладу</b>: додає кнопку перекладу!
- <b>Засіб вибору мови</b>: Додано засіб вибору мови для публікації! - <b>Засіб вибору мови</b>: Додано засіб вибору мови для публікації!
- <b>Приховані дописи</b>: опублікуйте допис, не показуючи його в трендах, хештегах або загальнодоступній стрічці. - <b>Приховані дописи</b>: опублікуйте допис, не показуючи його в трендах, хештегах або загальнодоступній стрічці.
- <b>Об'єднана стрічка</b>: переглядайте всі загальнодоступні дописи від людей з усіх інших районів Fediverse, до яких підключено ваш домашній сервер. - <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>: додає багато функцій інтерфейсу користувача, таких як іконки взаємодії в сповіщеннях і усунення багатьох незручностей завдяки оригінальному інтерфейсу користувача!

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -1,9 +1,9 @@
- 重构设置界面 - 重构设置界面
- 在撰写文中添加新的相机快捷方式 - 在撰写文中添加新的相机快捷方式
- 修复了 Calckey 上的许多崩溃问题 - 修复了 Calckey 上的许多崩溃问题
- 对 Akkoma/Pleroma 进行了多项改进 - 对 Akkoma/Pleroma 进行了多项改进
- 对过滤器行为进行了多项改进 - 对过滤器行为进行了多项改进
- 全新设计账户选择界面 - 全新设计账户选择界面
- 在支持的实例中添加更改文内容样式纯文本、Markdown等的选项 - 在支持的实例中添加更改文内容样式纯文本、Markdown等的选项
- 在任何账户的资料页中点击用户名,即可查看其所在实例的信息 - 在任何账户的资料页中点击用户名,即可查看其所在实例的信息
- 其它小修复和改进 - 其它小修复和改进

View File

@@ -0,0 +1,11 @@
这个版本的更新包括:
- 来自上游的全新 Material 3 设计
- UnifiedPush支持感谢 @FineFindus !
- 现在可以在您的资料卡中看到拉黑和静音的账户
- 现在可以直接从话题标签视图中静音话题标签
- 为支持表情回应功能的实例适配表情回应功能(感谢 @sk22!
- 现在可以在应用中编辑过滤器(感谢上游)
- 现在可以从时间线中隐藏媒体预览
- 新增黑白主题
- 现在可以静音对话
- 许多小修复和改进

Some files were not shown because too many files have changed in this diff Show More