From d4bf3ff668bc569937a79a6263cfb69045d990be Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 1 Sep 2021 09:32:39 +0200 Subject: [PATCH 1/5] Implement ExponentialBackOff to GoogleDrive to hopefully workaround #323 We now retry a request if e.g. a status code 500 was received for max 15 seconds with exponential back off --- .../googledrive/GoogleDriveClientFactory.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveClientFactory.kt b/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveClientFactory.kt index 9e2c89c4..66b5a2dc 100644 --- a/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveClientFactory.kt +++ b/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveClientFactory.kt @@ -1,8 +1,11 @@ package org.cryptomator.data.cloud.googledrive import android.content.Context +import com.google.api.client.http.HttpBackOffIOExceptionHandler +import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler import com.google.api.client.http.javanet.NetHttpTransport import com.google.api.client.json.gson.GsonFactory +import com.google.api.client.util.ExponentialBackOff import com.google.api.services.drive.Drive import com.google.api.services.drive.DriveScopes import org.cryptomator.data.BuildConfig @@ -30,12 +33,7 @@ class GoogleDriveClientFactory internal constructor() { Logger.getLogger("com.google.api.client").level = Level.CONFIG Logger.getLogger("com.google.api.client").addHandler(object : Handler() { override fun publish(record: LogRecord) { - if (record.message.startsWith("-------------- RESPONSE --------------") // - || record.message.startsWith("-------------- REQUEST --------------") // - || record.message.startsWith("{\n \"files\": [\n") - ) { - Timber.tag("GoogleDriveClient").d(record.message) - } + Timber.tag("GoogleDriveClient").d(record.message) } override fun flush() {} @@ -48,8 +46,20 @@ class GoogleDriveClientFactory internal constructor() { val credential = FixedGoogleAccountCredential.usingOAuth2(context, setOf(DriveScopes.DRIVE)).also { it.setAccountName(accountName) } return Drive.Builder(NetHttpTransport(), GsonFactory.getDefaultInstance(), credential) // .setApplicationName("Cryptomator-Android/" + BuildConfig.VERSION_NAME) // - .build() + .setHttpRequestInitializer { request -> + credential.initialize(request) + val exponentialBackOff = ExponentialBackOff.Builder().setMaxElapsedTimeMillis(15 * 1000).build() + request.unsuccessfulResponseHandler = HttpBackOffUnsuccessfulResponseHandler(exponentialBackOff).setBackOffRequired { response -> + response.statusCode == 403 || response.statusCode / 100 == 5 + } + request.ioExceptionHandler = HttpBackOffIOExceptionHandler(exponentialBackOff) + + // trim down logging + request.isCurlLoggingEnabled = false + request.contentLoggingLimit = 0 + } + .build() } } } From 2ae54f8748a11c8ad8db7a6dba020640763cc83d Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 14 Sep 2021 12:32:05 +0200 Subject: [PATCH 2/5] #323 fix http status code 500 on some devices using Google Drive Due to too complex query, see https://github.com/cryptomator/android/issues/323#issuecomment-911907421 for more details --- .../data/cloud/googledrive/GoogleDriveImpl.kt | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt b/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt index 18573cbc..4365e810 100644 --- a/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt +++ b/data/src/notFoss/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt @@ -57,14 +57,8 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl @Throws(IOException::class) private fun findFile(parentDriveId: String?, name: String): File? { - val fileListQuery = client().files().list() // - .setFields("files(id,mimeType,name,size)") // - .setSupportsAllDrives(true) - fileListQuery.q = if (parentDriveId != null && parentDriveId == "root") { - "name contains '$name' and '$parentDriveId' in parents and trashed = false or sharedWithMe" - } else { - "name contains '$name' and '$parentDriveId' in parents and trashed = false" - } + val fileListQuery = client().files().list().setFields("files(id,mimeType,name,size)") + fileListQuery.q = "name contains '$name' and '$parentDriveId' in parents and trashed = false" return fileListQuery.execute().files.firstOrNull { it.name == name } } @@ -135,14 +129,8 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl .list() // .setFields("nextPageToken,files(id,mimeType,modifiedTime,name,size)") // .setPageSize(1000) // - .setSupportsAllDrives(true) // - .setIncludeItemsFromAllDrives(true) // .setPageToken(pageToken) - if (folder.driveId == "root") { - fileListQuery.q = "'" + folder.driveId + "' in parents and trashed = false or sharedWithMe" - } else { - fileListQuery.q = "'" + folder.driveId + "' in parents and trashed = false" - } + fileListQuery.q = "'" + folder.driveId + "' in parents and trashed = false" val fileList = fileListQuery.execute() for (file in fileList.files) { result.add(idCache.cache(GoogleDriveCloudNodeFactory.from(folder, file))) @@ -171,7 +159,6 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl .files() // .create(metadata) // .setFields("id,name") // - .setSupportsAllDrives(true) // .execute() return idCache.cache(GoogleDriveCloudNodeFactory.folder(parentFolder, createdFolder)) } ?: throw ParentFolderIsNullException(folder.name) @@ -193,7 +180,6 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl .setFields("id,mimeType,modifiedTime,name,size") // .setAddParents(targetsParent.driveId) // .setRemoveParents(sourcesParent.driveId) // - .setSupportsAllDrives(true) // .execute() idCache.remove(source) return idCache.cache(GoogleDriveCloudNodeFactory.from(targetsParent, movedFile)) @@ -237,7 +223,6 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl .files() // .update(file.driveId, metadata, it) // .setFields("id,modifiedTime,name,size") // - .setSupportsAllDrives(true) // .execute() } } @@ -260,7 +245,6 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl .files() // .create(metadata, it) // .setFields("id,modifiedTime,name,size") // - .setSupportsAllDrives(true) // .execute() } } @@ -331,7 +315,6 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl client() // .files()[file.driveId] // .setAlt("media") // - .setSupportsAllDrives(true) // .executeMediaAndDownloadTo(it) } } catch (e: HttpResponseException) { @@ -389,7 +372,7 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl @Throws(IOException::class) fun delete(node: GoogleDriveNode) { - client().files().delete(node.driveId).setSupportsAllDrives(true).execute() + client().files().delete(node.driveId).execute() idCache.remove(node) } From 2dd9c00b83f8dffa186b3dde939427cfe68b08e9 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 14 Sep 2021 12:54:46 +0200 Subject: [PATCH 3/5] New Crowdin updates --- .../src/main/res/values-ca-rES/strings.xml | 6 + .../src/main/res/values-ja-rJP/strings.xml | 20 + .../src/main/res/values-ko-rKR/strings.xml | 68 ++++ .../src/main/res/values-nb-rNO/strings.xml | 110 ++++++ .../src/main/res/values-nl-rNL/strings.xml | 10 + .../src/main/res/values-ro-rRO/strings.xml | 371 ++++++++++++++++++ .../src/main/res/values-sv-rSE/strings.xml | 298 +++++++++++++- .../src/main/res/values-zh-rTW/strings.xml | 92 +++++ 8 files changed, 974 insertions(+), 1 deletion(-) diff --git a/presentation/src/main/res/values-ca-rES/strings.xml b/presentation/src/main/res/values-ca-rES/strings.xml index 5549b939..677be1f2 100644 --- a/presentation/src/main/res/values-ca-rES/strings.xml +++ b/presentation/src/main/res/values-ca-rES/strings.xml @@ -156,9 +156,15 @@ Autenticació biomètrica Activar l\'autenticació biomètrica Confirmar el desbloqueig de cara (si està disponible) + Bloquejar l\'app quan passi a segon pla + Bloquejar la intercepció de l\'entrada i mostrar una interfície d\'usuari falsa Bloca les captures de pantalla Bloca les captures de pantalla a les llistes de recents i dins de l\'aplicació Cercar + Cerca en temps real + Actualitzar els resultats de cerca mentre s\'escriu la consulta + Cercar amb patró glob + Usar la coincidència del patró glob com alice.*.jpg Bloca automàticament Bloca després de Quan la pantalla està desactivada diff --git a/presentation/src/main/res/values-ja-rJP/strings.xml b/presentation/src/main/res/values-ja-rJP/strings.xml index c817b8aa..a64ab1fa 100644 --- a/presentation/src/main/res/values-ja-rJP/strings.xml +++ b/presentation/src/main/res/values-ja-rJP/strings.xml @@ -157,8 +157,12 @@ 顔認証のロック解除 (利用できる場合) 他のアプリが重なるときにアプリを停止 スクリーンショットをブロック + アプリ内や「最近使ったアプリ」でスクリーンショットを表示しない 検索 ライブ検索 + クエリを入力中に検索結果を更新する + glob パターンを使用して検索 + alice.*.jpg のような glob パターン一致を使用する 自動的な施錠 次の場合にロックする 画面がロックされたとき @@ -288,14 +292,25 @@ この操作はフォルダーの内容をすべて削除します。本当にこのフォルダーを削除してもよろしいですか? 生体認証機能が無効になりました 有効なライセンスを入力してください + Google Play Store を使用せずに Cryptomator をインストールしたことを検出しました。有効なライセンスを購入してください: https://cryptomator.org/android/ + 入力されたライセンスが無効です。正しく入力されていることを確認してください。 + ライセンスがありません。有効なライセンスを入力してください。 終了 + ライセンスの確認 + %1$s-san 有効なライセンスを入力していただきありがとうございます。 利用可能なアップデートがあります + Cryptomator を最新のバージョンに更新します。OK を押すとバックグラウンドでアプリがダウンロードされ、インストール可能になると通知されます。 すぐに更新 ダウンロード サイトに行く あとで ダウンロード中 Cryptomator の最新バージョンをダウンロード中 + フォルダがシンボリック リンクです + このシンボリック リンクに移動することはできません 戻る + ディレクトリのコンテンツを読み込むことができません + 表示する画像がありません… + \'%1$s\' の資格情報が更新されました ローカルの金庫を使用するには、Cryptomator がストレージにアクセスする許可が必要です 自動的に画像をアップロードするには、Cryptomator がストレージにアクセスする許可が必要です @@ -337,7 +352,9 @@ 写真の自動アップロードが完了しました %1$d 個の画像を金庫にアップロードしました 写真の自動アップロードが失敗しました + アップロード中は金庫が施錠されます。続けるには金庫を再度開いてください。 書き込み可能なファイルを開く + 編集が完了するまで金庫は施錠されます 最新バージョンがインストールされました キャッシュ キャッシュの合計サイズ @@ -347,7 +364,10 @@ %1$s 更新確認の間隔 更新の確認 + 最終実行 %1$s + クラウドごとのキャッシュ サイズ + インスタント 1分 2分 5分 diff --git a/presentation/src/main/res/values-ko-rKR/strings.xml b/presentation/src/main/res/values-ko-rKR/strings.xml index 1c3d4a89..84cdd18e 100644 --- a/presentation/src/main/res/values-ko-rKR/strings.xml +++ b/presentation/src/main/res/values-ko-rKR/strings.xml @@ -1,29 +1,72 @@ + 암호화 + 오류가 발생했습니다 + 인증에 실패했습니다. + 인증에 실패했습니다, %1$s를 사용하여 로그인 하십시요. + 네트워크가 연결되어 있지 않습니다. + 잘못된 비밀번호입니다. + 파일 또는 폴더가 이미 존재합니다. + 지원되지 않는 Vault입니다. 이 Vault는 다른 버전의 Cryptomator로 생성되었습니다. + Vault가 이미 존재합니다. + 파일이 존재하지 않습니다. + Vault가 잠겼습니다. + 서버를 찾을 수 없습니다 설정 다음 + A - Z + Z - A 제거 Vault + 이동 + 빈 폴더 + %1$s 전 변경됨 선택 + %1$s에 추가 + 폴더 생성 + 텍스트 파일 생성 + 파일 업로드 + 파일 + 다운로드 디렉터리 생성에 실패하였습니다 + 공유하기 + 이름 변경 수정 + 내보내기 + 삭제 + 아이템 선택 + %1$d 항목 선택됨 + … 선택 + 전체 선택 + 새로고침 + 연결 없음 + 재시도 + 성공적으로 저장되었습니다 + 텍스트 + 파일 + 파일 + 저장 위치 + 저장 + 암호화 완료 URL 사용자명 비밀번호 + 연결 + 액세스 키 생성 @@ -34,6 +77,21 @@ 강함 일반 + 자동 잠금 + 다음 시간 이후 잠금 + 화면이 꺼졌을 때 + 사진 자동 업로드 + 업로드 할 Vault 선택 + 활성화 + Wi-Fi 상태에서만 업로드 + 동영상 업로드 + 법적 사항 + 라이센스 + 라이센스 약관 + 지원 + 디버그 모드 + 로그파일 전송 + 버전 @@ -42,9 +100,19 @@ 취소 잠금해제 + 이전 비밀번호 + 신규 비밀번호 + 비밀번호 변경 제거 + 교체 + 교체 OK + 취소 + text.txt + 이 Vault를 정말로 제거하시겠습니까? + … 업로드 중 + … 업로드 중 잠금 닫기 뒤로 diff --git a/presentation/src/main/res/values-nb-rNO/strings.xml b/presentation/src/main/res/values-nb-rNO/strings.xml index 4a37ef46..ba6f4cf6 100644 --- a/presentation/src/main/res/values-nb-rNO/strings.xml +++ b/presentation/src/main/res/values-nb-rNO/strings.xml @@ -1,33 +1,119 @@ + Krypter + En feil oppstod + Autentisering feilet + Autentisering feilet. Logg inn med %1$s + Ingen nettverkstilkobling + Feil passord + En fil eller mappe finnes allerede. + Hvelvet finnes allerede. + Filen finnes ikke. + Hvelvet har blitt låst. + Skylagringen finnes allerede. + Lokal lagring + Innstillinger + Søk + Forrige Neste + Sorter + A - Å + Å - A + Nyeste først + Eldste først + Største først + Minste først + Legg til i Cryptomator + Lag et nytt hvelv + Legg til et eksisterende hvelv + Fjern + Klikk her for å lage et nytt hvelv Hvelv + Plasser her + Hvelvnavn: %1$s + Flytt + Tom mappe + endret for %1$s siden + Del med Velg + Opprett mappe + Lag en tekstfil + Last opp filer + Filer + Fil eksportert + Filer eksportert + Ingenting å eksportere + Opprettelse av nedlastingsmappe feilet + Del + Endre navn + Rediger + Eksporter + Slett + Åpne med… + %1$d valgt + Velg alle + Oppdater + Ingen forbindelse + Prøv igjen + Vellykket lagring + Lagre %1$s til… + tekst + fil + filer + Lagre + Skylagringstjeneste + URL + Brukernavn Passord + Hvelvnavn + Opprett + Angi passord Ferdig + Gjenta passordet Svakt Ok Sterkt + Veldig sterkt Generelt + Skylagringstjenester + Søk + Lås etter + Aktiver + Last opp videoer + Cryptomators nettside + Følg oss på Twitter + Lik oss på Facebook + Juridisk + Lisenser + Brukerstøtte + Be om hjelp + Feilsøkingsmodus + Send loggfil + Sending feilet + Versjon + Avanserte innstillinger + WebDAV-tilkoblinger + pCloud-tilkoblinger + Logg inn i @@ -35,9 +121,21 @@ Avbryt Lås opp + Gjeldende passord + Nytt passord + Bytt passord + Feltet for gjeldende passord kan ikke være tomt. + Feltet for nytt passordet kan ikke være tomt. + Fjern + Filen finnes allerede + Erstatt + Erstatt alle + Erstatt Lås Lukk + Er du sikker på at du vil fjerne denne skylagringstilkoblingen? + Denne handlingen vil fjerne skylagringsforbindelsen og alle hvelv i denne skyen. Tilbake @@ -46,8 +144,20 @@ minutter + Hurtigminne + Hurtigminnet åpnet nylig filer som er kryptert lokalt på enheten, for senere gjenbruk når de åpnes igjen + Total hurtigminnestørrelse + Tøm hurtigminnet + Endringer vil bli tatt i bruk ved neste omstart av appen + Hurtigminnestørrelse per sky + 50 MB + 100 MB + 250 MB + 500 MB + 1 GB + 5 GB Lys Mørk diff --git a/presentation/src/main/res/values-nl-rNL/strings.xml b/presentation/src/main/res/values-nl-rNL/strings.xml index 84a6265e..dc33b391 100644 --- a/presentation/src/main/res/values-nl-rNL/strings.xml +++ b/presentation/src/main/res/values-nl-rNL/strings.xml @@ -1,7 +1,17 @@ + Versleutelen + Er is een fout opgetreden + Authenticatie mislukt + Geen netwerkverbinding + Fout wachtwoord + Een bestand of map bestaat reeds. + Niet-ondersteunde Vault. Deze Vault is gemaakt met een andere versie van Cryptomator. + Vault bestaat reeds. + Bestand bestaat niet. + Vault is vergrendeld. diff --git a/presentation/src/main/res/values-ro-rRO/strings.xml b/presentation/src/main/res/values-ro-rRO/strings.xml index bede0f6c..f4d7f229 100644 --- a/presentation/src/main/res/values-ro-rRO/strings.xml +++ b/presentation/src/main/res/values-ro-rRO/strings.xml @@ -1,38 +1,409 @@ + Criptează + A apărut o eroare + Autentificare eșuată + Autentificare eșuată, vă rugăm să vă conectați din nou prin %1$s + Nu există conexiune la rețea + Parolă greşită + Un fișier sau dosar există deja. + Seif nesuportat. Acest seif a fost creat cu o altă versiune de Cryptomator. + Seiful există deja. + Fișierul nu există. + Seiful a fost blocat. + Acest cloud există deja. + Vă rugăm să descărcați o aplicație care poate deschide acest fișier. + Serverul nu a fost găsit. + Deschideți setările dispozitivelor dvs. și setați blocarea ecranului manual + Exportul a eșuat. Încercați să eliminați caracterele speciale din numele fișierelor și să exportați din nou. + Nu poate să conțină caractere speciale. + Numele fișierelor nu pot conține caractere speciale. + Numele seifului nu poate conține caractere speciale. + Verificarea actualizării a eșuat. A apărut o eroare generală. + Verificarea actualizării a eșuat. Hash-ul calculat nu se potrivește cu fișierul încărcat + Verificarea actualizării a eșuat. Nu există conexiune la internet. + Nu s-a reușit decriptarea parolei WebDAV, vă rugăm să o introduceți din nou în setări + Serviciile Play nu sunt instalate + Autentificare biometrică anulată + Versiunea specificată în vault.cryptomator este diferită de masterkey.cryptomator + vault.cryptomator nu se potrivește cu acest masterkey.cryptomator + Eroare generală în timpul încărcării configurației seifului + Fișierul local nu mai este prezent după ce s-a trecut înapoi la Cryptomator. Modificările posibile nu pot fi propagate înapoi în cloud. + Nu există așa găleată + Nu este suportată încă utilizarea locației personalizate pentru masterkey + Stocare locală + Cryptomator are nevoie de acces la stocare pentru a exporta fișiere + Cryptomator are nevoie de acces la stocare pentru a încărca fișiere + Cryptomator are nevoie de acces la stocare pentru a exporta fișiere + Setări + Căutare + Precedentul + Următorul + Sortare + A - Z + Z - A + Cele mai noi mai întâi + Cel mai vechi mai întâi + Cele mai mari mai întâi + Cele mai mici mai întâi + Adaugă la Criptomator + Creează seif nou + Adaugă seif existent + Șterge + Faceți clic aici pentru a crea un seif nou + Parola a fost modificată cu succes + Seif + Selectaţi fişierul Masterkey + Plasează aici + Numele seifului: %1$s + + Mută %1$s în + Mută %2$d elemente la + Mută %2$d elemente la + + Mută + Dosar gol + modificat %1$s în urmă + Distribuie cu + Alegeți o destinație + Alegeți + Nimic de distribuit + Adaugă la %1$s + Creați un dosar + Creați fișier text + Încarcă fişiere + Fișiere + Fișier exportat + Fișiere exportate + Nimic de exportat + Acțiunea de creare a dosarului de descărcări a eșuat + Distribuie + Redenumește + Editează + Exportă + Șterge + Deschideți cu… + Selectați elemente + %1$d selectate + Selectează… + Selectează tot + Împrospătează + Nu există conexiune + Încercați din nou + Salvat cu succes + Salvează %1$s în… + text + fişier + fișiere + Numele fișierelor trebuie să fie unic, vă rugăm să redenumiți duplicatele. + Salvați locația + Salvează + Criptare finalizată + Serviciu Cloud + Alegeți o locație + Faceți clic aici pentru a adăuga locații + Serverul nu pare să fie compatibil cu WebDAV + Locații personalizate + Spațiu de stocare prestabilit + Nu există locații suplimentare disponibile. + Adresa URL + Nume de utilizator + Parolă + Conectare + URL-ul nu poate fi gol. + URL-ul nu este valid. + Numele de utilizator nu poate fi gol. + Parola nu poate fi goală. + Nume afișat + Cheia de acces + Cheia secretă + Găleată existentă + Endpoint + Regiune + Numele afișat nu poate fi gol + Cheia de acces nu poate fi goală + Cheia secretă nu poate fi goală + Găleata nu poate fi goală + Endpoint sau regiunea nu poate fi goală + Numele seifului nu poate fi gol. + Nume seif + Creează + Setează parola + Parola nu corespunde parolei reintroduse. + Terminat + IMPORTANT: Dacă vă uitați parola, nu există nicio modalitate de a vă recupera datele. + Reintroduceţi parola + Prea slabă pentru a crea un seif + Slabă + Acceptabilă + Puternică + Foarte puternică + Setări Generale + Servicii cloud + Autentificarea biometrică + Activează autentificarea biometrică + Confirmă deblocarea facială (dacă este disponibilă) + Blochează aplicația când este ascunsă + Blochează interceptarea intrării și afișarea unei interfețe false a utilizatorului + Blocare capturi ecran + Blochează capturile de ecran în lista de aplicații recente și în interiorul aplicației + Căutare + Căutare live + Actualizează rezultatele căutării în timpul introducerii interogării + Caută folosind modelul glob + Utilizați modelul glob care se potrivește ca alice.*.jpg + Blocare automată + Blocare automată după + Când ecranul este dezactivat + Încărcare automată a fotografiilor + Alege seiful pentru încărcare + Activează + Capturează imagini în fundal și odată ce seiful selectat este deblocat, începe încărcarea + Încărcaţi numai folosind WIFI + Încarcă fişiere video + Salvați fișierele încărcate automat în… + Pagina web a aplicației Cryptomator + Urmăriți-ne pe Twitter + Dă-ne un Like pe Facebook + Aspecte legale + Licențe + Termenii şi condiţii + Suport + Solicită ajutor + Mod de depanare + Trimiteți fişierul jurnal + Trimitere eșuată + Indicații de securitate + Versiune + Setări avansate + Accelerează deblocarea + Descărcați configurarea seifului în fundal în timp ce vi se solicită introducerea parolei sau a autentificării biometrice + Păstrați deblocat + Păstrați seifele deblocate în timpul editării fișierelor + Conexiuni WebDAV + conexiuni pCloud + Conexiuni S3 + Locații de stocare locală + Conectați-vă la + Deconectare de la + %1$s nu a putut fi autentificat. + Actualizare acreditări pCloud + \'%1$s\' inaccesibil + Cryptomator a detectat că acest dosar este inaccesibil. + Este posibil să fi fost şters de o altă aplicaţie sau o sincronizare în nor defectuoasă ar fi putut cauza acest lucru.\n\nÎncercaţi să restauraţi fişierul director, prin intermediul furnizorului dvs. cloud, la o versiune anterioară care nu este goală. Fișierul în cauză este:\n%1$s\n\nDacă nu funcționează, puteţi utiliza Sanitizer pentru a verifica seiful dumneavoastră pentru probleme şi, posibil, pentru a restabili datele. + Mai multe detalii despre Sanitizer + Anulează + Deblocați + Parola veche + Parola nouă + Schimbați parola + Parola veche nu poate fi goală. + Parola nouă nu poate fi goală. + Parola nouă nu se potrivește cu parola reintrodusă. + Seiful %1$s nu a fost găsit + Seiful a fost redenumit, mutat sau şters. Ştergeţi acest seif format din listă şi adăugaţi-l din nou pentru a continua. Ștergeți acum? + Șterge + Fişierul există deja + Înlocuiește + Un fişier numit \'%1$s\' există deja. + Sari peste existente + Înlocuiește tot + Înlocuiește existente + Înlocuiește + Un fișier numit \'%1$sexistă deja. Doriți să îl înlocuiți? + Toate fișierele există deja. Doriți să le înlocuiți? + %1$d fișiere deja există. Doriți să le înlocuiți? + Înlocuiţi fişierul? + Înlocuiţi fişierele? + Imposibil de partajat fișierele + Nu ați setat nici un seif. Vă rugăm să creați mai întâi un seif nou cu aplicația Cryptomator. + OK + Crează seif + Nu se poate deschide %1$s + Vă rugăm să descărcați o aplicație care poate deschide acest fișier sau doriți să salvați pe dispozitiv? + Redenumire seif + Redenumiți dosarul + Redenumiţi fişierul + Aveți câteva modificări nesalvate + Sigur doriți să ieșiți fără a salva? + Renunţaţi + text.txt + Sunteţi sigur că doriţi să ştergeţi acest seif? + Această acţiune va elimina seiful doar din această listă şi nu îl va şterge fizic. + Se încarcă… + Fișier %1$d din %2$d + Exportare (%1$d/%2$d) + Vă rugăm să aşteptaţi … + Se creează dosarul… + Se creează fișierele text… + Autentificare… + Redenumire… + Ștergere… + Deblocare seif… + Se schimbă parola… + Se creează seif… + Se încarcă… + Se descarcă… + Criptare… + Decriptare… + Se mută… + Blocaţi + Certificat SSL invalid + Certificatul SSL este invalid. Doriți să aveți încredere în el oricum? + Detalii + Acesta ar putea fi un risc pentru securitate. Ştiu ce fac. + Utilizarea HTTP este nesigură. Vă recomandăm să utilizați HTTPS în schimb. Dacă cunoașteți riscurile, puteți continua cu HTTP. + Schimbare la HTTPS + Folosiți HTTPS? + Nu este setată nicio blocare a ecranului. Pentru a stoca acreditările într-un mod sigur, setați cu OK un model sau o parolă. + Setați blocarea ecranului? + Setați blocarea ecranului + Nicio autentificare de bază configurată în sistem + E nevoie de cel puțin un deget sau o față pentru a utiliza acest serviciu. + În acest mod, datele sensibile pot fi scrise într-un fișier jurnal de pe dispozitivul dumneavoastră (de exemplu, nume de fișiere și căi de fișiere). Parolele, cookie-urile etc. sunt excluse în mod explicit.\n\nNu uitați să dezactivați modul de depanare cât mai curând posibil. + Atenție + Activează + Această setare este o caracteristică de securitate și previne alte aplicații să păcălească utilizatorii să facă lucruri pe care nu ar trebui să le facă.\n\nPrin dezactivare, confirmați că sunteți conștient de riscurile. + Atenție + Dezactivează + Aplicația este ascunsă + O altă aplicație afișează ceva deasupra Cryptomator (de exemplu, un filtru de lumină albastră sau o aplicație pentru modul de noapte). Din motive de securitate, Cryptomator este dezactivat.\n\nCum să activezi Cryptomator + Închide + Această setare este o caracteristică de securitate și previne alte aplicații să păcălească utilizatorii să facă lucruri pe care nu ar trebui să le facă.\n\nPrin dezactivare, confirmați că sunteți conștient de riscurile. + Sunteţi sigur că doriţi să eliminaţi această conexiune cloud? + Această acțiune va elimina conexiunea în cloud și toate seifurile acestui cloud. + Ștergeți %1$d elemente? + Sunteţi sigur că doriţi să ştergeţi aceste elemente? + Sunteţi sigur că doriţi să ştergeţi acest fişier? + Aceasta va şterge tot conţinutul dosarului. Sunteţi sigur că doriţi să ştergeţi acest dosar? + Funcția de autentificare biometrică dezactivată + Deoarece cheia a fost invalidată, elementul de autentificare biometrică a fost dezactivat. Pentru a putea fi reutilizat, deschideți setările Cryptomator. + Furnizați o licență validă + Am detectat că ați instalat Cryptomator fără să utilizați Google Play Store. Furnizați o licență validă, care poate fi cumpărată pe https://cryptomator.org/android/ + Licența furnizată nu este validă. Asigurați-vă că ați introdus-o corect. + Nici o licență furnizată. Introduceți o licență validă. + Ieșire + Confirmare licență + Vă mulțumim %1$s pentru furnizarea licenței dvs. valide. + Actualizare disponibilă + Actualizare Cryptomator la ultima versiune. Apăsând OK vom descărca aplicația în fundal și vă vom cere să o instalați. + Actualizează acum + Mergeți la site-ul pentru descărcări + Mai târziu + Rulează descărcarea + Se descarcă ultima versiune de Cryptomator + Dosarul este un link simbolic + Nu puteți naviga în acest link simbolic + Înapoi + Nu s-a putut încărca conținutul dosarului + Dosarul Cloud \'%1$s\' nu are un fișier dosar. Poate fi că dosarul a fost creat pe un alt dispozitiv și nu a fost încă complet sincronizat cu cloudul. Vă rugăm să verificaţi în cloud dacă următorul fişier există:\n%2$s + Nu mai sunt imagini de afișat… + Acreditări ale \'%1$s\' au fost actualizate + Dacă doriți să adăugaţi un cont nou de tip pCloud, faceţi clic pe acest link www.pcloud. om, deconectați-vă de la contul curent, și faceți clic din nou pe \'+\' din această aplicație pentru a crea o nouă conexiune cloud. + Cryptomator are nevoie de acces la stocare pentru a utiliza seifuri locale + Cryptomator are nevoie de acces la stocare pentru a folosi încărcarea automată a fotografiilor + Zero kB + octeți + kB + MB + GB + TB + secundă + secunde + minut + minute + oră + ore + zi + zile + săptămână + săptămâni + lună + luni + an + ani + Autentificare biometrică + Autentifică-te folosind acreditările biometrice + Utilizați parola seif + Imposibil de încărcat automat fișierele + Seifuri deblocate: %1$d + Autoblocare în %1$s + Blochează toate + Anulare încărcare + Rulează autoîncărcarea de fotografii + Se încarcă %1d/%2d + Încărcarea automată a pozei a fost finalizată + %1$d imagini încărcate în seif + Încărcarea automată a fotografiei a eșuat + Eroare generală în timpul încărcării. + Dosarul selectat pentru încărcare nu mai este disponibil. Mergeți la setări și alegeți unul nou + Seif blocat în timpul încărcării, vă rugăm să redeschideți seiful pentru a continua + Deschide fișier inscriptibil + Seiful rămâne deblocat până la editarea finalizată + Ultima versiune instalată + Memorie cache + Recent memoria cache a accesat fișiere criptate local pe acest dispozitiv pentru a fi reutilizare ulterior la redeschidere + Total memorie cache + Golește memoria cache + Modificările vor fi aplicate la următoarea repornire a aplicației + Înregistrat pentru + %1$s + Interval de verificare a actualizărilor + Verifică actualizări + Ultima execuție %1$s + Dimensiune cache pentru fiecare Cloud + Instant + Un minut + 2 minute + 5 minute + 10 minute + Niciodată + 50 MB + 100 MB + 250 MB + 500 MB + 1 GB + 5 GB + Aspect + Automat (conform tematicii de sistem) + Luminos + Întunecat + O dată pe zi + O dată pe săptămână + O dată pe lună diff --git a/presentation/src/main/res/values-sv-rSE/strings.xml b/presentation/src/main/res/values-sv-rSE/strings.xml index 663201c4..23ab2b26 100644 --- a/presentation/src/main/res/values-sv-rSE/strings.xml +++ b/presentation/src/main/res/values-sv-rSE/strings.xml @@ -58,55 +58,351 @@ Skapa nytt valv Lägg till befintligt valv Ta bort + Klicka här för att skapa ett nytt valv + Lösenordet har ändrats Valv + Välj Masterkey-fil + Placera här + Valvets namn: %1$s + + Flytta %1$s till + Flytta %2$d objekt till + + Flytta + Tom mapp + ändrad för %1$s sedan + Dela med + Välj destination Välj - Ändra + Inget att dela + Lägg till i %1$s + Skapa mapp + Skapa en textfil + Ladde upp filer + Filer + Fil exporterad + Filer exporterade + Inget att exportera + Det gick inte att skapa nedladdningskatalog + Dela + Byt namn + Redigera + Exportera + Ta bort + Öppna med… + Välj objekt + %1$d har markerats + Välj … + Välj alla + Uppdatera + Ingen anslutning + Försök igen + Sparad + Spara %1$s till… + text + fil + filer + Filnamn måste vara unika, vänligen byt namn på dubbletter. + Spara plats + Spara + Kryptering slutförd + Molntjänst + Välj en plats + Klicka här för att lägga till platser + Servern verkar inte vara WebDAV-kompatibel + Anpassad plats + Förvald lagring + Inga ytterligare platser tillgängliga. URL Användarnamn Lösenord + Anslut + URL kan ej vara tom. + URL: en är ogiltig. + Användarnamn får inte vara tomt. + Lösenord får inte vara tomt. + Visningsnamn + Access key + Secret key + Befintlig Bucket + Endpoint + Region + Visningsnamn får inte vara tomt + Access key får inte vara tom + Secret key får inte vara tom + Bucket får inte vara tomt + Endpoint eller region får inte vara tom + Valvnamn får inte vara tomt. + Valvnamn Skapa + Ange lösenord + Lösenordet matchar inte det andra lösenordet. Klar VIKTIGT: Om du glömmer ditt lösenord finns det inget sätt att återställa dina data. + Skriv lösenordet igen + För svag för att skapa ett valv Svagt Skapligt Starkt + Mycket starkt Allmänt + Molntjänster + Biometrisk autentisering + Aktivera biometrisk autentisering + Bekräfta ansiktsupplåsning (om tillgängligt) + Blockera appen när den är täckt + Blockera indata och visning av falska användargränssnitt + Blockera skärmdumpar + Blockera skärmdumpar i Senaste-listan samt inuti appen Sök + Live-sökning + Uppdatera sökresultaten medans du skriver + Sök med hjälp av globala mönster + Använd globala mönster som matchar t.ex. alice.*.jpg + Automatiskt lås + Lås efter + När skärmen är inaktiverad + Automatisk fotouppladdning + Välj valv för uppladdning + Aktivera + Registrerar bilder i bakgrunden och när det valda valvet är upplåst, startas uppladdning + Ladda endast upp med WIFI + Ladda upp video + Spara automatiskt uppladdade filer till… + Cryptomator webbplats + Följ oss på Twitter + Gilla oss på Facebook + Juridiskt + Licenser + Licensvillkor + Support + Be om hjälp + Felsökningsläge + Skicka loggfil + Sändningen misslyckades + Säkerhetstips + Version + Avancerade inställningar + Accelerera upplåsning + Ladda ner valvkonfiguration i bakgrunden medan du uppmanas att låsa upp + Behåll olåst + Håll valven upplåsta medan filer ändras + WebDAV-anslutningar + pCloud-anslutningar + S3 anslutningar + Lokala lagringsplatser + Logga in på %1 + Logga ut från {0} + %1$s kunde inte autentiseras. + Uppdatera pCloud-uppgifter + \'%1$s\' onåbar + Cryptomator upptäckte att den här mappen inte kan nås. + Det kan ha tagits bort av ett annat program eller en felaktig molnsynkronisering.\n\nFörsök att återställa katalogfilen via din molnleverantör till en tidigare version som inte är tom. Filen i fråga är:\n%1$s\n\nOm det inte fungerar kan använda Sanitizer för att kontrollera problem i ditt valv och eventuellt återställa dina data. + Mer information om Sanitizer Avbryt Lås upp + Gammalt lösenord + Nytt lösenord + Byt lösenord + Gammalt lösenord får inte vara tomt. + Nytt lösenord får inte vara tomt. + De både lösenorden matchar inte. + Valvet %1$s hittades inte + Valvet har döpts om, flyttats eller tagits bort. Ta bort detta valv från listan och lägg till det igen för att fortsätta. Ta bort nu? Ta bort + Filen finns redan + Ersätt + En fil som heter \'%1$s\' finns redan. + Hoppa över befintliga + Ersätt alla + Ersätt befintliga + Ersätt + Filen %1$s finns redan. Vill du ersätta den? + Alla filer finns redan. Vill du ersätta dem? + %1$d filer finns redan. Vill du ersätta dem? + Ersätt fil? + Ersätt filer? + Kunde inte dela filer + Du har inte konfigurerat några valv. Skapa ett nytt valv med Cryptomator-appen först. OK + Skapa Valv + Kan inte öppna %1$s + Ladda ner en app som kan öppna den här filtypen eller spara till din enhet? + Döp om valv + Döp om mapp + Döp om fil + Du har osparade ändringar + Vill du avsluta utan att spara? + Kasta + text.txt + Är du säker på att du vill ta bort detta valv? + Denna åtgärd kommer bara att ta bort valvet från denna lista och inte ta bort det fysiskt. + Laddar upp… + Fil %1$d av %2$d + Exporterar (%1$d/%2$d) + Vänligen vänta… + Skapar mapp… + Skapar textfil… + Autentiserar… + Byter namn… + Tar bort… + Låser upp valvet… + Ändrar lösenord… + Skapar valv… + Laddar upp… + Laddar ner… + Krypterar… + Dekrypterar… + Flyttar… Lås + Ogiltigt SSL-certifikat + SSL-certifikatet är ogiltigt. Vill du lita på det ändå? + Detaljer + Det kan vara en säkerhetsrisk. Jag vet vad jag gör. + Användning av HTTP är osäkert. Vi rekommenderar att du använder HTTPS istället. Om du känner till riskerna kan du fortsätta med HTTP. + Ändra till HTTPS + Använd HTTPS? + Inget skärmlås är inställt. För att lagra dina uppgifter på ett säkert sätt, välj OK för att ange ett mönster eller lösenord. + Ange skärmlås? + Ställ in skärmlås + Ingen grundläggande autentisering konfigurerad i systemet + Registrera minst ett finger/ansikte för att använda denna tjänst. + I detta läge kan känsliga data skrivas till en loggfil på din enhet (t.ex. filnamn och sökvägar). Lösenord, cookies etc. är uttryckligen uteslutna.\n\nKom ihåg att inaktivera felsökningsläge så snart som möjligt. + Observera + Aktivera + Den här inställningen är en säkerhetsfunktion och hindrar andra appar från att lura användare att göra saker de inte vill göra.\n\nGenom att inaktivera bekräftar du att du är medveten om riskerna. + Observera + Inaktivera + Appen är täckt + En annan app visar något ovanpå Cryptomator (t.ex., ett blått ljusfilter eller nattläge app). Av säkerhetsskäl är Cryptomator inaktiverad.\n\nSå här aktiverar du Cryptomator Stäng + Den här inställningen är en säkerhetsfunktion och hindrar andra appar från att lura användare att göra saker de inte vill göra.\n\nGenom att inaktivera bekräftar du att du är medveten om riskerna. + Är du säker på att du vill ta bort den här molnanslutningen? + Denna åtgärd kommer att ta bort molnanslutningen och alla valv i detta moln. + Ta bort %1$d objekt? + Är du säker på att du vill ta bort dessa objekt? + Är du säker på att du vill ta bort denna fil? + Detta kommer att ta bort allt innehåll i mappen. Är du säker på att du vill ta bort denna mapp? + Biometrisk autentiseringsfunktion inaktiverad + Eftersom nyckeln har ogiltigförklarats har den biometriska autentiseringsfunktionen avaktiverats. För att återaktivera, öppna Cryptomatorns inställningar. + Ange en giltig licens + Vi upptäckte att du installerade Cryptomator utan att använda Google Play Store. Ange en giltig licens, som kan köpas på https://cryptomator.org/android/ + Den angivna licensen är inte giltig. Se till att du angav den korrekt. + Ingen licens angiven. Ange en giltig licens. + Avsluta + Licensinformation + Tack %1$s för att du angivit din giltiga licens. + Uppdatering tillgänglig + Uppdatera Cryptomator till den senaste versionen. Genom att trycka på OK kommer vi att ladda ner appen i bakgrunden och be dig att installera den. + Uppdatera nu + Gå till nedladdningssida + Senare + Nedladdningen körs + Laddar ner senaste versionen av Cryptomator + Mappen är en symbolisk länk + Du kan inte gå till denna symboliska länk Bakåt + Det går inte att ladda innehållet i katalogen + Moln-mappen \'%1$s\' har inte en katalogfil. Det kan bero på att mappen skapades på en annan enhet och ännu inte har synkroniserats fullt ut med molnet. Kontrollera i ditt moln om följande fil finns:\n%2$s + Inga fler bilder att visa… + Användaruppgifter för \'%1$s\' uppdaterad + Om du tänkte lägga till ett nytt pCloud-konto, klicka på denna url www.pcloud. Om, logga ut från det aktuella kontot och klicka igen på \'+\' i den här appen för att skapa en ny molnanslutning. + Cryptomator behöver åtkomst till lagringsutrymmet för att använda lokala valv + Cryptomator behöver åtkomst till lagringsutrymmet för att kunna använda automatisk uppladdning av foton + Noll kB + bytes + kB + MB + GB + TB + sekund + sekunder + minut minuter + timme + timmar + dag + dagar + vecka + veckor + månad + månader + år + år + Biometrisk inloggning + Logga in med din biometriska referens + Använd valvlösenord + Det går inte att ladda upp filer automatiskt + Valv upplåst: %1$d + Automatiskt lås om %1$s + Lås alla + Avbryt uppladdning + Automatisk fotouppladdning körs + Laddar upp %1d/%2d + Automatisk fotouppladdning slutförd + %1$d bilder uppladdade till valvet + Automatisk fotouppladdning misslyckades + Allmänt fel uppstod under uppladdning. + Vald mapp för uppladdning finns inte längre. Gå till inställningar och välj en ny + Valv låstes under uppladdningen, vänligen öppna valvet för att fortsätta + Öppna skrivbar fil + Valvet är upplåst till färdig redigering + Senaste versionen installerad + Cache + Cachen har nyligen kommit åt filer krypterade lokalt på enheten för senare återanvändning när de öppnas igen + Total cachestorlek + Rensa cachen + Ändringar kommer att tillämpas vid omstart av appen + Registrerad till + %1$s + Uppdateringsintervall + Sök efter uppdateringar + Senaste körning %1$s + Cache-storlek per moln + Omedelbart + 1 minut + 2 minuter + 5 minuter + 10 minuter + Aldrig + 50 MB + 100 MB + 250 MB + 500 MB + 1 GB + 5 GB + Stil + Automatisk (följ systemet) Ljust Mörkt + Varje dag + Varje vecka + Varje månad diff --git a/presentation/src/main/res/values-zh-rTW/strings.xml b/presentation/src/main/res/values-zh-rTW/strings.xml index ce809d8f..2bda23c8 100644 --- a/presentation/src/main/res/values-zh-rTW/strings.xml +++ b/presentation/src/main/res/values-zh-rTW/strings.xml @@ -4,23 +4,94 @@ 加密 發生了一個錯誤 + 認證失敗 + 認證失敗,請重新使用 %1$s 登綠。 + 沒有網路連線 + 密碼錯誤 + 該檔案或資料夾已存在。 + 不支援的加密檔案庫。這個加密檔案庫是用其它版本的 Cryptomator 所建立的。 + 保險箱已經存在。 + 檔案不存在。 + 加密檔案庫已鎖定。 + 雲端硬碟已經存在。 + 請下載行動裝置應用程式來打開這個檔案。 + 找不到伺服器。 + 請打開你的裝置設定,再手動設定螢幕鎖定。 + 資料匯出失敗。請把檔案名稱中的特殊字元刪除後,再重新匯出資料。 + 不能含有特殊字元。 + 檔案名稱不能含有特殊字元。 + 加密檔案庫的名稱不能含有特殊字元。 + 檢查更新失敗。發生一般錯誤。 + 本機儲存空間 + 設定 + 搜尋 + 上一頁 繼續 + 排序 + 以英文字母A至Z排序 + 以英文字母Z至A排序 + 最新的優先 + 最舊的優先 + 最大的優先 + 最小的優先 + 加到 Cryptomator + 新建加密檔案庫 + 新增至現有的加密檔案庫 移除 加密檔案庫 + 移動 + 清空資料夾 + 分享對象 + 選擇目的地 + 選擇 + 沒有東西可分享 + 建立新資料夾 + 建立新文字檔案 + 上傳檔案 + 檔案 + 檔案已匯出 + 所有的檔案皆已匯出 + 沒有任何東西可匯出。 + 分享 + 重新命名 + 編輯 + 匯出 + 選擇全部 + 重新整理 + 重試 + 儲存成功。 + 文字 + 檔案 + 檔案 + 儲存位置 + 儲存 + 加密已完成 + 雲端服務 + 選擇位置 + 點擊此處新增位置 + 自訂位置 + 網址 密碼 + 連線 + 網址不能為空白 + 網址是無效的 + 使用者名稱不可留空。 + 密碼不可留空。 + 顯示名稱 + 區域 完成 @@ -29,7 +100,22 @@ 一般 + 雲端服務 + 搜尋 + 即時搜尋 + 啟動 + 上傳影片 + 在 Twitter 上追蹤我們 + 在臉書上給我們點讚 + 法律 + 軟體授權 + 技術支援 + 請求協助 + 除錯模式 + 版本 + 進階設定 + 登錄到 @@ -37,8 +123,14 @@ 取消 解鎖 + 舊密碼 移除 + 檔案已經存在 + 取代 + 全部取代 + 取代 + 確認 鎖定 關閉 上一頁 From f4d4eb3c478ecd2b27298df97b87772057971a6a Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 14 Sep 2021 13:14:31 +0200 Subject: [PATCH 4/5] Update dependencies --- buildsystem/dependencies.gradle | 4 ++-- subsampling-scale-image-view | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/buildsystem/dependencies.gradle b/buildsystem/dependencies.gradle index b10eb245..a0788c5b 100644 --- a/buildsystem/dependencies.gradle +++ b/buildsystem/dependencies.gradle @@ -52,7 +52,7 @@ ext { // cloud provider libs cryptolibVersion = '2.0.2' - dropboxVersion = '4.0.0' + dropboxVersion = '4.0.1' googleApiServicesVersion = 'v3-rev20210725-1.32.1' googlePlayServicesVersion = '19.0.0' @@ -72,7 +72,7 @@ ext { jUnitVersion = '5.7.1' jUnit4Version = '4.13.1' assertJVersion = '1.7.1' - mockitoVersion = '3.12.1' + mockitoVersion = '3.12.4' mockitoKotlinVersion = '3.2.0' hamcrestVersion = '1.3' dexmakerVersion = '1.0' diff --git a/subsampling-scale-image-view b/subsampling-scale-image-view index acf19284..fa159ed8 160000 --- a/subsampling-scale-image-view +++ b/subsampling-scale-image-view @@ -1 +1 @@ -Subproject commit acf192842fefda106395b88b8c898873cd95c550 +Subproject commit fa159ed8cd89b2dd4d50f91a447536cdb126c872 From 2e695b38ec89e16d54448dd4101e7f2009717ff7 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 14 Sep 2021 15:02:15 +0200 Subject: [PATCH 5/5] Update to Gradle 7.0.x --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 269 ++++++++++++++--------- msa-auth-for-android | 2 +- presentation/build.gradle | 1 - subsampling-scale-image-view | 2 +- 7 files changed, 164 insertions(+), 117 deletions(-) diff --git a/build.gradle b/build.gradle index b62471d3..4b8b41c9 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.0.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 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 B8dv}T delta 17845 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 X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 40a358b3..0f80bbf5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed May 12 18:12:25 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/msa-auth-for-android b/msa-auth-for-android index 7c0dc9ba..3b48a497 160000 --- a/msa-auth-for-android +++ b/msa-auth-for-android @@ -1 +1 @@ -Subproject commit 7c0dc9baf7ef0e6f5a701fa8817b2e34be67f21b +Subproject commit 3b48a4973fddaec258edfb702fc242261d81cd1c diff --git a/presentation/build.gradle b/presentation/build.gradle index 79429267..d54340b2 100644 --- a/presentation/build.gradle +++ b/presentation/build.gradle @@ -49,7 +49,6 @@ android { crunchPngs false minifyEnabled false shrinkResources false - useProguard false buildConfigField "String", "DROPBOX_API_KEY", "\"" + getApiKey('DROPBOX_API_KEY') + "\"" manifestPlaceholders = [DROPBOX_API_KEY: getApiKey('DROPBOX_API_KEY')] diff --git a/subsampling-scale-image-view b/subsampling-scale-image-view index fa159ed8..c3d912cd 160000 --- a/subsampling-scale-image-view +++ b/subsampling-scale-image-view @@ -1 +1 @@ -Subproject commit fa159ed8cd89b2dd4d50f91a447536cdb126c872 +Subproject commit c3d912cd86e5a7d7b4b627c83ba84276712a215a