diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c57c8280b58afc10875034b3ec6b06122d528a0f..1ff5d5f8e4ed14a8daa50b2e09478323e7b872cc 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -331,6 +331,14 @@
+
+
+
+
+
+
diff --git a/res/drawable-hdpi/ic_reply_white_24dp.png b/res/drawable-hdpi/ic_reply_white_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..0424c2bd6d6eaa5fcd3398f71b6e230ffc1caa7b
Binary files /dev/null and b/res/drawable-hdpi/ic_reply_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_reply_white_24dp.png b/res/drawable-mdpi/ic_reply_white_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..862114b82dafbbf8ca125d02ce7b723e901cf396
Binary files /dev/null and b/res/drawable-mdpi/ic_reply_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_reply_white_24dp.png b/res/drawable-xhdpi/ic_reply_white_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..885623e4d0bb82cbb39424905a689b9bc6af22c1
Binary files /dev/null and b/res/drawable-xhdpi/ic_reply_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_reply_white_24dp.png b/res/drawable-xxhdpi/ic_reply_white_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..de0dad2047bd788a1a8fb8481e55a65bb3f80058
Binary files /dev/null and b/res/drawable-xxhdpi/ic_reply_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_reply_white_24dp.png b/res/drawable-xxxhdpi/ic_reply_white_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed85f50ab94bb216b8369d51e06458591d6a6d5f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_reply_white_24dp.png differ
diff --git a/res/values-af/distribution-strings.xml b/res/values-af/distribution-strings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c13c25a18df0be010b91cdac65c42144e2f812bb
--- /dev/null
+++ b/res/values-af/distribution-strings.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ Stilte
+ Geïnkripteerde SMS/MMS boodskappe maklik gemaak!
+ Stilte is \'n SMS/MMS toepassing wat u in staat stel om u privaatheid beskerm terwyl u met vriende kommunikeer.
+ Stilte is \'n SMS/MMS toepassing wat u in staat stel om u privaatheid beskerm terwyl u met vriende kommunikeer. Met ingebruikneming van Stilte kan u SMS boodskappe en media versend met volledige privaatheid. Eienskappe: * Eenvoudig. Stilte werk soos enige ander SMS toepassing. Daar is geen inteken of nuwe diens waarby u of u vriende hoef aan te sluit nie. * Betroubaar. Stilte kommunikeer deur geïnkripteerde SMS boodskappe. Geen.eksterne bedieners of internetverbinding word vereis nie. * Privaat. Stilte verskaf end-tot-end enkripsie vir u boodskappe deur die deeglik ontwikkelde Signal enkripsie protokol. * Veilig. Alle boodskappe word op die toestel geïnkripteer, so selfs al raak die toestel verlore of word gesteel, bly boodskappe beskermd. * Oopbron. Stilte is Gratis en Oopbron wat enigiemand in staat stel om die sekuriteit daarvan te bevestig deur die kode te oudit. Dui asseblief enige goggas, frustrasies of eienskap navrae aan by: https://github.com/SilenceIM/Silence/issues Die bronkode is beskikbaar by: https://github.com/SilenceIM/Silence Meer besinderhede: https://silence.im Privaatheidsbeleid: https://silence.im/privacy
+
+
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8dc6fb3f77595c8c8bff682dd409a4434f056633
--- /dev/null
+++ b/res/values-af/strings.xml
@@ -0,0 +1,808 @@
+
+
+ Ja
+ Nee
+ Wis uit
+ Wag asseblief…
+
+
+ Kitsfris boodskap
+
+
+ U het nog nie \'n toegangsfrase gestel nie!
+ Wis alle ou boodskappe?
+ Wis
+ De-aktiveer stoor-enkripsie?
+ Waarskuwing, dit sal stoor-enkripsie vir alle boodskappe en sleutels de-aktiveer. U geïnkripteerde sessies sal voortgesit word maar iemand met fisiese toegang tot u toestel sal hul moontlik kan lees.
+ De-aktiveer
+ Inkomende SMS ge-aktiveer
+ Tik om verstek SMS toep te kies
+ Inkomende SMS ge-deaktiveer
+ Tik om Stilte u verstek SMS toep te maak
+ aan
+ Op
+ af
+ Af
+ SMS
+ MMS
+ Inkomend %s
+ Toegangsfrase %1$s, Skerm sekuriteit %2$s
+ Tema %1$s, Taal %2$s
+
+
+
+
+ (beeld)
+ (klanksnit)
+ (kortfilm)
+
+
+ Kannie \'n toep vind om media te selekteer nie.
+
+
+ Kamerabeeld
+ Prent
+ Kortfilm
+ Klanksnit
+ Kontak informasie
+
+
+ Terugspeelfout vir klanksnit!
+
+
+ Geblokkeerde kontakte
+
+
+ Boodskapgrootte: %d kilogrepe
+ Verval: %s
+ Nie afgelewer nie
+ Besigtig sekure media?
+ Hierdie media is gestoor in \'n geïnkripteerde databasis. Om dit te kan besigtig met \'n eksterne toep vereis tans dat die data tydelik gedekripteer word en na geheue geskryf word. Is u seker dat u dit wil toelaat?
+ Vervalle steuteluitruil boodskap ontvang.
+ \'n Sleuteluitruil boodskap is ontvang, tik om te verwerk.
+ %1$s het die groepie verlaat.
+ Tik vir besonderhede
+ Kannie \'n toep vind wat hierdie mediabrokkie kan oopmaak nie.
+ vanaf %s
+ na %s
+ XMPP-adres. Dateer Stilte op om die funksie te aktiveer.
+
+
+ Inisieer sekure sessie?
+ Wil u %s betrek by \'n sekure sessie?
+ Boodskap is ontvang van iemand met Stilte. Wil u \'n sekure sessie inisieer?
+ Beëindig sekure sessie?
+ Is u seker dat u die sekure sessie wil kortknip?
+ Wis gesprek?
+ Dit sal alle boodskappe in die gesprek permanent uitwis.
+ Heg aanhangsel aan
+ Selekteer kontakinformasie
+ Skryf boodskap
+ Verskoon tog, maar die byvoeging van u aanhangsel het uitgeloop op \'n foutjie.
+ Die GIF wat u gekies het is te groot!
+ Verskoon tog, maar die verkose kortfilm oorskry die boodskapgrootte beperking (%1$s kilogrepe).
+ Verskoon tog, maar die verkose klanksnit oorskry die boodskapgrootte beperking (%1$s kilogrepe).
+ Die ontvanger het nie \'n geldige SMS of vonkpos adres nie!
+ Die boodskap wat u probeer stuur is leeg!
+ Groeplede
+ Groepsgesprek
+ Onbenoemde groep
+ Stoor konsepkopie
+ Ongeldige ontvanger!
+ Oproepe word nie ondersteun nie
+ Die toestel ondersteun klaarblyklik nie skakelfunksies nie.
+ Kannie \'n toep vind om die skakel te open nie.
+ Ongesekuurde SMS
+ Ongesekuurde MMS
+ Ongesekuurde SMS
+ Sekure MMS
+ Kom ons gesels sekuur: %s
+ Sekure sessie kan slegs met ander persone opgestel word.
+ MMS moontlik nie ondersteun
+ Die boodskap kannie gestuur word nie aangesien u diensverskaffer moontlik nie MMS ondersteun nie.
+ Kies asseblief \'n kontak
+ Aanhangsel oorskry grootte limiet.
+
+
+
+
+ Boodskap besonderhede
+ Stoor na geheue?
+ Kon nie na geheue skryf nie!
+ Versamel aanhangsels…
+ Wagtend…
+ MMS
+ SMS
+ Wis tans…
+ Wis tans boodskappe uit…
+
+
+ Soek
+
+
+ Wis tans uit
+ Wis tans verkose gesprekke uit…
+ ONTDOEN
+ Stuur konsepkopieë
+ Dit sal die konsepkopië van verkose gesprekke stuur.
+ Stuur
+ Stuur tans
+ Stuur tans verkose konsepkopieë…
+
+
+ Gestoorde boodskappe (%d)
+
+
+ Gebruik pasgemaakte: %s
+ Gebruik verstek: %s
+ Geen
+
+
+ Sopas
+ %d min
+ Vandag
+ Gister
+
+
+ Deel met
+
+
+ Welkom by Stilte!
+ Stilte stel u instaat om tydens kommunilasie met vriende u privaatheid te beskerm.
+ Inkripteer u boodskappe
+ Stilte sal boodskappe met ander Stilte-gebruikers outomaties inkripteer.
+ Gesels met almal
+ Stilte kan deur ongeïnkripteerde boodskappe met nie-Stilte gebruikers klets.
+ SMSSecure is nou Stilte.
+ SMSSecure is nou Stilte. U boodskappe is steeds hier en nuwe eienskappe is in die pyplyn.
+
+
+ Voer uit
+ Voer ongeïnkripteerd na geheue uit?
+ Waarskuwing, dit sal die inhoud van u Stilte boodskappe ongeïnkripteerd na geheue uitvoer.
+ Kanseleer
+ Voer tans uit
+ Voer tans ongeïnkripteerd na geheue uit…
+ Gefaal om na geheue te skryf.
+ Fout tydens skryf na geheue.
+ Suksesvolle uitvoer.
+ Voer geïnkripteerde rugsteunkopie uit?
+ Dit sal al u geïnkripteerde sleutels, verstellings en boodskappe na geheue uitvoer.
+ Voer tans geïnkripteerde sleutels, verstellings en boodskappe uit…
+
+
+ Nuwe groep
+ Bring groep op datum
+ Nuwe MMS groep
+ Kon jeens \'n onvoorsiene fout nie \'n groep skep nie.
+ U benodig minstens een persoon in u groep!
+ Skep groep
+
+
+ Ek
+
+
+ Voer in
+ Voer uit
+
+
+ Voer sisteem SMS databasis in?
+ Dit sal boodskappe vanaf die toestel se verstek SMS databasis na Stilte invoer. Indien u reeds die toestel se SMS databasis ingevoer het, sal die herinvoer lei tot duplikaat boodskappe.
+ Invoer
+ Kanseleer
+ Herstel geïnkripteerde rugsteun?
+ Die herstel van \'n geïnkripteerde rugsteun sal al u bestaande sleutels, voorkeure en boodskappe vervang. U sal alle informasie verloor wat in u huidige Stilte installasie is uitgesluit gerugsteunde data. Stilte sal stop net na die invoer.
+ Voer ongeïnkripteerde rugsteun in?
+ Dit sal boodskappe vanaf \'n ongeïnkripteerde rugsteun invoer. Indien u voorheen hierdie rugsteun ingevoer het sal die herinvoer lei tot duplikaat boodskappe.
+ Voer tans in
+ Voer tans ongeïnkripteerde rugsteun in…
+ Geen ongeïnkripteerde rugsteun gevind nie!
+ Fout tydens invoer van rugsteun!
+ Invoer voltooid!
+ Herstel tans geïnkripteerde rugsteun…
+ Geen geïnkripteerde rugsteun gevind nie!
+
+
+ Geen geskandeerde steutel gevind nie.
+ Installeer Barcode Scanner?
+ Stilte vereis \"Barcode Scanner\" vir QR kodes.
+
+
+ Versending het gefaal
+ Nuwe identiteit
+
+
+ Fout tydens stoor van MMS!
+ Fout tydens verbinding met MMS verskaffer
+ Fout tydens die lees van verskaffer se MMS instellings
+
+
+ Multimedia boodskap
+
+
+ Het \'n boodskap ontvang wat geïnkripteer is deur \'n ou weergawe van Stilte wat nie meer ondersteun word nie. Vra asseblief die sender om op te gradeer na die nuutste weergawe en die boodskap weer te stuur.
+ The uitruilboodskap wat u ontvang het is afkomstig van \'n verouderde weergawe van Stilte wat nie met u weergawe kan kommunikeer nie. U moet die boodskap handmatig versend om \'n sekure sessie te loods. Tik om die sleuteluitruilboodskap te versend.
+ U het die groep verlaat.
+ Groep op datum gebring.
+ Sleuteluitruil boodskap
+
+
+ Toegangsfrases stem nie ooreen nie!
+ Ongeldige ou toegangsfrase!
+ Geen toegangsfrase ingesleutel nie!
+
+
+ Sleutel toegangsfrase in
+ Stilte ikoon
+ Ongeldige toegangsfrase!
+
+
+ Die digitale handtekening op die sleuteluitruil verskil van wat voorheen ontvang is van dié kontak. Dit kan beteken dat iemand probeer om in te luister of dat die ander party eenvoudig Stilte weer geïnstalleer het en nou \'n nuwe identiteitssleutel het.
+ Die handtekening op die sleuteluitruil is vertroud, maar u het die \'voltooi outomaties sleutelwissel\' instelling gedeaktiveer.
+ Verwerk tans
+ Verwerk tans sleutel uitruil…
+ U behoort die identiteit van hierdie kontak te verifieer.
+
+
+ Sper hierdie kontak?
+ U sal voorts geen boodskappe van hierdie gebruiker sien nie.
+ Sper
+ Ontsper hierdie kontak?
+ Is u seker dat u hierdie kontak wil ontsper?
+ Ontsper
+ Geaktiveer
+ Gedeaktiveer
+
+
+ Beeld
+ Klank
+ Kortfilm
+
+
+ \'n Korrupte sleutelwissel boodskap is ontvang!
+ \'n Sleutelwissel boodskap met ongeldige protokol weergawe is ontvang.
+ \'n Boodskap met \'n onbekende identiteitssleutel is ontvang. Tik om te verwerk en te vertoon.
+ Nuwe maar onbekende identiteitsinformasie is ontvang. Tik om identiteit te verifieer.
+ Sekure sessie beëindig.
+ Duplikaat boodskap.
+
+
+ Groep is verlaat
+ Konsepkopie:
+ Media boodskap
+
+
+ U het nie \'n identiteitssleutel nie.
+ Ontvanger het geen identiteitssleutel nie.
+ Tas kontak se QR kode af
+ Vertoon u QR kode
+ WAARSKUWING, die afgetaste sleutel stem nie ooreen nie! Gaan asseblief die vingerafdruk deeglik na.
+ NIE Geverifieer NIE!
+ Hul sleutel is korrek. Dit is ook nodig om u sleutel met hul te verifieer.
+ Geverifieer!
+
+
+ Tas kontak se QR kode af
+ Vertoon u QR kode
+ WAARSKUWING, die afgetaste sleutel STEM NIE ooreen NIE!
+ Die afgetaste sleutel stem ooreen!
+ U identiteitsvingerafdruk
+
+
+ Inisieer ten spyte van bestaande versoek?
+ U het reeds \'n sessie inisialiseringsversoek na die ontvanger gestuur. Is u seker dat u nog een wil stuur? Dit sal die eerste versoek ongeldig maak.
+ Stuur
+
+
+ Slegte geïnkripteerde boodskap
+ Ontsyfer tans, wag asseblief…
+ Boodskap geïnkripteer vir nie-bestaande sessie
+ Versoek om \'n nie-bestaande sessie te beëindig
+
+
+ Fout tydens ontsyfering van boodskap.
+
+
+ Verbind tans aan MMS bediener…
+ Laai tans MMS af…
+ MMS aflaai het gefaal!
+ Laai tans af…
+ Tik en verstel MMS instellings om aflaai voort te sit.
+ Fout tydens ontsyfering van boodskap.
+
+
+ Ontsyfer tans MMS, wag asseblief…
+ Slegte geïnkripteerde MMS boodskap
+ MMS boodskap geïnkripteerd vir nie-bestaande sessie
+
+
+ Smoor kennisgewings
+
+
+ Inlaai vind tans plaas
+ Laai teksboodskappe tans in
+ Inlaai voltooid
+ Sisteem databasis inlaai is voltooid.
+
+
+ Tik om oop te maak.
+ Tik om oop te maak óf tik die slotjie om te sluit.
+ Stilte is ontsluit
+ Sluit met toegangsfrase
+
+
+ %1$d nuwe boodskappe in %2$d gesprekke
+ Nuutste van: %1$s
+ Geïnkripteerde boodskap
+ Media boodskap: %s
+ (Geed onderwerp)
+ Boodskap aflewering het gefaal.
+ Gefaal om boodskap af te lewer.
+ Fout tydens boodskap aflewering.
+ Merk alles as gelees
+ Merk as gelees
+ Media boodskap
+ Boodskap is ontvang deur %s.
+ Antwoord
+
+
+ Snelbeantwoording is nie beskikbaar onderwyl Stilte gesluit is nie!
+ Probleem tydens versending van boodskap!
+
+
+ Stilte
+ Nuwe boodskap
+
+
+ Ou toegangsfrase
+ Nuwe toegangsfrase
+ Herhaal nuwe toegangsfrase
+
+
+ Voer naam of nommer in
+
+
+ Geen kontakte.
+ Laai tans kontakte…
+
+
+ Kontakfoto
+
+
+ Selekteer vir
+
+
+ Geen versperde kontakte
+
+
+ Geen onlangse oproepe.
+
+
+ Gesprek gesmoor
+
+
+ Stuur sekure SMS
+ Stuur nie sekure SMS
+ Stuur sekure MMS
+ Stuur nie sekure MMS
+ Vanaf %1$s
+ Stuur
+ Verwyder
+ Gesprek met %1$s
+ Boodskap samestelling
+ Wisselskakel emoji sleutelbord
+ Aanhangsel Miniatuur
+
+
+ Media boodskap laai tans af
+ Media boodskap
+ Sekure boodskap
+
+
+ Laai af
+ Laai tans af
+ Stuur Gefaal
+ Goedkeuring In Pyplyn
+ Afgelewer
+
+
+ Laai af
+ Kontakfoto
+ Laai tans af
+
+
+ Speel
+ Vries
+ Laai af
+
+
+ Groep kiesmodus
+ %s gekies
+
+
+ Skuifrol tot onder
+
+
+ Voer uit
+ Voer in
+
+
+ Kon nie die joernaal op u toestel lees nie. U kan steeds ADB nuttig om \'n ontfoutjoernaal te verkry.
+ Dankie vir u hulp!
+ Dien tans in
+ Plaas tans die foutjoernale na gist…
+
+
+ Sou u verkies om u bestaande teksboodskappe in Stilte se geïnkripteerde databasis in te voer?
+ Die verstek toestel databasis sal nie gewysig word nie.
+ Slaan oor
+ Voer in
+ Dit mag \'n rukkie neem. Wees liefs geduldig. U sal in kennis gestel word sodra die invoer voltooid is.
+ VOER TANS IN
+
+
+ Dateer tans databasis op…
+
+ Voer ongeïnkripteerde rugsteun uit
+ Voer \'n ongeïnkripteerde rugsteun wat versoenbaar is met \'SMS Backup & Restore\' na geheue uit
+ Voer toestel SMS databasis in
+ Voer die databasis in vanaf die verstek toestel boodskapper toep
+ Herstel \'n geïnkripteerde rugsteun
+ Herstel \'n voorheen uitgevoerde geïnkripteerde rugsteun.
+ Voer ongeïnkripteerde rusteun in
+ Voer \'n ongeïnkripteerde rugsteundokument in. Een wat versoenbaar is met \'SMS Backup & Restore.\'
+ Voer geïnkripteerde rugsteun uit
+ Voer \'n geïnkripteerde rugsteun na geheue uit
+
+
+ Sien volle gesprek
+
+
+ Geen prente
+
+
+ VERIFIEER
+ HERSTUUR
+
+
+ Ontsluit
+
+
+ Stilte benodig MMS verstellings om media en groepboodskappe te stuur deur u diensverskaffer. U toestel maak nie hierdie informasie beskikbaar nie, wat somtyds so is vir geslote toestelle en ander beperkte konfigurasies.
+ Om media en ander groep boodskappe te kan stuur, Tik \'Reg\' en voltooi die vereiste instellings. Die MMS instellings vir u diensverskaffer kan gewoonlik vasgestel word deur vir \'u diensverskaffer APN\' te soek. U behoort dit net eenmalig te doen.
+
+
+ IS VERSPER
+
+
+ Smoor gesprek
+ Deaktiveer kennisgewings vir hierdie gesprek
+ Kennisgewing klank
+ Vibreer
+ Versper
+ Kleur
+ Kleur vir die kontak
+
+
+ Voltooi
+
+
+ Lees naam of nommer in
+ Voeg lid by
+
+
+ Hul identiteit (hul lees):
+ U identiteit (u lees):
+
+
+ Sommige sake vereis u aandag.
+ Gestuur
+ Ontvang
+ Via
+ Aan:
+ Vanaf:
+ Met:
+
+
+ Skep toegangsfrase
+ Sleutel toegangsfrase in
+ Selekteer kontakte
+ Publieke identiteitssleutel
+ Wysig toegangsfrase
+ Verifieer identiteit
+ Voltooi sleuteluitruil
+ Stuur ontfoutingslog
+ Media voorskou
+ Alle prente
+ Alle prente met %1$s
+ Boodskap besonderhede
+ Gestoorde gesprekke
+ Verstel MMS Instellings
+
+
+ Invoer / uitvoer
+ U identiteitssleutel
+ Gebruik verstek
+ Gebruik pasgemaak
+
+ Smoor vir 1 uur
+ Smoor vir 2 ure
+ Smoor vir 1 dag
+ Smoor vir 7 dae
+ Smoor vir 1 jaar
+
+ Instellings verstek
+ Geaktiveer
+ Gedeaktiveer
+
+ Naam en boodskap
+ Naam alleenlik
+ Geen naam of boodskap
+
+ Vertoon inlees sleutel
+ Vertoin emoji sleutel
+ Vertoon stuur knoppie
+
+
+
+
+ Algemeen
+ SMS en MMS
+ Ontvang alle SMS
+ Ontvang alle MMS
+ Gebruik Stilte om alle inkomende teksboodskappe te aanskou en te stoor
+ Gebruik Stilte om alle inkomende multimediaboodskappe te aanskou en te stoor
+ Sleutelbord opsies
+ Deaktiveer emojie laai
+ Aktiveer hierdie opsie indien u sleutelbord emojis ondersteun.
+ Vertoon instellings
+ Kies u kontak inleesopsie vanaf die kontaklys.
+ Wysig toegangsfrase
+ Wysig u toegangsfrase
+ Voltooi sleuteluitruilings
+ Aktiveer toegangsfrase
+ Aktiveer lokale enkripsie van boodskappe en sleutels
+ Skerm sekuriteit
+ Voltooi outomaties sleutelwissel vir nuwe sessies of bestaande sessies met dieselfde identiteitssleutel
+ Versper skermskutte in die onlangse lys en binne die toep
+ Vereis die toegangsfrase om boodskappe na \'n gegewe tyd te kan besigtig
+ Tyduit toegangsfrase
+ Kies toegangsfrase uittyd
+ Tyduit interval
+ Die tyd om te wag voor die toegangsfrase uit geheue gewis word
+ Kennisgewings
+ Aktiveer boodskap kennisgewings
+ LGD kleur
+ Onbekend
+ LGD flitspatroon
+ Stel pasgemaakte LGD flitspatroon
+ Aan vir:
+ Af vir:
+ Pasgemaakte LGD flitspatroon gestel!
+ Klank
+ Wysig kennisgewing klank
+ Stil
+ In-gesprek kennisgewings
+ Speel kennisgewingklank tydens die besigtiging van \'n aktiewe gesprek.
+ Herhaal kennisgewings
+ Nooit
+ Een keer
+ Twee maal
+ Drie maal
+ Vyf maal
+ Tien maal
+ Virbreer
+ Verbreer ook met kennisgewings
+ minute
+ ure
+ Groen
+ Rooi
+ Blou
+ Oranje
+ Siaan
+ Magenta
+ Blank
+ Geen
+ Snel
+ Normaal
+ Slakkepas
+ Pasgemaak
+ Gevorderd
+ Privaatheid
+ MMS Gebruiker Agent
+ Handmatige MMS instellings
+ Gebruik handmatige MMS instellings
+ Verplaas sisteem MMS instellings met die inligting hieronder.
+ MMSC URL
+ MMS Instaanbediener Adres
+ MMS Instaanbedienerpoort
+ MMSC Gebruikernaam
+ MMSC Sleutelwoord
+ SMS afleweringsverslae
+ Versoek \'n afleweringsverslag vir elke SMS boodskap wat u stuur
+ SMS afleweringsverslae kennisgewing
+ Vertoon \'n kennisgewing met die ontvangs van \'n afleweringsverslag
+ Wis outomaties ouer boodskappe sodra \'n gesprek \'n bepaalde lengte bereik
+ Wis ou boodskappe
+ Kletse en media
+ Gesprek lengtebeperking
+ Kort alle gesprekke nou in
+ Gaan alle gesprekke na en forseer lengte beperkinge af
+ Lig
+ Donker
+ Voorkoms
+ Tema
+ Verstek
+ Taal
+ Stel as verstek SMS toep
+ Maak Stilte die verstek SMS/MMS toepassing vir u sisteem.
+ Handig ontfoutjoernaal in
+ \'Wi-Fi Oproep\' versoeningsmodus
+ Aktiveer indien u toestel SMS/MMS aflewering oor Wi-Fi gebruik (slegs indien \'Wi-Fi Oproepe\' geaktiveer is op u toestel).
+ Aangaande Stilte
+ Weergawe %s
+ Privaatheidsbeleid
+ Geheimsinnige sleutelbord
+ Indien verstel na geheimsinnige modus, sal die sleutelbord nie enige woorde wat u tik, onthou, leer of stoor nie.
+ Versperde kontakte
+ Vertoon kennisgewings
+ Vertoon tyd gestuur
+ Vertoon tyd gestuur instede van ontvang vir inkomende boodskappe
+ Verskans ongeleesde boodskap skeier
+ MMS
+ Outo-aflaai
+ Laai outomaties MMS boodskappe af
+ Netwerkswerf outo-aflaai
+ Laai outomaties MMS boodskappe af tydens netwerkswerwing
+ Boodskap inkorting
+ Gebruik sisteem emoji
+ De-aktiveer Stilte se ingeboude emoji ondersteuning
+
+
+
+
+
+
+ Kies alles
+ Ontkies alles
+ ALLE KONTAKTE
+ Nuwe boodskap aan…
+
+
+ Voltooid
+
+
+ Verfris kontaklys
+
+
+ Stuur sekure SMS
+ Stuur nie sekure SMS
+ Stuur sekure MMS
+ Stuur nie sekure MMS
+
+
+ Skakel
+
+
+ Boodskapbesonderhede
+ Kopieer teks
+ Wis boodskap
+ Stuur boodskap aan
+ Herstuur boodskap
+
+
+ Stoor aanhangsel
+
+
+ Nooi uit
+
+
+ Begin sekure sessie
+ Sekuriteit
+
+
+ Wis gekose
+ Kies alles
+ Stuur verkose konsepkopieë
+ Stoor verkose
+ Ontstoor verkose
+
+
+ Soek
+
+
+ Kontak avatar
+ Foutboodskap
+ Gestoor
+
+
+ Nuwe gesprek
+
+
+ Sekuriteit
+ Verifieer identiteit
+ Beëindig sekure sessie
+
+
+ Ontsmoor
+
+
+ Smoor kennisgewings
+
+
+ Heg aanhangsel aan
+ Wis gesprek
+ Stoor gesprek
+ Ontstoor gespreek
+ Alle prente
+ Gesprek instellings
+
+
+ Brei opspringer uit
+
+
+ Voeg by kontakte
+
+
+ Ontvangslys
+ Aflewering
+ Gesprek
+ Loods uitsending
+
+
+ Vergelyk
+ Vertoon u QR kode
+ Tas kontak se QR kode af
+ Deel u identiteitsvingerafdruk
+
+
+ Nuwe boodskap
+ Nuwe groep
+ Instellings
+ Sluit
+ Merk alles as gelees
+ Stoor gesprekke
+
+
+ Gebruik as verstek SMS toep?
+ Stilte moet u verstek SMS/MMS toep wees om boodskappe te kan ontvang.
+ STEL
+ Voer toestel SMS in?
+ Tik om jou toestel se SMS boodskappe in Stilte se geïnkripteerde databasis in te kopiëer.
+ VOER IN
+ Resenseer die toep
+ Indien u die gebruik van die toep geniet, neem asseblief \'n oomblik en help ons deur \'n resensie te loods.
+ RESENSEER NOU!
+ Aktiveer afleweringsverslae?
+ Afleweringsverslae stel u in staat om te weet wanneer u ontvanger u boodskappe ontvang het. Sommige netwerke hef \'n addisionele fooi.
+ AKTIVEER
+ SLUIT
+
+
+ U
+ Die beeld se voorskou het gefaal
+ Nie-ondersteunde media tipe
+ Konsepkopie
+
+
+ Stoor
+ Stuur aan
+ Alle prente
+
+
+ Stoor alles
+
+
+ Beeldvoorskou
+
+
+ Wis tans uit…
+ Wis tans ou boodskappe uit…
+ Ou boodskappe is suksesvol uitgewis
+
+
+ Draer ikoon
+
+
+
+
diff --git a/res/values-af/vector_paths.xml b/res/values-af/vector_paths.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3d3ee4767234200070cecde91285bdb4ce3e948
--- /dev/null
+++ b/res/values-af/vector_paths.xml
@@ -0,0 +1,20 @@
+
+
+
+ M 44 32 L 44 64 L 100 64 L 100 64 Z
+ M 44 96 L 44 64 L 100 64 L 100 64 Z
+
+
+ M 32 40 L 32 56 L 96 56 L 96 40 Z
+ M 32 88 L 32 72 L 96 72 L 96 88 Z
+
+
+ upperpart
+ bottompart
+ parts
+
+
+ upper
+ bottom
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 340ff8e701d2e25717dfc05723234404aa6afabb..9992d6110d5eebee25f39238e4d2e8a712cbcb6d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -426,6 +426,7 @@
Failed to deliver message.
Error delivering message.
Mark all as read
+ Delete all
Mark read
Media message
Message received by %s.
diff --git a/src/org/smssecure/smssecure/notifications/DeleteMessageReceiver.java b/src/org/smssecure/smssecure/notifications/DeleteMessageReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..eecca4d90893de6e7df98778039d12db836bfc71
--- /dev/null
+++ b/src/org/smssecure/smssecure/notifications/DeleteMessageReceiver.java
@@ -0,0 +1,60 @@
+package org.smssecure.smssecure.notifications;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationManagerCompat;
+import android.util.Log;
+
+import org.smssecure.smssecure.crypto.MasterSecret;
+import org.smssecure.smssecure.database.DatabaseFactory;
+
+public class DeleteMessageReceiver extends MasterSecretBroadcastReceiver {
+
+ private static final String TAG = DeleteMessageReceiver.class.getSimpleName();
+ public static final String DELETE_ACTION = "org.smssecure.smssecure.notifications.DELETE_MSGS";
+ public static final String MSG_IDS_EXTRA = "msg_ids";
+ public static final String MSG_IS_MMS_EXTRA = "msg_is_mms";
+ public static final String THREAD_IDS_EXTRA = "thread_ids";
+ public static final String NOTIFICATION_ID_EXTRA = "notification_id";
+
+ @Override
+ protected void onReceive(final Context context, Intent intent,
+ @Nullable final MasterSecret masterSecret)
+ {
+ if (!DELETE_ACTION.equals(intent.getAction()))
+ return;
+
+ final long[] messageIds = intent.getLongArrayExtra(MSG_IDS_EXTRA);
+ final boolean[] messageIsMms = intent.getBooleanArrayExtra(MSG_IS_MMS_EXTRA);
+ final long[] threadIds = intent.getLongArrayExtra(THREAD_IDS_EXTRA);
+
+ if (messageIds == null || messageIsMms == null || threadIds == null ||
+ messageIds.length != messageIsMms.length){
+ Log.e(TAG, "Bad extras received");
+ return;
+ }
+
+ NotificationManagerCompat.from(context).cancel(intent.getIntExtra(NOTIFICATION_ID_EXTRA, -1));
+
+ new AsyncTask() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ for (int i = 0; i < messageIds.length; i++) {
+ if (messageIsMms[i]) {
+ DatabaseFactory.getMmsDatabase(context).delete(messageIds[i]);
+ } else {
+ DatabaseFactory.getSmsDatabase(context).deleteMessage(messageIds[i]);
+ }
+ }
+ for (long threadId : threadIds) {
+ DatabaseFactory.getThreadDatabase(context).setRead(threadId);
+ }
+
+ MessageNotifier.updateNotification(context, masterSecret);
+ return null;
+ }
+ }.execute();
+ }
+}
diff --git a/src/org/smssecure/smssecure/notifications/MessageNotifier.java b/src/org/smssecure/smssecure/notifications/MessageNotifier.java
index df873880253d34cd017a4b32da1f7619647f3d70..14a2cf9b660d3bee125f1f8e3678abfd49593cbf 100644
--- a/src/org/smssecure/smssecure/notifications/MessageNotifier.java
+++ b/src/org/smssecure/smssecure/notifications/MessageNotifier.java
@@ -295,7 +295,8 @@ public class MessageNotifier {
builder.addActions(masterSecret,
notificationState.getMarkAsReadIntent(context, notificationId),
notificationState.getQuickReplyIntent(context, notifications.get(0).getRecipients()),
- notificationState.getRemoteReplyIntent(context, notifications.get(0).getRecipients()));
+ notificationState.getRemoteReplyIntent(context, notifications.get(0).getRecipients()),
+ notificationState.getDeleteMessageIntent(context, notificationId));
ListIterator iterator = notifications.listIterator(notifications.size());
@@ -333,7 +334,8 @@ public class MessageNotifier {
long timestamp = notifications.get(0).getTimestamp();
if (timestamp != 0) builder.setWhen(timestamp);
- builder.addActions(notificationState.getMarkAsReadIntent(context, SUMMARY_NOTIFICATION_ID));
+ builder.addActions(notificationState.getMarkAsReadIntent(context, SUMMARY_NOTIFICATION_ID),
+ notificationState.getDeleteMessageIntent(context, SUMMARY_NOTIFICATION_ID));
ListIterator iterator = notifications.listIterator(0);
diff --git a/src/org/smssecure/smssecure/notifications/MultipleRecipientNotificationBuilder.java b/src/org/smssecure/smssecure/notifications/MultipleRecipientNotificationBuilder.java
index 721f796f32e423c2f4681ddfb0de0de0436def15..b7d757734477a74f6c7a9891ef01931adb378a8e 100644
--- a/src/org/smssecure/smssecure/notifications/MultipleRecipientNotificationBuilder.java
+++ b/src/org/smssecure/smssecure/notifications/MultipleRecipientNotificationBuilder.java
@@ -47,12 +47,17 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
}
}
- public void addActions(PendingIntent markAsReadIntent) {
- NotificationCompat.Action markAllAsReadAction = new NotificationCompat.Action(R.drawable.check,
+ public void addActions(PendingIntent markAsReadIntent, PendingIntent deleteAllIntent) {
+ NotificationCompat.Action markAllAsReadAction = new NotificationCompat.Action(R.drawable.ic_check_white_24dp,
context.getString(R.string.MessageNotifier_mark_all_as_read),
markAsReadIntent);
+ NotificationCompat.Action deleteAllAction = new NotificationCompat.Action(R.drawable.ic_delete_white_24dp,
+ context.getString(R.string.MessageNotifier_delete_all),
+ deleteAllIntent);
addAction(markAllAsReadAction);
- extend(new NotificationCompat.WearableExtender().addAction(markAllAsReadAction));
+ addAction(deleteAllAction);
+ extend(new NotificationCompat.WearableExtender().addAction(markAllAsReadAction)
+ .addAction(deleteAllAction));
}
public void addMessageBody(@NonNull Recipient sender, @Nullable CharSequence body) {
diff --git a/src/org/smssecure/smssecure/notifications/NotificationState.java b/src/org/smssecure/smssecure/notifications/NotificationState.java
index e2c6b99acd688b7d23661472f1d810f20b19a4a2..d0b43bfc13c393b4ece00985d65b1a9a9f3dc9d9 100644
--- a/src/org/smssecure/smssecure/notifications/NotificationState.java
+++ b/src/org/smssecure/smssecure/notifications/NotificationState.java
@@ -102,7 +102,6 @@ public class NotificationState {
int index = 0;
for (long thread : threads) {
- Log.w("NotificationState", "Added thread: " + thread);
threadArray[index++] = thread;
}
@@ -115,6 +114,33 @@ public class NotificationState {
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
+ public PendingIntent getDeleteMessageIntent(Context context, int notificationId){
+
+ long[] idArray = new long[notificationCount];
+ boolean[] isMmsArray = new boolean[notificationCount];
+ long[] threadArray = new long[threads.size()];
+ int index = 0;
+
+ for (NotificationItem notificationItem : notifications) {
+ isMmsArray[index] = notificationItem.isMms();
+ idArray[index++] = notificationItem.getId();
+ }
+ index = 0;
+ for (long thread : threads) {
+ threadArray[index++] = thread;
+ }
+
+ Intent intent = new Intent(DeleteMessageReceiver.DELETE_ACTION);
+ intent.setClass(context, DeleteMessageReceiver.class);
+ intent.setData((Uri.parse("custom://"+System.currentTimeMillis())));
+ intent.putExtra(DeleteMessageReceiver.MSG_IDS_EXTRA, idArray);
+ intent.putExtra(DeleteMessageReceiver.MSG_IS_MMS_EXTRA, isMmsArray);
+ intent.putExtra(DeleteMessageReceiver.THREAD_IDS_EXTRA, threadArray);
+ intent.putExtra(DeleteMessageReceiver.NOTIFICATION_ID_EXTRA, notificationId);
+
+ return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
public PendingIntent getRemoteReplyIntent(Context context, Recipients recipients) {
if (threads.size() != 1) throw new AssertionError("We only support replies to single thread notifications!");
@@ -130,7 +156,7 @@ public class NotificationState {
public PendingIntent getQuickReplyIntent(Context context, Recipients recipients) {
if (threads.size() != 1) throw new AssertionError("We only support replies to single thread notifications! " + threads.size());
- Intent intent = new Intent(context, ConversationPopupActivity.class);
+ Intent intent = new Intent(context, ConversationPopupActivity.class);
intent.putExtra(ConversationActivity.RECIPIENTS_EXTRA, recipients.getIds());
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, (long)threads.toArray()[0]);
intent.setData((Uri.parse("custom://"+System.currentTimeMillis())));
diff --git a/src/org/smssecure/smssecure/notifications/SingleRecipientNotificationBuilder.java b/src/org/smssecure/smssecure/notifications/SingleRecipientNotificationBuilder.java
index 8f4d0e0eacd5c339b7d6ab5841452133ffcbc9bd..4fda318fdf598864994e1b97f2903a9a5311e6ba 100644
--- a/src/org/smssecure/smssecure/notifications/SingleRecipientNotificationBuilder.java
+++ b/src/org/smssecure/smssecure/notifications/SingleRecipientNotificationBuilder.java
@@ -102,19 +102,23 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil
public void addActions(@Nullable MasterSecret masterSecret,
@NonNull PendingIntent markReadIntent,
@NonNull PendingIntent quickReplyIntent,
- @NonNull PendingIntent wearableReplyIntent)
+ @NonNull PendingIntent wearableReplyIntent,
+ @NonNull PendingIntent deleteIntent)
{
- Action markAsReadAction = new Action(R.drawable.check,
+ Action markAsReadAction = new Action(R.drawable.ic_check_white_24dp,
context.getString(R.string.MessageNotifier_mark_read),
markReadIntent);
+ Action deleteAction = new Action(R.drawable.ic_delete_white_24dp,
+ context.getString(R.string.delete),
+ deleteIntent);
if (masterSecret != null) {
- Action replyAction = new Action(R.drawable.ic_reply_white_36dp,
+ Action replyAction = new Action(R.drawable.ic_reply_white_24dp,
context.getString(R.string.MessageNotifier_reply),
quickReplyIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- replyAction = new Action.Builder(R.drawable.ic_reply_white_36dp,
+ replyAction = new Action.Builder(R.drawable.ic_reply_white_24dp,
context.getString(R.string.MessageNotifier_reply),
wearableReplyIntent)
.addRemoteInput(new RemoteInput.Builder(MessageNotifier.EXTRA_REMOTE_REPLY)
@@ -131,13 +135,17 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil
addAction(markAsReadAction);
addAction(replyAction);
+ addAction(deleteAction);
extend(new NotificationCompat.WearableExtender().addAction(markAsReadAction)
- .addAction(wearableReplyAction));
+ .addAction(wearableReplyAction)
+ .addAction(deleteAction));
} else {
addAction(markAsReadAction);
+ addAction(deleteAction);
- extend(new NotificationCompat.WearableExtender().addAction(markAsReadAction));
+ extend(new NotificationCompat.WearableExtender().addAction(markAsReadAction)
+ .addAction(deleteAction));
}
}