mirror of
https://github.com/nextcloud/android.git
synced 2024-12-19 23:42:03 +03:00
Merge remote-tracking branch 'origin/master' into dev
This commit is contained in:
commit
1ef544655f
19 changed files with 125 additions and 5 deletions
|
@ -4,7 +4,7 @@ ARG DEBIAN_FRONTEND=noninteractive
|
|||
ENV ANDROID_HOME=/usr/lib/android-sdk
|
||||
|
||||
RUN apt-get update -y
|
||||
RUN apt-get install -y unzip wget openjdk-11-jdk vim
|
||||
RUN apt-get install -y unzip wget openjdk-17-jdk vim
|
||||
|
||||
RUN wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -O /tmp/commandlinetools.zip
|
||||
RUN cd /tmp && unzip commandlinetools.zip
|
||||
|
|
4
.github/workflows/codeql.yml
vendored
4
.github/workflows/codeql.yml
vendored
|
@ -32,7 +32,7 @@ jobs:
|
|||
with:
|
||||
swap-size-gb: 10
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 # v3.23.0
|
||||
uses: github/codeql-action/init@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
- name: Set up JDK 17
|
||||
|
@ -46,4 +46,4 @@ jobs:
|
|||
echo "org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
|
||||
./gradlew assembleDebug
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 # v3.23.0
|
||||
uses: github/codeql-action/analyze@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1
|
||||
|
|
2
.github/workflows/scorecard.yml
vendored
2
.github/workflows/scorecard.yml
vendored
|
@ -37,6 +37,6 @@ jobs:
|
|||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 # v3.23.0
|
||||
uses: github/codeql-action/upload-sarif@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
|
|
@ -35,6 +35,7 @@ import android.content.Intent;
|
|||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
|
@ -316,6 +317,13 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
|
|||
|
||||
OwnCloudClientManagerFactory.setUserAgent(getUserAgent());
|
||||
|
||||
try {
|
||||
OwnCloudClientManagerFactory.setProxyHost(getResources().getString(R.string.proxy_host));
|
||||
OwnCloudClientManagerFactory.setProxyPort(getResources().getInteger(R.integer.proxy_port));
|
||||
} catch (Resources.NotFoundException e) {
|
||||
// no proxy set
|
||||
}
|
||||
|
||||
// initialise thumbnails cache on background thread
|
||||
new ThumbnailsCacheManager.InitDiskCacheTask().execute();
|
||||
|
||||
|
|
|
@ -366,6 +366,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
|
|||
private void initWebViewLogin(String baseURL, boolean useGenericUserAgent) {
|
||||
viewThemeUtils.platform.colorCircularProgressBar(accountSetupWebviewBinding.loginWebviewProgressBar, ColorRole.ON_PRIMARY_CONTAINER);
|
||||
accountSetupWebviewBinding.loginWebview.setVisibility(View.GONE);
|
||||
new WebViewUtil(this).setProxyKKPlus(accountSetupWebviewBinding.loginWebview);
|
||||
|
||||
accountSetupWebviewBinding.loginWebview.getSettings().setAllowFileAccess(false);
|
||||
accountSetupWebviewBinding.loginWebview.getSettings().setJavaScriptEnabled(true);
|
||||
|
@ -402,6 +403,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
|
|||
url = getResources().getString(R.string.webview_login_url);
|
||||
}
|
||||
|
||||
new WebViewUtil(this).setProxyKKPlus(accountSetupWebviewBinding.loginWebview);
|
||||
if (url.startsWith(HTTPS_PROTOCOL)) {
|
||||
strictMode = true;
|
||||
}
|
||||
|
|
|
@ -49,6 +49,7 @@ import com.owncloud.android.datamodel.SyncedFolderProvider;
|
|||
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
|
||||
import com.owncloud.android.utils.DisplayUtils;
|
||||
import com.owncloud.android.utils.MimeTypeUtil;
|
||||
import com.owncloud.android.utils.WebViewUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
@ -82,6 +83,11 @@ public abstract class EditorWebView extends ExternalSiteWebView {
|
|||
this.url = loadedUrl;
|
||||
|
||||
if (!url.isEmpty()) {
|
||||
new WebViewUtil(getApplicationContext()).setProxyKKPlus(this.getWebView());
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
this.getWebView().loadUrl(url);
|
||||
|
||||
new Handler().postDelayed(() -> {
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.owncloud.android.databinding.ExternalsiteWebviewBinding;
|
|||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
import com.owncloud.android.ui.NextcloudWebViewClient;
|
||||
import com.owncloud.android.utils.DisplayUtils;
|
||||
import com.owncloud.android.utils.WebViewUtil;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
|
@ -160,6 +161,7 @@ public class ExternalSiteWebView extends FileActivity {
|
|||
}
|
||||
});
|
||||
|
||||
new WebViewUtil(getApplicationContext()).setProxyKKPlus(getWebView());
|
||||
getWebView().loadUrl(url);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,12 +21,21 @@
|
|||
|
||||
package com.owncloud.android.utils
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Proxy
|
||||
import android.net.Uri
|
||||
import android.text.TextUtils
|
||||
import android.util.ArrayMap
|
||||
import android.util.Log
|
||||
import android.webkit.WebView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.owncloud.android.R
|
||||
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
|
||||
import java.io.PrintWriter
|
||||
import java.io.StringWriter
|
||||
|
||||
class WebViewUtil(private val context: Context) {
|
||||
|
||||
|
@ -107,4 +116,64 @@ class WebViewUtil(private val context: Context) {
|
|||
private fun getMinimumSupportedMajorWebViewVersion(): String {
|
||||
return "118"
|
||||
}
|
||||
|
||||
/**
|
||||
* From https://stackoverflow.com/a/18453384
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@SuppressLint("PrivateApi", "DiscouragedPrivateApi")
|
||||
fun setProxyKKPlus(webView: WebView) {
|
||||
val proxyHost = OwnCloudClientManagerFactory.getProxyHost()
|
||||
val proxyPort = OwnCloudClientManagerFactory.getProxyPort()
|
||||
|
||||
if (TextUtils.isEmpty(proxyHost) || proxyPort <= 0) {
|
||||
return
|
||||
}
|
||||
|
||||
val applicationClassName = "android.app.Application"
|
||||
Log.d(PROXY_TAG, "Setting proxy with >= 4.4 API.")
|
||||
|
||||
val appContext = webView.context.applicationContext
|
||||
|
||||
System.setProperty("http.proxyHost", proxyHost)
|
||||
System.setProperty("http.proxyPort", proxyPort.toString())
|
||||
System.setProperty("https.proxyHost", proxyHost)
|
||||
System.setProperty("https.proxyPort", proxyPort.toString())
|
||||
try {
|
||||
val applicationClass = Class.forName(applicationClassName)
|
||||
val loadedApkField = applicationClass.getField("mLoadedApk")
|
||||
loadedApkField.isAccessible = true
|
||||
val loadedApk = loadedApkField[appContext]
|
||||
val loadedApkCls = Class.forName("android.app.LoadedApk")
|
||||
val receiversField = loadedApkCls.getDeclaredField("mReceivers")
|
||||
receiversField.isAccessible = true
|
||||
val receivers = receiversField[loadedApk] as ArrayMap<*, *>
|
||||
for (receiverMap in receivers.values) {
|
||||
for (rec in (receiverMap as ArrayMap<*, *>).keys) {
|
||||
val clazz: Class<*> = rec.javaClass
|
||||
if (clazz.name.contains("ProxyChangeListener")) {
|
||||
val onReceiveMethod = clazz.getDeclaredMethod(
|
||||
"onReceive",
|
||||
Context::class.java,
|
||||
Intent::class.java
|
||||
)
|
||||
val intent = Intent(Proxy.PROXY_CHANGE_ACTION)
|
||||
onReceiveMethod.invoke(rec, appContext, intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.d(PROXY_TAG, "Setting proxy with >= 4.4 API successful!")
|
||||
} catch (e: Exception) {
|
||||
val sw = StringWriter()
|
||||
e.printStackTrace(PrintWriter(sw))
|
||||
val exceptionAsString = sw.toString()
|
||||
e.message?.let { Log.v(PROXY_TAG, it) }
|
||||
Log.v(PROXY_TAG, exceptionAsString)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val PROXY_TAG = "PROXY"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -691,6 +691,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">التقويم & جهات الاتصال</string>
|
||||
<string name="screenshot_06_davdroid_subline">مزامنة مع DAVx5</string>
|
||||
<string name="search_error">خطاء في الحصول على نتائج البحث</string>
|
||||
<string name="secure_share_not_set_up">المشاركة الآمنة لم يتم إعدادها بالنسبة لهذا المستخدِم</string>
|
||||
<string name="secure_share_search">المشاركة الآمنة ...</string>
|
||||
<string name="select_all">تحديد الكل</string>
|
||||
<string name="select_media_folder">تعيين مجلد الوسائط</string>
|
||||
<string name="select_one_template">الرجاء تحديد قالب واحد</string>
|
||||
|
@ -725,6 +727,7 @@
|
|||
<string name="share_link_with_label">مشاركة الرابط (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">تعيين تاريخ إنتهاء الصلاحية</string>
|
||||
<string name="share_no_password_title">تعيين كلمة سرية</string>
|
||||
<string name="share_not_allowed_when_file_drop">إعادة المشاركة غير مسموح بها خلال الإفلات الآمن للملف</string>
|
||||
<string name="share_password_title">محمي بكلمة مرور</string>
|
||||
<string name="share_permission_can_edit">يمكن تعديله</string>
|
||||
<string name="share_permission_file_drop">اسقاط الملف</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Calendar & contacts</string>
|
||||
<string name="screenshot_06_davdroid_subline">Sync with DAVx5</string>
|
||||
<string name="search_error">Error getting search results</string>
|
||||
<string name="secure_share_not_set_up">Secure sharing is not set up for this user</string>
|
||||
<string name="secure_share_search">Secure share …</string>
|
||||
<string name="select_all">Select all</string>
|
||||
<string name="select_media_folder">Set media folder</string>
|
||||
<string name="select_one_template">Please select one template</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">Share link (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Set expiration date</string>
|
||||
<string name="share_no_password_title">Set password</string>
|
||||
<string name="share_not_allowed_when_file_drop">Resharing is not allowed during secure file drop</string>
|
||||
<string name="share_password_title">Password-protected</string>
|
||||
<string name="share_permission_can_edit">Can edit</string>
|
||||
<string name="share_permission_file_drop">File drop</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Kalender & Kontakte</string>
|
||||
<string name="screenshot_06_davdroid_subline">Synchronisiere mit DAVx5</string>
|
||||
<string name="search_error">Fehler beim Abrufen der Suchergebnisse</string>
|
||||
<string name="secure_share_not_set_up">Sicheres teilen ist für diesen Benutzer nicht eingerichtet</string>
|
||||
<string name="secure_share_search">Sicheres teilen …</string>
|
||||
<string name="select_all">Alle auswählen</string>
|
||||
<string name="select_media_folder">Medien-Ordner auswählen</string>
|
||||
<string name="select_one_template">Bitte eine Vorlage auswählen</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">Teile Link (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Ablaufdatum setzen</string>
|
||||
<string name="share_no_password_title">Passwort setzen</string>
|
||||
<string name="share_not_allowed_when_file_drop">Erneutes teilen ist für die sichere Dateiablage nicht zugelassen</string>
|
||||
<string name="share_password_title">Passwortgeschützt</string>
|
||||
<string name="share_permission_can_edit">Kann bearbeiten</string>
|
||||
<string name="share_permission_file_drop">Dateiablage</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Calendario y contactos</string>
|
||||
<string name="screenshot_06_davdroid_subline">Sincronizar con DAVx5</string>
|
||||
<string name="search_error">Error al cargar resultados de búsqueda</string>
|
||||
<string name="secure_share_not_set_up">Compartir en modo seguro no está configurado para este usuario</string>
|
||||
<string name="secure_share_search">Compartir en modo seguro …</string>
|
||||
<string name="select_all">Seleccionar todo</string>
|
||||
<string name="select_media_folder">Establece la carpeta multimedia</string>
|
||||
<string name="select_one_template">Por favor, selecciona una plantilla</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">Link para compartir (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Fijar fecha de caducidad</string>
|
||||
<string name="share_no_password_title">Establecer contraseña</string>
|
||||
<string name="share_not_allowed_when_file_drop">No se permite volver a compartir durante la entrega segura de archivos</string>
|
||||
<string name="share_password_title">Protegido con contraseña</string>
|
||||
<string name="share_permission_can_edit">Puede editar</string>
|
||||
<string name="share_permission_file_drop">Entrega de archivos</string>
|
||||
|
|
|
@ -345,6 +345,7 @@
|
|||
<string name="file_list_empty_shared_headline">Ingenting delt enda</string>
|
||||
<string name="file_list_empty_unified_search_no_results">Ingen resultat for søk</string>
|
||||
<string name="file_list_folder">mappe</string>
|
||||
<string name="file_list_live">LIVE</string>
|
||||
<string name="file_list_loading">Laster…</string>
|
||||
<string name="file_list_no_app_for_file_type">Ingen app er satt opp til å håndtere denne filtypen.</string>
|
||||
<string name="file_list_seconds_ago">for få sekunder siden</string>
|
||||
|
@ -414,6 +415,7 @@
|
|||
<string name="foreign_files_success">Alle filene ble flyttet</string>
|
||||
<string name="forward">Fremover</string>
|
||||
<string name="fourHours">4 timer</string>
|
||||
<string name="grid_file_features_live_photo_content_description">Dette ikonet indikerer tilgjengeligheten av live photo</string>
|
||||
<string name="hidden_file_name_warning">Navn gir skjult fil</string>
|
||||
<string name="hint_name">Navn</string>
|
||||
<string name="hint_note">Melding</string>
|
||||
|
@ -684,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Kalender & kontakter</string>
|
||||
<string name="screenshot_06_davdroid_subline">Synkroniser med DAVx5</string>
|
||||
<string name="search_error">Feil ved henting av søke resultat</string>
|
||||
<string name="secure_share_not_set_up">Sikker deling er ikke konfigurert for denne brukeren</string>
|
||||
<string name="secure_share_search">Sikker deling...</string>
|
||||
<string name="select_all">Velg alle</string>
|
||||
<string name="select_media_folder">Velg mediamappe</string>
|
||||
<string name="select_one_template">Velg en mal</string>
|
||||
|
@ -718,6 +722,7 @@
|
|||
<string name="share_link_with_label">Del lenke (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Sett utløpsdato</string>
|
||||
<string name="share_no_password_title">Velg passord</string>
|
||||
<string name="share_not_allowed_when_file_drop">Videredeling er ikke tillatt under sikker filslipp</string>
|
||||
<string name="share_password_title">Passordbeskyttet</string>
|
||||
<string name="share_permission_can_edit">Kan endre</string>
|
||||
<string name="share_permission_file_drop">Filkasse</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Календар и контакти</string>
|
||||
<string name="screenshot_06_davdroid_subline">Синхронизација помоћу DAVx5</string>
|
||||
<string name="search_error">Грешка приликом добијања резултата претраге</string>
|
||||
<string name="secure_share_not_set_up">За овог корисника није подешено безбедно дељење</string>
|
||||
<string name="secure_share_search">Безбедно дељење</string>
|
||||
<string name="select_all">Означи све</string>
|
||||
<string name="select_media_folder">Поставите фолдер са медијима</string>
|
||||
<string name="select_one_template">Молимо вас да изаберете један шаблон</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">Подели везу (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Постави датум истека</string>
|
||||
<string name="share_no_password_title">Постави лозинку</string>
|
||||
<string name="share_not_allowed_when_file_drop">Током безбедног упуштања фајла, није дозвољено поновно дељење</string>
|
||||
<string name="share_password_title">Заштићено лозинком</string>
|
||||
<string name="share_permission_can_edit">Може да уређује</string>
|
||||
<string name="share_permission_file_drop">Место за упуштање фајлова</string>
|
||||
|
|
|
@ -685,6 +685,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">Kalender & kontakter</string>
|
||||
<string name="screenshot_06_davdroid_subline">Synka med DAVx5</string>
|
||||
<string name="search_error">Ett fel uppstod vid sökning</string>
|
||||
<string name="secure_share_not_set_up">Säker delning är inte konfigurerad för denna användare</string>
|
||||
<string name="secure_share_search">Säker delning ...</string>
|
||||
<string name="select_all">Välj alla</string>
|
||||
<string name="select_media_folder">Ställ in mapp för media</string>
|
||||
<string name="select_one_template">Vänligen välj en mall</string>
|
||||
|
@ -719,6 +721,7 @@
|
|||
<string name="share_link_with_label">Dela länk (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">Välj utgångsdatum</string>
|
||||
<string name="share_no_password_title">Sätt lösenord</string>
|
||||
<string name="share_not_allowed_when_file_drop">Återdelning är inte tillåtet under säker gömd fillista</string>
|
||||
<string name="share_password_title">Lösenordsskyddad</string>
|
||||
<string name="share_permission_can_edit">Kan ändra</string>
|
||||
<string name="share_permission_file_drop">Göm fillista</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">日曆 & 通訊錄</string>
|
||||
<string name="screenshot_06_davdroid_subline">跟 DAVx5 同步</string>
|
||||
<string name="search_error">獲取搜索結果時出錯</string>
|
||||
<string name="secure_share_not_set_up">尚未為此用戶設定安全分享功能。</string>
|
||||
<string name="secure_share_search">安全分享 ...</string>
|
||||
<string name="select_all">全選</string>
|
||||
<string name="select_media_folder">設置媒體資料夾</string>
|
||||
<string name="select_one_template">請選擇一個模板</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">分享連結﹙%1$s﹚</string>
|
||||
<string name="share_no_expiration_date_label">設定屆滿日期</string>
|
||||
<string name="share_no_password_title">設定密碼</string>
|
||||
<string name="share_not_allowed_when_file_drop">在安全檔案傳輸期間不允許重新分享。</string>
|
||||
<string name="share_password_title">受密碼保護</string>
|
||||
<string name="share_permission_can_edit">可編輯</string>
|
||||
<string name="share_permission_file_drop">檔案拖放</string>
|
||||
|
|
|
@ -686,6 +686,8 @@
|
|||
<string name="screenshot_06_davdroid_heading">日曆與通訊錄</string>
|
||||
<string name="screenshot_06_davdroid_subline">使用 DAVx5 同步</string>
|
||||
<string name="search_error">取得搜尋結果時發生錯誤</string>
|
||||
<string name="secure_share_not_set_up">尚未為此使用者設定安全分享</string>
|
||||
<string name="secure_share_search">安全分享……</string>
|
||||
<string name="select_all">全選</string>
|
||||
<string name="select_media_folder">設定媒體資料夾</string>
|
||||
<string name="select_one_template">請選取一個範本</string>
|
||||
|
@ -720,6 +722,7 @@
|
|||
<string name="share_link_with_label">分享連結 (%1$s)</string>
|
||||
<string name="share_no_expiration_date_label">設定到期日</string>
|
||||
<string name="share_no_password_title">設定密碼</string>
|
||||
<string name="share_not_allowed_when_file_drop">在安全檔案投遞時不允許轉分享</string>
|
||||
<string name="share_password_title">受密碼保護</string>
|
||||
<string name="share_permission_can_edit">可以編輯</string>
|
||||
<string name="share_permission_file_drop">檔案投放</string>
|
||||
|
|
|
@ -25,6 +25,10 @@
|
|||
<bool name="show_provider_or_own_installation">true</bool>
|
||||
<string name="provider_registration_server">https://www.nextcloud.com/register</string>
|
||||
|
||||
<!-- specify built in proxy -->
|
||||
<string name="proxy_host"></string>
|
||||
<integer name="proxy_port">-1</integer>
|
||||
|
||||
<!-- Flags to enable/disable some features -->
|
||||
<string name="send_files_to_other_apps">on</string>
|
||||
<bool name="share_via_link_feature">true</bool>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
buildscript {
|
||||
ext {
|
||||
androidPluginVersion = '8.2.0'
|
||||
androidPluginVersion = '8.2.1'
|
||||
appCompatVersion = '1.6.1'
|
||||
jacoco_version = '0.8.10'
|
||||
kotlin_version = '1.8.22'
|
||||
|
|
Loading…
Reference in a new issue