Adds permission info dialog when permissions denied for contacts and download attachment

Introduces a dialog informing about the need to grant permissions when contacts permission for the contacts
screen or storage permission for downloading an attachment has been denied.

MAILAND-2203
This commit is contained in:
Maciej Surmacz 2021-08-12 10:47:24 +02:00
parent 11d203248f
commit 96813c6cf1
36 changed files with 188 additions and 47 deletions

View File

@ -143,7 +143,7 @@ public class AddAttachmentsActivity extends BaseStoragePermissionActivity implem
openCamera = false;
openGallery = false;
DialogUtils.Companion.showInfoDialog(AddAttachmentsActivity.this, getString(R.string.need_permissions_title),
getString(R.string.need_storage_permissions_text), unit -> unit);
getString(R.string.need_storage_permissions_add_attachment_text), unit -> unit);
}
@Override

View File

@ -59,14 +59,14 @@ public abstract class BaseContactsActivity extends BaseConnectivityActivity impl
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
contactsPermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.CONTACTS, this, this, true);
storagePermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.STORAGE, this, this, false);
contactsPermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.CONTACTS, this, this);
storagePermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.STORAGE, this, this);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
contactsPermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
storagePermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
contactsPermissionHelper.onRequestPermissionsResult(requestCode, grantResults);
storagePermissionHelper.onRequestPermissionsResult(requestCode, grantResults);
}

View File

@ -40,7 +40,7 @@ public abstract class BaseStoragePermissionActivity extends BaseConnectivityActi
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
storagePermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.STORAGE, this, this, false);
storagePermissionHelper = PermissionHelper.newInstance(Constants.PermissionType.STORAGE, this, this);
mHasStoragePermission = null;
checkPin = true;
}
@ -56,7 +56,7 @@ public abstract class BaseStoragePermissionActivity extends BaseConnectivityActi
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
storagePermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
storagePermissionHelper.onRequestPermissionsResult(requestCode, grantResults);
}
@Override

View File

@ -167,6 +167,7 @@ internal class MessageDetailsViewModel @Inject constructor(
private val _messageRenderedWithImages: MutableLiveData<Message> = MutableLiveData()
private val _checkStoragePermission: MutableLiveData<Event<Boolean>> = MutableLiveData()
private val _messageDetailsError: MutableLiveData<Event<String>> = MutableLiveData()
private val _showPermissionMissingDialog: MutableLiveData<Unit> = MutableLiveData()
private val _conversationUiFLow = MutableSharedFlow<ConversationUiModel>(replay = 1)
val conversationUiModel: SharedFlow<ConversationUiModel>
@ -215,6 +216,9 @@ internal class MessageDetailsViewModel @Inject constructor(
val messageDetailsError: LiveData<Event<String>>
get() = _messageDetailsError
val showPermissionMissingDialog: LiveData<Unit>
get() = _showPermissionMissingDialog
val prepareEditMessageIntent: LiveData<Event<IntentExtrasData>>
get() = _prepareEditMessageIntentResult
@ -723,4 +727,7 @@ internal class MessageDetailsViewModel @Inject constructor(
}
}
fun storagePermissionDenied() {
_showPermissionMissingDialog.value = Unit
}
}

View File

