From 6ef8b515c6b9701cb4be91883f0a2bafef1800d2 Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Wed, 6 Jan 2021 14:32:47 -0500 Subject: [PATCH 1/3] New Crowdin updates (#492) * New translations strings.xml (Japanese) * New translations strings.xml (Hindi) * New translations strings.xml (Spanish) * New translations strings.xml (Spanish) * New translations arrays.xml (Chinese Traditional) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Chinese Traditional) * New translations arrays.xml (German) * New translations arrays.xml (Indonesian) * New translations strings.xml (Indonesian) * New translations strings.xml (Indonesian) * New translations arrays.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Odia) * New translations strings.xml (Odia) * New translations strings.xml (Odia) * New translations strings.xml (Odia) * New translations strings.xml (Odia) * New translations strings.xml (Chinese Traditional) * New translations arrays.xml (French) * New translations arrays.xml (Indonesian) * New translations arrays.xml (Slovak) * New translations arrays.xml (Kannada) * New translations arrays.xml (Dutch) * New translations arrays.xml (Russian) * New translations arrays.xml (Catalan) * New translations arrays.xml (Odia) * New translations arrays.xml (Hindi) * New translations arrays.xml (Persian) * New translations arrays.xml (Portuguese, Brazilian) * New translations arrays.xml (Spanish) * New translations arrays.xml (Vietnamese) * New translations arrays.xml (Chinese Traditional) * New translations arrays.xml (Chinese Simplified) * New translations arrays.xml (Turkish) * New translations arrays.xml (Polish) * New translations arrays.xml (Macedonian) * New translations arrays.xml (Italian) * New translations arrays.xml (German) * New translations arrays.xml (Czech) * New translations arrays.xml (Japanese) * Update source file arrays.xml * New translations strings.xml (Odia) * New translations strings.xml (Macedonian) * New translations strings.xml (Macedonian) * New translations strings.xml (Macedonian) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations strings.xml (Japanese) * New translations arrays.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Slovak) * New translations strings.xml (Catalan) * New translations strings.xml (Japanese) * New translations arrays.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Dutch) * New translations strings.xml (Russian) * New translations arrays.xml (Russian) * New translations strings.xml (Russian) * New translations strings.xml (Japanese) --- app/src/main/res/values-ca/arrays.xml | 34 +++---- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cs/arrays.xml | 34 +++---- app/src/main/res/values-de/arrays.xml | 38 ++++---- app/src/main/res/values-es/arrays.xml | 34 +++---- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-fa/arrays.xml | 34 +++---- app/src/main/res/values-fr/arrays.xml | 34 +++---- app/src/main/res/values-hi/arrays.xml | 34 +++---- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-in/arrays.xml | 40 ++++---- app/src/main/res/values-in/strings.xml | 64 ++++++------- app/src/main/res/values-it/arrays.xml | 34 +++---- app/src/main/res/values-ja/arrays.xml | 40 ++++---- app/src/main/res/values-ja/strings.xml | 26 +++--- app/src/main/res/values-kn/arrays.xml | 34 +++---- app/src/main/res/values-mk/arrays.xml | 34 +++---- app/src/main/res/values-mk/strings.xml | 104 ++++++++++----------- app/src/main/res/values-nl/arrays.xml | 40 ++++---- app/src/main/res/values-nl/strings.xml | 8 +- app/src/main/res/values-or/arrays.xml | 34 +++---- app/src/main/res/values-or/strings.xml | 38 ++++---- app/src/main/res/values-pl/arrays.xml | 34 +++---- app/src/main/res/values-pt/arrays.xml | 34 +++---- app/src/main/res/values-ru/arrays.xml | 40 ++++---- app/src/main/res/values-ru/strings.xml | 84 ++++++++--------- app/src/main/res/values-sk/arrays.xml | 40 ++++---- app/src/main/res/values-sk/strings.xml | 12 +-- app/src/main/res/values-tr/arrays.xml | 34 +++---- app/src/main/res/values-vi/arrays.xml | 34 +++---- app/src/main/res/values-zh-rCN/arrays.xml | 34 +++---- app/src/main/res/values-zh-rTW/arrays.xml | 40 ++++---- app/src/main/res/values-zh-rTW/strings.xml | 22 ++--- 33 files changed, 577 insertions(+), 577 deletions(-) diff --git a/app/src/main/res/values-ca/arrays.xml b/app/src/main/res/values-ca/arrays.xml index af7ee708..ebe79945 100644 --- a/app/src/main/res/values-ca/arrays.xml +++ b/app/src/main/res/values-ca/arrays.xml @@ -3,25 +3,25 @@ Predeterminat del sistema English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automàtic / Predeterminat del sistema diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index d73c710c..6b891753 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -229,7 +229,7 @@ Vaja... L\'aplicació ha fallat, però no et preocupis, pots enviar un informe d\'error al desenvolupador per ajudar-lo a solucionar el problema. (: Activitat Arxiu de històries - Suggested users + Usuaris suggerits Seleccionar imatge S\'està pujant… Tens: diff --git a/app/src/main/res/values-cs/arrays.xml b/app/src/main/res/values-cs/arrays.xml index b8616a13..ac397448 100644 --- a/app/src/main/res/values-cs/arrays.xml +++ b/app/src/main/res/values-cs/arrays.xml @@ -3,25 +3,25 @@ Podle nastavení systému English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automaticky / Podle systému diff --git a/app/src/main/res/values-de/arrays.xml b/app/src/main/res/values-de/arrays.xml index 6e04749e..1e38b7a0 100644 --- a/app/src/main/res/values-de/arrays.xml +++ b/app/src/main/res/values-de/arrays.xml @@ -3,25 +3,25 @@ Systemstandard English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Auto / Systemstandard @@ -31,8 +31,8 @@ Instagram default (Unread then read) - From newest to oldest - From oldest to newest + Vom Neuesten zum Ältesten + Vom Ältesten zum Neuesten Kein(e) diff --git a/app/src/main/res/values-es/arrays.xml b/app/src/main/res/values-es/arrays.xml index 5542fae4..21f41c97 100755 --- a/app/src/main/res/values-es/arrays.xml +++ b/app/src/main/res/values-es/arrays.xml @@ -3,25 +3,25 @@ Predeterminado del sistema English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Auto / Seguir al sistema diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a18642a9..ff7059a5 100755 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -26,7 +26,7 @@ Actividad Resaltar: %s Buscar actualizaciones al inicio - Usar carpetas con el nombre de usuario + Usar subcarpetas con el nombre de usuario Marcar historias como vistas después de verlas El autor de la historia sabrá que lo has visto Marcar Mensaje Directo como visto después de verlo @@ -35,7 +35,7 @@ Orden de las historias ¡Error al cargar el perfil!\nPrueba iniciando sesión y buscando de nuevo. Error creando carpeta(s) de descarga. - Guardar en carpeta personalizada + Descargar en carpeta personalizada Seleccionar carpeta Tema Sólo afecta a cuentas que han iniciado sesión: diff --git a/app/src/main/res/values-fa/arrays.xml b/app/src/main/res/values-fa/arrays.xml index fdbbe30f..3f66523c 100644 --- a/app/src/main/res/values-fa/arrays.xml +++ b/app/src/main/res/values-fa/arrays.xml @@ -3,25 +3,25 @@ پیشگزیده سامانه English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 خودکار / پیروی از سامانه diff --git a/app/src/main/res/values-fr/arrays.xml b/app/src/main/res/values-fr/arrays.xml index b55f2763..340899b2 100755 --- a/app/src/main/res/values-fr/arrays.xml +++ b/app/src/main/res/values-fr/arrays.xml @@ -3,25 +3,25 @@ Par défaut (Système) English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automatique (Système) diff --git a/app/src/main/res/values-hi/arrays.xml b/app/src/main/res/values-hi/arrays.xml index f3ebd40e..8b0210c5 100644 --- a/app/src/main/res/values-hi/arrays.xml +++ b/app/src/main/res/values-hi/arrays.xml @@ -3,25 +3,25 @@ सिस्टम निर्धारित English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 सिस्टम के अनुसार diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 60071328..e7cfd899 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -288,7 +288,7 @@ Create new backup file Restore from existing backup file File: - Enter password + पासवर्ड दर्ज करें Select a backup file (.zaai/.backup) Apply Save diff --git a/app/src/main/res/values-in/arrays.xml b/app/src/main/res/values-in/arrays.xml index 32f0cd3a..30963302 100644 --- a/app/src/main/res/values-in/arrays.xml +++ b/app/src/main/res/values-in/arrays.xml @@ -3,25 +3,25 @@ Bawaan Sistem English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Otomatis / Ikuti Sistem @@ -30,9 +30,9 @@ Terang - Instagram default (Unread then read) - From newest to oldest - From oldest to newest + Bawaan Instagram (Belum terbaca lalu terbaca) + Terbaru ke terlama + Terlama ke terbaru Tidak ada diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 508c1537..8b3397f0 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -32,7 +32,7 @@ Tandai DM dibaca setelah melihat Peserta lain akan tahu Anda melihatnya Nyalakan pemberitahuan aktivitas - Feed stories sort + Urutan umpan cerita Galat saat memuat profil!\nCoba masuk dan cari lagi. Galat saat membuat folder unduhan. Simpan ke folder khusus @@ -44,19 +44,19 @@ Ekspor/impor Pengaturan Bahasa - %s Posts + %s Kiriman - %s Followers + %s Pengikut - %s Following + %s Diikuti Otomatis putar video Selalu bisukan video Pilih apa yang akan diunduh Foto ini saja Semua foto - Tampilkan story - Story sampai di sini! + Tampilkan cerita + Cerita sampai di sini! Mohon bersabar! Lihat Kiriman Lihat Kiriman @@ -68,9 +68,9 @@ Balasan… Berhasil menjawab! - %d responses averaging %s + %d tanggapan, rata-rata %s - Your answer: %s + Tanggapan Anda: %s Balas cerita Balas… Kuis @@ -107,11 +107,11 @@ Batalkan Blokir Batasi Hilangkan Batasan - Copy bio - Translate bio + Salin bio + Terjemahkan bio Mutual - Following - Follower + Mengikuti + Pengikut Peta Ekspor Impor @@ -140,7 +140,7 @@ Tidak dapat menghapus akun yang sedang digunakan Anda yakin ingin menghapus \'%s\'? Buka profil - View story + Lihat cerita Lihat foto profil Anda Membagikan alamat web @@ -190,11 +190,11 @@ Anda hanya dapat mengunduh 100 kiriman saat bersamaan. Jangan serakah-serakah! Salin nama pengguna Salin komentar - View comment likers + Lihat penyuka komentar Balas komentar Suka komentar Batal suka komentar - Translate comment + Terjemahkan komentar Hapus komentar Ups, komentar kosong! Apakah anda ingin mencari nama pengguna ini? @@ -225,8 +225,8 @@ Aplikasi berhenti bekerja… Ups! Aplikasi berhenti bekerja! Jangan khawatir, anda dapat mengirimkan laporan galat/kesalahan kepada Pengembang untuk membantunya memperbaiki masalah ini. (: Aktivitas - Story archive - Suggested users + Arsip cerita + Pengguna yang disarankan Pilih Gambar Mengunggah… Anda memiliki: @@ -271,26 +271,26 @@ Barista Material Dark Ditambahkan ke Kesukaan - Favorited - Favorite + Ditambahkan ke Favorit + Favorit Akun Tagar Lokasi Tak diketahui Dihapus dari Kesukaan - Backup & Restore User Settings - Back up app settings, account login information, and/or favorites data to a plain text or encrypted backup file for later restoration. - If you\'re backing up login info, treat the file as confidential: Keep them somewhere safe! - Create new backup file - Restore from existing backup file + Cadangkan & Kembalikan Pengaturan Pengguna + Cadangkan pengaturan aplikasi, informasi login akun, dan/atau data favorit ke berkas cadangan teks polos atau terenkripsi untuk dikembalikan nanti. + Jika Anda mencadangkan informasi login, perlakukan berkas cadangan sebagai berkas penting: Simpan di tempat yang aman! + Buat berkas cadangan baru + Kembalikan dari berkas cadangan yang ada Berkas: Masukkan sandi Pilih berkas cadangan (.zaai/.backup) Terapkan Simpan Keterangan - Edit caption... - Translate caption... + Sunting keterangan... + Terjemahkan keterangan... Bilah waktu pemutar video Menyukai… Gagal menyukai @@ -306,7 +306,7 @@ Hapus Komentar Tata letak - Feed stories + Umpan cerita Membuka kiriman... Bagikan Gaya tata letak @@ -320,9 +320,9 @@ Tampilkan batas kisi Matikan animasi Harap tunggu hingga tugas saat ini selesai! - Depending on user counts, this can take a while to load. Please be patient. - Post not found! - No app found which opens urls + Bergantung pada akun pengguna, ini dapat memakan waktu beberapa saat. Mohon bersabar. + Kiriman tidak ditemukan! + Aplikasi untuk membuka url tidak ditemukan %d suka @@ -330,7 +330,7 @@ %d komentar - %s stories + %s cerita - Storage permission not granted! + Izin penyimpanan ditolak! diff --git a/app/src/main/res/values-it/arrays.xml b/app/src/main/res/values-it/arrays.xml index 56db53d5..53c9cf9e 100755 --- a/app/src/main/res/values-it/arrays.xml +++ b/app/src/main/res/values-it/arrays.xml @@ -3,25 +3,25 @@ Predefinito di Sistema English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automatico / Basato sul Sistema diff --git a/app/src/main/res/values-ja/arrays.xml b/app/src/main/res/values-ja/arrays.xml index 29533a71..c9cd282d 100644 --- a/app/src/main/res/values-ja/arrays.xml +++ b/app/src/main/res/values-ja/arrays.xml @@ -3,29 +3,29 @@ システムのデフォルト English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 自動/システム設定に従う - 自動 / バッテリー設定に従う + 自動/バッテリー設定に従う ダーク ライト @@ -37,8 +37,8 @@ なし \@ - at - on + + \| - diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 79cea4f1..1c8f4f85 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -27,12 +27,12 @@ ハイライト: %s 起動時にアップデートを確認 ユーザ名のフォルダに投稿をダウンロード - ストーリーを表示後に既読としてマーク + ストーリーズを表示後に既読にする ストーリーの作成者は、あなたが閲覧したことを知ることができます。 - DMを表示後に既読としてマーク + DMを表示後に既読にする ほかのメンバーは、あなたが閲覧したことを知ることができます。 アクティビティの通知を有効化 - フィードのストーリーの並び順 + フィードのストーリーズの並び順 プロファイルの読み込みエラー!\nログインしてもう一度検索してください。 ダウンロードフォルダの作成中にエラーが発生しました。 カスタムフォルダーに保存 @@ -40,7 +40,7 @@ テーマ ログインユーザーにのみ影響します: 匿名ユーザーにのみ影響します: - 高解像度のプロフィール画像にInstadpを使用する + プロフ画像にInstadpを使用 インポート/エクスポート 言語 @@ -167,7 +167,7 @@ 送信中… ブロック済 Suggested - Screenshotted + スクリーンショット撮影済み 配信できません 成功! 退出する @@ -196,7 +196,7 @@ コメントのいいね!を取り消す コメントを翻訳 コメントを削除 - No empty comments! + メッセージが未入力です! ユーザー名を検索しますか? ハッシュタグを検索しますか? フォロワー @@ -222,10 +222,10 @@ アップデートが利用可能です! (%s) 注意: F-Droidからダウンロードした場合は、そちらからアップデートする必要があります。GitHubでも同様です。 Barinstaをアップデートしていただきありがとうございます! - アプリがクラッシュしました + アプリがクラッシュ アプリがクラッシュしましたが、エラーレポートを開発者に送信して問題の解決を手助けすることができます。(: アクティビティ - ストーリーのアーカイブ + ストーリーズのアーカイブ おすすめのユーザー 画像を選択 アップロード中… @@ -233,7 +233,7 @@ %d 人のフォロワー %d コメント %d 個のコメントへのいいね! - %d 個のユーザータグ + %d 個のタグ付け %d いいね! この通知をクリックする前にログアウトしましたか? フィード @@ -252,7 +252,7 @@ ダウンロード 言語 アカウント - 現在のログインが動作しませんか?アカウントを再度追加してください + ログインできない場合はアカウントを再度追加してください アカウントを追加 ライセンス(英語のみ) ウェブサイトを開く @@ -262,7 +262,7 @@ メールでフィードバックを送信 サードパーティ製アプリ 以下のサードパーティー製のオープンソースライブラリが使用されています: - Reminder + 注意: このアプリは自己責任で使用してください。ダウンロードした画像は、適用される法律で許可されている目的の範囲内でのみ使用することができます。 ホワイト ブラック @@ -286,7 +286,7 @@ ファイル: パスワードを入力してください バックアップ ファイルを選択してください (.zaai/.backup) - 適用する + 適用 保存 キャプション キャプションを編集... @@ -306,7 +306,7 @@ 削除 コメント レイアウト - フィードのストーリー + フィードのストーリーズ 投稿を開いています... 共有 レイアウトスタイル diff --git a/app/src/main/res/values-kn/arrays.xml b/app/src/main/res/values-kn/arrays.xml index 6c8f5836..87808169 100644 --- a/app/src/main/res/values-kn/arrays.xml +++ b/app/src/main/res/values-kn/arrays.xml @@ -3,25 +3,25 @@ System Default English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Auto / Follow System diff --git a/app/src/main/res/values-mk/arrays.xml b/app/src/main/res/values-mk/arrays.xml index 88e5e46a..04217584 100644 --- a/app/src/main/res/values-mk/arrays.xml +++ b/app/src/main/res/values-mk/arrays.xml @@ -3,25 +3,25 @@ Системски одбрано English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Автоматска тема diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index c322a500..1c20d80a 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,15 +1,15 @@ - За Прокетот + За Проектот Директни Пораки Опции Превземи - Пребарај username… + Пребарај корисник… Спореди - Грешка при копрање текст - Копрано во clipboard! + Грешка при копирање текст + Копрано на clipboard! Пријави - Пасворд (Максимално 32 карактери) + Лозинка (Максимално 32 карактери) Поставете лозинка (32 карактери максимално) Лозинка ОК @@ -25,12 +25,12 @@ Коментари Активности Важни Приказни: %s - Провери за надоградба (ажурирање) при старт на апликацијата. + Провери за надоградба при почеток на апликацијата Превземи постови во фолдерот со кориснички имиња Означи ги приказните како видени после нивно отварање - Авторот на Приказната ќе знае дека сте ја виделе Приказната. - Означи порака како видена при отварање. - Другите членови ќе знаат дека си ја видел содржината на чатот. + Авторот на приказната ќе знае дека сте ја погледнале приказната + Означи порака како видена при отварање + Другите членови ќе знаат дека си ја виделе содржината на пораката Овозможи нотификации Сортирање на објави Фатална Грека при отварање на профилот!\nПробајте повторно да се логирате и да пребарате. @@ -51,17 +51,17 @@ %s Следач %s Следачи - %sСледбеници + %s Следбеници Autoplay на видеа Секогаш гледај видеа без звук Селектирај што сакаш да превземеш - Сегашно + Тековен Цел Албум Прикажи приказни Нема повеќе приказни! Биди трпелив! - Прегледај Пост - Поглдни Пост + Прегледај Објава + Погледни Објава Spotify Гласај Гласањето беше успешно! @@ -78,25 +78,25 @@ Одговори… Квиз Лизгач - Вие веќе гласавте/одговоривте! + Вие веќе одговоривте! Спомнувања Овoј корисник има приватен профил - Наме да можете да гледате постови и приказни од овој корисник ако Одследите! Дали сте сигурни? + Наме да можете да гледате објави и приказни од овој корисник ако го Одследите! Дали сте сигурни? Можете да се логирате преку Повеќе -> Акаунт кој се наоѓа долу десно или можете да гледате Отворени акаунти без да се логирате! Можете да лизгате со прстот лево/десно за да се движите помеѓу опции, или пребарајте некој корисник долу! - Овој корисник нема постови. - Не постојат такви постови! + Овој корисник нема објави + Не постојат такви објави! Инсталирана верзија: v%s прочитај повеќе… Логирај се Одлогирај се Пребарувај инстаграм анонимно - Отстрани сите акаунти - Ова ќе ги отстране сите акаунти од апликацијата!\n За да отстраните само еден акаунт држете со прстот на акаунтот\n Дали сакате да продолжите? + Отстрани ги сите кориснички сметки + Ова ќе ги отстране сите кориснички сметки од апликацијата!\n За да отстраните само една корисничка сметка држете со прстот на сметката\n Дали сакате да продолжите? Формат на датум Лајкнато Зачувано - Такнато + Тагнато Порака Лајк Дислајк @@ -112,7 +112,7 @@ Одограничи Копирај био Преведи био - Заеднички + Блиски Оние кои ги следиш Следач Мапа @@ -133,14 +133,14 @@ Полето за лозинка е празно! Рефреширај Превземи колачиња - Десктоп Mode + Десктоп изглед Користи свој формат Разделувач Формат на време - Формат на дата + Формат на датум Преглед Премести ги местата на датата и времето - Неможе да избришите акаунт во корист + Неможе да избришите сметка во корист Дали сте сигурни дека сакате да избришите \'%s\'? Отвори Профил Погледни приказна @@ -154,13 +154,13 @@ Те спомна на приказната Овој вид на порака е неподржан Отвори линк - Копрај текст + Копирај текст Превземи содржина Лајни порака Одлајкни порака Избриши порака Види профил на авторот - Постот споделен од %s + Објавата е споделена од %s Непознат вид на порака Истече времето на медиумот! Пратено @@ -173,13 +173,13 @@ Скриншотнато Неможе да се прати Одличен успех! - Ливни - Дали сакате да ливните од чатот? + Напушти + Дали сакате да го напуштите чатот? Кикни Поранешни корисници Превземи директно - Превземи постови директно во твојот смарттелефон! - Се превземаат пост(ови) + Превземи објави од твојот смарт-телефон! + Се превземаат објава(ви) Ве молиме одобрете ги дозволите и пробајте повторно да превземите! Превзмањето започна Превземањето е готово @@ -206,13 +206,13 @@ Оние кои ги следиш Споредување следбеници & following Обата се следат меѓу себе - Не се следат %s - %s не следи + не ве следат %s + %s не ве следи Грешка при вчитување колачиња Напиши нов коментар… - Напишете нова порака… - Го лајкна твојот пост - Коментира на твојот пост: + Напиши нова порака… + Ја лајкна вашата објава + Коментира на твојата објава: Започна да те следи Те спомна: Те тагна во објава @@ -220,16 +220,16 @@ Одобри барање Не одобрувај барање Сподели ја оваа јавна објава до… - Овој пост е приватен! Споделте го на оние кои можат да го видат! + Оваја објава е приватна! Споделете ја со оние кои можат да ја видат! Оваа категорија е празна… Нова надоградба е присутна! (%s) - Потсетник: Ако го имате превземено од F-Droid, морате од таму да надоградите! Истото важи и за верзиите од GitHub. + Потсетник: Ако ја имате превземено оваа апликација со F-Droid, морате од таму да надоградите! Истото важи и за верзиите од GitHub. Ви благодариме за надоградбата на Barinsta! Апликацијата крашна аааагхххх.. апликацијаа крашна, ама не се грижете, можете да пратите листа на фатални грешки кај програмерите за да ви помогнат да се поправи проблемот. (: Активности - Story archive - Suggested users + Архива на приказни + Препорачани кориснчки сметки Селектирај слика Се Прикачува… Вие имате: @@ -242,7 +242,7 @@ Објави Профил Повеќе - Чат + Пораки %d селктирано Успешно се одлогиравте! Информации @@ -252,16 +252,16 @@ Почетна страна Генерално Тема - Downloads + Превземања Јазик - Акаунт - Сегашното логирање не рабоити? Едноставно само релогирајте се. - Додади акаунт + Сметка + Сегашното логирање не работи? Едноставно само релогирајте се. + Додади сметка Лиценца (English only) - Посете ја нашата вебстрана - Пронјадете подршка, дискутирајте се, запознај се со други, и забавувај се! + Посете ја нашата веб-страна + Пронајдете подршка, дискутирајте, запознајте се со други, и забавувајте се! Погледнете го изворниот код на GitHub - Ревидирајте, додадете ѕвезда, пријавете грешки и багови, контрибуирајте и имајте забава (повторно)! + Ревидирајте, додадете ѕвезда, пријавете грешки и багови, контрибуирајте и имајте забава! Пратете пофалби/поплаки преку email Интеграција на Third-Party Следниве third-party библиотеки кои се со отворен код се користени: @@ -303,13 +303,13 @@ Се зачувува… Се отстранува… Зачувувањето неуспешно - Отстранувањето е неуспешно + Отстранувањето беше неуспешно Се превзема… Превземање податок %d од %d Избриши Коментирај Изглед - Feed stories + Приказни Отварање на Објава... Сподели Стил на изглед @@ -335,8 +335,8 @@ %d коментари - %s story - %s stories + %s приказна + %s приказни - Нема дозвола за пристап на меморија! + Нема дозвола за пристап до меморија! diff --git a/app/src/main/res/values-nl/arrays.xml b/app/src/main/res/values-nl/arrays.xml index a94194d8..252e9f3c 100644 --- a/app/src/main/res/values-nl/arrays.xml +++ b/app/src/main/res/values-nl/arrays.xml @@ -3,25 +3,25 @@ Systeemstandaard English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automatisch / Volgsysteem @@ -30,9 +30,9 @@ Licht - Instagram default (Unread then read) - From newest to oldest - From oldest to newest + Instagram standaard (Ongelezen dan gelezen) + Sorteren van nieuw naar oud + Sorteren van oud naar nieuw Geen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 4a32b7aa..8f1b8d04 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -32,7 +32,7 @@ Markeer privéberichten als gelezen na bekijken Andere gebruikers zullen het weten als je het hebt bekeken Activiteitmeldingen inschakelen - Feed stories sort + Feedverhalen sorteren Fout tijdens het laden van profiel!\nProbeer opnieuw in te loggen en te zoeken. Fout bij maken download map(en). Opslaan in aangepaste map @@ -45,13 +45,13 @@ Taal %s Post - %s Posts + %s Berichten %s Follower - %s Followers + %s Volgers - %s Following + %s Volgend Video\'s automatisch afspelen Video\'s altijd dempen Selecteer wat je wil downloaden diff --git a/app/src/main/res/values-or/arrays.xml b/app/src/main/res/values-or/arrays.xml index f082e9ae..9623c0e8 100644 --- a/app/src/main/res/values-or/arrays.xml +++ b/app/src/main/res/values-or/arrays.xml @@ -3,25 +3,25 @@ ସିଷ୍ଟମ ନିର୍ଧାରିତ English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 ସ୍ୱୟଂକ୍ରିୟ /ସିସ୍ଟମ ଅନୁସାରେ diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 3cbc45c1..12c423a6 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -32,7 +32,7 @@ ବାର୍ତା ଦେଖିବା ପରେ \'ଦେଖାଗଲା\' ଚିହ୍ନିତ କରନ୍ତୁ | ଅନ୍ୟ ସଦସ୍ୟମାନେ ଜାଣିବେ ତୁମେ ଏହାକୁ ଦେଖିଛ। କାର୍ଯ୍ୟକଳାପ ସୂଚନା ଦେଖାନ୍ତୁ - Feed stories sort + କାହାଣୀଗୁଡିକ ଶ୍ରେଣୀବଦ୍ଧ କରନ୍ତୁ ପ୍ରୋଫାଇଲ୍ ଲୋଡ୍ କରିବାରେ ତ୍ରୁଟି!\nପୁନର୍ବାର ଲଗ୍ ଇନ୍ କରି ଚେଷ୍ଟା କରନ୍ତୁ | ଡ଼ାଉନଲୋଡ଼ ଫୋଲଡ଼ର ସୃଷ୍ଟି କରିବାରେ ତ୍ରୁଟି ପରିଲକ୍ଷିତ ହେଉଛି। ନିଜେ ସ୍ଥିର କରିଥିବା ଫୋଲଡର ରେ ରଖ। @@ -81,24 +81,24 @@ ଆପଣ ଉତ୍ତର ଦେଇସାରିଛନ୍ତି! ଉଲ୍ଲେଖଗୁ‌‍‌‌‌‌‌‌‌‌‌‌‌ଡିକ ଏହି ଏକାଉଣ୍ଟ ଗୁପ୍ତ ଅଟେ - You won\'t be able to access posts after unfollowing! Are you sure? - You can log in via More -> Account on the bottom-right corner or you can view public accounts without login! - You can swipe left/right for explore/feed, or search something below! - This Account has No Posts - No Such Posts! - Current version: v%s - read more… - Login - Logout - Browse Instagram anonymously - Remove all accounts - This will remove all added accounts from the app!\nTo remove just one account, long tap the account from the account switcher dialog.\nDo you want to continue? - Date format - Liked - Saved - Tagged - Message - Like + ଆପଣ ଅନୁସରଣ ନ କଲେ ପୋଷ୍ଟଗୁଡିକୁ ପ୍ରବେଶ କରିବାକୁ ସମର୍ଥ ହେବେ ନାହିଁ! ଆପଣ ନିଶ୍ଚିତ କି? + ଆପଣ ନିମ୍ନ - ଡାହାଣ କୋଣରେ ଅଧିକ -> ଆକାଉଣ୍ଟ୍ ମାଧ୍ୟମରେ ଲଗ୍ ଇନ୍ କରିପାରିବେ କିମ୍ବା ଆପଣ ଲଗ୍ଇନ୍ ବିନା ସର୍ବସାଧାରଣ ଆକାଉଣ୍ଟ୍ ଦେଖିପାରିବେ |! + ଅନୁସନ୍ଧାନ / ଫିଡ୍ ପାଇଁ ଆପଣ ବାମ / ଡାହାଣକୁ ସ୍ୱାଇପ୍ କରିପାରିବେ, କିମ୍ବା ନିମ୍ନରେ କିଛି ଖୋଜି କରିପାରିବେ! + ଏହି ଆକାଉଣ୍ଟରେ କୌଣସି ପୋଷ୍ଟ ନାହିଁ | + ଏପରି କୌଣସି ପୋଷ୍ଟ ନାହିଁ! + ବର୍ତ୍ତମାନର ସଂସ୍କରଣ: v%s + ଅଧିକ ପଢନ୍ତୁ… + ଲଗ ଇନ୍ + ଲଗ ଆଉଟ୍ + ବିନା ଏକାଉଣ୍ଟରେ ଇନଷ୍ଟାଗ୍ରାମ ବ୍ରାଉଜ୍ କରନ୍ତୁ | + ସମସ୍ତ ଏକାଉଣ୍ଟ ହଟାନ୍ତୁ + ଏହା ଆପରୁ ସମସ୍ତ ଯୋଡା ଯାଇଥିବା ଖାତାଗୁଡ଼ିକୁ ଅପସାରଣ କରିବ! \n କେବଳ ଗୋଟିଏ ଖାତା ଅପସାରଣ କରିବା ପାଇଁ ଆକାଉଣ୍ଟ୍ ସୁଇଚର୍ ରୁ ଆକାଉଣ୍ଟକୁ ଲମ୍ବା ଟ୍ୟାପ୍ କରନ୍ତୁ |\nଆପଣ ସମସ୍ତ ଯୋଡା ଯାଇଥିବା ଖାତାଗୁଡ଼ିକୁ ଅପସାରଣ କରିବାକୁ ନିଶ୍ଚିତ ତ? + ଦିନାଙ୍କ ସ୍ୱରୂପ + ପସନ୍ଦ କରିଛନ୍ତି + ସଞ୍ଚୟ ହେଲା + ଟ୍ୟାଗ୍ କରିଛନ୍ତି + ସନ୍ଦେଶ + ପସନ୍ଦ କରନ୍ତୁ Unlike Bookmark Unbookmark diff --git a/app/src/main/res/values-pl/arrays.xml b/app/src/main/res/values-pl/arrays.xml index 5396766d..8eadec1f 100644 --- a/app/src/main/res/values-pl/arrays.xml +++ b/app/src/main/res/values-pl/arrays.xml @@ -3,25 +3,25 @@ Język urządzenia English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Auto / Ustawienia systemu diff --git a/app/src/main/res/values-pt/arrays.xml b/app/src/main/res/values-pt/arrays.xml index 3c45b651..5ebc0ecf 100644 --- a/app/src/main/res/values-pt/arrays.xml +++ b/app/src/main/res/values-pt/arrays.xml @@ -3,25 +3,25 @@ Padrão do Sistema English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automático (Definido pelo sistema) diff --git a/app/src/main/res/values-ru/arrays.xml b/app/src/main/res/values-ru/arrays.xml index d5160d79..a76b7c6a 100644 --- a/app/src/main/res/values-ru/arrays.xml +++ b/app/src/main/res/values-ru/arrays.xml @@ -3,25 +3,25 @@ Системный по умолчанию English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Автоматически / Оглядка на систему @@ -30,9 +30,9 @@ Светлая - Instagram default (Unread then read) - From newest to oldest - From oldest to newest + По умолчанию Instagram (Непрочитанные, затем прочитанные) + От новейших до старейших + От старейших до новейших Нет diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 064aaadf..127c8561 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -32,7 +32,7 @@ Отметить ЛС как увиденные после просмотра Другие участники узнают, что вы просмотрели его Включить уведомления об активности - Feed stories sort + Сортировка историй ленты Ошибка загрузки профиля!\nПопробуйте войти в систему и повторите поиск. Ошибка при создании каталога(ов) загрузки. Сохранить в пользовательскую папку @@ -44,18 +44,18 @@ Импорт/Экспорт Язык - %s Post - %s Posts - %s Posts - %s Posts + %s Публикация + %s Публикации + %s Публикаций + %s Публикации - %s Follower - %s Followers - %s Followers - %s Followers + %s Подписчик + %s Подписчика + %s Подписчиков + %s Подписчики - %s Following + %s Последователей Автовоспроизведение видео Всегда заглушать видео Выберите, что скачивать @@ -74,16 +74,16 @@ Ответить… Ответ успешно представлен! - %d response averaging %s - %d responses averaging %s - %d responses averaging %s - %d responses averaging %s + %d ответ в среднем %s + %d ответа в среднем %s + %d ответов в среднем %s + %d ответы в среднем %s - Your answer: %s + Ваш ответ: %s Ответить на историю Ответить… Опрос - Slider + Ползунок Вы уже ответили! Упоминания Это частная учётная запись @@ -116,11 +116,11 @@ Разблокировать Ограничить Снять ограничение - Copy bio - Translate bio - Mutual - Following - Follower + Копировать биографию + Перевести биографию + Взаимное + Последователи + Подписчик Карта Экспорт Импорт @@ -149,7 +149,7 @@ Невозможно удалить текущую учётную запись Вы уверены, что хотите удалить \'%s\'? Открыть профиль - View story + Просмотр истории Просмотр изображения профиля Вы Поделился(-лась) ссылкой @@ -199,11 +199,11 @@ Вы можете скачать только 100 сообщений за раз. Не будьте слишком жадным! Копировать имя пользователя Копировать комментарий - View comment likers + Просмотр симпатий комментария Ответить на комментарий Мне нравится комментарий Не нравится комментарий - Translate comment + Перевести комментарий Удалить комментарий Нет пустых комментариев! Вы хотите найти имя пользователя? @@ -234,8 +234,8 @@ Приложение вылетело Упс.. приложение вылетело, но не беспокойтесь, вы можете отправить отчёт об ошибке разработчику, чтобы помочь ему исправить эту проблему. (: Активность - Story archive - Suggested users + Архив истории + Предлагаемые пользователи Выберите изображение Загрузка… У вас есть: @@ -280,26 +280,26 @@ Бариста Тёмный \"осязаемый\" Добавлено в избранное - Favorited - Favorite + Избранное + В избранное Учётные записи Хэштеги Местоположения Неизвестный Удалено из избранного - Backup & Restore User Settings - Back up app settings, account login information, and/or favorites data to a plain text or encrypted backup file for later restoration. - If you\'re backing up login info, treat the file as confidential: Keep them somewhere safe! - Create new backup file - Restore from existing backup file + Резервное копирование & Восстановление пользовательских настроек + Резервное копирование настроек приложения, регистрационных данных и/или избранных данных в обычный текст или зашифрованный файл резервной копии для последующего восстановления. + Если вы резервируете информацию для входа в систему, обращайтесь с файлом как с конфиденциальным: Храните где-нибудь в безопасности! + Создать новый файл резервной копии + Восстановить из существующего файла резервной копии Файл: Введите пароль Выберите файл резервной копии (.zaai/.backup) Применить Сохранить Заголовок - Edit caption... - Translate caption... + Изменить описание... + Перевести подпись... Лента времени видеопроигрывателя Нравится… Нравится неудачно @@ -315,7 +315,7 @@ Удалить Комментировать Формат - Feed stories + Истории ленты новостей Открытие публикации... Поделиться Внешний вид @@ -329,7 +329,7 @@ Показать разрыв сетки Отключить анимацию Пожалуйста, дождитесь сначала выполнения текущей задачи! - Depending on user counts, this can take a while to load. Please be patient. + В зависимости от количества пользователей, загрузка может занять некоторое время. Пожалуйста, будьте терпеливы. Публикация не найдена! Нет приложения, чтоб открыть ссылку @@ -345,10 +345,10 @@ %d комментарии - %s story - %s stories - %s stories - %s stories + %s история + %s истории + %s историй + %s истории - Storage permission not granted! + Разрешение на доступ к хранилищу не предоставлено! diff --git a/app/src/main/res/values-sk/arrays.xml b/app/src/main/res/values-sk/arrays.xml index be316879..33a29880 100644 --- a/app/src/main/res/values-sk/arrays.xml +++ b/app/src/main/res/values-sk/arrays.xml @@ -3,25 +3,25 @@ Prednastavené systémom English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Automaticky / podľa systému @@ -30,9 +30,9 @@ Svetlá - Instagram default (Unread then read) - From newest to oldest - From oldest to newest + Ako Instagram (Najprv neprečítané potom prečítané) + Od najnovších po najstaršie + Od najstarších po najnovšie Žiadna diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 50ec1b18..15a7eb30 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1,6 +1,6 @@ - O + O aplikácii Správy Nastavenia Stiahnuť @@ -26,13 +26,13 @@ Aktivita Najlepšia: %s Kontrolovať aktualizácie pri štarte - Stiahnuť príspevky do priečinka s používateľským menom + Ukľadať do priečinkov podľa mena Označiť príbehy po videní ako videné Autor príbehu bude vedieť že ste ho videli Po prečítaní, označiť správu ako prečítanú Ostatní budú vedieť že ste ho videli Zapnúť notifikácie o aktivitách - Feed stories sort + Zoradenie príbehov Chyba pri načítaní profilu!\nSkúste sa pripojiť a hľadať znova. Chyba pri vytvaraní priečinku(ov). Uložiť do vlastného priečinku @@ -235,7 +235,7 @@ Ups... aplikácia spadla, ale neboj sa, m§žeš poslať chybové hlásenie vývojárom a pomôcť im opraviť túto chybu. (: Aktivita Archív príbehov - Suggested users + Používatelia ktorých možno poznáte Vybrať fotografiu Nahráva sa… Máš: @@ -287,7 +287,7 @@ Miesta Neznáme Vymazať z obľúbených - Zálohovať & Obnoviť nastavenia používateľa + Zálohovať/obnoviť nastavenia používateľa Zálohovať nastavenia aplikácie, informácie o účtoch a obľúbené dáta do textového súboru alebo do zašifrovaného backupp súboru. Ak zálohuješ informácie o prihlásení, ulož ho niekde do bezpečia! Vytvoriť súbor zálohy @@ -315,7 +315,7 @@ Odstrániť Komentovať Rozloženie - Feed stories + Príbehy Otváram príspevok... Zdieľať Štýl rozloženia diff --git a/app/src/main/res/values-tr/arrays.xml b/app/src/main/res/values-tr/arrays.xml index ab2f0b2f..05352c26 100644 --- a/app/src/main/res/values-tr/arrays.xml +++ b/app/src/main/res/values-tr/arrays.xml @@ -3,25 +3,25 @@ Sistem Varsayılanı English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Otomatik / Sistemi Takip Et diff --git a/app/src/main/res/values-vi/arrays.xml b/app/src/main/res/values-vi/arrays.xml index 28291120..bfc15579 100644 --- a/app/src/main/res/values-vi/arrays.xml +++ b/app/src/main/res/values-vi/arrays.xml @@ -3,25 +3,25 @@ Mặc định hệ thống English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 Tự động / Theo hệ thống diff --git a/app/src/main/res/values-zh-rCN/arrays.xml b/app/src/main/res/values-zh-rCN/arrays.xml index 900bb767..d363e1c0 100644 --- a/app/src/main/res/values-zh-rCN/arrays.xml +++ b/app/src/main/res/values-zh-rCN/arrays.xml @@ -3,25 +3,25 @@ 系统默认 English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 自动 / 跟随系统 diff --git a/app/src/main/res/values-zh-rTW/arrays.xml b/app/src/main/res/values-zh-rTW/arrays.xml index 18b9e45c..aaae8b11 100644 --- a/app/src/main/res/values-zh-rTW/arrays.xml +++ b/app/src/main/res/values-zh-rTW/arrays.xml @@ -3,25 +3,25 @@ 系統預設 English - Français [Merci à @kernoeb et @PierreM0] - Español [Gracias a @sguinetti, @akrai y @retiolus] + Français + Español 简体中文 - Bahasa Indonesia [Terima kasih @Galang23] - Italiano [Grazie a @RAR_Ramar e GiorgioHerbie] - Deutsch [Danke an @peterge1998] - Polski [Podziękowania dla @Lego8486] - Türkçe [@faydin90 tarafından] - Português (Brasil) [Obrigado @wagnim, @RickyM7 e @cizordj] - پارسی [ با سپاس از farzadx@ ] - Македонски [Благодарност до @snajdovski] - Tiếng Việt [bởi Yato Fouze] - 繁體中文 [感謝 @Still34] - Català [Gràcies a @retiolus] - Русский [Спасибо @rikishi0071] + Bahasa Indonesia + Italiano + Deutsch + Polski + Türkçe + Português (Brasil) + پارسی + Македонски + Tiếng Việt + 繁體中文 + Català + Русский हिन्दी - Nederlands [Met dank aan Lesley Natrop] - Slovenčina [Vďaka @CrafterSvK] - 日本語 [協力 ysakamoto] + Nederlands + Slovenčina + 日本語 自動/跟隨系統 @@ -30,9 +30,9 @@ 明亮 - Instagram default (Unread then read) - From newest to oldest - From oldest to newest + Instagram 預設 (先顯示未讀、再顯示已讀) + 從最新到最舊 + 從最舊到最新 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 15fc1331..099c45db 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -32,7 +32,7 @@ 檢視完訊息後標記為已讀 其他成員會知道您查看了此訊息 啟用活動通知 - Feed stories sort + 動態貼文排序 無法載入個人檔案!\n試著重新登入並重新搜尋。 建立下載資料夾時出錯! 儲存到自定義資料夾 @@ -70,7 +70,7 @@ %d responses averaging %s - Your answer: %s + 你的答案: %s 回覆限時動態 回覆… 測驗 @@ -194,7 +194,7 @@ 回覆評論 對此評論說讚 收回評論的讚 - Translate comment + 翻譯評論 刪除評論 無空評論! 您要搜尋用戶名嗎? @@ -226,7 +226,7 @@ 喔噢!程式當掉了!別擔心,您可以向開發人員發送錯誤報告以協助解決此問題! (: 動態 Story archive - Suggested users + 推薦用戶 選擇圖片 上傳中… 您有 @@ -258,7 +258,7 @@ 造訪我們的網站 取得支援、與他人討論、結識他人並享受樂趣! 在 GitHub 上查看我們的開源程式碼 - 審核、Star、回報錯誤、做出貢獻並從中享受樂趣 (again)! + 審核、Star、回報錯誤、做出貢獻並從中再次享受樂趣! 透過電子郵件發送意見 第三方程式庫 我們使用了下列第三方開放原始碼程式庫: @@ -271,18 +271,18 @@ 咖啡棕 暗黑 Material 已加入至收藏夾 - Favorited + 已收藏 收藏 帳號 主題標籤 地點 未知 自收藏中刪除 - Backup & Restore User Settings + 設定備份及還原 Back up app settings, account login information, and/or favorites data to a plain text or encrypted backup file for later restoration. If you\'re backing up login info, treat the file as confidential: Keep them somewhere safe! - Create new backup file - Restore from existing backup file + 建立備份檔 + 以備份檔還原 檔案: 輸入密碼 選擇一個備份文件(.zaai / .backup) @@ -306,7 +306,7 @@ 刪除 評論 佈局 - Feed stories + 限時動態 開啟貼文中… 分享 佈局樣式 @@ -332,5 +332,5 @@ %s stories - 未授予儲存空間權限 + 儲存空間存取權限被拒 From 117b1c1629e44b5a0d9b5497a6a5979e216a479b Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Sun, 17 Jan 2021 14:11:15 -0500 Subject: [PATCH 2/3] viewing saved collections, so half of #545 --- .../adapters/DiscoverTopicsAdapter.java | 2 +- .../adapters/SavedCollectionsAdapter.java | 57 +++ .../viewholder/TopicClusterViewHolder.java | 72 ++- .../asyncs/SavedPostFetchService.java | 10 +- .../fragments/CollectionPostsFragment.java | 432 ++++++++++++++++++ .../fragments/SavedCollectionsFragment.java | 161 +++++++ .../fragments/SavedViewerFragment.java | 2 +- .../fragments/main/ProfileFragment.java | 4 +- .../models/enums/PostItemType.java | 1 + .../repositories/ProfileRepository.java | 15 + .../saved/CollectionsListResponse.java | 50 ++ .../responses/saved/SavedCollection.java | 46 ++ .../viewmodels/SavedCollectionsViewModel.java | 19 + .../webservices/ProfileService.java | 75 ++- .../res/layout/fragment_collection_posts.xml | 58 +++ .../res/layout/fragment_saved_collections.xml | 24 + .../main/res/menu/saved_collection_menu.xml | 10 + .../main/res/navigation/profile_nav_graph.xml | 6 + .../main/res/navigation/saved_nav_graph.xml | 101 ++++ app/src/main/res/values/strings.xml | 1 + 20 files changed, 1136 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/awais/instagrabber/adapters/SavedCollectionsAdapter.java create mode 100644 app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java create mode 100644 app/src/main/java/awais/instagrabber/fragments/SavedCollectionsFragment.java create mode 100644 app/src/main/java/awais/instagrabber/repositories/responses/saved/CollectionsListResponse.java create mode 100644 app/src/main/java/awais/instagrabber/repositories/responses/saved/SavedCollection.java create mode 100644 app/src/main/java/awais/instagrabber/viewmodels/SavedCollectionsViewModel.java create mode 100644 app/src/main/res/layout/fragment_collection_posts.xml create mode 100644 app/src/main/res/layout/fragment_saved_collections.xml create mode 100644 app/src/main/res/menu/saved_collection_menu.xml create mode 100644 app/src/main/res/navigation/saved_nav_graph.xml diff --git a/app/src/main/java/awais/instagrabber/adapters/DiscoverTopicsAdapter.java b/app/src/main/java/awais/instagrabber/adapters/DiscoverTopicsAdapter.java index fc4e0cce..4623e230 100644 --- a/app/src/main/java/awais/instagrabber/adapters/DiscoverTopicsAdapter.java +++ b/app/src/main/java/awais/instagrabber/adapters/DiscoverTopicsAdapter.java @@ -40,7 +40,7 @@ public class DiscoverTopicsAdapter extends ListAdapter { + private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { + @Override + public boolean areItemsTheSame(@NonNull final SavedCollection oldItem, @NonNull final SavedCollection newItem) { + return oldItem.getId().equals(newItem.getId()); + } + + @Override + public boolean areContentsTheSame(@NonNull final SavedCollection oldItem, @NonNull final SavedCollection newItem) { + if (oldItem.getCoverMedias().size() == newItem.getCoverMedias().size()) { + if (oldItem.getCoverMedias().size() == 0) return true; + return oldItem.getCoverMedias().get(0).getId().equals(newItem.getCoverMedias().get(0).getId()); + } + return false; + } + }; + + private final OnCollectionClickListener onCollectionClickListener; + + public SavedCollectionsAdapter(final OnCollectionClickListener onCollectionClickListener) { + super(DIFF_CALLBACK); + this.onCollectionClickListener = onCollectionClickListener; + } + + @NonNull + @Override + public TopicClusterViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) { + final LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); + final ItemDiscoverTopicBinding binding = ItemDiscoverTopicBinding.inflate(layoutInflater, parent, false); + return new TopicClusterViewHolder(binding, null, onCollectionClickListener); + } + + @Override + public void onBindViewHolder(@NonNull final TopicClusterViewHolder holder, final int position) { + final SavedCollection topicCluster = getItem(position); + holder.bind(topicCluster); + } + + public interface OnCollectionClickListener { + void onCollectionClick(SavedCollection savedCollection, View root, View cover, View title, int titleColor, int backgroundColor); + } +} diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/TopicClusterViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/TopicClusterViewHolder.java index e4526eea..ffeefa17 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/TopicClusterViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/TopicClusterViewHolder.java @@ -25,19 +25,24 @@ import java.util.concurrent.atomic.AtomicInteger; import awais.instagrabber.R; import awais.instagrabber.adapters.DiscoverTopicsAdapter; +import awais.instagrabber.adapters.SavedCollectionsAdapter; import awais.instagrabber.databinding.ItemDiscoverTopicBinding; import awais.instagrabber.repositories.responses.discover.TopicCluster; +import awais.instagrabber.repositories.responses.saved.SavedCollection; import awais.instagrabber.utils.ResponseBodyUtils; public class TopicClusterViewHolder extends RecyclerView.ViewHolder { private final ItemDiscoverTopicBinding binding; private final DiscoverTopicsAdapter.OnTopicClickListener onTopicClickListener; + private final SavedCollectionsAdapter.OnCollectionClickListener onCollectionClickListener; public TopicClusterViewHolder(@NonNull final ItemDiscoverTopicBinding binding, - final DiscoverTopicsAdapter.OnTopicClickListener onTopicClickListener) { + final DiscoverTopicsAdapter.OnTopicClickListener onTopicClickListener, + final SavedCollectionsAdapter.OnCollectionClickListener onCollectionClickListener) { super(binding.getRoot()); this.binding = binding; this.onTopicClickListener = onTopicClickListener; + this.onCollectionClickListener = onCollectionClickListener; } public void bind(final TopicCluster topicCluster) { @@ -102,4 +107,69 @@ public class TopicClusterViewHolder extends RecyclerView.ViewHolder { } binding.title.setText(topicCluster.getTitle()); } + + public void bind(final SavedCollection topicCluster) { + if (topicCluster == null) { + return; + } + final AtomicInteger titleColor = new AtomicInteger(-1); + final AtomicInteger backgroundColor = new AtomicInteger(-1); + if (onCollectionClickListener != null) { + itemView.setOnClickListener(v -> onCollectionClickListener.onCollectionClick( + topicCluster, + binding.getRoot(), + binding.cover, + binding.title, + titleColor.get(), + backgroundColor.get() + )); + } + // binding.title.setTransitionName("title-" + topicCluster.getId()); + binding.cover.setTransitionName("cover-" + topicCluster.getId()); + final String thumbUrl = ResponseBodyUtils.getThumbUrl(topicCluster.getCoverMedias() == null + ? null + : topicCluster.getCoverMedias().get(0)); + if (thumbUrl == null) { + binding.cover.setImageURI((String) null); + } else { + final ImageRequest imageRequest = ImageRequestBuilder + .newBuilderWithSource(Uri.parse(thumbUrl)) + .build(); + final ImagePipeline imagePipeline = Fresco.getImagePipeline(); + final DataSource> dataSource = imagePipeline + .fetchDecodedImage(imageRequest, CallerThreadExecutor.getInstance()); + dataSource.subscribe(new BaseBitmapDataSubscriber() { + @Override + public void onNewResultImpl(@Nullable Bitmap bitmap) { + if (dataSource.isFinished()) { + dataSource.close(); + } + if (bitmap != null) { + Palette.from(bitmap).generate(p -> { + final Palette.Swatch swatch = p.getDominantSwatch(); + final Resources resources = itemView.getResources(); + int titleTextColor = resources.getColor(R.color.white); + if (swatch != null) { + backgroundColor.set(swatch.getRgb()); + GradientDrawable gd = new GradientDrawable( + GradientDrawable.Orientation.TOP_BOTTOM, + new int[]{Color.TRANSPARENT, backgroundColor.get()}); + titleTextColor = swatch.getTitleTextColor(); + binding.background.setBackground(gd); + } + titleColor.set(titleTextColor); + binding.title.setTextColor(titleTextColor); + }); + } + } + + @Override + public void onFailureImpl(@NonNull DataSource dataSource) { + dataSource.close(); + } + }, CallerThreadExecutor.getInstance()); + binding.cover.setImageRequest(imageRequest); + } + binding.title.setText(topicCluster.getTitle()); + } } diff --git a/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java b/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java index e59defcb..9b3511a9 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java +++ b/app/src/main/java/awais/instagrabber/asyncs/SavedPostFetchService.java @@ -19,12 +19,14 @@ public class SavedPostFetchService implements PostFetcher.PostFetchService { private final boolean isLoggedIn; private String nextMaxId; + private final String collectionId; private boolean moreAvailable; - public SavedPostFetchService(final long profileId, final PostItemType type, final boolean isLoggedIn) { + public SavedPostFetchService(final long profileId, final PostItemType type, final boolean isLoggedIn, final String collectionId) { this.profileId = profileId; this.type = type; this.isLoggedIn = isLoggedIn; + this.collectionId = collectionId; graphQLService = isLoggedIn ? null : GraphQLService.getInstance(); profileService = isLoggedIn ? ProfileService.getInstance() : null; } @@ -58,10 +60,12 @@ public class SavedPostFetchService implements PostFetcher.PostFetchService { if (isLoggedIn) profileService.fetchTagged(profileId, nextMaxId, callback); else graphQLService.fetchTaggedPosts(profileId, 30, nextMaxId, callback); break; + case COLLECTION: case SAVED: - default: - profileService.fetchSaved(nextMaxId, callback); + profileService.fetchSaved(nextMaxId, collectionId, callback); break; + default: + callback.onFailure(null); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java b/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java new file mode 100644 index 00000000..82487b3c --- /dev/null +++ b/app/src/main/java/awais/instagrabber/fragments/CollectionPostsFragment.java @@ -0,0 +1,432 @@ +package awais.instagrabber.fragments; + +import android.animation.ArgbEvaluator; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.view.ActionMode; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; + +import androidx.activity.OnBackPressedCallback; +import androidx.activity.OnBackPressedDispatcher; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.content.PermissionChecker; +import androidx.core.graphics.ColorUtils; +import androidx.fragment.app.Fragment; +import androidx.navigation.NavController; +import androidx.navigation.NavDirections; +import androidx.navigation.fragment.NavHostFragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.transition.ChangeBounds; +import androidx.transition.TransitionInflater; +import androidx.transition.TransitionSet; + +import com.facebook.drawee.backends.pipeline.Fresco; +import com.facebook.drawee.controller.BaseControllerListener; +import com.facebook.drawee.interfaces.DraweeController; +import com.facebook.imagepipeline.image.ImageInfo; +import com.google.common.collect.ImmutableList; + +import java.util.Set; + +import awais.instagrabber.R; +import awais.instagrabber.activities.MainActivity; +import awais.instagrabber.adapters.FeedAdapterV2; +import awais.instagrabber.asyncs.SavedPostFetchService; +import awais.instagrabber.customviews.PrimaryActionModeCallback; +import awais.instagrabber.databinding.FragmentCollectionPostsBinding; +import awais.instagrabber.dialogs.PostsLayoutPreferencesDialogFragment; +import awais.instagrabber.fragments.CollectionPostsFragmentDirections; +import awais.instagrabber.models.PostsLayoutPreferences; +import awais.instagrabber.models.enums.PostItemType; +import awais.instagrabber.repositories.responses.Media; +import awais.instagrabber.repositories.responses.saved.SavedCollection; +import awais.instagrabber.utils.Constants; +import awais.instagrabber.utils.DownloadUtils; +import awais.instagrabber.utils.ResponseBodyUtils; +import awais.instagrabber.utils.Utils; + +import static androidx.core.content.PermissionChecker.checkSelfPermission; +import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION; + +public class CollectionPostsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { + private static final int STORAGE_PERM_REQUEST_CODE = 8020; + private static final int STORAGE_PERM_REQUEST_CODE_FOR_SELECTION = 8030; + + private MainActivity fragmentActivity; + private FragmentCollectionPostsBinding binding; + private CoordinatorLayout root; + private boolean shouldRefresh = true; + private SavedCollection savedCollection; + private ActionMode actionMode; + private Set selectedFeedModels; + private Media downloadFeedModel; + private int downloadChildPosition = -1; + private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_SAVED_POSTS_LAYOUT); + + private final OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(false) { + @Override + public void handleOnBackPressed() { + binding.posts.endSelection(); + } + }; + private final PrimaryActionModeCallback multiSelectAction = new PrimaryActionModeCallback( + R.menu.multi_select_download_menu, new PrimaryActionModeCallback.CallbacksHelper() { + @Override + public void onDestroy(final ActionMode mode) { + binding.posts.endSelection(); + } + + @Override + public boolean onActionItemClicked(final ActionMode mode, + final MenuItem item) { + if (item.getItemId() == R.id.action_download) { + if (CollectionPostsFragment.this.selectedFeedModels == null) return false; + final Context context = getContext(); + if (context == null) return false; + if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) { + DownloadUtils.download(context, ImmutableList.copyOf(CollectionPostsFragment.this.selectedFeedModels)); + binding.posts.endSelection(); + return true; + } + requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE_FOR_SELECTION); + } + return false; + } + }); + private final FeedAdapterV2.FeedItemCallback feedItemCallback = new FeedAdapterV2.FeedItemCallback() { + @Override + public void onPostClick(final Media feedModel, final View profilePicView, final View mainPostImage) { + openPostDialog(feedModel, profilePicView, mainPostImage, -1); + } + + @Override + public void onSliderClick(final Media feedModel, final int position) { + openPostDialog(feedModel, null, null, position); + } + + @Override + public void onCommentsClick(final Media feedModel) { + final NavDirections commentsAction = CollectionPostsFragmentDirections.actionGlobalCommentsViewerFragment( + feedModel.getCode(), + feedModel.getPk(), + feedModel.getUser().getPk() + ); + NavHostFragment.findNavController(CollectionPostsFragment.this).navigate(commentsAction); + } + + @Override + public void onDownloadClick(final Media feedModel, final int childPosition) { + final Context context = getContext(); + if (context == null) return; + if (checkSelfPermission(context, WRITE_PERMISSION) == PermissionChecker.PERMISSION_GRANTED) { + DownloadUtils.showDownloadDialog(context, feedModel, childPosition); + return; + } + downloadFeedModel = feedModel; + downloadChildPosition = -1; + requestPermissions(DownloadUtils.PERMS, STORAGE_PERM_REQUEST_CODE); + } + + @Override + public void onHashtagClick(final String hashtag) { + final NavDirections action = CollectionPostsFragmentDirections.actionGlobalHashTagFragment(hashtag); + NavHostFragment.findNavController(CollectionPostsFragment.this).navigate(action); + } + + @Override + public void onLocationClick(final Media feedModel) { + final NavDirections action = CollectionPostsFragmentDirections.actionGlobalLocationFragment(feedModel.getLocation().getPk()); + NavHostFragment.findNavController(CollectionPostsFragment.this).navigate(action); + } + + @Override + public void onMentionClick(final String mention) { + navigateToProfile(mention.trim()); + } + + @Override + public void onNameClick(final Media feedModel, final View profilePicView) { + navigateToProfile("@" + feedModel.getUser().getUsername()); + } + + @Override + public void onProfilePicClick(final Media feedModel, final View profilePicView) { + navigateToProfile("@" + feedModel.getUser().getUsername()); + } + + @Override + public void onURLClick(final String url) { + Utils.openURL(getContext(), url); + } + + @Override + public void onEmailClick(final String emailId) { + Utils.openEmailAddress(getContext(), emailId); + } + + private void openPostDialog(final Media feedModel, + final View profilePicView, + final View mainPostImage, + final int position) { + final PostViewV2Fragment.Builder builder = PostViewV2Fragment + .builder(feedModel); + if (position >= 0) { + builder.setPosition(position); + } + if (!layoutPreferences.isAnimationDisabled()) { + builder.setSharedProfilePicElement(profilePicView) + .setSharedMainPostElement(mainPostImage); + } + builder.build().show(getChildFragmentManager(), "post_view"); + } + }; + private final FeedAdapterV2.SelectionModeCallback selectionModeCallback = new FeedAdapterV2.SelectionModeCallback() { + + @Override + public void onSelectionStart() { + if (!onBackPressedCallback.isEnabled()) { + final OnBackPressedDispatcher onBackPressedDispatcher = fragmentActivity.getOnBackPressedDispatcher(); + onBackPressedCallback.setEnabled(true); + onBackPressedDispatcher.addCallback(getViewLifecycleOwner(), onBackPressedCallback); + } + if (actionMode == null) { + actionMode = fragmentActivity.startActionMode(multiSelectAction); + } + } + + @Override + public void onSelectionChange(final Set selectedFeedModels) { + final String title = getString(R.string.number_selected, selectedFeedModels.size()); + if (actionMode != null) { + actionMode.setTitle(title); + } + CollectionPostsFragment.this.selectedFeedModels = selectedFeedModels; + } + + @Override + public void onSelectionEnd() { + if (onBackPressedCallback.isEnabled()) { + onBackPressedCallback.setEnabled(false); + onBackPressedCallback.remove(); + } + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + }; + + @Override + public void onCreate(@Nullable final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + fragmentActivity = (MainActivity) requireActivity(); + final TransitionSet transitionSet = new TransitionSet(); + transitionSet.addTransition(new ChangeBounds()) + .addTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.move)) + .setDuration(200); + setSharedElementEnterTransition(transitionSet); + postponeEnterTransition(); + setHasOptionsMenu(true); + } + + @Nullable + @Override + public View onCreateView(@NonNull final LayoutInflater inflater, + @Nullable final ViewGroup container, + @Nullable final Bundle savedInstanceState) { + if (root != null) { + shouldRefresh = false; + return root; + } + binding = FragmentCollectionPostsBinding.inflate(inflater, container, false); + root = binding.getRoot(); + return root; + } + + @Override + public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { + if (!shouldRefresh) return; + binding.swipeRefreshLayout.setOnRefreshListener(this); + init(); + shouldRefresh = false; + } + + @Override + public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { + inflater.inflate(R.menu.topic_posts_menu, menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull final MenuItem item) { + if (item.getItemId() == R.id.layout) { + showPostsLayoutPreferences(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onResume() { + super.onResume(); + fragmentActivity.setToolbar(binding.toolbar); + } + + @Override + public void onRefresh() { + binding.posts.refresh(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + resetToolbar(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + resetToolbar(); + } + + @Override + public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + final boolean granted = grantResults[0] == PackageManager.PERMISSION_GRANTED; + final Context context = getContext(); + if (context == null) return; + if (requestCode == STORAGE_PERM_REQUEST_CODE && granted) { + if (downloadFeedModel == null) return; + DownloadUtils.showDownloadDialog(context, downloadFeedModel, downloadChildPosition); + downloadFeedModel = null; + downloadChildPosition = -1; + return; + } + if (requestCode == STORAGE_PERM_REQUEST_CODE_FOR_SELECTION && granted) { + DownloadUtils.download(context, ImmutableList.copyOf(selectedFeedModels)); + binding.posts.endSelection(); + } + } + + private void resetToolbar() { + fragmentActivity.resetToolbar(); + } + + private void init() { + if (getArguments() == null) return; + final CollectionPostsFragmentArgs fragmentArgs = CollectionPostsFragmentArgs.fromBundle(getArguments()); + savedCollection = fragmentArgs.getSavedCollection(); + setupToolbar(fragmentArgs.getTitleColor(), fragmentArgs.getBackgroundColor()); + setupPosts(); + } + + private void setupToolbar(final int titleColor, final int backgroundColor) { + if (savedCollection == null) { + return; + } + binding.cover.setTransitionName("collection-" + savedCollection.getId()); + fragmentActivity.setToolbar(binding.toolbar); + binding.collapsingToolbarLayout.setTitle(savedCollection.getTitle()); + final int collapsedTitleTextColor = ColorUtils.setAlphaComponent(titleColor, 0xFF); + final int expandedTitleTextColor = ColorUtils.setAlphaComponent(titleColor, 0x99); + binding.collapsingToolbarLayout.setExpandedTitleColor(expandedTitleTextColor); + binding.collapsingToolbarLayout.setCollapsedTitleTextColor(collapsedTitleTextColor); + binding.collapsingToolbarLayout.setContentScrimColor(backgroundColor); + final Drawable navigationIcon = binding.toolbar.getNavigationIcon(); + final Drawable overflowIcon = binding.toolbar.getOverflowIcon(); + if (navigationIcon != null && overflowIcon != null) { + final Drawable navDrawable = navigationIcon.mutate(); + final Drawable overflowDrawable = overflowIcon.mutate(); + navDrawable.setAlpha(0xFF); + overflowDrawable.setAlpha(0xFF); + final ArgbEvaluator argbEvaluator = new ArgbEvaluator(); + binding.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + final int totalScrollRange = appBarLayout.getTotalScrollRange(); + final float current = totalScrollRange + verticalOffset; + final float fraction = current / totalScrollRange; + final int tempColor = (int) argbEvaluator.evaluate(fraction, collapsedTitleTextColor, expandedTitleTextColor); + navDrawable.setColorFilter(tempColor, PorterDuff.Mode.SRC_ATOP); + overflowDrawable.setColorFilter(tempColor, PorterDuff.Mode.SRC_ATOP); + + }); + } + final GradientDrawable gd = new GradientDrawable( + GradientDrawable.Orientation.TOP_BOTTOM, + new int[]{Color.TRANSPARENT, backgroundColor}); + binding.background.setBackground(gd); + setupCover(); + } + + private void setupCover() { + final String coverUrl = ResponseBodyUtils.getImageUrl(savedCollection.getCoverMedias() == null + ? null + : savedCollection.getCoverMedias().get(0)); + final DraweeController controller = Fresco + .newDraweeControllerBuilder() + .setOldController(binding.cover.getController()) + .setUri(coverUrl) + .setControllerListener(new BaseControllerListener() { + + @Override + public void onFailure(final String id, final Throwable throwable) { + super.onFailure(id, throwable); + startPostponedEnterTransition(); + } + + @Override + public void onFinalImageSet(final String id, + @Nullable final ImageInfo imageInfo, + @Nullable final Animatable animatable) { + startPostponedEnterTransition(); + } + }) + .build(); + binding.cover.setController(controller); + } + + private void setupPosts() { + binding.posts.setViewModelStoreOwner(this) + .setLifeCycleOwner(this) + .setPostFetchService(new SavedPostFetchService(0, PostItemType.COLLECTION, true, savedCollection.getId())) + .setLayoutPreferences(layoutPreferences) + .addFetchStatusChangeListener(fetching -> updateSwipeRefreshState()) + .setFeedItemCallback(feedItemCallback) + .setSelectionModeCallback(selectionModeCallback) + .init(); + binding.swipeRefreshLayout.setRefreshing(true); + } + + private void updateSwipeRefreshState() { + binding.swipeRefreshLayout.setRefreshing(binding.posts.isFetching()); + } + + private void navigateToProfile(final String username) { + final NavController navController = NavHostFragment.findNavController(this); + final Bundle bundle = new Bundle(); + bundle.putString("username", username); + navController.navigate(R.id.action_global_profileFragment, bundle); + } + + private void showPostsLayoutPreferences() { + final PostsLayoutPreferencesDialogFragment fragment = new PostsLayoutPreferencesDialogFragment( + Constants.PREF_TOPIC_POSTS_LAYOUT, + preferences -> { + layoutPreferences = preferences; + new Handler().postDelayed(() -> binding.posts.setLayoutPreferences(preferences), 200); + }); + fragment.show(getChildFragmentManager(), "posts_layout_preferences"); + } +} diff --git a/app/src/main/java/awais/instagrabber/fragments/SavedCollectionsFragment.java b/app/src/main/java/awais/instagrabber/fragments/SavedCollectionsFragment.java new file mode 100644 index 00000000..cf3de76e --- /dev/null +++ b/app/src/main/java/awais/instagrabber/fragments/SavedCollectionsFragment.java @@ -0,0 +1,161 @@ +package awais.instagrabber.fragments; + +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.fragment.FragmentNavigator; +import androidx.navigation.fragment.NavHostFragment; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import awais.instagrabber.R; +import awais.instagrabber.activities.MainActivity; +import awais.instagrabber.adapters.SavedCollectionsAdapter; +import awais.instagrabber.customviews.helpers.GridSpacingItemDecoration; +import awais.instagrabber.databinding.FragmentSavedCollectionsBinding; +import awais.instagrabber.repositories.responses.StoryStickerResponse; +import awais.instagrabber.repositories.responses.saved.CollectionsListResponse; +import awais.instagrabber.utils.Constants; +import awais.instagrabber.utils.CookieUtils; +import awais.instagrabber.utils.Utils; +import awais.instagrabber.viewmodels.SavedCollectionsViewModel; +import awais.instagrabber.webservices.ProfileService; +import awais.instagrabber.webservices.ServiceCallback; + +import static awais.instagrabber.utils.Utils.settingsHelper; + +public class SavedCollectionsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { + private static final String TAG = "SavedCollectionsFragment"; + + private MainActivity fragmentActivity; + private CoordinatorLayout root; + private FragmentSavedCollectionsBinding binding; + private SavedCollectionsViewModel savedCollectionsViewModel; + private boolean shouldRefresh = true; + private ProfileService profileService; + + @Override + public void onCreate(@Nullable final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + fragmentActivity = (MainActivity) requireActivity(); + profileService = ProfileService.getInstance(); + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(@NonNull final LayoutInflater inflater, + final ViewGroup container, + final Bundle savedInstanceState) { + if (root != null) { + shouldRefresh = false; + return root; + } + binding = FragmentSavedCollectionsBinding.inflate(inflater, container, false); + root = binding.getRoot(); + return root; + } + + @Override + public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) { + if (!shouldRefresh) return; + binding.swipeRefreshLayout.setOnRefreshListener(this); + init(); + shouldRefresh = false; + } + + @Override + public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { + inflater.inflate(R.menu.saved_collection_menu, menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull final MenuItem item) { + if (item.getItemId() == R.id.add) { + final Context context = getContext(); + final EditText input = new EditText(context); + new AlertDialog.Builder(context) + .setTitle(R.string.saved_create_collection) + .setView(input) + .setPositiveButton(R.string.confirm, (d, w) -> { + final String cookie = settingsHelper.getString(Constants.COOKIE); + profileService.createCollection( + input.getText().toString(), + settingsHelper.getString(Constants.DEVICE_UUID), + CookieUtils.getUserIdFromCookie(cookie), + CookieUtils.getCsrfTokenFromCookie(cookie), + new ServiceCallback() { + @Override + public void onSuccess(final String result) { + onRefresh(); + } + + @Override + public void onFailure(final Throwable t) { + Log.e(TAG, "Error creating collection", t); + Toast.makeText(context, t.getMessage(), Toast.LENGTH_SHORT).show(); + } + }); + }) + .setNegativeButton(R.string.cancel, null) + .show(); + return true; + } + return false; + } + + private void init() { + setupTopics(); + fetchTopics(null); + } + + @Override + public void onRefresh() { + fetchTopics(null); + } + + public void setupTopics() { + savedCollectionsViewModel = new ViewModelProvider(fragmentActivity).get(SavedCollectionsViewModel.class); + binding.topicsRecyclerView.addItemDecoration(new GridSpacingItemDecoration(Utils.convertDpToPx(2))); + final SavedCollectionsAdapter adapter = new SavedCollectionsAdapter((topicCluster, root, cover, title, titleColor, backgroundColor) -> { + final FragmentNavigator.Extras.Builder builder = new FragmentNavigator.Extras.Builder() + .addSharedElement(cover, "collection-" + topicCluster.getId()); + final SavedCollectionsFragmentDirections.ActionSavedCollectionsFragmentToCollectionPostsFragment action = SavedCollectionsFragmentDirections + .actionSavedCollectionsFragmentToCollectionPostsFragment(topicCluster, titleColor, backgroundColor); + NavHostFragment.findNavController(this).navigate(action, builder.build()); + }); + binding.topicsRecyclerView.setAdapter(adapter); + savedCollectionsViewModel.getList().observe(getViewLifecycleOwner(), adapter::submitList); + } + + private void fetchTopics(final String maxId) { + binding.swipeRefreshLayout.setRefreshing(true); + profileService.fetchCollections(maxId, new ServiceCallback() { + @Override + public void onSuccess(final CollectionsListResponse result) { + if (result == null) return; + savedCollectionsViewModel.getList().postValue(result.getItems()); + binding.swipeRefreshLayout.setRefreshing(false); + } + + @Override + public void onFailure(final Throwable t) { + Log.e(TAG, "onFailure", t); + binding.swipeRefreshLayout.setRefreshing(false); + } + }); + } +} diff --git a/app/src/main/java/awais/instagrabber/fragments/SavedViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/SavedViewerFragment.java index 3874256c..b6ee5431 100644 --- a/app/src/main/java/awais/instagrabber/fragments/SavedViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/SavedViewerFragment.java @@ -286,7 +286,7 @@ public final class SavedViewerFragment extends Fragment implements SwipeRefreshL private void setupPosts() { binding.posts.setViewModelStoreOwner(this) .setLifeCycleOwner(this) - .setPostFetchService(new SavedPostFetchService(profileId, type, isLoggedIn)) + .setPostFetchService(new SavedPostFetchService(profileId, type, isLoggedIn, null)) .setLayoutPreferences(layoutPreferences) .addFetchStatusChangeListener(fetching -> updateSwipeRefreshState()) .setFeedItemCallback(feedItemCallback) diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index 1b2a9a5e..0752cb29 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -946,9 +946,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } }); profileDetailsBinding.btnSaved.setOnClickListener(v -> { - final NavDirections action = ProfileFragmentDirections.actionProfileFragmentToSavedViewerFragment(profileModel.getUsername(), - profileModel.getPk(), - PostItemType.SAVED); + final NavDirections action = ProfileFragmentDirections.actionGlobalSavedCollectionsFragment(); NavHostFragment.findNavController(this).navigate(action); }); profileDetailsBinding.btnLiked.setOnClickListener(v -> { diff --git a/app/src/main/java/awais/instagrabber/models/enums/PostItemType.java b/app/src/main/java/awais/instagrabber/models/enums/PostItemType.java index bb4b84d8..4e651a51 100644 --- a/app/src/main/java/awais/instagrabber/models/enums/PostItemType.java +++ b/app/src/main/java/awais/instagrabber/models/enums/PostItemType.java @@ -7,6 +7,7 @@ public enum PostItemType implements Serializable { DISCOVER, FEED, SAVED, + COLLECTION, LIKED, TAGGED, HASHTAG, diff --git a/app/src/main/java/awais/instagrabber/repositories/ProfileRepository.java b/app/src/main/java/awais/instagrabber/repositories/ProfileRepository.java index e8218101..57071f88 100644 --- a/app/src/main/java/awais/instagrabber/repositories/ProfileRepository.java +++ b/app/src/main/java/awais/instagrabber/repositories/ProfileRepository.java @@ -2,10 +2,14 @@ package awais.instagrabber.repositories; import java.util.Map; +import awais.instagrabber.repositories.responses.saved.CollectionsListResponse; import awais.instagrabber.repositories.responses.UserFeedResponse; import retrofit2.Call; +import retrofit2.http.FieldMap; +import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Path; +import retrofit2.http.POST; import retrofit2.http.QueryMap; public interface ProfileRepository { @@ -16,9 +20,20 @@ public interface ProfileRepository { @GET("/api/v1/feed/saved/") Call fetchSaved(@QueryMap Map queryParams); + @GET("/api/v1/feed/collection/{collectionId}/") + Call fetchSavedCollection(@Path("collectionId") final String collectionId, + @QueryMap Map queryParams); + @GET("/api/v1/feed/liked/") Call fetchLiked(@QueryMap Map queryParams); @GET("/api/v1/usertags/{profileId}/feed/") Call fetchTagged(@Path("profileId") final long profileId, @QueryMap Map queryParams); + + @GET("/api/v1/collections/list/") + Call fetchCollections(@QueryMap Map queryParams); + + @FormUrlEncoded + @POST("/api/v1/collections/create/") + Call createCollection(@FieldMap Map signedForm); } diff --git a/app/src/main/java/awais/instagrabber/repositories/responses/saved/CollectionsListResponse.java b/app/src/main/java/awais/instagrabber/repositories/responses/saved/CollectionsListResponse.java new file mode 100644 index 00000000..3c91dacf --- /dev/null +++ b/app/src/main/java/awais/instagrabber/repositories/responses/saved/CollectionsListResponse.java @@ -0,0 +1,50 @@ +package awais.instagrabber.repositories.responses.saved; + +import java.util.List; + +public class CollectionsListResponse { + private final boolean moreAvailable; + private final String nextMaxId; + private final String maxId; + private final String status; +// private final int numResults; + private final List items; + + public CollectionsListResponse(final boolean moreAvailable, + final String nextMaxId, + final String maxId, + final String status, +// final int numResults, + final List items) { + this.moreAvailable = moreAvailable; + this.nextMaxId = nextMaxId; + this.maxId = maxId; + this.status = status; +// this.numResults = numResults; + this.items = items; + } + + public boolean isMoreAvailable() { + return moreAvailable; + } + + public String getNextMaxId() { + return nextMaxId; + } + + public String getMaxId() { + return maxId; + } + + public String getStatus() { + return status; + } + +// public int getNumResults() { +// return numResults; +// } + + public List getItems() { + return items; + } +} diff --git a/app/src/main/java/awais/instagrabber/repositories/responses/saved/SavedCollection.java b/app/src/main/java/awais/instagrabber/repositories/responses/saved/SavedCollection.java new file mode 100644 index 00000000..9e1c264f --- /dev/null +++ b/app/src/main/java/awais/instagrabber/repositories/responses/saved/SavedCollection.java @@ -0,0 +1,46 @@ +package awais.instagrabber.repositories.responses.saved; + +import java.io.Serializable; +import java.util.List; + +import awais.instagrabber.repositories.responses.Media; + +public class SavedCollection implements Serializable { + private final String collectionId; + private final String collectionName; + private final String collectionType; + private final int collectionMediacount; + private final List coverMediaList; + + public SavedCollection(final String collectionId, + final String collectionName, + final String collectionType, + final int collectionMediacount, + final List coverMediaList) { + this.collectionId = collectionId; + this.collectionName = collectionName; + this.collectionType = collectionType; + this.collectionMediacount = collectionMediacount; + this.coverMediaList = coverMediaList; + } + + public String getId() { + return collectionId; + } + + public String getTitle() { + return collectionName; + } + + public String getType() { + return collectionType; + } + + public int getMediaCount() { + return collectionMediacount; + } + + public List getCoverMedias() { + return coverMediaList; + } +} diff --git a/app/src/main/java/awais/instagrabber/viewmodels/SavedCollectionsViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/SavedCollectionsViewModel.java new file mode 100644 index 00000000..4f245f3a --- /dev/null +++ b/app/src/main/java/awais/instagrabber/viewmodels/SavedCollectionsViewModel.java @@ -0,0 +1,19 @@ +package awais.instagrabber.viewmodels; + +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import java.util.List; + +import awais.instagrabber.repositories.responses.saved.SavedCollection; + +public class SavedCollectionsViewModel extends ViewModel { + private MutableLiveData> list; + + public MutableLiveData> getList() { + if (list == null) { + list = new MutableLiveData<>(); + } + return list; + } +} diff --git a/app/src/main/java/awais/instagrabber/webservices/ProfileService.java b/app/src/main/java/awais/instagrabber/webservices/ProfileService.java index c6ab47f5..4480223a 100644 --- a/app/src/main/java/awais/instagrabber/webservices/ProfileService.java +++ b/app/src/main/java/awais/instagrabber/webservices/ProfileService.java @@ -4,10 +4,15 @@ import androidx.annotation.NonNull; import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.Map; + import awais.instagrabber.repositories.ProfileRepository; import awais.instagrabber.repositories.responses.PostsFetchResponse; import awais.instagrabber.repositories.responses.UserFeedResponse; +import awais.instagrabber.repositories.responses.saved.CollectionsListResponse; import awais.instagrabber.utils.TextUtils; +import awais.instagrabber.utils.Utils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -68,12 +73,15 @@ public class ProfileService extends BaseService { } public void fetchSaved(final String maxId, + final String collectionId, final ServiceCallback callback) { final ImmutableMap.Builder builder = ImmutableMap.builder(); + Call request = null; if (!TextUtils.isEmpty(maxId)) { builder.put("max_id", maxId); } - final Call request = repository.fetchSaved(builder.build()); + if (TextUtils.isEmpty(collectionId) || collectionId.equals("ALL_MEDIA_AUTO_COLLECTION")) request = repository.fetchSaved(builder.build()); + else request = repository.fetchSavedCollection(collectionId, builder.build()); request.enqueue(new Callback() { @Override public void onResponse(@NonNull final Call call, @NonNull final Response response) { @@ -99,6 +107,71 @@ public class ProfileService extends BaseService { }); } + public void fetchCollections(final String maxId, + final ServiceCallback callback) { + final ImmutableMap.Builder builder = ImmutableMap.builder(); + if (!TextUtils.isEmpty(maxId)) { + builder.put("max_id", maxId); + } + builder.put("collection_types", "[\"ALL_MEDIA_AUTO_COLLECTION\",\"MEDIA\",\"PRODUCT_AUTO_COLLECTION\"]"); + final Call request = repository.fetchCollections(builder.build()); + request.enqueue(new Callback() { + @Override + public void onResponse(@NonNull final Call call, @NonNull final Response response) { + if (callback == null) return; + final CollectionsListResponse collectionsListResponse = response.body(); + if (collectionsListResponse == null) { + callback.onSuccess(null); + return; + } + callback.onSuccess(collectionsListResponse); + } + + @Override + public void onFailure(@NonNull final Call call, @NonNull final Throwable t) { + if (callback != null) { + callback.onFailure(t); + } + } + }); + } + + public void createCollection(final String name, + final String deviceUuid, + final long userId, + final String csrfToken, + final ServiceCallback callback) { + final Map form = new HashMap<>(6); + form.put("_csrftoken", csrfToken); + form.put("_uuid", deviceUuid); + form.put("_uid", userId); + form.put("collection_visibility", "0"); // 1 for public, planned for future but currently inexistant + form.put("module_name", "collection_create"); + form.put("name", name); + final Map signedForm = Utils.sign(form); + final Call request = repository.createCollection(signedForm); + request.enqueue(new Callback() { + @Override + public void onResponse(@NonNull final Call call, @NonNull final Response response) { + if (callback == null) return; + final String collectionsListResponse = response.body(); + if (collectionsListResponse == null) { + callback.onSuccess(null); + return; + } + callback.onSuccess(collectionsListResponse); + } + + @Override + public void onFailure(@NonNull final Call call, @NonNull final Throwable t) { + if (callback != null) { + callback.onFailure(t); + } + } + }); + } + + public void fetchLiked(final String maxId, final ServiceCallback callback) { final ImmutableMap.Builder builder = ImmutableMap.builder(); diff --git a/app/src/main/res/layout/fragment_collection_posts.xml b/app/src/main/res/layout/fragment_collection_posts.xml new file mode 100644 index 00000000..4d82bbe3 --- /dev/null +++ b/app/src/main/res/layout/fragment_collection_posts.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_saved_collections.xml b/app/src/main/res/layout/fragment_saved_collections.xml new file mode 100644 index 00000000..6636e3bc --- /dev/null +++ b/app/src/main/res/layout/fragment_saved_collections.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/saved_collection_menu.xml b/app/src/main/res/menu/saved_collection_menu.xml new file mode 100644 index 00000000..6c67c1f1 --- /dev/null +++ b/app/src/main/res/menu/saved_collection_menu.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/profile_nav_graph.xml b/app/src/main/res/navigation/profile_nav_graph.xml index cda21c30..44023a69 100644 --- a/app/src/main/res/navigation/profile_nav_graph.xml +++ b/app/src/main/res/navigation/profile_nav_graph.xml @@ -82,6 +82,12 @@ app:nullable="false" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 31c0d0d6..33d7939d 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -97,6 +97,7 @@ Remove all accounts This will remove all added accounts from the app!\nTo remove just one account, long tap the account from the account switcher dialog.\nDo you want to continue? Date format + Create new collection Liked Saved Tagged From 28b51516e0bf836f889e51fbd67a97de1750cd6a Mon Sep 17 00:00:00 2001 From: Alexandre Macabies Date: Sun, 17 Jan 2021 19:55:14 +0100 Subject: [PATCH 3/3] add a setting to control showing the post label per default This defaults to the current behavior of always showing the caption, but this can be turned off for reduced browsing noise: I often don't care about meaningless captions on most accounts. Added the pref translation for French as I'm a native speaker. --- .../instagrabber/fragments/PostViewV2Fragment.java | 10 ++++++---- .../settings/SettingsPreferencesFragment.java | 12 ++++++++++++ .../java/awais/instagrabber/utils/Constants.java | 1 + .../awais/instagrabber/utils/SettingsHelper.java | 3 ++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java b/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java index da96177c..74c1e589 100644 --- a/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java @@ -242,6 +242,8 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment { if (feedModel.getItemType() == MediaItemType.MEDIA_TYPE_SLIDER) { sliderPosition = arguments.getInt(ARG_SLIDER_POSITION, 0); } + captionState = settingsHelper.getBoolean(Constants.SHOW_CAPTIONS) ? + BottomSheetBehavior.STATE_COLLAPSED : BottomSheetBehavior.STATE_HIDDEN; } @Nullable @@ -384,7 +386,7 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment { ViewGroup.LayoutParams.MATCH_PARENT)); binding.postImage.requestLayout(); if (bottomSheetBehavior != null) { - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + bottomSheetBehavior.setState(captionState); } return; } @@ -393,7 +395,7 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment { ViewGroup.LayoutParams.MATCH_PARENT)); binding.sliderParent.requestLayout(); if (bottomSheetBehavior != null) { - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + bottomSheetBehavior.setState(captionState); } return; } @@ -404,7 +406,7 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment { binding.videoPost.thumbnailParent.setLayoutParams(params); binding.videoPost.thumbnailParent.requestLayout(); if (bottomSheetBehavior != null) { - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + bottomSheetBehavior.setState(captionState); } } } @@ -846,7 +848,7 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment { public void onGlobalLayout() { binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this); if (bottomSheetBehavior == null) return; - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + bottomSheetBehavior.setState(captionState); } }); } diff --git a/app/src/main/java/awais/instagrabber/fragments/settings/SettingsPreferencesFragment.java b/app/src/main/java/awais/instagrabber/fragments/settings/SettingsPreferencesFragment.java index 64c49ed9..97b1c426 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/SettingsPreferencesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/SettingsPreferencesFragment.java @@ -52,6 +52,7 @@ public class SettingsPreferencesFragment extends BasePreferencesFragment { generalCategory.addPreference(getUpdateCheckPreference()); // generalCategory.addPreference(getAutoPlayVideosPreference()); generalCategory.addPreference(getAlwaysMuteVideosPreference()); + generalCategory.addPreference(getShowCaptionPreference()); // screen.addPreference(getDivider(context)); // final PreferenceCategory themeCategory = new PreferenceCategory(context); @@ -204,6 +205,17 @@ public class SettingsPreferencesFragment extends BasePreferencesFragment { return preference; } + private Preference getShowCaptionPreference() { + final Context context = getContext(); + if (context == null) return null; + final SwitchPreferenceCompat preference = new SwitchPreferenceCompat(context); + preference.setKey(Constants.SHOW_CAPTIONS); + preference.setDefaultValue(true); + preference.setTitle(R.string.post_viewer_show_captions); + preference.setIconSpaceReserved(false); + return preference; + } + private Preference getStorySortPreference() { final Context context = getContext(); if (context == null) return null; diff --git a/app/src/main/java/awais/instagrabber/utils/Constants.java b/app/src/main/java/awais/instagrabber/utils/Constants.java index 85125516..9bc5f5b1 100644 --- a/app/src/main/java/awais/instagrabber/utils/Constants.java +++ b/app/src/main/java/awais/instagrabber/utils/Constants.java @@ -17,6 +17,7 @@ public final class Constants { public static final String FOLDER_SAVE_TO = "saved_to"; public static final String AUTOPLAY_VIDEOS = "autoplay_videos"; public static final String MUTED_VIDEOS = "muted_videos"; + public static final String SHOW_CAPTIONS = "show_captions"; public static final String CUSTOM_DATE_TIME_FORMAT_ENABLED = "data_time_custom_enabled"; public static final String SWAP_DATE_TIME_FORMAT_ENABLED = "swap_date_time_enabled"; public static final String MARK_AS_SEEN = "mark_as_seen"; diff --git a/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java b/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java index fa99a91f..e390d0a6 100755 --- a/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java +++ b/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java @@ -37,6 +37,7 @@ import static awais.instagrabber.utils.Constants.PREF_SAVED_POSTS_LAYOUT; import static awais.instagrabber.utils.Constants.PREF_TAGGED_POSTS_LAYOUT; import static awais.instagrabber.utils.Constants.PREF_TOPIC_POSTS_LAYOUT; import static awais.instagrabber.utils.Constants.PREV_INSTALL_VERSION; +import static awais.instagrabber.utils.Constants.SHOW_CAPTIONS; import static awais.instagrabber.utils.Constants.SHOW_QUICK_ACCESS_DIALOG; import static awais.instagrabber.utils.Constants.SKIPPED_VERSION; import static awais.instagrabber.utils.Constants.STORY_SORT; @@ -126,7 +127,7 @@ public final class SettingsHelper { public @interface StringSettings {} @StringDef({DOWNLOAD_USER_FOLDER, FOLDER_SAVE_TO, AUTOPLAY_VIDEOS, SHOW_QUICK_ACCESS_DIALOG, MUTED_VIDEOS, - CUSTOM_DATE_TIME_FORMAT_ENABLED, MARK_AS_SEEN, DM_MARK_AS_SEEN, CHECK_ACTIVITY, + SHOW_CAPTIONS, CUSTOM_DATE_TIME_FORMAT_ENABLED, MARK_AS_SEEN, DM_MARK_AS_SEEN, CHECK_ACTIVITY, CHECK_UPDATES, SWAP_DATE_TIME_FORMAT_ENABLED}) public @interface BooleanSettings {} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d93c5948..24e36413 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -57,6 +57,7 @@ %s Following Autoplay videos Always mute videos + Always show post captions Select what to download Current Whole Album