Merge remote-tracking branch 'origin/master' into dev

This commit is contained in:
Tobias Kaminsky 2023-12-06 03:36:22 +01:00
commit 3b00ea1877
24 changed files with 97 additions and 189 deletions

View file

@ -18,13 +18,9 @@
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events
package com.owncloud.android.ui.events;
/** /**
* Event that notifies that an account was removed * Event that notifies that an account was removed
*/ */
class AccountRemovedEvent
public class AccountRemovedEvent {
}

View file

@ -15,12 +15,11 @@
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http:></http:>//www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events; package com.owncloud.android.ui.events
/** /**
* Currently a dummy event to restore grid view, sort, and search * Currently a dummy event to restore grid view, sort, and search
*/ */
public class ChangeMenuEvent { class ChangeMenuEvent
}

View file

@ -18,16 +18,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events
package com.owncloud.android.ui.events;
/** /**
* Event for refreshing comment state of a file * Event for refreshing comment state of a file
*/ */
public class CommentsEvent { class CommentsEvent(val remoteId: String)
public final String remoteId;
public CommentsEvent(String remoteId) {
this.remoteId = remoteId;
}
}

View file

@ -15,12 +15,11 @@
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http:></http:>//www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events; package com.owncloud.android.ui.events
/** /**
* Dummy drawer event * Dummy drawer event
*/ */
public class DummyDrawerEvent { class DummyDrawerEvent
}

View file

@ -1,37 +0,0 @@
/*
* Nextcloud Android client application
*
* @author Tobias Kaminsky
* Copyright (C) 2017 Tobias Kaminsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events;
/**
* Event for set folder as encrypted/decrypted
*/
public class EncryptionEvent {
public final long localId;
public final String remotePath;
public final String remoteId;
public final boolean shouldBeEncrypted;
public EncryptionEvent(long localId, String remoteId, String remotePath, boolean shouldBeEncrypted) {
this.localId = localId;
this.remoteId = remoteId;
this.remotePath = remotePath;
this.shouldBeEncrypted = shouldBeEncrypted;
}
}

View file

@ -0,0 +1,30 @@
/*
* Nextcloud Android client application
*
* @author Tobias Kaminsky
* Copyright (C) 2017 Tobias Kaminsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events
/**
* Event for set folder as encrypted/decrypted
*/
class EncryptionEvent(
val localId: Long,
val remoteId: String,
val remotePath: String,
val shouldBeEncrypted: Boolean
)

View file

@ -1,33 +0,0 @@
/**
* Nextcloud Android client application
*
* @author Mario Danic
* Copyright (C) 2017 Mario Danic
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events;
/**
* Event for making favoriting work
*/
public class FavoriteEvent {
public final String remotePath;
public final boolean shouldFavorite;
public FavoriteEvent(String remotePath, boolean shouldFavorite) {
this.remotePath = remotePath;
this.shouldFavorite = shouldFavorite;
}
}

View file

@ -15,14 +15,11 @@
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http:></http:>//www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events; package com.owncloud.android.ui.events
public class VCardToggleEvent { /**
public boolean showRestoreButton; * Event for making favoriting work
*/
public VCardToggleEvent(boolean showRestore) { class FavoriteEvent(val remotePath: String, val shouldFavorite: Boolean)
this.showRestoreButton = showRestore;
}
}

View file

@ -1,35 +0,0 @@
/**
* Nextcloud Android client application
*
* @author Mario Danic
* Copyright (C) 2017 Mario Danic
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events;
import com.owncloud.android.datamodel.SyncedFolder;
public class InitiateSyncedFolder {
private final SyncedFolder syncedFolder;
public InitiateSyncedFolder(SyncedFolder syncedFolder) {
this.syncedFolder = syncedFolder;
}
public SyncedFolder getSyncedFolder() {
return syncedFolder;
}
}

View file

@ -1,33 +0,0 @@
/**
* Nextcloud Android client application
*
* @author Mario Danic
* Copyright (C) 2017 Mario Danic
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events;
import android.view.MenuItem;
/**
* Menu item click event
*/
public class MenuItemClickEvent {
public final MenuItem menuItem;
public MenuItemClickEvent(MenuItem menuItem) {
this.menuItem = menuItem;
}
}