@ -89,8 +89,7 @@ class ContactsActivity :
PermissionHelper.newInstance(
Constants.PermissionType.CONTACTS,
this,
ContactsPermissionHelperCallbacks(),
true
ContactsPermissionHelperCallbacks()
)
}
@ -165,7 +164,7 @@ class ContactsActivity :
permissions: Array<String>,
grantResults: IntArray
) {
contactsPermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults)
contactsPermissionHelper.onRequestPermissionsResult(requestCode, grantResults)
}
override fun onResume() {

View File

@ -234,6 +234,8 @@ class ContactsListFragment : BaseFragment(), IContactsFragment {
)
listener.doStartActivityForResult(intent, REQUEST_CODE_CONVERT_CONTACT)
}
observePermissionMissingDialogTrigger()
}
private fun resetSelections() {
@ -434,6 +436,17 @@ class ContactsListFragment : BaseFragment(), IContactsFragment {
private fun getSelectedItems() = contactsAdapter.currentList.filter { it.isSelected }
private fun observePermissionMissingDialogTrigger() {
viewModel.showPermissionMissingDialog.observe(viewLifecycleOwner) {
DialogUtils.showInfoDialog(
context = requireContext(),
title = requireContext().getString(R.string.need_permissions_title),
message = requireContext().getString(R.string.need_contacts_permissions_text),
okListener = { }
)
}
}
companion object {
fun newInstance(hasPermission: Boolean): ContactsListFragment {

View File

@ -32,6 +32,7 @@ import ch.protonmail.android.contacts.list.search.ISearchListenerViewModel
import ch.protonmail.android.contacts.repositories.andorid.baseInfo.AndroidContactsRepository
import ch.protonmail.android.contacts.repositories.andorid.details.AndroidContactDetailsRepository
import ch.protonmail.android.data.local.ContactDao
import ch.protonmail.android.utils.Event
import ch.protonmail.android.worker.DeleteContactWorker
import ch.protonmail.libs.core.utils.ViewModelFactory
import kotlinx.coroutines.flow.catch
@ -53,6 +54,9 @@ class ContactsListViewModel(
private val progressMax = MutableLiveData<Int?>()
private val progress = MutableLiveData<Int?>()
private val showPermissionMissingDialogMutableLiveData = MutableLiveData<Event<Unit>>()
val showPermissionMissingDialog: LiveData<Event<Unit>>
get() = showPermissionMissingDialogMutableLiveData
private val searchPhraseLiveData = MutableLiveData<String?>()
override val androidContacts = androidContactsRepository.androidContacts
@ -102,6 +106,9 @@ class ContactsListViewModel(
override fun setHasContactsPermission(hasPermission: Boolean) {
this.hasPermission = hasPermission
androidContactsRepository.setContactsPermission(hasPermission)
if (!hasPermission) {
showPermissionMissingDialogMutableLiveData.value = Event(Unit)
}
}
override fun setSearchPhrase(searchPhrase: String?) {

View File

@ -66,6 +66,7 @@ import ch.protonmail.android.utils.Event
import ch.protonmail.android.utils.MessageUtils
import ch.protonmail.android.utils.UiUtil
import ch.protonmail.android.utils.extensions.showToast
import ch.protonmail.android.utils.ui.dialogs.DialogUtils
import ch.protonmail.android.utils.ui.dialogs.DialogUtils.Companion.showTwoButtonInfoDialog
import ch.protonmail.android.views.messageDetails.BottomActionsView
import com.google.android.material.appbar.AppBarLayout
@ -192,6 +193,7 @@ internal class MessageDetailsActivity : BaseStoragePermissionActivity() {
viewModel.messageDetailsError.observe(this, MessageDetailsErrorObserver())
listenForConnectivityEvent()
observeEditMessageEvents()
observePermissionMissingDialogTrigger()
}
private fun initAdapters() {
@ -297,6 +299,11 @@ internal class MessageDetailsActivity : BaseStoragePermissionActivity() {
return true
}
override fun onPermissionDenied(type: Constants.PermissionType) {
super.onPermissionDenied(type)
viewModel.storagePermissionDenied()
}
fun showReportPhishingDialog(messageId: String) {
val message = viewModel.decryptedConversationUiModel.value?.messages?.find { it.messageId == messageId }
AlertDialog.Builder(this)
@ -777,6 +784,17 @@ internal class MessageDetailsActivity : BaseStoragePermissionActivity() {
)
}
private fun observePermissionMissingDialogTrigger() {
viewModel.showPermissionMissingDialog.observe(this) {
DialogUtils.showInfoDialog(
context = this,
title = getString(R.string.need_permissions_title),
message = getString(R.string.need_storage_permissions_download_attachment_text),
okListener = { }
)
}
}
private fun getCurrentSubject() = expandedToolbarTitleTextView.text ?: getString(R.string.empty_subject)
private fun getMessagesFrom(messageOriginator: String?): String =

View File

@ -23,6 +23,7 @@ import android.app.Activity;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.preference.PreferenceManager;
@ -32,12 +33,12 @@ public class PermissionHelper {
private static final int REQUEST_CODE_READ_CONTACTS = 1001;
private static final int REQUEST_CODE_ACCESS_STORAGE = 1011;
private PermissionCallback mPermissionCallback;
private Constants.PermissionType _permissionType;
private final PermissionCallback mPermissionCallback;
private final Constants.PermissionType _permissionType;
private String mManifestPermission;
private String mPermissionRequestedPref;
private int mRequestCode;
private Activity mActivity;
private final Activity mActivity;
private PermissionHelper(Constants.PermissionType type, Activity activity, PermissionCallback callback) {
_permissionType = type;
@ -54,7 +55,7 @@ public class PermissionHelper {
this.mPermissionCallback = callback;
}
public static PermissionHelper newInstance(Constants.PermissionType type, Activity activity, PermissionCallback callback, boolean useSnack) {
public static PermissionHelper newInstance(Constants.PermissionType type, Activity activity, PermissionCallback callback) {
return new PermissionHelper(type, activity, callback);
}
@ -91,7 +92,7 @@ public class PermissionHelper {
ActivityCompat.requestPermissions(mActivity, new String[]{mManifestPermission}, mRequestCode);
}
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
public void onRequestPermissionsResult(int requestCode, @NonNull int[] grantResults) {
if (requestCode == mRequestCode) {
boolean hasSth = grantResults.length > 0;
if (hasSth) {
@ -104,12 +105,6 @@ public class PermissionHelper {
if (this.mPermissionCallback != null) {
this.mPermissionCallback.onPermissionDenied(_permissionType);
}
boolean should = ActivityCompat.shouldShowRequestPermissionRationale(mActivity, mManifestPermission);
// not needed as per product decision
// if (!should) {
// promptSettings();
// }
}
}
}

View File

@ -736,7 +736,7 @@
Considereu alliberar o adquirir més espai abans que us en quedeu sense.</string>
<!-- endregion -->
<string name="need_permissions_title">Permisos</string>
<string name="need_storage_permissions_text">Per tal d\'afegir els fitxers adjunts necessiteu permetre
<string name="need_storage_permissions_add_attachment_text">Per tal d\'afegir els fitxers adjunts necessiteu permetre
l\'accés a l\'emmagatzemament.</string>
<string name="push_notifications_alert_title">Alerta de notificacions push</string>
<string name="push_notifications_alert_subtitle">Les notificacions push per ProtonMail no funcionen sense els serveis de Google Play.</string>

View File

@ -762,7 +762,7 @@
Zvažte uvolnění nějakého místa nebo přikoupení vetší kapacity schránky.</string>
<!-- endregion -->
<string name="need_permissions_title">Oprávnění</string>
<string name="need_storage_permissions_text">Pro přidávání příloh musíte povolit přístup
<string name="need_storage_permissions_add_attachment_text">Pro přidávání příloh musíte povolit přístup
k úložišti.</string>
<string name="push_notifications_alert_title">Oznámení Push notifikací</string>
<string name="push_notifications_alert_subtitle">Push notifikace pro ProtonMail nefungují bez aktuální verze služeb Google Play.</string>

View File

@ -736,7 +736,7 @@
Overvej at frigive eller tilkøbe yderligere lagerplads, inden den er opbrugt.</string>
<!-- endregion -->
<string name="need_permissions_title">Tilladelser</string>
<string name="need_storage_permissions_text">For at tilføje vedhæftninger, skal du tillade
<string name="need_storage_permissions_add_attachment_text">For at tilføje vedhæftninger, skal du tillade
lagerpladsadgang.</string>
<string name="push_notifications_alert_title">Push-notifikationsadvarsel</string>
<string name="push_notifications_alert_subtitle">Push-notifikationer i ProtonMail fungerer ikke uden opdaterede Google Play-tjenester.</string>

View File

@ -729,7 +729,7 @@ zu: &lt;br/&gt;&lt;br/&gt;&lt;u&gt;%s&lt;/u&gt;&lt;br/&gt;&lt;br/&gt; Möchten S
<string name="storage_limit_approaching_text">Sie haben 90% Ihrer Speicherplatzgröße erreicht. Erwägen Sie, etwas Platz freizugeben oder mehr Speicherplatz zu kaufen, bevor Ihnen der Speicherplatz ausgeht.</string>
<!-- endregion -->
<string name="need_permissions_title">Berechtigungen</string>
<string name="need_storage_permissions_text">Um Anhänge hinzufügen zu können, müssen Sie den Zugriff auf den Datenträger erlauben.</string>
<string name="need_storage_permissions_add_attachment_text">Um Anhänge hinzufügen zu können, müssen Sie den Zugriff auf den Datenträger erlauben.</string>
<string name="push_notifications_alert_title">Push-Benachrichtigungen</string>
<string name="push_notifications_alert_subtitle">Push-Benachrichtigungen für ProtonMail funktionieren nicht ohne aktualisierte Google Play-Dienste.</string>
<string name="app_locked">App gesperrt</string>

View File

@ -736,7 +736,7 @@
Εξετάστε το ενδεχόμενο να ελευθερώσετε χώρο ή να αγοράσετε περισσότερο αποθηκευτικό χώρο πριν εξαντληθεί ο εναπομείναντας χώρος.</string>
<!-- endregion -->
<string name="need_permissions_title">Δικαιώματα</string>
<string name="need_storage_permissions_text">Για να προσθέσετε συνημμένα θα πρέπει να επιτρέψετε
<string name="need_storage_permissions_add_attachment_text">Για να προσθέσετε συνημμένα θα πρέπει να επιτρέψετε
πρόσβαση στην αποθήκευση.</string>
<string name="push_notifications_alert_title">Ειδοποιήσεις Push</string>
<string name="push_notifications_alert_subtitle">Οι ειδοποιήσεις Push για το ProtonMail δεν λειτουργούν χωρίς ενημερωμένες υπηρεσίες του Google Play.</string>

View File

@ -737,7 +737,7 @@ compre más
Considere liberar algo de espacio o compre más antes de quedarse sin espacio.</string>
<!-- endregion -->
<string name="need_permissions_title">Permisos</string>
<string name="need_storage_permissions_text">Para añadir archivos adjuntos necesita permitir
<string name="need_storage_permissions_add_attachment_text">Para añadir archivos adjuntos necesita permitir
el acceso al almacenamiento.</string>
<string name="push_notifications_alert_title">Alerta de notificaciones push</string>
<string name="push_notifications_alert_subtitle">Las notificaciones push para ProtonMail no funcionan sin los servicios de Google Play actualizados.</string>

View File

@ -736,7 +736,7 @@
Pensez à libérer de lespace ou à acheter plus de stockage avant de manquer de capacité.</string>
<!-- endregion -->
<string name="need_permissions_title">Autorisations</string>
<string name="need_storage_permissions_text">Pour ajouter des pièces jointes, vous devez autoriser
<string name="need_storage_permissions_add_attachment_text">Pour ajouter des pièces jointes, vous devez autoriser
l\'accès au stockage.</string>
<string name="push_notifications_alert_title">Alerte de notifications push</string>
<string name="push_notifications_alert_subtitle">Les notifications push pour ProtonMail ne fonctionnent pas sans la mise à jour des services Google Play.</string>

View File

@ -749,7 +749,7 @@
Razmislite o oslobađanju prostora ili kupnji više prostora za pohranu prije nego što vam ponestane kapaciteta.</string>
<!-- endregion -->
<string name="need_permissions_title">Dozvole</string>
<string name="need_storage_permissions_text">Da biste dodali privitke, trebate dopustiti
<string name="need_storage_permissions_add_attachment_text">Da biste dodali privitke, trebate dopustiti
pristup pohrani.</string>
<string name="push_notifications_alert_title">Upozorenja Push obavijesti</string>
<string name="push_notifications_alert_subtitle">Push obavijesti za ProtonMail ne rade bez ažuriranih Google Play usluga.</string>

View File

@ -737,7 +737,7 @@ Svájci székhellyel</string>
Fontolja meg, hogy helyet szabadít fel vagy további tárhelyet vásárol, mielőtt kifutna a szabad helyből.</string>
<!-- endregion -->
<string name="need_permissions_title">Engedélyek</string>
<string name="need_storage_permissions_text">Melléklet hozzáadáshoz engedélyeznie kell
<string name="need_storage_permissions_add_attachment_text">Melléklet hozzáadáshoz engedélyeznie kell
a tárhely elérését.</string>
<string name="push_notifications_alert_title">Push értesítés riasztás</string>
<string name="push_notifications_alert_subtitle">A ProtonMail push értesítések nem működnek a legújabb Google Play szolgáltatások nélkül.</string>

View File

@ -726,7 +726,7 @@ ke:&lt;br/&gt;&lt;br/&gt;&lt;u&gt;%s&lt;/u&gt;&lt;br/&gt;&lt;br/&gt;Apakah Anda
Silakan pertimbangkan untuk membebaskan ruang atau membayar penyimpanan lebih sebelum kapasitas penyimpanan Anda habis.</string>
<!-- endregion -->
<string name="need_permissions_title">Izin</string>
<string name="need_storage_permissions_text">Untuk menambahkan lampiran Anda harus mengizinkan
<string name="need_storage_permissions_add_attachment_text">Untuk menambahkan lampiran Anda harus mengizinkan
akses menuju penyimpanan.</string>
<string name="push_notifications_alert_title">Notifikasi Pemberitahuan Push</string>
<string name="push_notifications_alert_subtitle">Pemberitahuan Push untuk ProtonMail tidak dapat berfungsi tanpa memperbarui layanan Google Play.</string>

View File

@ -735,7 +735,7 @@
Íhugaðu að losa eitthvað pláss eða að kaupa meiri geymslurýmd áður en hún klárast.</string>
<!-- endregion -->
<string name="need_permissions_title">Aðgangsheimildir</string>
<string name="need_storage_permissions_text">Til að geta bætt við viðhengjum þarftu að leyfa aðgang að gagnageymslu.</string>
<string name="need_storage_permissions_add_attachment_text">Til að geta bætt við viðhengjum þarftu að leyfa aðgang að gagnageymslu.</string>
<string name="push_notifications_alert_title">Viðvörun vegna ýti-tilkynninga</string>
<string name="push_notifications_alert_subtitle">Ýti-tilkynningar virka ekki nema með uppfærðum séreignahugbúnaði Google Play þjónustu.</string>
<string name="app_locked">Forrit læst</string>

View File

@ -736,7 +736,7 @@
Prova a liberare dello spazio o acquista più spazio di archiviazione prima di esaurirlo tutto.</string>
<!-- endregion -->
<string name="need_permissions_title">Permessi</string>
<string name="need_storage_permissions_text">Per aggiungere allegati devi consentire
<string name="need_storage_permissions_add_attachment_text">Per aggiungere allegati devi consentire
l\'accesso all\'archiviazione.</string>
<string name="push_notifications_alert_title">Avviso notifiche push</string>
<string name="push_notifications_alert_subtitle">Le notifiche push per ProtonMail non funzionano senza aggiornamenti di Google Play services.</string>

View File

@ -717,7 +717,7 @@
<string name="storage_limit_approaching_text">ストレージ容量の90%に達しました。容量を空けるか、ストレージの追加購入を検討してください。</string>
<!-- endregion -->
<string name="need_permissions_title">アクセス許可</string>
<string name="need_storage_permissions_text">添付ファイルを追加するためには、ストレージへのアクセスを許可する必要があります。</string>
<string name="need_storage_permissions_add_attachment_text">添付ファイルを追加するためには、ストレージへのアクセスを許可する必要があります。</string>
<string name="push_notifications_alert_title">プッシュ通知警告</string>
<string name="push_notifications_alert_subtitle">ProtonMailのプッシュ通知は、Google Playサービスを更新しないと機能しません。</string>
<string name="app_locked">アプリはロックされています。</string>

View File

@ -736,7 +736,7 @@
Xemmem ad tserrḥeḍ i kra n tallunt neɣ ad txellṣeḍ ugar n uḥraz send ad txaṣeḍ akettur.</string>
<!-- endregion -->
<string name="need_permissions_title">Isurag</string>
<string name="need_storage_permissions_text">Akken ad ternuḍ ifuyla yeddan, ilaq ad tessirgeḍ
<string name="need_storage_permissions_add_attachment_text">Akken ad ternuḍ ifuyla yeddan, ilaq ad tessirgeḍ
akeccum ar tkatut n uḥraz.</string>
<string name="push_notifications_alert_title">Ilɣa Push</string>
<string name="push_notifications_alert_subtitle">Ilɣa Push i ProtonMail ur teddun ara wer alqem n imeẓla Google Play.</string>

View File

@ -736,7 +736,7 @@
Overweeg om wat ruimte vrij te maken of schaf extra opslagruimte aan voordat u ruimte tekortkomt.</string>
<!-- endregion -->
<string name="need_permissions_title">Rechten</string>
<string name="need_storage_permissions_text">Om bijlagen toe te voegen moet u
<string name="need_storage_permissions_add_attachment_text">Om bijlagen toe te voegen moet u
toegang tot opslag toestaan.</string>
<string name="push_notifications_alert_title">Pushmelding</string>
<string name="push_notifications_alert_subtitle">Pushmeldingen voor ProtonMail werken niet zonder bijgewerkte Google Play-diensten.</string>

View File

@ -760,7 +760,7 @@
Rozważ zwolnienie części miejsca lub zakup dodatkowej przestrzeni dyskowej, zanim skończy Ci się miejsce.</string>
<!-- endregion -->
<string name="need_permissions_title">Uprawnienia</string>
<string name="need_storage_permissions_text">Aby dodać załączniki, musisz zezwolić
<string name="need_storage_permissions_add_attachment_text">Aby dodać załączniki, musisz zezwolić
na dostęp do pamięci wewnętrznej.</string>
<string name="push_notifications_alert_title">Alert o powiadomieniach</string>
<string name="push_notifications_alert_subtitle">Powiadomienia poczty ProtonMail nie działają bez zaktualizowanych usług Google Play.</string>

View File

@ -736,7 +736,7 @@
Considere liberar algum espaço ou comprar mais armazenamento antes de ficar sem capacidade.</string>
<!-- endregion -->
<string name="need_permissions_title">Permissões</string>
<string name="need_storage_permissions_text">Para adicionar anexos, você precisa permitir o
<string name="need_storage_permissions_add_attachment_text">Para adicionar anexos, você precisa permitir o
acesso ao armazenamento.</string>
<string name="push_notifications_alert_title">Alerta de notificações push</string>
<string name="push_notifications_alert_subtitle">As notificações via Push do ProtonMail não funcionam sem o Google Play Services atualizado.</string>

View File

@ -735,7 +735,7 @@
Considere libertar um pouco de espaço ou adquira mais armazenamento antes de atingir o limite.</string>
<!-- endregion -->
<string name="need_permissions_title">Permissões</string>
<string name="need_storage_permissions_text">Para adicionar anexos tem de permitir
<string name="need_storage_permissions_add_attachment_text">Para adicionar anexos tem de permitir
acesso ao armazenamento.</string>
<string name="push_notifications_alert_title">Alerta de notificações forçadas</string>
<string name="push_notifications_alert_subtitle">As notificações forçadas do ProtonMail não funcionam sem serviços actualizados do Google Play.</string>

View File

@ -748,7 +748,7 @@
Vă sfătuim să ștergeți din mesaje sau să mai achiziționați spațiu de stocare înainte de a-l epuiza.</string>
<!-- endregion -->
<string name="need_permissions_title">Permisiuni</string>
<string name="need_storage_permissions_text">Pentru a adăuga atașamente trebuie să permiteți
<string name="need_storage_permissions_add_attachment_text">Pentru a adăuga atașamente trebuie să permiteți
accesul la spațiul de stocare al telefonului.</string>
<string name="push_notifications_alert_title">Notificări instante</string>
<string name="push_notifications_alert_subtitle">Notificările instante pentru ProtonMail nu funcționează fără ultima actualizare a serviciilor Google Play.</string>

View File

@ -762,7 +762,7 @@
Подумайте насчёт освобождения некоторого объёма или покупки большего места для хранения до того, как ваш объём закончится.</string>
<!-- endregion -->
<string name="need_permissions_title">Разрешения</string>
<string name="need_storage_permissions_text">Чтобы добавлять вложения, вам нужно разрешить
<string name="need_storage_permissions_add_attachment_text">Чтобы добавлять вложения, вам нужно разрешить
доступ к хранилищу.</string>
<string name="push_notifications_alert_title">Предупреждение о push-уведомлениях</string>
<string name="push_notifications_alert_subtitle">Push-уведомления для ProtonMail не работают без обновлённых сервисов Google Play.</string>

View File

@ -732,7 +732,7 @@
<string name="storage_limit_approaching_text">Du har uppnåt 90 % av ditt lagringsutrymme. Du bör överväga att frigöra plats eller köpa mer lagringsutrymme innan den tar slut.</string>
<!-- endregion -->
<string name="need_permissions_title">Behörigheter</string>
<string name="need_storage_permissions_text">För att lägga till bilagor måste du tillåta
<string name="need_storage_permissions_add_attachment_text">För att lägga till bilagor måste du tillåta
åtkomst till lagring.</string>
<string name="push_notifications_alert_title">Push-notifieringar</string>
<string name="push_notifications_alert_subtitle">Push-meddelanden för ProtonMail fungerar inte utan uppdaterade Google Play-tjänster.</string>

View File

@ -732,7 +732,7 @@
Kapasiteniz tükenmeden önce bir miktar alan boşaltmayı veya daha fazla depolama alanı satın almayı düşünün.</string>
<!-- endregion -->
<string name="need_permissions_title">İzinler</string>
<string name="need_storage_permissions_text">Ekleri eklemek için depolamaya erişime izin vermeniz gerekir.</string>
<string name="need_storage_permissions_add_attachment_text">Ekleri eklemek için depolamaya erişime izin vermeniz gerekir.</string>
<string name="push_notifications_alert_title">Anlık bildirim uyarıları</string>
<string name="push_notifications_alert_subtitle">ProtonMail anlık bildirimleri, güncellenmiş Google Play hizmetleri olmadan çalışmaz.</string>
<string name="app_locked">Uygulama kilitlendi</string>

View File

@ -716,7 +716,7 @@
<string name="storage_limit_approaching_text">您已使用了 90% 的存储空间。请考虑清理一些空间或购买更大存储量,以防空间耗尽。</string>
<!-- endregion -->
<string name="need_permissions_title">权限</string>
<string name="need_storage_permissions_text">若要添加附件,您需要允许程序读取设备存储。</string>
<string name="need_storage_permissions_add_attachment_text">若要添加附件,您需要允许程序读取设备存储。</string>
<string name="push_notifications_alert_title">推送通知提示</string>
<string name="push_notifications_alert_subtitle">没有新版 Google Play 服务支持ProtonMail 无法推送通知。</string>
<string name="app_locked">程序已锁定</string>

View File

@ -721,7 +721,7 @@
在您的空間耗盡之前,考慮釋放一些空間或購買更多的儲存空間。</string>
<!-- endregion -->
<string name="need_permissions_title">權限</string>
<string name="need_storage_permissions_text">為了加入附件,您需要允許
<string name="need_storage_permissions_add_attachment_text">為了加入附件,您需要允許
存取儲存空間。</string>
<string name="push_notifications_alert_title">推送通知提醒</string>
<string name="push_notifications_alert_subtitle">如果沒有更新過 Google Play 服務ProtonMail 的推送通知將無法正常運作。</string>

View File

@ -799,8 +799,11 @@
<!-- endregion -->
<string name="need_permissions_title">Permissions</string>
<string name="need_storage_permissions_text">In order to add attachments you need to allow
<string name="need_storage_permissions_add_attachment_text">In order to add attachments you need to allow
access to storage.</string>
<string name="need_storage_permissions_download_attachment_text">In order to download attachments you need to allow
access to storage.</string>
<string name="need_contacts_permissions_text">In order to import contacts you need to allow access to contacts.</string>
<string name="push_notifications_alert_title">Push notifications alert</string>
<string name="push_notifications_alert_subtitle">Push notifications for ProtonMail do not work without updated Google Play services.</string>
<string name="app_locked">App locked</string>

View File

@ -1073,6 +1073,16 @@ class MessageDetailsViewModelTest : ArchTest, CoroutinesTest {
}
}
@Test
fun whenStoragePermissionDeniedShouldEmitNewDialogTriggerEvent() {
val dialogTriggerObserver = viewModel.showPermissionMissingDialog.testObserver()
viewModel.storagePermissionDenied()
val numberOfReceivedEvents = dialogTriggerObserver.observedValues.size
assertEquals(expected = 1, actual = numberOfReceivedEvents)
}
private fun buildConversation(conversationId: String): Conversation {
val messageId = "messageId4"
val secondMessageId = "messageId5"

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2020 Proton Technologies AG
*
* This file is part of ProtonMail.
*
* ProtonMail is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ProtonMail is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProtonMail. If not, see https://www.gnu.org/licenses/.
*/
package ch.protonmail.android.contacts.list.viewModel
import androidx.lifecycle.MutableLiveData
import androidx.work.WorkManager
import ch.protonmail.android.contacts.repositories.andorid.baseInfo.AndroidContactsRepository
import ch.protonmail.android.contacts.repositories.andorid.details.AndroidContactDetailsRepository
import ch.protonmail.android.data.local.ContactDao
import ch.protonmail.android.testAndroid.lifecycle.testObserver
import ch.protonmail.android.utils.Event
import ch.protonmail.android.views.models.LocalContact
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import me.proton.core.test.android.ArchTest
import org.junit.Test
import kotlin.test.assertEquals
class ContactsListViewModelTest : ArchTest {
private val contactDaoMock: ContactDao = mockk()
private val workManagerMock: WorkManager = mockk()
private val androidContactsRepositoryMock: AndroidContactsRepository = mockk {
every { androidContacts } returns MutableLiveData(emptyList())
every { setContactsPermission(any()) } returns Unit
}
private val androidContactsDetailsRepositoryMock: AndroidContactDetailsRepository = mockk {
every { contactDetails } returns MutableLiveData(Event(TestLocalContact.instance))
}
private val contactsListMapperMock: ContactsListMapper = mockk()
private val viewModel = ContactsListViewModel(
contactDaoMock,
workManagerMock,
androidContactsRepositoryMock,
androidContactsDetailsRepositoryMock,
contactsListMapperMock
)
@Test
fun whenHasPermissionsShouldUpdateRepositoryAndNotShowPermissionDialog() {
val dialogTriggerObserver = viewModel.showPermissionMissingDialog.testObserver()
viewModel.setHasContactsPermission(true)
verify { androidContactsRepositoryMock.setContactsPermission(true) }
val numberOfReceivedDialogEvents = dialogTriggerObserver.observedValues.size
assertEquals(expected = 0, actual = numberOfReceivedDialogEvents)
}
@Test
fun whenDoesNotHavePermissionsShouldUpdateRepositoryAndShowPermissionDialog() {
val dialogTriggerObserver = viewModel.showPermissionMissingDialog.testObserver()
viewModel.setHasContactsPermission(false)
verify { androidContactsRepositoryMock.setContactsPermission(false) }
val numberOfReceivedDialogEvents = dialogTriggerObserver.observedValues.size
assertEquals(expected = 1, actual = numberOfReceivedDialogEvents)
}
}
private object TestLocalContact {
const val NAME = "Name"
val instance = LocalContact(
name = NAME,
emails = emptyList(),
phones = emptyList(),
addresses = emptyList(),
groups = emptyList()
)
}