From 74cc4ebe2149d71b7383f7a60ed18b4f0b223f39 Mon Sep 17 00:00:00 2001 From: gavine99 Date: Wed, 4 Sep 2024 18:58:26 +1000 Subject: [PATCH] changes to allow nextcloud notifications via unified push in generic build. includes new setting item that allows push notification reset/re-register. depends on related changes in nextcloud app, nextcloud notifications app to enable unified push notifications --- app/build.gradle | 3 + app/src/generic/AndroidManifest.xml | 21 ++++ .../com/nextcloud/unifiedpush/UnifiedPush.kt | 102 ++++++++++++++++++ .../com/owncloud/android/utils/PushUtils.java | 28 ++++- .../firebase/NCFirebaseMessagingService.java | 6 +- .../com/owncloud/android/utils/PushUtils.java | 12 ++- .../com/owncloud/android/utils/PushUtils.java | 10 +- .../client/jobs/AccountRemovalWork.kt | 2 +- .../client/jobs/BackgroundJobManager.kt | 2 +- .../client/jobs/BackgroundJobManagerImpl.kt | 3 +- .../nextcloud/client/jobs/NotificationWork.kt | 92 ++++++++++------ .../android/ui/activity/DrawerActivity.java | 2 + .../android/ui/activity/FileActivity.java | 3 - .../ui/activity/FileDisplayActivity.java | 5 +- .../ui/activity/NotificationsActivity.kt | 26 +++-- .../android/ui/activity/SettingsActivity.java | 29 +++++ .../android/ui/activity/UserInfoActivity.java | 5 +- app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-b+en+001/strings.xml | 1 - app/src/main/res/values-bg-rBG/strings.xml | 1 - app/src/main/res/values-br/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-cs-rCZ/strings.xml | 1 - app/src/main/res/values-da/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-eo/strings.xml | 1 - app/src/main/res/values-es-rAR/strings.xml | 1 - app/src/main/res/values-es-rCL/strings.xml | 1 - app/src/main/res/values-es-rCO/strings.xml | 1 - app/src/main/res/values-es-rCR/strings.xml | 1 - app/src/main/res/values-es-rDO/strings.xml | 1 - app/src/main/res/values-es-rEC/strings.xml | 1 - app/src/main/res/values-es-rGT/strings.xml | 1 - app/src/main/res/values-es-rMX/strings.xml | 1 - app/src/main/res/values-es-rSV/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-eu/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fi-rFI/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-ga/strings.xml | 1 - app/src/main/res/values-gd/strings.xml | 1 - app/src/main/res/values-gl/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-hu-rHU/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-is/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-iw/strings.xml | 1 - app/src/main/res/values-ja-rJP/strings.xml | 1 - app/src/main/res/values-ka/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-lo/strings.xml | 1 - app/src/main/res/values-lt-rLT/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-nb-rNO/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sc/strings.xml | 1 - app/src/main/res/values-sk-rSK/strings.xml | 1 - app/src/main/res/values-sl/strings.xml | 1 - app/src/main/res/values-sq/strings.xml | 1 - app/src/main/res/values-sr-rSP/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 3 +- app/src/main/res/values-tk/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rHK/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/strings.xml | 9 +- app/src/main/res/xml/preferences.xml | 4 + .../com/owncloud/android/utils/PushUtils.java | 12 ++- .../com/owncloud/android/utils/PushUtils.java | 13 ++- 81 files changed, 318 insertions(+), 133 deletions(-) create mode 100644 app/src/generic/AndroidManifest.xml create mode 100644 app/src/generic/java/com/nextcloud/unifiedpush/UnifiedPush.kt diff --git a/app/build.gradle b/app/build.gradle index b87a8265e887..5480af3adae3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -316,6 +316,9 @@ dependencies { implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido:$fidoVersion" implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido2:$fidoVersion" + // unified push library for generic flavour + genericImplementation 'org.codeberg.UnifiedPush:android-connector:2.4.0' + // document scanner not available on FDroid (generic) due to OpenCV binaries gplayImplementation project(':appscan') huaweiImplementation project(':appscan') diff --git a/app/src/generic/AndroidManifest.xml b/app/src/generic/AndroidManifest.xml new file mode 100644 index 000000000000..b41aab7bec26 --- /dev/null +++ b/app/src/generic/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/app/src/generic/java/com/nextcloud/unifiedpush/UnifiedPush.kt b/app/src/generic/java/com/nextcloud/unifiedpush/UnifiedPush.kt new file mode 100644 index 000000000000..df9926796e4e --- /dev/null +++ b/app/src/generic/java/com/nextcloud/unifiedpush/UnifiedPush.kt @@ -0,0 +1,102 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2024 Your Name + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.nextcloud.unifiedpush + +import android.content.Context +import android.content.res.Resources +import android.util.TypedValue +import androidx.appcompat.view.ContextThemeWrapper +import androidx.work.WorkManager +import com.google.gson.Gson +import com.nextcloud.client.core.ClockImpl +import com.nextcloud.client.jobs.BackgroundJobManager +import com.nextcloud.client.jobs.BackgroundJobManagerImpl +import com.nextcloud.client.jobs.NotificationWork +import com.nextcloud.client.preferences.AppPreferencesImpl +import com.owncloud.android.MainApp +import com.owncloud.android.R +import com.owncloud.android.datamodel.ArbitraryDataProviderImpl +import com.owncloud.android.datamodel.PushConfigurationState +import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.ui.activity.DrawerActivity +import com.owncloud.android.utils.PushUtils +import org.unifiedpush.android.connector.ChooseDialog +import org.unifiedpush.android.connector.MessagingReceiver +import org.unifiedpush.android.connector.NoDistributorDialog +import org.unifiedpush.android.connector.RegistrationDialogContent +import org.unifiedpush.android.connector.UnifiedPush + +class UnifiedPush : MessagingReceiver() { + private val TAG: String? = UnifiedPush::class.java.simpleName + + companion object { + fun registerForPushMessaging(activity: DrawerActivity, accountName: String) { + if ((activity === null) || (activity.mHandler === null) || (activity.isFinishing === true)) + return + + // if a distributor is registered and available, re-register to ensure in sync + if (UnifiedPush.getSavedDistributor(activity) !== null) { + UnifiedPush.registerApp(activity, accountName) + } else { + // else, previous distributor has gone away (uninstalled maybe) or there never was one, + // register now if possible + activity.mHandler.post { + UnifiedPush.registerAppWithDialog( + ContextThemeWrapper(activity, R.style.Theme_ownCloud_Dialog), + accountName, + RegistrationDialogContent( + NoDistributorDialog( + message = activity.getString(R.string.unified_push_no_distributors_dialog_text), + title = activity.getString(R.string.unified_push_choose_distributor_title) + ), + ChooseDialog(activity.getString(R.string.unified_push_choose_distributor_title)) + ) + ) + } + } + } + + fun unregisterForPushMessaging(accountName: String) { + val context = MainApp.getAppContext() + + // unregister with distributor + UnifiedPush.unregisterApp(context, accountName) + + // delete locally saved endpoint value + ArbitraryDataProviderImpl(context).deleteKeyForAccount(accountName, PushUtils.KEY_PUSH) + } + } + + override fun onMessage(context: Context, message: ByteArray, instance: String) { + // called when a new message is received. The message contains the full POST body of the push message + Log_OC.d(TAG, "unified push message received") + + val workManager = WorkManager.getInstance(context) + val preferences = AppPreferencesImpl.fromContext(context) + val backgroundJobManager: BackgroundJobManager = BackgroundJobManagerImpl(workManager, ClockImpl(), preferences) + backgroundJobManager.startNotificationJob(message.toString(Charsets.UTF_8), instance, NotificationWork.BACKEND_TYPE_UNIFIED_PUSH) + } + + override fun onNewEndpoint(context: Context, endpoint: String, instance: String) { + // called when a new endpoint is to be used for sending push messages + val newAccountPushData = PushConfigurationState() + newAccountPushData.setPushToken(endpoint) + ArbitraryDataProviderImpl(context).storeOrUpdateKeyValue(instance, PushUtils.KEY_PUSH, Gson().toJson(newAccountPushData)) + } + + override fun onRegistrationFailed(context: Context, instance: String) { + // called when the registration is not possible, eg. no network + // just dump the registration to make sure it's cleaned up. re-register will be auto-reattempted + unregisterForPushMessaging(instance) + } + + override fun onUnregistered(context: Context, instance: String) { + // called when this application is remotely unregistered from receiving push messages + unregisterForPushMessaging(instance) + } +} \ No newline at end of file diff --git a/app/src/generic/java/com/owncloud/android/utils/PushUtils.java b/app/src/generic/java/com/owncloud/android/utils/PushUtils.java index 139377f210d9..081277ae4842 100644 --- a/app/src/generic/java/com/owncloud/android/utils/PushUtils.java +++ b/app/src/generic/java/com/owncloud/android/utils/PushUtils.java @@ -9,10 +9,17 @@ import android.content.Context; +import android.accounts.Account; + +import com.google.gson.Gson; import com.nextcloud.client.account.UserAccountManager; import com.nextcloud.client.preferences.AppPreferencesImpl; import com.owncloud.android.MainApp; +import com.owncloud.android.datamodel.ArbitraryDataProviderImpl; +import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.datamodel.SignatureVerification; +import com.nextcloud.unifiedpush.UnifiedPush; +import com.owncloud.android.ui.activity.DrawerActivity; import java.security.Key; @@ -22,8 +29,25 @@ public final class PushUtils { private PushUtils() { } - public static void pushRegistrationToServer(final UserAccountManager accountManager, final String pushToken) { - // do nothing + public static void updateRegistrationsWithServer(final DrawerActivity activity, + final UserAccountManager accountManager, + final String pushToken) { + for (Account account : accountManager.getAccounts()) { + PushConfigurationState accountPushData = new Gson().fromJson( + new ArbitraryDataProviderImpl(MainApp.getAppContext()).getValue(account.name, KEY_PUSH), + PushConfigurationState.class + ); + if ((accountPushData == null) || (accountPushData.isShouldBeDeleted() == false)) { + UnifiedPush.Companion.registerForPushMessaging(activity, account.name); + } else { + UnifiedPush.Companion.unregisterForPushMessaging(account.name); + } + } + } + + public static void updateRegistrationsWithServerNoUI(final UserAccountManager accountManager, + final String pushToken) { + updateRegistrationsWithServer(null, accountManager, pushToken); } public static void reinitKeys(UserAccountManager accountManager) { diff --git a/app/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseMessagingService.java b/app/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseMessagingService.java index d1bc2712b762..fab5c91cc09b 100644 --- a/app/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseMessagingService.java +++ b/app/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseMessagingService.java @@ -42,7 +42,9 @@ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) { final String subject = data.get(NotificationWork.KEY_NOTIFICATION_SUBJECT); final String signature = data.get(NotificationWork.KEY_NOTIFICATION_SIGNATURE); if (subject != null && signature != null) { - backgroundJobManager.startNotificationJob(subject, signature); + backgroundJobManager.startNotificationJob(subject, + signature, + NotificationWork.BACKEND_TYPE_FIREBASE_CLOUD_MESSAGING); } } @@ -52,7 +54,7 @@ public void onNewToken(@NonNull String newToken) { if (!TextUtils.isEmpty(getResources().getString(R.string.push_server_url))) { preferences.setPushToken(newToken); - PushUtils.pushRegistrationToServer(accountManager, preferences.getPushToken()); + PushUtils.updateRegistrationsWithServer(null, accountManager, preferences.getPushToken()); } } } diff --git a/app/src/gplay/java/com/owncloud/android/utils/PushUtils.java b/app/src/gplay/java/com/owncloud/android/utils/PushUtils.java index 816612e6902a..63e8d033b884 100644 --- a/app/src/gplay/java/com/owncloud/android/utils/PushUtils.java +++ b/app/src/gplay/java/com/owncloud/android/utils/PushUtils.java @@ -35,6 +35,7 @@ import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForNotificationsOperation; import com.owncloud.android.lib.resources.notifications.UnregisterAccountDeviceForProxyOperation; import com.owncloud.android.lib.resources.notifications.models.PushResponse; +import com.owncloud.android.ui.activity.DrawerActivity; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.io.FileUtils; @@ -164,7 +165,9 @@ private static void deleteRegistrationForAccount(Account account) { } } - public static void pushRegistrationToServer(final UserAccountManager accountManager, final String token) { + public static void updateRegistrationsWithServer(final DrawerActivity activity, + final UserAccountManager accountManager, + final String token) { arbitraryDataProvider = new ArbitraryDataProviderImpl(MainApp.getAppContext()); if (!TextUtils.isEmpty(MainApp.getAppContext().getResources().getString(R.string.push_server_url)) && @@ -246,6 +249,11 @@ public static void pushRegistrationToServer(final UserAccountManager accountMana } } + public static void updateRegistrationsWithServerNoUI(final UserAccountManager accountManager, + final String pushToken) { + updateRegistrationsWithServer(null, accountManager, pushToken); + } + public static Key readKeyFromFile(boolean readPublicKey) { String keyPath = MainApp.getAppContext().getFilesDir().getAbsolutePath() + File.separator + MainApp.getDataFolder() + File.separator + KEYPAIR_FOLDER; @@ -343,7 +351,7 @@ public static void reinitKeys(final UserAccountManager accountManager) { AppPreferences preferences = AppPreferencesImpl.fromContext(context); String pushToken = preferences.getPushToken(); - pushRegistrationToServer(accountManager, pushToken); + updateRegistrationsWithServer(null, accountManager, pushToken); preferences.setKeysReInitEnabled(); } diff --git a/app/src/huawei/java/com/owncloud/android/utils/PushUtils.java b/app/src/huawei/java/com/owncloud/android/utils/PushUtils.java index bf1949a33a72..41a0b719065c 100644 --- a/app/src/huawei/java/com/owncloud/android/utils/PushUtils.java +++ b/app/src/huawei/java/com/owncloud/android/utils/PushUtils.java @@ -13,6 +13,7 @@ import com.nextcloud.client.preferences.AppPreferencesImpl; import com.owncloud.android.MainApp; import com.owncloud.android.datamodel.SignatureVerification; +import com.owncloud.android.ui.activity.DrawerActivity; import java.security.Key; @@ -22,7 +23,14 @@ public final class PushUtils { private PushUtils() { } - public static void pushRegistrationToServer(final UserAccountManager accountManager, final String pushToken) { + public static void updateRegistrationsWithServer(final DrawerActivity activity, + final UserAccountManager accountManager, + final String pushToken) { + // do nothing + } + + public static void updateRegistrationsWithServerNoUI(final UserAccountManager accountManager, + final String pushToken) { // do nothing } diff --git a/app/src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt b/app/src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt index ebcb5f7dd4d3..7cc8672ffae2 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt @@ -166,7 +166,7 @@ class AccountRemovalWork( PushUtils.KEY_PUSH, gson.toJson(pushArbitraryData) ) - PushUtils.pushRegistrationToServer(userAccountManager, pushArbitraryData.getPushToken()) + PushUtils.updateRegistrationsWithServerNoUI(userAccountManager, pushArbitraryData.getPushToken()) } } diff --git a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt index d460fd623f7c..54612492f792 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManager.kt @@ -135,7 +135,7 @@ interface BackgroundJobManager { fun scheduleMediaFoldersDetectionJob() fun startMediaFoldersDetectionJob() - fun startNotificationJob(subject: String, signature: String) + fun startNotificationJob(subject: String, signature: String, backendType: Int) fun startAccountRemovalJob(accountName: String, remoteWipe: Boolean) fun startFilesUploadJob(user: User) fun getFileUploads(user: User): LiveData> diff --git a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt index af345d832bfd..ec2603a487d0 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt @@ -489,10 +489,11 @@ internal class BackgroundJobManagerImpl( ) } - override fun startNotificationJob(subject: String, signature: String) { + override fun startNotificationJob(subject: String, signature: String, backendType: Int) { val data = Data.Builder() .putString(NotificationWork.KEY_NOTIFICATION_SUBJECT, subject) .putString(NotificationWork.KEY_NOTIFICATION_SIGNATURE, signature) + .putInt(NotificationWork.KEY_NOTIFICATION_TYPE, backendType) .build() val request = oneTimeRequestBuilder(NotificationWork::class, JOB_NOTIFICATION) diff --git a/app/src/main/java/com/nextcloud/client/jobs/NotificationWork.kt b/app/src/main/java/com/nextcloud/client/jobs/NotificationWork.kt index e6f37a16e2cd..e748f7b05a26 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/NotificationWork.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/NotificationWork.kt @@ -70,53 +70,75 @@ class NotificationWork constructor( const val KEY_NOTIFICATION_ACCOUNT = "KEY_NOTIFICATION_ACCOUNT" const val KEY_NOTIFICATION_SUBJECT = "subject" const val KEY_NOTIFICATION_SIGNATURE = "signature" + const val KEY_NOTIFICATION_TYPE = "type" private const val KEY_NOTIFICATION_ACTION_LINK = "KEY_NOTIFICATION_ACTION_LINK" private const val KEY_NOTIFICATION_ACTION_TYPE = "KEY_NOTIFICATION_ACTION_TYPE" private const val PUSH_NOTIFICATION_ID = "PUSH_NOTIFICATION_ID" private const val NUMERIC_NOTIFICATION_ID = "NUMERIC_NOTIFICATION_ID" + const val BACKEND_TYPE_FIREBASE_CLOUD_MESSAGING = 1 + const val BACKEND_TYPE_UNIFIED_PUSH = 2 } @Suppress("TooGenericExceptionCaught", "NestedBlockDepth", "ComplexMethod", "LongMethod") // legacy code override fun doWork(): Result { - val subject = inputData.getString(KEY_NOTIFICATION_SUBJECT) ?: "" - val signature = inputData.getString(KEY_NOTIFICATION_SIGNATURE) ?: "" - if (!TextUtils.isEmpty(subject) && !TextUtils.isEmpty(signature)) { - try { - val base64DecodedSubject = Base64.decode(subject, Base64.DEFAULT) - val base64DecodedSignature = Base64.decode(signature, Base64.DEFAULT) - val privateKey = PushUtils.readKeyFromFile(false) as PrivateKey - try { - val signatureVerification = PushUtils.verifySignature( - context, - accountManager, - base64DecodedSignature, - base64DecodedSubject - ) - if (signatureVerification != null && signatureVerification.signatureValid) { - val cipher = Cipher.getInstance("RSA/None/PKCS1Padding") - cipher.init(Cipher.DECRYPT_MODE, privateKey) - val decryptedSubject = cipher.doFinal(base64DecodedSubject) - val gson = Gson() - val decryptedPushMessage = gson.fromJson( - String(decryptedSubject), - DecryptedPushMessage::class.java - ) - if (decryptedPushMessage.delete) { - notificationManager.cancel(decryptedPushMessage.nid) - } else if (decryptedPushMessage.deleteAll) { - notificationManager.cancelAll() - } else { - val user = accountManager.getUser(signatureVerification.account?.name) - .orElseThrow { RuntimeException() } - fetchCompleteNotification(user, decryptedPushMessage) + try { + val messageData = inputData.getString(KEY_NOTIFICATION_SUBJECT) ?: "" + val signatureOrUser = inputData.getString(KEY_NOTIFICATION_SIGNATURE) ?: "" + + if (!TextUtils.isEmpty(messageData) && !TextUtils.isEmpty(signatureOrUser)) { + val decryptedMessageData: StringBuilder = StringBuilder() + val accountName: StringBuilder = StringBuilder() + + val type = inputData.getInt(KEY_NOTIFICATION_TYPE, -1) + + // if using firebase cloud messaging (via nextcloud proxy) for push notifications... + when (type) { + BACKEND_TYPE_FIREBASE_CLOUD_MESSAGING -> { + val base64DecodedSubject = Base64.decode(messageData, Base64.DEFAULT) + val base64DecodedSignature = Base64.decode(signatureOrUser, Base64.DEFAULT) + val privateKey = PushUtils.readKeyFromFile(false) as PrivateKey + try { + val signatureVerification = PushUtils.verifySignature( + context, + accountManager, + base64DecodedSignature, + base64DecodedSubject + ) + if (signatureVerification != null && signatureVerification.signatureValid) { + accountName.append(signatureVerification.account?.name) + val cipher = Cipher.getInstance("RSA/None/PKCS1Padding") + cipher.init(Cipher.DECRYPT_MODE, privateKey) + decryptedMessageData.append(String(cipher.doFinal(base64DecodedSubject))) + } + } catch (e1: GeneralSecurityException) { + Log_OC.d(TAG, "Error decrypting message ${e1.javaClass.name} ${e1.localizedMessage}") + return Result.success() } + // else, if using unified push messaging... + } + BACKEND_TYPE_UNIFIED_PUSH -> { + decryptedMessageData.append(messageData) + accountName.append(signatureOrUser) } - } catch (e1: GeneralSecurityException) { - Log_OC.d(TAG, "Error decrypting message ${e1.javaClass.name} ${e1.localizedMessage}") + else -> return Result.success() + } + + // transform string message to object + val decryptedPushMessage = + Gson().fromJson(decryptedMessageData.toString(), DecryptedPushMessage::class.java) + + if (decryptedPushMessage.delete) { + notificationManager.cancel(decryptedPushMessage.nid) + } else if (decryptedPushMessage.deleteAll) { + notificationManager.cancelAll() + } else { + val user = accountManager.getUser(accountName) + .orElseThrow { RuntimeException() } + fetchCompleteNotification(user, decryptedPushMessage) } - } catch (exception: Exception) { - Log_OC.d(TAG, "Something went very wrong" + exception.localizedMessage) } + } catch (exception: Exception) { + Log_OC.d(TAG, "Something went very wrong" + exception.localizedMessage) } return Result.success() } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 42991b80590e..79ae53b9706a 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -200,6 +200,8 @@ public abstract class DrawerActivity extends ToolbarActivity @Inject ClientFactory clientFactory; + public Handler mHandler; + /** * Initializes the drawer, its content and highlights the menu item with the given id. This method needs to be * called after the content view has been set. diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index 58bf035eec35..5c8746a43f5d 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -144,9 +144,6 @@ public abstract class FileActivity extends DrawerActivity /** Flag to signal if the activity is launched by a notification */ private boolean mFromNotification; - /** Messages handler associated to the main thread and the life cycle of the activity */ - private Handler mHandler; - private FileOperationsHelper mFileOperationsHelper; private ServiceConnection mOperationsServiceConnection; diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 3f3e9bad2877..04d779c4ce6d 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -35,7 +35,6 @@ import android.os.IBinder; import android.os.Looper; import android.os.Parcelable; -import android.provider.Settings; import android.text.TextUtils; import android.view.Menu; import android.view.MenuInflater; @@ -98,7 +97,6 @@ import com.owncloud.android.ui.asynctasks.FetchRemoteFileTask; import com.owncloud.android.ui.asynctasks.GetRemoteFileTask; import com.owncloud.android.ui.dialog.SendShareDialog; -import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment; import com.owncloud.android.ui.dialog.SortingOrderDialogFragment; import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment; import com.owncloud.android.ui.events.SearchEvent; @@ -158,7 +156,6 @@ import kotlin.Unit; import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; -import static com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment.SETUP_ENCRYPTION_DIALOG_TAG; import static com.owncloud.android.utils.PermissionUtil.PERMISSION_CHOICE_DIALOG_TAG; /** @@ -2275,7 +2272,7 @@ public void onMessageEvent(TokenPushEvent event) { if (!preferences.isKeysReInitEnabled()) { PushUtils.reinitKeys(getUserAccountManager()); } else { - PushUtils.pushRegistrationToServer(getUserAccountManager(), preferences.getPushToken()); + PushUtils.updateRegistrationsWithServer(this, getUserAccountManager(), preferences.getPushToken()); } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.kt index 671efe8492b0..196a6dc91f31 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.kt @@ -125,19 +125,23 @@ class NotificationsActivity : DrawerActivity(), NotificationsContract.View { } } else { val pushUrl = resources.getString(R.string.push_server_url) + val arbitraryDataProvider: ArbitraryDataProvider = ArbitraryDataProviderImpl(this) + val accountName: String = if (optionalUser?.isPresent == true) { + optionalUser?.get()?.accountName ?: "" + } else { + "" + } + + // if using unified push... if (pushUrl.isEmpty()) { - snackbar = Snackbar.make( - binding.emptyList.emptyListView, - R.string.push_notifications_not_implemented, - Snackbar.LENGTH_INDEFINITE - ) + // if a unified push distributor is not set, show snackbar alerting user to unified push capability + if (arbitraryDataProvider.getValue(accountName, PushUtils.KEY_PUSH).isEmpty()) + snackbar = Snackbar.make( + binding.emptyList.emptyListView, + R.string.push_notifications_no_distributor, + Snackbar.LENGTH_INDEFINITE + ) } else { - val arbitraryDataProvider: ArbitraryDataProvider = ArbitraryDataProviderImpl(this) - val accountName: String = if (optionalUser?.isPresent == true) { - optionalUser?.get()?.accountName ?: "" - } else { - "" - } val usesOldLogin = arbitraryDataProvider.getBooleanValue( accountName, UserAccountManager.ACCOUNT_USES_STANDARD_PASSWORD diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java index 0dbf9ca99e92..c4eb3b36cf7d 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java @@ -15,6 +15,7 @@ */ package com.owncloud.android.ui.activity; +import android.accounts.Account; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; @@ -56,6 +57,7 @@ import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.ArbitraryDataProviderImpl; import com.owncloud.android.datamodel.ExternalLinksProvider; +import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.datastorage.DataStorageProvider; import com.owncloud.android.datastorage.StoragePoint; import com.owncloud.android.lib.common.ExternalLink; @@ -87,6 +89,9 @@ import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; +import static com.owncloud.android.utils.PushUtils.KEY_PUSH; +import com.google.gson.Gson; + /** * An Activity that allows the user to change the application's settings. * It proxies the necessary calls via {@link androidx.appcompat.app.AppCompatDelegate} to be used with AppCompat. @@ -330,6 +335,8 @@ private void setupMoreCategory() { setupBackupPreference(); + setupResetPushPreference(); + setupE2EPreference(preferenceCategoryMore); setupE2EKeysExist(preferenceCategoryMore); @@ -585,6 +592,28 @@ private void setupBackupPreference() { } } + private void setupResetPushPreference() { + Preference pResetPushNotifications = findPreference("reset_push_notifications"); + if (pResetPushNotifications == null) + return; + + pResetPushNotifications.setOnPreferenceClickListener(preference -> { + Gson gson = new Gson(); + for (Account account : accountManager.getAccounts()) { + String providerValue = arbitraryDataProvider.getValue(account.name, KEY_PUSH); + if (TextUtils.isEmpty(providerValue) == false) { + PushConfigurationState accountPushData = gson.fromJson(providerValue, PushConfigurationState.class); + accountPushData.shouldBeDeleted = true; // set this so push account will be reset + arbitraryDataProvider.storeOrUpdateKeyValue(account.name, KEY_PUSH, gson.toJson(accountPushData)); + } + } + + final Activity activity = this; + DisplayUtils.showSnackMessage(activity, R.string.prefs_reset_push_done); + return true; + }); + } + private void setupCalendarPreference(PreferenceCategory preferenceCategoryMore) { boolean calendarContactsEnabled = getResources().getBoolean(R.bool.davdroid_integration_enabled); Preference pCalendarContacts = findPreference("calendar_contacts"); diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index 8535be5187c4..3e908807b8c5 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -14,6 +14,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Bundle; +import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; @@ -84,6 +85,8 @@ public class UserInfoActivity extends DrawerActivity implements Injectable { public void onCreate(Bundle savedInstanceState) { Log_OC.v(TAG, "onCreate() start"); super.onCreate(savedInstanceState); + mHandler = new Handler(); + Bundle bundle = getIntent().getExtras(); if (bundle == null) { @@ -338,7 +341,7 @@ protected void onSaveInstanceState(@NonNull Bundle outState) { @Subscribe(threadMode = ThreadMode.BACKGROUND) public void onMessageEvent(TokenPushEvent event) { - PushUtils.pushRegistrationToServer(getUserAccountManager(), preferences.getPushToken()); + PushUtils.updateRegistrationsWithServer(this, getUserAccountManager(), preferences.getPushToken()); } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index fcac3d167513..11883948b61d 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -693,7 +693,6 @@ آسف الخصوصية اسم جديد - تم تعطيل الإشعارات الفورية بسبب التبعيات على خدمات Google Play المملوكة. لا توجد إشعارات دفع بسبب جلسة تسجيل الدخول القديمة. يرجى النظر في إعادة إضافة حسابك. إشعارات الدفع غير متوفرة حاليا. لايمكن قراءة رمز QR diff --git a/app/src/main/res/values-b+en+001/strings.xml b/app/src/main/res/values-b+en+001/strings.xml index 91f64ae67d6f..bc16db446544 100644 --- a/app/src/main/res/values-b+en+001/strings.xml +++ b/app/src/main/res/values-b+en+001/strings.xml @@ -689,7 +689,6 @@ Sorry Privacy New name - Push notifications disabled due to dependencies on proprietary Google Play services. No push notifications due to outdated login session. Please consider re-adding your account. Push notifications currently not available. QR code could not be read! diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 0e6f3c5eb544..498caea45a04 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -594,7 +594,6 @@ Извиняваме се Защита на лични данни Ново име - Известията са изключени заради зависимост от частни Google Play услуги. Няма налични известия поради изтекла потребителска сесия. Моля, обмислете да пре-добавите вашия профил. Известията не са достъпни в момента. QR кодът не може да се прочете! diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index c632f471baa8..5ebb8004b2f6 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -592,7 +592,6 @@ Digarez Prevezder Anv nevez - Kemenadennoù push disaotreet blam da sujudigezh war perc\'hentiez war servijoù Google Play Kemenadenn push ebet blam da kozhder ar mont tre evit an dalc\'h. Adlakait o c\'hont mar-plij Kemenadennoù push ebet evit poent Klaskit %1$s war o ardivink diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index a5100d54f5c9..cb067ed40213 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -586,7 +586,6 @@ Ho sento Privadesa Nou nom - Les notificacions \"push\" s\'han inhabilitat a causa de dependències de serveis propietaris de Google Play. No hi ha notificacions \"push\" a causa d\'un inici de sessió no actualitzat. Si us plau valoreu tornar a afegir el vostre compte. Les notificacions \"push\" no estan disponibles actualment. No s\'ha pogut llegir el codi QR! diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index e02e9ee93182..b82480ae2800 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -646,7 +646,6 @@ Je nám líto Soukromí Nový název - Push upozorňování je vypnuto kvůli závislostem na proprietárních službách Google Play. Žádná push upozornění kvůli zastaralé relaci přihlášení. Zvažte odebrání a opětovné přidání svého účtu. Push upozornění momentálně nejsou k dispozici. QR kód se nepodařilo načíst! diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e10a94d6ddd3..f209c02691ab 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -641,7 +641,6 @@ Enheds legitimationsoplysninger er sat op Undskyld Privatliv Nyt navn - Push notifikationer deaktiveret på grund af proprietære afhængigheder af Google Play services. Ingen push notifikationer fordi login sessionen er udløbet. Venligst overvej at genintaste din konto. Push notifikationer ikke tilgængelige nu. QR koden kunne ikke læses! diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b56f0276f43a..6ce70b3aa65f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -689,7 +689,6 @@ Entschuldigung Datenschutz Neuer Name - Push Benachrichtigungen deaktiviert aufgrund der Abhängigkeiten zu proprietären Google Play Diensten. Keine Push Benachrichtigungen aufgrund veralteter Benutzersitzung. Bitte erwägen Sie das erneute Hinzufügen Ihres Kontos. Push Benachrichtigungen aktuell nicht verfügbar. QR-Code konnte nicht gelesen werden! diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ae170e0e3519..26e1542c29e2 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -599,7 +599,6 @@ Σας ζητούμε συγγνώμη Ιδιωτικότητα Νέο όνομα - Οι ειδοποιήσεις απενεργοποιήθηκαν λόγω εξαρτήσεων στις ιδιόκτητες υπηρεσίες Google Play. Δεν υπάρχουν ειδοποιήσεις λόγω παρωχημένης συνεδρίας σύνδεσης. Παρακαλούμε επανεξετάσετε το ενδεχόμενο να ξανά προσθέσετε τον λογαριασμό σας. Οι ειδοποιήσεις push δεν είναι διαθέσιμες αυτήν τη στιγμή. Ο κώδικας QR δεν μπορεί να αναγνωσθεί diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 28d137950c9f..023e549d53c1 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -431,7 +431,6 @@ Ne eblas montri bildon Pardonu Privateco - Tujaj sciigoj estas malebligitaj pro dependeco al proprietaj „Google Play“-servoj. Neniu tuja sciigo pro malaktuala ensaluto-seanco. Bonvolu eble re-aldoni vian konton. Tujaj sciigoj momente ne disponeblas. Provu %1$s sur via aparato! diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 73016039877d..33f975b95b0e 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -675,7 +675,6 @@ Disculpe Privacidad Nuevo nombre - Notificaciones push deshabilitadas debido a dependencias en servicios propietarios de Google Play. No hay notificaciones push debido a la sesión de inicio de sesión obsoleta. Por favor considere volver a agregar su cuenta. Notificaciones push actualmente no disponibles. ¡No se pudo leer el código QR! diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 41f2c954b57e..a8c8a8300ce9 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -415,7 +415,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es-rCO/strings.xml b/app/src/main/res/values-es-rCO/strings.xml index 70fdb5007309..cf07ed72e763 100644 --- a/app/src/main/res/values-es-rCO/strings.xml +++ b/app/src/main/res/values-es-rCO/strings.xml @@ -379,7 +379,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es-rCR/strings.xml b/app/src/main/res/values-es-rCR/strings.xml index 9960620f89a1..eb5550d78722 100644 --- a/app/src/main/res/values-es-rCR/strings.xml +++ b/app/src/main/res/values-es-rCR/strings.xml @@ -356,7 +356,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es-rDO/strings.xml b/app/src/main/res/values-es-rDO/strings.xml index 21cab29b7f5c..be8368e0722c 100644 --- a/app/src/main/res/values-es-rDO/strings.xml +++ b/app/src/main/res/values-es-rDO/strings.xml @@ -371,7 +371,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es-rEC/strings.xml b/app/src/main/res/values-es-rEC/strings.xml index a7560bc9ac33..6fd5c8bae375 100644 --- a/app/src/main/res/values-es-rEC/strings.xml +++ b/app/src/main/res/values-es-rEC/strings.xml @@ -602,7 +602,6 @@ Disculpa Privacidad Nombre nuevo - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. No se pudo leer el código QR diff --git a/app/src/main/res/values-es-rGT/strings.xml b/app/src/main/res/values-es-rGT/strings.xml index 530811480688..1ecb9169fbb9 100644 --- a/app/src/main/res/values-es-rGT/strings.xml +++ b/app/src/main/res/values-es-rGT/strings.xml @@ -356,7 +356,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un incio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 3c724bf69166..b4d9d0b30d09 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -676,7 +676,6 @@ Disculpa Privacidad Nuevo nombre - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡No se pudo leer el código QR! diff --git a/app/src/main/res/values-es-rSV/strings.xml b/app/src/main/res/values-es-rSV/strings.xml index e2509033f445..8a2314b0494b 100644 --- a/app/src/main/res/values-es-rSV/strings.xml +++ b/app/src/main/res/values-es-rSV/strings.xml @@ -356,7 +356,6 @@ No es posible mostrar la imagen Disculpa Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. No hay notificaciones push debido a un inicio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. En este momento las notificaciones push no están disponibles. ¡Prueba %1$s en tu dispositivo! diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0245b72c5ab5..c506223d1904 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -669,7 +669,6 @@ ¡Lo sentimos Privacidad Nuevo nombre - Notificaciones push deshabilitadas debido a que depende de servicios propietarios de Google Play. No hay notificaciones push debido a que la sesión está caducada. Por favor, considera volver a añadir la cuenta. Notificaciones push actualmente no disponibles. ¡No se ha podido leer el código QR! diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 6008a8573128..68df6f560d29 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -677,7 +677,6 @@ Barkatu Pribatutasuna Izen berria - Push jakinarazpenak Google Play zerbitzu jabedunen menpekotasunengatik desgaituta. Ez dago push jakinarazpenik saio zaharkituaren ondorioz. Mesedez, kontua berriz gehitu. Push jakinarazpenak ez daude eskuragarri. Ezin da QR kodea irakurri! diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 36bf0458892e..6557cc60dd62 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -643,7 +643,6 @@ ببخشید حریم خصوصی اسم جدید - ارسال اعلانات به دلیل وابستگی به خدمات اختصاصی Google Play غیرفعال شده است. امکان ارسال اعلانات، به دلیل منقضی شدن زمان نشست ورود به سیستم وجود ندارد. لطفاً دوباره حساب خود را اضافه کنید. ارسال اعلانات در حال حاضر در دسترس نیست. کد QR قابل خواندن نیست! diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index d1744f0230e7..bc6b9cec9be9 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -608,7 +608,6 @@ GNU yleinen lisenssi, versio 2 Anteeksi Yksityisyys Uusi nimi - Push-ilmoitukset ovat pois käytöstä, koska ne riippuvat suljetuista Google Play -palveluista. Ei puskusanomia johtuen vanhentuneesta kirjautumisistunnosta. Harkitse tilin uudelleenlisäämistä. Push-ilmoitukset eivät ole nyt käytettävissä. QR-koodia ei voitu lukea! diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 51d060fc634f..b0c2707e2717 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -677,7 +677,6 @@ Désolé Vie privée Nouveau nom - L\'envoi de notifications push est désactivé à cause des dépendances propriétaires des services Google Play. Aucune notification push à cause d\'une connexion expirée. Veuillez ajouter de nouveau votre compte. Les notifications push ne sont pas disponibles actuellement. Le code QR ne peut être lu diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index ab022cd852c2..d18bcdd24a14 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -689,7 +689,6 @@ Tá brón orm Príobháideacht Ainm nua - Díchumasaíodh fógraí brú de bharr spleáchais ar sheirbhísí dílseánaigh Google Play. Níl aon bhrúfhógraí mar gheall ar sheisiún logáil isteach atá as dáta. Smaoinigh ar do chuntas a chur leis arís le do thoil. Níl fógraí brúigh ar fáil faoi láthair. Níorbh fhéidir an cód QR a léamh! diff --git a/app/src/main/res/values-gd/strings.xml b/app/src/main/res/values-gd/strings.xml index 0093f5dd7324..876b44462e9c 100644 --- a/app/src/main/res/values-gd/strings.xml +++ b/app/src/main/res/values-gd/strings.xml @@ -508,7 +508,6 @@ Duilich Prìobhaideachd Ainm ùr - Tha na brathan putaidh à comas ri linn eisimeileachd air seirbheisean Google Play fo shealbh. Chan fhaigh thu brathan putaidh ri linn seisean clàraidh a-steach ro shean. Saoil an cuir thu an cunntas agad ris a-rithist? Chan eil brathan putaidh ri fhaighinn an-dràsta. Cha b’ urrainn dhuinn an còd QR a leughadh! diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 434dbefa4484..007cde416774 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -690,7 +690,6 @@ Desculpe. Privacidade Nome novo - Foron desactivadas as notificacións automáticas por depender de servizos propietarios de Google Play. Non dispón de notificacións automáticas por mor dun acceso á sesión caducado. Considere volver engadir a súa conta. Actualmente non están dispoñíbeis as notificacións automáticas. Non foi posíbel ler o código QR. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 49f47c2d5312..de4519429d3c 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -562,7 +562,6 @@ Oprosti Privatnost Novi naziv - Push obavijesti su onemogućene zbog ovisnosti o vlasničkim servisima trgovine Google Play. Nema push obavijesti zbog zastarjele prijave. Razmislite o ponovnom dodavanju računa. Push obavijesti trenutno nisu dostupne. Čitanje QR kôda nije uspjelo! diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index b8df100b60b3..7f09c6f0224a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -625,7 +625,6 @@ Sajnáljuk Adatvédelem Új név - A leküldéses üzenetek ki vannak kapcsolva, mert azok a zárt Google Play szolgáltatásoktól függenek. Nincsenek leküldéses értesítések, mert a munkamenet lejárt. Adja hozzá újra a fiókját. A leküldéses értesítések jelenleg nem érhetőek el. A QR-kód nem olvasható. diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 1b10f5509f8f..d078a02353d6 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -622,7 +622,6 @@ Otomatis unggah hanya bekerja dengan baik apabila Anda mengeluarkan aplikasi ini Maaf Privasi Nama baru - Notifikasi push dinonaktifkan karena ketergantungan pada layanan Google Play bersumber tertutup. Tidak ada notifikasi push karena sesi masuk sudah usang. Mohon pertimbangkan untuk menambahkan kembali akun Anda. Notifikasi push saat ini tidak tersedia. Kode QR tidak dapat dibaca! diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 618f4d535fff..5fdd2434dee1 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -604,7 +604,6 @@ Því miður Gagnaleynd Nýtt nafn - Ýti-tilkynningar eru óvirkar vegna ósamhæfis við séreignahugbúnað í Google Play þjónustu. Engar ýtitilkynningar vegna útrunnirnnar innskráningarsetu. Íhugaðu að setja aðganginn þinn inn aftur. Ýti-tilkynningar eru ekki tiltækar þessa stundina. Ekki tókst að lesa QR-kóða! diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b13a62150359..906084fa637c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -645,7 +645,6 @@ Spiacenti Riservatezza Nuovo nome - Notifiche push disabilitate a causa delle dipendenze dai servizi proprietari di Google Play. Nessuna notifica push a causa della sessione di accesso scaduta. Considera di aggiungere nuovamente il tuo account. Notifiche push attualmente non disponibili. Il codice QR non può essere letto! diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 9ce21f8c450d..7bc14707e43f 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -510,7 +510,6 @@ לא ניתן להציג תמונה אנו מתנצלים פרטיות - התראות בדחיפה מושבתות עקב תלות בשירותי Google Play קנייניים. אין התראות בדחיפה עקב כניסה מיושנת. מוטב לשקול להוסיף את החשבון שלך מחדש. כרגע התרעות בדחיפה אינן זמינות. לנסות את %1$s בהתקן שלך! diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index ad0b783b6bc9..450185c4aa6b 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -668,7 +668,6 @@ 申し訳ありません プライバシー 新しい名前 - 独自のGoogle Playサービスの依存関係のため、プッシュ通知が無効になっています。 古くなったログインセッションによるプッシュ通知はありません。 アカウントを再追加することを検討してください。 プッシュ通知は現在利用できません。 QRコードを読み込めません! diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 581a406a3e98..070b62b7d83c 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -621,7 +621,6 @@ Sorry Privacy New name - Push notifications disabled due to dependencies on proprietary Google Play services. No push notifications due to outdated login session. Please consider re-adding your account. Push notifications currently not available. QR code could not be read! diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 57373840a91f..566c2148ac4e 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -670,7 +670,6 @@ 죄송합니다 개인 정보 새 이름 - 비자유 Google Play 서비스 의존성 때문에 푸시 알림이 비활성화되었습니다. 로그인 세션이 오래되어 푸시 알림이 비활성화되었습니다. 계정을 다시 추가하십시오. 푸시 알림을 사용할 수 없습니다. QR 코드를 읽을 수 없습니다! diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index 0fb6b711a5ad..0c75f574b3cd 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -508,7 +508,6 @@ ຂໍໂທດ ສ່ວນຕົວ ຊື່ໄໝ່ - ປິດການແຈ້ງເຕືອນ ເນື່ອງຈາກການເພິ່ງພາອາໄສການບໍລິການ Google Play ທີ່ເປັນເຈົ້າຂອງ. ບໍ່ມີການແຈ້ງ ເຕືອນ ເນື່ອງ ຈາກພາກ ການເຂົ້າລະບົບ ສະໄຫມ. ກະລຸນາພິຈາລະນາການເພີ່ມບັນຊີຂອງທ່ານຄືນໃຫມ່. ການແຈ້ງເຕືອນຊຸກຍູ້ໃນປະຈຸບັນຍັງບໍ່ມີ. ລອງໃສ່ອຸປະກອນຂອງທ່ານ!%1$s diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 561a84111f1d..2d7ae7fe35a6 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -550,7 +550,6 @@ Atsiprašome Privatumas Naujas pavadinimas - Push pranešimai išjungti dėl priklausomybės nuo nuosavybinių „Google Play“ paslaugų. Nėra pranešimų dėl pasenusios prisijungimo sesijos. Pasvarstykite galimybę iš naujo pridėti prisijungimo duomenis. Stumti pranešimus funkcija šiuo metu negalima Nepavyko perskaityti QR kodo! diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index e6d7a5180f10..9741d04bfb46 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -523,7 +523,6 @@ Извинете Приватност Ново име - Push известувањата се оневозможени поради зависноста на Google Play сервисот. Нема push известувања бидејќи вашата сесија е истечена. Ве молиме повторно најавете се на вашта сметка. Не се достапни Push известувања. Пробајте го %1$s на вашиот уред! diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index d7233a21fedb..6d9aa10fc3e5 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -689,7 +689,6 @@ Beklager Personvern Nytt navn - Push-merknader er avskrudd på grunn av avhengigheter til proprietære Google Play-tjenester. Ingen push-varsler på grunn av utdatert innloggingsøkt. Du bør vurdere å legge til kontoen på nytt. Push-merknader er for tiden ikke tilgjengelige. QR-koden kunne ikke leses! diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 58efaa7c0c39..76bef50c4fc6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -676,7 +676,6 @@ Sorry Privacy Nieuwe naam - Push notificaties uitgeschakeld door afhankelijkheden op eigen Google Play-services. Geen push-notificaties als gevolg van de verouderde inlogsessie. Overweeg het opnieuw toevoegen van je account. Push notificaties momenteel niet beschikbaar. QR code kan niet worden gelezen! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index adaacbeebd78..e7c06e9a8501 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -666,7 +666,6 @@ Przykro nam Prywatność Nowa nazwa - Powiadomienia Push zostały wyłączone ze względu na zastrzeżenia prawne usług Google Play. Brak powiadomień Push z powodu nieaktualnej sesji logowania. Rozważ ponowne dodanie swojego konta. Powiadomienia Push nie są obecnie dostępne. Nie można odczytać kodu QR! diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 7115351d2027..692034484132 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -677,7 +677,6 @@ Desculpe Privacidade Novo nome - Envio de notificações desativado devido a dependências de serviços proprietários do Google Play. Sem envio de notificações devido à sessão de login desatualizada. Considere readicionar sua conta. Atualmente o envio de notificações está indisponível. Não foi possível ler o código QR! diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 83a681226c68..e67b533a57f0 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -601,7 +601,6 @@ Desculpa Privacidade Novo nome - Notificações \"push\" desactivadas devido a dependências sobre serviços proprietários Google Play. Sem notificações \"push\" devido a sessão de acesso de desatualizada. Por favor, considere readicionar a sua conta. Notificações \"push\" actualmente não disponíveis. Não foi possível ler o código QR! diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index bc1546566a41..38a19eddd73f 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -625,7 +625,6 @@ Scuze Confindențialitate Nume nou - Notificările push sunt oprite datorită dependințelor de serviciile proprietare Google Play. Fără notificări push datorită sesiunilor de login expirate. Vă rugăm considerați să adăugați din nou contul dumneavoastră. Notificările push nu sunt disponibile în acest moment. Codul QR nua putut fi citit! diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a61927b19263..9c6031e5308f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -675,7 +675,6 @@ Приносим извинения Конфиденциальность Новое имя - Всплывающие уведомления отключены, так как зависят от Google Play сервисов Нет аккаунтов для уведомлений. Пожалуйста добавьте аккаунт. Всплывающие уведомления недоступны Не удалось считать QR-код! diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 9d4eb603afcc..266c609c22b3 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -529,7 +529,6 @@ Nos dispraghet Riservadesa Nùmene nou - Notìficas de ispinta disativadas pro more de dipendèntzias dae is serbìtzios Google Play de su propietàriu. Non ddoe sunt notìficas de ispinta ca sa sessione de atzessu nch\'est passada. Torra a proare s\'atzessu a su contu tuo. Is notìficas de ispinta non sunt disponìbiles immoe No at fatu a lèghere su còdighe QR! diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 6e7e292268bc..91ebd3ea3c10 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -665,7 +665,6 @@ Prepáčte Súkromie Nový názov - Push notifikácie sú vypnuté z dôvodu závislosti na proprietárnych službách Google Play Žiadne push notifikácie z dôvodu zastaraného prihlásenia. Prosím skúste znova pridať váš účet. Push notifikácie sú v súčasnosti nedostupné. QR kód nie je možné načítať! diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 2e7f51d84f06..15ae11abedd4 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -621,7 +621,6 @@ Na žalost Zasebnost Novo ime - Potisna obvestila so onemogočena zaradi odvisnosti od storitev Google Play. Zaradi pretečene prijavne seje ni mogoče prikazati potisnih obvestil. Priporočljivo je ponovno dodati račun med nastavitvami. Potisna obvestila trenutno niso na voljo. Kode QR ni mogoče prebrati! diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 53d05df3d2fb..281457ef405e 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -460,7 +460,6 @@ Kjo figurë nuk mund të shfaqet Më vjen keq Privatësi - Njoftimet push janë të çaktivizuara për shkak të varësive nga shërbimet e patentuara të Google Play. Nuk ka asnjë njoftim për shkak se sesioni i identifikimit nuk ishte i përditësuar. Ju lutem konsideroni të shtoni përsëri llogarinë tuaj. Njoftimet push nuk ofrohen për momentin. Provojeni %1$s në pajisjen tuaj! diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ab951cbd2351..06b40e90dd46 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -438,7 +438,6 @@ Ne mogu da prikažem sliku Izvinite Privatnost - Brza obaveštenja isključena jer zavise od vlasničkog Google Play servisa. Nema brzih obaveštenja zato što vam je sesija zastarela. Izbrišite i dodajte ponovo nalog. Brza obaveštenja trenutno nisu dostupna. Isprobaj %1$s na svom uređaju! diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 6e14dd8dcc79..a26fddc59876 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -677,7 +677,6 @@ Извините Приватност Ново име - Брза обавештења искључена јер зависе од власничког Гугл плеј сервиса. Нема брзих обавештења јер је сесија застарела. Избришите и додајте поново налог. Брза обавештења тренутно нису доступна. QR кôд није могао да се прочита! diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index ba3c9c7db6ed..8df440bc13e1 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -689,8 +689,7 @@ Tyvärr Privat Nytt namn - Push-aviseringar har inaktiverats på grund av beroenden till skyddade Google Play-tjänster - Inga push-aviseringar på grund av utgången inloggningssession. Överväg att lägga till ditt konto på nytt. + Inga push-aviseringar på grund av utgången inloggningssession. Överväg att lägga till ditt konto på nytt. Push-aviseringar är inte tillgängligt för tillfället. QR-koden kunde inte läsas! Mappen kan inte hittas, synkroniseringen avbryts diff --git a/app/src/main/res/values-tk/strings.xml b/app/src/main/res/values-tk/strings.xml index b4bc0c5e3ddc..9bd826708563 100644 --- a/app/src/main/res/values-tk/strings.xml +++ b/app/src/main/res/values-tk/strings.xml @@ -498,7 +498,6 @@ Bagyşlaň Gizlinlik Täze ady - Hususy Google Play hyzmatlaryna baglylyk sebäpli basma bildirişleri ýapylýar. Könelen giriş sessiýasy sebäpli itergi habarnamalary ýok. Hasabyňyzy täzeden goşmagy göz öňünde tutmagyňyzy haýyş edýäris. Push habarnamalary häzirki wagtda elýeterli däl. %1$senjamyňyzda synap görüň! diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index fd86831764b3..167ba75a74a6 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -689,7 +689,6 @@ Ne yazık ki Gizlilik Yeni ad - Anında bildirimler Google Play hizmetlerine ait olan bağımlılıklar nedeniyle devre dışı bırakıldı. Oturumunuzun süresi dolduğundan anında bildirimler gönderilemez. Lütfen hesabınızı yeniden eklemeyi düşünün. Anında bildirimler şu anda kullanılamıyor. QR kodu okunamadı! diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f8f3357cb1d6..cda057c51b02 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -679,7 +679,6 @@ Перепрошуємо Конфіденційність Нова назва - Сповіщення push вимкнено через залежність від служби Google Play Сповіщення push неактивні, оскільки час сесії вичерпано. Будь ласка, додайте наново ваш обліковий запис. Зараз сповіщення push недоступні. Неможливо прочитати QR-код! diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 589f4c4d6413..1c5b412c2854 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -569,7 +569,6 @@ Xin lỗi Riêng tư Tên mới - Thông báo bị tắt do phụ thuộc vào các dịch vụ độc quyền của Google Play. Không có thông báo do phiên đăng nhập đã lỗi thời. Vui lòng xem xét việc thêm lại tài khoản của bạn. Thông báo hiện không khả dụng. Không thể đọc mã QR! diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 705c5394f9e6..da3754b7a97e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -662,7 +662,6 @@ 抱歉 隐私 新名称 - 由于依赖于专有的Google Play服务,推送通知被禁用。 由于登录会话已过期,因此没有推送通知。 请考虑重新添加您的账号。 推送通知目前不可用。 无法读取二维码! diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 2f766b665a54..1d32d606bbf9 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -689,7 +689,6 @@ 很抱歉 私隱政策 新名稱 - 由於依賴專有的Google Play服務,推送通知已停用。 由於登入已過期,因此沒有推送通知。請考慮重新添加您的帳戶。 推送通知目前無法使用。 QR 碼無法讀取! diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 852c1064f2a3..c1e19d0247fd 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -689,7 +689,6 @@ 很抱歉 隱私權 新名稱 - 因為依賴於專有的 Google Play 服務的關係,所以推播通知已停用。 因為登入工作階段已過期,故無推播通知。請考慮重新登入您的帳號。 推播通知目前無法使用。 無法讀取 QR Code! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 71b8e5459c93..dba834dd9c2d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -716,7 +716,7 @@ Get source code License GNU General Public License, version 2 - Push notifications disabled due to dependencies on proprietary Google Play services. + Push notifications are available using Unified Push. See https://apps.nextcloud.com/apps/uppush. No push notifications due to outdated login session. Please consider re-adding your account. Push notifications currently not available. @@ -1236,4 +1236,11 @@ .%s is a forbidden file extension Name ends with a space or a period Sync + You can use Unified Push for notifications + To enable push notifications you need to install a Unified + Push distributor.\n + For more information visit https://unifiedpush.org/ and https://apps.nextcloud.com/apps/uppush + Reset push notifications + Reset push notifications in case of push messaging issues or changing distributors + Push notifications reset diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index aa1e05dc5515..59b948b97d50 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -78,6 +78,10 @@ android:title="@string/backup_title" android:key="backup" android:summary="@string/prefs_daily_backup_summary" /> +