View file

@ -17,10 +17,9 @@
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.owncloud.android.ui.events; package com.owncloud.android.ui.events
/** /**
* Event to send push token where it belongs * Event to send push token where it belongs
*/ */
public class TokenPushEvent { class TokenPushEvent
}

View file

@ -0,0 +1,22 @@
/**
* Nextcloud Android client application
*
* @author Mario Danic
* Copyright (C) 2017 Mario Danic
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:></http:>//www.gnu.org/licenses/>.
*/
package com.owncloud.android.ui.events
class VCardToggleEvent(var showRestoreButton: Boolean)

View file

@ -783,13 +783,13 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
OwnCloudClient client = clientFactory.create(user); OwnCloudClient client = clientFactory.create(user);
ToggleFavoriteRemoteOperation toggleFavoriteOperation = new ToggleFavoriteRemoteOperation( ToggleFavoriteRemoteOperation toggleFavoriteOperation = new ToggleFavoriteRemoteOperation(
event.shouldFavorite, event.remotePath); event.getShouldFavorite(), event.getRemotePath());
RemoteOperationResult remoteOperationResult = toggleFavoriteOperation.execute(client); RemoteOperationResult remoteOperationResult = toggleFavoriteOperation.execute(client);
if (remoteOperationResult.isSuccess()) { if (remoteOperationResult.isSuccess()) {
getFile().setFavorite(event.shouldFavorite); getFile().setFavorite(event.getShouldFavorite());
OCFile file = storageManager.getFileByEncryptedRemotePath(event.remotePath); OCFile file = storageManager.getFileByEncryptedRemotePath(event.getRemotePath());
file.setFavorite(event.shouldFavorite); file.setFavorite(event.getShouldFavorite());
storageManager.saveFile(file); storageManager.saveFile(file);
} }

View file

