From 14f6353cb37bacd6e7ef55ecc5f1e16c6f419c46 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Fri, 6 Mar 2020 11:59:00 +0100 Subject: [PATCH 1/8] Integration test for account switching Signed-off-by: tobiasKaminsky --- .../android/ui/activity/DrawerActivityIT.java | 123 ++++++++++++++++++ .../account/UserAccountManagerImpl.java | 6 +- .../android/ui/activity/DrawerActivity.java | 12 +- 3 files changed, 131 insertions(+), 10 deletions(-) create mode 100644 src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java diff --git a/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java new file mode 100644 index 000000000000..d02127423b9e --- /dev/null +++ b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java @@ -0,0 +1,123 @@ +/* + * + * Nextcloud Android client application + * + * @author Tobias Kaminsky + * Copyright (C) 2020 Tobias Kaminsky + * Copyright (C) 2020 Nextcloud GmbH + * + * 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 . + */ + +package com.owncloud.android.ui.activity; + +import android.Manifest; +import android.accounts.Account; +import android.accounts.AccountManager; +import android.net.Uri; +import android.os.Bundle; + +import com.nextcloud.client.account.UserAccountManager; +import com.nextcloud.client.account.UserAccountManagerImpl; +import com.owncloud.android.AbstractIT; +import com.owncloud.android.MainApp; +import com.owncloud.android.R; +import com.owncloud.android.lib.common.accounts.AccountUtils; + +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; + +import androidx.test.espresso.contrib.DrawerActions; +import androidx.test.espresso.intent.rule.IntentsTestRule; +import androidx.test.rule.GrantPermissionRule; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.junit.Assert.assertEquals; + +public class DrawerActivityIT extends AbstractIT { + private static String account2Name; + @Rule public IntentsTestRule activityRule = new IntentsTestRule<>(FileDisplayActivity.class, + true, + false); + + @Rule + public final GrantPermissionRule permissionRule = GrantPermissionRule.grant( + Manifest.permission.WRITE_EXTERNAL_STORAGE); + private static Account account2; + + @BeforeClass + public static void beforeClass() { + Bundle arguments = androidx.test.platform.app.InstrumentationRegistry.getArguments(); + Uri baseUrl = Uri.parse(arguments.getString("TEST_SERVER_URL")); + String loginName = "user1"; + String password = "user1"; + + Account temp = new Account(loginName + "@" + baseUrl, MainApp.getAccountType(targetContext)); + UserAccountManager accountManager = UserAccountManagerImpl.fromContext(targetContext); + if (!accountManager.exists(temp)) { + AccountManager platformAccountManager = AccountManager.get(targetContext); + platformAccountManager.addAccountExplicitly(temp, password, null); + platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_ACCOUNT_VERSION, + Integer.toString(UserAccountManager.ACCOUNT_VERSION)); + platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_VERSION, "14.0.0.0"); + platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_BASE_URL, baseUrl.toString()); + platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, loginName); // same as userId + } + + final UserAccountManager userAccountManager = UserAccountManagerImpl.fromContext(targetContext); + account2 = userAccountManager.getAccountByName(loginName + "@" + baseUrl); + account2Name = "User One@" + baseUrl; + } + + @Test + public void switchAccountViaAccountList() { + FileDisplayActivity sut = activityRule.launchActivity(null); + + assertEquals(account, sut.getUser().get().toPlatformAccount()); + + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); + onView(withId(R.id.drawer_active_user)).perform(click()); + + onView(withText(account2Name)).perform(click()); + + waitForIdleSync(); + + assertEquals(account2, sut.getUser().get().toPlatformAccount()); + + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); + onView(withId(R.id.drawer_active_user)).perform(click()); + onView(withText(account.name)).perform(click()); + } + + @Test + public void switchAccountViaAvatar() { + FileDisplayActivity sut = activityRule.launchActivity(null); + + assertEquals(account, sut.getUser().get().toPlatformAccount()); + + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); + onView(withId(R.id.drawer_account_end)).perform(click()); + + waitForIdleSync(); + + assertEquals(account2, sut.getUser().get().toPlatformAccount()); + + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); + onView(withId(R.id.drawer_account_end)).perform(click()); + } +} diff --git a/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java b/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java index 4784b9441211..331ed59afdb1 100644 --- a/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java +++ b/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java @@ -292,10 +292,10 @@ public boolean setCurrentOwnCloudAccount(String accountName) { public boolean setCurrentOwnCloudAccount(int hashCode) { boolean result = false; if (hashCode != 0) { - for (final Account account : getAccounts()) { - if (hashCode == account.hashCode()) { + for (final User user : getAllUsers()) { + if (hashCode == user.hashCode()) { SharedPreferences.Editor appPrefs = PreferenceManager.getDefaultSharedPreferences(context).edit(); - appPrefs.putString(PREF_SELECT_OC_ACCOUNT, account.name); + appPrefs.putString(PREF_SELECT_OC_ACCOUNT, user.getAccountName()); appPrefs.apply(); result = true; break; diff --git a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 9c58c892dfb2..544d8aef16c3 100644 --- a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -26,7 +26,6 @@ package com.owncloud.android.ui.activity; -import android.accounts.Account; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -575,9 +574,8 @@ private void handleSearchEvents(SearchEvent searchEvent, int menuItemId) { * @param hashCode HashCode of account to be set */ private void accountClicked(int hashCode) { - final Account currentAccount = accountManager.getCurrentAccount(); - if (currentAccount != null && currentAccount.hashCode() != hashCode && - accountManager.setCurrentOwnCloudAccount(hashCode)) { + final User currentUser = accountManager.getUser(); + if (currentUser.hashCode() != hashCode && accountManager.setCurrentOwnCloudAccount(hashCode)) { fetchExternalLinks(true); restart(); } @@ -607,7 +605,7 @@ private void externalLinkClicked(MenuItem menuItem){ * @param view the clicked ImageView */ public void onAccountDrawerClick(View view) { - accountClicked(Integer.parseInt(view.getContentDescription().toString())); + accountClicked((int) view.getTag()); } /** @@ -688,7 +686,7 @@ public void updateAccountList() { // activate second/end account avatar final User secondUser = mAvatars.size() > 1 ? mAvatars.get(1) : null; if (secondUser != null) { - mAccountEndAccountAvatar.setTag(secondUser.getAccountName()); + mAccountEndAccountAvatar.setTag(secondUser.hashCode()); DisplayUtils.setAvatar(secondUser, this, mOtherAccountAvatarRadiusDimension, @@ -703,7 +701,7 @@ public void updateAccountList() { // activate third/middle account avatar final User thirdUser = mAvatars.size() > 2 ? mAvatars.get(2) : null; if (thirdUser != null) { - mAccountMiddleAccountAvatar.setTag(thirdUser.getAccountName()); + mAccountMiddleAccountAvatar.setTag(thirdUser.hashCode()); DisplayUtils.setAvatar(thirdUser, this, mOtherAccountAvatarRadiusDimension, From 3108759dac4062e30b3938dec930787abbab5fe6 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 10 Mar 2020 08:41:12 +0100 Subject: [PATCH 2/8] Fix exception on computing available space Signed-off-by: tobiasKaminsky --- .../ui/helpers/FileOperationsHelperIT.kt | 48 +++++++++++++++++++ .../ui/fragment/OCFileListFragment.java | 9 ++-- .../ui/helpers/FileOperationsHelper.java | 13 +++-- 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/androidTest/java/com/owncloud/android/ui/helpers/FileOperationsHelperIT.kt diff --git a/src/androidTest/java/com/owncloud/android/ui/helpers/FileOperationsHelperIT.kt b/src/androidTest/java/com/owncloud/android/ui/helpers/FileOperationsHelperIT.kt new file mode 100644 index 000000000000..c5322861a42f --- /dev/null +++ b/src/androidTest/java/com/owncloud/android/ui/helpers/FileOperationsHelperIT.kt @@ -0,0 +1,48 @@ +/* + * + * Nextcloud Android client application + * + * @author Tobias Kaminsky + * Copyright (C) 2020 Tobias Kaminsky + * Copyright (C) 2020 Nextcloud GmbH + * + * 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 . + */ +package com.owncloud.android.ui.helpers + +import com.owncloud.android.MainApp +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertTrue +import org.junit.Test + +class FileOperationsHelperIT { + + @Test + fun testNull() { + MainApp.setStoragePath(null) + assertEquals(-1L, FileOperationsHelper.getAvailableSpaceOnDevice()) + } + + @Test + fun testNonExistingPath() { + MainApp.setStoragePath("/123/123") + assertEquals(-1L, FileOperationsHelper.getAvailableSpaceOnDevice()) + } + + @Test + fun testExistingPath() { + MainApp.setStoragePath("/sdcard/") + assertTrue(FileOperationsHelper.getAvailableSpaceOnDevice() > 0L) + } +} diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 5d255e9bf659..2a96e22dd7c3 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1710,11 +1710,14 @@ private boolean isSearchEventSet(SearchEvent event) { private void syncAndCheckFiles(Collection files) { for (OCFile file : files) { - // Get the remaining space on device (after file download) + // Get the remaining space on device long availableSpaceOnDevice = FileOperationsHelper.getAvailableSpaceOnDevice(); - // Determine if space is enough to download the file - boolean isSpaceEnough = availableSpaceOnDevice > file.getFileLength(); + // Determine if space is enough to download the file, -1 available space if there in error while computing + boolean isSpaceEnough = true; + if (availableSpaceOnDevice >= 0) { + isSpaceEnough = availableSpaceOnDevice > file.getFileLength(); + } if (isSpaceEnough) { mContainerActivity.getFileOperationsHelper().syncFile(file); diff --git a/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java b/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java index 79097e48add7..63dec36f0e0c 100755 --- a/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java +++ b/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java @@ -1038,10 +1038,18 @@ public static String getCapturedImageName() { return new SimpleDateFormat("yyyy-MM-dd_HHmmss", Locale.US).format(new Date()) + ".jpg"; } + /** + * @return -1 if no space could computed, otherwise available space in bytes + */ public static Long getAvailableSpaceOnDevice() { - StatFs stat = new StatFs(MainApp.getStoragePath()); - long availableBytesOnDevice; + StatFs stat; + try { + stat = new StatFs(MainApp.getStoragePath()); + } catch (NullPointerException | IllegalArgumentException e) { + return -1L; + } + long availableBytesOnDevice; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { availableBytesOnDevice = stat.getBlockSizeLong() * stat.getAvailableBlocksLong(); } else { @@ -1051,5 +1059,4 @@ public static Long getAvailableSpaceOnDevice() { return availableBytesOnDevice; } - } From 4ce2729a8f70b273f6679d51b03caf893b5220c1 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 10 Mar 2020 10:07:10 +0100 Subject: [PATCH 3/8] Adjust test Signed-off-by: tobiasKaminsky --- .../owncloud/android/ui/activity/DrawerActivityIT.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java index d02127423b9e..9269ecc2d84b 100644 --- a/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java +++ b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java @@ -47,10 +47,10 @@ import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.hamcrest.Matchers.anyOf; import static org.junit.Assert.assertEquals; public class DrawerActivityIT extends AbstractIT { - private static String account2Name; @Rule public IntentsTestRule activityRule = new IntentsTestRule<>(FileDisplayActivity.class, true, false); @@ -59,6 +59,8 @@ public class DrawerActivityIT extends AbstractIT { public final GrantPermissionRule permissionRule = GrantPermissionRule.grant( Manifest.permission.WRITE_EXTERNAL_STORAGE); private static Account account2; + private static String account2Name; + private static String account2DisplayName; @BeforeClass public static void beforeClass() { @@ -81,7 +83,8 @@ public static void beforeClass() { final UserAccountManager userAccountManager = UserAccountManagerImpl.fromContext(targetContext); account2 = userAccountManager.getAccountByName(loginName + "@" + baseUrl); - account2Name = "User One@" + baseUrl; + account2Name = loginName + baseUrl; + account2DisplayName = "User One@" + baseUrl; } @Test @@ -93,7 +96,7 @@ public void switchAccountViaAccountList() { onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); onView(withId(R.id.drawer_active_user)).perform(click()); - onView(withText(account2Name)).perform(click()); + onView(anyOf(withText(account2Name), withText(account2DisplayName))).perform(click()); waitForIdleSync(); From 7cdf890bf48e14c8dec414198cb40da61855035b Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 11 Mar 2020 03:31:14 +0000 Subject: [PATCH 4/8] [tx-robot] updated from transifex --- src/main/res/values-el/strings.xml | 5 ++ src/main/res/values-sr/strings.xml | 134 ++++++++++++++--------------- 2 files changed, 72 insertions(+), 67 deletions(-) diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 9e8588bfcc7b..a8a411c1a9aa 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -141,9 +141,12 @@ Θέλετε σίγουρα να διαγράψετε το %1$s και τα περιεχόμενά του; Θέλετε να διαγράψετε τα επιλεγμένα αντικείμενα και τα περιεχόμενά τους; Μόνο τοπικά + Το αρχείο υπάρχει ήδη Διατήρηση και των δύο Ποια αρχεία θέλετε να διατηρήσετε; Αν επιλέξετε και τις δύο εκδόσεις, θα προστεθεί ένας αριθμός στο όνομα του τοπικού αρχείου. + Εάν επιλέξετε και τις δύο εκδόσεις, στο όνομα του τοπικού αρχείου θα προστεθεί ένας αριθμός. Ποια αρχεία θέλετε να κρατήσετε; + Νέο αρχείο Διένεξη αρχείων τοπική έκδοση έκδοση διακομιστή @@ -696,6 +699,8 @@ Ετικέτες Δοκιμή σύνδεσης με διακομιστή Μικρογραφία + Μικρογραφία υπάρχοντος αρχείου + Μικρογραφία νέου αρχείου Η φόρτωση διαρκεί πολύ… Διεγραμμένα αρχεία Κανένα διαγεγραμμένο αρχείο diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index c9bf14d7e903..b388e365119c 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -479,28 +479,28 @@ Подеси DAVx5 (раније знан и као ДАВдроид) (в1.3.0+) за тренутни налог Календар и синхронизација контаката подешени О програму - Подаци + Детаљи Развојно Опште Остало Дневно архивирање ваших контаката Е2Е мнемоник За приказивање мнемоника, омогућите акредитиве на уређају. - Прикажи обавештења о скенирању мултимедије - Обавештавај о новопронађеним мултимедијалним фасциклама + Прикажи обавештења о скенирању медија + Обавести о новопронађеним медијским фасциклама ГНУ Општа Јавна Лиценца, верзија 2 Помоћ Жиг - Оригинални фајл ће бити… - Оригинални фајл ће бити… - Сачувај у подфасциклама према години и месецу - Користи подфасцикле + Оригинални фајл биће… + Оригинални фајл биће… + Сачувај у потфасциклама према години и месецу + Користи потфасцикле Лиценца Апликативни кôд - Укључени акредитиви уређаја + Акредитиви уређаја укључени Нема подешених акредитива уређаја. Ништа - Заштитите апликацију уз помоћ + За заштиту апликације користи Акредитиве уређаја Код Управљање налозима @@ -513,14 +513,14 @@ Тема тамна светла - Као систем + системска Преглед слике Нема локалног фајла за преглед Не могу да прикажем слику Извините Приватност - Брза обавештења искључена јер зависе од власничког Google Play сервиса. - Нема брзих обавештења зато што вам је сесија застарела. Избришите и додајте поново налог. + Брза обавештења искључена јер зависе од власничког Гугл плеј сервиса. + Нема брзих обавештења јер је сесија застарела. Избришите и додајте поново налог. Брза обавештења тренутно нису доступна. Испробај %1$s на свом уређају! Желим да те позовем да испробаш %1$s на свом уређају.\nПреузми га овде: %2$s @@ -531,37 +531,37 @@ Уклони Обрисано Унесите нов назив - Локална копија не може да се преименује, пробајте друго име - Преименовање није могуће, име је већ заузето - Дељење даље није дозвољено + Не могу да преименујем локалну копију. Пробајте други назив + Преименовање није могуће. Назив већ постоји + Поновно дељење није дозвољено Поновно дељење није дозвољено Нема доступне умањене сличице. - Нема доступне умањене сличице. Скини оригиналну слику? + Нема доступне умањене сличице. Скинути пуну слику? Поврати фајл Поврати обрисани фајл Добављам фајл… - Грешка приликом учитавања документа! + Не могу да учитам документ! Потребна је лозинка Погрешна лозинка - Пријава преко QR кода - Штити Ваше податке - продуктивност коју Ви хостујете - Претражи и дели - све радње под Вашим прстима + Пријава преко КуеР кода + Штити ваше податке + продуктивност на вашем серверу + Прегледај и дели + све радње на дохват руке Активности, дељења, … све брзо доступно - Сви Ваши налози + Сви ваши налози на једном месту Аутоматска отпремања - Ваших слика & видео записа - Календар & контакти - Синхронизација са DAVx5 + слика и видео записа + Календар и контакти + Синхронизација помоћу DAVx5 Претражи кориснике и групе Означи све Одаберите шаблон Пошаљи Пошаљи белешку примаоцу - Икона дугма за слање + Икона за слање Постави као Постави слику као Повежи се @@ -569,7 +569,7 @@ Додај корисника или групу Дељење %1$s (е-пошта) - Истиче на %1$s + Истиче %1$s Подели %1$s Добави везу %1$s (група) @@ -579,14 +579,14 @@ Интерна веза дељења ради само за кориснике који имају приступ фасцикли %1$s (на %2$s) Морате унети лозинку - Дошло је до грешке приликом покушаја дељења овог фајла или фасцикле + Десила се грешка при покушају дељења фајла или фасцикле Не могу да делим. Проверите да ли фајл постоји да делите овај фајл Унесите опциону лозинку Унесите лозинку Постави датум истека Постави лозинку - Још нема података подељених са корисницима + Ништа не делите са корисницима Заштићено лозинком може да уређује може да мења @@ -597,7 +597,7 @@ %1$s(удаљено) %1$s (разговор) Име, ИД здруженог облака или адреса е-поште… - Белешка примаоцу + Напомена примаоцу Дозволи уређивање Постави датум истека Сакриј преузимање @@ -610,7 +610,7 @@ Уклони Подели са %1$s Подели са… - Дељење са корисницима и групама + Подели са корисницима и групама Аватар од дељеног корисника дељење подељено @@ -618,7 +618,7 @@ Дели са вама %1$s Додавање особе за дељење није успело Пријавите се преко провајдера - Дозволи да %1$s приступа Вашем Некстклауд налогу %2$s? + Може ли %1$s да приступи Некстклауд налогу %2$s? Разврстај Прво новије Прво старије @@ -627,7 +627,7 @@ Прво најмање Прво највеће Сакриј - Подаци + Детаљи Идентитет сервера не може да се провери Држава: Уобичајено име: @@ -647,12 +647,12 @@ Не могу да сачувам сертификат Сертификат се не може приказати. Желите ли ипак да верујете сертификату? - – Сертификат сервера је истекао - – Сертификат сервера није од поверења + - Сертификат сервера је истекао + - Сертификат сервера није од поверења - Датуми важења сертификата су у будућности - – Адреса се не поклапа са именом домаћина у сертификату + - Адреса се не поклапа са именом домаћина у сертификату Камера - Одаберите локацију складишта + Избор локације складишта Подразумевано Документи Преузимања @@ -669,13 +669,13 @@ Или преузмите мултимедију или користите неку екстерну апликацију. „%1$s“ је подељен са вама %1$s дели „%2$s“ са вама - Пронађени конфликти + Постоје сукоби Фасцикла %1$s више не постоји Не могу да синхронизујем %1$s Погрешна лозинка за %1$s Синхронизација није успела Синхронизација није успела - Неуспешна синхронизација, поново се пријавите + Неуспела синхронизација. Поново се пријавите Садржај је већ синхронизован Синхронизација фасцикле %1$s није довршена Од верзије 1.3.16, фајлови отпремљени са овог уређаја се копираки у локалну фасциклу %1$s да би се спречио губитак података када се исти фајл синхронизује са више налога.\n\nЗбог ове измене, сви фајлови који су отпремљени са старијим верзијама ове апликације су копирани у фасциклу %2$s. Ипак, грешка је онемогућила завршетак ове операције док се радила синхронизација налога. Можете или оставити фајл(ове) ту где јесу и избрисати везу ка %3$s, или померити фајл(ове) у %1$s и задржати везу ка %4$s.\n\nИспод су излистани локални фајл(ови), и удаљени фајл(ови) у %5$s на које су везани. @@ -685,7 +685,7 @@ Ослободите простор %1$s је %2$s, али на уређају је доступно само %3$s. Нема довољно простора - Дугме статус синхронизације + Дугме статуса синхронизације Фајлови Дугме поставки Подесите фасцикле @@ -712,50 +712,50 @@ Постоје непрочитани коментари Искључи шифровање Уклони из омиљених - Дошло је до грешке приликом покушаја укидања дељења овог фајла или фасцикле - Не могу да прекинем дељење. Проверите да ли фајл постоји + Десила се грешка при покушају укидања дељења фајла или фасцикле + Не могу да укинем дељење. Проверите да ли фајл постоји да укинете дељење овог фајла - Уклањање дељења није успело + Укидање дељења није успело Приступ кроз домен који није од поверења. Погледајте документацију за још информација. Дошло је до грешке при покушају ажурирања дељења Не могу да освежим везу. Проверите да ли фајл постоји - да ажурирате овај фајл + да ажурирате ово дељење Ажурирање дељења није успело Не могу да направим локални фајл Отпреми из… - Отпреми садржај из других апликација + Отпрема садржај из других апликација Отпреми са камере - Име фајла + Назив фајла Тип фајла Пречица Гугл мапа (%s) Интернет пречица (%s) Текстуални исечак (.txt) - Унесите име и тип фајла за отпремање + Унесите назив и тип фајла за отпремање Отпреми фајлове - Дугме отпремања ставке + Дугме за отпремање Избриши Нема доступних отпремања - Отпремите неки садржај или укључите аутоматско отпремање. + Отпремите нешто или укључите аутоматско отпремање. Разреши сукоб Локално складиште пуно Фајл није могао да се копира на локално складиште Неуспело закључавање фасцикле Шифровање је могуће само са >= Андроидом 5.0 - Недовољно места да се копирају означени фајлови у фасциклу %1$s. Да ли желите можда да их уместо копирања преместите тамо? - Конфликт приликом синхронизације, разрешите га ручно + Недостатак простора спречава копирање фајлова у фасциклу %1$s. Желите ли да их преместите тамо? + Сукоб синхронизације. Разрешите га ручно Непозната грешка Одабери Отпреми Примљени подаци нису садржали исправан фајл. - %1$s није дозвољено читати примљени фајл - Не могу да копирам фајл на привремену локацију. Покушајте да га поново пошаљете. - Одабрани фајл није пронађен. Проверите да ли постоји. - Фајл не може бити отпремљен. - Нема фајлова за учитавање + %1$s није дозвољено да чита примљени фајл + Не могу да копирам фајл у привремену фасциклу. Пошаљите га поново. + Фајл за отпремање није нађен. Проверите да ли постоји. + Фајл се не може отпремити + Нема фајлова за отпремање Назив фасцикле - Изаберите фасцикле за отпремање + Одредите фасциклу за отпремање Не могу да отпремим %1$s - Неуспешно отпремање, поново се пријавите + Неуспешно отпремање. Поново се пријавите Сукоб отпреманог фајла Коју верзију фајла %1$s задржати Отпремање неуспешно @@ -780,8 +780,8 @@ Отказано Конфликт Грешка у повезивању - Грешка у налог/лозинка - Грешка са фајлом + Грешка у акредитивима + Грешка фајла Грешка фасцикле Локални фајл није нађен Грешка дозвола @@ -790,8 +790,8 @@ Апликација прекинута Завршено Непозната грешка - Вирус примећен. Отпремање не може да се заврши! - Чекам да телефон изађе из мода очувања енергије + Вирус откривен. Отпремање не може да се заврши! + Чекам излазак из режима уштеде енергије Чекам пуњење Чекам на бежичну мрежу Корисник @@ -799,15 +799,15 @@ Адреса е-поште Број телефона Твитер - Сајт - Грешка при дохватању корисничких информација + Веб страна + Грешка при добављању корисничких података Нису постављени лични подаци - Додајте име, слику и детаље контакта на Вашу профилну страну. + Додајте име, слику и детаље за контакт на страницу профила. Корисничко име Преузми Сачекајте мало… Проверавам сачуване акредитиве - Копирам фајл из приватног складишта + Копирам фајл из личног складишта Слика шта је ново Прескочи Ново у %1$s From 65e3c66d14ac7c89ab2bd3b7da6f9b367e23141e Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Wed, 11 Mar 2020 08:43:06 +0100 Subject: [PATCH 5/8] See: https://github.com/gradle/wrapper-validation-action Signed-off-by: tobiasKaminsky --- .github/workflows/gradle-wrapper-validation.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/workflows/gradle-wrapper-validation.yml diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml new file mode 100644 index 000000000000..628503225078 --- /dev/null +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -0,0 +1,10 @@ +name: "Validate Gradle Wrapper" +on: [push, pull_request] + +jobs: + validation: + name: "Validation" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: gradle/wrapper-validation-action@v1 From 1b5d37b50c7735956f40dc562a47195ac1539b58 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Wed, 11 Mar 2020 10:06:21 +0100 Subject: [PATCH 6/8] Fix border of disabled FAB Signed-off-by: tobiasKaminsky --- .../owncloud/android/ui/fragment/ExtendedListFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 1c96df1343ab..4f3be9bc73f3 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -588,7 +588,9 @@ public void setFabVisible(final boolean visible) { getActivity().runOnUiThread(() -> { if (visible) { mFabMain.show(); - ThemeUtils.tintDrawable(mFabMain.getBackground(), ThemeUtils.primaryColor(getContext())); + int primaryColor = ThemeUtils.primaryColor(getContext()); + mFabMain.setBackgroundTintList(ColorStateList.valueOf(primaryColor)); + mFabMain.setRippleColor(primaryColor); } else { mFabMain.hide(); } From c771db8bb58111897f00dbe500c2c7a8cca311bd Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Wed, 11 Mar 2020 11:07:20 +0100 Subject: [PATCH 7/8] Add missing @ for test Signed-off-by: tobiasKaminsky --- .../java/com/owncloud/android/ui/activity/DrawerActivityIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java index 9269ecc2d84b..abcbcadcba59 100644 --- a/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java +++ b/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java @@ -83,7 +83,7 @@ public static void beforeClass() { final UserAccountManager userAccountManager = UserAccountManagerImpl.fromContext(targetContext); account2 = userAccountManager.getAccountByName(loginName + "@" + baseUrl); - account2Name = loginName + baseUrl; + account2Name = loginName + "@" + baseUrl; account2DisplayName = "User One@" + baseUrl; } From d604084496f26817bb3ee7e3ab4266b84c8b7df4 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 11 Mar 2020 22:03:47 +0100 Subject: [PATCH 8/8] v3.12.-Alpha1 Signed-off-by: Andy Scherzinger --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1bf49989375b..0ea34baecc9e 100644 --- a/build.gradle +++ b/build.gradle @@ -84,7 +84,7 @@ repositories { // semantic versioning for version code def versionMajor = 3 -def versionMinor = 11 +def versionMinor = 12 def versionPatch = 0 def versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable