From 16962a127e86d2ae5a414b299e46d4d5db4876c7 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 12:15:50 +0100 Subject: [PATCH 01/31] Change db --- .../client/entities/app/CamelTag.java | 116 ++++++++++++++++++ .../android/mastodon/jobs/ComposeWorker.java | 21 ++++ .../app/fedilab/android/sqlite/Sqlite.java | 14 ++- 3 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java new file mode 100644 index 00000000..f55e3b61 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java @@ -0,0 +1,116 @@ +package app.fedilab.android.mastodon.client.entities.app; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import com.google.gson.annotations.SerializedName; + +import java.util.ArrayList; +import java.util.List; + +import app.fedilab.android.mastodon.exception.DBException; +import app.fedilab.android.sqlite.Sqlite; + +public class CamelTag { + + private final SQLiteDatabase db; + @SerializedName("name") + public String name; + + public CamelTag(Context context) { + this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + } + + /** + * Insert or update a status + * + * @param name {@link String} + * @return long - -1 if exists or id + * @throws DBException exception with database + */ + public synchronized long insert(String name) throws DBException { + if (db == null) { + throw new DBException("db is null. Wrong initialization."); + } + boolean exists = tagExists(name); + if (!exists) { + ContentValues values = new ContentValues(); + values.put(Sqlite.COL_TAG, name); + try { + return db.insertOrThrow(Sqlite.TABLE_CACHE_TAGS, null, values); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + return -1; + } + + /** + * Returns tags List of {@String} containing "search" + * + * @param search - String the word to search + * @return List + */ + public List getBy(String search) { + Cursor c = db.query(Sqlite.TABLE_CACHE_TAGS, null, Sqlite.COL_TAG + " LIKE \"%" + search + "%\"", null, null, null, null, null); + return cursorToTag(c); + } + + private boolean tagExists(String name) throws DBException { + Cursor c = db.query(Sqlite.TABLE_CACHE_TAGS, null, Sqlite.COL_TAG + " = \"" + name + "\"", null, null, null, null, null); + boolean isPresent = (c != null && c.getCount() > 0); + assert c != null; + c.close(); + return isPresent; + } + + public void removeAll() { + db.delete(Sqlite.TABLE_CACHE_TAGS, null, null); + } + + public void removeTag(String tag) { + db.delete(Sqlite.TABLE_CACHE_TAGS, Sqlite.COL_TAG + " = ?", new String[]{tag}); + } + + public void update(String oldTag, String newTag) { + ContentValues values = new ContentValues(); + values.put(Sqlite.COL_TAG, newTag); + try { + db.update(Sqlite.TABLE_CACHE_TAGS, values, Sqlite.COL_TAG + " = ?", new String[]{oldTag}); + } catch (Exception ignored) { + } + } + + private List cursorToTag(Cursor c) { + //No element found + if (c.getCount() == 0) { + c.close(); + return null; + } + List tags = new ArrayList<>(); + while (c.moveToNext()) { + tags.add(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_TAG))); + } + //Close the cursor + c.close(); + //Tag list is returned + return tags; + } +} diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java index d010d1b4..357565e2 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; @@ -57,6 +58,7 @@ import app.fedilab.android.mastodon.client.entities.api.ScheduledStatus; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.client.entities.app.Account; import app.fedilab.android.mastodon.client.entities.app.BaseAccount; +import app.fedilab.android.mastodon.client.entities.app.CamelTag; import app.fedilab.android.mastodon.client.entities.app.PostState; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.exception.DBException; @@ -232,6 +234,25 @@ public class ComposeWorker extends Worker { if (statuses.get(i).local_only) { statuses.get(i).text += " \uD83D\uDC41"; } + if (statuses.get(i).text != null && statuses.get(i).text.length() > 0) { + Matcher matcher = Helper.hashtagPattern.matcher(statuses.get(i).text); + while (matcher.find()) { + int matchStart = matcher.start(1); + int matchEnd = matcher.end(); + //Get cached tags + if (matchStart >= 0 && matchEnd < statuses.get(i).text.length()) { + String tag = statuses.get(i).text.substring(matchStart, matchEnd); + tag = tag.replace("#", ""); + if (tag.length() > 0) { + try { + new CamelTag(context).insert(tag); + } catch (DBException e) { + throw new RuntimeException(e); + } + } + } + } + } if (dataPost.scheduledDate == null) { if (dataPost.statusEditId == null) { diff --git a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java index 4c158990..7dfa4054 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java +++ b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java @@ -23,7 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper; public class Sqlite extends SQLiteOpenHelper { - public static final int DB_VERSION = 9; + public static final int DB_VERSION = 10; public static final String DB_NAME = "fedilab_db"; //Table of owned accounts @@ -94,13 +94,16 @@ public class Sqlite extends SQLiteOpenHelper { public static final String COL_USER_INSTANCE = "USER_INSTANCE"; //Home fetch logs - public static final String TABLE_HOME_FETCH_LOGS = "TABLE_HOME_FETCH_LOGS"; + public static final String TABLE_HOME_FETCH_LOGS = "HOME_FETCH_LOGS"; public static final String COL_INSERTED = "INSERTED"; public static final String COL_UPDATED = "UPDATED"; public static final String COL_FAILED = "FAILED"; public static final String COL_FREQUENCY = "FREQUENCY"; public static final String COL_FETCHED_COUNT = "FETCHED_COUNT"; + public static final String TABLE_CACHE_TAGS = "CACHE_TAGS"; + public static final String COL_TAG = "TAG"; + private static final String CREATE_TABLE_USER_ACCOUNT = "CREATE TABLE " + TABLE_USER_ACCOUNT + " (" + COL_USER_ID + " TEXT NOT NULL, " @@ -211,6 +214,10 @@ public class Sqlite extends SQLiteOpenHelper { + COL_ABOUT + " TEXT NOT NULL, " + COL_USER_INSTANCE + " TEXT NOT NULL)"; + private final String CREATE_TABLE_CACHE_TAGS = "CREATE TABLE " + + TABLE_CACHE_TAGS + "(" + + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + COL_TAG + " TEXT NOT NULL)"; public static SQLiteDatabase db; private static Sqlite sInstance; @@ -243,6 +250,7 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_DOMAINS_TRACKING); db.execSQL(CREATE_TABLE_MUTED); db.execSQL(CREATE_TABLE_STORED_INSTANCES); + db.execSQL(CREATE_TABLE_CACHE_TAGS); } @Override @@ -271,6 +279,8 @@ public class Sqlite extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_MUTED); case 8: db.execSQL(CREATE_TABLE_STORED_INSTANCES); + case 9: + db.execSQL(CREATE_TABLE_CACHE_TAGS); default: break; } From 159ddaea80646d2fa18f040e760ea7c5a8031376 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 15:02:31 +0100 Subject: [PATCH 02/31] manage tags --- .../mastodon/activities/ComposeActivity.java | 3 + .../mastodon/activities/TagCacheActivity.java | 98 ++++++++++++++++ .../mastodon/client/entities/api/Tag.java | 11 ++ .../client/entities/app/CamelTag.java | 16 ++- .../android/mastodon/jobs/ComposeWorker.java | 1 + .../mastodon/ui/drawer/ComposeAdapter.java | 14 ++- .../mastodon/ui/drawer/TagsEditAdapter.java | 107 ++++++++++++++++++ .../mastodon/layout/activity_camel_tag.xml | 50 ++++++++ .../mastodon/layout/drawer_status_compose.xml | 2 +- .../mastodon/layout/drawer_tag_edit.xml | 41 +++++++ .../res/layouts/mastodon/values/strings.xml | 1 + .../res/menus/mastodon/menu/menu_compose.xml | 6 + app/src/main/res/values/strings.xml | 5 + 13 files changed, 352 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/mastodon/activities/TagCacheActivity.java create mode 100644 app/src/main/java/app/fedilab/android/mastodon/ui/drawer/TagsEditAdapter.java create mode 100644 app/src/main/res/layouts/mastodon/layout/activity_camel_tag.xml create mode 100644 app/src/main/res/layouts/mastodon/layout/drawer_tag_edit.xml diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java index cc57e264..40f016d3 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ComposeActivity.java @@ -399,6 +399,9 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana } else { Toasty.info(ComposeActivity.this, getString(R.string.toot_error_no_content), Toasty.LENGTH_SHORT).show(); } + } else if (item.getItemId() == R.id.action_tags) { + TagCacheActivity tagCacheActivity = new TagCacheActivity(); + tagCacheActivity.show(getSupportFragmentManager(), null); } return true; } diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/TagCacheActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/TagCacheActivity.java new file mode 100644 index 00000000..9f48e095 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/TagCacheActivity.java @@ -0,0 +1,98 @@ +package app.fedilab.android.mastodon.activities; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.app.Dialog; +import android.os.Bundle; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.ArrayList; +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.databinding.ActivityCamelTagBinding; +import app.fedilab.android.mastodon.client.entities.app.CamelTag; +import app.fedilab.android.mastodon.exception.DBException; +import app.fedilab.android.mastodon.ui.drawer.TagsEditAdapter; +import es.dmoral.toasty.Toasty; + +public class TagCacheActivity extends DialogFragment { + + private List tags; + private TagsEditAdapter tagsEditAdapter; + + private ActivityCamelTagBinding binding; + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + binding = ActivityCamelTagBinding.inflate(getLayoutInflater()); + + MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(requireContext()); + materialAlertDialogBuilder.setView(binding.getRoot()); + + Dialog dialog = materialAlertDialogBuilder.create(); + tags = new ArrayList<>(); + + binding.saveTag.setOnClickListener(v -> { + if (binding.tagAdd.getText() != null && (binding.tagAdd.getText().toString().trim().replaceAll("#", "").length() > 0)) { + String tagToInsert = binding.tagAdd.getText().toString().trim().replaceAll("#", ""); + try { + boolean isPresent = new CamelTag(requireActivity()).tagExists(tagToInsert); + if (isPresent) + Toasty.warning(requireActivity(), getString(R.string.tags_already_stored), Toast.LENGTH_LONG).show(); + else { + new CamelTag(requireActivity()).insert(tagToInsert); + int position = tags.size(); + tags.add(tagToInsert); + Toasty.success(requireActivity(), getString(R.string.tags_stored), Toast.LENGTH_LONG).show(); + binding.tagAdd.setText(""); + tagsEditAdapter.notifyItemInserted(position); + } + } catch (DBException e) { + throw new RuntimeException(e); + } + + } + }); + dialog.setTitle(R.string.manage_tags); + + new Thread(() -> { + List tagsTemp = new CamelTag(requireActivity()).getAll(); + requireActivity().runOnUiThread(() -> { + if (tagsTemp != null) + tags = tagsTemp; + if (tags != null) { + tagsEditAdapter = new TagsEditAdapter(tags); + binding.tagList.setAdapter(tagsEditAdapter); + LinearLayoutManager mLayoutManager = new LinearLayoutManager(requireActivity()); + binding.tagList.setLayoutManager(mLayoutManager); + } + }); + }).start(); + + binding.close.setOnClickListener(v -> requireDialog().dismiss()); + return dialog; + } + + +} diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java index 4bc053f9..a1b9b1b3 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Tag.java @@ -14,6 +14,8 @@ package app.fedilab.android.mastodon.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ +import androidx.annotation.Nullable; + import com.google.gson.annotations.SerializedName; import java.io.Serializable; @@ -42,4 +44,13 @@ public class Tag implements Serializable { } return weight; } + + @Override + public boolean equals(@Nullable Object obj) { + boolean same = false; + if (obj instanceof Tag) { + same = this.name.equals(((Tag) obj).name); + } + return same; + } } diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java index f55e3b61..e535cfc0 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/CamelTag.java @@ -73,7 +73,7 @@ public class CamelTag { return cursorToTag(c); } - private boolean tagExists(String name) throws DBException { + public boolean tagExists(String name) throws DBException { Cursor c = db.query(Sqlite.TABLE_CACHE_TAGS, null, Sqlite.COL_TAG + " = \"" + name + "\"", null, null, null, null, null); boolean isPresent = (c != null && c.getCount() > 0); assert c != null; @@ -98,6 +98,20 @@ public class CamelTag { } } + /** + * Returns all tags in db + * + * @return string tags List + */ + public List getAll() { + try { + Cursor c = db.query(Sqlite.TABLE_CACHE_TAGS, null, null, null, null, null, Sqlite.COL_TAG + " ASC", null); + return cursorToTag(c); + } catch (Exception e) { + return null; + } + } + private List cursorToTag(Cursor c) { //No element found if (c.getCount() == 0) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java index 357565e2..3c0ab65b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java @@ -234,6 +234,7 @@ public class ComposeWorker extends Worker { if (statuses.get(i).local_only) { statuses.get(i).text += " \uD83D\uDC41"; } + //Record tags if (statuses.get(i).text != null && statuses.get(i).text.length() > 0) { Matcher matcher = Helper.hashtagPattern.matcher(statuses.get(i).text); while (matcher.find()) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index 6c1c2279..009c1f2f 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -119,6 +119,7 @@ import app.fedilab.android.mastodon.client.entities.api.Poll; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.client.entities.api.Tag; import app.fedilab.android.mastodon.client.entities.app.BaseAccount; +import app.fedilab.android.mastodon.client.entities.app.CamelTag; import app.fedilab.android.mastodon.client.entities.app.Languages; import app.fedilab.android.mastodon.client.entities.app.Quotes; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; @@ -818,13 +819,24 @@ public class ComposeAdapter extends RecyclerView.Adapter camelTags = new CamelTag(context).getBy(searchGroup); searchVM.search(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, searchGroup, null, "hashtags", false, true, false, 0, null, null, 10).observe((LifecycleOwner) context, results -> { - if (results == null) { + if (results == null || results.hashtags == null || results.hashtags.size() == 0) { return; } + if (camelTags != null && camelTags.size() > 0) { + for (String camelTag : camelTags) { + Tag tag = new Tag(); + tag.name = camelTag; + if (!results.hashtags.contains(tag)) { + results.hashtags.add(0, tag); + } + } + } + int currentCursorPosition = holder.binding.content.getSelectionStart(); TagsSearchAdapter tagsSearchAdapter = new TagsSearchAdapter(context, results.hashtags); holder.binding.content.setThreshold(1); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/TagsEditAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/TagsEditAdapter.java new file mode 100644 index 00000000..5bbf2d39 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/TagsEditAdapter.java @@ -0,0 +1,107 @@ +package app.fedilab.android.mastodon.ui.drawer; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.databinding.DrawerTagEditBinding; +import app.fedilab.android.mastodon.client.entities.app.CamelTag; +import app.fedilab.android.mastodon.exception.DBException; +import es.dmoral.toasty.Toasty; + +public class TagsEditAdapter extends RecyclerView.Adapter { + + private final List tags; + private final TagsEditAdapter tagsEditAdapter; + private Context context; + + public TagsEditAdapter(List tags) { + this.tags = tags; + tagsEditAdapter = this; + } + + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) { + context = parent.getContext(); + DrawerTagEditBinding itemBinding = DrawerTagEditBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + return new TagCaheViewHolder(itemBinding); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + final String[] tag = {tags.get(viewHolder.getLayoutPosition())}; + TagCaheViewHolder holder = (TagCaheViewHolder) viewHolder; + holder.binding.tagName.setText(String.format("#%s", tag[0])); + holder.binding.saveTag.setOnClickListener(v -> { + if (holder.binding.tagName.getText() != null && holder.binding.tagName.getText().toString().trim().replaceAll("#", "").length() > 0) { + String tagToInsert = holder.binding.tagName.getText().toString().trim().replaceAll("#", ""); + try { + boolean isPresent = new CamelTag(context).tagExists(tagToInsert); + if (isPresent) + Toasty.warning(context, context.getString(R.string.tags_already_stored), Toast.LENGTH_LONG).show(); + else { + new CamelTag(context).update(tag[0], tagToInsert); + Toasty.success(context, context.getString(R.string.tags_renamed), Toast.LENGTH_LONG).show(); + } + } catch (DBException e) { + throw new RuntimeException(e); + } + + } + }); + + holder.binding.deleteTag.setOnClickListener(v -> { + holder.binding.tagName.clearFocus(); + new CamelTag(context).removeTag(tag[0]); + tags.remove(tag[0]); + tagsEditAdapter.notifyItemRemoved(viewHolder.getLayoutPosition()); + Toasty.success(context, context.getString(R.string.tags_deleted), Toast.LENGTH_LONG).show(); + }); + + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return tags.size(); + } + + + static class TagCaheViewHolder extends RecyclerView.ViewHolder { + DrawerTagEditBinding binding; + + public TagCaheViewHolder(@NonNull DrawerTagEditBinding drawerTagEditBinding) { + super(drawerTagEditBinding.getRoot()); + binding = drawerTagEditBinding; + } + } +} + + diff --git a/app/src/main/res/layouts/mastodon/layout/activity_camel_tag.xml b/app/src/main/res/layouts/mastodon/layout/activity_camel_tag.xml new file mode 100644 index 00000000..43a1d5aa --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/activity_camel_tag.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_compose.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_compose.xml index 0ad55de1..1c54a62f 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_compose.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_compose.xml @@ -77,7 +77,7 @@ android:focusable="true" android:gravity="top|start" android:inputType="textMultiLine|textCapSentences" - android:minLines="8" + android:minLines="10" app:layout_constraintEnd_toStartOf="@id/button_emoji" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/content_spoiler" /> diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_tag_edit.xml b/app/src/main/res/layouts/mastodon/layout/drawer_tag_edit.xml new file mode 100644 index 00000000..429180ca --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/drawer_tag_edit.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/values/strings.xml b/app/src/main/res/layouts/mastodon/values/strings.xml index 0d2c4cc4..78554f9e 100644 --- a/app/src/main/res/layouts/mastodon/values/strings.xml +++ b/app/src/main/res/layouts/mastodon/values/strings.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/app/src/main/res/menus/mastodon/menu/menu_compose.xml b/app/src/main/res/menus/mastodon/menu/menu_compose.xml index 8fc21461..74ed80b4 100644 --- a/app/src/main/res/menus/mastodon/menu/menu_compose.xml +++ b/app/src/main/res/menus/mastodon/menu/menu_compose.xml @@ -21,4 +21,10 @@ android:icon="@drawable/ic_baseline_schedule_send_24" android:title="@string/schedule" app:showAsAction="never" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3dd4479b..939c3451 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2256,4 +2256,9 @@ Number of media Number of replies Update date + + The tag has been changed! + The tag has been removed! + he tag has been stored! + Manage tags \ No newline at end of file From eb861cdaa03f5d1ec3425992d665daca8c7b48eb Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 15:43:46 +0100 Subject: [PATCH 03/31] Archive release notes --- .../ReleaseNotes}/390.txt | 0 .../ReleaseNotes}/391.txt | 0 .../ReleaseNotes}/393.txt | 0 .../ReleaseNotes}/394.txt | 0 .../ReleaseNotes}/395.txt | 0 .../ReleaseNotes}/396.txt | 0 .../ReleaseNotes}/397.txt | 0 .../ReleaseNotes}/398.txt | 0 .../ReleaseNotes}/399.txt | 0 .../ReleaseNotes}/400.txt | 0 .../ReleaseNotes}/401.txt | 0 .../ReleaseNotes}/402.txt | 0 .../ReleaseNotes}/405.txt | 0 .../ReleaseNotes}/407.txt | 0 .../ReleaseNotes}/408.txt | 0 .../ReleaseNotes}/409.txt | 0 .../ReleaseNotes}/410.txt | 0 .../ReleaseNotes}/411.txt | 0 .../ReleaseNotes}/412.txt | 0 .../ReleaseNotes}/413.txt | 0 .../ReleaseNotes}/414.txt | 0 .../ReleaseNotes}/415.txt | 0 .../ReleaseNotes}/416.txt | 0 .../ReleaseNotes}/417.txt | 0 .../ReleaseNotes}/418.txt | 0 .../ReleaseNotes}/419.txt | 0 .../ReleaseNotes}/420.txt | 0 .../ReleaseNotes}/421.txt | 0 .../ReleaseNotes}/422.txt | 0 .../ReleaseNotes}/423.txt | 0 .../ReleaseNotes}/424.txt | 0 .../ReleaseNotes}/425.txt | 0 .../ReleaseNotes}/426.txt | 0 .../ReleaseNotes}/427.txt | 0 .../ReleaseNotes}/428.txt | 0 .../ReleaseNotes}/429.txt | 0 .../ReleaseNotes}/430.txt | 0 .../ReleaseNotes}/431.txt | 0 .../ReleaseNotes}/432.txt | 0 .../ReleaseNotes}/433.txt | 0 .../ReleaseNotes}/434.txt | 0 .../ReleaseNotes}/435.txt | 0 .../ReleaseNotes}/436.txt | 0 .../ReleaseNotes}/437.txt | 0 .../ReleaseNotes}/439.txt | 0 .../ReleaseNotes}/440.txt | 0 .../ReleaseNotes}/441.txt | 0 .../ReleaseNotes}/442.txt | 0 .../ReleaseNotes}/443.txt | 0 .../ReleaseNotes}/444.txt | 0 .../ReleaseNotes}/445.txt | 0 .../ReleaseNotes}/446.txt | 0 .../ReleaseNotes}/447.txt | 0 .../ReleaseNotes}/448.txt | 0 .../ReleaseNotes}/449.txt | 0 .../ReleaseNotes}/450.txt | 0 .../ReleaseNotes}/451.txt | 0 .../ReleaseNotes}/452.txt | 0 .../ReleaseNotes}/453.txt | 0 .../ReleaseNotes}/454.txt | 0 .../ReleaseNotes}/455.txt | 0 .../ReleaseNotes}/456.txt | 0 .../ReleaseNotes}/457.txt | 0 .../ReleaseNotes}/458.txt | 0 .../ReleaseNotes}/459.txt | 0 app/src/main/assets/release_notes/notes.json | 300 ------------------ .../metadata/android/en/changelogs/478.txt | 10 + 67 files changed, 10 insertions(+), 300 deletions(-) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/390.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/391.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/393.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/394.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/395.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/396.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/397.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/398.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/399.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/400.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/401.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/402.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/405.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/407.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/408.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/409.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/410.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/411.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/412.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/413.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/414.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/415.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/416.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/417.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/418.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/419.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/420.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/421.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/422.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/423.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/424.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/425.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/426.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/427.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/428.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/429.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/430.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/431.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/432.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/433.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/434.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/435.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/436.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/437.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/439.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/440.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/441.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/442.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/443.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/444.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/445.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/446.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/447.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/448.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/449.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/450.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/451.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/452.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/453.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/454.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/455.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/456.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/457.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/458.txt (100%) rename {src/fdroid/fastlane/metadata/android/en/changelogs => Archives/ReleaseNotes}/459.txt (100%) create mode 100644 src/fdroid/fastlane/metadata/android/en/changelogs/478.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/390.txt b/Archives/ReleaseNotes/390.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/390.txt rename to Archives/ReleaseNotes/390.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/391.txt b/Archives/ReleaseNotes/391.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/391.txt rename to Archives/ReleaseNotes/391.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/393.txt b/Archives/ReleaseNotes/393.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/393.txt rename to Archives/ReleaseNotes/393.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/394.txt b/Archives/ReleaseNotes/394.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/394.txt rename to Archives/ReleaseNotes/394.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/395.txt b/Archives/ReleaseNotes/395.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/395.txt rename to Archives/ReleaseNotes/395.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/396.txt b/Archives/ReleaseNotes/396.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/396.txt rename to Archives/ReleaseNotes/396.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/397.txt b/Archives/ReleaseNotes/397.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/397.txt rename to Archives/ReleaseNotes/397.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/398.txt b/Archives/ReleaseNotes/398.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/398.txt rename to Archives/ReleaseNotes/398.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/399.txt b/Archives/ReleaseNotes/399.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/399.txt rename to Archives/ReleaseNotes/399.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/400.txt b/Archives/ReleaseNotes/400.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/400.txt rename to Archives/ReleaseNotes/400.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/401.txt b/Archives/ReleaseNotes/401.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/401.txt rename to Archives/ReleaseNotes/401.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/402.txt b/Archives/ReleaseNotes/402.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/402.txt rename to Archives/ReleaseNotes/402.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/405.txt b/Archives/ReleaseNotes/405.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/405.txt rename to Archives/ReleaseNotes/405.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/407.txt b/Archives/ReleaseNotes/407.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/407.txt rename to Archives/ReleaseNotes/407.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/408.txt b/Archives/ReleaseNotes/408.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/408.txt rename to Archives/ReleaseNotes/408.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/409.txt b/Archives/ReleaseNotes/409.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/409.txt rename to Archives/ReleaseNotes/409.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/410.txt b/Archives/ReleaseNotes/410.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/410.txt rename to Archives/ReleaseNotes/410.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/411.txt b/Archives/ReleaseNotes/411.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/411.txt rename to Archives/ReleaseNotes/411.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/412.txt b/Archives/ReleaseNotes/412.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/412.txt rename to Archives/ReleaseNotes/412.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/413.txt b/Archives/ReleaseNotes/413.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/413.txt rename to Archives/ReleaseNotes/413.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/414.txt b/Archives/ReleaseNotes/414.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/414.txt rename to Archives/ReleaseNotes/414.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/415.txt b/Archives/ReleaseNotes/415.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/415.txt rename to Archives/ReleaseNotes/415.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/416.txt b/Archives/ReleaseNotes/416.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/416.txt rename to Archives/ReleaseNotes/416.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/417.txt b/Archives/ReleaseNotes/417.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/417.txt rename to Archives/ReleaseNotes/417.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/418.txt b/Archives/ReleaseNotes/418.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/418.txt rename to Archives/ReleaseNotes/418.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/419.txt b/Archives/ReleaseNotes/419.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/419.txt rename to Archives/ReleaseNotes/419.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/420.txt b/Archives/ReleaseNotes/420.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/420.txt rename to Archives/ReleaseNotes/420.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/421.txt b/Archives/ReleaseNotes/421.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/421.txt rename to Archives/ReleaseNotes/421.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/422.txt b/Archives/ReleaseNotes/422.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/422.txt rename to Archives/ReleaseNotes/422.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/423.txt b/Archives/ReleaseNotes/423.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/423.txt rename to Archives/ReleaseNotes/423.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/424.txt b/Archives/ReleaseNotes/424.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/424.txt rename to Archives/ReleaseNotes/424.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/425.txt b/Archives/ReleaseNotes/425.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/425.txt rename to Archives/ReleaseNotes/425.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/426.txt b/Archives/ReleaseNotes/426.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/426.txt rename to Archives/ReleaseNotes/426.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/427.txt b/Archives/ReleaseNotes/427.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/427.txt rename to Archives/ReleaseNotes/427.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/428.txt b/Archives/ReleaseNotes/428.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/428.txt rename to Archives/ReleaseNotes/428.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/429.txt b/Archives/ReleaseNotes/429.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/429.txt rename to Archives/ReleaseNotes/429.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/430.txt b/Archives/ReleaseNotes/430.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/430.txt rename to Archives/ReleaseNotes/430.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/431.txt b/Archives/ReleaseNotes/431.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/431.txt rename to Archives/ReleaseNotes/431.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/432.txt b/Archives/ReleaseNotes/432.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/432.txt rename to Archives/ReleaseNotes/432.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/433.txt b/Archives/ReleaseNotes/433.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/433.txt rename to Archives/ReleaseNotes/433.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/434.txt b/Archives/ReleaseNotes/434.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/434.txt rename to Archives/ReleaseNotes/434.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/435.txt b/Archives/ReleaseNotes/435.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/435.txt rename to Archives/ReleaseNotes/435.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/436.txt b/Archives/ReleaseNotes/436.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/436.txt rename to Archives/ReleaseNotes/436.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/437.txt b/Archives/ReleaseNotes/437.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/437.txt rename to Archives/ReleaseNotes/437.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/439.txt b/Archives/ReleaseNotes/439.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/439.txt rename to Archives/ReleaseNotes/439.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/440.txt b/Archives/ReleaseNotes/440.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/440.txt rename to Archives/ReleaseNotes/440.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/441.txt b/Archives/ReleaseNotes/441.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/441.txt rename to Archives/ReleaseNotes/441.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/442.txt b/Archives/ReleaseNotes/442.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/442.txt rename to Archives/ReleaseNotes/442.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/443.txt b/Archives/ReleaseNotes/443.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/443.txt rename to Archives/ReleaseNotes/443.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/444.txt b/Archives/ReleaseNotes/444.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/444.txt rename to Archives/ReleaseNotes/444.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/445.txt b/Archives/ReleaseNotes/445.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/445.txt rename to Archives/ReleaseNotes/445.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/446.txt b/Archives/ReleaseNotes/446.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/446.txt rename to Archives/ReleaseNotes/446.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/447.txt b/Archives/ReleaseNotes/447.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/447.txt rename to Archives/ReleaseNotes/447.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/448.txt b/Archives/ReleaseNotes/448.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/448.txt rename to Archives/ReleaseNotes/448.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/449.txt b/Archives/ReleaseNotes/449.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/449.txt rename to Archives/ReleaseNotes/449.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/450.txt b/Archives/ReleaseNotes/450.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/450.txt rename to Archives/ReleaseNotes/450.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/451.txt b/Archives/ReleaseNotes/451.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/451.txt rename to Archives/ReleaseNotes/451.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/452.txt b/Archives/ReleaseNotes/452.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/452.txt rename to Archives/ReleaseNotes/452.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/453.txt b/Archives/ReleaseNotes/453.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/453.txt rename to Archives/ReleaseNotes/453.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/454.txt b/Archives/ReleaseNotes/454.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/454.txt rename to Archives/ReleaseNotes/454.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/455.txt b/Archives/ReleaseNotes/455.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/455.txt rename to Archives/ReleaseNotes/455.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/456.txt b/Archives/ReleaseNotes/456.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/456.txt rename to Archives/ReleaseNotes/456.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/457.txt b/Archives/ReleaseNotes/457.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/457.txt rename to Archives/ReleaseNotes/457.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/458.txt b/Archives/ReleaseNotes/458.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/458.txt rename to Archives/ReleaseNotes/458.txt diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/459.txt b/Archives/ReleaseNotes/459.txt similarity index 100% rename from src/fdroid/fastlane/metadata/android/en/changelogs/459.txt rename to Archives/ReleaseNotes/459.txt diff --git a/app/src/main/assets/release_notes/notes.json b/app/src/main/assets/release_notes/notes.json index bd484641..a78bdeaf 100644 --- a/app/src/main/assets/release_notes/notes.json +++ b/app/src/main/assets/release_notes/notes.json @@ -88,305 +88,5 @@ "version": "3.13.6", "code": "460", "note": "Fixed:\n- Cross-compose: Wrong instance emojis\n- Custom emojis not displayed in notifications\n- Fav/Boost markers with shared messages\n- Empty notifications\n- Fix cw removed when replying\n- Fix expand media with fit preview images when sensitive\n- Fix an issue with fetch more displayed too often (cache clear will help or wait new messages)" - }, - { - "version": "3.13.5", - "code": "459", - "note": "Added:\n- Glitch: Allow to post messages locally (Can be turned off in Settings)\n\nFixed:\n- Crashes" - }, - { - "version": "3.13.4", - "code": "458", - "note": "Added:\n- Add Bubble timeline support in extra-features with filters\n- Allow to display public profiles by default to get all messages (Settings > Interface)\n\nChanged:\n- Full rework on links in messages (also mentions and tags)\n\nFixed:\n- Spoiler text when editing\n- Fix watermarks" - }, - { - "version": "3.13.3", - "code": "457", - "note": "Added:\n- Allow to enable extra features in Settings\n- Customizable settings for extra features\n- Support quotes, reactions with messages\n- Support text format (html, markdown, etc.) when composing\n\nFixed:\n- CW not working with media\n- Media not displayed for older instances\n- Some crashes\n" - }, - { - "version": "3.13.2", - "code": "456", - "note": "Changed:\n- Hidden media smaller with preview images\n\nFixed:\n- Issue with Media for Android 11+\n- Crash when not setting a translation key\n- Fix DeepL for API pro\n- Crash when visiting a profile with a lot of media\n- Home muted accounts not working without filters\n- Animated custom emoji not displayed" - }, - { - "version": "3.13.1", - "code": "455", - "note": "Added:\n- DeepL translation support free/pro keys\n\nChanged:\n- Hide buttons for media when editing\n\nFixed:\n- GIF loaded as static images\n- Suggested accounts cannot be followed" - }, - { - "version": "3.13.0", - "code": "454", - "note": "Added:\n- Post random quotes\n- Group reblogs in home timeline\n- Rename Nitter timelines\n- Android 13 support\n- Pagination with search / trending\n- Allow to remove left margin in messages (default: disabled)\n\nChanged:\n- Display translate button only when language is different\n- Respect blank spaces between words in messages\n- Focus button more accessible when editing media\n- Visual feedback for block on account list\n- Visual changes with compose / top bar\n- Use custom Nitter timeline name in manage timelines\n\nFixed:\n- Behavior with cw toggle\n- Truncated gimini links\n- Nav buttons not visible with media (Light theme)\n- Status bar with Android 5\n- Fix links not clickable\n- Fix deep links\n- Fix remote threads not fetched for some instances\n- Adding description to shared media\n- Open with another accounts\n- Chars size not respected for Android 5-6\n- Wrong instance fetched for instances.social\n- Bouncing Timeline on refresh\n- Links to mentions, tags, urls, not visible.\n- Custom channel sounds not applied\n- users with short username are not linked\n- Fix crashes" - }, - { - "version": "3.12.3", - "code": "453", - "note": "Added:\n- Pagination with search / trending\n\nFixed:\n- Long press on Nitter tabs\n- Open with another accounts\n- Chars size not respected for Android 5-6\n- Wrong instance fetched for instances.social" - }, - { - "version": "3.12.2", - "code": "452", - "note": "Added:\n- Rename Nitter timelines\n- Android 13 support\n\nChanged:\n- Visual feedback for block on account list\n- Visual changes with compose / top bar\n\nFixed:\n- Nav buttons not visible with media (Light theme)\n- Status bar with Android 5\n- Fix links not clickable\n- Fix deep links\n- Fix remote threads not fetched for some instances\n- Adding description to shared media\n- Fix crashes" - }, - { - "version": "3.12.1", - "code": "451", - "note": "Added:\n- Post random quotes\n- Group reblogs in home timeline\n\nChanged:\n- Display translate button only when language is different\n- Respect blank spaces between words in messages\n- Focus button more accessible when editing media\n\nFixed:\n- Behavior with cw toggle\n- Truncated gimini links" - }, - { - "version": "3.12.0", - "code": "450", - "note": "Added:\n- Full data import/export feature\n- Android 13 themed icon support\n\nFixed:\n- Fix a regression with filters\n- Fix dark solarized theme\n- Fix hide link previews for CW\n- Fix status bar color for all themes\n- Fix language in compose \"...\"\n- Fix add all home muted accounts from lists\n- Fix top notification badges" - }, - { - "version": "3.11.3", - "code": "449", - "note": "Added:\n- Add more targeted languages in picker for translations\n- Add account name in push notifications\n\nFixed:\n- Fix a crash when changing language\n- Fix counter colors\n- Fix default link color\n- Fix a crash when clicking on mentions" - }, - { - "version": "3.11.2", - "code": "448", - "note": "Added:\n- Mute/Unmute accounts in the Home timeline from their messages or their profiles\n- Add all users from a list to \"Muted home\" in one click\n- Display/Manage users that are muted for home\n\nFixed:\n- Timeline crashes" - }, - { - "version": "3.11.0", - "code": "446", - "note": "Added:\n- Display all messages in threads from remote instances (when possible)\n- Allow to unmute/unfollow/unpin a tag from tag timelines\n- Display most used accounts in header menu for an easy switch\n- Automatically add the tag when composing from a tag timeline\n- Add a translate button at the bottom of messages (default: disabled)\n- Add account role in profiles\n- Translate morse\n\nChanged:\n- Disable animations after a refresh\n\nFixed:\n- Contact not working when composing\n- Status bar for black theme\n- Message duplicated in conversations when edited\n- Color issue on Android 5\n- Several crashes" - }, - { - "version": "3.10.2", - "code": "445", - "note": "Added:\n- Allow to unmute/unfollow/unpin a tag from tag timelines\n- Automatically add the tag when composing from a tag timeline\n- Add a translate button at the bottom of messages (default: disabled)\n- Add account role in profiles\n\nFixed:\n- Contact not working when composing\n- Status bar for black theme\n- Message duplicated in conversations when edited\n- Color issue on Android 5" - }, - { - "version": "3.10.1", - "code": "444", - "note": "Added:\n- Display all messages in threads from remote instances (when possible)\n* Only public messages for instances using the Mastodon API\n* A dedicated button is displayed at the top right when conditions are filled." - }, - { - "version": "3.10.0", - "code": "443", - "note": "Added:\n- Dracula theme\n- Customize message colors\n- Enable/Disable Card presentation\n\nChanged:\n- Colors for some themes\n- Space between buttons\n\nFixed:\n- Animated profile pictures not displayed\n- Mentions broken in profile bio and fields\n- Jumps with fit preview images when scrolling up\n- Fetch more button broken with cache\n- Tag patterns in URL break the link\n- Typo in followed tags" - }, - { - "version": "3.9.7", - "code": "442", - "note": "Added:\n- Dracula theme\n\nChanged:\n- Colors for Light/Dark/Black themes\n\nFixed:\n- Animated profile pictures not displayed\n- Mentions broken in profile bio and fields\n- Tag patterns in URL break the link\n- Typo in followed tags" - }, - { - "version": "3.9.6", - "code": "441", - "note": "Fixed:\n- Jumps with fit preview images when scrolling up\n- Fetch more button broken with cache" - }, - { - "version": "3.9.5", - "code": "440", - "note": "Fixed:\n- Custom emoji are not always displayed\n- Jumps in timeline when using \"fit preview images\"\n- Dark theme: timeline buttons without toggle" - }, - { - "version": "3.9.4", - "code": "439", - "note": "Changed:\n- Remove card presentation\n- Link color for black theme\n\nFixed:\n- Crash when changing the theme" - }, - { - "version": "3.9.3", - "code": "438", - "note": "Added:\n- New design with 5 themes\n\nChanged:\n- Remove built-in browser support\n- Fit preview image displays images vertically\n- Add counters next to images\n\nFixed:\n- Jumps in timelines\n- Replies to wrong messages with followed instances\n- Bug with delete&redraft with a media\n- List cannot be hidden\n- Some crashes" - }, - { - "version": "3.9.1", - "code": "436", - "note": "Changed:\n- Remove built-in browser support\n- More spaces between action buttons in messages\n\nFixed:\n- Text size issue\n- Text overlap\n- Wrong background for solarized black\n- Mix between light and dark theme\n- Save button hidden" - }, - { - "version": "3.9.0", - "code": "435", - "note": "Added:\n- Migrate to Material Design 3\n- 5 Themes (Light, Dark, Solarized Light/Dark, Black)\n- Automatically switch between Light/Dark\n- Light and Dark theme can be defined for time-based switch\n- Android 12+: Dynamic color\n\nFixed:\n- Jumps in timelines\n" - }, - { - "version": "3.8.1", - "code": "434", - "note": "Added:\n- Mute tags with long press in timelines\n\nChanged:\n- Muted account messages are now removed from cache\n\nFixed:\n- Open with another account\n- Fix jumps in profiles\n- Media not displayed in album -> force indexation\n- Built-in browser does not give admin scope\n- Some crashes" - }, - { - "version": "3.8.0", - "code": "433", - "note": "Added:\n- List of blocked domains (allow to unblock)\n- Support gemini links\n- Suggested followers\n- Mod/Adm: Manage instance blocked domains\n- Open messages with another account\n- Allow to disable notifications for admins\n- Sort lists\n\nChanged:\n- Allow search term to be edited\n\nFixed:\n- Drafts deleted with no warning\n- Remove lists from \"Manage timelines\"\n- App crashes when proxy is set\n- Filter not synced after being edited\n- Some crashes / improvements" - }, - { - "version": "3.7.5", - "code": "432", - "note": "Added:\n- List of blocked domains (allow to unblock)\n- Support gemini links\n- Suggested followers\n\nChanged:\n- Allow search term to be edited\n\nFixed:\n- Drafts deleted with no warning\n- App crashes when proxy is set\n- Filter not synced after being edited\n- Some crashes" - }, - { - "version": "3.7.4", - "code": "431", - "note": "Added:\n- Full support to new filters for Mastodon 4\n- Visit profiles without being authenticated / Allow to display all their messages\n\nChanged:\n- Compose view takes the whole width even in threads\n- Accounts can be timed-mute from their profile\n\nFixed:\n- Draft stored when replying \"no\" or dialog prompted without changes\n- Empty pages when starting the app\n- Saving and sharing media fails on some devices\n- Add support for admin notifications\n- Copying content of a message" - }, - { - "version": "3.7.3", - "code": "430", - "note": "Added:\n- Visit profiles without being authenticated / Allow to display all their messages\n\nFixed:\n- Saving media fails on some devices" - }, - { - "version": "3.7.2", - "code": "429", - "note": "Added:\n- Full support to new filters for Mastodon 4" - }, - { - "version": "3.7.1", - "code": "428", - "note": "Added:\n- Support to open links containing /@display_name/ in their path (works on older devices)\n- Display reply count when counters are enabled\n- Add support for filtering profile messages\n\nChanged:\n- Compose view takes the whole width even in threads\n- Reset push notification marker when clearing cache\n\nFixed:\n- Draft stored when replying \"no\" or dialog prompted without changes\n- Filters not working with tags\n- Add a specific error message for followed tags\n- Empty pages when starting the app" - }, - { - "version": "3.7.0", - "code": "427", - "note": "Added:\n- Follow tags (dedicated entry in menu)\n- Reduce the list of languages when composing (Settings > Compose)\n- Language indicator when composing\n- Replies are automatically set to first message language\n- Two new Light themes\n- More moderation features\n- List name can be edited\n\nFixed:\n- Filter not working\n- Crash with trends\n- Issue with themes\n- Some content lost when sending messages (mentions)\n- Fix freezes in timelines\n- Some other fixes" - }, - { - "version": "3.6.5", - "code": "426", - "note": "- Two new Light themes\n- More moderation features\n\nFixed:\n- Filter not working\n- Crash with trends\n- Some content lost when sending messages (mentions)\n- Some other fixes" - }, - { - "version": "3.6.4", - "code": "425", - "note": "Changed:\n- Tag search ordered by popularity\n\nFixed:\n- Unable to get client ID on some devices\n- Issue with messages/notifications not correctly displayed\n- Notifications not received\n- Friendica: issues with mentions and tags (open browser)\n- Improve sharing behaviour" - }, - { - "version": "3.6.3", - "code": "424", - "note": "Fixed:\n- Issue with messages/notifications not correctly displayed\n- Friendica: issues with mentions and tags (open browser)\n- Improve sharing behaviour\n" - }, - { - "version": "3.6.2", - "code": "423", - "note": "Fixed:\n- Order of notifications\n- URL when sharing boosted message\n- Blank pages when restarting\n- Fix some crashes" - }, - { - "version": "3.6.1", - "code": "422", - "note": "Added:\n- Display client in detailed messages\n- Visual support for quotes starting with \">\"\n- Increase indentations for threads (zero to 20, default 5)\n- Visibility for public replies set to unlisted (can be disabled)\n\nChanged:\n- Reduce title size when text size is increased\n\nFixed:\n- Filters are not applied\n- Blocking an account doesn't remove messages in cache\n- Fix some crashes" - }, - { - "version": "3.6.0", - "code": "421", - "note": "Added:\n- Edit messages (if your instance supports that feature)\n- Pin/Unpin messages\n- Set the default language for translations\n- Change app icon (Settings > Interface)\n- Allow to disable \"remember position\" in timelines\n- Allow to disable notification aggregation in settings\n- Icon on media previews if a description is available\n\nChanged:\n- Allow to disable/enable media for notifications\n\nFixed:\n- Post loses \"spoiler message\" when adding a media\n- Camera not working on Android 11\n- Notification aggregation\n- Vibrations when fetching new notifications\n- Fix an issue with media timelines\n- Fix some theme issues\n- Fix an issue with built-in browser & openId\n- Bad behaviours with Art Timelines\n- Some crashes" - }, - { - "version": "3.5.3", - "code": "420", - "note": "- Edit messages (if your instance support that feature)\n- Some fixes" - }, - { - "version": "3.5.2", - "code": "419", - "note": "Added:\n- Pin/Unpin messages\n- Set the default language for translations\n\nChanged:\n- Allow to disable/enable media for notifications\n\nFixed:\n- Wrong images in notification timeline\n- Double icon bug\n- Fix some crashes" - }, - { - "version": "3.5.1", - "code": "418", - "note": "Added:\n- Change app icon (Settings > Interface)\n- Allow to disable \"remember position\" in timelines\n- Allow to disable notification aggregation in settings\n\nChanged:\n- Allow to disable/enable media for notifications\n\nFixed:\n- Post loses \"spoiler message\" when adding a media\n- Camera not working on Android 11\n- Notification aggregation\n- Vibrations when fetching new notifications\n- Fix an issue with media timelines\n- Some crashes" - }, - { - "version": "3.5.0", - "code": "417", - "note": "Changed:\n- Swipe between timelines\n- Improve cache\n- Button sizes can be changed in settings\n- French translation\n\nFixed:\n- Pleroma: Emoji reactions\n- Sharing (several fixes)\n- Theme issues\n- Rendering issue for links\n- Notifications not removed from cache\n- Issue with watermarks\n- Pagination with bookmarks/favourites\n- Some crashes" - }, - { - "version": "3.4.2", - "code": "415", - "note": "Fixed:\n- Attach media to a reply" - }, - { - "version": "3.4.1", - "code": "414", - "note": "Added:\n- Disable counters in settings\nFixed:\n- Duplicated messages from cache\n- Notifications in double\n- Drafts not automatically removed\n- Messages not removed from cache after deletion" - }, - { - "version": "3.4.0", - "code": "413", - "note": "Added:\n- New cache mechanism (can be disabled in settings)\n- Set thumbnails load behavior Always/Wifi only /ask\n- Add counters for new messages in timelines\nFixed:\n- Contextual menu not working in threads\n- Tag search issue with Friendica\n- Notifications click open the wrong tab\n- Encoding issue with media descriptions\n- Some other fixes." - }, - { - "version": "3.3.2", - "code": "409", - "note": "- Fix an issue with cache and home timeline\n- Nitter timelines use the custom instance from settings\n- Fix Nitter issues (only RT)\n- No longer accepts invalid certificate for onion URLs(Google)\n- Fix some crashes" - }, - { - "version": "3.3.1", - "code": "408", - "note": "- Improve speed for Nitter instances\n- Allow to edit Nitter accounts with a long press on tabs\n- Fix pagination issue with pinned timelines\n- Fix some crashes\n- Fix visibility when displaying counters" - }, - { - "version": "3.3.0", - "code": "407", - "note": "Added:\n- Settings to set all timelines at the top (default disabled)\n- Settings to display timelines in a list (default disabled)\n- Display counters for fav/reblog in timelines (default disabled)\n\nFixed:\n- Visibility issue when replying\n- Some theme issues when composing\n- Some crashes" - }, - { - "version": "3.2.0", - "code": "405", - "note": "Added:\n- Export Settings\n- Propagate manual reordering of lists in timeline to \"Lists\" submenu\n- Allow to change the push distributor in settings\n\nChanged:\n- Improve fit preview images\n- Improve notifications\n- Profile media displayed in a grid\n\nFixed:\n- Some Peertube videos not working\n- Respect the default visibility account when replying\n- Discriminate gif from images\n- App crashes when opening external instance timeline\n- Remove button in thread composer crashes the app\n- Back button opens a lot of old activities before closing the app\n- Problems with sharing\n- Reorder Lists with UI issue on change the visibility\n- Link is not shown correctly in posts from Friendica" - }, - { - "version": "3.1.0", - "code": "402", - "note": "Added:\n- New theme: Dark Elephant from S1m\n- Error messages from server side when posting fails\n\nChanged:\n- Fetch more buttons more visible\n\nFixed:\n- Issue when fetching missing messages\n- Some issues with themes\n- Too much lost space with reaction (Pleroma)\n- Delete and redraft crashes\n- Crash when playing a video\n- Other crash fixes" - }, - { - "version": "3.0.11", - "code": "401", - "note": "Added:\n- New theme: Dark Elephant from S1m\n- Error messages from server side when posting fails\n- Allow to set the fetch time for delayed notifications\n\nChanged:\n- Fetch more buttons more visible\n\nFixed:\n- Issue when fetching missing messages\n- Some issues with themes\n- Too much lost space with reaction (Pleroma)\n- Delete and redraft crashes\n- Crash when playing a video\n- Other crash fixes" - }, - { - "version": "3.0.10", - "code": "400", - "note": "Added:\n- Allow to define the max chars count when not detected (In about the instance)\n- Add emoji one picker when composing (must be enabled in settings)\n- Add release notes with the ability to translate them\n\nFixed:\n- Friendica custom emojis not displayed\n- Long press to store media\n- Some bug fixes" - }, - { - "version": "3.0.9", - "code": "399", - "note": "Added:\n- Set compose language (from compose menu -> three vertical dots)\n- Add reactions support for Pleroma\n- Add privacy indicator at the top right\n\nChanged\n- Improve the scrolling behaviour\n- Scroll to top (tab reselection) will fetch new messages and then scroll to top\n\nFixed:\n- Empty tag timelines\n- Remove focus point for fit media preview\n- Fix cannot share with one account\n- Fix black theme\n- Theme cannot be selected\n- Fix some button colors" - }, - { - "version": "3.0.8", - "code": "398", - "note": "- Keep improving the scroll behaviour\n- Scroll to top (tab reselection) will fetch new messages and then scroll to top\n- Remove focus point for fit media preview\n- Fix cannot share with one account\n- Fix black theme\n- Fix some button colors" - }, - { - "version": "3.0.7", - "code": "397", - "note": "- Fix some bugs reported." - }, - { - "version": "3.0.6", - "code": "396", - "note": "Added:\n- Allow to set a focus point on previews (media editor)\n- Respect the focus point with previews\n- Pagination with the fetch more button support reading up or down\n- Add trends\n\nFixed:\n- Only last push notification is displayed (not grouped)\n- Bad behavior with the right/left scroll\n- Fix long profiles not fully displayed\n- Issues with some polls\n- Some crashes\n- Some bad behaviors" - }, - { - "version": "3.0.5", - "code": "395", - "note": "- Fix some bugs\n- Allow to share with the app" - }, - { - "version": "3.0.4", - "code": "394", - "note": "- Fix crashes for some Pleroma instances" - }, - { - "version": "3.0.2", - "code": "393", - "note": "- Some bug fixes\n- Improve pinned timelines" - }, - { - "version": "3.0.1", - "code": "391", - "note": "Some quick fixes" - }, - { - "version": "3.0.0", - "code": "390", - "note": "New version of Fedilab with new feature.\n- You can now compose threads\n- See the whole thread when replying\n- Cache support\n- New design" } ] \ No newline at end of file diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt new file mode 100644 index 00000000..93817e39 --- /dev/null +++ b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt @@ -0,0 +1,10 @@ +Added: +- Camel case tags (automatically recorded when composing) +- Manage tags (add new ones) when composing (main top right menu) + +Changed: +- Media heights now use the screen size + +Fixed: +- TalkBack issues +- Some crashes \ No newline at end of file From 3ac1abb2d2592d265451cced0d06dd124ec5e05e Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 9 Feb 2023 15:44:07 +0100 Subject: [PATCH 04/31] Update translation files Updated by "Cleanup translation files" hook in Weblate. Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/fedilab/description/ Translation: Fedilab/description --- .../metadata/android/cs/changelogs/390.txt | 5 --- .../metadata/android/cs/changelogs/391.txt | 5 --- .../metadata/android/cs/changelogs/393.txt | 2 -- .../metadata/android/cs/changelogs/394.txt | 1 - .../metadata/android/cs/changelogs/395.txt | 2 -- .../metadata/android/cs/changelogs/396.txt | 13 -------- .../metadata/android/cs/changelogs/397.txt | 1 - .../metadata/android/de/changelogs/390.txt | 5 --- .../metadata/android/de/changelogs/391.txt | 5 --- .../metadata/android/de/changelogs/393.txt | 2 -- .../metadata/android/de/changelogs/394.txt | 1 - .../metadata/android/de/changelogs/395.txt | 2 -- .../metadata/android/de/changelogs/397.txt | 1 - .../metadata/android/de/changelogs/398.txt | 6 ---- .../metadata/android/de/changelogs/409.txt | 5 --- .../metadata/android/de/changelogs/410.txt | 4 --- .../metadata/android/de/changelogs/411.txt | 3 -- .../metadata/android/de/changelogs/412.txt | 5 --- .../metadata/android/de/changelogs/413.txt | 10 ------ .../metadata/android/de/changelogs/414.txt | 7 ---- .../metadata/android/de/changelogs/415.txt | 2 -- .../metadata/android/de/changelogs/416.txt | 12 ------- .../metadata/android/de/changelogs/417.txt | 15 --------- .../metadata/android/de/changelogs/432.txt | 13 -------- .../metadata/android/de/changelogs/433.txt | 18 ---------- .../metadata/android/de/changelogs/434.txt | 12 ------- .../metadata/android/de/changelogs/435.txt | 9 ----- .../metadata/android/de/changelogs/436.txt | 10 ------ .../metadata/android/de/changelogs/455.txt | 9 ----- .../metadata/android/de/changelogs/456.txt | 10 ------ .../metadata/android/de/changelogs/457.txt | 14 -------- .../metadata/android/fr/changelogs/390.txt | 5 --- .../metadata/android/fr/changelogs/391.txt | 5 --- .../metadata/android/fr/changelogs/393.txt | 2 -- .../metadata/android/fr/changelogs/394.txt | 1 - .../metadata/android/fr/changelogs/395.txt | 2 -- .../metadata/android/fr/changelogs/396.txt | 13 -------- .../metadata/android/fr/changelogs/397.txt | 1 - .../metadata/android/fr/changelogs/398.txt | 6 ---- .../metadata/android/fr/changelogs/399.txt | 16 --------- .../metadata/android/fr/changelogs/400.txt | 9 ----- .../metadata/android/fr/changelogs/401.txt | 11 ------- .../metadata/android/fr/changelogs/402.txt | 15 --------- .../metadata/android/fr/changelogs/405.txt | 20 ----------- .../metadata/android/fr/changelogs/407.txt | 9 ----- .../metadata/android/fr/changelogs/408.txt | 5 --- .../metadata/android/fr/changelogs/409.txt | 5 --- .../metadata/android/fr/changelogs/410.txt | 4 --- .../metadata/android/fr/changelogs/411.txt | 3 -- .../metadata/android/fr/changelogs/412.txt | 5 --- .../metadata/android/fr/changelogs/413.txt | 10 ------ .../metadata/android/fr/changelogs/414.txt | 7 ---- .../metadata/android/fr/changelogs/415.txt | 2 -- .../metadata/android/fr/changelogs/416.txt | 12 ------- .../metadata/android/fr/changelogs/417.txt | 15 --------- .../metadata/android/fr/changelogs/418.txt | 15 --------- .../metadata/android/fr/changelogs/419.txt | 11 ------- .../metadata/android/fr/changelogs/420.txt | 2 -- .../metadata/android/fr/changelogs/421.txt | 22 ------------- .../metadata/android/fr/changelogs/422.txt | 13 -------- .../metadata/android/fr/changelogs/423.txt | 5 --- .../metadata/android/fr/changelogs/424.txt | 4 --- .../metadata/android/fr/changelogs/425.txt | 9 ----- .../metadata/android/fr/changelogs/426.txt | 9 ----- .../metadata/android/fr/changelogs/427.txt | 16 --------- .../metadata/android/fr/changelogs/428.txt | 14 -------- .../metadata/android/fr/changelogs/429.txt | 2 -- .../metadata/android/fr/changelogs/430.txt | 5 --- .../metadata/android/fr/changelogs/431.txt | 14 -------- .../metadata/android/fr/changelogs/432.txt | 13 -------- .../metadata/android/fr/changelogs/433.txt | 18 ---------- .../metadata/android/fr/changelogs/434.txt | 12 ------- .../metadata/android/fr/changelogs/435.txt | 9 ----- .../metadata/android/fr/changelogs/436.txt | 10 ------ .../metadata/android/fr/changelogs/437.txt | 14 -------- .../metadata/android/fr/changelogs/439.txt | 6 ---- .../metadata/android/fr/changelogs/440.txt | 4 --- .../metadata/android/fr/changelogs/441.txt | 3 -- .../metadata/android/fr/changelogs/442.txt | 11 ------- .../metadata/android/fr/changelogs/443.txt | 16 --------- .../metadata/android/fr/changelogs/444.txt | 4 --- .../metadata/android/fr/changelogs/445.txt | 11 ------- .../metadata/android/fr/changelogs/446.txt | 18 ---------- .../metadata/android/fr/changelogs/447.txt | 4 --- .../metadata/android/fr/changelogs/448.txt | 7 ---- .../metadata/android/fr/changelogs/449.txt | 9 ----- .../metadata/android/fr/changelogs/450.txt | 12 ------- .../metadata/android/fr/changelogs/451.txt | 12 ------- .../metadata/android/fr/changelogs/452.txt | 16 --------- .../metadata/android/fr/changelogs/453.txt | 8 ----- .../metadata/android/gl/changelogs/390.txt | 5 --- .../metadata/android/ja/changelogs/390.txt | 5 --- .../metadata/android/ja/changelogs/391.txt | 5 --- .../metadata/android/ja/changelogs/393.txt | 2 -- .../metadata/android/ja/changelogs/394.txt | 1 - .../metadata/android/ja/changelogs/395.txt | 2 -- .../metadata/android/pt/changelogs/390.txt | 5 --- .../metadata/android/pt/changelogs/393.txt | 3 -- .../metadata/android/pt/changelogs/394.txt | 1 - .../metadata/android/pt/changelogs/395.txt | 2 -- .../metadata/android/pt/changelogs/396.txt | 13 -------- .../metadata/android/pt/changelogs/397.txt | 1 - .../metadata/android/sc/changelogs/390.txt | 5 --- .../metadata/android/sc/changelogs/391.txt | 5 --- .../metadata/android/sc/changelogs/393.txt | 2 -- .../metadata/android/sc/changelogs/394.txt | 1 - .../metadata/android/sc/changelogs/395.txt | 2 -- .../metadata/android/tr/changelogs/390.txt | 5 --- .../metadata/android/tr/changelogs/391.txt | 5 --- .../metadata/android/tr/changelogs/393.txt | 2 -- .../metadata/android/tr/changelogs/394.txt | 1 - .../metadata/android/tr/changelogs/395.txt | 2 -- .../metadata/android/tr/changelogs/396.txt | 13 -------- .../metadata/android/tr/changelogs/397.txt | 1 - .../metadata/android/tr/changelogs/398.txt | 6 ---- .../metadata/android/tr/changelogs/399.txt | 16 --------- .../metadata/android/tr/changelogs/400.txt | 9 ----- .../metadata/android/tr/changelogs/401.txt | 11 ------- .../metadata/android/tr/changelogs/402.txt | 15 --------- .../metadata/android/uk/changelogs/395.txt | 2 -- .../metadata/android/uk/changelogs/405.txt | 20 ----------- .../metadata/android/uk/changelogs/418.txt | 15 --------- .../metadata/android/uk/changelogs/421.txt | 22 ------------- .../metadata/android/uk/changelogs/422.txt | 13 -------- .../metadata/android/uk/changelogs/428.txt | 14 -------- .../metadata/android/uk/changelogs/431.txt | 14 -------- .../metadata/android/uk/changelogs/432.txt | 13 -------- .../metadata/android/uk/changelogs/433.txt | 18 ---------- .../metadata/android/uk/changelogs/454.txt | 33 ------------------- .../metadata/android/vi/changelogs/390.txt | 5 --- .../metadata/android/vi/changelogs/391.txt | 5 --- .../metadata/android/vi/changelogs/393.txt | 2 -- .../metadata/android/vi/changelogs/394.txt | 1 - .../metadata/android/vi/changelogs/395.txt | 2 -- .../metadata/android/vi/changelogs/396.txt | 13 -------- .../metadata/android/vi/changelogs/397.txt | 1 - .../metadata/android/vi/changelogs/398.txt | 6 ---- .../metadata/android/vi/changelogs/399.txt | 16 --------- .../metadata/android/vi/changelogs/400.txt | 9 ----- .../metadata/android/vi/changelogs/401.txt | 11 ------- .../metadata/android/vi/changelogs/402.txt | 15 --------- .../metadata/android/vi/changelogs/405.txt | 20 ----------- .../metadata/android/vi/changelogs/407.txt | 9 ----- .../metadata/android/vi/changelogs/408.txt | 5 --- 144 files changed, 1180 deletions(-) delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/396.txt delete mode 100644 src/fdroid/fastlane/metadata/android/cs/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/398.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/409.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/410.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/411.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/412.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/413.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/414.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/415.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/416.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/417.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/432.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/433.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/434.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/435.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/436.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/455.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/456.txt delete mode 100644 src/fdroid/fastlane/metadata/android/de/changelogs/457.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/396.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/398.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/399.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/400.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/401.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/402.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/405.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/407.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/408.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/409.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/410.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/411.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/412.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/413.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/414.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/415.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/416.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/417.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/418.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/419.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/420.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/421.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/423.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/424.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/425.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/426.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/429.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/430.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/435.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/439.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/440.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/441.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/444.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/446.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/447.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/448.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/449.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/450.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/451.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/452.txt delete mode 100644 src/fdroid/fastlane/metadata/android/fr/changelogs/453.txt delete mode 100644 src/fdroid/fastlane/metadata/android/gl/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/ja/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/ja/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/ja/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/ja/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/ja/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt delete mode 100644 src/fdroid/fastlane/metadata/android/pt/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/sc/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/sc/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/sc/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/sc/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/sc/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/396.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/398.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/399.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/400.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/401.txt delete mode 100644 src/fdroid/fastlane/metadata/android/tr/changelogs/402.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/405.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/418.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/421.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/422.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/428.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/431.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/432.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/433.txt delete mode 100644 src/fdroid/fastlane/metadata/android/uk/changelogs/454.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/390.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/391.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/393.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/394.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/395.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/396.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/397.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/398.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/399.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/400.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/401.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/402.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/405.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/407.txt delete mode 100644 src/fdroid/fastlane/metadata/android/vi/changelogs/408.txt diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/390.txt deleted file mode 100644 index 10cfc14d..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nová verze aplikace Fedilab s novými funkcemi. -- Nyní můžete vytvářet vlákna -- Při odpovídání vidíte celé vlákno -- Podpora cache -- Nový design diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/391.txt deleted file mode 100644 index 10cfc14d..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nová verze aplikace Fedilab s novými funkcemi. -- Nyní můžete vytvářet vlákna -- Při odpovídání vidíte celé vlákno -- Podpora cache -- Nový design diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/393.txt deleted file mode 100644 index cedcdbb6..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Opravy chyb -- Vylepšení připnutých časových os diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/394.txt deleted file mode 100644 index d6266c65..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- Oprava pádů u některých instancí pleroma diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/395.txt deleted file mode 100644 index 783ebfe9..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Oprava chyb -- Možnost sdílet pomocí aplikace diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/396.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/396.txt deleted file mode 100644 index 7a10978c..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/396.txt +++ /dev/null @@ -1,13 +0,0 @@ -Přidáno: -- Možnost nastavit bod zaměření u náhledů (editor médií) -- Respektování bodu zaměření u náhledů -- Stránkování s tlačítkem na nahrání dalších zpráv s podporou čtení nahoru nebo dolů -- Přidání trendů - -Opraveno: -- Zobrazování jen poslední notifikace (bez seskupení) -- Špatné chování s pravým/levým posuvníkem -- Neúplné zobrazování dlouhých profilů -- Problémy s některými anketami -- Některé pády aplikace -- Některé případy chybného chování aplikace diff --git a/src/fdroid/fastlane/metadata/android/cs/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/cs/changelogs/397.txt deleted file mode 100644 index 76d2e04d..00000000 --- a/src/fdroid/fastlane/metadata/android/cs/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Oprava některých nahlášených chyb. diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/390.txt deleted file mode 100644 index f3444e1b..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Neue Version von Fedilab mit neuen Features: -- Du kannst jetzt Threads erstellen, -- den ganzen Thread beim Antworten sehen. -- Cache-Support -- Neues Design diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/391.txt deleted file mode 100644 index f3444e1b..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Neue Version von Fedilab mit neuen Features: -- Du kannst jetzt Threads erstellen, -- den ganzen Thread beim Antworten sehen. -- Cache-Support -- Neues Design diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/393.txt deleted file mode 100644 index 517893df..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Fehlerbehebungen -- Verbesserungen bei angepinnten Zeitleisten diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/394.txt deleted file mode 100644 index 2fccab37..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- Behebung von Abstürzen bei einigen Pleroma-Instanzen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/395.txt deleted file mode 100644 index bcbbc5a5..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Fehlerbehebungen -- Ermöglicht das Teilen aus der App diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/397.txt deleted file mode 100644 index c0cc70fb..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Einige berichtete Fehler beseitigt. diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/398.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/398.txt deleted file mode 100644 index f5277033..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/398.txt +++ /dev/null @@ -1,6 +0,0 @@ -- Weiteres Verbessern des Scrollverhaltens -- Scrollen nach oben (erneute Auswahl des Tabs) holt neue Nachrichten und scrollt dann nach oben -- Fokuspunkt für die Medienvorschau entfernen -- Behebung des Problems, dass Nachrichten nicht mit einem Konto geteilt werden können -- Behebung des schwarzen Themas -- Behebung einiger Schaltflächenfarben diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/409.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/409.txt deleted file mode 100644 index 6bd771e1..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/409.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Behebung eines Problems mit dem Cache und der Home-Timeline -- Nitter-Zeitleisten verwenden die benutzerdefinierte Instanz aus den Einstellungen -- Behebung von Nitter-Problemen (nur RT) -- Ungültiges Zertifikat für Onion-URLs (Google) wird nicht mehr akzeptiert -- Behebung einiger Abstürze diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/410.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/410.txt deleted file mode 100644 index f5a7a924..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/410.txt +++ /dev/null @@ -1,4 +0,0 @@ -- Neuer Cache-Mechanismus -- Cache kann in den Einstellungen deaktiviert werden -- Hinzufügen von Zählern für neue Nachrichten -- Einige Korrekturen. diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/411.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/411.txt deleted file mode 100644 index 2737568c..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/411.txt +++ /dev/null @@ -1,3 +0,0 @@ -- Fehlerkorrektur für Beiträge die Medien enthalten -- Ladeverhalten der Thumbnails einstellen: Immer/Nur WLAN/Fragen -- Einige andere kleine Korrekturen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/412.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/412.txt deleted file mode 100644 index a21f318d..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/412.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Korrektur der Beitragsnachricht mit Medien -- Kodierungsproblem bei Medienbeschreibungen behoben -- Behebung der Friendica-Tag-Suche -- Korrekturen beim Verfassen -- Einige andere kleine Korrekturen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/413.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/413.txt deleted file mode 100644 index b354236d..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/413.txt +++ /dev/null @@ -1,10 +0,0 @@ -Neu hinzugefügt: -- Zwischenspeicher-Mechanismus (kann in den Einstellungen deaktiviert werden) -- Ladeverhalten für Vorschau einstellbar (Immer/Nur mit WLan/Fragen) -- Zähler für neue Nachrichten in Zeitleisten verfügbar -Behoben: -- Kontextmenü funktioniert nicht in Threads -- Problem bei Tag-Suche mit Friendica -- Klick auf Benachrichtigung öffnet den falschen Tab -- Kodierungsproblem bei der Beschreibung von Medien -- Einige andere Korrekturen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/414.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/414.txt deleted file mode 100644 index 4958da74..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/414.txt +++ /dev/null @@ -1,7 +0,0 @@ -Hinzugefügt: -- Zähler in den Einstellungen deaktivieren -Behoben: -- Doppelte Nachrichten aus dem Cache -- Benachrichtigungen im Doppel -- Entwürfe werden nicht automatisch entfernt -- Nachrichten werden nach Löschung nicht aus dem Cache entfernt diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/415.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/415.txt deleted file mode 100644 index 6aee6073..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/415.txt +++ /dev/null @@ -1,2 +0,0 @@ -Behoben: -- Fehler beim Anhängen von Medien an eine Antwort diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/416.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/416.txt deleted file mode 100644 index 03f03369..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/416.txt +++ /dev/null @@ -1,12 +0,0 @@ -Geändert: -- Swipe zwischen Zeitleisten -- Cache verbessern -- Schaltflächengrößen in Nachrichten folgen definierter Skala - -Behoben: -- Pleroma: Emoji-Reaktionen -- Teilen (mehrere Korrekturen) -- Theme-Probleme -- Rendering-Problem für Links -- Benachrichtigungen werden nicht aus dem Cache entfernt -- Einige Abstürze diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/417.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/417.txt deleted file mode 100644 index 14872724..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/417.txt +++ /dev/null @@ -1,15 +0,0 @@ -Geändert: -- Swipe zwischen Zeitleisten -- Cache verbessern -- Die Größe der Schaltflächen kann in den Einstellungen geändert werden -- Französische Übersetzung - -Behoben: -- Pleroma: Emoji-Reaktionen -- Teilen (mehrere Korrekturen) -- Theme-Probleme -- Rendering-Problem für Links -- Benachrichtigungen werden nicht aus dem Cache entfernt -- Problem mit Wasserzeichen -- Paginierung mit Lesezeichen/Favoriten -- Einige Abstürze diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/432.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/432.txt deleted file mode 100644 index 0a1f7695..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/432.txt +++ /dev/null @@ -1,13 +0,0 @@ -Hinzugefügt: -- Liste blockierter Domänen -- Unterstützung von Gemini Links -- Vorgeschlagene Follower - -Geändert: -- Suche nachträglich ändern - -Behoben: -- Entwürfe ohne Warnung gelöscht -- App stürzt ab mit Proxy -- Geänderte Filter nicht synchronisiert -- Einige Abstürze / Verbesserungen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/433.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/433.txt deleted file mode 100644 index 2625f26d..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/433.txt +++ /dev/null @@ -1,18 +0,0 @@ -Hinzugefügt: -- Liste blockierter Domänen -- Unterstützung von Gemini Links -- Vorgeschlagene Follower -- Mod/Admin: Geblockte Domänen der Instanz -- Nachrichten mit anderem Konto öffnen -- Deaktivieren von Benachrichtigung für Admins -- Listen sortieren - -Geändert: -- Suche nachträglich ändern - -Behoben: -- Entwürfe ohne Warnung gelöscht -- Entfernen von Listen von Zeitleisten -- App stürzt ab mit Proxy -- Geänderte Filter nicht synchronisiert -- Einige Abstürze / Verbesserungen diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/434.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/434.txt deleted file mode 100644 index 532c5a59..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/434.txt +++ /dev/null @@ -1,12 +0,0 @@ -Hinzugefügt: -- Stummschaltung von Tags durch langes Drücken in der Zeitleiste - -Geändert: -- Nachrichten von stummgeschalteten Konten werden vom Zwischenspeicher gelöscht - -Behoben: -- Öffnen mit einem anderen Konto -- Sprünge in der Zeitleiste -- Medien werden im Album nicht angezeigt -> Erzwungene Indexierung -- Eigener Browser erlaubt keinen Admin Kontext -- Einige Abstürze diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/435.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/435.txt deleted file mode 100644 index 98483747..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/435.txt +++ /dev/null @@ -1,9 +0,0 @@ -Hinzugefügt: -- Migration zu Material Design 3 -- 5 Designs (Hell, Dunkel, Solarized Hell/Dunkel, Schwarz) -- Automatischer Wechsel zwischen Hell/Dunkel -- Helles und dunkles Design mit zeitgesteuertem Wechsel -- Android 12+: Dynamische Farben - -Behoben: -- Sprünge in der Zeitleiste diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/436.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/436.txt deleted file mode 100644 index 710fbbd9..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/436.txt +++ /dev/null @@ -1,10 +0,0 @@ -Geändert: -- Integrierte Browser Unterstützung entfernt -- Mehr Platz zwischen den Aktionsschaltflächen in Nachrichten - -Behoben: -- Probleme mit der Textgröße -- Überlappende Texte -- Falscher Hintergrund für Solarized Schwarz -- Vertauschung zwischen hellem und dunklem Design -- Speichern Schaltfläche versteckt diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/455.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/455.txt deleted file mode 100644 index fa1fe51d..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/455.txt +++ /dev/null @@ -1,9 +0,0 @@ -Hinzugefügt: -- DeepL Übersetzung unterstützt Free/Pro-Tasten - -Geändert: -- Schaltflächen für Medien beim Bearbeiten ausblenden - -Behoben: -- GIFs werden als statische Bilder geladen -- Vorgeschlagene Konten können nicht verfolgt werden diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/456.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/456.txt deleted file mode 100644 index 41166966..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/456.txt +++ /dev/null @@ -1,10 +0,0 @@ -Geändert: -- Ausgeblendete Medien mit Vorschaubildern - -Behoben: -- Problem mit Medien für Android 11+ -- Absturz, wenn kein Übersetzungsschlüssel gesetzt wurde -- Behoben DeepL für API pro -- Absturz beim Besuch eines Profils mit vielen Medien -- Stummgeschaltete Konten funktionieren nicht ohne Filter -- Animierte benutzerdefinierte Emoji werden nicht angezeigt diff --git a/src/fdroid/fastlane/metadata/android/de/changelogs/457.txt b/src/fdroid/fastlane/metadata/android/de/changelogs/457.txt deleted file mode 100644 index d1e37186..00000000 --- a/src/fdroid/fastlane/metadata/android/de/changelogs/457.txt +++ /dev/null @@ -1,14 +0,0 @@ -Hinzugefügt: -- Zusätzliche Funktionen in den Einstellungen -- Anpassbare Einstellungen für zusätzliche Funktionen -- Unterstützung von Zitaten, Reaktionen mit Nachrichten -- Unterstützung von Textformaten (html, markdown, etc.) beim Verfassen - -Geändert: -- Kontextmenü bei langem Drücken eines Links -- Lesezeichen und Übersetzungsschaltflächen werden jetzt pro Konto angezeigt - -Behoben: -- CW funktioniert nicht mit Medien -- Medien werden bei älteren Instanzen nicht angezeigt -- Einige Abstürze diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/390.txt deleted file mode 100644 index 7fb6b127..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nouvelle version de Fedilab avec de nouvelles fonctionnalités. --Vous pouvez maintenant composer des fils. --Voir le fil complet pendant que vous répondez --Support du cache --Nouveau design diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/391.txt deleted file mode 100644 index 7fb6b127..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nouvelle version de Fedilab avec de nouvelles fonctionnalités. --Vous pouvez maintenant composer des fils. --Voir le fil complet pendant que vous répondez --Support du cache --Nouveau design diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/393.txt deleted file mode 100644 index 086c85a4..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ --Quelques corrections de bugs --Amélioration des fils épinglés diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/394.txt deleted file mode 100644 index 943bdf96..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ --Réparation des plantages pour les instances pleroma diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/395.txt deleted file mode 100644 index c44047b9..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Résolution de quelques bugs -- Possibilité de partager avec l'application diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/396.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/396.txt deleted file mode 100644 index f5457cee..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/396.txt +++ /dev/null @@ -1,13 +0,0 @@ -Ajouté : -- Possibilité d'ajouter un point de focalisation sur les aperçus (éditeur de média) -- Respect du point de focalisation des aperçus -- Pagination avec le support du bouton "Récupérer plus de messages" lisant vers le haut ou le bas. -- Tendances - -Réparé : -- Seule la dernière notification poussée est affichée (pas groupées) -- Mauvais comportement du défilement gauche/droit -- Longs profils pas complètement affichés -- Problèmes avec certains sondages -- Plantages -- Mauvais comportements diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/397.txt deleted file mode 100644 index 08ca99c5..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Résolutions de certains bugs signalés. diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/398.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/398.txt deleted file mode 100644 index 445e1873..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/398.txt +++ /dev/null @@ -1,6 +0,0 @@ -- Poursuite de l'amélioration du défilement -- Défiler vers le haut (re-sélection de la barre du haut) récupérera les nouveaux messages et défilera ensuite vers le haut. -- Retrait du point de focalisation pour s'adapter aux aperçus des médias. -- Réparation de l'impossibilité de partager avec un compte -- Réparation du thème sombre -- Réparation des couleurs de certains boutons diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/399.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/399.txt deleted file mode 100644 index ca1dd136..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/399.txt +++ /dev/null @@ -1,16 +0,0 @@ -Ajouté : -- Choix de langue de rédaction (menu de rédaction -> 3 points verticaux) -- Support des réactions pour Pleroma -- Indicateur vie privée en haut à droite - -Changé : -- Amélioration du défilement -- Défilement vers le haut (re-sélection d'onglet) cherchera de nouveaux messages puis défilera vers le haut - -Résolu : -- Fils d'étiquettes vides -- Retrait du point de focalisation pour s'adapter aux miniatures -- Partage avec un compte -- Thème sombre -- Choix du thème -- Couleurs de certains boutons diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/400.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/400.txt deleted file mode 100644 index 3145fdcf..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/400.txt +++ /dev/null @@ -1,9 +0,0 @@ -Ajouté : -- Possibilité de définir le nombre de caractère maximum quand il n'est pas détecté (dans à propos de l'instance) -- Ajout du sélecteur d’émoji one lors de la rédaction (doit être activé dans les paramètres) -- Ajout des notes de changement de version et la possibilité de les traduire - -Résolu : -- Emojis personnalisé de Friendica non-affichés -- Appui long pour stocker les médias -- Quelques corrections de bugs diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/401.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/401.txt deleted file mode 100644 index 0b56f8ae..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/401.txt +++ /dev/null @@ -1,11 +0,0 @@ -Changé : -- La composition des message n'est plus soumise aux caractères maximum - -Résolu : -- Suivi entre comptes -- Impossibilité de s'abonner aux notifications pour un compte -- Problèmes de partage -- Mauvais profil pour les réactions en émoji dans les notifications -- Problèmes de cartes -- Plantages avec les onglets -- Onglets non-re-nommables diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/402.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/402.txt deleted file mode 100644 index b6076f9b..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/402.txt +++ /dev/null @@ -1,15 +0,0 @@ -Ajouté : -- Nouveau thème : Dark Elephant de S1m -- Messages d'erreur du serveur lorsque la publication échoue -- Choix du délai de récupération pour les notifications différées - -Changé : -- Boutons "Charger plus de messages" plus visibles - -Résolu : -- Problème lors de la récupération de messages manquants -- Quelques problèmes avec les thèmes -- Trop d'espace perdu avec les réactions (Pleroma) -- Plantages de Supprimer & Réécrire -- Plantage lors du visionnage d'une vidéo -- Autres plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/405.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/405.txt deleted file mode 100644 index 9c936106..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/405.txt +++ /dev/null @@ -1,20 +0,0 @@ -Ajouté : -- Exporter paramètres -- Réorganisation des listes propagée aux sous-menus "Listes" -- Choix distributeur de notifications - -Changé : -- Meilleure adaptation des aperçus -- Amélioration notifications -- Médias de profil en grille - -Résolu : -- Fonctionnement de certaines vidéos Peertube -- Visibilité par défaut du compte lors d'une réponse -- Distinction gif/images -- Plantage sur le fil d'une autre instance -- "Supprimer" du compositeur de fils fait planter l'appli -- "Retour" ouvre trop de vieilles activités avant de fermer l'appli -- Problèmes de partage -- Réorganisation des Listes avec problèmes d'IU en changeant la visibilité -- Liens depuis Friendica pas affichés correctement diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/407.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/407.txt deleted file mode 100644 index 21064a3a..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/407.txt +++ /dev/null @@ -1,9 +0,0 @@ -Ajouté : -- Paramètre pour mettre tous les fils en haut (désactivé par défaut) -- Paramètre pour afficher les fils en listes (désactivé par défaut) -- Affichage de compteurs pour favoris/reblog dans les fils (désactivé par défaut) - -Résolu : -- Problème de visibilité lors des réponses -- Problèmes de thème lors de la rédaction -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/408.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/408.txt deleted file mode 100644 index bf0a68e5..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/408.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Amélioration de la vitesse de chargement pour les instances Nitter -- Possibilité d'éditer les comptes Nitter avec un appui long sur les onglets -- Résolution des problèmes de pagination sur les fils épinglés -- Réparation de quelques plantages -- Résolution de la visibilité lors de l'affichage des compteurs diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/409.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/409.txt deleted file mode 100644 index 7b9415f7..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/409.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Résolution d'un problème du fil principal avec le cache -- Les fils Nitter utilisent l'instance personnalisée depuis les paramètres -- Résolution de problèmes Nitter (RT seulement) -- N'accepte plus les certificats invalides des URLs onion (Google) -- Résolution de quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/410.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/410.txt deleted file mode 100644 index 85255ae9..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/410.txt +++ /dev/null @@ -1,4 +0,0 @@ -- Nouveau mécanisme de cache -- Le cache peut être désactivé dans les paramètres -- Ajout de compteurs pour les nouveaux messages -- Quelques réparations. diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/411.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/411.txt deleted file mode 100644 index ff25d724..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/411.txt +++ /dev/null @@ -1,3 +0,0 @@ -- Réparation de la publication de message avec média -- Choix du chargement des miniatures Toujours/Wifi uniquement/Sur demande -- Quelques autres petites réparations diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/412.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/412.txt deleted file mode 100644 index 7a03e7fd..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/412.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Réparation de la publication de message avec média -- Résolution du problème d'encodage avec les descriptions de médias -- Réparation de la recherche d'étiquettes Friendica -- Réparation de la rédaction -- D'autres petites réparations diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/413.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/413.txt deleted file mode 100644 index 5f5f176f..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/413.txt +++ /dev/null @@ -1,10 +0,0 @@ -Ajouté : -- Réparation de la publication de message avec média -- Choix du chargement des miniatures Toujours/Wifi uniquement/Sur demande -- Ajout de compteurs pour les nouveaux messages de fils -Résolu : -- Menu contextuel des fils ne fonctionne pas -- Problème de recherche d'étiquettes avec Friendica -- Le clique sur les notifications ouvre le mauvais onglet -- Problème d'encodage avec les descriptions de médias -- D'autres réparations. diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/414.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/414.txt deleted file mode 100644 index a2a60f31..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/414.txt +++ /dev/null @@ -1,7 +0,0 @@ -Ajouté : -- Désactiver les compteurs dans les paramètres -Résolu : -- Messages dupliqués depuis le cache -- Notifications en double -- Brouillons pas automatiquement supprimés -- Message pas retirés du cache après suppression diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/415.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/415.txt deleted file mode 100644 index 25f34525..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/415.txt +++ /dev/null @@ -1,2 +0,0 @@ -Résolu : -- Ajout d'un média à une réponse diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/416.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/416.txt deleted file mode 100644 index c8bc9b56..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/416.txt +++ /dev/null @@ -1,12 +0,0 @@ -Changé : -- Défilement entre les fils -- Amélioration du cache -- La taille des boutons dans les messages suit l'échelle définie - -Résolu : -- Pleroma : Réactions émoji -- Partage (plusieurs résolutions) -- Problèmes de thème -- Problème de rendu avec les liens -- Notifications non-enlevées du cache -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/417.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/417.txt deleted file mode 100644 index 26a55715..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/417.txt +++ /dev/null @@ -1,15 +0,0 @@ -Changé : -- Défilement entre les fils -- Amélioration du cache -- La taille des boutons peut être changée dans les paramètres -- Traduction en français - -Résolu : -- Pleroma : Réactions émoji -- Partage (plusieurs résolutions) -- Problèmes de thème -- Problème de rendu avec les liens -- Notifications non-enlevées du cache -- Problèmes avec les filigranes -- Pagination avec les marque-pages/favoris -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/418.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/418.txt deleted file mode 100644 index 55766196..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/418.txt +++ /dev/null @@ -1,15 +0,0 @@ -Ajouté : -- Changement de l'icône d'application (Paramètres>Interface) -- Dés/activer "Se souvenir de la position" dans les fils -- Dés/activer l’agrégation de notifications dans les paramètres - -Changé : -- Dés/activer les media dans les notifications - -Résolu : -- Publication perdant le "spoiler message" en ajoutant un média. -- Caméra ne fonctionnant pas sur Android 11 -- Agrégation de notifications -- Vibrations lors de la récupération de nouvelles notifications -- Fils média -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/419.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/419.txt deleted file mode 100644 index 044c21b3..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/419.txt +++ /dev/null @@ -1,11 +0,0 @@ -Ajouté : -- Dés/épingler les messages -- Choisir la langue par défaut pour les traductions - -Changé : -- Permettre de dés/activer les médias pour les notifications - -Résolu : -- Mauvaises images dans les fils de notification -- Bug de double icône -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/420.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/420.txt deleted file mode 100644 index 2e861ea4..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/420.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Edition des messages (si votre instance supporte cette fonctionnalité) -- Quelques résolutions diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/421.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/421.txt deleted file mode 100644 index 9fbe27ea..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/421.txt +++ /dev/null @@ -1,22 +0,0 @@ -Ajouté : -- Édition de messages (si supporté par l'instance) -- Épingler des messages -- Langage de traduction par défaut -- Choix d'icône de l'application -- Fonction "se souvenir de la position" dans les fils -- Fonction agrégation de notifications -- Icône sur miniatures s'il y a une description - -Changé : -- Dés/activer les média pour les notifications - -Résolu : -- "Spoiler message" perdu à l'ajout d'un média -- Caméra sur Android 11 -- Agrégation de notifications -- Vibration quand récupérations de notifications -- Fils de médias -- Problèmes de thème -- Navigateur intégré & openId -- Fils d'Art -- Plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt deleted file mode 100644 index cbee41f3..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt +++ /dev/null @@ -1,13 +0,0 @@ -Ajouté : -- Affichage du client dans les messages détaillés -- Support du visuel pour les citations commençant par ">" -- Augmentation de l'indentation des fils (zéro à 20, défaut 5) -- Visibilité des réponses publiques définies comme non-listée (peut être désactivé) - -Changé : -- Réduction de la taille du titre quand le texte est agrandi. - -Résolu : -- Filtres non-appliqués -- Bloquer un compte ne retire pas les messages du cache -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/423.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/423.txt deleted file mode 100644 index b444bc5f..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/423.txt +++ /dev/null @@ -1,5 +0,0 @@ -Résolu : -- Ordre des notifications -- URL lors du partage des messages boostés -- Pages vides au redémarrage -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/424.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/424.txt deleted file mode 100644 index 4195f4e3..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/424.txt +++ /dev/null @@ -1,4 +0,0 @@ -Résolu : -- Problèmes avec des messages/notifications affichés incorrectement -- Friendica : problèmes avec les mentions et étiquettes (ouvrir le navigateur) -- Amélioration du partage diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/425.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/425.txt deleted file mode 100644 index 16d47e47..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/425.txt +++ /dev/null @@ -1,9 +0,0 @@ -Changé : -- Les étiquettes sont classés par ordre de popularité dans la recherche - -Résolu : -- Impossible d'obtenir l'ID du client sur certains appareils -- Les messages/notifications n'étaient pas affichés correctement -- Notifications non-reçues -- Friendica : problèmes avec les mentions et les étiquettes (ouvre le navigateur) -- Amélioration du partage diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/426.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/426.txt deleted file mode 100644 index 99118e17..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/426.txt +++ /dev/null @@ -1,9 +0,0 @@ -Ajouté : -- 2 nouveaux thèmes clairs -- Fonctionnalités de modération - -Résolu : -- Filtres non-fonctionnels -- Plantages avec les tendances -- Contenu effacé lors de l'envoi de messages (mentions) -- Autres corrections de bugs diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt deleted file mode 100644 index aa5815fc..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt +++ /dev/null @@ -1,16 +0,0 @@ -Ajouté : -- Suivi des balises (entrée dédiée dans le menu) -- Réduction de la liste des langues lors de la rédaction (Paramètres > Composer) -- Indicateur de langue lors de la rédaction -- Les réponses sont automatiquement définies sur la langue du premier message -- Deux nouveaux thèmes de jour -- Plus de fonctionnalités de modération -- Le nom de la liste peut être modifié - -Résolu : -- Le filtre ne fonctionne pas -- Plantage avec les tendances -- Problème avec les thèmes -- Certains contenus perdus lors de l'envoi de messages (mentions) -- Correction des blocages dans les fils chronologiques -- Quelques autres correctifs diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt deleted file mode 100644 index 67ef5929..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt +++ /dev/null @@ -1,14 +0,0 @@ -Ajouté : -- Prise en charge des liens ouverts contenant /@display_name/ dans leur chemin (fonctionne sur les appareils plus anciens) -- Afficher le nombre de réponses lorsque les compteurs sont activés -- Ajout de la prise en charge du filtrage des messages de profil - -Modifié : -- La vue Composer prend toute la largeur même dans les fils -- Réinitialiser le marqueur de notification push lors de la suppression du cache - -Résolu : -- Brouillon stocké lors de la réponse "non" ou l'invite de dialogue sans modifications -- Les filtres ne fonctionnent pas avec les balises -- Ajout d'un message d'erreur spécifique pour les balises suivies -- Pages vides au démarrage de l'application diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/429.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/429.txt deleted file mode 100644 index d2b8e7cc..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/429.txt +++ /dev/null @@ -1,2 +0,0 @@ -Ajouté : -- Support complet des nouveaux filtres de Mastodon 4 diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/430.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/430.txt deleted file mode 100644 index 8b4526a0..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/430.txt +++ /dev/null @@ -1,5 +0,0 @@ -Ajouté : -- Visiter les profils sans être authentifié / Autoriser l'affichage de tous leurs messages - -Corrigé : -- L'enregistrement des médias échoue sur certains appareils diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt deleted file mode 100644 index 48c0eba4..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt +++ /dev/null @@ -1,14 +0,0 @@ -Ajouté : -- Prise en charge complète des nouveaux filtres pour Mastodon 4 -- Visiter les profils sans être authentifié / Autoriser l'affichage de tous leurs messages - -Modifié : -- La vue Composer prend toute la largeur même dans les fils -- Les comptes peuvent être mis en sourdine à partir de leur profil - -Résolu : -- Brouillon stocké lors de la réponse "non" ou de l'invite de dialogue sans modifications -- Pages vides au démarrage de l'application -- L'enregistrement et le partage de médias échouent sur certains appareils -- Ajout de la prise en charge des notifications d'administration -- Copier le contenu d'un message diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt deleted file mode 100644 index dc57b737..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt +++ /dev/null @@ -1,13 +0,0 @@ -Ajouté : -- Liste des domaines bloqués (permet de débloquer) -- Prise en charge des liens gemini -- Suggestion de Suiveurs - -Modifié : -- Autoriser la modification du terme de recherche - -Fixé : -- Brouillons supprimés sans avertissement -- L'application plante lorsque le proxy est défini -- Filtre non synchronisé après avoir été modifié -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt deleted file mode 100644 index ea7a195e..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt +++ /dev/null @@ -1,18 +0,0 @@ -Ajouté : -- Liste des domaines bloqués (permet de débloquer) -- Prise en charge des liens gemini -- Suiveurs suggérés -- Mod/Adm : gérer les domaines bloqués par l'instance -- Ouvrir des messages avec un autre compte -- Autoriser à désactiver les notifications pour les administrateurs -- Trier les listes - -Modifié : -- Autoriser la modification du terme de recherche - -Fixé : -- Brouillons supprimés sans avertissement -- Supprimer les listes de "Gérer les chronologies" -- L'application plante lorsque le proxy est défini -- Filtre non synchronisé après avoir été modifié -- Quelques plantages / améliorations diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt deleted file mode 100644 index ebd1a365..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt +++ /dev/null @@ -1,12 +0,0 @@ -Ajouté : -- Silencer les tags par un appui long dans les timelines - -Changé : -- Les messages de comptes silencés sont à présent retirés du cache - -Résolu : -- Ouvrir avec un autre compte -- Correction des sauts dans les profils -- Médias non-affichés dans les albums → Force l'indexation -- Le navigateur web intégré n'affiche pas le niveau admin -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/435.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/435.txt deleted file mode 100644 index 3bb919fa..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/435.txt +++ /dev/null @@ -1,9 +0,0 @@ -Ajouté : -- Migration vers Material Design 3 -- 5 thèmes (Clair, Sombre, Solarized Clair/Sombre, Noir) -- Basculement automatique entre Clair/Sombre -- Les thèmes Clair et Sombre peuvent être définis en fonction de l'heure -- Android 12+ : Couleur dynamique - -Résolu : -- Sauts dans les timelines diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt deleted file mode 100644 index 0b79d1a1..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt +++ /dev/null @@ -1,10 +0,0 @@ -Changé : -- Retrait du support du navigateur web intégré -- Plus d'espace entre les boutons d'action des messages - -Résolu : -- Problème de taille du texte -- Chevauchement de texte -- Mauvais fond pour le thème Solarized Sombre -- Mélange entre les thèmes Clair et Sombre -- Bouton de sauvegarde caché diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt deleted file mode 100644 index a52173cf..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt +++ /dev/null @@ -1,14 +0,0 @@ -Ajouté : -- Nouvelle apparence avec 5 thèmes - -Changé : -- Retrait du support du navigateur web intégré -- Ajuster l'image d'aperçu affiche l'image verticalement -- Ajout des compteurs à côté des images - -Résolu : -- Saut dans les timelines -- Réponses aux mauvais messages avec les instances suivies -- Bogue avec Supprimer & Réécrire avec un média -- Liste ne peut pas être caché -- Quelques plantages diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/439.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/439.txt deleted file mode 100644 index a3c7a41a..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/439.txt +++ /dev/null @@ -1,6 +0,0 @@ -Changé : -- Retrait de la carte de présentation -- Couleur des liens pour le thème Sombre - -Résolu : -- Crash lors du changement de thème diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/440.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/440.txt deleted file mode 100644 index 8f8e037f..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/440.txt +++ /dev/null @@ -1,4 +0,0 @@ -Résolu : -- Les émojis personnalisés ne sont pas toujours affichés -- Sauts dans les timelines quand "ajuster les images" est utilisé -- Thème sombre : boutons de timeline sans toggle diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/441.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/441.txt deleted file mode 100644 index 98e706e9..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/441.txt +++ /dev/null @@ -1,3 +0,0 @@ -Résolu : -- Sauts lors du défilement avec ajustement des images -- Bouton de récupération cassé avec le cache diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt deleted file mode 100644 index 6a39fa3c..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt +++ /dev/null @@ -1,11 +0,0 @@ -Ajouté : -- Thème Dracula - -Changé : -- Couleurs des thèmes Clair/Sombre/Noir - -Résolu : -- Images animés de profils non-affichées -- Mentions cassées dans les descriptions et champs de profil -- Les modèles de balises dans les URL cassent les liens -- Faute de frappe dans les tags suivis diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt deleted file mode 100644 index 630212db..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt +++ /dev/null @@ -1,16 +0,0 @@ -Ajouté : -- Thème Dracula -- Couleurs de messages personnalisées -- Activer/Désactiver les cartes de présentation - -Changé : -- Couleurs pour certains thèmes -- Espaces entre les boutons - -Résolu : -- Images animés sur les profils non-affichées -- Mentions cassées dans les descriptions et champs de profil -- Sauts lors du défilement avec les ajustements de miniatures -- Bouton de récupération cassé avec le cache -- Les modèles de balises dans les URL cassent les liens -- Faute de frappe dans les tags suivis diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/444.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/444.txt deleted file mode 100644 index 721466b6..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/444.txt +++ /dev/null @@ -1,4 +0,0 @@ -Ajouté : -- Afficher tous les messages d'une enfilade depuis l'instance distante (si possible) -* Seulement pour les messages publiques des instances utilisant l'API Mastodon -* Un bouton dédié est affiché en haut à droite quand les conditions sont remplies. diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt deleted file mode 100644 index 2d928b11..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt +++ /dev/null @@ -1,11 +0,0 @@ -Ajouté : -- Permettre de rétablir/ne plus suivre/désépingler une étiquette depuis les timelines des étiquettes -- Automatiquement ajouter l'étiquette quand on écrit depuis une timeline d'étiquette -- Ajout d'un bouton de traduction en bas des messages (par défaut : désactivé) -- Ajout des rôles de comptes dans les profils - -Résolu : -- Contact impossible quand on écrit -- Barre de status pour le thème Noir -- Message dupliqué dans les conversations lorsque édité -- Problème de couleur sur Android 5 diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/446.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/446.txt deleted file mode 100644 index 7738f6bf..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/446.txt +++ /dev/null @@ -1,18 +0,0 @@ -Ajouté : -- Afficher tout les messages des fils d'instances distantes (si possible) -- Possibilité de ne plus suivre/silencer/épingler un tag de la timeline des tags -- Affiche les comptes les plus utilisés dans l'en-tête du menu pour un changement rapide -- Ajoute automatiquement le tag lorsque l'on poste depuis la timeline des tags -- Ajoute un bouton traduire en bas des messages (désactivé par défaut) -- Ajoute des rôles de comptes dans les profils -- Traduction du morse - -Modifié : -- Désactive les animations après une actualisation - -Réparé : -- Le contact ne marche pas lors de la rédaction d'un post -- Barre de statut pour le thème noir -- Message copié dans les conversations lorsqu'il est édité -- Problèmes de couleurs avec Android 5 -- Plusieurs crashes diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/447.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/447.txt deleted file mode 100644 index 41473dc8..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/447.txt +++ /dev/null @@ -1,4 +0,0 @@ -Ajouté : -- Silencer/désilencer les comptes dans la timeline accueil depuis leurs messages ou leurs profils -- Ajouter tout les utilisateurs d'une liste à "Silencer sur l'accueil" en un clic -- Afficher/gérer les utilisateurs silencés sur l'accueil diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/448.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/448.txt deleted file mode 100644 index fd5cf639..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/448.txt +++ /dev/null @@ -1,7 +0,0 @@ -Ajouté : -- Silencer/désilencer les comptes dans la timeline accueil depuis leurs messages ou leurs profils -- Ajouter tout les utilisateurs d'une liste à "Silencer sur l'accueil" en un clic -- Afficher/gérer les utilisateurs silencés sur l'accueil - -Réparé : -- Crashs de la timeline diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/449.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/449.txt deleted file mode 100644 index 7f3a7882..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/449.txt +++ /dev/null @@ -1,9 +0,0 @@ -Ajouté : -- Ajoute plus de langues cibles dans picker pour les traductions -- Ajoute le nom du compte dans les notifications push - -Réparé : -- Répare le crash lors du changement de langue -- Répare les contre couleurs -- Répare la couleur de lien par défaut -- Répare le crash lorsque l'on clique sur les mentions diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/450.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/450.txt deleted file mode 100644 index c497861d..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/450.txt +++ /dev/null @@ -1,12 +0,0 @@ -Ajouté : -- Fonctionnalité d'importation/exportation des données complète -- Support des icônes du thème Android 13 - -Réparé : -- Répare une régression avec les filtres -- Répare le thème solarisé sombre -- Répare le lien de prévisualisation pour les CW -- Répare la couleur de la barre de statut pour tout les thèmes -- Réparer la langue dans la rédaction "..." -- Répare ajouter tout les comptes silencés dans l'accueil à partir de listes -- Répare les badges des top notofications diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/451.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/451.txt deleted file mode 100644 index e2edaeec..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/451.txt +++ /dev/null @@ -1,12 +0,0 @@ -Ajouté : -- Poster des citations aléatoires -- Re-blog de groupe dans la timeline d'accueil - -Modifié : -- Affiche le bouton traduire seulement lorsque la langue est différente -- Respecte les espaces blancs entre les mots dans les messages -- Le bouton focus est plus accessible lorsque l'on édite un média - -Réparé : -- Comportement avec le bouton cw -- Lien gemini tronqués diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/452.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/452.txt deleted file mode 100644 index 62b4d307..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/452.txt +++ /dev/null @@ -1,16 +0,0 @@ -Ajouté : -- Renommer les timeline Nitter -- Support d'Android 13 - -Modifié : -- Feedback visuel pour bloquer sur la liste de comptes -- Changements visuels avec la barre écrire/favori - -Réparé : -- Bouton nav non visible avec les média (thème clair) -- Barre de statut avec Android 5 -- Répare les liens non cliquables -- Répare les liens profonds -- Répare les fils distants non importés depuis certaines instances -- Ajoute les descriptions aux médias partagés -- Répare des crashs diff --git a/src/fdroid/fastlane/metadata/android/fr/changelogs/453.txt b/src/fdroid/fastlane/metadata/android/fr/changelogs/453.txt deleted file mode 100644 index d7728801..00000000 --- a/src/fdroid/fastlane/metadata/android/fr/changelogs/453.txt +++ /dev/null @@ -1,8 +0,0 @@ -Ajoute : -- La pagination avec recherche / tendance - -Réparé : -- Appuyer longtemps sur les onglets Nitter -- Ouvrir avec d'autres comptes -- Taille de caractères non respectée pour Android 5-6 -- Mauvaise instance importée depuis instances.social diff --git a/src/fdroid/fastlane/metadata/android/gl/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/gl/changelogs/390.txt deleted file mode 100644 index d810d33a..00000000 --- a/src/fdroid/fastlane/metadata/android/gl/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nova versión de Fedilab con novas funcións. -- Agora podes escribir fíos -- Ver o fío completo ao responder -- Soporte para caché -- Novo deseño diff --git a/src/fdroid/fastlane/metadata/android/ja/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/ja/changelogs/390.txt deleted file mode 100644 index daee8142..00000000 --- a/src/fdroid/fastlane/metadata/android/ja/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -新バージョンのFedilabの新機能 -- スレッドを作成できます -- 返信時にスレッド全体を確認できます -- キャッシュのサポート -- 新しいデザイン diff --git a/src/fdroid/fastlane/metadata/android/ja/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/ja/changelogs/391.txt deleted file mode 100644 index daee8142..00000000 --- a/src/fdroid/fastlane/metadata/android/ja/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -新バージョンのFedilabの新機能 -- スレッドを作成できます -- 返信時にスレッド全体を確認できます -- キャッシュのサポート -- 新しいデザイン diff --git a/src/fdroid/fastlane/metadata/android/ja/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/ja/changelogs/393.txt deleted file mode 100644 index 8cd8b494..00000000 --- a/src/fdroid/fastlane/metadata/android/ja/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- バグ修正 -- ピン留めされたタイムラインの改善 diff --git a/src/fdroid/fastlane/metadata/android/ja/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/ja/changelogs/394.txt deleted file mode 100644 index 2035ba22..00000000 --- a/src/fdroid/fastlane/metadata/android/ja/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- 一部のPleromaインスタンスでクラッシュする問題の修正 diff --git a/src/fdroid/fastlane/metadata/android/ja/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/ja/changelogs/395.txt deleted file mode 100644 index 669f0094..00000000 --- a/src/fdroid/fastlane/metadata/android/ja/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- バグの修正 -- Fedilabに共有できるように diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/390.txt deleted file mode 100644 index e5ce13b8..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Nova versão do Fedilab com nova funcionalidade. -- Agora é possível compor threads -- Vê o thread completo ao responder -- Suporte de cache -- Novo design diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/393.txt deleted file mode 100644 index 88a074ca..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/393.txt +++ /dev/null @@ -1,3 +0,0 @@ -- Algumas correcções de bugs - -- Melhorar as linhas de tempo fixadas diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/394.txt deleted file mode 100644 index a833e934..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -‐ Correcção de crashes para algumas instâncias do pleroma diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/395.txt deleted file mode 100644 index e7fc7bca..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Corrigidos alguns bugs -- Permite compartilhar com o aplicativo diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt deleted file mode 100644 index 7bf813f6..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt +++ /dev/null @@ -1,13 +0,0 @@ -Adicionado: -- Permite definir um ponto de foco em nas prévias (editor de mídia) -- Respeite o ponto de foco com prévias -- Paginação com o suporte ao botão buscar mais leitura para cima ou para baixo -- Adicionar tendências - -Fixo: -- Somente a última notificação por push é exibida (não agrupada) -- Mau comportamento com a rolagem direita/esquerda -- Corrigir perfis longos não totalmente exibidos -- Problemas com algumas enquetes -- Algumas falhas -- Alguns maus comportamentos diff --git a/src/fdroid/fastlane/metadata/android/pt/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/pt/changelogs/397.txt deleted file mode 100644 index fbdf14da..00000000 --- a/src/fdroid/fastlane/metadata/android/pt/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Corrigidos alguns bugs relatados. diff --git a/src/fdroid/fastlane/metadata/android/sc/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/sc/changelogs/390.txt deleted file mode 100644 index dd5f0974..00000000 --- a/src/fdroid/fastlane/metadata/android/sc/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Versione noa de Fedilab cun funtzionalidades noas. -- Como podes cumpònnere discussiones -- Pòmpia sa discussione intrea cando ses rispondende -- Suportu pro sa memòria temporànea -- Aspetu nou diff --git a/src/fdroid/fastlane/metadata/android/sc/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/sc/changelogs/391.txt deleted file mode 100644 index dd5f0974..00000000 --- a/src/fdroid/fastlane/metadata/android/sc/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Versione noa de Fedilab cun funtzionalidades noas. -- Como podes cumpònnere discussiones -- Pòmpia sa discussione intrea cando ses rispondende -- Suportu pro sa memòria temporànea -- Aspetu nou diff --git a/src/fdroid/fastlane/metadata/android/sc/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/sc/changelogs/393.txt deleted file mode 100644 index 15fe2303..00000000 --- a/src/fdroid/fastlane/metadata/android/sc/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Unos cantos acontzos de errores -- Megioramentu de sas lìnias de tempus apicadas diff --git a/src/fdroid/fastlane/metadata/android/sc/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/sc/changelogs/394.txt deleted file mode 100644 index f8cf156f..00000000 --- a/src/fdroid/fastlane/metadata/android/sc/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- Risoltu su problema de sas serraduras improvisas pro unas cantas istàntzias de pleroma diff --git a/src/fdroid/fastlane/metadata/android/sc/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/sc/changelogs/395.txt deleted file mode 100644 index ee89de59..00000000 --- a/src/fdroid/fastlane/metadata/android/sc/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Acontzu de unas cantas faddinas in su còdighe -- Permissu pro cumpartzire cun s'aplicatzione diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/390.txt deleted file mode 100644 index 0470b30c..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Fedilab'ın yeni özelliklere sahip yeni sürümü. -- Artık mesaj dizileri oluşturabilirsiniz -- Yanıt verirken tüm mesaj dizisini görün -- Önbellek desteği -- Yeni tasarım diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/391.txt deleted file mode 100644 index 0470b30c..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Fedilab'ın yeni özelliklere sahip yeni sürümü. -- Artık mesaj dizileri oluşturabilirsiniz -- Yanıt verirken tüm mesaj dizisini görün -- Önbellek desteği -- Yeni tasarım diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/393.txt deleted file mode 100644 index 0bed0628..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Birkaç hata düzeltmesi -- Sabitlenmiş zaman çizelgeleri iyileştirildi diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/394.txt deleted file mode 100644 index f7de23fc..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- Bazı pleroma örnekleri için çökmeler düzeltildi diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/395.txt deleted file mode 100644 index 7dc9f16a..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Birkaç hata düzeltmesi -- Uygulama ile paylaşmaya izin ver diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/396.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/396.txt deleted file mode 100644 index 5209cfd1..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/396.txt +++ /dev/null @@ -1,13 +0,0 @@ -Eklendi: -- Ön izlemelerde bir odak noktası ayarlamaya izin ver (medya düzenleyici) -- Ön izlemelerle odak noktasını dikkate al -- Daha fazla getir düğmesi ile sayfalandırma, yukarı veya aşağı okumayı destekler -- Trendler - -Düzeltildi: -- Yalnızca son anlık bildirimin görüntülenmesi (gruplandırılmamış) -- Sağa/sola kaydırma ile ilgili hatalı davranış -- Tam olarak görüntülenmeyen uzun profiller -- Bazı anketlerle ilgili sorunlar -- Bazı çökmeler -- Bazı hatalı davranışlar diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/397.txt deleted file mode 100644 index ed38ba3b..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Bildirilen bazı hatalar düzeltildi. diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/398.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/398.txt deleted file mode 100644 index a69f593d..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/398.txt +++ /dev/null @@ -1,6 +0,0 @@ -- Kaydırma davranışının iyileştirilmesine devam edildi -- En üste kaydırma (sekme yeniden seçimi) yeni mesajları getirir ve ardından en üste kaydırır -- Sığdırma medya ön izlemesi için odak noktasını kaldır -- Tek bir hesapla paylaşılamaması düzeltildi -- Siyah tema düzeltildi -- Bazı düğme renkleri düzeltildi diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/399.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/399.txt deleted file mode 100644 index 9789a678..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/399.txt +++ /dev/null @@ -1,16 +0,0 @@ -Eklenenler: -- Oluşturma dilini ayarla (oluşturma menüsünden -> üç dikey nokta) -- Pleroma için etkileşim desteği -- Sağ üst kısma gizlilik göstergesi - -Değişenler: -- Kaydırma davranışı iyileştirildi -- En üste kaydırma (sekme yeniden seçimi) yeni mesajları getirir ve ardından en üste kaydırır - -Düzeltilenler: -- Boş etiket zaman çizelgeleri -- Sığdırma medya ön izlemesi için odak noktasını kaldır -- Tek bir hesapla paylaşılamaması -- Siyah tema -- Temanın seçilememesi -- Bazı düğme renkleri diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/400.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/400.txt deleted file mode 100644 index 6777e21d..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/400.txt +++ /dev/null @@ -1,9 +0,0 @@ -Eklendi: -- Algılanmadığında azami karakter sayısını tanımlamaya izin ver (Sunucu hakkında kısmında) -- Oluştururken bir emoji seçici ekle (ayarlarda etkinleştirilmelidir) -- Sürüm notlarını çevirme özelliğiyle birlikte ekle - -Düzeltildi: -- Friendica özel emojilerinin görüntülenmemesi -- Medyayı kaydetmek için uzun basma -- Bazı hata düzeltmeleri diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/401.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/401.txt deleted file mode 100644 index 98c97935..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/401.txt +++ /dev/null @@ -1,11 +0,0 @@ -Değiştirildi: -- Mesaj oluşturma artık azami karakter sayısına zorlanmıyor - -Düzeltildi: -- Hesaplar arası takip -- Bir hesap için bildirimlere abone olunamaması -- Paylaşım sırasında karşılaşılan sorunlar -- Bildirimlerdeki emoji tepkileri için yanlış profil -- Kartlarla ilgili sorun -- Sekmelerin çökmesi -- Sekmelerin yeniden adlandırılamaması diff --git a/src/fdroid/fastlane/metadata/android/tr/changelogs/402.txt b/src/fdroid/fastlane/metadata/android/tr/changelogs/402.txt deleted file mode 100644 index f431a408..00000000 --- a/src/fdroid/fastlane/metadata/android/tr/changelogs/402.txt +++ /dev/null @@ -1,15 +0,0 @@ -Eklenen: -- Yeni tema: S1m'den Dark Elephant -- Gönderim başarısız olduğunda sunucu tarafından gelen hata mesajları -- Gecikmeli bildirimler için getirme süresini ayarlamaya izin verildi - -Güncellenen: -- Bir çok buton daha görünür hale getirildi - -Düzeltilen: -- Eksik mesajlar alınırken oluşan problem -- Temalarla ilgili bazı sorunlar -- Reaksiyonla çok fazla alan kaybı (Pleroma) -- Çalışma esnasındaki hatalar kaldırıldı ve yeniden düzenlendi -- Video oynatırken oluşan hata -- Diğer hata düzeltmeleri diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/395.txt deleted file mode 100644 index 1eab41d8..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Виправлено деякі помилки -- Дозволити поділитися зі застосунком diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/405.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/405.txt deleted file mode 100644 index a6c1f4e7..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/405.txt +++ /dev/null @@ -1,20 +0,0 @@ -Додано: -- Налаштування експорту -- Поширення ручного переупорядкування списків на шкалі часу в підменю "Списки" -- Дозволено змінювати розподільник push-розсилок у налаштуваннях - -Виправлено: -- Покращено попередній перегляд зображень -- Покращено сповіщення -- Медіа профілю відображаються у сітці - -Виправлено: -- Не працюють деякі відео з Peertube -- Поважати обліковий запис видимості за замовчуванням під час відповіді -- Відрізняти gif від зображень -- Застосунок аварійно завершує роботу під час відкриття зовнішнього екземпляра на шкалі часу -- Кнопка "Видалити" у композиторі потоку призводить до аварійного завершення роботи програми -- Кнопка "Назад" відкриває багато старих активностей перед закриттям застосунку -- Проблеми зі спільним доступом -- Переупорядкування списків з проблемою інтерфейсу при зміні видимості -- Посилання неправильно відображається у повідомленнях з Friendica diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/418.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/418.txt deleted file mode 100644 index de00df24..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/418.txt +++ /dev/null @@ -1,15 +0,0 @@ -Додано: -- Зміна іконки застосунку (Налаштування > Інтерфейс) -- Дозволено відключати "запам'ятовувати позицію" в хронологіях -- Дозволено відключати агрегацію сповіщень у налаштуваннях - -Змінено: -- Дозволено вимикати/вмикати медіа для сповіщень - -Виправлено: -- Допис втрачав "спойлер" при додаванні медіа -- Камера не працює на Android 11 -- Агрегація сповіщень -- Вібрація при отриманні нових сповіщень -- Виправлено проблему з хронологією медіа -- Деякі збої в роботі diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/421.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/421.txt deleted file mode 100644 index 0c2ca28b..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/421.txt +++ /dev/null @@ -1,22 +0,0 @@ -Додано: -- Редагування повідомлень (якщо ваш екземпляр підтримує цю функцію) -- Закріплення/відкріплення повідомлень -- Встановлення мови за замовчуванням для перекладів -- Зміна іконки застосунку (Налаштування > Інтерфейс) -- Дозволити вимкнути "запам'ятовувати позицію" на часових шкалах -- Дозволити вимкнути агрегацію сповіщень у налаштуваннях -- Іконка на прев'ю медіа за наявності опису - -Змінено: -- Дозволено вимикати/вмикати медіа для сповіщень - -Виправлено: -- Допис втрачав "спойлер" при додаванні медіа -- Камера не працює на Android 11 -- Агрегація сповіщень -- Вібрація при отриманні нових сповіщень -- Виправлено проблему зі шкалою часу для медіа -- Виправлено деякі проблеми з темами -- Вирішено проблему з вбудованим браузером та openId -- Погана поведінка з Хронологією Артів -- Деякі збої diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/422.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/422.txt deleted file mode 100644 index 76ca33fe..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/422.txt +++ /dev/null @@ -1,13 +0,0 @@ -Додано: -- Відображення клієнта в детальних повідомленнях -- Візуальна підтримка лапок, що починаються з ">" -- Збільшення відступів для потоків (від нуля до 20, за замовчуванням 5) -- Видимість публічних відповідей встановлено на unlisted (можна вимкнути) - -Змінено: -- Зменшено розмір заголовка при збільшенні розміру тексту - -Виправлено: -- Фільтри не застосовуються -- Блокування акаунта не видаляє повідомлення у кеші -- Виправлено деякі збої diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/428.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/428.txt deleted file mode 100644 index b0ff07a4..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/428.txt +++ /dev/null @@ -1,14 +0,0 @@ -Додано: -- Підтримка відкриття посилань, що містять у своєму шляху /@display_name/ (працює на старих пристроях) -- Відображення кількості відповідей при увімкнених лічильниках -- Додано підтримку фільтрації повідомлень профілю - -Змінено: -- Складання подання займає всю ширину навіть у потоках -- Скинуто маркер push-сповіщення при очищенні кешу - -Виправлено: -- Чернетка зберігається при відповіді "ні" або діалоговому запиті без змін -- Фільтри не працюють з теґами -- Додано спеціальне повідомлення про помилку для теґів, за якими слідкують -- Порожні сторінки під час запуску застосунку diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/431.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/431.txt deleted file mode 100644 index b21d3286..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/431.txt +++ /dev/null @@ -1,14 +0,0 @@ -Додано: -- Повна підтримка нових фільтрів для Mastodon 4 -- Відвідувати профілі без авторизації / Дозволити відображати всі їхні повідомлення - -Змінено: -- Компонування перегляду займає всю ширину навіть у потоках -- Облікові записи можна вимкнути за таймером з їхнього профілю - -Виправлено: -- Чернетка зберігається при відповіді "ні" або діалоговому запиті без змін -- Порожні сторінки під час запуску застосунку -- На деяких пристроях не вдається зберігати та ділитися медіа на деяких пристроях -- Додано підтримку сповіщень адміністратора -- Копіювання вмісту повідомлення diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/432.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/432.txt deleted file mode 100644 index e1de5020..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/432.txt +++ /dev/null @@ -1,13 +0,0 @@ -Додано: -- Список заблокованих доменів (дозволити розблокувати) -- Підтримати посилання gemini -- Запропоновані підписники - -Змінено: -- Дозволено редагування пошукового запиту - -Виправлено: -- Чернетки видалялися без попередження -- Застосунок вилітає, коли встановлено проксі -- Фільтр не синхронізується після редагування -- Деякі збої diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/433.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/433.txt deleted file mode 100644 index 230cd002..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/433.txt +++ /dev/null @@ -1,18 +0,0 @@ -Додано: -- Список заблокованих доменів (дозволити розблокувати) -- Підтримати посилання gemini -- Запропоновані підписники -- Мод/Адмін: Керування екземплярами заблокованих доменів -- Відкривати повідомлення з іншим обліковим записом -- Дозволити відключити сповіщення для адміністраторів -- Сортування списків - -Змінено: -- Дозволено редагування пошукового запиту - -Виправлено: -- Чернетки видалялися без попередження -- Видалено списки з "Керування термінами" -- Застосунок вилітає, коли встановлено проксі -- Фільтр не синхронізується після редагування -- Деякі збої / покращення diff --git a/src/fdroid/fastlane/metadata/android/uk/changelogs/454.txt b/src/fdroid/fastlane/metadata/android/uk/changelogs/454.txt deleted file mode 100644 index 7e5bbb0a..00000000 --- a/src/fdroid/fastlane/metadata/android/uk/changelogs/454.txt +++ /dev/null @@ -1,33 +0,0 @@ -Додано: -- Публікуйте випадкові цитати -- Групові репости на домашній шкалі часу -- Перейменування часових шкал Nitter -- Підтримка Android 13 -- Нумерація з пошуком / трендом -- Дозволити видалення лівого поля в повідомленнях (за замовчуванням: вимкнено) - -Змінено: -- Відображати кнопку перекладу лише тоді, коли мова відрізняється -- Повага до пробілів між словами у повідомленнях -- Кнопка фокусування стала доступнішою під час редагування медіа -- Візуальний зворотний зв'язок для блокування у списку облікових записів -- Візуальні зміни за допомогою композиції / верхньої панелі -- Використовуйте власну назву часової шкали Nitter для керування часовими шкалами - -Виправлено: -- Поведінка з перемикачем cw -- Урізані посилання на gimini -- Кнопки навігації не видно з медіа (Світла тема) -- Рядок стану з Android 5 -- Виправлено посилання, на які не можна натиснути -- Виправлено глибокі посилання -- Виправлення віддалених потоків, які не відображаються у деяких випадках -- Додавання опису до спільних медіафайлів -- Відкриття з іншими обліковими записами -- Розмір символів не дотримується для Android 5-6 -- Неправильний екземпляр отримано для instances.social -- Стрибає шкала часу при оновленні -- Посилання на згадки, теґи, URL-адреси не відображаються. -- Кастомні звуки каналів не застосовуються -- Користувачі з коротким іменем користувача не пов'язані між собою -- Виправлено збої diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/390.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/390.txt deleted file mode 100644 index 5cd2b226..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/390.txt +++ /dev/null @@ -1,5 +0,0 @@ -Những tính năng mới của Fedilab. -- Bạn có thể thu gọn chuỗi tút -- Xem trước chuỗi tút khi trả lời -- Hỗ trợ bộ nhớ đệm -- Thiết kế mới diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/391.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/391.txt deleted file mode 100644 index 5cd2b226..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/391.txt +++ /dev/null @@ -1,5 +0,0 @@ -Những tính năng mới của Fedilab. -- Bạn có thể thu gọn chuỗi tút -- Xem trước chuỗi tút khi trả lời -- Hỗ trợ bộ nhớ đệm -- Thiết kế mới diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/393.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/393.txt deleted file mode 100644 index a170f281..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/393.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Sửa nhiều lỗi -- Cải thiện tút ghim diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/394.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/394.txt deleted file mode 100644 index a35f3ae6..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/394.txt +++ /dev/null @@ -1 +0,0 @@ -- Sửa lỗi crash trên một số máy chủ Pleroma diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/395.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/395.txt deleted file mode 100644 index 2077b252..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/395.txt +++ /dev/null @@ -1,2 +0,0 @@ -- Sửa lỗi -- Cho phép chia sẻ với app diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/396.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/396.txt deleted file mode 100644 index 4fb09298..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/396.txt +++ /dev/null @@ -1,13 +0,0 @@ -Thêm: -- Cho phép đặt điểm lấy nét trên các bản xem trước (trình chỉnh sửa media) -- Tôn trọng điểm lấy nét với các bản xem trước -- Phân trang với nút tìm nạp thêm hỗ trợ đọc lên hoặc xuống -- Thêm xu hướng - -Sửa: -- Chỉ thông báo đẩy cuối cùng được hiển thị (không được nhóm lại) -- Hành vi xấu với cuộn phải / trái -- Sửa các cấu hình dài không hiển thị đầy đủ -- Vấn đề với một số cuộc thăm dò -- Một số sự cố -- Một số hành vi xấu diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/397.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/397.txt deleted file mode 100644 index fd9fb2b3..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/397.txt +++ /dev/null @@ -1 +0,0 @@ -- Sửa lỗi được báo cáo. diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/398.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/398.txt deleted file mode 100644 index e19e446d..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/398.txt +++ /dev/null @@ -1,6 +0,0 @@ -- Tiếp tục cải thiện hành vi cuộn -- Cuộn lên đầu (chọn lại tab) sẽ tìm nạp các tin nhắn mới và sau đó cuộn lên trên cùng -- Xóa điểm lấy nét để xem trước phương tiện phù hợp -- Sửa lỗi không thể chia sẻ với một tài khoản -- Sửa chủ đề màu đen -- Sửa một số màu nút diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/399.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/399.txt deleted file mode 100644 index ac219593..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/399.txt +++ /dev/null @@ -1,16 +0,0 @@ -Thêm: -- Đặt ngôn ngữ soạn thư (từ menu soạn thư -> ba chấm dọc) -- Thêm hỗ trợ phản ứng cho Pleroma -- Thêm chỉ báo quyền riêng tư ở trên cùng bên phải - -Đã thay đổi -- Cải thiện hành vi cuộn -- Cuộn lên đầu (chọn lại tab) sẽ tìm nạp các tin nhắn mới và sau đó cuộn lên trên cùng - -Đã sửa: -- Dòng thời gian thẻ trống -- Xóa điểm lấy nét để xem trước phương tiện phù hợp -- Sửa lỗi không thể chia sẻ với một tài khoản -- Sửa chủ đề màu đen -- Không thể chọn chủ đề -- Sửa một số màu nút diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/400.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/400.txt deleted file mode 100644 index 34e4cdf7..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/400.txt +++ /dev/null @@ -1,9 +0,0 @@ -Thêm: -- Cho phép xác định số lượng ký tự tối đa khi không được phát hiện (Trong trường hợp) -- Thêm biểu tượng cảm xúc một bộ chọn khi sáng tác (phải được bật trong cài đặt) -- Thêm ghi chú phát hành với khả năng dịch chúng - -Đã sửa: -- Biểu tượng cảm xúc tùy chỉnh Friendica không được hiển thị -- Nhấn lâu để lưu trữ phương tiện -- Một số bản sửa lỗi diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/401.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/401.txt deleted file mode 100644 index 04046146..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/401.txt +++ /dev/null @@ -1,11 +0,0 @@ -Thay đổi: -- Soạn tin nhắn không còn bị buộc phải tối đa ký tự - -Sửa: -- Theo dõi nhiều tài khoản -- Không thể đăng ký nhận thông báo cho một tài khoản -- Các vấn đề khi chia sẻ -- Hồ sơ sai cho áp dụng biểu tượng cảm xúc trong thông báo -- Phát hành thẻ -- Sự cố với các tab -- Không thể đổi tên các tab diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/402.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/402.txt deleted file mode 100644 index e1becaf1..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/402.txt +++ /dev/null @@ -1,15 +0,0 @@ -Thêm: -- Chủ đề mới: Con voi bóng tối từ S1m -- Thông báo lỗi từ phía máy chủ khi đăng không thành công -- Cho phép đặt thời gian tìm nạp cho các thông báo bị trì hoãn - -Đã thay đổi: -- Tìm nạp nhiều nút hiển thị hơn - -Đã sửa: -- Sự cố khi tìm nạp các thư bị thiếu -- Một số vấn đề với chủ đề -- Mất quá nhiều không gian với phản ứng (Pleroma) -- Xóa và tạo lại các sự cố -- Sự cố khi phát video -- Các bản sửa lỗi khác diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/405.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/405.txt deleted file mode 100644 index 21cd8428..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/405.txt +++ /dev/null @@ -1,20 +0,0 @@ -Thêm: -- Xuất Cài đặt -- Tuyên truyền việc sắp xếp lại thủ công các danh sách trong dòng thời gian tới menu con "Danh sách" -- Cho phép thay đổi bộ phân phối đẩy trong cài đặt - -Đã thay đổi: -- Cải thiện hình ảnh xem trước phù hợp -- Cải thiện thông báo -- Phương tiện hồ sơ được hiển thị dưới dạng lưới - -Đã sửa: -- Một số video Peertube không hoạt động -- Tôn trọng tài khoản hiển thị mặc định khi trả lời -- GIF phân biệt đối xử từ hình ảnh -- Ứng dụng gặp sự cố khi mở dòng thời gian phiên bản bên ngoài -- Xóa nút trong trình soạn chủ đề làm hỏng ứng dụng -- Nút quay lại mở nhiều hoạt động cũ trước khi đóng ứng dụng -- Các vấn đề với việc chia sẻ -- Sắp xếp lại danh sách có vấn đề về giao diện người dùng khi thay đổi khả năng hiển thị -- Liên kết không được hiển thị chính xác trong các bài đăng từ Friendica diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/407.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/407.txt deleted file mode 100644 index c0b2080b..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/407.txt +++ /dev/null @@ -1,9 +0,0 @@ -Thêm: -- Cài đặt để đặt tất cả các mốc thời gian ở trên cùng (mặc định bị tắt) -- Cài đặt hiển thị mốc thời gian trong danh sách (mặc định bị tắt) -- Hiển thị bộ đếm cho fav / reblog trong dòng thời gian (mặc định bị vô hiệu hóa) - -Đã sửa: -- Vấn đề hiển thị khi trả lời -- Một số vấn đề về chủ đề khi sáng tác -- Một số sự cố diff --git a/src/fdroid/fastlane/metadata/android/vi/changelogs/408.txt b/src/fdroid/fastlane/metadata/android/vi/changelogs/408.txt deleted file mode 100644 index 8ca85df0..00000000 --- a/src/fdroid/fastlane/metadata/android/vi/changelogs/408.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Cải thiện tốc độ cho các phiên bản Nitter -- Cho phép chỉnh sửa tài khoản Nitter bằng cách nhấn và giữ các tab -- Khắc phục sự cố phân trang với các mốc thời gian được ghim -- Sửa một số lỗi -- Khắc phục khả năng hiển thị khi hiển thị quầy From 2b2a3dbc99962cf286bc84766d799b7c8bd13084 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 15:54:39 +0100 Subject: [PATCH 05/31] Fix issue #788 - Forwarded are added back when deleted --- .../android/mastodon/client/entities/api/Status.java | 2 ++ .../fedilab/android/mastodon/ui/drawer/ComposeAdapter.java | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java index 7dec8be3..ec3c99a3 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java +++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Status.java @@ -116,6 +116,8 @@ public class Status implements Serializable, Cloneable { public transient boolean isFetchMore = false; public transient PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM; public boolean isChecked = false; + //When forwarding tags + public boolean tagAdded = false; public String translationContent; public boolean translationShown; public boolean mathsShown = false; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index 009c1f2f..7b0bdf18 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -1612,7 +1612,8 @@ public class ComposeAdapter extends RecyclerView.Adapter 0 && statusDraft.text != null && !statusDraft.text.contains("#")) { + if (forwardTag && position > 0 && statusDraft.text != null && !statusDraft.text.contains("#") && !statusList.get(position).tagAdded) { + statusList.get(position).tagAdded = true; Status status = statusList.get(position - 1).reblog == null ? statusList.get(position - 1) : statusList.get(position - 1).reblog; if (status.tags != null && status.tags.size() > 0) { statusDraft.text += "\n\n"; @@ -1626,8 +1627,9 @@ public class ComposeAdapter extends RecyclerView.Adapter 0 && statusDraft.text != null && statusDraft.text.contains("#")) { + } else if (forwardTag && position > 0 && statusDraft.text != null && statusDraft.text.contains("#") && !statusList.get(position).tagAdded) { Status status = statusList.get(position - 1).reblog == null ? statusList.get(position - 1) : statusList.get(position - 1).reblog; + statusList.get(position).tagAdded = true; int lenght = 0; for (Tag tag : status.tags) { lenght += ("#" + tag.name + " ").length(); From a6c17512cc48f18e61117845787de65feac571da Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 15:56:10 +0100 Subject: [PATCH 06/31] update release notes --- src/fdroid/fastlane/metadata/android/en/changelogs/478.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt index 93817e39..a59f3a36 100644 --- a/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt +++ b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt @@ -6,5 +6,6 @@ Changed: - Media heights now use the screen size Fixed: +- Forwarded tags are added back after being deleted - TalkBack issues - Some crashes \ No newline at end of file From 7ce644e9220403553c1a9bdf38f13557d8fe8e06 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 9 Feb 2023 17:23:51 +0100 Subject: [PATCH 07/31] Add back custom tabs --- .../android/mastodon/helper/Helper.java | 35 ++++++++++----- .../ui/fragment/FragmentLoginMain.java | 43 ++++++++++++++++--- .../res/menus/mastodon/menu/main_login.xml | 23 +++------- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/pref_interface.xml | 7 +++ .../metadata/android/en/changelogs/478.txt | 5 ++- 6 files changed, 78 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java index 57336df2..f75461e9 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java @@ -76,6 +76,8 @@ import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.browser.customtabs.CustomTabColorSchemeParams; +import androidx.browser.customtabs.CustomTabsIntent; import androidx.core.app.ActivityOptionsCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; @@ -646,16 +648,29 @@ public class Helper { if (url == null) { return; } - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://") && !url.toLowerCase().startsWith("gemini://")) { - url = "http://" + url; - } - intent.setData(Uri.parse(url)); - try { - context.startActivity(intent); - } catch (Exception e) { - Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); + boolean customTab = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOM_TABS), true); + if (customTab) { + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); + int colorInt = ThemeHelper.getAttColor(context, R.attr.statusBar); + CustomTabColorSchemeParams defaultColors = new CustomTabColorSchemeParams.Builder() + .setToolbarColor(colorInt) + .build(); + builder.setDefaultColorSchemeParams(defaultColors); + CustomTabsIntent customTabsIntent = builder.build(); + customTabsIntent.launchUrl(context, Uri.parse(url)); + } else { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://") && !url.toLowerCase().startsWith("gemini://")) { + url = "http://" + url; + } + intent.setData(Uri.parse(url)); + try { + context.startActivity(intent); + } catch (Exception e) { + Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } } } diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java b/app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java index 8ef6a8f3..87ab4bac 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/FragmentLoginMain.java @@ -25,6 +25,7 @@ import static app.fedilab.android.activities.LoginActivity.softwareLogin; import android.Manifest; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; @@ -43,9 +44,12 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.appcompat.widget.PopupMenu; +import androidx.browser.customtabs.CustomTabColorSchemeParams; +import androidx.browser.customtabs.CustomTabsIntent; import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.preference.PreferenceManager; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; @@ -60,6 +64,7 @@ import app.fedilab.android.mastodon.client.entities.app.Account; import app.fedilab.android.mastodon.client.entities.app.InstanceSocial; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.MastodonHelper; +import app.fedilab.android.mastodon.helper.ThemeHelper; import app.fedilab.android.mastodon.helper.ZipHelper; import app.fedilab.android.mastodon.viewmodel.mastodon.AppsVM; import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM; @@ -214,6 +219,10 @@ public class FragmentLoginMain extends Fragment { menuInflater.inflate(R.menu.main_login, popupMenu.getMenu()); MenuItem adminTabItem = popupMenu.getMenu().findItem(R.id.action_request_admin); adminTabItem.setChecked(requestedAdmin); + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + boolean customTab = sharedpreferences.getBoolean(getString(R.string.SET_CUSTOM_TABS), true); + popupMenu.getMenu().findItem(R.id.action_custom_tabs).setChecked(customTab); + popupMenu.setOnMenuItemClickListener(item -> { int itemId = item.getItemId(); if (itemId == R.id.action_proxy) { @@ -242,6 +251,13 @@ public class FragmentLoginMain extends Fragment { } else { proceed(); } + } else if (itemId == R.id.action_custom_tabs) { + boolean newValue = !item.isChecked(); + item.setChecked(newValue); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(getString(R.string.SET_CUSTOM_TABS), newValue); + editor.apply(); + return false; } return false; }); @@ -291,13 +307,26 @@ public class FragmentLoginMain extends Fragment { client_idLogin = app.client_id; client_secretLogin = app.client_secret; String redirectUrl = MastodonHelper.authorizeURL(currentInstanceLogin, client_idLogin, requestedAdmin); - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setData(Uri.parse(redirectUrl)); - try { - startActivity(intent); - } catch (Exception e) { - Toasty.error(requireActivity(), getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + boolean customTab = sharedpreferences.getBoolean(getString(R.string.SET_CUSTOM_TABS), true); + if (customTab) { + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); + int colorInt = ThemeHelper.getAttColor(requireActivity(), R.attr.statusBar); + CustomTabColorSchemeParams defaultColors = new CustomTabColorSchemeParams.Builder() + .setToolbarColor(colorInt) + .build(); + builder.setDefaultColorSchemeParams(defaultColors); + CustomTabsIntent customTabsIntent = builder.build(); + customTabsIntent.launchUrl(requireActivity(), Uri.parse(redirectUrl)); + } else { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setData(Uri.parse(redirectUrl)); + try { + startActivity(intent); + } catch (Exception e) { + Toasty.error(requireActivity(), getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } } } else { Toasty.error(requireActivity(), getString(R.string.client_error), Toasty.LENGTH_SHORT).show(); diff --git a/app/src/main/res/menus/mastodon/menu/main_login.xml b/app/src/main/res/menus/mastodon/menu/main_login.xml index cbfb46fe..30b14748 100644 --- a/app/src/main/res/menus/mastodon/menu/main_login.xml +++ b/app/src/main/res/menus/mastodon/menu/main_login.xml @@ -1,17 +1,7 @@ - - + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 939c3451..75382f5d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1509,6 +1509,7 @@ SET_NITTER_HOST nitter.net SET_USE_CACHE + SET_CUSTOM_TABS SET_BIBLIOGRAM SET_BIBLIOGRAM_HOST bibliogram.art diff --git a/app/src/main/res/xml/pref_interface.xml b/app/src/main/res/xml/pref_interface.xml index 69a98c52..440723cb 100644 --- a/app/src/main/res/xml/pref_interface.xml +++ b/app/src/main/res/xml/pref_interface.xml @@ -69,6 +69,13 @@ app:summary="@string/set_use_cache_indication" app:title="@string/set_use_cache" /> + + Date: Thu, 9 Feb 2023 19:02:28 +0100 Subject: [PATCH 08/31] Update with new language --- app/src/main/assets/languages/iso_639_1.json | 106 ++++- .../android/mastodon/helper/CustomEmoji.java | 5 +- .../android/mastodon/jobs/ComposeWorker.java | 5 +- .../mastodon/ui/drawer/ComposeAdapter.java | 2 +- .../settings/FragmentComposeSettings.java | 39 ++ app/src/main/res/values/strings.xml | 369 +----------------- app/src/main/res/xml/pref_compose.xml | 2 - .../metadata/android/en/changelogs/478.txt | 2 + 8 files changed, 154 insertions(+), 376 deletions(-) diff --git a/app/src/main/assets/languages/iso_639_1.json b/app/src/main/assets/languages/iso_639_1.json index 00199b74..30bf870f 100644 --- a/app/src/main/assets/languages/iso_639_1.json +++ b/app/src/main/assets/languages/iso_639_1.json @@ -381,7 +381,7 @@ }, { "code": "lo", - "language": "ພາສາ" + "language": "ລາວ" }, { "code": "lt", @@ -726,5 +726,109 @@ { "code": "zu", "language": "isiZulu" + }, + { + "code": "ast", + "language": "Asturianu" + }, + { + "code": "ckb", + "language": "سۆرانی" + }, + { + "code": "cnr", + "language": "crnogorski" + }, + { + "code": "jbo", + "language": "la .lojban." + }, + { + "code": "kab", + "language": "Taqbaylit" + }, + { + "code": "kmr", + "language": "Kurmancî" + }, + { + "code": "ldn", + "language": "Láadan" + }, + { + "code": "lfn", + "language": "lingua franca nova" + }, + { + "code": "sco", + "language": "Scots" + }, + { + "code": "sma", + "language": "Åarjelsaemien Gïele" + }, + { + "code": "smj", + "language": "Julevsámegiella" + }, + { + "code": "szl", + "language": "ślůnsko godka" + }, + { + "code": "tai", + "language": "ภาษาไท or ภาษาไต" + }, + { + "code": "tok", + "language": "toki pona" + }, + { + "code": "zba", + "language": "باليبلن" + }, + { + "code": "zgh", + "language": "ⵜⴰⵎⴰⵣⵉⵖⵜ" + }, + { + "code": "en-GB", + "language": "English (British)" + }, + { + "code": "es-AR", + "language": "Español (Argentina)" + }, + { + "code": "es-MX", + "language": "Español (México)" + }, + { + "code": "fr-QC", + "language": "Français (Canadien)" + }, + { + "code": "pt-BR", + "language": "Português (Brasil)" + }, + { + "code": "pt-PT", + "language": "Português (Portugal)" + }, + { + "code": "sr-Latn", + "language": "Srpski (latinica)" + }, + { + "code": "zh-CN", + "language": "简体中文" + }, + { + "code": "zh-HK", + "language": "繁體中文(香港)" + }, + { + "code": "zh-TW", + "language": "繁體中文(臺灣)" } ] \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/CustomEmoji.java b/app/src/main/java/app/fedilab/android/mastodon/helper/CustomEmoji.java index b1bd8244..9e99a567 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/CustomEmoji.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/CustomEmoji.java @@ -30,7 +30,7 @@ import app.fedilab.android.mastodon.client.entities.api.Status; public class CustomEmoji extends ReplacementSpan { - private final float scale; + private float scale; private final WeakReference viewWeakReference; private Drawable imageDrawable; private boolean callbackCalled; @@ -40,6 +40,9 @@ public class CustomEmoji extends ReplacementSpan { this.viewWeakReference = viewWeakReference; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(mContext); scale = sharedpreferences.getFloat(mContext.getString(R.string.SET_FONT_SCALE), 1.1f); + if (scale > 1.3f) { + scale = 1.3f; + } callbackCalled = false; } diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java index 3c0ab65b..6e663374 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java @@ -230,7 +230,6 @@ public class ComposeWorker extends Worker { LocalBroadcastManager.getInstance(context).sendBroadcast(intentBD); return; } - String language = sharedPreferences.getString(context.getString(R.string.SET_COMPOSE_LANGUAGE) + dataPost.userId + dataPost.instance, null); if (statuses.get(i).local_only) { statuses.get(i).text += " \uD83D\uDC41"; } @@ -258,11 +257,11 @@ public class ComposeWorker extends Worker { if (dataPost.scheduledDate == null) { if (dataPost.statusEditId == null) { statusCall = mastodonStatusesService.createStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in, - poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language, statuses.get(i).quote_id, statuses.get(i).content_type); + poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), statuses.get(i).language, statuses.get(i).quote_id, statuses.get(i).content_type); } else { //Status is edited statusCall = mastodonStatusesService.updateStatus(null, dataPost.token, dataPost.statusEditId, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in, poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, - statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language, + statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), statuses.get(i).language, media_edit_id, media_edit_description, media_edit_focus); } try { diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index 7b0bdf18..41e110ad 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -1695,7 +1695,7 @@ public class ComposeAdapter extends RecyclerView.Adapter storedLanguages = sharedPreferences.getStringSet(getString(R.string.SET_SELECTED_LANGUAGE), null); + + String[] selectedValue = new String[0]; + if (storedLanguages != null && storedLanguages.size() > 0) { + if (storedLanguages.size() == 1 && storedLanguages.toArray()[0] == null) { + sharedPreferences.edit().remove(getString(R.string.SET_SELECTED_LANGUAGE)).commit(); + } else { + selectedValue = storedLanguages.toArray(new String[0]); + } + } + List languages = Languages.get(requireActivity()); + if (languages != null) { + String[] codesArr = new String[languages.size()]; + String[] languagesArr = new String[languages.size()]; + int i = 0; + for (Languages.Language language : languages) { + codesArr[i] = language.code; + languagesArr[i] = language.language; + i++; + } + SET_SELECTED_LANGUAGE.setEntries(languagesArr); + SET_SELECTED_LANGUAGE.setEntryValues(codesArr); + if (selectedValue.length > 0) { + SET_SELECTED_LANGUAGE.setDefaultValue(selectedValue); + } + } + + } + + } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 75382f5d..44ae065a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -900,374 +900,7 @@ szl sc - - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - no - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yo - za - zh - zu - - - Afaraf - аҧсуа бызшәа - avesta - Afrikaans - Akan - አማርኛ - aragonés - اللغة العربية - অসমীয়া - авар мацӀ - aymar aru - azərbaycan dili - башҡорт теле - беларуская мова - български език - भोजपुरी - Bislama - bamanankan - বাংলা - བོད་ཡིག - brezhoneg - bosanski jezik - Català - нохчийн мотт - Chamoru - corsu - ᓀᐦᐃᔭᐍᐏᐣ - čeština - ѩзыкъ словѣньскъ - чӑваш чӗлхи - Cymraeg - dansk - Deutsch - Dhivehi - རྫོང་ཁ - Eʋegbe - Ελληνικά - English - Esperanto - Español - eesti - euskara - فارسی - Fulfulde - suomi - Vakaviti - føroyskt - Français - Frysk - Gaeilge - Gàidhlig - galego - ગુજરાતી - Gaelg - هَوُسَ - עברית - हिन्दी - Hiri Motu - Hrvatski - Kreyòl ayisyen - magyar - Հայերեն - Otjiherero - Interlingua - Bahasa Indonesia - Interlingue - Asụsụ Igbo - ꆈꌠ꒿ Nuosuhxop - Iñupiaq - Ido - Íslenska - Italiano - ᐃᓄᒃᑎᑐᑦ - 日本語 - basa Jawa - ქართული - Kikongo - Gĩkũyũ - Kuanyama - қазақ тілі - kalaallisut - ខេមរភាសា - ಕನ್ನಡ - 한국어 - Kanuri - कश्मीरी - Kurmancî - коми кыв - Kernewek - Кыргызча - latine - Lëtzebuergesch - Luganda - Limburgs - Lingála - ພາສາ - lietuvių kalba - Tshiluba - latviešu valoda - fiteny malagasy - Kajin M̧ajeļ - te reo Māori - македонски јазик - മലയാളം - Монгол хэл - मराठी - Bahasa Melayu - Malti - ဗမာစာ - Ekakairũ Naoero - Norsk bokmål - isiNdebele - नेपाली - Owambo - Nederlands - Norsk Nynorsk - Norsk - isiNdebele - Diné bizaad - chiCheŵa - occitan - ᐊᓂᔑᓈᐯᒧᐎᓐ - Afaan Oromoo - ଓଡ଼ିଆ - ирон æвзаг - ਪੰਜਾਬੀ - पाऴि - Polski - پښتو - Português - Runa Simi - rumantsch grischun - Ikirundi - Română - Русский - Ikinyarwanda - संस्कृतम् - sardu - सिन्धी - Davvisámegiella - yângâ tî sängö - සිංහල - slovenčina - slovenščina - chiShona - Soomaaliga - Shqip - српски језик - SiSwati - Sesotho - Basa Sunda - Svenska - Kiswahili - தமிழ் - తెలుగు - тоҷикӣ - ไทย - ትግርኛ - Türkmen - Wikang Tagalog - Setswana - faka Tonga - Türkçe - Xitsonga - татар теле - Twi - Reo Tahiti - ئۇيغۇرچە‎ - Українська - اردو - Ўзбек - Tshivenḓa - Tiếng Việt - Volapük - walon - Wollof - isiXhosa - ייִדיש - Yorùbá - Saɯ cueŋƅ - 中文 - isiZulu - + en fr diff --git a/app/src/main/res/xml/pref_compose.xml b/app/src/main/res/xml/pref_compose.xml index 52fc8276..3eb2363d 100644 --- a/app/src/main/res/xml/pref_compose.xml +++ b/app/src/main/res/xml/pref_compose.xml @@ -47,8 +47,6 @@ app:title="@string/set_unlisted_replies" /> Date: Fri, 10 Feb 2023 18:17:44 +0100 Subject: [PATCH 09/31] Create views --- .../mastodon/drawable/bubble_left.xml | 9 ++ .../mastodon/drawable/bubble_left_tail.xml | 20 ++++ .../mastodon/drawable/bubble_right.xml | 9 ++ .../mastodon/drawable/bubble_right_tail.xml | 20 ++++ .../mastodon/layout/drawer_status_chat.xml | 103 ++++++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 app/src/main/res/drawables/mastodon/drawable/bubble_left.xml create mode 100644 app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml create mode 100644 app/src/main/res/drawables/mastodon/drawable/bubble_right.xml create mode 100644 app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml create mode 100644 app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml new file mode 100644 index 00000000..9ad4629d --- /dev/null +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml new file mode 100644 index 00000000..6a1b0f51 --- /dev/null +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_right.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_right.xml new file mode 100644 index 00000000..b6d9e4a2 --- /dev/null +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_right.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml new file mode 100644 index 00000000..aeac7fec --- /dev/null +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml new file mode 100644 index 00000000..9f27e399 --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 11547c56a8a0a2b8ad248a8beec875b4f12486d1 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 10 Feb 2023 18:30:05 +0100 Subject: [PATCH 10/31] Improve chat view --- .../mastodon/layout/drawer_status_chat.xml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index 9f27e399..1be796f4 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -29,6 +29,20 @@ app:layout_constraintTop_toTopOf="parent" tools:text="@tools:sample/full_names" /> + + + + \ No newline at end of file From 979354dc75e0b87d2b7ed8bb7f30821180b42448 Mon Sep 17 00:00:00 2001 From: 0xd9a <0xd9a@noreply.codeberg.org> Date: Sat, 11 Feb 2023 00:34:40 +0530 Subject: [PATCH 11/31] some changes to chat views --- .../mastodon/drawable/bubble_right_tail.xml | 2 +- .../mastodon/layout/drawer_status_chat.xml | 88 +++---------------- .../layout/layout_drawer_attachments.xml | 74 ++++++++++++++++ 3 files changed, 85 insertions(+), 79 deletions(-) create mode 100644 app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml index aeac7fec..29fa0820 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml @@ -11,7 +11,7 @@ - + diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index 1be796f4..8926bbaf 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -5,9 +5,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/fab_margin" - android:layout_marginTop="10dp" + android:layout_marginTop="12dp" android:background="@drawable/bubble_right_tail" - android:padding="5dp"> + android:padding="6dp" + android:paddingEnd="12dp"> - + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + app:layout_constraintTop_toBottomOf="@id/message_content" /> - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml new file mode 100644 index 00000000..19ea9688 --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 6b8510023648083796d08584f14ae0f148141843 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Sat, 11 Feb 2023 06:09:12 +0100 Subject: [PATCH 12/31] Translated using Weblate (Sardinian) Currently translated at 99.1% (1080 of 1089 strings) Co-authored-by: Ajeje Brazorf Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/sc/ Translation: Fedilab/Strings --- app/src/main/res/values-sc/strings.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 4b415865..1a4a12be 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -989,4 +989,12 @@ Recùpera in automàticu is messàgios de sa lìnia printzipale Mentovos in pitzos Rispondende, is mentovos s\'ant a annànghere a su cumintzu de su messàgiu + S\'eticheta est istada bogada! + S\'eticheta est istada archiviada! + Amministra is etichetas + Apicadu + Nùmeru de mèdios + S\'eticheta est istada modificada! + Nùmeru de rispostas + Data de atualizatzione \ No newline at end of file From 4fad5a1614cbcf5169c246314419c03f5ebaa56c Mon Sep 17 00:00:00 2001 From: Poesty Li Date: Sat, 11 Feb 2023 06:09:12 +0100 Subject: [PATCH 13/31] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1090 of 1090 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1089 of 1089 strings) Co-authored-by: Poesty Li Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/ Translation: Fedilab/Strings --- app/src/main/res/values-zh-rCN/strings.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1afdd77e..587b86c0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -274,7 +274,7 @@ 在此实例上未找到时间线! 关注实例 您已经关注了这个实例! - 伙伴关系 + 合作伙伴 隐藏来自 %s 的转发 个人资料上的功能 显示来自 %s 的转发 @@ -573,12 +573,12 @@ 以 MB 为单位的视频缓存,零表示没有缓存。 水印 自动在图片底部添加水印。可以为每个帐号自定义文本。 - 没有找到经销商! + 没有找到分发器! 您需要一个分发器来接收推送通知。 \n您可以在 %1$s 找到更多详细信息。 \n \n您也可以在设置中禁用推送通知以忽略该消息。 - 选择分销商 + 选择分发器 仍然显示 该消息已添加到您的书签! 图标尺寸 @@ -667,7 +667,7 @@ 这是另一回事 列表名称无效! 找不到此列表的帐号! - 已定时 + 定时 通知已从缓存中删除。 您正在关注此帐号。要在您的主页中不再看到他们的帖子,请取消关注他们。 来自人们的更新 @@ -1001,4 +1001,8 @@ 回复数 更新日期 媒体数 + 该标签已更改! + 该标签已删除! + 该标签已储存! + 管理标签 \ No newline at end of file From 8bc3ecfb4f41ab55e9eb069ee7a8683c1745be67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Sat, 11 Feb 2023 06:09:13 +0100 Subject: [PATCH 14/31] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1090 of 1090 strings) Co-authored-by: Oğuz Ersen Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/tr/ Translation: Fedilab/Strings --- app/src/main/res/values-tr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index d5a731c8..d424306d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1001,4 +1001,8 @@ Yanıt sayısı Sabitlendi Güncelleme tarihi + Etiket değiştirildi! + Etiket kaldırıldı! + Etiket kaydedildi! + Etiketleri yönet \ No newline at end of file From 5483c48d38231347cb9da056de8ea9c5fb69d33d Mon Sep 17 00:00:00 2001 From: Francesc Date: Sat, 11 Feb 2023 06:09:13 +0100 Subject: [PATCH 15/31] Translated using Weblate (Catalan) Currently translated at 82.3% (898 of 1090 strings) Co-authored-by: Francesc Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/ca/ Translation: Fedilab/Strings --- app/src/main/res/values-ca/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 911fbf16..025a139b 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -805,4 +805,5 @@ Ara ja pots connectar-te al compte escrivint %1$s en el primer camp i fen Un missatge que havies difós ha estat editat Una usuària ha denunciat SOCKS + "Imatge de perfil" \ No newline at end of file From acadb3c6db6c8a998b58b4ddc9e2c575bf63d67f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Jel=C3=ADnek?= Date: Sat, 11 Feb 2023 06:09:14 +0100 Subject: [PATCH 16/31] Translated using Weblate (Czech) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 99.9% (1089 of 1090 strings) Co-authored-by: Lukáš Jelínek Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/cs/ Translation: Fedilab/Strings --- app/src/main/res/values-cs/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 162a0c8f..53a81224 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1013,4 +1013,8 @@ Počet odpovědí Datum aktualizace Obrázek karty + Tag byl změněn! + Tag byl odstraněn! + Tag byl uložen! + Spravovat tagy \ No newline at end of file From 00a2f0b67a9b50644a671611bfd917b9c5dd5d00 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 11 Feb 2023 18:28:25 +0100 Subject: [PATCH 17/31] Add chat view --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 3 + .../activities/DirectMessageActivity.java | 131 ++++++++++++++++ .../ui/drawer/ConversationAdapter.java | 16 +- .../ui/drawer/StatusDirectMessageAdapter.java | 106 +++++++++++++ .../FragmentMastodonDirectMessage.java | 143 ++++++++++++++++++ .../drawable/browser_calls_blocked.xml | 12 -- .../mastodon/drawable/bubble_left.xml | 1 - .../mastodon/drawable/bubble_left_tail.xml | 1 - .../mastodon/drawable/bubble_right.xml | 1 - .../mastodon/drawable/bubble_right_tail.xml | 1 - .../layout/activity_direct_message.xml | 70 +++++++++ .../mastodon/layout/drawer_status_chat.xml | 1 + .../res/layouts/mastodon/values/strings.xml | 5 - .../res/menus/mastodon/menu/main_webview.xml | 7 +- app/src/main/res/values/strings.xml | 2 + 16 files changed, 474 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java create mode 100644 app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java create mode 100644 app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java delete mode 100644 app/src/main/res/drawables/mastodon/drawable/browser_calls_blocked.xml create mode 100644 app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml delete mode 100644 app/src/main/res/layouts/mastodon/values/strings.xml diff --git a/app/build.gradle b/app/build.gradle index afcaf745..2fcb2c6f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,13 +68,15 @@ android { 'src/main/res/layouts/mastodon', 'src/main/res/layouts/peertube', 'src/main/res/layouts', - 'src/main/layout', + 'src/main/res/drawables/mastodon', 'src/main/res/drawables/peertube', 'src/main/res/drawables', + 'src/main/res/menus/mastodon', 'src/main/res/menus/peertube', 'src/main/res/menus', + 'src/main/res' ] } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 699f5e66..399f8770 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -196,6 +196,9 @@ + diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java new file mode 100644 index 00000000..5af65c45 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java @@ -0,0 +1,131 @@ +package app.fedilab.android.mastodon.activities; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + + +import static app.fedilab.android.BaseMainActivity.currentAccount; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.util.TypedValue; +import android.view.MenuItem; + +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.preference.PreferenceManager; + +import app.fedilab.android.BaseMainActivity; +import app.fedilab.android.R; +import app.fedilab.android.databinding.ActivityDirectMessageBinding; +import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.StatusCache; +import app.fedilab.android.mastodon.exception.DBException; +import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.helper.MastodonHelper; +import app.fedilab.android.mastodon.ui.drawer.StatusAdapter; +import app.fedilab.android.mastodon.ui.fragment.timeline.FragmentMastodonDirectMessage; +import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; + +public class DirectMessageActivity extends BaseActivity implements FragmentMastodonDirectMessage.FirstMessage { + + public static boolean expand; + public static boolean displayCW; + + Fragment currentFragment; + private Status firstMessage; + private String remote_instance; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ActivityDirectMessageBinding binding = ActivityDirectMessageBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + setSupportActionBar(binding.toolbar); + ActionBar actionBar = getSupportActionBar(); + //Remove title + if (actionBar != null) { + actionBar.setDisplayShowTitleEnabled(false); + } + binding.title.setText(R.string.context_conversation); + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); + float scale = sharedpreferences.getFloat(getString(R.string.SET_FONT_SCALE), 1.1f); + binding.title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale); + + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + } + Bundle b = getIntent().getExtras(); + displayCW = sharedpreferences.getBoolean(getString(R.string.SET_EXPAND_CW), false); + Status focusedStatus = null; // or other values + if (b != null) { + focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS); + remote_instance = b.getString(Helper.ARG_REMOTE_INSTANCE, null); + } + if (focusedStatus == null || currentAccount == null || currentAccount.mastodon_account == null) { + finish(); + return; + } + MastodonHelper.loadPPMastodon(binding.profilePicture, currentAccount.mastodon_account); + Bundle bundle = new Bundle(); + bundle.putSerializable(Helper.ARG_STATUS, focusedStatus); + bundle.putString(Helper.ARG_REMOTE_INSTANCE, remote_instance); + FragmentMastodonDirectMessage FragmentMastodonDirectMessage = new FragmentMastodonDirectMessage(); + FragmentMastodonDirectMessage.firstMessage = this; + currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, FragmentMastodonDirectMessage, bundle, null, null); + StatusesVM timelinesVM = new ViewModelProvider(DirectMessageActivity.this).get(StatusesVM.class); + timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(DirectMessageActivity.this, status -> { + if (status != null) { + StatusCache statusCache = new StatusCache(); + statusCache.instance = BaseMainActivity.currentInstance; + statusCache.user_id = BaseMainActivity.currentUserID; + statusCache.status = status; + statusCache.status_id = status.id; + //Update cache + new Thread(() -> { + try { + new StatusCache(getApplication()).updateIfExists(statusCache); + Handler mainHandler = new Handler(Looper.getMainLooper()); + //Update UI + Runnable myRunnable = () -> StatusAdapter.sendAction(DirectMessageActivity.this, Helper.ARG_STATUS_ACTION, status, null); + mainHandler.post(myRunnable); + } catch (DBException e) { + e.printStackTrace(); + } + }).start(); + } + }); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + return true; + } + return true; + } + + @Override + public void get(Status status) { + firstMessage = status; + invalidateOptionsMenu(); + } +} \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java index 01e1e76d..3192d286 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java @@ -47,6 +47,7 @@ import app.fedilab.android.R; import app.fedilab.android.databinding.DrawerConversationBinding; import app.fedilab.android.databinding.ThumbnailBinding; import app.fedilab.android.mastodon.activities.ContextActivity; +import app.fedilab.android.mastodon.activities.DirectMessageActivity; import app.fedilab.android.mastodon.client.entities.api.Account; import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Conversation; @@ -210,15 +211,26 @@ public class ConversationAdapter extends RecyclerView.Adapter { - Intent intent = new Intent(context, ContextActivity.class); + Intent intent; + if (chatMode) { + intent = new Intent(context, DirectMessageActivity.class); + } else { + intent = new Intent(context, ContextActivity.class); + } intent.putExtra(Helper.ARG_STATUS, conversation.last_status); context.startActivity(intent); }); holder.binding.attachmentsListContainer.setOnTouchListener((v, event) -> { if (event.getAction() == MotionEvent.ACTION_UP) { - Intent intent = new Intent(context, ContextActivity.class); + Intent intent; + if (chatMode) { + intent = new Intent(context, DirectMessageActivity.class); + } else { + intent = new Intent(context, ContextActivity.class); + } intent.putExtra(Helper.ARG_STATUS, conversation.last_status); context.startActivity(intent); } diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java new file mode 100644 index 00000000..9e21a106 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -0,0 +1,106 @@ +package app.fedilab.android.mastodon.ui.drawer; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.activities.MainActivity; +import app.fedilab.android.databinding.DrawerStatusChatBinding; +import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.helper.MastodonHelper; +import app.fedilab.android.mastodon.helper.ThemeHelper; + +public class StatusDirectMessageAdapter extends RecyclerView.Adapter { + + private final List statusList; + private Context context; + private RecyclerView mRecyclerView; + + public StatusDirectMessageAdapter(List data) { + this.statusList = data; + } + + @NotNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) { + context = parent.getContext(); + DrawerStatusChatBinding itemBinding = DrawerStatusChatBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + return new StatusChatViewHolder(itemBinding); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { + + StatusChatViewHolder holder = (StatusChatViewHolder) viewHolder; + Status status = statusList.get(position); + + holder.binding.messageContent.setText( + status.getSpanContent(context, + new WeakReference<>(holder.binding.messageContent), + () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), + TextView.BufferType.SPANNABLE); + + MastodonHelper.loadPPMastodon(holder.binding.userPp, status.account); + holder.binding.date.setText(Helper.longDateToString(status.created_at)); + //Owner account + int textColor; + if (status.account.id.equals(MainActivity.currentUserID)) { + holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_right_tail); + textColor = R.attr.colorOnPrimary; + } else { + holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_left_tail); + textColor = R.attr.colorOnSecondary; + } + holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, textColor)); + holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, textColor)); + holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, textColor)); + } + + @Override + public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + + mRecyclerView = recyclerView; + } + + + @Override + public int getItemCount() { + return statusList.size(); + } + + public static class StatusChatViewHolder extends RecyclerView.ViewHolder { + DrawerStatusChatBinding binding; + + StatusChatViewHolder(DrawerStatusChatBinding itemView) { + super(itemView.getRoot()); + binding = itemView; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java new file mode 100644 index 00000000..c984f68e --- /dev/null +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java @@ -0,0 +1,143 @@ +package app.fedilab.android.mastodon.ui.fragment.timeline; +/* Copyright 2023 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.ArrayList; +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.activities.MainActivity; +import app.fedilab.android.databinding.FragmentPaginationBinding; +import app.fedilab.android.mastodon.client.entities.api.Context; +import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.ui.drawer.StatusDirectMessageAdapter; +import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; + + +public class FragmentMastodonDirectMessage extends Fragment { + + + public FirstMessage firstMessage; + private FragmentPaginationBinding binding; + private StatusesVM statusesVM; + private List statuses; + private StatusDirectMessageAdapter statusDirectMessageAdapter; + //Handle actions that can be done in other fragments + private Status focusedStatus; + private Status firstStatus; + private boolean pullToRefresh; + private String user_token, user_instance; + + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + + focusedStatus = null; + pullToRefresh = false; + if (getArguments() != null) { + focusedStatus = (Status) getArguments().getSerializable(Helper.ARG_STATUS); + } + user_instance = MainActivity.currentInstance; + user_token = MainActivity.currentToken; + + if (focusedStatus == null) { + getChildFragmentManager().beginTransaction().remove(this).commit(); + } + binding = FragmentPaginationBinding.inflate(inflater, container, false); + statusesVM = new ViewModelProvider(FragmentMastodonDirectMessage.this).get(StatusesVM.class); + binding.recyclerView.setNestedScrollingEnabled(true); + this.statuses = new ArrayList<>(); + this.statuses.add(focusedStatus); + statusDirectMessageAdapter = new StatusDirectMessageAdapter(this.statuses); + binding.swipeContainer.setRefreshing(false); + LinearLayoutManager mLayoutManager = new LinearLayoutManager(requireActivity()); + binding.recyclerView.setLayoutManager(mLayoutManager); + binding.recyclerView.setAdapter(statusDirectMessageAdapter); + binding.swipeContainer.setOnRefreshListener(() -> { + if (this.statuses.size() > 0) { + binding.swipeContainer.setRefreshing(true); + pullToRefresh = true; + statusesVM.getContext(user_instance, user_token, focusedStatus.id) + .observe(getViewLifecycleOwner(), this::initializeContextView); + } + }); + if (focusedStatus != null) { + statusesVM.getContext(user_instance, user_token, focusedStatus.id) + .observe(getViewLifecycleOwner(), this::initializeContextView); + } + return binding.getRoot(); + } + + + /** + * Intialize the common view for the context + * + * @param context {@link Context} + */ + private void initializeContextView(final Context context) { + + if (context == null) { + Helper.sendToastMessage(requireActivity(), Helper.RECEIVE_TOAST_TYPE_ERROR, getString(R.string.toast_error)); + return; + } + if (binding == null || !isAdded() || getActivity() == null) { + return; + } + if (pullToRefresh) { + pullToRefresh = false; + int size = this.statuses.size(); + statuses.clear(); + statusDirectMessageAdapter.notifyItemRangeRemoved(0, size); + statuses.add(focusedStatus); + } + if (context.ancestors.size() > 0) { + firstStatus = context.ancestors.get(0); + } else { + firstStatus = statuses.get(0); + } + if (firstMessage != null) { + firstMessage.get(firstStatus); + } + + int statusPosition = context.ancestors.size(); + //Build the array of statuses + statuses.addAll(0, context.ancestors); + statusDirectMessageAdapter.notifyItemRangeInserted(0, statusPosition); + statuses.addAll(statusPosition + 1, context.descendants); + statusDirectMessageAdapter.notifyItemRangeInserted(statusPosition + 1, context.descendants.size()); + if (binding.recyclerView.getItemDecorationCount() > 0) { + for (int i = 0; i < binding.recyclerView.getItemDecorationCount(); i++) { + binding.recyclerView.removeItemDecorationAt(i); + } + } + binding.swipeContainer.setRefreshing(false); + binding.recyclerView.scrollToPosition(statusPosition); + } + + public interface FirstMessage { + void get(Status status); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawables/mastodon/drawable/browser_calls_blocked.xml b/app/src/main/res/drawables/mastodon/drawable/browser_calls_blocked.xml deleted file mode 100644 index 783a0a05..00000000 --- a/app/src/main/res/drawables/mastodon/drawable/browser_calls_blocked.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml index 9ad4629d..125d8c6b 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_left.xml @@ -1,4 +1,3 @@ - diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml index 6a1b0f51..7f93abfd 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml @@ -1,4 +1,3 @@ - diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml index 29fa0820..fa68f846 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml @@ -1,4 +1,3 @@ - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index 8926bbaf..935b0b4a 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -2,6 +2,7 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/menus/mastodon/menu/main_webview.xml b/app/src/main/res/menus/mastodon/menu/main_webview.xml index abc6b247..d9977f82 100644 --- a/app/src/main/res/menus/mastodon/menu/main_webview.xml +++ b/app/src/main/res/menus/mastodon/menu/main_webview.xml @@ -1,14 +1,9 @@ - - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 44ae065a..b0fc7f0f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1029,6 +1029,8 @@ SET_DYNAMICCOLOR SET_CARDVIEW SET_CUSTOMIZE_LIGHT_COLORS + SET_CHAT_FOR_CONVERSATION + SET_CUSTOMIZE_LIGHT_COLORS_ACTION SET_CUSTOMIZE_DARK_COLORS SET_CUSTOMIZE_DARK_COLORS_ACTION From d89c16b3ea587024ed241a9e77db9d60f516f07c Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 11 Feb 2023 18:45:52 +0100 Subject: [PATCH 18/31] Add chat view --- .../ui/drawer/StatusDirectMessageAdapter.java | 18 ++++++++++++++++++ .../layouts/mastodon/layout/drawer_status.xml | 17 +++++------------ .../layout/layout_drawer_attachments.xml | 1 + 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java index 9e21a106..6abc6157 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -17,6 +17,7 @@ package app.fedilab.android.mastodon.ui.drawer; import android.content.Context; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -80,6 +81,23 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter 0) { + holder.binding.media.container.setVisibility(View.VISIBLE); + if (status.media_attachments.size() == 1) { + + } else if (status.media_attachments.size() == 2) { + + } else if (status.media_attachments.size() == 3) { + + } else if (status.media_attachments.size() == 4) { + + } else { + + } + } else { + holder.binding.media.container.setVisibility(View.GONE); + } } @Override diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status.xml index 7428ebd3..bf55ec3d 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status.xml @@ -455,24 +455,17 @@ android:orientation="vertical" android:visibility="gone" /> - + android:visibility="gone" /> - - - From b63c1d9a9c6796cf9aacb5a9a57c7434ef1a7c56 Mon Sep 17 00:00:00 2001 From: claleb Date: Sat, 11 Feb 2023 20:37:34 +0100 Subject: [PATCH 19/31] Translated using Weblate (German) Currently translated at 100.0% (1090 of 1090 strings) Co-authored-by: claleb Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/de/ Translation: Fedilab/Strings --- app/src/main/res/values-de/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6685b087..efe49821 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1003,4 +1003,8 @@ Datum der Aktualisierung Angeheftet Bild der Karte + Der Hashtag wurde gespeichert! + Der Hashtag wurde geändert! + Der Hashtag wurde entfernt! + Hashtags verwalten \ No newline at end of file From 4be8132bbf64a9863a3f9901f8f265917dd66522 Mon Sep 17 00:00:00 2001 From: Poesty Li Date: Sat, 11 Feb 2023 20:37:34 +0100 Subject: [PATCH 20/31] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1090 of 1090 strings) Co-authored-by: Poesty Li Translate-URL: https://hosted.weblate.org/projects/fedilab/strings/zh_Hans/ Translation: Fedilab/Strings --- app/src/main/res/values-zh-rCN/strings.xml | 100 ++++++++++----------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 587b86c0..bc7ab021 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -60,7 +60,7 @@ 定时消息 以下信息可能无法完整反映用户的个人资料。 插入表情符号 - 该应用程序暂时不收集自定义表情符号。 + 应用暂时未收集自定义表情符号。 您确定要注销@%1$s@%2$s 吗? 没有要显示的消息 @@ -74,7 +74,7 @@ 删除 复制 分享 - 提到 + 提及 定时静音 删除并重新起草 @@ -129,9 +129,9 @@ 没有可用的描述! - 发行版 %1$s - 开发商: - 许可: + 发行版本 %1$s + 开发者: + 许可证: GNU GPL V3 源代码: 搜索实例: @@ -159,7 +159,7 @@ \n 点击此处取消帐号静音。 没有可显示的通知 - 提到你 + 提及了您 写了一条新消息 转发了你的状态 喜欢你的状态 @@ -182,7 +182,7 @@ 该消息已添加到您的收藏夹! 该消息已从您的收藏夹中删除! 哎呀!发生错误! - 发生错误!该实例未返回授权码! + 发生错误!实例未返回授权码! 实例域名似乎无效! 在帐号之间切换时发生错误! 搜索时出错! @@ -194,7 +194,7 @@ 当有人关注你时通知 当有人提升您的地位时通知 当有人收藏您的状态时通知 - 当有人提到你时通知 + 当有人提及你时通知 投票结束时通知 通知新职位 转发前显示确认对话框 @@ -242,7 +242,7 @@ 关键词 关键字… - 公开 + 公共 不公开 私密 私信 @@ -283,17 +283,17 @@ 过滤器 无过滤器可显示。您可以通过点击“+”按钮创建一个。 关键字或词组 - 主页时间轴 - 公共时间表 + 主页时间线 + 公共时间线 通知 对话 无论文本中的大小写或消息的内容警告都会被匹配 放下而不是隐藏 过滤后的消息将不可逆转地消失,即使过滤器稍后被删除 当关键字或短语仅为字母数字时,只有在匹配整个单词时才会应用 - 整个词 - 过滤上下文 - 应应用过滤器的一个或多个上下文 + 全词匹配 + 过滤背景 + 一个或多个应适用于过滤器的背景 过期于 删除过滤器? 更新过滤器 @@ -364,7 +364,7 @@ 更改列名 Misskey 实例 热门 - 当地的 + 本地 类别 描述 分享 @@ -377,7 +377,7 @@ 登出帐号 全部 复制链接 - 应用程序阻止的 http 调用 + 应用阻止的 http 调用 被屏蔽的调用列表 提交 使用标签过滤时间线 @@ -463,18 +463,18 @@ 已吊销 权限 停用 - 沉默 + 禁言 帐号 - 撤消沉默 + 撤消禁言 撤消禁用 吊销 撤消吊销 声音的 语音留言 - 在时间段内,应用程序将发送通知。您可以使用右侧的微调器反转(即:静音)此时间段。 - 预览不会在时间轴中被裁剪 + 在时间段内,应用将发送通知。您可以使用右侧的微调器反转(即:静音)此时间段。 + 预览不会在时间线中被裁剪 在提及后自动插入换行符以将第一个字母大写 - 允许内容创建者将状态分享到他们的 RSS 提要 + 允许内容创作者将状态分享到他们的 RSS 订阅源中 撰写 选择 添加实例 @@ -505,7 +505,7 @@ 您的投票不能有重复的选项! 离开时清除缓存 - 离开应用程序时,缓存(媒体、缓存消息、来自内置浏览器的数据)将自动清除。 + 离开应用时,缓存(媒体、缓存消息、来自内置浏览器的数据)将自动清除。 您要取消关注此帐号吗? 取消关注前显示确认对话框 Medium @@ -552,12 +552,12 @@ 此实例在 https://instances.social 上不可用 显示完整链接 分享链接 - 使用其他应用程序打开 + 使用其他应用打开 检查重定向 此 URL 不重定向 %1$s \n\n重定向到\n\n %2$s 删除 UTM 参数 - 在访问链接之前,该应用程序会自动从 URL 中删除 UTM 参数。 + 在访问链接之前,应用会自动从 URL 中删除 UTM 参数。 %d 人正在讨论 Twitter 帐号(来自 Nitter) Twitter 用户名空格分隔 @@ -590,7 +590,7 @@ 删除时间线中的左边距以使消息更紧凑 翻译器 翻译器 API 密钥 - 通过启用该选项,该应用程序将显示额外的功能。此功能适用于 Pleroma、Akkoma 或 Glitch Social 等社交软件 + 通过启用该选项,该应用将显示额外的功能。此功能适用于 Pleroma、Akkoma 或 Glitch Social 等社交软件 通知声音 禁用通知 选择主题的底色是深色还是浅色 @@ -641,20 +641,20 @@ 已确认 近期IP 重启 - 您应该重新启动应用程序以应用更改。 + 您应该重新启动应用以应用更改。 选择器中的语言 允许在撰写消息时减少选择器中的语言列表。 保留通知 通知更新 新注册(监察员) - 该应用程序未找到远程消息。 + 应用未找到远程消息。 已屏蔽域名 域名 使用默认系统语言 - 将在选项卡时间轴中显示新消息的气泡计数器 + 将在选项卡时间线中显示新消息的气泡计数器 %1$s 编辑了 %2$s 它只涉及“公共”回复。启用后,您的回复将自动具有“不公开”可见性,而不是“公开” - 帐号取消静音 + 帐号取消禁言 帐号被禁言 已过滤:%1$s 严重程度 @@ -680,7 +680,7 @@ 选择一个图标 加载导出的设置 单操作栏 - 启用后,该应用程序将只有一个时间轴栏 + 启用后,应用将只有一个时间线栏 显示消息计数器 显示选项 显示计数器 @@ -692,7 +692,7 @@ 私人评论 评论此域名限制供监察员内部使用。 默认深色主题 - 启用后,时间轴中的项目将具有阴影和高程。 + 启用后,时间线中的项目将具有阴影和高程。 版本 您可以安全地将这些图标隐藏在底部以获得更多空间。它们也在子菜单中。 附加功能的图标 @@ -704,14 +704,14 @@ 使用缓存 删除固定的时间线? 域名 - 此域名屏蔽不会阻止在数据库中创建帐号条目,但会追溯并自动对这些帐号应用特定的审核方法。 + 域名屏蔽不会阻止在数据库中创建帐号条目,但会追溯并自动对这些帐号应用特定的审核方法。 正在关注 远程配置文件 您确定取消固定该时间线吗? 用另一个帐号打开 拒绝媒体 拒绝举报 - 沉默将使该帐号的帖子对任何未关注它们的人都是不可见的。吊销将删除帐号的所有内容、媒体和个人资料数据。如果您只想拒绝媒体文件,请勿使用。 + 禁言将使该帐号的帖子对任何未关注它们的人都是不可见的。吊销将删除帐号的所有内容、媒体和个人资料数据。如果您只想拒绝媒体文件,请勿使用。 拒绝媒体文件 忽略来自该域名的所有举报。与吊销无关 拒绝举报 @@ -728,7 +728,7 @@ 该问题不属于其他类别 导出设置 列表中的时间线 - 时间线将被缓存,因此应用程序会更快。 + 时间线将被缓存,因此应用会更快。 加载媒体缩略图 展示媒体 缓存消息 @@ -736,7 +736,7 @@ 开启时,应用会收起相关通知 在通知中显示媒体 更改图标 - 更改设备上应用程序的图标 + 更改设备上应用的图标 取消置顶消息 翻译信息 强制翻译成特定语言。选择第一个值以重置为设备设置 @@ -748,7 +748,7 @@ 已加入 警告 已举报状态 - 已沉默 + 已禁言 用户 监察员 分配给我 @@ -758,7 +758,7 @@ 帐号已禁用 举报 状态 - 重启应用程序? + 重启应用? 取消关注标签 您确定要取消关注此标签吗? 取消关注 @@ -776,14 +776,14 @@ 完全隐藏过滤后的内容,表现得好像不存在一样 主页和列表 标题 - 该应用程序找不到远程数据! + 应用找不到远程数据! 提交举报 发送举报 取消屏蔽域名 您没有屏蔽域名 您确定取消屏蔽 %1$s 吗? 隐私政策 - 删除固定的时间轴? + 删除固定的时间线? 未确认 告诉我们这个帖子是怎么回事 管理员 @@ -798,7 +798,7 @@ 解决 帐号已吊销 写下要关注的标签 - + 新增 为 Reddit 使用替代前端 Reddit 前端域名 Reddit @@ -820,14 +820,14 @@ 帐号可发现 文件缓存大小 导入设置 - 显示时间表 + 显示时间线 获取通知 打开原始消息 - 记住时间轴位置 + 记住时间线位置 将显示转发和收藏通知中的媒体 - 建议 + 推荐 列表 - 该应用程序将公开显示配置文件以获取所有消息。交互将需要一个额外的步骤来联合消息。 + 应用将公开显示配置文件以获取所有消息。交互将需要一个额外的步骤来联合消息。 仅限本地 用于媒体的 Pixelfed 演示文稿 紧凑操作按钮 @@ -960,11 +960,11 @@ 主页时间线的所有帐号都将被静音。 全部静音 导入数据 - 在主页时间线中群组转发 + 在主页时间线中聚合转发 管理帐号 删除左边距 翻译器 - 译者版 + 翻译器版本 额外功能 图标可见性 显示“引用”按钮 @@ -975,16 +975,16 @@ 自己 显示转发的原始日期 禁用发行说明 - 发布新版本时,您不会在应用程序内部收到提醒。 + 发布新版本时,您不会在应用内部收到提醒。 公式 - 写公式 + 撰写公式 数学格式 有链接预览时隐藏单个媒体 更改订阅的语言 过滤语言 翻译成 撰写 - 您的 Peertube 太旧,应用程序不支持。 + 您的 Peertube 太旧,应用不支持。 自定义时间线 关注者: 双因素身份验证令牌 @@ -993,7 +993,7 @@ 获取主页消息 主页获取延迟 获取主页消息每隔 - 自动获取缺失的消息 + 自动获取缺失消息 置顶提及 回复时提及将全部添加到消息的开头 已置顶 From 0405e1e29f8e30cc9e8e8b25b5c62d67970b5025 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 12 Feb 2023 12:12:35 +0100 Subject: [PATCH 21/31] Change media --- .../ui/drawer/NotificationAdapter.java | 2 +- .../mastodon/ui/drawer/StatusAdapter.java | 122 ++++++--- .../ui/drawer/StatusDirectMessageAdapter.java | 257 +++++++++++++++--- .../mastodon/layout/drawer_status_chat.xml | 1 + .../layout/layout_drawer_attachments.xml | 125 ++++----- .../layouts/mastodon/layout/layout_media.xml | 21 +- 6 files changed, 372 insertions(+), 156 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java index 3b779d53..2301f509 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java @@ -402,7 +402,7 @@ public class NotificationAdapter extends RecyclerView.Adapter LinearLayoutCompat.MarginLayoutParams pmc = (LinearLayoutCompat.MarginLayoutParams) holder.binding.mediaContainer.getLayoutParams(); pmc.setMarginStart((int) Helper.convertDpToPixel(6, context)); holder.binding.mediaContainer.setLayoutParams(pmc); - LinearLayoutCompat.MarginLayoutParams pal = (LinearLayoutCompat.MarginLayoutParams) holder.binding.attachmentsListContainer.getLayoutParams(); + LinearLayoutCompat.MarginLayoutParams pal = (LinearLayoutCompat.MarginLayoutParams) holder.binding.media.mediaContainer.getLayoutParams(); pal.setMarginStart((int) Helper.convertDpToPixel(6, context)); - holder.binding.attachmentsListContainer.setLayoutParams(pal); + holder.binding.media.mediaContainer.setLayoutParams(pal); LinearLayoutCompat.MarginLayoutParams pp = (LinearLayoutCompat.MarginLayoutParams) holder.binding.poll.pollContainer.getLayoutParams(); pp.setMarginStart((int) Helper.convertDpToPixel(6, context)); holder.binding.poll.pollContainer.setLayoutParams(pp); @@ -1372,7 +1372,7 @@ public class StatusAdapter extends RecyclerView.Adapter boolean cardDisplayed = (statusToDeal.card != null && (display_card || statusToDeal.isFocused) && statusToDeal.quote_id == null); if (statusToDeal.media_attachments != null && statusToDeal.media_attachments.size() > 0 && (!hideSingleMediaWithCard || !cardDisplayed || statusToDeal.media_attachments.size() > 1)) { - holder.binding.attachmentsList.removeAllViews(); + holder.binding.mediaContainer.removeAllViews(); if ((loadMediaType.equals("ASK") || (loadMediaType.equals("WIFI") && !TimelineHelper.isOnWIFI(context))) && !statusToDeal.canLoadMedia) { holder.binding.mediaContainer.setVisibility(View.GONE); @@ -1385,10 +1385,73 @@ public class StatusAdapter extends RecyclerView.Adapter }); } else { int mediaPosition = 1; - boolean singleMedia = statusToDeal.media_attachments.size() == 1; + if (!fullAttachement) { + int defaultHeight = (int) Helper.convertDpToPixel(300, context); + if (measuredWidth > 0) { + defaultHeight = (int) (measuredWidth * 3) / 4; + } + LinearLayoutCompat.LayoutParams lp = new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, defaultHeight); + holder.binding.media.mediaContainer.setLayoutParams(lp); + if (statusToDeal.media_attachments.size() == 1) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (statusToDeal.media_attachments.size() == 2) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (statusToDeal.media_attachments.size() == 3) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (statusToDeal.media_attachments.size() == 4) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (statusToDeal.media_attachments.size() > 4) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.VISIBLE); + } + } for (Attachment attachment : statusToDeal.media_attachments) { - LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context)); + + if (fullAttachement) { + + } + LayoutMediaBinding layoutMediaBinding = null; + + + if ((fullAttachement && (!statusToDeal.sensitive || expand_media))) { + layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context)); + holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot()); + } else { + if (mediaPosition == 1) { + layoutMediaBinding = holder.binding.media.media1Container; + } else if (mediaPosition == 2 && statusToDeal.media_attachments.size() == 3) { + layoutMediaBinding = holder.binding.media.media3Container; + } else if (mediaPosition == 2) { + layoutMediaBinding = holder.binding.media.media2Container; + } else if (mediaPosition == 3 && statusToDeal.media_attachments.size() == 3) { + layoutMediaBinding = holder.binding.media.media4Container; + } else if (mediaPosition == 3) { + layoutMediaBinding = holder.binding.media.media3Container; + } else if (mediaPosition == 4) { + layoutMediaBinding = holder.binding.media.media4Container; + } + } if (fullAttachement && (!statusToDeal.sensitive || expand_media)) { + float ratio = 1.0f; float mediaH = -1.0f; float mediaW = -1.0f; @@ -1399,30 +1462,29 @@ public class StatusAdapter extends RecyclerView.Adapter ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f; } } - loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, mediaW, mediaH, ratio, statusToDeal, attachment, singleMedia); + loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, mediaW, mediaH, ratio, statusToDeal, attachment); } else { - loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, -1.f, -1.f, -1.f, statusToDeal, attachment, singleMedia); + if (layoutMediaBinding != null) { + loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, -1.f, -1.f, -1.f, statusToDeal, attachment); + } } + + mediaPosition++; - if ((fullAttachement && (!statusToDeal.sensitive || expand_media)) || singleMedia) { - holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot()); - } else { - holder.binding.attachmentsList.addView(layoutMediaBinding.getRoot()); - } } - if ((!fullAttachement || statusToDeal.sensitive) && !singleMedia) { + if (!fullAttachement || statusToDeal.sensitive) { holder.binding.mediaContainer.setVisibility(View.GONE); - holder.binding.attachmentsListContainer.setVisibility(View.VISIBLE); + holder.binding.media.mediaContainer.setVisibility(View.VISIBLE); } else { holder.binding.mediaContainer.setVisibility(View.VISIBLE); - holder.binding.attachmentsListContainer.setVisibility(View.GONE); + holder.binding.media.mediaContainer.setVisibility(View.GONE); } } } else { holder.binding.displayMedia.setVisibility(View.GONE); holder.binding.mediaContainer.setVisibility(View.GONE); - holder.binding.attachmentsListContainer.setVisibility(View.GONE); + holder.binding.media.mediaContainer.setVisibility(View.GONE); } holder.binding.statusContent.setMovementMethod(LongClickLinkMovementMethod.getInstance()); holder.binding.reblogInfo.setOnClickListener(v -> { @@ -2202,9 +2264,9 @@ public class StatusAdapter extends RecyclerView.Adapter } } - private static RequestBuilder prepareRequestBuilder(Context context, Attachment attachment, - float mediaW, float mediaH, - float focusX, float focusY, boolean isSensitive, boolean isArt) { + public static RequestBuilder prepareRequestBuilder(Context context, Attachment attachment, + float mediaW, float mediaH, + float focusX, float focusY, boolean isSensitive, boolean isArt) { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); boolean fullAttachement = sharedpreferences.getBoolean(context.getString(R.string.SET_FULL_PREVIEW), false); @@ -2249,7 +2311,7 @@ public class StatusAdapter extends RecyclerView.Adapter StatusViewHolder holder, RecyclerView.Adapter adapter, int mediaPosition, float mediaW, float mediaH, float ratio, - Status statusToDeal, Attachment attachment, boolean singleImage) { + Status statusToDeal, Attachment attachment) { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5); boolean fullAttachement = sharedpreferences.getBoolean(context.getString(R.string.SET_FULL_PREVIEW), false); @@ -2257,24 +2319,15 @@ public class StatusAdapter extends RecyclerView.Adapter boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false); LinearLayout.LayoutParams lp; - int defaultHeight = (int) Helper.convertDpToPixel(200, context); - if (measuredWidth > 0) { - defaultHeight = (int) (measuredWidth * 3) / 4; - } + if (fullAttachement && mediaH > 0 && (!statusToDeal.sensitive || expand_media)) { lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio)); layoutMediaBinding.media.setScaleType(ImageView.ScaleType.FIT_CENTER); } else { - if (singleImage) { - lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, defaultHeight); - } else { - //noinspection SuspiciousNameCombination - lp = new LinearLayout.LayoutParams(defaultHeight, defaultHeight); - } + lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutMediaBinding.media.setScaleType(ImageView.ScaleType.CENTER_CROP); } - layoutMediaBinding.media.setLayoutParams(lp); float focusX = 0.f; @@ -2283,10 +2336,7 @@ public class StatusAdapter extends RecyclerView.Adapter focusX = statusToDeal.media_attachments.get(0).meta.focus.x; focusY = statusToDeal.media_attachments.get(0).meta.focus.y; } - layoutMediaBinding.count.setVisibility(View.VISIBLE); - if ((!fullAttachement || statusToDeal.sensitive) && !singleImage) { - layoutMediaBinding.count.setText(String.format(Locale.getDefault(), "%d/%d", mediaPosition, statusToDeal.media_attachments.size())); - } + if (attachment.description != null && attachment.description.trim().length() > 0) { layoutMediaBinding.media.setContentDescription(attachment.description.trim()); } @@ -2366,7 +2416,7 @@ public class StatusAdapter extends RecyclerView.Adapter adapter.notifyItemChanged(holder.getBindingAdapterPosition()); }); - if ((!statusToDeal.sensitive || expand_media) && (fullAttachement || singleImage)) { + if ((!statusToDeal.sensitive || expand_media) && (fullAttachement)) { layoutMediaBinding.getRoot().setPadding(0, 0, 0, 10); } else { layoutMediaBinding.getRoot().setPadding(0, 0, 10, 0); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java index 6abc6157..a209f096 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -15,26 +15,46 @@ package app.fedilab.android.mastodon.ui.drawer; * see . */ +import static app.fedilab.android.mastodon.ui.drawer.StatusAdapter.prepareRequestBuilder; + +import android.app.Activity; import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.CountDownTimer; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.core.app.ActivityOptionsCompat; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; +import com.bumptech.glide.RequestBuilder; + import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.DrawerStatusChatBinding; +import app.fedilab.android.databinding.LayoutMediaBinding; +import app.fedilab.android.mastodon.activities.MediaActivity; +import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.MastodonHelper; +import app.fedilab.android.mastodon.helper.MediaHelper; import app.fedilab.android.mastodon.helper.ThemeHelper; public class StatusDirectMessageAdapter extends RecyclerView.Adapter { @@ -42,7 +62,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter statusList; private Context context; private RecyclerView mRecyclerView; - + private static float measuredWidth = -1; public StatusDirectMessageAdapter(List data) { this.statusList = data; } @@ -55,49 +75,108 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter adapter, + int mediaPosition, float mediaW, float mediaH, float ratio, + Status statusToDeal, Attachment attachment) { + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); + final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5); + boolean long_press_media = sharedpreferences.getBoolean(context.getString(R.string.SET_LONG_PRESS_STORE_MEDIA), false); + boolean expand_media = sharedpreferences.getBoolean(context.getString(R.string.SET_EXPAND_MEDIA), false); - StatusChatViewHolder holder = (StatusChatViewHolder) viewHolder; - Status status = statusList.get(position); + LinearLayout.LayoutParams lp; - holder.binding.messageContent.setText( - status.getSpanContent(context, - new WeakReference<>(holder.binding.messageContent), - () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), - TextView.BufferType.SPANNABLE); + lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + layoutMediaBinding.media.setScaleType(ImageView.ScaleType.CENTER_CROP); - MastodonHelper.loadPPMastodon(holder.binding.userPp, status.account); - holder.binding.date.setText(Helper.longDateToString(status.created_at)); - //Owner account - int textColor; - if (status.account.id.equals(MainActivity.currentUserID)) { - holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_right_tail); - textColor = R.attr.colorOnPrimary; - } else { - holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_left_tail); - textColor = R.attr.colorOnSecondary; + layoutMediaBinding.media.setLayoutParams(lp); + + float focusX = 0.f; + float focusY = 0.f; + if (statusToDeal.media_attachments.get(0).meta != null && statusToDeal.media_attachments.get(0).meta.focus != null) { + focusX = statusToDeal.media_attachments.get(0).meta.focus.x; + focusY = statusToDeal.media_attachments.get(0).meta.focus.y; } - holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, textColor)); - holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, textColor)); - holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, textColor)); - - if (status.media_attachments != null && status.media_attachments.size() > 0) { - holder.binding.media.container.setVisibility(View.VISIBLE); - if (status.media_attachments.size() == 1) { - - } else if (status.media_attachments.size() == 2) { - - } else if (status.media_attachments.size() == 3) { - - } else if (status.media_attachments.size() == 4) { - - } else { - + if (attachment.description != null && attachment.description.trim().length() > 0) { + layoutMediaBinding.media.setContentDescription(attachment.description.trim()); + } + String finalUrl; + if (attachment.url == null) { + finalUrl = attachment.remote_url; + } else { + finalUrl = attachment.url; + } + layoutMediaBinding.media.setOnLongClickListener(v -> { + if (long_press_media) { + MediaHelper.manageMove(context, finalUrl, false); } + return true; + }); + + if (attachment.type != null && (attachment.type.equalsIgnoreCase("video") || attachment.type.equalsIgnoreCase("gifv"))) { + layoutMediaBinding.playVideo.setVisibility(View.VISIBLE); } else { - holder.binding.media.container.setVisibility(View.GONE); + layoutMediaBinding.playVideo.setVisibility(View.GONE); } + if (attachment.type != null && attachment.type.equalsIgnoreCase("audio")) { + layoutMediaBinding.playMusic.setVisibility(View.VISIBLE); + } else { + layoutMediaBinding.playMusic.setVisibility(View.GONE); + } + if (attachment.description != null && !attachment.description.isEmpty()) { + layoutMediaBinding.viewDescription.setVisibility(View.VISIBLE); + } else { + layoutMediaBinding.viewDescription.setVisibility(View.GONE); + } + + RequestBuilder requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, statusToDeal.sensitive, false); + if (!statusToDeal.sensitive || expand_media) { + layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24); + } else { + layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_off_24); + } + requestBuilder.load(attachment.preview_url).into(layoutMediaBinding.media); + if (statusToDeal.sensitive) { + Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, ThemeHelper.getAttColor(context, R.attr.colorError)); + } else { + Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, R.color.white); + } + + layoutMediaBinding.media.setOnClickListener(v -> { + if (statusToDeal.sensitive && !expand_media) { + statusToDeal.sensitive = false; + int position = holder.getBindingAdapterPosition(); + adapter.notifyItemChanged(position); + + if (timeout > 0) { + new CountDownTimer((timeout * 1000L), 1000) { + public void onTick(long millisUntilFinished) { + } + + public void onFinish() { + statusToDeal.sensitive = true; + adapter.notifyItemChanged(position); + } + }.start(); + } + return; + } + Intent mediaIntent = new Intent(context, MediaActivity.class); + Bundle b = new Bundle(); + b.putInt(Helper.ARG_MEDIA_POSITION, mediaPosition); + b.putSerializable(Helper.ARG_MEDIA_ARRAY, new ArrayList<>(statusToDeal.media_attachments)); + mediaIntent.putExtras(b); + ActivityOptionsCompat options = ActivityOptionsCompat + .makeSceneTransitionAnimation((Activity) context, layoutMediaBinding.media, statusToDeal.media_attachments.get(0).url); + // start the new activity + context.startActivity(mediaIntent, options.toBundle()); + }); + layoutMediaBinding.viewHide.setOnClickListener(v -> { + statusToDeal.sensitive = !statusToDeal.sensitive; + adapter.notifyItemChanged(holder.getBindingAdapterPosition()); + }); + } @Override @@ -121,4 +200,108 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter(holder.binding.messageContent), + () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), + TextView.BufferType.SPANNABLE); + if (measuredWidth <= 0 && status.media_attachments != null && status.media_attachments.size() > 0) { + holder.binding.media.mediaContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + holder.binding.media.mediaContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this); + measuredWidth = holder.binding.media.mediaContainer.getWidth(); + notifyItemChanged(0, statusList.size()); + } + }); + } + MastodonHelper.loadPPMastodon(holder.binding.userPp, status.account); + holder.binding.date.setText(Helper.longDateToString(status.created_at)); + //Owner account + int textColor; + if (status.account.id.equals(MainActivity.currentUserID)) { + holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_right_tail); + textColor = R.attr.colorOnPrimary; + } else { + holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_left_tail); + textColor = R.attr.colorOnSecondary; + } + holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, textColor)); + holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, textColor)); + holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, textColor)); + + if (status.media_attachments != null && status.media_attachments.size() > 0) { + holder.binding.media.mediaContainer.setVisibility(View.VISIBLE); + int mediaPosition = 1; + + int defaultHeight = (int) Helper.convertDpToPixel(300, context); + if (measuredWidth > 0) { + defaultHeight = (int) (measuredWidth * 3) / 4; + } + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, defaultHeight); + holder.binding.media.mediaContainer.setLayoutParams(lp); + if (status.media_attachments.size() == 1) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (status.media_attachments.size() == 2) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (status.media_attachments.size() == 3) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.GONE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (status.media_attachments.size() == 4) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.GONE); + } else if (status.media_attachments.size() > 4) { + holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media2Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media3Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.media4Container.mediaRoot.setVisibility(View.VISIBLE); + holder.binding.media.moreMedia.setVisibility(View.VISIBLE); + } + for (Attachment attachment : status.media_attachments) { + LayoutMediaBinding layoutMediaBinding = null; + if (mediaPosition == 1) { + layoutMediaBinding = holder.binding.media.media1Container; + } else if (mediaPosition == 2 && status.media_attachments.size() == 3) { + layoutMediaBinding = holder.binding.media.media3Container; + } else if (mediaPosition == 2) { + layoutMediaBinding = holder.binding.media.media2Container; + } else if (mediaPosition == 3 && status.media_attachments.size() == 3) { + layoutMediaBinding = holder.binding.media.media4Container; + } else if (mediaPosition == 3) { + layoutMediaBinding = holder.binding.media.media3Container; + } else if (mediaPosition == 4) { + layoutMediaBinding = holder.binding.media.media4Container; + } + if (layoutMediaBinding != null) { + loadAndAddAttachment(context, layoutMediaBinding, holder, this, mediaPosition, -1.f, -1.f, -1.f, status, attachment); + } + + + mediaPosition++; + } + } else { + holder.binding.media.mediaContainer.setVisibility(View.GONE); + } + } } \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index 935b0b4a..209c470d 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -55,6 +55,7 @@ tools:text="@tools:sample/lorem/random" /> - + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/media_container" + android:layout_height="300dp"> - + android:layout_margin="1dp" + app:layout_constraintBottom_toTopOf="@+id/media3_container" + app:layout_constraintEnd_toStartOf="@+id/media2_container" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - + android:visibility="gone" + app:layout_constraintBottom_toTopOf="@+id/media4_container" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/media1_container" + app:layout_constraintTop_toTopOf="parent" /> - + - - + - - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/layout_media.xml b/app/src/main/res/layouts/mastodon/layout/layout_media.xml index d1000e1f..b92359f2 100644 --- a/app/src/main/res/layouts/mastodon/layout/layout_media.xml +++ b/app/src/main/res/layouts/mastodon/layout/layout_media.xml @@ -4,13 +4,15 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/media_root" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="match_parent"> - \ No newline at end of file From dec4dd85a8e37d1c514ec8d1434f1da93449716e Mon Sep 17 00:00:00 2001 From: 0xd9a <0xd9a@noreply.codeberg.org> Date: Sun, 12 Feb 2023 17:49:29 +0530 Subject: [PATCH 22/31] Add bottom compose layout --- .../mastodon/layout/layout_bottom_compose.xml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/src/main/res/layouts/mastodon/layout/layout_bottom_compose.xml diff --git a/app/src/main/res/layouts/mastodon/layout/layout_bottom_compose.xml b/app/src/main/res/layouts/mastodon/layout/layout_bottom_compose.xml new file mode 100644 index 00000000..a7911056 --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/layout_bottom_compose.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + From 9f4fb208a0fed4faaf09a26cd1444dd900d37289 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 Feb 2023 15:32:49 +0100 Subject: [PATCH 23/31] prepare views --- .../ui/drawer/StatusDirectMessageAdapter.java | 7 +- .../FragmentMastodonDirectMessage.java | 6 +- .../mastodon/layout/drawer_status_chat.xml | 16 ++- .../layout/fragment_direct_message.xml | 107 ++++++++++++++++++ .../layout/layout_drawer_attachments.xml | 4 + 5 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/layouts/mastodon/layout/fragment_direct_message.xml diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java index a209f096..ab2947c5 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -33,6 +33,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.app.ActivityOptionsCompat; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; @@ -236,6 +237,10 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter(holder.binding.userName)), + TextView.BufferType.SPANNABLE); if (status.media_attachments != null && status.media_attachments.size() > 0) { holder.binding.media.mediaContainer.setVisibility(View.VISIBLE); @@ -245,7 +250,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter 0) { defaultHeight = (int) (measuredWidth * 3) / 4; } - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, defaultHeight); + LinearLayoutCompat.LayoutParams lp = new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, defaultHeight); holder.binding.media.mediaContainer.setLayoutParams(lp); if (status.media_attachments.size() == 1) { holder.binding.media.media1Container.mediaRoot.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java index c984f68e..bbb18e0b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java @@ -29,7 +29,7 @@ import java.util.List; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; -import app.fedilab.android.databinding.FragmentPaginationBinding; +import app.fedilab.android.databinding.FragmentDirectMessageBinding; import app.fedilab.android.mastodon.client.entities.api.Context; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.helper.Helper; @@ -41,7 +41,7 @@ public class FragmentMastodonDirectMessage extends Fragment { public FirstMessage firstMessage; - private FragmentPaginationBinding binding; + private FragmentDirectMessageBinding binding; private StatusesVM statusesVM; private List statuses; private StatusDirectMessageAdapter statusDirectMessageAdapter; @@ -66,7 +66,7 @@ public class FragmentMastodonDirectMessage extends Fragment { if (focusedStatus == null) { getChildFragmentManager().beginTransaction().remove(this).commit(); } - binding = FragmentPaginationBinding.inflate(inflater, container, false); + binding = FragmentDirectMessageBinding.inflate(inflater, container, false); statusesVM = new ViewModelProvider(FragmentMastodonDirectMessage.this).get(StatusesVM.class); binding.recyclerView.setNestedScrollingEnabled(true); this.statuses = new ArrayList<>(); diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index 209c470d..bc8e98f5 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -54,12 +54,20 @@ app:layout_constraintTop_toBottomOf="@+id/user_pp" tools:text="@tools:sample/lorem/random" /> - + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/message_content"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/fragment_direct_message.xml b/app/src/main/res/layouts/mastodon/layout/fragment_direct_message.xml new file mode 100644 index 00000000..81be1b9c --- /dev/null +++ b/app/src/main/res/layouts/mastodon/layout/fragment_direct_message.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml index 631b2b30..020b1fb3 100644 --- a/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml +++ b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml @@ -24,6 +24,7 @@ android:layout_margin="1dp" android:layout_height="0dp" android:visibility="gone" + tools:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/media4_container" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/media1_container" @@ -35,6 +36,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="1dp" + tools:visibility="visible" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/media4_container" @@ -48,6 +50,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="1dp" + tools:visibility="visible" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -58,6 +61,7 @@ android:id="@+id/more_media" android:layout_width="0dp" android:layout_height="0dp" + tools:visibility="visible" android:background="#88000000" android:gravity="center" android:textColor="@color/white" From 0a1c4f766d25a5f8183fa4416c626d2d3b67ef01 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 Feb 2023 15:34:56 +0100 Subject: [PATCH 24/31] forward tag set to true --- .../app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index 41e110ad..cbc4d952 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -1324,7 +1324,7 @@ public class ComposeAdapter extends RecyclerView.Adapter Date: Mon, 13 Feb 2023 16:11:34 +0100 Subject: [PATCH 25/31] Fix some crashes --- .../app/fedilab/android/BaseMainActivity.java | 2 +- .../mastodon/activities/MediaActivity.java | 4 +++- .../peertube/activities/PeertubeMainActivity.java | 15 +++++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java index df53fc82..daa98015 100644 --- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java @@ -478,7 +478,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt if (!activity.isDestroyed() && !activity.isFinishing() && url != null) { if (url.trim().isEmpty()) { BitmapDrawable avatar = new AvatarGenerator.AvatarBuilder(activity) - .setLabel(account.peertube_account.getAcct()) + .setLabel(acct) .setAvatarSize(120) .setTextSize(30) .toSquare() diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java index db986092..e5fe7591 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/MediaActivity.java @@ -126,8 +126,10 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload getSupportActionBar().setDisplayShowHomeEnabled(true); } - if (attachments == null || attachments.size() == 0) + if (attachments == null || attachments.size() == 0) { finish(); + return; + } setTitle(""); diff --git a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java index 8596ade3..066d978e 100644 --- a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java +++ b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeMainActivity.java @@ -166,7 +166,7 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity { badgeCount = 0; headerMenuOpen = false; binding.navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - + startInForeground(); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayShowTitleEnabled(false); } @@ -377,7 +377,7 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity { peertubeInformation.setPrivacies(new LinkedHashMap<>()); peertubeInformation.setPlaylistPrivacies(new LinkedHashMap<>()); peertubeInformation.setTranslations(new LinkedHashMap<>()); - startInForeground(); + //noinspection ConstantConditions if (BuildConfig.FLAVOR.compareTo("playstore") == 0) { @@ -417,10 +417,13 @@ public class PeertubeMainActivity extends PeertubeBaseMainActivity { private void startInForeground() { Intent notificationIntent = new Intent(this, RetrieveInfoService.class); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - startForegroundService(notificationIntent); - } else { - startService(notificationIntent); + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(notificationIntent); + } else { + startService(notificationIntent); + } + } catch (Exception ignored) { } } From bbf40df10ef256ed119b765b066800ae3ebde9eb Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 Feb 2023 18:54:20 +0100 Subject: [PATCH 26/31] Some improvements --- .../activities/DirectMessageActivity.java | 30 +- .../mastodon/ui/drawer/ComposeAdapter.java | 2 +- .../ui/drawer/ConversationAdapter.java | 2 +- .../ui/drawer/StatusDirectMessageAdapter.java | 8 + .../FragmentMastodonDirectMessage.java | 564 +++++++++++++++++- .../layout/activity_direct_message.xml | 8 +- .../mastodon/layout/drawer_status_chat.xml | 14 +- .../layout/fragment_direct_message.xml | 126 +++- 8 files changed, 714 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java index 5af65c45..92bad7d6 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/DirectMessageActivity.java @@ -16,8 +16,12 @@ package app.fedilab.android.mastodon.activities; import static app.fedilab.android.BaseMainActivity.currentAccount; +import static app.fedilab.android.mastodon.activities.ComposeActivity.PICK_MEDIA; +import android.content.ClipData; +import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -25,10 +29,12 @@ import android.util.TypedValue; import android.view.MenuItem; import androidx.appcompat.app.ActionBar; -import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.preference.PreferenceManager; +import java.util.ArrayList; +import java.util.List; + import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.databinding.ActivityDirectMessageBinding; @@ -46,7 +52,7 @@ public class DirectMessageActivity extends BaseActivity implements FragmentMasto public static boolean expand; public static boolean displayCW; - Fragment currentFragment; + FragmentMastodonDirectMessage currentFragment; private Status firstMessage; private String remote_instance; @@ -88,7 +94,7 @@ public class DirectMessageActivity extends BaseActivity implements FragmentMasto bundle.putString(Helper.ARG_REMOTE_INSTANCE, remote_instance); FragmentMastodonDirectMessage FragmentMastodonDirectMessage = new FragmentMastodonDirectMessage(); FragmentMastodonDirectMessage.firstMessage = this; - currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, FragmentMastodonDirectMessage, bundle, null, null); + currentFragment = (FragmentMastodonDirectMessage) Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, FragmentMastodonDirectMessage, bundle, null, null); StatusesVM timelinesVM = new ViewModelProvider(DirectMessageActivity.this).get(StatusesVM.class); timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(DirectMessageActivity.this, status -> { if (status != null) { @@ -114,6 +120,24 @@ public class DirectMessageActivity extends BaseActivity implements FragmentMasto } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + List uris = new ArrayList<>(); + if (requestCode >= PICK_MEDIA && resultCode == RESULT_OK) { + ClipData clipData = data.getClipData(); + if (clipData != null) { + for (int i = 0; i < clipData.getItemCount(); i++) { + ClipData.Item item = clipData.getItemAt(i); + uris.add(item.getUri()); + } + } else { + uris.add(data.getData()); + } + currentFragment.addAttachment(uris); + } + } + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index cbc4d952..5cec5fac 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -137,7 +137,7 @@ import es.dmoral.toasty.Toasty; public class ComposeAdapter extends RecyclerView.Adapter { private static final int searchDeep = 15; - private static final int TYPE_COMPOSE = 1; + public static final int TYPE_COMPOSE = 1; public static boolean autocomplete = false; public static String[] ALPHA = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "!", ",", "?", diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java index 3192d286..29cb0df8 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java @@ -211,7 +211,7 @@ public class ConversationAdapter extends RecyclerView.Adapter { Intent intent; if (chatMode) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java index ab2947c5..1659e6e3 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -54,6 +54,7 @@ import app.fedilab.android.mastodon.activities.MediaActivity; import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.helper.LongClickLinkMovementMethod; import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.helper.MediaHelper; import app.fedilab.android.mastodon.helper.ThemeHelper; @@ -213,6 +214,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter(holder.binding.messageContent), () -> mRecyclerView.post(() -> notifyItemChanged(holder.getBindingAdapterPosition()))), TextView.BufferType.SPANNABLE); + holder.binding.messageContent.setMovementMethod(LongClickLinkMovementMethod.getInstance()); if (measuredWidth <= 0 && status.media_attachments != null && status.media_attachments.size() > 0) { holder.binding.media.mediaContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override @@ -227,13 +229,19 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter. */ +import static app.fedilab.android.BaseMainActivity.currentAccount; +import static app.fedilab.android.BaseMainActivity.currentInstance; +import static app.fedilab.android.BaseMainActivity.currentToken; +import static app.fedilab.android.BaseMainActivity.currentUserID; +import static app.fedilab.android.BaseMainActivity.instanceInfo; +import static app.fedilab.android.mastodon.activities.ComposeActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE; + +import android.Manifest; +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.text.InputFilter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.work.Data; +import androidx.work.OneTimeWorkRequest; +import androidx.work.OutOfQuotaPolicy; +import androidx.work.WorkManager; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; +import app.fedilab.android.databinding.ComposeAttachmentItemBinding; import app.fedilab.android.databinding.FragmentDirectMessageBinding; +import app.fedilab.android.databinding.PopupMediaDescriptionBinding; +import app.fedilab.android.mastodon.activities.ComposeActivity; +import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Context; +import app.fedilab.android.mastodon.client.entities.api.Mention; import app.fedilab.android.mastodon.client.entities.api.Status; +import app.fedilab.android.mastodon.client.entities.app.StatusDraft; +import app.fedilab.android.mastodon.exception.DBException; import app.fedilab.android.mastodon.helper.Helper; +import app.fedilab.android.mastodon.helper.ThemeHelper; +import app.fedilab.android.mastodon.imageeditor.EditImageActivity; +import app.fedilab.android.mastodon.jobs.ComposeWorker; +import app.fedilab.android.mastodon.services.ThreadMessageService; import app.fedilab.android.mastodon.ui.drawer.StatusDirectMessageAdapter; import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; @@ -51,6 +100,24 @@ public class FragmentMastodonDirectMessage extends Fragment { private boolean pullToRefresh; private String user_token, user_instance; + private final BroadcastReceiver broadcast_data = new BroadcastReceiver() { + @Override + public void onReceive(android.content.Context context, Intent intent) { + Bundle b = intent.getExtras(); + if (b != null) { + + if (b.getBoolean(Helper.RECEIVE_NEW_MESSAGE, false)) { + Status statusReceived = (Status) b.getSerializable(Helper.RECEIVE_STATUS_ACTION); + if (statusReceived != null) { + statuses.add(statusReceived); + statusDirectMessageAdapter.notifyItemInserted(statuses.size() - 1); + initiliazeStatus(); + } + } + } + } + }; + private Status statusCompose; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -88,10 +155,501 @@ public class FragmentMastodonDirectMessage extends Fragment { statusesVM.getContext(user_instance, user_token, focusedStatus.id) .observe(getViewLifecycleOwner(), this::initializeContextView); } + + statusCompose = new Status(); + binding.buttonAttach.setOnClickListener(v -> { + + if (instanceInfo.configuration.media_attachments.supported_mime_types != null) { + if (instanceInfo.getMimeTypeAudio().size() == 0) { + binding.buttonAttachAudio.setEnabled(false); + } + if (instanceInfo.getMimeTypeImage().size() == 0) { + binding.buttonAttachImage.setEnabled(false); + } + if (instanceInfo.getMimeTypeVideo().size() == 0) { + binding.buttonAttachVideo.setEnabled(false); + } + if (instanceInfo.getMimeTypeOther().size() == 0) { + binding.buttonAttachManual.setEnabled(false); + } + } + binding.attachmentChoicesPanel.setVisibility(View.VISIBLE); + binding.buttonAttach.setChecked(false); + }); + binding.buttonAttachAudio.setOnClickListener(v -> { + binding.attachmentChoicesPanel.setVisibility(View.GONE); + pickupMedia(ComposeActivity.mediaType.AUDIO); + }); + binding.buttonAttachImage.setOnClickListener(v -> { + binding.attachmentChoicesPanel.setVisibility(View.GONE); + pickupMedia(ComposeActivity.mediaType.PHOTO); + }); + binding.buttonAttachVideo.setOnClickListener(v -> { + binding.attachmentChoicesPanel.setVisibility(View.GONE); + pickupMedia(ComposeActivity.mediaType.VIDEO); + }); + binding.buttonAttachManual.setOnClickListener(v -> { + binding.attachmentChoicesPanel.setVisibility(View.GONE); + pickupMedia(ComposeActivity.mediaType.ALL); + }); + + binding.sendButton.setOnClickListener(v -> { + statusCompose.submitted = true; + onSubmit(prepareDraft(statusCompose, MainActivity.currentInstance, MainActivity.currentUserID)); + }); + LocalBroadcastManager.getInstance(requireActivity()).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); + + binding.text.setKeyBoardInputCallbackListener((inputContentInfo, flags, opts) -> { + if (inputContentInfo != null) { + Uri uri = inputContentInfo.getContentUri(); + List uris = new ArrayList<>(); + uris.add(uri); + addAttachment(uris); + } + }); + return binding.getRoot(); } + private void onSubmit(StatusDraft statusDraft) { + new Thread(() -> { + if (statusDraft.instance == null) { + statusDraft.instance = currentInstance; + } + if (statusDraft.user_id == null) { + statusDraft.user_id = currentUserID; + } + + if (!canBeSent(statusDraft)) { + return; + } + if (statusDraft.id > 0) { + try { + new StatusDraft(requireActivity()).updateStatusDraft(statusDraft); + } catch (DBException e) { + e.printStackTrace(); + } + } else { + try { + statusDraft.id = new StatusDraft(requireActivity()).insertStatusDraft(statusDraft); + } catch (DBException e) { + e.printStackTrace(); + } + } + int mediaCount = 0; + for (Status status : statusDraft.statusDraftList) { + mediaCount += status.media_attachments != null ? status.media_attachments.size() : 0; + } + if (mediaCount > 0) { + Data inputData = new Data.Builder() + .putString(Helper.ARG_STATUS_DRAFT_ID, String.valueOf(statusDraft.id)) + .putString(Helper.ARG_INSTANCE, currentInstance) + .putString(Helper.ARG_TOKEN, currentToken) + .putString(Helper.ARG_USER_ID, currentUserID) + .build(); + OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(ComposeWorker.class) + .setInputData(inputData) + .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) + .build(); + WorkManager.getInstance(requireActivity()).enqueue(request); + + } else { + new ThreadMessageService(requireActivity(), currentInstance, currentUserID, currentToken, statusDraft, null, null); + } + }).start(); + } + + + @Override + public void onDestroyView() { + LocalBroadcastManager.getInstance(requireActivity()).unregisterReceiver(broadcast_data); + super.onDestroyView(); + } + + + private boolean canBeSent(StatusDraft statusDraft) { + if (statusDraft == null) { + return false; + } + List statuses = statusDraft.statusDraftList; + if (statuses == null || statuses.size() == 0) { + return false; + } + Status statusCheck = statuses.get(0); + if (statusCheck == null) { + return false; + } + return (statusCheck.text != null && statusCheck.text.trim().length() != 0) + || (statusCheck.media_attachments != null && statusCheck.media_attachments.size() != 0) + || statusCheck.poll != null + || (statusCheck.spoiler_text != null && statusCheck.spoiler_text.trim().length() != 0); + } + + public StatusDraft prepareDraft(Status status, String instance, String user_id) { + //Collect all statusCompose + List statusDrafts = new ArrayList<>(); + statusDrafts.add(status); + StatusDraft statusDraftDB = new StatusDraft(); + statusDraftDB.statusReplyList = new ArrayList<>(); + statusDraftDB.statusReplyList.addAll(statuses); + statusDraftDB.statusDraftList = new ArrayList<>(); + statusDraftDB.statusDraftList.addAll(statusDrafts); + statusDraftDB.instance = instance; + statusDraftDB.user_id = user_id; + return statusDraftDB; + } + + private Status initiliazeStatus() { + Status status = new Status(); + if (statuses != null && statuses.size() > 0) { + Status lastStatus = statuses.get(statuses.size() - 1); + status.in_reply_to_id = lastStatus.id; + status.visibility = "direct"; + status.mentions = new ArrayList<>(); + if (lastStatus.account.acct != null && currentAccount.mastodon_account != null && !lastStatus.account.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) { + Mention mention = new Mention(); + mention.acct = "@" + lastStatus.account.acct; + mention.url = lastStatus.account.url; + mention.username = lastStatus.account.username; + status.mentions.add(mention); + } + //There are other mentions to + if (lastStatus.mentions != null && lastStatus.mentions.size() > 0) { + for (Mention mentionTmp : lastStatus.mentions) { + if (currentAccount.mastodon_account != null && !mentionTmp.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) { + status.mentions.add(mentionTmp); + } + } + } + } + return status; + } + + /** + * Manage mentions displayed when replying to a message + * + * @param statusCompose {@link Status} - Status that user is replying + */ + private void manageMentions(Status statusCompose) { + + if (statusCompose.mentions != null && (statusCompose.text == null || statusCompose.text.length() == 0) && statusCompose.mentions.size() > 0) { + //Retrieves mentioned accounts + OP and adds them at the beginin of the toot + final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + Mention inReplyToUser; + inReplyToUser = statusCompose.mentions.get(0); + if (statusCompose.text == null) { + statusCompose.text = ""; + } + //Put other accounts mentioned at the bottom + boolean capitalize = sharedpreferences.getBoolean(getString(R.string.SET_CAPITALIZE), true); + boolean mentionsAtTop = sharedpreferences.getBoolean(getString(R.string.SET_MENTIONS_AT_TOP), false); + + if (inReplyToUser != null) { + if (capitalize && !mentionsAtTop) { + statusCompose.text = inReplyToUser.acct.startsWith("@") ? inReplyToUser.acct + "\n" : "@" + inReplyToUser.acct + "\n"; + } else { + statusCompose.text = inReplyToUser.acct.startsWith("@") ? inReplyToUser.acct + " " : "@" + inReplyToUser.acct + " "; + } + } + binding.text.setText(statusCompose.text); + statusCompose.cursorPosition = statusCompose.text.length(); + if (statusCompose.mentions.size() > 1) { + if (!mentionsAtTop) { + statusCompose.text += "\n"; + } + for (int i = 1; i < statusCompose.mentions.size(); i++) { + String tootTemp = String.format("@%s ", statusCompose.mentions.get(i).acct); + statusCompose.text = String.format("%s ", (statusCompose.text + tootTemp.trim())); + } + } + binding.text.setText(statusCompose.text); + binding.text.requestFocus(); + binding.text.post(() -> { + binding.text.setSelection(statusCompose.cursorPosition); //Put cursor at the end + }); + } else { + binding.text.requestFocus(); + } + + } + + /** + * Manage the actions when picking up a media + * + * @param type - type of media in the list of {@link ComposeActivity.mediaType} + */ + private void pickupMedia(ComposeActivity.mediaType type) { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) { + if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(requireActivity(), + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); + return; + } + } + Intent intent; + intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("*/*"); + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); + String[] mimetypes = new String[0]; + if (type == ComposeActivity.mediaType.PHOTO) { + if (instanceInfo != null && instanceInfo.getMimeTypeImage() != null && instanceInfo.getMimeTypeImage().size() > 0) { + mimetypes = instanceInfo.getMimeTypeImage().toArray(new String[0]); + } else { + mimetypes = new String[]{"image/*"}; + } + } else if (type == ComposeActivity.mediaType.VIDEO) { + if (instanceInfo != null && instanceInfo.getMimeTypeVideo() != null && instanceInfo.getMimeTypeVideo().size() > 0) { + mimetypes = instanceInfo.getMimeTypeVideo().toArray(new String[0]); + } else { + mimetypes = new String[]{"video/*"}; + } + } else if (type == ComposeActivity.mediaType.AUDIO) { + if (instanceInfo != null && instanceInfo.getMimeTypeAudio() != null && instanceInfo.getMimeTypeAudio().size() > 0) { + mimetypes = instanceInfo.getMimeTypeAudio().toArray(new String[0]); + } else { + mimetypes = new String[]{"audio/mpeg", "audio/opus", "audio/flac", "audio/wav", "audio/ogg"}; + } + } else if (type == ComposeActivity.mediaType.ALL) { + if (instanceInfo != null && instanceInfo.getMimeTypeOther() != null && instanceInfo.getMimeTypeOther().size() > 0) { + mimetypes = instanceInfo.getMimeTypeOther().toArray(new String[0]); + } else { + mimetypes = new String[]{"*/*"}; + } + } + intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); + requireActivity().startActivityForResult(intent, (ComposeActivity.PICK_MEDIA)); + } + + + /** + * Add an attachment from ComposeActivity + * + * @param uris List - uris of the media + */ + public void addAttachment(List uris) { + Helper.createAttachmentFromUri(requireActivity(), uris, attachments -> { + if (statusCompose.media_attachments == null) { + statusCompose.media_attachments = new ArrayList<>(); + } + statusCompose.media_attachments.addAll(attachments); + if (statusCompose.media_attachments.size() > 0) { + displayAttachments(statusCompose.media_attachments.size() - 1); + } + }); + } + + /** + * Display attachment for a holder + */ + private void displayAttachments(int scrollToMediaPosition) { + if (statusCompose != null && statusCompose.media_attachments != null) { + binding.attachmentsList.removeAllViews(); + List attachmentList = statusCompose.media_attachments; + if (attachmentList != null && attachmentList.size() > 0) { + int mediaPosition = 0; + for (Attachment attachment : attachmentList) { + ComposeAttachmentItemBinding composeAttachmentItemBinding = ComposeAttachmentItemBinding.inflate(LayoutInflater.from(requireActivity()), binding.attachmentsList, false); + composeAttachmentItemBinding.buttonPlay.setVisibility(View.GONE); + /* if (editMessageId != null && attachment.url != null) { + composeAttachmentItemBinding.editPreview.setVisibility(View.GONE); + composeAttachmentItemBinding.buttonDescription.setVisibility(View.INVISIBLE); + composeAttachmentItemBinding.buttonOrderDown.setVisibility(View.INVISIBLE); + composeAttachmentItemBinding.buttonOrderUp.setVisibility(View.INVISIBLE); + }*/ + String attachmentPath = attachment.local_path != null && !attachment.local_path.trim().isEmpty() ? attachment.local_path : attachment.preview_url; + if (attachment.type != null || attachment.mimeType != null) { + if ((attachment.type != null && attachment.type.toLowerCase().startsWith("image")) || (attachment.mimeType != null && attachment.mimeType.toLowerCase().startsWith("image"))) { + Glide.with(composeAttachmentItemBinding.preview.getContext()) + .load(attachmentPath) + //.diskCacheStrategy(DiskCacheStrategy.NONE) + .skipMemoryCache(true) + .into(composeAttachmentItemBinding.preview); + } else if ((attachment.type != null && attachment.type.toLowerCase().startsWith("video")) || (attachment.mimeType != null && attachment.mimeType.toLowerCase().startsWith("video"))) { + composeAttachmentItemBinding.buttonPlay.setVisibility(View.VISIBLE); + long interval = 2000; + RequestOptions options = new RequestOptions().frame(interval); + Glide.with(composeAttachmentItemBinding.preview.getContext()).asBitmap() + .load(attachmentPath) + .apply(options) + .into(composeAttachmentItemBinding.preview); + } else if ((attachment.type != null && attachment.type.toLowerCase().startsWith("audio")) || (attachment.mimeType != null && attachment.mimeType.toLowerCase().startsWith("audio"))) { + Glide.with(composeAttachmentItemBinding.preview.getContext()) + .load(R.drawable.ic_baseline_audio_file_24) + .into(composeAttachmentItemBinding.preview); + } else { + Glide.with(composeAttachmentItemBinding.preview.getContext()) + .load(R.drawable.ic_baseline_insert_drive_file_24) + .into(composeAttachmentItemBinding.preview); + } + } else { + Glide.with(composeAttachmentItemBinding.preview.getContext()) + .load(R.drawable.ic_baseline_insert_drive_file_24) + .into(composeAttachmentItemBinding.preview); + } + if (mediaPosition == 0) { + composeAttachmentItemBinding.buttonOrderUp.setVisibility(View.INVISIBLE); + } else { + composeAttachmentItemBinding.buttonOrderUp.setVisibility(View.VISIBLE); + } + if (mediaPosition == attachmentList.size() - 1) { + composeAttachmentItemBinding.buttonOrderDown.setVisibility(View.INVISIBLE); + } else { + composeAttachmentItemBinding.buttonOrderDown.setVisibility(View.VISIBLE); + } + //Remote attachments when deleting/redrafting can't be ordered + if (attachment.local_path == null) { + composeAttachmentItemBinding.buttonOrderUp.setVisibility(View.INVISIBLE); + composeAttachmentItemBinding.buttonOrderDown.setVisibility(View.INVISIBLE); + } + int finalMediaPosition = mediaPosition; + if (attachment.local_path != null && (attachment.local_path.endsWith("png") || attachment.local_path.endsWith("jpg") || attachment.local_path.endsWith("jpeg"))) { + composeAttachmentItemBinding.editPreview.setVisibility(View.VISIBLE); + } else { + composeAttachmentItemBinding.editPreview.setVisibility(View.GONE); + } + composeAttachmentItemBinding.editPreview.setOnClickListener(v -> { + Intent intent = new Intent(requireActivity(), EditImageActivity.class); + Bundle b = new Bundle(); + intent.putExtra("imageUri", attachment.local_path); + intent.putExtras(b); + startActivity(intent); + }); + composeAttachmentItemBinding.buttonDescription.setOnClickListener(v -> { + AlertDialog.Builder builderInner = new MaterialAlertDialogBuilder(requireActivity()); + // builderInner.setTitle(R.string.upload_form_description); + PopupMediaDescriptionBinding popupMediaDescriptionBinding = PopupMediaDescriptionBinding.inflate(LayoutInflater.from(requireActivity()), null, false); + builderInner.setView(popupMediaDescriptionBinding.getRoot()); + + popupMediaDescriptionBinding.mediaDescription.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1500)}); + popupMediaDescriptionBinding.mediaDescription.requestFocus(); + Glide.with(popupMediaDescriptionBinding.mediaPicture.getContext()) + .asBitmap() + .load(attachmentPath) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, Transition transition) { + popupMediaDescriptionBinding.mediaPicture.setImageBitmap(resource); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + super.onLoadFailed(errorDrawable); + } + }); + builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + if (attachment.description != null) { + popupMediaDescriptionBinding.mediaDescription.setText(attachment.description); + popupMediaDescriptionBinding.mediaDescription.setSelection(popupMediaDescriptionBinding.mediaDescription.getText().length()); + } + builderInner.setPositiveButton(R.string.validate, (dialog, which) -> { + attachment.description = popupMediaDescriptionBinding.mediaDescription.getText().toString(); + displayAttachments(finalMediaPosition); + dialog.dismiss(); + }); + AlertDialog alertDialog = builderInner.create(); + Objects.requireNonNull(alertDialog.getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + alertDialog.show(); + popupMediaDescriptionBinding.mediaDescription.requestFocus(); + + }); + + composeAttachmentItemBinding.buttonOrderUp.setOnClickListener(v -> { + if (finalMediaPosition > 0 && attachmentList.size() > 1) { + Attachment at1 = attachmentList.get(finalMediaPosition); + Attachment at2 = attachmentList.get(finalMediaPosition - 1); + attachmentList.set(finalMediaPosition - 1, at1); + attachmentList.set(finalMediaPosition, at2); + displayAttachments(finalMediaPosition - 1); + } + }); + composeAttachmentItemBinding.buttonOrderDown.setOnClickListener(v -> { + if (finalMediaPosition < (attachmentList.size() - 1) && attachmentList.size() > 1) { + Attachment at1 = attachmentList.get(finalMediaPosition); + Attachment at2 = attachmentList.get(finalMediaPosition + 1); + attachmentList.set(finalMediaPosition, at2); + attachmentList.set(finalMediaPosition + 1, at1); + displayAttachments(finalMediaPosition + 1); + } + }); + composeAttachmentItemBinding.buttonRemove.setOnClickListener(v -> { + AlertDialog.Builder builderInner = new MaterialAlertDialogBuilder(requireActivity()); + builderInner.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss()); + builderInner.setPositiveButton(R.string.delete, (dialog, which) -> { + attachmentList.remove(attachment); + displayAttachments(finalMediaPosition); + new Thread(() -> { + if (attachment.local_path != null) { + File fileToDelete = new File(attachment.local_path); + if (fileToDelete.exists()) { + //noinspection ResultOfMethodCallIgnored + fileToDelete.delete(); + } + } + }).start(); + + }); + builderInner.setMessage(R.string.toot_delete_media); + builderInner.show(); + }); + composeAttachmentItemBinding.preview.setOnClickListener(v -> displayAttachments(finalMediaPosition)); + if (attachment.description == null || attachment.description.trim().isEmpty()) { + composeAttachmentItemBinding.buttonDescription.setChipIconResource(R.drawable.ic_baseline_warning_24); + composeAttachmentItemBinding.buttonDescription.setTextColor(ContextCompat.getColor(requireActivity(), R.color.black)); + composeAttachmentItemBinding.buttonDescription.setChipIconTintResource(R.color.black); + composeAttachmentItemBinding.buttonDescription.setChipBackgroundColor(ThemeHelper.getNoDescriptionColorStateList(requireActivity())); + } else { + composeAttachmentItemBinding.buttonDescription.setChipIconResource(R.drawable.ic_baseline_check_circle_24); + composeAttachmentItemBinding.buttonDescription.setTextColor(ContextCompat.getColor(requireActivity(), R.color.white)); + composeAttachmentItemBinding.buttonDescription.setChipIconTintResource(R.color.white); + composeAttachmentItemBinding.buttonDescription.setChipBackgroundColor(ThemeHelper.getHavingDescriptionColorStateList(requireActivity())); + } + binding.attachmentsList.addView(composeAttachmentItemBinding.getRoot()); + mediaPosition++; + } + binding.attachmentsList.setVisibility(View.VISIBLE); + if (scrollToMediaPosition >= 0 && binding.attachmentsList.getChildCount() < scrollToMediaPosition) { + binding.attachmentsList.requestChildFocus(binding.attachmentsList.getChildAt(scrollToMediaPosition), binding.attachmentsList.getChildAt(scrollToMediaPosition)); + } + } else { + binding.attachmentsList.setVisibility(View.GONE); + } + } else { + binding.attachmentsList.setVisibility(View.GONE); + } + buttonState(); + } + + + /** + * Manage state of media and poll button + */ + private void buttonState() { + if (BaseMainActivity.software == null || BaseMainActivity.software.toUpperCase().compareTo("MASTODON") == 0) { + if (statusCompose.poll == null) { + binding.buttonAttachImage.setEnabled(true); + binding.buttonAttachVideo.setEnabled(true); + binding.buttonAttachAudio.setEnabled(true); + binding.buttonAttachManual.setEnabled(true); + } else { + binding.buttonAttachImage.setEnabled(false); + binding.buttonAttachVideo.setEnabled(false); + binding.buttonAttachAudio.setEnabled(false); + binding.buttonAttachManual.setEnabled(false); + binding.buttonPoll.setEnabled(true); + } + binding.buttonPoll.setEnabled(statusCompose.media_attachments == null || statusCompose.media_attachments.size() <= 0); + } + } + /** * Intialize the common view for the context * @@ -127,12 +685,8 @@ public class FragmentMastodonDirectMessage extends Fragment { statuses.addAll(0, context.ancestors); statusDirectMessageAdapter.notifyItemRangeInserted(0, statusPosition); statuses.addAll(statusPosition + 1, context.descendants); + initiliazeStatus(); statusDirectMessageAdapter.notifyItemRangeInserted(statusPosition + 1, context.descendants.size()); - if (binding.recyclerView.getItemDecorationCount() > 0) { - for (int i = 0; i < binding.recyclerView.getItemDecorationCount(); i++) { - binding.recyclerView.removeItemDecorationAt(i); - } - } binding.swipeContainer.setRefreshing(false); binding.recyclerView.scrollToPosition(statusPosition); } diff --git a/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml b/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml index cf0e020f..e6638f08 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml @@ -26,7 +26,7 @@ + tools:context=".mastodon.activities.DirectMessageActivity"> + android:fitsSystemWindows="true"> + app:defaultNavHost="true" /> \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index bc8e98f5..f0cfe672 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -3,26 +3,26 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainContainer" - android:layout_width="match_parent" + android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/fab_margin" android:layout_marginTop="12dp" android:background="@drawable/bubble_right_tail" - android:padding="6dp" - android:paddingEnd="12dp"> + android:padding="12dp"> - + android:orientation="vertical"> - + android:baselineAligned="false" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginHorizontal="6dp" + app:layout_constraintTop_toBottomOf="@id/sensitive_media"> - + + + From 5e4298c56683fd2f200a5ec23aca27c3e1751b40 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 Feb 2023 18:59:17 +0100 Subject: [PATCH 27/31] Release 3.18.0 --- app/build.gradle | 4 ++-- app/src/main/assets/release_notes/notes.json | 5 +++++ src/fdroid/fastlane/metadata/android/en/changelogs/478.txt | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2fcb2c6f..8f7cea49 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { defaultConfig { minSdk 21 targetSdk 33 - versionCode 477 - versionName "3.17.0" + versionCode 478 + versionName "3.18.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" diff --git a/app/src/main/assets/release_notes/notes.json b/app/src/main/assets/release_notes/notes.json index a78bdeaf..6cb378a8 100644 --- a/app/src/main/assets/release_notes/notes.json +++ b/app/src/main/assets/release_notes/notes.json @@ -1,4 +1,9 @@ [ + { + "version": "3.18.0", + "code": "478", + "note": "Added:\n- Support camel case tags (automatically recorded when composing)\n- Manage tags when composing (top right menu)\n- Custom tabs (default: enabled)\n\nChanged:\n- Media heights now use the screen size\n- Remove horizontal scroll for media\n- Reduce size of emoji when text size is increased\n- Update available languages in picker\n\nFixed:\n- Forwarded tags are added back after being deleted\n- TalkBack issues\n- Some crashes" + }, { "version": "3.17.0", "code": "477", diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt index f866e7fe..ae962fc4 100644 --- a/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt +++ b/src/fdroid/fastlane/metadata/android/en/changelogs/478.txt @@ -5,6 +5,7 @@ Added: Changed: - Media heights now use the screen size +- Remove horizontal scroll for media - Reduce size of emoji when text size is increased - Update available languages in picker From 4eb4c6eea5fe63dfe9f0cebf80979134b7af57b3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 14 Feb 2023 10:45:23 +0100 Subject: [PATCH 28/31] change lib --- .../mastodon/helper/TranslateHelper.java | 4 +++ .../com/github/stom79/mytransl/MyTransL.java | 35 +++++++++++++++++-- .../stom79/mytransl/async/TransAsync.java | 6 ++++ .../stom79/mytransl/translate/Translate.java | 25 +++++++++++-- 4 files changed, 64 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java index e347044e..1d514ba9 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java @@ -49,6 +49,8 @@ public class TranslateHelper { MyTransL.translatorEngine et; if (translator.compareToIgnoreCase("FEDILAB") == 0) { et = MyTransL.translatorEngine.LIBRETRANSLATE; + } else if (translator.compareToIgnoreCase("LINGVA") == 0) { + et = MyTransL.translatorEngine.LINGVA; } else { et = MyTransL.translatorEngine.DEEPL; } @@ -60,6 +62,8 @@ public class TranslateHelper { params.setSource_lang("auto"); if (translator.compareToIgnoreCase("FEDILAB") == 0) { myTransL.setLibretranslateDomain("translate.fedilab.app"); + } else if (translator.compareToIgnoreCase("LINGVA") == 0) { + myTransL.setLibretranslateDomain("lingva.ml"); } else { String translatorVersion = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_VERSION), "PRO"); params.setPro(translatorVersion.equals("PRO")); diff --git a/mytransl/src/main/java/com/github/stom79/mytransl/MyTransL.java b/mytransl/src/main/java/com/github/stom79/mytransl/MyTransL.java index 4f96bc5c..e2c997ec 100644 --- a/mytransl/src/main/java/com/github/stom79/mytransl/MyTransL.java +++ b/mytransl/src/main/java/com/github/stom79/mytransl/MyTransL.java @@ -28,8 +28,9 @@ public class MyTransL { public static String TAG = "MyTrans_TAG"; private static MyTransL myTransL; private static String libretranslateDomain; + private static String lingvaDomain; private final translatorEngine te; - private String yandexAPIKey, deeplAPIKey, systranAPIKey, libreTranslateAPIKey; + private String yandexAPIKey, deeplAPIKey, systranAPIKey, libreTranslateAPIKey, lingvaAPIKey; private int timeout = 30; private boolean obfuscation = false; @@ -44,7 +45,7 @@ public class MyTransL { } /** - * Allows to get the current locale of the device + * Allows to get the current domain for libre translate * * @return locale String */ @@ -52,6 +53,16 @@ public class MyTransL { return "https://" + libretranslateDomain + "/translate?"; } + /** + * Allows to get the current domain for lingva + * + * @return locale String + */ + public static String getLingvaUrl() { + return "https://" + lingvaDomain + "/api/v1/"; + } + + /** * Allows to get the current locale of the device * @@ -110,6 +121,15 @@ public class MyTransL { MyTransL.libretranslateDomain = libretranslateDomain; } + + public String getingvaDomain() { + return lingvaDomain; + } + + public void setLingvaDomain(String lingvaDomain) { + MyTransL.lingvaDomain = lingvaDomain; + } + public String getLibreTranslateAPIKey() { return libreTranslateAPIKey; } @@ -118,6 +138,14 @@ public class MyTransL { this.libreTranslateAPIKey = libreTranslateAPIKey; } + public String getLingvaAPIKey() { + return lingvaAPIKey; + } + + public void setLingvaAPIKey(String lingvaAPIKey) { + this.lingvaAPIKey = lingvaAPIKey; + } + /** * Asynchronous call for the translation * @@ -144,7 +172,8 @@ public class MyTransL { YANDEX, DEEPL, SYSTRAN, - LIBRETRANSLATE + LIBRETRANSLATE, + LINGVA } } diff --git a/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java b/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java index 7c905219..c3654aa4 100644 --- a/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java +++ b/mytransl/src/main/java/com/github/stom79/mytransl/async/TransAsync.java @@ -146,6 +146,10 @@ public class TransAsync { e.printStackTrace(); } str_response = new Client().post(MyTransL.getLibreTranslateUrl(), this.timeout, params); + } else if (te == MyTransL.translatorEngine.LINGVA) { + String key = MyTransL.getInstance(te).getLibreTranslateAPIKey(); + String lingvaURL = MyTransL.getLingvaUrl() + this.params.getSource_lang() + "/" + toLanguage + "/" + contentToSend; + str_response = new Client().get(lingvaURL, this.timeout); } } catch (IOException | NoSuchAlgorithmException | KeyManagementException err) { this.e = new HttpsConnectionException(-1, err.getMessage()); @@ -167,6 +171,8 @@ public class TransAsync { translate.parseSystranlResult(result, listener); } else if (this.te == MyTransL.translatorEngine.LIBRETRANSLATE) { translate.parseLibreTranslateResult(result, listener); + } else if (this.te == MyTransL.translatorEngine.LINGVA) { + translate.parseLingvaResult(result, listener); } //Obfuscation if asked if (obfuscation) { diff --git a/mytransl/src/main/java/com/github/stom79/mytransl/translate/Translate.java b/mytransl/src/main/java/com/github/stom79/mytransl/translate/Translate.java index 6bccabff..38997b1f 100644 --- a/mytransl/src/main/java/com/github/stom79/mytransl/translate/Translate.java +++ b/mytransl/src/main/java/com/github/stom79/mytransl/translate/Translate.java @@ -318,13 +318,12 @@ public class Translate { } /*** - * Method to parse result coming from the Deepl translator - * More about Deepl translate API - https://www.deepl.com/api-reference.html + * Method to parse result coming from the Libre Translate * @param response String - Response of the engine translator * @param listener - Results Listener */ public void parseLibreTranslateResult(String response, Results listener) { - translate.setTranslatorEngine(MyTransL.translatorEngine.DEEPL); + translate.setTranslatorEngine(MyTransL.translatorEngine.LIBRETRANSLATE); try { JSONObject translationJson = new JSONObject(response); //Retrieves the translated content @@ -339,6 +338,26 @@ public class Translate { } + /*** + * Method to parse result coming from the Lingva + * @param response String - Response of the engine translator + * @param listener - Results Listener + */ + public void parseLingvaResult(String response, Results listener) { + translate.setTranslatorEngine(MyTransL.translatorEngine.LINGVA); + try { + JSONObject translationJson = new JSONObject(response); + //Retrieves the translated content + translate.setTranslatedContent(translationJson.getString("translation")); + //Retrieves the initial language + translate.setInitialLanguage(initialLanguage); + } catch (JSONException e1) { + e1.printStackTrace(); + HttpsConnectionException httpsConnectionException = new HttpsConnectionException(-1, e1.getMessage()); + listener.onFail(httpsConnectionException); + } + } + /*** * Method to parse result coming from the Deepl translator * More about Deepl translate API - https://www.deepl.com/api-reference.html From 4b8563fe7eaa2a9e50dfde802b92930c59877c61 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 14 Feb 2023 11:02:04 +0100 Subject: [PATCH 29/31] working --- .../fedilab/android/mastodon/helper/TranslateHelper.java | 6 +++++- .../ui/fragment/settings/FragmentTimelinesSettings.java | 8 +++++++- app/src/main/res/layouts/mastodon/values/strings.xml | 4 ++++ app/src/main/res/values/strings.xml | 4 ++++ app/src/main/res/xml/pref_timelines.xml | 7 +++++++ .../java/com/github/stom79/mytransl/async/TransAsync.java | 4 +++- 6 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/layouts/mastodon/values/strings.xml diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java index 1d514ba9..3e7e0da8 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/TranslateHelper.java @@ -63,7 +63,11 @@ public class TranslateHelper { if (translator.compareToIgnoreCase("FEDILAB") == 0) { myTransL.setLibretranslateDomain("translate.fedilab.app"); } else if (translator.compareToIgnoreCase("LINGVA") == 0) { - myTransL.setLibretranslateDomain("lingva.ml"); + String host = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_DOMAIN), context.getString(R.string.SET_TRANSLATOR_HOST_LINGVA)); + if (host == null || host.trim().isEmpty()) { + host = context.getString(R.string.SET_TRANSLATOR_HOST_LINGVA); + } + myTransL.setLingvaDomain(host); } else { String translatorVersion = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_VERSION), "PRO"); params.setPro(translatorVersion.equals("PRO")); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java index e9d5228d..059494ab 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java @@ -47,7 +47,8 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen ListPreference SET_TRANSLATOR_VERSION = findPreference(getString(R.string.SET_TRANSLATOR_VERSION)); EditTextPreference SET_TRANSLATOR_API_KEY = findPreference(getString(R.string.SET_TRANSLATOR_API_KEY)); - if (SET_TRANSLATOR != null && SET_TRANSLATOR.getValue().equals("FEDILAB")) { + EditTextPreference SET_TRANSLATOR_DOMAIN = findPreference(getString(R.string.SET_TRANSLATOR_DOMAIN)); + if (SET_TRANSLATOR != null && !SET_TRANSLATOR.getValue().equals("DEEPL")) { if (SET_TRANSLATOR_API_KEY != null) { preferenceScreen.removePreferenceRecursively("SET_TRANSLATOR_API_KEY"); } @@ -55,6 +56,11 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen preferenceScreen.removePreferenceRecursively("SET_TRANSLATOR_VERSION"); } } + if (SET_TRANSLATOR != null && !SET_TRANSLATOR.getValue().equals("LINGVA")) { + if (SET_TRANSLATOR_DOMAIN != null) { + preferenceScreen.removePreferenceRecursively("SET_TRANSLATOR_DOMAIN"); + } + } SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK)); if (SET_DISPLAY_BOOKMARK != null) { boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, true); diff --git a/app/src/main/res/layouts/mastodon/values/strings.xml b/app/src/main/res/layouts/mastodon/values/strings.xml new file mode 100644 index 00000000..28ece788 --- /dev/null +++ b/app/src/main/res/layouts/mastodon/values/strings.xml @@ -0,0 +1,4 @@ + + + Translator domain + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b0fc7f0f..2c29b22a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -796,6 +796,7 @@ Fedilab + Lingva DeepL @@ -805,6 +806,7 @@ FEDILAB + LINGVA DEEPL @@ -1097,6 +1099,8 @@ SET_POST_FORMAT SET_COMPOSE_LOCAL_ONLY + lingva.ml + SET_TRANSLATOR_DOMAIN SET_TRANSLATOR SET_TRANSLATOR_VERSION diff --git a/app/src/main/res/xml/pref_timelines.xml b/app/src/main/res/xml/pref_timelines.xml index 11ff6b3f..93fe06b1 100644 --- a/app/src/main/res/xml/pref_timelines.xml +++ b/app/src/main/res/xml/pref_timelines.xml @@ -93,6 +93,13 @@ app:key="@string/SET_TRANSLATOR_API_KEY" app:title="@string/api_key" app:useSimpleSummaryProvider="true" /> + Date: Tue, 14 Feb 2023 11:26:59 +0100 Subject: [PATCH 30/31] some fixes --- .../res/layouts/mastodon/layout/layout_drawer_attachments.xml | 2 +- app/src/main/res/layouts/mastodon/values/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml index 020b1fb3..35eb0d37 100644 --- a/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml +++ b/app/src/main/res/layouts/mastodon/layout/layout_drawer_attachments.xml @@ -55,7 +55,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/media3_container" - app:layout_constraintTop_toBottomOf="@id/media2_container" /> + app:layout_constraintTop_toBottomOf="@id/media1_container" /> - Translator domain + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2c29b22a..8167f835 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1901,4 +1901,6 @@ The tag has been removed! he tag has been stored! Manage tags + + Translator domain \ No newline at end of file From c29a2bd07b5ef838e81cebd95a770b1ef938348b Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 14 Feb 2023 16:21:04 +0100 Subject: [PATCH 31/31] some changes for chat --- app/build.gradle | 2 + .../mastodon/ui/drawer/ComposeAdapter.java | 1 - .../ui/drawer/ConversationAdapter.java | 2 +- .../ui/drawer/StatusDirectMessageAdapter.java | 223 ++++++++++++-- .../FragmentMastodonDirectMessage.java | 271 +++++++++++++++++- .../mastodon/drawable/bubble_left_tail.xml | 4 +- .../mastodon/drawable/bubble_right_tail.xml | 4 +- .../layout/activity_direct_message.xml | 64 ++--- .../mastodon/layout/drawer_status_chat.xml | 11 + .../layouts/mastodon/layout/layout_poll.xml | 1 + app/src/main/res/values/colors.xml | 4 + 11 files changed, 511 insertions(+), 76 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8f7cea49..1a208594 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ android { 'src/main/res/menus/peertube', 'src/main/res/menus', + 'src/main/res/values', + 'src/main/res' ] } diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java index 5cec5fac..8ebadf0c 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java @@ -1648,7 +1648,6 @@ public class ComposeAdapter extends RecyclerView.Adapter displayPollPopup(holder, statusDraft, position)); - holder.binding.buttonPoll.setOnClickListener(v -> displayPollPopup(holder, statusDraft, position)); if (instanceInfo == null) { return; } diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java index 29cb0df8..3192d286 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java @@ -211,7 +211,7 @@ public class ConversationAdapter extends RecyclerView.Adapter { Intent intent; if (chatMode) { diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java index 1659e6e3..36f3b9db 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusDirectMessageAdapter.java @@ -21,20 +21,29 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.PorterDuff; +import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.CountDownTimer; +import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.RadioButton; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.app.ActivityOptionsCompat; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelStoreOwner; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; @@ -44,20 +53,25 @@ import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.DrawerStatusChatBinding; import app.fedilab.android.databinding.LayoutMediaBinding; +import app.fedilab.android.databinding.LayoutPollItemBinding; import app.fedilab.android.mastodon.activities.MediaActivity; import app.fedilab.android.mastodon.client.entities.api.Attachment; +import app.fedilab.android.mastodon.client.entities.api.Poll; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.helper.Helper; import app.fedilab.android.mastodon.helper.LongClickLinkMovementMethod; import app.fedilab.android.mastodon.helper.MastodonHelper; import app.fedilab.android.mastodon.helper.MediaHelper; import app.fedilab.android.mastodon.helper.ThemeHelper; +import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; public class StatusDirectMessageAdapter extends RecyclerView.Adapter { @@ -81,7 +95,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter adapter, int mediaPosition, float mediaW, float mediaH, float ratio, - Status statusToDeal, Attachment attachment) { + Status status, Attachment attachment) { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); final int timeout = sharedpreferences.getInt(context.getString(R.string.SET_NSFW_TIMEOUT), 5); boolean long_press_media = sharedpreferences.getBoolean(context.getString(R.string.SET_LONG_PRESS_STORE_MEDIA), false); @@ -96,9 +110,9 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter 0) { layoutMediaBinding.media.setContentDescription(attachment.description.trim()); @@ -132,22 +146,22 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, statusToDeal.sensitive, false); - if (!statusToDeal.sensitive || expand_media) { + RequestBuilder requestBuilder = prepareRequestBuilder(context, attachment, mediaW * ratio, mediaH * ratio, focusX, focusY, status.sensitive, false); + if (!status.sensitive || expand_media) { layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24); } else { layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_off_24); } requestBuilder.load(attachment.preview_url).into(layoutMediaBinding.media); - if (statusToDeal.sensitive) { + if (status.sensitive) { Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, ThemeHelper.getAttColor(context, R.attr.colorError)); } else { Helper.changeDrawableColor(context, layoutMediaBinding.viewHide, R.color.white); } layoutMediaBinding.media.setOnClickListener(v -> { - if (statusToDeal.sensitive && !expand_media) { - statusToDeal.sensitive = false; + if (status.sensitive && !expand_media) { + status.sensitive = false; int position = holder.getBindingAdapterPosition(); adapter.notifyItemChanged(position); @@ -157,7 +171,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter(statusToDeal.media_attachments)); + b.putSerializable(Helper.ARG_MEDIA_ARRAY, new ArrayList<>(status.media_attachments)); mediaIntent.putExtras(b); ActivityOptionsCompat options = ActivityOptionsCompat - .makeSceneTransitionAnimation((Activity) context, layoutMediaBinding.media, statusToDeal.media_attachments.get(0).url); + .makeSceneTransitionAnimation((Activity) context, layoutMediaBinding.media, status.media_attachments.get(0).url); // start the new activity context.startActivity(mediaIntent, options.toBundle()); }); layoutMediaBinding.viewHide.setOnClickListener(v -> { - statusToDeal.sensitive = !statusToDeal.sensitive; + status.sensitive = !status.sensitive; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); }); @@ -208,7 +222,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter(holder.binding.messageContent), @@ -228,23 +242,190 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter greaterValue) + greaterValue = pollItem.votes_count; + } + holder.binding.poll.rated.removeAllViews(); + List ownvotes = status.poll.own_votes; + int j = 0; + if (status.poll.voters_count == 0 && status.poll.votes_count > 0) { + status.poll.voters_count = status.poll.votes_count; + } + LayoutInflater inflater = ((Activity) context).getLayoutInflater(); + for (Poll.PollItem pollItem : status.poll.options) { + @NonNull LayoutPollItemBinding pollItemBinding = LayoutPollItemBinding.inflate(inflater, holder.binding.poll.rated, true); + double value = ((double) (pollItem.votes_count * 100) / (double) status.poll.voters_count); + pollItemBinding.pollItemPercent.setText(String.format("%s %%", (int) value)); + pollItemBinding.pollItemText.setText( + pollItem.getSpanTitle(context, status, + new WeakReference<>(pollItemBinding.pollItemText)), + TextView.BufferType.SPANNABLE); + pollItemBinding.pollItemPercent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary)); + pollItemBinding.pollItemText.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary)); + pollItemBinding.pollItemValue.setProgress((int) value); + if (pollItem.votes_count == greaterValue) { + pollItemBinding.pollItemPercent.setTypeface(null, Typeface.BOLD); + pollItemBinding.pollItemText.setTypeface(null, Typeface.BOLD); + } + if (ownvotes != null && ownvotes.contains(j)) { + Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_baseline_check_24); + assert img != null; + img.setColorFilter(ThemeHelper.getAttColor(context, R.attr.colorPrimary), PorterDuff.Mode.SRC_IN); + img.setBounds(0, 0, (int) (20 * scale + 0.5f), (int) (20 * scale + 0.5f)); + pollItemBinding.pollItemText.setCompoundDrawables(null, null, img, null); + } + j++; + } + } else { + + if (status.poll.voters_count == 0 && status.poll.votes_count > 0) { + status.poll.voters_count = status.poll.votes_count; + } + holder.binding.poll.rated.setVisibility(View.GONE); + holder.binding.poll.submitVote.setVisibility(View.VISIBLE); + if (status.poll.multiple) { + if ((holder.binding.poll.multipleChoice).getChildCount() > 0) + (holder.binding.poll.multipleChoice).removeAllViews(); + for (Poll.PollItem pollOption : status.poll.options) { + CheckBox cb = new CheckBox(context); + cb.setText( + pollOption.getSpanTitle(context, status, + new WeakReference<>(cb)), + TextView.BufferType.SPANNABLE); + holder.binding.poll.multipleChoice.addView(cb); + cb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary)); + } + holder.binding.poll.multipleChoice.setVisibility(View.VISIBLE); + holder.binding.poll.singleChoiceRadioGroup.setVisibility(View.GONE); + } else { + if ((holder.binding.poll.singleChoiceRadioGroup).getChildCount() > 0) + (holder.binding.poll.singleChoiceRadioGroup).removeAllViews(); + for (Poll.PollItem pollOption : status.poll.options) { + RadioButton rb = new RadioButton(context); + rb.setText( + pollOption.getSpanTitle(context, status, + new WeakReference<>(rb)), + TextView.BufferType.SPANNABLE); + rb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary)); + holder.binding.poll.singleChoiceRadioGroup.addView(rb); + } + holder.binding.poll.singleChoiceRadioGroup.setVisibility(View.VISIBLE); + holder.binding.poll.multipleChoice.setVisibility(View.GONE); + } + holder.binding.poll.submitVote.setVisibility(View.VISIBLE); + holder.binding.poll.submitVote.setOnClickListener(v -> { + int[] choice; + if (status.poll.multiple) { + ArrayList choices = new ArrayList<>(); + int choicesCount = holder.binding.poll.multipleChoice.getChildCount(); + for (int i1 = 0; i1 < choicesCount; i1++) { + if (holder.binding.poll.multipleChoice.getChildAt(i1) != null && holder.binding.poll.multipleChoice.getChildAt(i1) instanceof CheckBox) { + if (((CheckBox) holder.binding.poll.multipleChoice.getChildAt(i1)).isChecked()) { + choices.add(i1); + } + } + } + choice = new int[choices.size()]; + Iterator iterator = choices.iterator(); + for (int i1 = 0; i1 < choice.length; i1++) { + choice[i1] = iterator.next(); + } + if (choice.length == 0) + return; + } else { + choice = new int[1]; + choice[0] = -1; + int choicesCount = holder.binding.poll.singleChoiceRadioGroup.getChildCount(); + for (int i1 = 0; i1 < choicesCount; i1++) { + if (holder.binding.poll.singleChoiceRadioGroup.getChildAt(i1) != null && holder.binding.poll.singleChoiceRadioGroup.getChildAt(i1) instanceof RadioButton) { + if (((RadioButton) holder.binding.poll.singleChoiceRadioGroup.getChildAt(i1)).isChecked()) { + choice[0] = i1; + } + } + } + if (choice[0] == -1) + return; + } + //Vote on the poll + + statusesVM.votePoll(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status.poll.id, choice) + .observe((LifecycleOwner) context, poll -> { + if (poll != null) { + int i = 0; + for (Poll.PollItem item : status.poll.options) { + if (item.span_title != null) { + poll.options.get(i).span_title = item.span_title; + } else { + poll.options.get(i).span_title = new SpannableString(item.title); + } + i++; + } + status.poll = poll; + notifyItemChanged(holder.getBindingAdapterPosition()); + } + }); + + }); + } + holder.binding.poll.refreshPoll.setOnClickListener(v -> statusesVM.getPoll(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, status.poll.id) + .observe((LifecycleOwner) context, poll -> { + if (poll != null) { + //Store span elements + int i = 0; + for (Poll.PollItem item : status.poll.options) { + if (item.span_title != null) { + poll.options.get(i).span_title = item.span_title; + } else { + poll.options.get(i).span_title = new SpannableString(item.title); + } + i++; + } + status.poll = poll; + notifyItemChanged(holder.getBindingAdapterPosition()); + } + })); + holder.binding.poll.pollContainer.setVisibility(View.VISIBLE); + String pollInfo = context.getResources().getQuantityString(R.plurals.number_of_voters, status.poll.voters_count, status.poll.voters_count); + if (status.poll.expired) { + pollInfo += " - " + context.getString(R.string.poll_finish_at, MastodonHelper.dateToStringPoll(status.poll.expires_at)); + } else { + pollInfo += " - " + context.getString(R.string.poll_finish_in, MastodonHelper.dateDiffPoll(context, status.poll.expires_at)); + } + holder.binding.poll.pollInfo.setText(pollInfo); + } else { + holder.binding.poll.pollContainer.setVisibility(View.GONE); + } holder.binding.userName.setText( status.account.getSpanDisplayName(context, new WeakReference<>(holder.binding.userName)), diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java index 1d0345e7..ff2ab9dd 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java @@ -37,10 +37,15 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.AppCompatEditText; +import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -68,12 +73,15 @@ import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.databinding.ComposeAttachmentItemBinding; +import app.fedilab.android.databinding.ComposePollBinding; +import app.fedilab.android.databinding.ComposePollItemBinding; import app.fedilab.android.databinding.FragmentDirectMessageBinding; import app.fedilab.android.databinding.PopupMediaDescriptionBinding; import app.fedilab.android.mastodon.activities.ComposeActivity; import app.fedilab.android.mastodon.client.entities.api.Attachment; import app.fedilab.android.mastodon.client.entities.api.Context; import app.fedilab.android.mastodon.client.entities.api.Mention; +import app.fedilab.android.mastodon.client.entities.api.Poll; import app.fedilab.android.mastodon.client.entities.api.Status; import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.exception.DBException; @@ -84,6 +92,7 @@ import app.fedilab.android.mastodon.jobs.ComposeWorker; import app.fedilab.android.mastodon.services.ThreadMessageService; import app.fedilab.android.mastodon.ui.drawer.StatusDirectMessageAdapter; import app.fedilab.android.mastodon.viewmodel.mastodon.StatusesVM; +import es.dmoral.toasty.Toasty; public class FragmentMastodonDirectMessage extends Fragment { @@ -155,7 +164,7 @@ public class FragmentMastodonDirectMessage extends Fragment { statusesVM.getContext(user_instance, user_token, focusedStatus.id) .observe(getViewLifecycleOwner(), this::initializeContextView); } - + binding.buttonCloseAttachmentPanel.setOnClickListener(v -> binding.attachmentChoicesPanel.setVisibility(View.GONE)); statusCompose = new Status(); binding.buttonAttach.setOnClickListener(v -> { @@ -176,6 +185,7 @@ public class FragmentMastodonDirectMessage extends Fragment { binding.attachmentChoicesPanel.setVisibility(View.VISIBLE); binding.buttonAttach.setChecked(false); }); + binding.buttonPoll.setOnClickListener(v -> displayPollPopup()); binding.buttonAttachAudio.setOnClickListener(v -> { binding.attachmentChoicesPanel.setVisibility(View.GONE); pickupMedia(ComposeActivity.mediaType.AUDIO); @@ -195,6 +205,7 @@ public class FragmentMastodonDirectMessage extends Fragment { binding.sendButton.setOnClickListener(v -> { statusCompose.submitted = true; + statusCompose.text = binding.text.getText().toString(); onSubmit(prepareDraft(statusCompose, MainActivity.currentInstance, MainActivity.currentUserID)); }); LocalBroadcastManager.getInstance(requireActivity()).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); @@ -300,30 +311,266 @@ public class FragmentMastodonDirectMessage extends Fragment { return statusDraftDB; } - private Status initiliazeStatus() { - Status status = new Status(); + /** + * Display the popup to attach a poll to message + */ + private void displayPollPopup() { + AlertDialog.Builder alertPoll = new MaterialAlertDialogBuilder(requireActivity()); + alertPoll.setTitle(R.string.create_poll); + ComposePollBinding composePollBinding = ComposePollBinding.inflate(LayoutInflater.from(requireActivity()), new LinearLayout(requireActivity()), false); + alertPoll.setView(composePollBinding.getRoot()); + int max_entry = 4; + int max_length = 25; + final int[] pollCountItem = {2}; + + if (instanceInfo != null && instanceInfo.configuration != null && instanceInfo.configuration.pollsConf != null) { + max_entry = instanceInfo.configuration.pollsConf.max_options; + max_length = instanceInfo.configuration.pollsConf.max_option_chars; + } else if (instanceInfo != null && instanceInfo.poll_limits != null) { + max_entry = instanceInfo.poll_limits.max_options; + max_length = instanceInfo.poll_limits.max_option_chars; + } + InputFilter[] fArray = new InputFilter[1]; + fArray[0] = new InputFilter.LengthFilter(max_length); + composePollBinding.option1.text.setFilters(fArray); + composePollBinding.option1.textLayout.setHint(getString(R.string.poll_choice_s, 1)); + composePollBinding.option2.text.setFilters(fArray); + composePollBinding.option2.textLayout.setHint(getString(R.string.poll_choice_s, 2)); + composePollBinding.option1.buttonRemove.setVisibility(View.GONE); + composePollBinding.option2.buttonRemove.setVisibility(View.GONE); + int finalMax_entry = max_entry; + composePollBinding.buttonAddOption.setOnClickListener(v -> { + if (pollCountItem[0] < finalMax_entry) { + ComposePollItemBinding composePollItemBinding = ComposePollItemBinding.inflate(LayoutInflater.from(composePollBinding.optionsList.getContext()), composePollBinding.optionsList, false); + if (composePollBinding.pollType.getCheckedButtonId() == R.id.poll_type_multiple) + composePollItemBinding.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_multiple); + composePollItemBinding.text.setFilters(fArray); + composePollItemBinding.textLayout.setHint(getString(R.string.poll_choice_s, (pollCountItem[0] + 1))); + LinearLayoutCompat viewItem = composePollItemBinding.getRoot(); + composePollBinding.optionsList.addView(composePollItemBinding.getRoot()); + composePollItemBinding.buttonRemove.setOnClickListener(view -> { + composePollBinding.optionsList.removeView(viewItem); + pollCountItem[0]--; + if (pollCountItem[0] >= finalMax_entry) { + composePollBinding.buttonAddOption.setVisibility(View.GONE); + } else { + composePollBinding.buttonAddOption.setVisibility(View.VISIBLE); + } + int childCount = composePollBinding.optionsList.getChildCount(); + for (int i = 0; i < childCount; i++) { + AppCompatEditText title = (composePollBinding.optionsList.getChildAt(i)).findViewById(R.id.text); + title.setHint(getString(R.string.poll_choice_s, i + 1)); + } + + }); + } + pollCountItem[0]++; + if (pollCountItem[0] >= finalMax_entry) { + composePollBinding.buttonAddOption.setVisibility(View.GONE); + } else { + composePollBinding.buttonAddOption.setVisibility(View.VISIBLE); + } + + }); + + + ArrayAdapter pollduration = ArrayAdapter.createFromResource(requireActivity(), + R.array.poll_duration, android.R.layout.simple_spinner_dropdown_item); + composePollBinding.pollDuration.setAdapter(pollduration); + composePollBinding.pollDuration.setSelection(4); + if (statusCompose != null && statusCompose.poll != null && statusCompose.poll.options != null) { + int i = 1; + for (Poll.PollItem pollItem : statusCompose.poll.options) { + if (i == 1) { + if (statusCompose.poll.multiple) + composePollBinding.option1.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_multiple); + if (pollItem.title != null) + composePollBinding.option1.text.setText(pollItem.title); + } else if (i == 2) { + if (statusCompose.poll.multiple) + composePollBinding.option2.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_multiple); + if (pollItem.title != null) + composePollBinding.option2.text.setText(pollItem.title); + } else { + + ComposePollItemBinding composePollItemBinding = ComposePollItemBinding.inflate(LayoutInflater.from(requireActivity()), new LinearLayout(requireActivity()), false); + if (composePollBinding.pollType.getCheckedButtonId() == R.id.poll_type_multiple) + composePollItemBinding.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_multiple); + else + composePollItemBinding.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_single); + + composePollItemBinding.text.setFilters(fArray); + composePollItemBinding.textLayout.setHint(getString(R.string.poll_choice_s, (pollCountItem[0] + 1))); + composePollItemBinding.text.setText(pollItem.title); + composePollBinding.optionsList.addView(composePollItemBinding.getRoot()); + composePollItemBinding.buttonRemove.setOnClickListener(view -> { + composePollBinding.optionsList.removeView(view); + pollCountItem[0]--; + }); + pollCountItem[0]++; + } + i++; + } + if (statusCompose.poll.options.size() >= max_entry) { + composePollBinding.buttonAddOption.setVisibility(View.GONE); + } + switch (statusCompose.poll.expire_in) { + case 300: + composePollBinding.pollDuration.setSelection(0); + break; + case 1800: + composePollBinding.pollDuration.setSelection(1); + break; + case 3600: + composePollBinding.pollDuration.setSelection(2); + break; + case 21600: + composePollBinding.pollDuration.setSelection(3); + break; + case 86400: + composePollBinding.pollDuration.setSelection(4); + break; + case 259200: + composePollBinding.pollDuration.setSelection(5); + break; + case 604800: + composePollBinding.pollDuration.setSelection(6); + break; + } + if (statusCompose.poll.multiple) + composePollBinding.pollType.check(R.id.poll_type_multiple); + else + composePollBinding.pollType.check(R.id.poll_type_single); + + + } + alertPoll.setNegativeButton(R.string.delete, (dialog, whichButton) -> { + if (statusCompose != null && statusCompose.poll != null) statusCompose.poll = null; + buttonState(); + dialog.dismiss(); + }); + alertPoll.setPositiveButton(R.string.save, null); + final AlertDialog alertPollDiaslog = alertPoll.create(); + alertPollDiaslog.setOnShowListener(dialog -> { + composePollBinding.pollType.addOnButtonCheckedListener((group, checkedId, isChecked) -> { + if (isChecked) { + if (checkedId == R.id.poll_type_single) { + if (statusCompose != null && statusCompose.poll != null) + statusCompose.poll.multiple = false; + for (int i = 0; i < composePollBinding.optionsList.getChildCount(); i++) { + ComposePollItemBinding child = ComposePollItemBinding.bind(composePollBinding.optionsList.getChildAt(i)); + child.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_single); + } + } else if (checkedId == R.id.poll_type_multiple) { + if (statusCompose != null && statusCompose.poll != null) + statusCompose.poll.multiple = true; + for (int i = 0; i < composePollBinding.optionsList.getChildCount(); i++) { + ComposePollItemBinding child = ComposePollItemBinding.bind(composePollBinding.optionsList.getChildAt(i)); + child.typeIndicator.setImageResource(R.drawable.ic_compose_poll_option_mark_multiple); + } + } + } + }); + Button b = alertPollDiaslog.getButton(AlertDialog.BUTTON_POSITIVE); + b.setOnClickListener(view1 -> { + int poll_duration_pos = composePollBinding.pollDuration.getSelectedItemPosition(); + + int selected_poll_type_id = composePollBinding.pollType.getCheckedButtonId(); + String choice1 = composePollBinding.option1.text.getText().toString().trim(); + String choice2 = composePollBinding.option2.text.getText().toString().trim(); + + if (choice1.isEmpty() && choice2.isEmpty()) { + Toasty.error(requireActivity(), getString(R.string.poll_invalid_choices), Toasty.LENGTH_SHORT).show(); + } else if (statusCompose != null) { + statusCompose.poll = new Poll(); + statusCompose.poll.multiple = selected_poll_type_id == R.id.poll_type_multiple; + int expire; + switch (poll_duration_pos) { + case 0: + expire = 300; + break; + case 1: + expire = 1800; + break; + case 2: + expire = 3600; + break; + case 3: + expire = 21600; + break; + case 4: + expire = 86400; + break; + case 5: + expire = 259200; + break; + case 6: + expire = 604800; + break; + default: + expire = 864000; + } + statusCompose.poll.expire_in = expire; + List pollItems = new ArrayList<>(); + int childCount = composePollBinding.optionsList.getChildCount(); + for (int i = 0; i < childCount; i++) { + Poll.PollItem pollItem = new Poll.PollItem(); + AppCompatEditText title = (composePollBinding.optionsList.getChildAt(i)).findViewById(R.id.text); + pollItem.title = title.getText().toString(); + pollItems.add(pollItem); + } + List options = new ArrayList<>(); + boolean doubleTitle = false; + for (Poll.PollItem po : pollItems) { + if (!options.contains(po.title.trim())) { + options.add(po.title.trim()); + } else { + doubleTitle = true; + } + } + if (!doubleTitle) { + statusCompose.poll.options = pollItems; + dialog.dismiss(); + } else { + Toasty.error(requireActivity(), getString(R.string.poll_duplicated_entry), Toasty.LENGTH_SHORT).show(); + } + } + binding.buttonPoll.setVisibility(View.VISIBLE); + buttonState(); + }); + }); + + alertPollDiaslog.show(); + } + + + private void initiliazeStatus() { + statusCompose = new Status(); + binding.text.setText(""); + binding.attachmentsListContainer.removeAllViews(); if (statuses != null && statuses.size() > 0) { + binding.recyclerView.scrollToPosition(statuses.size() - 1); Status lastStatus = statuses.get(statuses.size() - 1); - status.in_reply_to_id = lastStatus.id; - status.visibility = "direct"; - status.mentions = new ArrayList<>(); + statusCompose.in_reply_to_id = lastStatus.id; + statusCompose.visibility = "direct"; + statusCompose.mentions = new ArrayList<>(); if (lastStatus.account.acct != null && currentAccount.mastodon_account != null && !lastStatus.account.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) { Mention mention = new Mention(); mention.acct = "@" + lastStatus.account.acct; mention.url = lastStatus.account.url; mention.username = lastStatus.account.username; - status.mentions.add(mention); + statusCompose.mentions.add(mention); } //There are other mentions to if (lastStatus.mentions != null && lastStatus.mentions.size() > 0) { for (Mention mentionTmp : lastStatus.mentions) { if (currentAccount.mastodon_account != null && !mentionTmp.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) { - status.mentions.add(mentionTmp); + statusCompose.mentions.add(mentionTmp); } } } } - return status; + manageMentions(statusCompose); } /** @@ -353,7 +600,6 @@ public class FragmentMastodonDirectMessage extends Fragment { } } binding.text.setText(statusCompose.text); - statusCompose.cursorPosition = statusCompose.text.length(); if (statusCompose.mentions.size() > 1) { if (!mentionsAtTop) { statusCompose.text += "\n"; @@ -366,7 +612,7 @@ public class FragmentMastodonDirectMessage extends Fragment { binding.text.setText(statusCompose.text); binding.text.requestFocus(); binding.text.post(() -> { - binding.text.setSelection(statusCompose.cursorPosition); //Put cursor at the end + binding.text.setSelection(statusCompose.text.length()); //Put cursor at the end }); } else { binding.text.requestFocus(); @@ -685,10 +931,9 @@ public class FragmentMastodonDirectMessage extends Fragment { statuses.addAll(0, context.ancestors); statusDirectMessageAdapter.notifyItemRangeInserted(0, statusPosition); statuses.addAll(statusPosition + 1, context.descendants); - initiliazeStatus(); statusDirectMessageAdapter.notifyItemRangeInserted(statusPosition + 1, context.descendants.size()); binding.swipeContainer.setRefreshing(false); - binding.recyclerView.scrollToPosition(statusPosition); + initiliazeStatus(); } public interface FirstMessage { diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml index 7f93abfd..3cec7803 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_left_tail.xml @@ -6,13 +6,13 @@ android:pivotY="100%" android:toDegrees="0"> - + - + diff --git a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml index fa68f846..b87980d6 100644 --- a/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml +++ b/app/src/main/res/drawables/mastodon/drawable/bubble_right_tail.xml @@ -6,13 +6,13 @@ android:pivotY="100%" android:toDegrees="0"> - + - + diff --git a/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml b/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml index e6638f08..bf6a5933 100644 --- a/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml +++ b/app/src/main/res/layouts/mastodon/layout/activity_direct_message.xml @@ -14,49 +14,40 @@ You should have received a copy of the GNU General Public License along with Fedilab; if not, see --> - + android:orientation="vertical"> - + android:layout_height="?attr/actionBarSize" + android:fitsSystemWindows="true"> - + - + + - - - - - - + - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml index f0cfe672..072a345f 100644 --- a/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml +++ b/app/src/main/res/layouts/mastodon/layout/drawer_status_chat.xml @@ -64,7 +64,18 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/message_content"> + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7821d5dd..89f739b8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -206,4 +206,8 @@ #BBD144 #46483B #000000 + + + #E0E0E0 +