@ -1588,7 +1588,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
@Subscribe(threadMode = ThreadMode.BACKGROUND) @Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessageEvent(CommentsEvent event) { public void onMessageEvent(CommentsEvent event) {
mAdapter.refreshCommentsCount(event.remoteId); mAdapter.refreshCommentsCount(event.getRemoteId());
} }
@Subscribe(threadMode = ThreadMode.BACKGROUND) @Subscribe(threadMode = ThreadMode.BACKGROUND)
@ -1598,13 +1598,13 @@ public class OCFileListFragment extends ExtendedListFragment implements
OwnCloudClient client = clientFactory.create(user); OwnCloudClient client = clientFactory.create(user);
ToggleFavoriteRemoteOperation toggleFavoriteOperation = new ToggleFavoriteRemoteOperation( ToggleFavoriteRemoteOperation toggleFavoriteOperation = new ToggleFavoriteRemoteOperation(
event.shouldFavorite, event.remotePath); event.getShouldFavorite(), event.getRemotePath());
RemoteOperationResult remoteOperationResult = toggleFavoriteOperation.execute(client); RemoteOperationResult remoteOperationResult = toggleFavoriteOperation.execute(client);
if (remoteOperationResult.isSuccess()) { if (remoteOperationResult.isSuccess()) {
boolean removeFromList = currentSearchType == SearchType.FAVORITE_SEARCH && !event.shouldFavorite; boolean removeFromList = currentSearchType == SearchType.FAVORITE_SEARCH && !event.getShouldFavorite();
setEmptyListMessage(SearchType.FAVORITE_SEARCH); setEmptyListMessage(SearchType.FAVORITE_SEARCH);
mAdapter.setFavoriteAttributeForItemID(event.remotePath, event.shouldFavorite, removeFromList); mAdapter.setFavoriteAttributeForItemID(event.getRemotePath(), event.getShouldFavorite(), removeFromList);
} }
} catch (ClientFactory.CreationException e) { } catch (ClientFactory.CreationException e) {
@ -1692,7 +1692,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
String privateKey = arbitraryDataProvider.getValue(user, EncryptionUtils.PRIVATE_KEY); String privateKey = arbitraryDataProvider.getValue(user, EncryptionUtils.PRIVATE_KEY);
FileDataStorageManager storageManager = mContainerActivity.getStorageManager(); FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
OCFile file = storageManager.getFileByRemoteId(event.remoteId); OCFile file = storageManager.getFileByRemoteId(event.getRemoteId());
if (publicKey.isEmpty() || privateKey.isEmpty()) { if (publicKey.isEmpty() || privateKey.isEmpty()) {
Log_OC.d(TAG, "no public key for " + user.getAccountName()); Log_OC.d(TAG, "no public key for " + user.getAccountName());
@ -1706,10 +1706,10 @@ public class OCFileListFragment extends ExtendedListFragment implements
dialog.show(getParentFragmentManager(), SETUP_ENCRYPTION_DIALOG_TAG); dialog.show(getParentFragmentManager(), SETUP_ENCRYPTION_DIALOG_TAG);
} else { } else {
encryptFolder(file, encryptFolder(file,
event.localId, event.getLocalId(),
event.remoteId, event.getRemoteId(),
event.remotePath, event.getRemotePath(),
event.shouldBeEncrypted, event.getShouldBeEncrypted(),
publicKey, publicKey,
privateKey); privateKey);
} }

View file

@ -270,7 +270,7 @@ public class BackupListFragment extends FileFragment implements Injectable {
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(VCardToggleEvent event) { public void onMessageEvent(VCardToggleEvent event) {
if (event.showRestoreButton) { if (event.getShowRestoreButton()) {
binding.contactlistRestoreSelectedContainer.setVisibility(View.VISIBLE); binding.contactlistRestoreSelectedContainer.setVisibility(View.VISIBLE);
} else { } else {
binding.contactlistRestoreSelectedContainer.setVisibility(View.GONE); binding.contactlistRestoreSelectedContainer.setVisibility(View.GONE);

View file

@ -412,6 +412,8 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
seeDetails(); seeDetails();
} else if (itemId == R.id.action_download_file || itemId == R.id.action_sync_file) { } else if (itemId == R.id.action_download_file || itemId == R.id.action_sync_file) {
containerActivity.getFileOperationsHelper().syncFile(getFile()); containerActivity.getFileOperationsHelper().syncFile(getFile());
}else if(itemId == R.id.action_cancel_sync){
containerActivity.getFileOperationsHelper().cancelTransference(getFile());
} else if (itemId == R.id.action_set_as_wallpaper) { } else if (itemId == R.id.action_set_as_wallpaper) {
containerActivity.getFileOperationsHelper().setPictureAs(getFile(), getImageView()); containerActivity.getFileOperationsHelper().setPictureAs(getFile(), getImageView());
} else if (itemId == R.id.action_export_file) { } else if (itemId == R.id.action_export_file) {

View file

@ -450,6 +450,8 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
seeDetails(); seeDetails();
} else if (itemId == R.id.action_sync_file) { } else if (itemId == R.id.action_sync_file) {
containerActivity.getFileOperationsHelper().syncFile(getFile()); containerActivity.getFileOperationsHelper().syncFile(getFile());
} else if (itemId == R.id.action_cancel_sync) {
containerActivity.getFileOperationsHelper().cancelTransference(getFile());
} else if (itemId == R.id.action_stream_media) { } else if (itemId == R.id.action_stream_media) {
containerActivity.getFileOperationsHelper().streamMediaFile(getFile()); containerActivity.getFileOperationsHelper().streamMediaFile(getFile());
} else if (itemId == R.id.action_export_file) { } else if (itemId == R.id.action_export_file) {

View file

@ -330,6 +330,8 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
seeDetails(); seeDetails();
} else if (itemId == R.id.action_sync_file) { } else if (itemId == R.id.action_sync_file) {
containerActivity.getFileOperationsHelper().syncFile(getFile()); containerActivity.getFileOperationsHelper().syncFile(getFile());
} else if(itemId == R.id.action_cancel_sync){
containerActivity.getFileOperationsHelper().cancelTransference(getFile());
} else if (itemId == R.id.action_edit) { } else if (itemId == R.id.action_edit) {
containerActivity.getFileOperationsHelper().openFileWithTextEditor(getFile(), getContext()); containerActivity.getFileOperationsHelper().openFileWithTextEditor(getFile(), getContext());
} }

View file

@ -891,6 +891,7 @@
<string name="upload_lock_failed">فشل قفّل المجلد</string> <string name="upload_lock_failed">فشل قفّل المجلد</string>
<string name="upload_old_android">التشفير ممكن فقط مع &gt;= Android 5.0</string> <string name="upload_old_android">التشفير ممكن فقط مع &gt;= Android 5.0</string>
<string name="upload_query_move_foreign_files">يمنع وجود مساحة غير كافية نسخ الملفات المحددة إلى المجلد %1$s. هل ترغب في نقلهم إلى هناك بدلاً من ذلك؟</string> <string name="upload_query_move_foreign_files">يمنع وجود مساحة غير كافية نسخ الملفات المحددة إلى المجلد %1$s. هل ترغب في نقلهم إلى هناك بدلاً من ذلك؟</string>
<string name="upload_quota_exceeded">الحصة التخزينية تمّ استنفاذها</string>
<string name="upload_scan_doc_upload">مسح مستند عبر الكاميرا</string> <string name="upload_scan_doc_upload">مسح مستند عبر الكاميرا</string>
<string name="upload_sync_conflict">تعارض المزامنة ، يرجى حلها يدويًا</string> <string name="upload_sync_conflict">تعارض المزامنة ، يرجى حلها يدويًا</string>
<string name="upload_unknown_error">خطأ غير معروف</string> <string name="upload_unknown_error">خطأ غير معروف</string>

View file

@ -884,6 +884,7 @@
<string name="upload_lock_failed">Uzamčení složky se nezdařilo</string> <string name="upload_lock_failed">Uzamčení složky se nezdařilo</string>
<string name="upload_old_android">Šifrování je možné pouze na systému Android verze 5.0 a novějším</string> <string name="upload_old_android">Šifrování je možné pouze na systému Android verze 5.0 a novějším</string>
<string name="upload_query_move_foreign_files">Pro zkopírování vybraných souborů do složky %1$s není dostatek volného místa. Chcete je tam namísto toho přesunout?</string> <string name="upload_query_move_foreign_files">Pro zkopírování vybraných souborů do složky %1$s není dostatek volného místa. Chcete je tam namísto toho přesunout?</string>
<string name="upload_quota_exceeded">Kvóta úložiště překročena</string>
<string name="upload_scan_doc_upload">Naskenovat dokument kamerou</string> <string name="upload_scan_doc_upload">Naskenovat dokument kamerou</string>
<string name="upload_sync_conflict">Konflikt synchronizace vyřešte ručně</string> <string name="upload_sync_conflict">Konflikt synchronizace vyřešte ručně</string>
<string name="upload_unknown_error">Neznámá chyba</string> <string name="upload_unknown_error">Neznámá chyba</string>

View file

@ -885,6 +885,7 @@
<string name="upload_lock_failed">Fehler beim Sperren des Ordners</string> <string name="upload_lock_failed">Fehler beim Sperren des Ordners</string>
<string name="upload_old_android">Verschlüsselung ist nur möglich mit &gt;= Android 5.0</string> <string name="upload_old_android">Verschlüsselung ist nur möglich mit &gt;= Android 5.0</string>
<string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in das Verzeichnis %1$s zu kopieren. Sollen diese stattdessen verschoben werden?</string> <string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in das Verzeichnis %1$s zu kopieren. Sollen diese stattdessen verschoben werden?</string>
<string name="upload_quota_exceeded">Speicherkontingent überschritten</string>
<string name="upload_scan_doc_upload">Dokument von der Kamera scannen</string> <string name="upload_scan_doc_upload">Dokument von der Kamera scannen</string>
<string name="upload_sync_conflict">Synchronisierungskonflikt, bitte manuell beheben</string> <string name="upload_sync_conflict">Synchronisierungskonflikt, bitte manuell beheben</string>
<string name="upload_unknown_error">Unbekannter Fehler</string> <string name="upload_unknown_error">Unbekannter Fehler</string>

View file

@ -885,6 +885,7 @@
<string name="upload_lock_failed">Produciuse un fallo ao bloquear o cartafol</string> <string name="upload_lock_failed">Produciuse un fallo ao bloquear o cartafol</string>
<string name="upload_old_android">O cifrado só é posíbel con &gt;= Android 5.0</string> <string name="upload_old_android">O cifrado só é posíbel con &gt;= Android 5.0</string>
<string name="upload_query_move_foreign_files">Non hai espazo abondo para copiar os ficheiros seleccionados no cartafol %1$s. No canto diso, gustaríalle movelos?</string> <string name="upload_query_move_foreign_files">Non hai espazo abondo para copiar os ficheiros seleccionados no cartafol %1$s. No canto diso, gustaríalle movelos?</string>
<string name="upload_quota_exceeded">Superouse a cota de almacenamento</string>
<string name="upload_scan_doc_upload">Escanear o documento dende a cámara</string> <string name="upload_scan_doc_upload">Escanear o documento dende a cámara</string>
<string name="upload_sync_conflict">Conflito ao sincronizar, resólvao manualmente</string> <string name="upload_sync_conflict">Conflito ao sincronizar, resólvao manualmente</string>
<string name="upload_unknown_error">Produciuse un erro descoñecido</string> <string name="upload_unknown_error">Produciuse un erro descoñecido</string>

View file

@ -731,7 +731,7 @@
<string name="shared_icon_share">поділитися</string> <string name="shared_icon_share">поділитися</string>
<string name="shared_icon_shared">надано доступ</string> <string name="shared_icon_shared">надано доступ</string>
<string name="shared_icon_shared_via_link">доступ надано за посиланням</string> <string name="shared_icon_shared_via_link">доступ надано за посиланням</string>
<string name="shared_with_you_by">%1$s поділився з вами</string> <string name="shared_with_you_by">%1$s поділив(-ла-)ся з вами</string>
<string name="sharee_add_failed">Помилка додавання користувача, з яким ви хочете поділитися</string> <string name="sharee_add_failed">Помилка додавання користувача, з яким ви хочете поділитися</string>
<string name="show_images">Показувати зображення</string> <string name="show_images">Показувати зображення</string>
<string name="show_video">Показувати відео</string> <string name="show_video">Показувати відео</string>
@ -793,7 +793,7 @@
<string name="sub_folder_rule_month">Рік/місяць</string> <string name="sub_folder_rule_month">Рік/місяць</string>
<string name="sub_folder_rule_year">Рік</string> <string name="sub_folder_rule_year">Рік</string>
<string name="subject_shared_with_you">Вам було надано доступ до \"%1$s\"</string> <string name="subject_shared_with_you">Вам було надано доступ до \"%1$s\"</string>
<string name="subject_user_shared_with_you">%1$s поділився %2$s з вами</string> <string name="subject_user_shared_with_you">%1$s поділив(-ла-)ся %2$s з вами</string>
<string name="subtitle_photos_only">Лише зображення</string> <string name="subtitle_photos_only">Лише зображення</string>
<string name="subtitle_photos_videos">Зображення та відео</string> <string name="subtitle_photos_videos">Зображення та відео</string>
<string name="subtitle_videos_only">Лише відео</string> <string name="subtitle_videos_only">Лише відео</string>

View file

@ -884,6 +884,7 @@
<string name="upload_lock_failed">鎖定資料夾失敗</string> <string name="upload_lock_failed">鎖定資料夾失敗</string>
<string name="upload_old_android">加密功能僅適用於 Android 5.0 及更新版本</string> <string name="upload_old_android">加密功能僅適用於 Android 5.0 及更新版本</string>
<string name="upload_query_move_foreign_files">空間不足以將選擇的檔案複製到 %1$s 資料夾,是否要改成移動它們?</string> <string name="upload_query_move_foreign_files">空間不足以將選擇的檔案複製到 %1$s 資料夾,是否要改成移動它們?</string>
<string name="upload_quota_exceeded">超過儲存空間配額</string>
<string name="upload_scan_doc_upload">使用相機掃描文件</string> <string name="upload_scan_doc_upload">使用相機掃描文件</string>
<string name="upload_sync_conflict">同步發生衝突,請手動處理</string> <string name="upload_sync_conflict">同步發生衝突,請手動處理</string>
<string name="upload_unknown_error">未知的錯誤</string> <string name="upload_unknown_error">未知的錯誤</string>