Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ abstract class AbstractIT {

darkMode = DARK
AppPreferencesImpl.fromContext(targetContext).setDarkThemeMode(DarkMode.DARK)
MainApp.setAppTheme(DarkMode.DARK)
DarkMode.DARK.setTheme()
}

@JvmStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ package com.nextcloud.client.migrations
import android.content.Context
import android.view.WindowManager.BadTokenException
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.nextcloud.client.core.Clock
import com.nextcloud.client.preferences.AppPreferencesImpl
import com.nextcloud.client.preferences.AppPreferences
import com.owncloud.android.R
import com.owncloud.android.datamodel.MediaFolder
import com.owncloud.android.datamodel.MediaFolderType
Expand All @@ -20,28 +19,42 @@ import com.owncloud.android.datamodel.SyncedFolderProvider
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.ui.navigation.NavigatorActivity
import com.owncloud.android.ui.navigation.NavigatorScreen
import com.owncloud.android.utils.PermissionUtil
import javax.inject.Inject

class AutoUploadEntriesMigration @Inject constructor(
private val context: Context,
private val preferences: AppPreferences,
private val syncedFolderProvider: SyncedFolderProvider
) {

fun migrate() {
updateToAutoUpload()
cleanOldEntries()
updateAutoUploadEntries()

if (PermissionUtil.checkStoragePermission(context)) {
splitOutAutoUploadEntries()
} else {
preferences.isAutoUploadSplitEntriesEnabled = true
}
}

object AutoUploadEntriesMigration {

private val TAG: String = AutoUploadEntriesMigration::class.java.simpleName
private const val MEDIA_FOLDER_ITEM_LIMIT = 1

fun updateToAutoUpload(context: Context) {
val preferences = AppPreferencesImpl.fromContext(context)
private fun updateToAutoUpload() {
if (!preferences.instantPictureUploadEnabled() && !preferences.instantVideoUploadEnabled()) {
return
}

preferences.removeLegacyPreferences()

try {
showAutoUploadAlertDialog(context)
showAutoUploadAlertDialog()
} catch (e: BadTokenException) {
Log_OC.i(TAG, "Error showing Auto Upload Update dialog, so skipping it: " + e.message)
}
}

private fun showAutoUploadAlertDialog(context: Context) {
private fun showAutoUploadAlertDialog() {
MaterialAlertDialogBuilder(context, R.style.Theme_ownCloud_Dialog)
.setTitle(R.string.drawer_synced_folders)
.setMessage(R.string.synced_folders_new_info)
Expand All @@ -56,13 +69,11 @@ object AutoUploadEntriesMigration {
.show()
}

fun cleanOldEntries(context: Context, clock: Clock) {
val preferences = AppPreferencesImpl.fromContext(context)
private fun cleanOldEntries() {
if (preferences.isLegacyClean) {
return
}

val syncedFolderProvider = SyncedFolderProvider(context.contentResolver, preferences, clock)
val newestIds = syncedFolderProvider.syncedFolders
.groupBy { it.account to it.localPath }
.values
Expand All @@ -79,24 +90,21 @@ object AutoUploadEntriesMigration {
}
}

fun updateAutoUploadEntries(context: Context, clock: Clock) {
val preferences = AppPreferencesImpl.fromContext(context)
private fun updateAutoUploadEntries() {
if (preferences.isAutoUploadPathsUpdateEnabled) {
return
}

SyncedFolderProvider(context.contentResolver, preferences, clock).updateAutoUploadPaths(context)
syncedFolderProvider.updateAutoUploadPaths(context)
}

fun splitOutAutoUploadEntries(context: Context, clock: Clock) {
val preferences = AppPreferencesImpl.fromContext(context)
private fun splitOutAutoUploadEntries() {
if (preferences.isAutoUploadSplitEntriesEnabled) {
return
}

Log_OC.i(TAG, "Migrate synced_folders records for image/video split")
val contentResolver = context.contentResolver
val syncedFolderProvider = SyncedFolderProvider(contentResolver, preferences, clock)
val imageMediaFolders = MediaProvider.getImageFolders(contentResolver, MEDIA_FOLDER_ITEM_LIMIT, null, true)
val videoMediaFolders = MediaProvider.getVideoFolders(contentResolver, MEDIA_FOLDER_ITEM_LIMIT, null, true)
val syncedFolders = syncedFolderProvider.syncedFolders
Expand Down Expand Up @@ -130,4 +138,9 @@ object AutoUploadEntriesMigration {
val primaryKey = storeSyncedFolder(newSyncedFolder)
Log_OC.i(TAG, "Migrated $mediaTypeLabel synced_folders record: $primaryKey - ${newSyncedFolder.localPath}")
}

companion object {
private val TAG: String = AutoUploadEntriesMigration::class.java.simpleName
private const val MEDIA_FOLDER_ITEM_LIMIT = 1
}
}
12 changes: 0 additions & 12 deletions app/src/main/java/com/nextcloud/client/preferences/DarkMode.java

This file was deleted.

25 changes: 25 additions & 0 deletions app/src/main/java/com/nextcloud/client/preferences/DarkMode.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
package com.nextcloud.client.preferences

import androidx.appcompat.app.AppCompatDelegate

enum class DarkMode {
DARK,
LIGHT,
SYSTEM;

fun setTheme() {
AppCompatDelegate.setDefaultNightMode(toMode())
}

private fun toMode(): Int = when (this) {
LIGHT -> AppCompatDelegate.MODE_NIGHT_NO
DARK -> AppCompatDelegate.MODE_NIGHT_YES
SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
}
}
Loading
Loading