|
|
|
|
@ -0,0 +1,821 @@
|
|
|
|
|
diff --git a/app/app/build.gradle.kts b/app/app/build.gradle.kts
|
|
|
|
|
index c6e24092..460cd7ee 100644
|
|
|
|
|
--- a/app/app/build.gradle.kts
|
|
|
|
|
+++ b/app/app/build.gradle.kts
|
|
|
|
|
@@ -74,11 +74,6 @@ android {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
- configurations.all {
|
|
|
|
|
- //Fixes Error: Duplicate class: com.google.common.util.concurrent.ListenableFuture
|
|
|
|
|
- exclude(group = "com.google.guava", module = "listenablefuture")
|
|
|
|
|
- exclude(group = "org.apache.httpcomponents", module = "httpclient")
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
compileOptions {
|
|
|
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
|
|
|
@@ -131,7 +126,6 @@ dependencies {
|
|
|
|
|
implementation(project(":data:customattrs"))
|
|
|
|
|
implementation(project(":data:searchable"))
|
|
|
|
|
implementation(project(":data:files"))
|
|
|
|
|
- implementation(project(":libs:g-services"))
|
|
|
|
|
implementation(project(":core:i18n"))
|
|
|
|
|
implementation(project(":services:icons"))
|
|
|
|
|
implementation(project(":core:ktx"))
|
|
|
|
|
@@ -157,4 +151,4 @@ dependencies {
|
|
|
|
|
|
|
|
|
|
// Uncomment this if you want annoying notifications in your debug builds yelling at you how terrible your code is
|
|
|
|
|
//debugImplementation(libs.leakcanary)
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/app/ui/build.gradle.kts b/app/ui/build.gradle.kts
|
|
|
|
|
index 3d41646f..c3ac9b5f 100644
|
|
|
|
|
--- a/app/ui/build.gradle.kts
|
|
|
|
|
+++ b/app/ui/build.gradle.kts
|
|
|
|
|
@@ -139,7 +139,6 @@ dependencies {
|
|
|
|
|
implementation(project(":data:websites"))
|
|
|
|
|
implementation(project(":data:unitconverter"))
|
|
|
|
|
implementation(project(":libs:nextcloud"))
|
|
|
|
|
- implementation(project(":libs:g-services"))
|
|
|
|
|
implementation(project(":libs:owncloud"))
|
|
|
|
|
implementation(project(":services:accounts"))
|
|
|
|
|
implementation(project(":services:backup"))
|
|
|
|
|
@@ -147,4 +146,4 @@ dependencies {
|
|
|
|
|
implementation(project(":services:global-actions"))
|
|
|
|
|
implementation(project(":services:widgets"))
|
|
|
|
|
implementation(project(":services:favorites"))
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/buildinfo/BuildInfoSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/buildinfo/BuildInfoSettingsScreenVM.kt
|
|
|
|
|
index 3e629b79..ba76be2d 100644
|
|
|
|
|
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/buildinfo/BuildInfoSettingsScreenVM.kt
|
|
|
|
|
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/buildinfo/BuildInfoSettingsScreenVM.kt
|
|
|
|
|
@@ -15,9 +15,9 @@ class BuildInfoSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
private val availableWeatherProviders = weatherRepository.getAvailableProviders()
|
|
|
|
|
|
|
|
|
|
val buildFeatures = mapOf(
|
|
|
|
|
- "Accounts: Google" to accountsRepository.isSupported(AccountType.Google),
|
|
|
|
|
+ "Accounts: Google" to false,
|
|
|
|
|
"Weather providers: HERE" to availableWeatherProviders.contains(WeatherProvider.Here),
|
|
|
|
|
"Weather providers: Met No" to availableWeatherProviders.contains(WeatherProvider.MetNo),
|
|
|
|
|
"Weather providers: OpenWeatherMap" to availableWeatherProviders.contains(WeatherProvider.OpenWeatherMap),
|
|
|
|
|
)
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreen.kt
|
|
|
|
|
index ef7ef245..dea27124 100644
|
|
|
|
|
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreen.kt
|
|
|
|
|
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreen.kt
|
|
|
|
|
@@ -139,42 +139,7 @@ fun FileSearchSettingsScreen() {
|
|
|
|
|
},
|
|
|
|
|
enabled = owncloudAccount != null
|
|
|
|
|
)
|
|
|
|
|
-
|
|
|
|
|
- if (viewModel.googleAvailable) {
|
|
|
|
|
- val gdrive by viewModel.gdrive.collectAsState()
|
|
|
|
|
- val googleAccount by viewModel.googleAccount
|
|
|
|
|
- AnimatedVisibility(googleAccount == null) {
|
|
|
|
|
- Banner(
|
|
|
|
|
- text = stringResource(R.string.no_account_google),
|
|
|
|
|
- icon = Icons.Rounded.AccountBox,
|
|
|
|
|
- primaryAction = {
|
|
|
|
|
- TextButton(onClick = {
|
|
|
|
|
- viewModel.login(
|
|
|
|
|
- context as AppCompatActivity,
|
|
|
|
|
- AccountType.Google
|
|
|
|
|
- )
|
|
|
|
|
- }) {
|
|
|
|
|
- Text(
|
|
|
|
|
- stringResource(R.string.connect_account),
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- modifier = Modifier.padding(16.dp)
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- SwitchPreference(
|
|
|
|
|
- title = stringResource(R.string.preference_search_gdrive),
|
|
|
|
|
- summary = googleAccount?.let {
|
|
|
|
|
- stringResource(R.string.preference_search_gdrive_summary, it.userName)
|
|
|
|
|
- } ?: stringResource(R.string.preference_summary_not_logged_in),
|
|
|
|
|
- value = gdrive == true && googleAccount != null,
|
|
|
|
|
- onValueChanged = {
|
|
|
|
|
- viewModel.setGdrive(it)
|
|
|
|
|
- },
|
|
|
|
|
- enabled = googleAccount != null
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreenVM.kt
|
|
|
|
|
index af6c07d2..27a507af 100644
|
|
|
|
|
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreenVM.kt
|
|
|
|
|
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/filesearch/FileSearchSettingsScreenVM.kt
|
|
|
|
|
@@ -28,9 +28,6 @@ class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
val loading = mutableStateOf(true)
|
|
|
|
|
val nextcloudAccount = mutableStateOf<Account?>(null)
|
|
|
|
|
val owncloudAccount = mutableStateOf<Account?>(null)
|
|
|
|
|
- val googleAccount = mutableStateOf<Account?>(null)
|
|
|
|
|
-
|
|
|
|
|
- val googleAvailable = accountsRepository.isSupported(AccountType.Google)
|
|
|
|
|
|
|
|
|
|
fun onResume() {
|
|
|
|
|
viewModelScope.launch {
|
|
|
|
|
@@ -38,7 +35,6 @@ class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
accountsRepository.getCurrentlySignedInAccount(AccountType.Nextcloud)
|
|
|
|
|
owncloudAccount.value =
|
|
|
|
|
accountsRepository.getCurrentlySignedInAccount(AccountType.Owncloud)
|
|
|
|
|
- googleAccount.value = accountsRepository.getCurrentlySignedInAccount(AccountType.Google)
|
|
|
|
|
loading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -75,38 +71,6 @@ class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- val gdrive = dataStore.data.map { it.fileSearch.gdrive }
|
|
|
|
|
- .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
|
|
|
|
|
- fun setGdrive(gdrive: Boolean) {
|
|
|
|
|
- viewModelScope.launch {
|
|
|
|
|
- dataStore.updateData {
|
|
|
|
|
- it.toBuilder()
|
|
|
|
|
- .setFileSearch(
|
|
|
|
|
- it.fileSearch
|
|
|
|
|
- .toBuilder()
|
|
|
|
|
- .setGdrive(gdrive)
|
|
|
|
|
- )
|
|
|
|
|
- .build()
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- val onedrive = dataStore.data.map { it.fileSearch.onedrive }
|
|
|
|
|
- .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
|
|
|
|
|
- fun setOneDrive(onedrive: Boolean) {
|
|
|
|
|
- viewModelScope.launch {
|
|
|
|
|
- dataStore.updateData {
|
|
|
|
|
- it.toBuilder()
|
|
|
|
|
- .setFileSearch(
|
|
|
|
|
- it.fileSearch
|
|
|
|
|
- .toBuilder()
|
|
|
|
|
- .setOnedrive(onedrive)
|
|
|
|
|
- )
|
|
|
|
|
- .build()
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
val owncloud = dataStore.data.map { it.fileSearch.owncloud }
|
|
|
|
|
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)
|
|
|
|
|
fun setOwncloud(owncloud: Boolean) {
|
|
|
|
|
@@ -130,4 +94,4 @@ class FileSearchSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
fun login(context: AppCompatActivity, accountType: AccountType) {
|
|
|
|
|
accountsRepository.signin(context, accountType)
|
|
|
|
|
}
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreen.kt
|
|
|
|
|
index b220fa8a..26895dbd 100644
|
|
|
|
|
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreen.kt
|
|
|
|
|
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreen.kt
|
|
|
|
|
@@ -55,8 +55,6 @@ fun IntegrationsSettingsScreen() {
|
|
|
|
|
|
|
|
|
|
val owncloudUser by viewModel.owncloudUser
|
|
|
|
|
val nextcloudUser by viewModel.nextcloudUser
|
|
|
|
|
- val msUser by viewModel.msUser
|
|
|
|
|
- val googleUser by viewModel.googleUser
|
|
|
|
|
|
|
|
|
|
val loading by viewModel.loading
|
|
|
|
|
|
|
|
|
|
@@ -126,69 +124,7 @@ fun IntegrationsSettingsScreen() {
|
|
|
|
|
},
|
|
|
|
|
enabled = !loading,
|
|
|
|
|
)
|
|
|
|
|
-
|
|
|
|
|
- if (viewModel.isGoogleAvailable) {
|
|
|
|
|
- Preference(
|
|
|
|
|
- title = if (googleUser != null) {
|
|
|
|
|
- stringResource(R.string.preference_google)
|
|
|
|
|
- } else {
|
|
|
|
|
- stringResource(R.string.preference_google_signin)
|
|
|
|
|
- },
|
|
|
|
|
- summary = googleUser?.let {
|
|
|
|
|
- stringResource(R.string.preference_signin_user, it.userName)
|
|
|
|
|
- } ?: stringResource(R.string.preference_google_signin_summary),
|
|
|
|
|
- onClick = {
|
|
|
|
|
- if (googleUser != null) {
|
|
|
|
|
- viewModel.signOut(AccountType.Google)
|
|
|
|
|
- } else {
|
|
|
|
|
- viewModel.signIn(
|
|
|
|
|
- context as AppCompatActivity,
|
|
|
|
|
- AccountType.Google
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- enabled = !loading,
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-fun GoogleSigninButton(
|
|
|
|
|
- onClick: () -> Unit,
|
|
|
|
|
-) {
|
|
|
|
|
- Surface(
|
|
|
|
|
- modifier = Modifier.height(40.dp),
|
|
|
|
|
- shadowElevation = 1.dp,
|
|
|
|
|
- color = Color.White,
|
|
|
|
|
- shape = RoundedCornerShape(2.dp),
|
|
|
|
|
- onClick = onClick
|
|
|
|
|
- ) {
|
|
|
|
|
- Row(
|
|
|
|
|
- verticalAlignment = Alignment.CenterVertically
|
|
|
|
|
- ) {
|
|
|
|
|
- Box(
|
|
|
|
|
- modifier = Modifier
|
|
|
|
|
- .size(40.dp)
|
|
|
|
|
- .background(Color.White),
|
|
|
|
|
- contentAlignment = Alignment.Center
|
|
|
|
|
- ) {
|
|
|
|
|
- Image(
|
|
|
|
|
- modifier = Modifier.size(18.dp),
|
|
|
|
|
- painter = painterResource(id = R.drawable.ic_google_g),
|
|
|
|
|
- contentDescription = null
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- Text(
|
|
|
|
|
- modifier = Modifier.padding(start = 13.dp, end = 8.dp),
|
|
|
|
|
- text = stringResource(id = R.string.preference_google_signin),
|
|
|
|
|
- fontFamily = FontFamily.SansSerif,
|
|
|
|
|
- color = Color(0f, 0f, 0f, 0.54f),
|
|
|
|
|
- fontSize = 14.sp,
|
|
|
|
|
- fontWeight = FontWeight.Medium
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreenVM.kt
|
|
|
|
|
index 97574426..31766768 100644
|
|
|
|
|
--- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreenVM.kt
|
|
|
|
|
+++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/integrations/IntegrationsSettingsScreenVM.kt
|
|
|
|
|
@@ -14,10 +14,6 @@ import org.koin.core.component.inject
|
|
|
|
|
class IntegrationsSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
private val accountsRepository: AccountsRepository by inject()
|
|
|
|
|
|
|
|
|
|
- val isGoogleAvailable = accountsRepository.isSupported(AccountType.Google)
|
|
|
|
|
-
|
|
|
|
|
- val googleUser = mutableStateOf<Account?>(null)
|
|
|
|
|
- val msUser= mutableStateOf<Account?>(null)
|
|
|
|
|
val nextcloudUser = mutableStateOf<Account?>(null)
|
|
|
|
|
val owncloudUser = mutableStateOf<Account?>(null)
|
|
|
|
|
|
|
|
|
|
@@ -26,7 +22,6 @@ class IntegrationsSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
fun onResume() {
|
|
|
|
|
viewModelScope.launch {
|
|
|
|
|
loading.value = true
|
|
|
|
|
- googleUser.value = accountsRepository.getCurrentlySignedInAccount(AccountType.Google)
|
|
|
|
|
nextcloudUser.value = accountsRepository.getCurrentlySignedInAccount(AccountType.Nextcloud)
|
|
|
|
|
owncloudUser.value = accountsRepository.getCurrentlySignedInAccount(AccountType.Owncloud)
|
|
|
|
|
loading.value = false
|
|
|
|
|
@@ -40,9 +35,8 @@ class IntegrationsSettingsScreenVM : ViewModel(), KoinComponent {
|
|
|
|
|
fun signOut(accountType: AccountType) {
|
|
|
|
|
accountsRepository.signout(accountType)
|
|
|
|
|
when(accountType){
|
|
|
|
|
- AccountType.Google -> googleUser.value = null
|
|
|
|
|
AccountType.Nextcloud -> nextcloudUser.value = null
|
|
|
|
|
AccountType.Owncloud -> owncloudUser.value = null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/build.gradle.kts b/build.gradle.kts
|
|
|
|
|
index 48481b37..9d9bbebd 100644
|
|
|
|
|
--- a/build.gradle.kts
|
|
|
|
|
+++ b/build.gradle.kts
|
|
|
|
|
@@ -21,7 +21,6 @@ allprojects {
|
|
|
|
|
repositories {
|
|
|
|
|
google()
|
|
|
|
|
mavenCentral()
|
|
|
|
|
- maven(url = "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1")
|
|
|
|
|
jcenter() // For tinypinyin
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -30,4 +29,4 @@ tasks.create<Delete>("clean") {
|
|
|
|
|
delete(rootProject.buildDir)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-apply(from = "docs/deps-graph.gradle")
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+apply(from = "docs/deps-graph.gradle")
|
|
|
|
|
diff --git a/data/files/build.gradle.kts b/data/files/build.gradle.kts
|
|
|
|
|
index 0756762d..70558bd9 100644
|
|
|
|
|
--- a/data/files/build.gradle.kts
|
|
|
|
|
+++ b/data/files/build.gradle.kts
|
|
|
|
|
@@ -46,10 +46,9 @@ dependencies {
|
|
|
|
|
|
|
|
|
|
implementation(project(":core:base"))
|
|
|
|
|
implementation(project(":core:ktx"))
|
|
|
|
|
- implementation(project(":libs:g-services"))
|
|
|
|
|
implementation(project(":libs:nextcloud"))
|
|
|
|
|
implementation(project(":libs:owncloud"))
|
|
|
|
|
implementation(project(":core:i18n"))
|
|
|
|
|
implementation(project(":core:permissions"))
|
|
|
|
|
implementation(project(":core:crashreporter"))
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt b/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt
|
|
|
|
|
index f660d6b5..17cd9913 100644
|
|
|
|
|
--- a/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt
|
|
|
|
|
+++ b/data/files/src/main/java/de/mm20/launcher2/files/FileSerialization.kt
|
|
|
|
|
@@ -72,127 +72,12 @@ class LocalFileDeserializer(
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
-
|
|
|
|
|
-class GDriveFileSerializer : SearchableSerializer {
|
|
|
|
|
- override fun serialize(searchable: SavableSearchable): String {
|
|
|
|
|
- searchable as GDriveFile
|
|
|
|
|
- return jsonObjectOf(
|
|
|
|
|
- "id" to searchable.fileId,
|
|
|
|
|
- "label" to searchable.label,
|
|
|
|
|
- "path" to searchable.path,
|
|
|
|
|
- "mimeType" to searchable.mimeType,
|
|
|
|
|
- "size" to searchable.size,
|
|
|
|
|
- "directory" to searchable.isDirectory,
|
|
|
|
|
- "color" to searchable.directoryColor,
|
|
|
|
|
- "uri" to searchable.viewUri
|
|
|
|
|
- ).apply {
|
|
|
|
|
- for ((k, v) in searchable.metaData) {
|
|
|
|
|
- put(
|
|
|
|
|
- when (k) {
|
|
|
|
|
- R.string.file_meta_owner -> "owner"
|
|
|
|
|
- R.string.file_meta_dimensions -> "dimensions"
|
|
|
|
|
- else -> "other"
|
|
|
|
|
- }, v
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- }.toString()
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- override val typePrefix: String
|
|
|
|
|
- get() = "gdrive"
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-class GDriveFileDeserializer : SearchableDeserializer {
|
|
|
|
|
- override fun deserialize(serialized: String): SavableSearchable {
|
|
|
|
|
- val json = JSONObject(serialized)
|
|
|
|
|
- val id = json.getString("id")
|
|
|
|
|
- val label = json.getString("label")
|
|
|
|
|
- val path = json.getString("path")
|
|
|
|
|
- val mimeType = json.getString("mimeType")
|
|
|
|
|
- val size = json.getLong("size")
|
|
|
|
|
- val directory = json.getBoolean("directory")
|
|
|
|
|
- val color = json.optString("color")
|
|
|
|
|
- val uri = json.getString("uri")
|
|
|
|
|
- val owner = json.optString("owner")
|
|
|
|
|
- val dimensions = json.optString("dimensions")
|
|
|
|
|
- val metaData = mutableListOf<Pair<Int, String>>()
|
|
|
|
|
- owner.takeIf { it.isNotEmpty() }?.let { metaData.add(R.string.file_meta_owner to it) }
|
|
|
|
|
- dimensions.takeIf { it.isNotEmpty() }
|
|
|
|
|
- ?.let { metaData.add(R.string.file_meta_dimensions to it) }
|
|
|
|
|
- return GDriveFile(
|
|
|
|
|
- fileId = id,
|
|
|
|
|
- label = label,
|
|
|
|
|
- path = path,
|
|
|
|
|
- mimeType = mimeType,
|
|
|
|
|
- size = size,
|
|
|
|
|
- directoryColor = color,
|
|
|
|
|
- isDirectory = directory,
|
|
|
|
|
- viewUri = uri,
|
|
|
|
|
- metaData = metaData
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-class OneDriveFileSerializer : SearchableSerializer {
|
|
|
|
|
- override fun serialize(searchable: SavableSearchable): String {
|
|
|
|
|
- searchable as OneDriveFile
|
|
|
|
|
- return jsonObjectOf(
|
|
|
|
|
- "id" to searchable.fileId,
|
|
|
|
|
- "label" to searchable.label,
|
|
|
|
|
- "mimeType" to searchable.mimeType,
|
|
|
|
|
- "size" to searchable.size,
|
|
|
|
|
- "directory" to searchable.isDirectory,
|
|
|
|
|
- "webUrl" to searchable.webUrl
|
|
|
|
|
- ).apply {
|
|
|
|
|
- for ((k, v) in searchable.metaData) {
|
|
|
|
|
- put(
|
|
|
|
|
- when (k) {
|
|
|
|
|
- R.string.file_meta_owner -> "owner"
|
|
|
|
|
- R.string.file_meta_dimensions -> "dimensions"
|
|
|
|
|
- else -> "other"
|
|
|
|
|
- }, v
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- }.toString()
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- override val typePrefix: String
|
|
|
|
|
- get() = "onedrive"
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-class OneDriveFileDeserializer : SearchableDeserializer {
|
|
|
|
|
- override fun deserialize(serialized: String): SavableSearchable {
|
|
|
|
|
- val json = JSONObject(serialized)
|
|
|
|
|
- val fileId = json.getString("id")
|
|
|
|
|
- val label = json.getString("label")
|
|
|
|
|
- val mimeType = json.getString("mimeType")
|
|
|
|
|
- val size = json.getLong("size")
|
|
|
|
|
- val isDirectory = json.getBoolean("directory")
|
|
|
|
|
- val webUrl = json.getString("webUrl")
|
|
|
|
|
- val owner = json.optString("owner")
|
|
|
|
|
- val dimensions = json.optString("dimensions")
|
|
|
|
|
- val metaData = mutableListOf<Pair<Int, String>>()
|
|
|
|
|
- owner.takeIf { it.isNotEmpty() }?.let { metaData.add(R.string.file_meta_owner to it) }
|
|
|
|
|
- dimensions.takeIf { it.isNotEmpty() }
|
|
|
|
|
- ?.let { metaData.add(R.string.file_meta_dimensions to it) }
|
|
|
|
|
- return OneDriveFile(
|
|
|
|
|
- fileId = fileId,
|
|
|
|
|
- label = label,
|
|
|
|
|
- path = "",
|
|
|
|
|
- mimeType = mimeType,
|
|
|
|
|
- size = size,
|
|
|
|
|
- isDirectory = isDirectory,
|
|
|
|
|
- metaData = metaData,
|
|
|
|
|
- webUrl = webUrl
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
class NextcloudFileSerializer : SearchableSerializer {
|
|
|
|
|
override fun serialize(searchable: SavableSearchable): String {
|
|
|
|
|
searchable as NextcloudFile
|
|
|
|
|
return jsonObjectOf(
|
|
|
|
|
- "id" to searchable.fileId,
|
|
|
|
|
+
|
|
|
|
|
+ "id" to searchable.fileId,
|
|
|
|
|
"label" to searchable.label,
|
|
|
|
|
"path" to searchable.path,
|
|
|
|
|
"mimeType" to searchable.mimeType,
|
|
|
|
|
@@ -292,4 +177,4 @@ class OwncloudFileDeserializer : SearchableDeserializer {
|
|
|
|
|
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/data/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt b/data/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt
|
|
|
|
|
index 74792735..ff930e6d 100644
|
|
|
|
|
--- a/data/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt
|
|
|
|
|
+++ b/data/files/src/main/java/de/mm20/launcher2/files/FilesRepository.kt
|
|
|
|
|
@@ -2,7 +2,6 @@ package de.mm20.launcher2.files
|
|
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import de.mm20.launcher2.files.providers.FileProvider
|
|
|
|
|
-import de.mm20.launcher2.files.providers.GDriveFileProvider
|
|
|
|
|
import de.mm20.launcher2.files.providers.LocalFileProvider
|
|
|
|
|
import de.mm20.launcher2.files.providers.NextcloudFileProvider
|
|
|
|
|
import de.mm20.launcher2.files.providers.OwncloudFileProvider
|
|
|
|
|
@@ -24,8 +23,6 @@ interface FileRepository {
|
|
|
|
|
fun search(
|
|
|
|
|
query: String,
|
|
|
|
|
local: Boolean = true,
|
|
|
|
|
- gdrive: Boolean = true,
|
|
|
|
|
- onedrive: Boolean = true,
|
|
|
|
|
nextcloud: Boolean = true,
|
|
|
|
|
owncloud: Boolean = true,
|
|
|
|
|
): Flow<ImmutableList<File>>
|
|
|
|
|
@@ -50,8 +47,6 @@ internal class FileRepositoryImpl(
|
|
|
|
|
override fun search(
|
|
|
|
|
query: String,
|
|
|
|
|
local: Boolean,
|
|
|
|
|
- gdrive: Boolean,
|
|
|
|
|
- onedrive: Boolean,
|
|
|
|
|
nextcloud: Boolean,
|
|
|
|
|
owncloud: Boolean
|
|
|
|
|
) = channelFlow {
|
|
|
|
|
@@ -63,7 +58,6 @@ internal class FileRepositoryImpl(
|
|
|
|
|
val providers = mutableListOf<FileProvider>()
|
|
|
|
|
|
|
|
|
|
if (local) providers.add(LocalFileProvider(context, permissionsManager))
|
|
|
|
|
- if (gdrive) providers.add(GDriveFileProvider(context))
|
|
|
|
|
if (nextcloud) providers.add(NextcloudFileProvider(nextcloudClient))
|
|
|
|
|
if (owncloud) providers.add(OwncloudFileProvider(owncloudClient))
|
|
|
|
|
|
|
|
|
|
@@ -85,4 +79,4 @@ internal class FileRepositoryImpl(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/data/files/src/main/java/de/mm20/launcher2/files/providers/GDriveFileProvider.kt b/data/files/src/main/java/de/mm20/launcher2/files/providers/GDriveFileProvider.kt
|
|
|
|
|
deleted file mode 100644
|
|
|
|
|
index f6287616..00000000
|
|
|
|
|
--- a/data/files/src/main/java/de/mm20/launcher2/files/providers/GDriveFileProvider.kt
|
|
|
|
|
+++ /dev/null
|
|
|
|
|
@@ -1,40 +0,0 @@
|
|
|
|
|
-package de.mm20.launcher2.files.providers
|
|
|
|
|
-
|
|
|
|
|
-import android.content.Context
|
|
|
|
|
-import de.mm20.launcher2.files.R
|
|
|
|
|
-import de.mm20.launcher2.gservices.DriveFileMeta
|
|
|
|
|
-import de.mm20.launcher2.gservices.GoogleApiHelper
|
|
|
|
|
-import de.mm20.launcher2.search.data.File
|
|
|
|
|
-import de.mm20.launcher2.search.data.GDriveFile
|
|
|
|
|
-
|
|
|
|
|
-internal class GDriveFileProvider(
|
|
|
|
|
- private val context: Context
|
|
|
|
|
-) : FileProvider {
|
|
|
|
|
- override suspend fun search(query: String): List<File> {
|
|
|
|
|
- if (query.length < 4) return emptyList()
|
|
|
|
|
- val driveFiles = GoogleApiHelper.getInstance(context).queryGDriveFiles(query)
|
|
|
|
|
- return driveFiles.map {
|
|
|
|
|
- GDriveFile(
|
|
|
|
|
- fileId = it.fileId,
|
|
|
|
|
- label = it.label,
|
|
|
|
|
- size = it.size,
|
|
|
|
|
- mimeType = it.mimeType,
|
|
|
|
|
- isDirectory = it.isDirectory,
|
|
|
|
|
- path = "",
|
|
|
|
|
- directoryColor = it.directoryColor,
|
|
|
|
|
- viewUri = it.viewUri,
|
|
|
|
|
- metaData = getMetadata(it.metadata)
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private fun getMetadata(file: DriveFileMeta): List<Pair<Int, String>> {
|
|
|
|
|
- val metaData = mutableListOf<Pair<Int, String>>()
|
|
|
|
|
- val owners = file.owners
|
|
|
|
|
- metaData.add(R.string.file_meta_owner to owners.joinToString(separator = ", "))
|
|
|
|
|
- val width = file.width ?: file.width
|
|
|
|
|
- val height = file.height ?: file.height
|
|
|
|
|
- if (width != null && height != null) metaData.add(R.string.file_meta_dimensions to "${width}x$height")
|
|
|
|
|
- return metaData
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
diff --git a/data/searchable/src/main/java/de/mm20/launcher2/searchable/Serialization.kt b/data/searchable/src/main/java/de/mm20/launcher2/searchable/Serialization.kt
|
|
|
|
|
index cac42fd1..8152f94f 100644
|
|
|
|
|
--- a/data/searchable/src/main/java/de/mm20/launcher2/searchable/Serialization.kt
|
|
|
|
|
+++ b/data/searchable/src/main/java/de/mm20/launcher2/searchable/Serialization.kt
|
|
|
|
|
@@ -46,12 +46,6 @@ internal fun getSerializer(searchable: Searchable?): SearchableSerializer {
|
|
|
|
|
if (searchable is Wikipedia) {
|
|
|
|
|
return WikipediaSerializer()
|
|
|
|
|
}
|
|
|
|
|
- if (searchable is GDriveFile) {
|
|
|
|
|
- return GDriveFileSerializer()
|
|
|
|
|
- }
|
|
|
|
|
- if (searchable is OneDriveFile) {
|
|
|
|
|
- return OneDriveFileSerializer()
|
|
|
|
|
- }
|
|
|
|
|
if (searchable is OwncloudFile) {
|
|
|
|
|
return OwncloudFileSerializer()
|
|
|
|
|
}
|
|
|
|
|
@@ -89,12 +83,6 @@ internal fun getDeserializer(context: Context, type: String): SearchableDeserial
|
|
|
|
|
if (type == Wikipedia.Domain) {
|
|
|
|
|
return WikipediaDeserializer(context)
|
|
|
|
|
}
|
|
|
|
|
- if (type == GDriveFile.Domain) {
|
|
|
|
|
- return GDriveFileDeserializer()
|
|
|
|
|
- }
|
|
|
|
|
- if (type == OneDriveFile.Domain) {
|
|
|
|
|
- return OneDriveFileDeserializer()
|
|
|
|
|
- }
|
|
|
|
|
if (type == NextcloudFile.Domain) {
|
|
|
|
|
return NextcloudFileDeserializer()
|
|
|
|
|
}
|
|
|
|
|
@@ -111,4 +99,4 @@ internal fun getDeserializer(context: Context, type: String): SearchableDeserial
|
|
|
|
|
return TagDeserializer()
|
|
|
|
|
}
|
|
|
|
|
return NullDeserializer()
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/services/accounts/build.gradle.kts b/services/accounts/build.gradle.kts
|
|
|
|
|
index a4b614f2..0f24031c 100644
|
|
|
|
|
--- a/services/accounts/build.gradle.kts
|
|
|
|
|
+++ b/services/accounts/build.gradle.kts
|
|
|
|
|
@@ -40,8 +40,7 @@ dependencies {
|
|
|
|
|
|
|
|
|
|
implementation(libs.koin.android)
|
|
|
|
|
|
|
|
|
|
- implementation(project(":libs:g-services"))
|
|
|
|
|
implementation(project(":libs:owncloud"))
|
|
|
|
|
implementation(project(":libs:nextcloud"))
|
|
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountType.kt b/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountType.kt
|
|
|
|
|
index bef71441..615a3c7b 100644
|
|
|
|
|
--- a/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountType.kt
|
|
|
|
|
+++ b/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountType.kt
|
|
|
|
|
@@ -1,7 +1,6 @@
|
|
|
|
|
package de.mm20.launcher2.accounts
|
|
|
|
|
|
|
|
|
|
enum class AccountType {
|
|
|
|
|
- Google,
|
|
|
|
|
Nextcloud,
|
|
|
|
|
Owncloud,
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountsRepository.kt b/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountsRepository.kt
|
|
|
|
|
index aeb5d079..8420d957 100644
|
|
|
|
|
--- a/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountsRepository.kt
|
|
|
|
|
+++ b/services/accounts/src/main/java/de/mm20/launcher2/accounts/AccountsRepository.kt
|
|
|
|
|
@@ -2,7 +2,6 @@ package de.mm20.launcher2.accounts
|
|
|
|
|
|
|
|
|
|
import android.app.Activity
|
|
|
|
|
import android.content.Context
|
|
|
|
|
-import de.mm20.launcher2.gservices.GoogleApiHelper
|
|
|
|
|
import de.mm20.launcher2.nextcloud.NextcloudApiHelper
|
|
|
|
|
import de.mm20.launcher2.owncloud.OwncloudClient
|
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
|
|
|
@@ -27,17 +26,11 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
) : AccountsRepository {
|
|
|
|
|
private val scope = CoroutineScope(Job() + Dispatchers.Default)
|
|
|
|
|
|
|
|
|
|
- private val googleApiHelper = GoogleApiHelper.getInstance(context)
|
|
|
|
|
private val nextcloudApiHelper = NextcloudApiHelper(context)
|
|
|
|
|
private val owncloudApiHelper = OwncloudClient(context)
|
|
|
|
|
|
|
|
|
|
override fun signin(context: Activity, accountType: AccountType) {
|
|
|
|
|
when (accountType) {
|
|
|
|
|
- AccountType.Google -> {
|
|
|
|
|
- scope.launch {
|
|
|
|
|
- googleApiHelper.login(context)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
AccountType.Nextcloud ->
|
|
|
|
|
scope.launch {
|
|
|
|
|
nextcloudApiHelper.login(context)
|
|
|
|
|
@@ -51,9 +44,6 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
|
|
|
|
|
override fun signout(accountType: AccountType) {
|
|
|
|
|
when (accountType) {
|
|
|
|
|
- AccountType.Google -> {
|
|
|
|
|
- googleApiHelper.logout()
|
|
|
|
|
- }
|
|
|
|
|
AccountType.Nextcloud -> {
|
|
|
|
|
scope.launch {
|
|
|
|
|
nextcloudApiHelper.logout()
|
|
|
|
|
@@ -67,7 +57,6 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
|
|
|
|
|
override fun isSupported(accountType: AccountType): Boolean {
|
|
|
|
|
return when (accountType) {
|
|
|
|
|
- AccountType.Google -> googleApiHelper.isAvailable()
|
|
|
|
|
AccountType.Nextcloud -> true
|
|
|
|
|
AccountType.Owncloud -> true
|
|
|
|
|
}
|
|
|
|
|
@@ -75,9 +64,6 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
|
|
|
|
|
override suspend fun getCurrentlySignedInAccount(accountType: AccountType): Account? {
|
|
|
|
|
return when (accountType) {
|
|
|
|
|
- AccountType.Google -> {
|
|
|
|
|
- getGoogleAccount()
|
|
|
|
|
- }
|
|
|
|
|
AccountType.Nextcloud -> {
|
|
|
|
|
getNextcloudAccount()
|
|
|
|
|
}
|
|
|
|
|
@@ -87,19 +73,6 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- private suspend fun getGoogleAccount(): Account? {
|
|
|
|
|
- return googleApiHelper.getAccount()?.let {
|
|
|
|
|
- Account(it.name, AccountType.Google)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private suspend fun getMicrosoftAccount(): Account? {
|
|
|
|
|
- return null
|
|
|
|
|
- /*return msGraphApiHelper.getUser()?.let {
|
|
|
|
|
- Account(it.name, AccountType.Microsoft)
|
|
|
|
|
- }*/
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
private suspend fun getNextcloudAccount(): Account? {
|
|
|
|
|
return nextcloudApiHelper.getLoggedInUser()?.let {
|
|
|
|
|
Account(it.displayName, AccountType.Nextcloud)
|
|
|
|
|
@@ -112,4 +85,4 @@ internal class AccountsRepositoryImpl(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/services/search/src/main/java/de/mm20/launcher2/search/SearchService.kt b/services/search/src/main/java/de/mm20/launcher2/search/SearchService.kt
|
|
|
|
|
index bb31f870..10ef0cb2 100644
|
|
|
|
|
--- a/services/search/src/main/java/de/mm20/launcher2/search/SearchService.kt
|
|
|
|
|
+++ b/services/search/src/main/java/de/mm20/launcher2/search/SearchService.kt
|
|
|
|
|
@@ -22,11 +22,9 @@ import de.mm20.launcher2.search.data.Calculator
|
|
|
|
|
import de.mm20.launcher2.search.data.CalendarEvent
|
|
|
|
|
import de.mm20.launcher2.search.data.Contact
|
|
|
|
|
import de.mm20.launcher2.search.data.File
|
|
|
|
|
-import de.mm20.launcher2.search.data.GDriveFile
|
|
|
|
|
import de.mm20.launcher2.search.data.LauncherApp
|
|
|
|
|
import de.mm20.launcher2.search.data.LocalFile
|
|
|
|
|
import de.mm20.launcher2.search.data.NextcloudFile
|
|
|
|
|
-import de.mm20.launcher2.search.data.OneDriveFile
|
|
|
|
|
import de.mm20.launcher2.search.data.OwncloudFile
|
|
|
|
|
import de.mm20.launcher2.search.data.UnitConverter
|
|
|
|
|
import de.mm20.launcher2.search.data.Website
|
|
|
|
|
@@ -63,8 +61,6 @@ interface SearchService {
|
|
|
|
|
.build(),
|
|
|
|
|
files: FilesSearchSettings = Settings.FilesSearchSettings.newBuilder()
|
|
|
|
|
.setLocalFiles(false)
|
|
|
|
|
- .setGdrive(false)
|
|
|
|
|
- .setOnedrive(false)
|
|
|
|
|
.setOwncloud(false)
|
|
|
|
|
.setNextcloud(false)
|
|
|
|
|
.build(),
|
|
|
|
|
@@ -206,15 +202,13 @@ internal class SearchServiceImpl(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
- if (files.localFiles || files.owncloud || files.onedrive || files.gdrive || files.nextcloud) {
|
|
|
|
|
+ if (files.localFiles || files.owncloud || files.nextcloud) {
|
|
|
|
|
launch {
|
|
|
|
|
fileRepository.search(
|
|
|
|
|
query,
|
|
|
|
|
local = files.localFiles,
|
|
|
|
|
nextcloud = files.nextcloud,
|
|
|
|
|
owncloud = files.owncloud,
|
|
|
|
|
- onedrive = files.onedrive,
|
|
|
|
|
- gdrive = files.gdrive,
|
|
|
|
|
)
|
|
|
|
|
.withCustomLabels(customAttributesRepository)
|
|
|
|
|
.collectLatest { r ->
|
|
|
|
|
@@ -237,8 +231,6 @@ internal class SearchServiceImpl(
|
|
|
|
|
files.localFiles && it is LocalFile ||
|
|
|
|
|
files.nextcloud && it is NextcloudFile ||
|
|
|
|
|
files.owncloud && it is OwncloudFile ||
|
|
|
|
|
- files.onedrive && it is OneDriveFile ||
|
|
|
|
|
- files.gdrive && it is GDriveFile ||
|
|
|
|
|
wikipedia.enabled && it is Wikipedia ||
|
|
|
|
|
websites.enabled && it is Website ||
|
|
|
|
|
calendars.enabled && it is CalendarEvent ||
|
|
|
|
|
@@ -284,4 +276,4 @@ fun SearchResults.toList(): List<Searchable> {
|
|
|
|
|
searchActions,
|
|
|
|
|
other,
|
|
|
|
|
).flatten()
|
|
|
|
|
-}
|
|
|
|
|
\ No newline at end of file
|
|
|
|
|
+}
|
|
|
|
|
diff --git a/settings.gradle.kts b/settings.gradle.kts
|
|
|
|
|
index 1fe9dbdb..05b6e9ed 100644
|
|
|
|
|
--- a/settings.gradle.kts
|
|
|
|
|
+++ b/settings.gradle.kts
|
|
|
|
|
@@ -200,26 +200,12 @@ dependencyResolutionManagement {
|
|
|
|
|
library("mathparser", "org.mariuszgromada.math", "MathParser.org-mXparser")
|
|
|
|
|
.version("4.4.2")
|
|
|
|
|
|
|
|
|
|
- library("google.auth", "com.google.auth", "google-auth-library-oauth2-http")
|
|
|
|
|
- .version("1.14.0")
|
|
|
|
|
- library("google.apiclient", "com.google.api-client", "google-api-client")
|
|
|
|
|
- .version("2.1.2")
|
|
|
|
|
- library("google.drive", "com.google.apis", "google-api-services-drive")
|
|
|
|
|
- .version("v3-rev20221219-2.0.0")
|
|
|
|
|
- library("google.oauth2", "com.google.apis", "google-api-services-oauth2")
|
|
|
|
|
- .version("v2-rev20200213-2.0.0")
|
|
|
|
|
-
|
|
|
|
|
library("gson", "com.google.code.gson", "gson")
|
|
|
|
|
.version("2.10.1")
|
|
|
|
|
|
|
|
|
|
library("guava", "com.google.guava", "guava")
|
|
|
|
|
.version("31.1-android")
|
|
|
|
|
|
|
|
|
|
- library("microsoft.graph", "com.microsoft.graph", "microsoft-graph")
|
|
|
|
|
- .version("5.53.0")
|
|
|
|
|
- library("microsoft.identity", "com.microsoft.identity.client", "msal")
|
|
|
|
|
- .version("4.2.0")
|
|
|
|
|
-
|
|
|
|
|
version("protobuf", "3.14.0")
|
|
|
|
|
library("protobuf.protoc", "com.google.protobuf", "protoc")
|
|
|
|
|
.versionRef("protobuf")
|
|
|
|
|
@@ -284,8 +270,6 @@ include(":libs:material-color-utilities")
|
|
|
|
|
include(":libs:nextcloud")
|
|
|
|
|
include(":libs:owncloud")
|
|
|
|
|
include(":libs:webdav")
|
|
|
|
|
-include(":libs:g-services")
|
|
|
|
|
-include(":libs:ms-services")
|
|
|
|
|
include(":services:global-actions")
|
|
|
|
|
include(":services:widgets")
|
|
|
|
|
include(":services:favorites")
|