From b06df8c3d0bf487300684de2e9485f22dfe45400 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 29 Sep 2023 07:53:31 +0200 Subject: [PATCH 1/8] New translations strings.xml (Galician) --- .../src/main/res/values-gl-rES/strings.xml | 248 ++++++++++++++++++ 1 file changed, 248 insertions(+) diff --git a/mastodon/src/main/res/values-gl-rES/strings.xml b/mastodon/src/main/res/values-gl-rES/strings.xml index 550afd2608..3eeced4301 100644 --- a/mastodon/src/main/res/values-gl-rES/strings.xml +++ b/mastodon/src/main/res/values-gl-rES/strings.xml @@ -12,6 +12,10 @@ Como resposta a %s Notificacións %s comezou a seguirte + %s enviouche unha solicitude de seguimento + %s marcou como favorita a túa publicación + %s promoveu a túa publicación + Mira os resultados dunha enquisa na que votaches Compartir Axustes Publicar @@ -33,6 +37,7 @@ Seguir Seguindo Editar perfil + Compartir perfil Acalar a %s Deixar de acalar a @%s Bloquear a %s @@ -80,6 +85,10 @@ Queda %d día Quedan %d días + + %,d voto + %,d votos + Pechada Acalar conta Confirma Acalar a %s @@ -98,27 +107,35 @@ Bloqueado Votar Eliminar + Eliminar publicación Tes a certeza de querer eliminar esta publicación? Eliminando… Reproducir música Reproducir Deter + Pechar sesión Engadir conta Procurar Cancelos Novas Para ti + Todo Mencións %d persoa está comentando %d persoas están comentando Denunciar a %s + Cal é o problema con esta publicación? + Cal é o problema con %s? Elixe a mellor coincidencia + Non me gusta Non é algo que queiras ver + É spam Ligazóns perigosas, relacións falsas, ou respostas repetitivas Viola as regras do servidor Descubriches que quebra certas regras en concreto + É outra cousa O problema non entra noutras categorías Que regras foron incumpridas? Elixe todo o que sexa de aplicación @@ -127,8 +144,14 @@ Hai algo máis que creas debamos saber? Comentarios adicionais Enviando a denuncia… + Grazas pola denuncia, investigarémola. + Mentras revisamos esto, podes tomar accións contra %s: Deixar de seguir a %s Deixar de seguir + Non verás as súas publicacións. Poderá seguirte e ver as túas publicacións e non saberá que a silenciaches. + Non vas ver as súas publicacións. Nin verá as túas publicacións nin poderá seguirte. Poderá comprobar que a bloqueaches. + Non queres ver esto? + Aquí tes unhas opcións para controlar o que ves en Mastodon: Volver Nome do servidor ou URL Regras do servidor @@ -155,14 +178,19 @@ Tecnoloxía Mira na caixa de correo + Preme na ligazón que che enviamos para verificar a %s. Agardamos por ti. + Non recibiches unha ligazón? Reenviar Abrir app de email Enviado o email de confirmación + Escribe o que che apeteza Aviso sobre o contido Gardar Engadir texto descritivo Público Só para seguidoras + Só para as mencionadas + Recentes Omitir Novas seguidoras Favoritas @@ -171,8 +199,14 @@ Enquisas Elixir conta Primeiro tes que acceder a Mastodon + + Non podes engadir máis de %d elemento multimedia + Non podes engadir máis de %d elementos multimedia + O ficheiro %s é dun tipo non permitido O ficheiro %1$s supera o límite de %2$s MB + Aparencia + Seguir ao dispositivo Claro Escuro Comportamento @@ -185,6 +219,9 @@ Limpar caché multimedia Mastodon para Android v%1$s (%2$d) Baleiramos a memoria caché + Pechar sesión %s? + A autora marcou este multimedia como sensible. + Ir ao perfil de %s Máis opcións Nova publicación Responder @@ -200,6 +237,7 @@ Visor multimedia Segue a %s Deixaches de seguir a %s + Estás a seguir a %s Solicitaches seguir a %s Abrir nun navegador Agochar promocións de @%s @@ -217,7 +255,13 @@ Produciuse un erro ao gardar o ficheiro Ficheiro gardado Descargando… + Non hai apps para esta acción + Local + Estas son as publicacións en voga en Mastodon. + Estas son as novas historias das que se está a falar en Mastodon. + Estas son as publicacións das usuarias do teu servidor (%s). + Poderían interesarche estas contas en función doutras que segues. Ver novas publicacións Cargar publicacións que faltan Seguir tamén @@ -295,6 +339,7 @@ Benvida outra vez Accede co servidor onde creaches a conta. URL do servidor + Elixiremos un servidor no teu idioma se segues sen seleccionar nada. Calquer idioma Rexistro Instantáneo Revisión manual @@ -307,6 +352,7 @@ Oceanía Non se aceptan novas usuarias Intereses Especiais + Os contrasinais non coinciden Elixe por min Engadir fila Configuración do perfil @@ -315,12 +361,14 @@ Popular en Mastodon Seguir a todas Non aceptar + Resumo: non recollemos nin procesamos nada. Rexeitar %s Biografía Seguindo usuarias… + %1$s non acepta rexistros desde %2$s. Proba outro ou <a>elixe outro servidor</a>. Mostrar igualmente Volver agochar Elixe unha ou varias @@ -333,22 +381,222 @@ Mostrar Agochar Únete a %s + Elixe outro servidor ou Saber máis Benvida a Mastodon Mastodon é unha rede social descentralizada, onde ningunha empresa ten o control. Está formada por moitos servidores independentes comunicándose entre si. Que son os servidores? + Cada conta Mastodon está hospedada nun servidor — cada un coas súas regras, valores e admins. Non importa cal elixas, podes seguir e interactuar con persoas de outros servidores. + Abrindo ligazón… + Esta ligazón non está soportada pola app + Pechar sesión de todas as contas + Pechar sesión de todas as contas? + Volver tentar + Fallou o envío da publicación + %s imaxe + %s vídeo + %s audio + %s ficheiro + Imaxe + Vídeo + Audio + GIF + Ficheiro + %d%% subido + Engadir opción na enquisa + Lonxitude da enquisa + Estilo + Escolla simple + Escolla múltiple + Eliminar opción da enquisa + Estilo da enquisa + Texto Alt + Axuda + Que é o Text Alt? + O Text Alt proporciona descrición das imaxes para as persoas con deficiencias visuais, conexións a internet de baixa calidade ou para engadir contexto ás mesmas.\n\nPodes mellorar a accesibilidade e a comprensión da publicación ao escribir un texto alternativo claro, conciso e obxectivo.\n\n + Editar publicación + Ligazón non verificada + Ver emoji + Atopa as persoas que buscas + Non atopamos nada con estos termos + Idioma + Por defecto + Sistema + Detección do idioma + Non se identificou o idioma + Identificado + Multimedia oculto + Publicación oculta + Denunciar publicación + A conta é doutro servidor. Enviar unha copia anónima da denuncia aló tamén? + Reenviar a %s + Denunciado + Retira o seguimento para non ver máis as súas publicacións na cronoloxía de inicio. + %s foi acalada + Xa bloqueaches a esta usuaria, non tes que facer nada máis ata que revisemos a túa denuncia. + Xa bloqueaches a esta usuaria, non tes que facer nada máis.\n\nGrazas por axudarnos a facer de Mastodon un lugar seguro! + Bloqueaches a %s + Marcar todo como lido + Mostar + Filtros + Vista xeral, regras, moderación + Acerca de %s + Idioma por defecto da publicación + Lembrar engadir Texto Alt + Preguntar antes de deixar de seguir + Preguntar antes de promover + Preguntar antes de borrar publicacións + Deter todo + Apagado + Calquera + Persoas que te seguen + Persoas que segues + Ninguén + Recibir notificacións de + Mencións e respostas + Deter todas as notificacións + + %d semana + %d semanas + + %1$s ás %2$s + hoxe + onte + mañá + Remata en %s + As notificacións volven %s. + Reactivar agora + Ir aos axustes das notificacións + Acerca de + Regras + Administración + Mensaxe a Admin + Activar notificacións nos axustes do dispositivo para ver todas as actualizacións. + Máis axustes + Mostrar avisos sobre o contido + Agochar multimedia sensible + Conta das interaccións + Emoji persoal nos nomes públicos + + en %d segundo + en %d segundos + + + en %d minuto + en %d minutos + + + en %d hora + en %d horas + + + fai %d hora + fai %d horas + + O multimedia non ten Texto Alt + + %s das imaxes non ten Alt Text. Publicar? + %s das imaxes non teñen Alt Text. Publicar? + + + %s dos anexos multimedia non ten Alt Text. Publicar? + %s dos anexos multimedia non teñen Alt Text. Publicar? + + Un + Dous + Tres + Catro + Publicar + Deixar de seguir a %s? + Activa + Inactiva + Engadir filtro + Editar filtro + Duración + Palabras acaladas + Acalar desde + Mostrar cun aviso sobre o contido + Mostrar publicacións incluso se cumplen co filtro, pero detrás dun aviso + Eliminar filtro + Para sempre + Remata %s + + %d palabra ou frase acalada + %d palabras ou frases acaladas + + %1$s e %2$s + %1$s, %2$s e %3$s + %1$s,%2$s e outras %3$d + Inicio & listas + Notificacións + Cronoloxías públicas + Conversas & respostas + Perfís + Título + Eliminar filtro \"%s\"? + Vaise eliminar este filtro da túa conta en todos os teus dispositivos. + Engadir palabra para acalar + Editar palabra acalada + Engadir + Palabra ou frase + As palabras non distinguen as maiúsculas e compara a palabra completa.\n\nSe o filtro compara \"Pataca\", agochará tanto \"pataca\" como \"pATaca\" pero non \"patacaza\". + Eliminar palabra \"%s\"? + Escoller + Escoller todo + Duración do filtro + Personalizado + + Eliminar %d palabra? + Eliminar %d palabras? + + + %d seleccionado + %d seleccionados + + Non pode estar baleiro + Xa está na lista + Actualización preparada + Versión %s + Descargando (%d%%) + Concorda co filtro “%s” + Buscar en Mastodon + Limpar todo + Abrir URL en Mastodon + Publicacións con \"%s\" + Ir a %s + Publicacións con “%s” + Persoas con “%s” + fai %d seg. + fai %d min + fai %d horas + hai %d días + Traducir do %s + Traducido do %1$s usando %2$s + Mostrar o orixinal + Fallou a tradución. É posible que a administración non activase a tradución neste servidor ou que o servidor teña unha versión antiga de Mastodon que non ten soporte para a tradución. + Privacidade e alcance + Perfil destacado e publicacións nos algoritmos de descubrimento + Incluír publicacións públicas nos resultados das buscas + + %,d participante + %,d participantes + + + %,d publicación hoxe + %,d publicacións hoxe + From 68a9fe83766e721430401ba02abec98f5098cab1 Mon Sep 17 00:00:00 2001 From: alextecplayz Date: Fri, 29 Sep 2023 08:27:26 +0000 Subject: [PATCH 2/8] Translated using Weblate (Romanian) Currently translated at 100.0% (386 of 386 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ro/ --- .../src/main/res/values-ro-rRO/strings_sk.xml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml index b4c4d38387..06a7bb3850 100644 --- a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml +++ b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml @@ -363,4 +363,38 @@ Suprapunere audio Permiteți continuarea redării media curente, suprapunând noua redare Ați fost menționați de către %s + %d secunde + Doar când postarea este deschisă + %d ore + Ascundeți reacțiile emoji goale + Afișați reacțiile emoji în cronologii + + postare + postări + postări + + Activați reacții emoji + Sinucidere + Încărcați postări mai noi + %d zile + Afișați mereu butonul adăugare + Găsiți o linie de asistență telefonică + Scrieți pentru a reacționa cu un emoji + Nu mai afișați din nou + http://www.antisuicid.com/ + Vă rugăm scrieți un emoji + Acestea sunt postările care prind tracțiune pe serverul tău. + Reacționați cu un emoji + Încărcați postări mai vechi + Afișează reacțiile emoji la postări și vă permite să le adăugați pe ale dumneavoastră. Diferite servere Fedivers acceptă acest lucru, dar Mastodon nu. + Dacă sunteți în pericol… + %d minute + + Un utilizator a reacționat cu %2$s + %1$,d utilizatori au reacționat cu %2$s + %1$,d de utilizatori au reacționat cu %2$s + + Dacă sunteți în căutarea unui semn pentru a nu vă sinucide, acesta este. Vă rugăm să luați în considerare posibilitatea de a apela la o linie telefonică locală de urgență pentru suicid dacă vă aflați în dificultate. + Acestea sunt știrile despre care se vorbește pe serverul tău. + Postare conține media \ No newline at end of file From d219d7aa4b567227bde0dc137962bbc120ed8f22 Mon Sep 17 00:00:00 2001 From: butterflyoffire Date: Fri, 29 Sep 2023 19:51:19 +0000 Subject: [PATCH 3/8] Translated using Weblate (Arabic) Currently translated at 78.2% (302 of 386 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ar/ --- mastodon/src/main/res/values-ar/strings_sk.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mastodon/src/main/res/values-ar/strings_sk.xml b/mastodon/src/main/res/values-ar/strings_sk.xml index 14d38c7a78..6a36e689ca 100644 --- a/mastodon/src/main/res/values-ar/strings_sk.xml +++ b/mastodon/src/main/res/values-ar/strings_sk.xml @@ -300,4 +300,12 @@ يُرجى إدخال إيموجي ردّا على لا يمكن فتحه في التطبيق + تمكين حذف الإشعارات + أتريد حقا حذف كافة الإشعارات؟ + موجود بالفعل في الفواصل المرجعية + المَورِد غير موجود + أتريد حقا حذف هذا الإشعار؟ + تحرير مسودة أو برمجتها + هذه هي القصص الإخبارية التي يُتَحدّث عنها في خادمكم. + إشعارات المنشورات \ No newline at end of file From 98a02e874baf8a82a7c96ae0c0513ca326929fa2 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Sep 2023 15:05:49 +0200 Subject: [PATCH 4/8] New translations strings.xml (Vietnamese) --- mastodon/src/main/res/values-vi-rVN/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mastodon/src/main/res/values-vi-rVN/strings.xml b/mastodon/src/main/res/values-vi-rVN/strings.xml index 1b74201cfe..b2298ec8d2 100644 --- a/mastodon/src/main/res/values-vi-rVN/strings.xml +++ b/mastodon/src/main/res/values-vi-rVN/strings.xml @@ -559,6 +559,9 @@ Dịch từ %1$s bằng %2$s Bản gốc Dịch không thành công. Có thể quản trị viên chưa bật dịch trên máy chủ này hoặc máy chủ này đang chạy phiên bản cũ hơn của Mastodon chưa hỗ trợ dịch. + Riêng tư và tiếp cận + Cho phép khám phá hồ sơ + Cho phép hiện tút công khai trong kết quả tìm kiếm %,d người thảo luận From 95685d4de868c543775c09f0226a0653dea0ec45 Mon Sep 17 00:00:00 2001 From: Tyler Baker <91493312+btylerh7@users.noreply.github.com> Date: Sat, 30 Sep 2023 13:21:36 -0400 Subject: [PATCH 5/8] Feature: Support filtering custom emoji in reaction view (#836) * Support filtering custom emojis in reaction keyboard. * Move creation of EditText to conditional block. * Clear unused comment * Update requests variable when publishing filter results so the images displayed will be correct. * Combine text fields in emoji reaction keyboard, create new initializer for EmojiCategory so it can be copied properly. * Performance optimization and fixed a typo in filter. * improve layout --------- Co-authored-by: sk --- .../android/model/EmojiCategory.java | 5 + .../android/ui/CustomEmojiPopupKeyboard.java | 109 +++++++++++++----- mastodon/src/main/res/values/strings_sk.xml | 4 +- 3 files changed, 88 insertions(+), 30 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiCategory.java b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiCategory.java index 902a60eb28..95eaadf282 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiCategory.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiCategory.java @@ -1,5 +1,6 @@ package org.joinmastodon.android.model; +import java.util.ArrayList; import java.util.List; public class EmojiCategory{ @@ -10,4 +11,8 @@ public EmojiCategory(String title, List emojis){ this.title=title; this.emojis=emojis; } + public EmojiCategory(EmojiCategory category){ + this.title = category.title; + this.emojis = new ArrayList<>(category.emojis); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java b/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java index 2c61a1d315..c1a2fd75a7 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/CustomEmojiPopupKeyboard.java @@ -17,6 +17,8 @@ import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.Filter; +import android.widget.Filterable; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; @@ -34,6 +36,7 @@ import org.joinmastodon.android.model.EmojiCategory; import org.joinmastodon.android.ui.utils.UiUtils; +import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -125,13 +128,13 @@ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull R new StickyHeadersOverlay(activity, 0).install(list); LinearLayout ll=new LinearLayout(activity) { - @Override - public boolean onInterceptTouchEvent(MotionEvent e){ - if (e.getAction() == MotionEvent.ACTION_MOVE) { - getParent().requestDisallowInterceptTouchEvent(true); - } - return false; + @Override + public boolean onInterceptTouchEvent(MotionEvent e){ + if (e.getAction() == MotionEvent.ACTION_MOVE) { + getParent().requestDisallowInterceptTouchEvent(true); } + return false; + } }; ll.setOrientation(LinearLayout.VERTICAL); ll.setElevation(V.dp(3)); @@ -139,43 +142,52 @@ public boolean onInterceptTouchEvent(MotionEvent e){ ll.addView(list, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f)); - FrameLayout bottomPanel=new FrameLayout(activity); - bottomPanel.setPadding(V.dp(16), V.dp(8), V.dp(16), V.dp(8)); - bottomPanel.setBackgroundResource(R.drawable.bg_m3_surface2); - ll.addView(bottomPanel, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - if(forReaction){ + FrameLayout topPanel=new FrameLayout(activity); + topPanel.setPadding(V.dp(16), V.dp(12), V.dp(16), V.dp(12)); + topPanel.setBackgroundResource(R.drawable.bg_m3_surface2); + ll.addView(topPanel, 0, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + InputMethodManager imm=(InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); - - // TODO: support filtering custom emoji EditText input=new EditText(activity); input.setHint(R.string.sk_enter_emoji_hint); input.addTextChangedListener(new TextWatcher() { @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (!s.toString().isEmpty()) { - if (emojiRegex.matcher(s.toString()).find()) { + public void onTextChanged(CharSequence s, int start, int before, int count){ + // Only check the emoji regex if the text field was empty before + if(start == 0){ + if(emojiRegex.matcher(s.toString()).find()){ imm.hideSoftInputFromWindow(input.getWindowToken(), 0); listener.onEmojiSelected(s.toString().substring(before)); input.getText().clear(); - } else { - Toast.makeText(activity, R.string.sk_enter_emoji_toast, Toast.LENGTH_SHORT).show(); - input.getText().clear(); } } + for(int i=0; i implements ImageLoaderRecyclerAdapter{ - private final EmojiCategory category; - private final List requests; + private class SingleCategoryAdapter extends UsableRecyclerView.Adapter implements ImageLoaderRecyclerAdapter, Filterable{ + private EmojiCategory category; + + private final EmojiCategory originalCategory; + private List requests; public SingleCategoryAdapter(EmojiCategory category){ super(imgLoader); this.category=category; + this.originalCategory=new EmojiCategory(category); requests=category.emojis.stream().map(e->new UrlImageLoaderRequest(e.getUrl(playGifs), V.dp(24), V.dp(24))).collect(Collectors.toList()); } @@ -225,17 +240,22 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position){ + if(category.emojis.size() == 0) { + holder.itemView.setVisibility(View.GONE); + } if(holder instanceof EmojiViewHolder evh){ evh.bind(category.emojis.get(position-1)); evh.positionWithinCategory=position-1; }else if(holder instanceof SectionHeaderViewHolder shvh){ shvh.bind(TextUtils.isEmpty(category.title) ? domain : category.title); } + super.onBindViewHolder(holder, position); } @Override public int getItemCount(){ + if(category.emojis.size() == 0) return 0; return category.emojis.size()+1; } @@ -253,6 +273,39 @@ public int getImageCountForItem(int position){ public ImageLoaderRequest getImageRequest(int position, int image){ return requests.get(position-1); } + + @Override + public Filter getFilter(){ + return emojiFilter; + } + private final Filter emojiFilter = new Filter(){ + @Override + protected FilterResults performFiltering(CharSequence charSequence){ + List filteredEmoji=new ArrayList<>(); + String search=charSequence.toString().toLowerCase().trim(); + + if(charSequence==null || charSequence.length()==0){ + filteredEmoji.addAll(originalCategory.emojis); + }else{ + for(Emoji emoji : originalCategory.emojis){ + if(emoji.shortcode.toLowerCase().contains(search)){ + filteredEmoji.add(emoji); + } + } + + } + FilterResults results=new FilterResults(); + results.values=filteredEmoji; + return results; + } + @Override + protected void publishResults(CharSequence charSequence, FilterResults filterResults){ + category.emojis.clear(); + category.emojis.addAll((List) filterResults.values); + requests=category.emojis.stream().map(e->new UrlImageLoaderRequest(e.getUrl(playGifs), V.dp(24), V.dp(24))).collect(Collectors.toList()); + notifyDataSetChanged(); + } + }; } private class SectionHeaderViewHolder extends BindableViewHolder implements StickyHeadersOverlay.HeaderViewHolder{ diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 01d926db1d..6c0ecf7aaf 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -363,8 +363,8 @@ %1$,d users reacted with %2$s React with emoji - Please type an emoji - Type to react with an emoji + Please type an emoji + Type an emoji or search custom emoji Duration Indefinite 5 minutes From 7da363fb87278b2e245177f2e09f3c647792d923 Mon Sep 17 00:00:00 2001 From: butterflyoffire Date: Sat, 30 Sep 2023 06:53:53 +0000 Subject: [PATCH 6/8] Translated using Weblate (Arabic) Currently translated at 80.3% (310 of 386 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ar/ --- mastodon/src/main/res/values-ar/strings_sk.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mastodon/src/main/res/values-ar/strings_sk.xml b/mastodon/src/main/res/values-ar/strings_sk.xml index 6a36e689ca..9eafdf22e6 100644 --- a/mastodon/src/main/res/values-ar/strings_sk.xml +++ b/mastodon/src/main/res/values-ar/strings_sk.xml @@ -308,4 +308,12 @@ تحرير مسودة أو برمجتها هذه هي القصص الإخبارية التي يُتَحدّث عنها في خادمكم. إشعارات المنشورات + هل أنت متأكد من أنك تريد حذف مُسودّة هذا المنشور؟ + لا تُبرمِجه + أتريد حقا مسح لغاتك المُستخدَمة حديثا؟ + هل أنت متأكد من أنك تريد حذف هذا المنشور المُبرمَج؟ + هذه هي المنشورات المثيرة للإهتمام على خادمكم. + هذه هي أحدث المنشورات للأعضاء في فديراليتك. + هذه هي أحدث المنشورات على الشبكة والتي انتقاها مُدراء خادمكم. + برمجة أو تحرير مُسودّة \ No newline at end of file From a21a74a8e79a02ed8dd667ca377fc6869cfddec0 Mon Sep 17 00:00:00 2001 From: sk Date: Sat, 30 Sep 2023 19:26:15 +0200 Subject: [PATCH 7/8] bonk version --- mastodon/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 39f06cf186..1394b43dca 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -15,8 +15,8 @@ android { applicationId "org.joinmastodon.android.sk" minSdk 23 targetSdk 33 - versionCode 99 - versionName "2.1.4+fork.99" + versionCode 100 + versionName "2.1.4+fork.100" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW'] } From fc10fbffb08cf2aa6a7780a5f42a6d51b4a04259 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sat, 30 Sep 2023 21:53:02 +0300 Subject: [PATCH 8/8] Clear fragment stack instead of restarting activity grishka/appkit#13 --- .../joinmastodon/android/MainActivity.java | 72 ++++++++++--------- .../onboarding/AccountActivationFragment.java | 4 +- .../settings/SettingsMainFragment.java | 4 +- .../android/ui/AccountSwitcherSheet.java | 14 ++-- 4 files changed, 47 insertions(+), 47 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java index 7d25fa0565..56cb30b9e9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java +++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java @@ -42,40 +42,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); if(savedInstanceState==null){ - if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ - showFragmentClearingBackStack(new SplashFragment()); - }else{ - AccountSessionManager.getInstance().maybeUpdateLocalInfo(); - AccountSession session; - Bundle args=new Bundle(); - Intent intent=getIntent(); - if(intent.getBooleanExtra("fromNotification", false)){ - String accountID=intent.getStringExtra("accountID"); - try{ - session=AccountSessionManager.getInstance().getAccount(accountID); - if(!intent.hasExtra("notification")) - args.putString("tab", "notifications"); - }catch(IllegalStateException x){ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - }else{ - session=AccountSessionManager.getInstance().getLastActiveAccount(); - } - args.putString("account", session.getID()); - Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); - fragment.setArguments(args); - showFragmentClearingBackStack(fragment); - if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){ - Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification")); - showFragmentForNotification(notification, session.getID()); - }else if(intent.getBooleanExtra("compose", false)){ - showCompose(); - }else if(Intent.ACTION_VIEW.equals(intent.getAction())){ - handleURL(intent.getData(), null); - }else{ - maybeRequestNotificationsPermission(); - } - } + restartHomeFragment(); } if(BuildConfig.BUILD_TYPE.startsWith("appcenter")){ @@ -200,4 +167,41 @@ private void maybeRequestNotificationsPermission(){ requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 100); } } + + public void restartHomeFragment(){ + if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ + showFragmentClearingBackStack(new SplashFragment()); + }else{ + AccountSessionManager.getInstance().maybeUpdateLocalInfo(); + AccountSession session; + Bundle args=new Bundle(); + Intent intent=getIntent(); + if(intent.getBooleanExtra("fromNotification", false)){ + String accountID=intent.getStringExtra("accountID"); + try{ + session=AccountSessionManager.getInstance().getAccount(accountID); + if(!intent.hasExtra("notification")) + args.putString("tab", "notifications"); + }catch(IllegalStateException x){ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + }else{ + session=AccountSessionManager.getInstance().getLastActiveAccount(); + } + args.putString("account", session.getID()); + Fragment fragment=session.activated ? new HomeFragment() : new AccountActivationFragment(); + fragment.setArguments(args); + showFragmentClearingBackStack(fragment); + if(intent.getBooleanExtra("fromNotification", false) && intent.hasExtra("notification")){ + Notification notification=Parcels.unwrap(intent.getParcelableExtra("notification")); + showFragmentForNotification(notification, session.getID()); + }else if(intent.getBooleanExtra("compose", false)){ + showCompose(); + }else if(Intent.ACTION_VIEW.equals(intent.getAction())){ + handleURL(intent.getData(), null); + }else{ + maybeRequestNotificationsPermission(); + } + } + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java index 6395cc415a..75325ad4a6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java @@ -165,9 +165,7 @@ public void onError(ErrorResponse error){ private void tryGetAccount(){ if(AccountSessionManager.getInstance().tryGetAccount(accountID)==null){ uiHandler.removeCallbacks(pollRunnable); - getActivity().finish(); - Intent intent=new Intent(getActivity(), MainActivity.class); - startActivity(intent); + ((MainActivity)getActivity()).restartHomeFragment(); return; } currentRequest=new GetOwnAccount() diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java index 93ae3b82c8..e7ea455f4a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsMainFragment.java @@ -156,9 +156,7 @@ private void onLogOutClick(){ .setMessage(getString(R.string.confirm_log_out, session.getFullUsername())) .setPositiveButton(R.string.log_out, (dialog, which)->AccountSessionManager.get(accountID).logOut(getActivity(), ()->{ loggedOut=true; - getActivity().finish(); - Intent intent=new Intent(getActivity(), MainActivity.class); - startActivity(intent); + ((MainActivity)getActivity()).restartHomeFragment(); })) .setNegativeButton(R.string.cancel, null) .show(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java index 23e9382306..540c1c900f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java @@ -8,6 +8,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; +import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; @@ -36,6 +37,7 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.recyclerview.widget.LinearLayoutManager; +import me.grishka.appkit.FragmentStackActivity; import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; @@ -113,9 +115,7 @@ private void confirmLogOutAll(){ private void logOut(String accountID){ AccountSessionManager.get(accountID).logOut(activity, ()->{ dismiss(); - activity.finish(); - Intent intent=new Intent(activity, MainActivity.class); - activity.startActivity(intent); + ((MainActivity)activity).restartHomeFragment(); }); } @@ -248,17 +248,17 @@ public void clearImage(int index){ @Override public void onClick(){ + dismiss(); if(AccountSessionManager.getInstance().getLastActiveAccountID().equals(item.getID())){ - dismiss(); if(fragment!=null){ fragment.setCurrentTab(R.id.tab_profile); } return; } - if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null) + if(AccountSessionManager.getInstance().tryGetAccount(item.getID())!=null){ AccountSessionManager.getInstance().setLastActiveAccountID(item.getID()); - activity.finish(); - activity.startActivity(new Intent(activity, MainActivity.class)); + ((MainActivity)activity).restartHomeFragment(); + } } @Override