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 @@ -8,37 +8,51 @@
*/
package com.nextcloud.client

import android.content.Intent
import android.os.Looper
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.test.core.app.launchActivity
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isRoot
import com.nextcloud.client.preferences.SubFolderRule
import com.owncloud.android.AbstractIT
import com.owncloud.android.R
import com.owncloud.android.datamodel.MediaFolderType
import com.owncloud.android.datamodel.SyncedFolder
import com.owncloud.android.datamodel.SyncedFolderDisplayItem
import com.owncloud.android.ui.activity.SyncedFoldersActivity
import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment.Companion.newInstance
import com.owncloud.android.ui.fragment.autoUpload.AutoUploadFragment
import com.owncloud.android.ui.navigation.NavigatorActivity
import com.owncloud.android.ui.navigation.NavigatorScreen
import com.owncloud.android.utils.ScreenshotTest
import org.junit.Test

class SyncedFoldersActivityIT : AbstractIT() {
private val testClassName = "com.nextcloud.client.SyncedFoldersActivityIT"
class AutoUploadFragmentIT : AbstractIT() {
private val testClassName = "com.nextcloud.client.AutoUploadFragmentIT"

private fun findFragment(sut: NavigatorActivity): AutoUploadFragment =
sut.supportFragmentManager.fragments.filterIsInstance<AutoUploadFragment>().firstOrNull()
?: throw IllegalStateException("AutoUploadFragment not found in NavigatorActivity!")

private fun launch(block: (ActivityScenario<NavigatorActivity>) -> Unit) {
val intent = NavigatorActivity.intent(targetContext, NavigatorScreen.AutoUpload)
ActivityScenario.launch<NavigatorActivity>(intent).use(block)
}

@Test
@ScreenshotTest
fun open() {
launchActivity<SyncedFoldersActivity>().use { scenario ->
launch { scenario ->
val screenShotName = createName(testClassName + "_" + "open", "")
onView(isRoot()).check(matches(isDisplayed()))

scenario.onActivity { sut ->
sut.adapter.clear()
screenshotViaName(sut.binding.emptyList.emptyListView, screenShotName)
val fragment = findFragment(sut)
fragment.adapter.clear()
val emptyListView = fragment.requireView().findViewById<View>(R.id.empty_list_view)
screenshotViaName(emptyListView, screenShotName)
}
}
}
Expand Down Expand Up @@ -67,15 +81,15 @@ class SyncedFoldersActivityIT : AbstractIT() {
SyncedFolder.NOT_SCANNED_YET
)

val intent = Intent(targetContext, SyncedFoldersActivity::class.java)
launchActivity<SyncedFoldersActivity>(intent).use { scenario ->
launch { scenario ->
val screenShotName = createName(testClassName + "_" + "testSyncedFolderDialog", "")
onView(isRoot()).check(matches(isDisplayed()))

scenario.onActivity { sut ->
val fragment = newInstance(item, 0)
fragment!!.show(sut.supportFragmentManager, "")
screenshot(fragment.requireDialog().window?.decorView, screenShotName)
val dialog = newInstance(item, 0) ?: throw IllegalStateException("Dialog could not be created")
dialog.show(findFragment(sut).childFragmentManager, "")
findFragment(sut).childFragmentManager.executePendingTransactions()
screenshot(dialog.requireDialog().window?.decorView, screenShotName)
}
}
}
Expand All @@ -87,18 +101,17 @@ class SyncedFoldersActivityIT : AbstractIT() {
Looper.prepare()
}

val intent = Intent(targetContext, SyncedFoldersActivity::class.java)

launchActivity<SyncedFoldersActivity>(intent).use { scenario ->
launch { scenario ->
var dialog: AlertDialog? = null
scenario.onActivity { sut ->
dialog = sut.buildPowerCheckDialog()
sut.showPowerCheckDialog()
val fragment = findFragment(sut)
dialog = fragment.buildPowerCheckDialog()
fragment.showPowerCheckDialog()
}

val screenShotName = createName(testClassName + "_" + "showPowerCheckDialog", "")
onView(isRoot()).check(matches(isDisplayed()))
screenshot(dialog!!.window?.decorView, screenShotName)
screenshot(dialog?.window?.decorView, screenShotName)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package com.owncloud.android

import android.Manifest
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.launchActivity
import androidx.test.espresso.Espresso
import androidx.test.espresso.Espresso.onView
Expand All @@ -22,7 +23,8 @@ import androidx.test.rule.GrantPermissionRule
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.ui.activity.FileDisplayActivity
import com.owncloud.android.ui.activity.SettingsActivity
import com.owncloud.android.ui.activity.SyncedFoldersActivity
import com.owncloud.android.ui.navigation.NavigatorActivity
import com.owncloud.android.ui.navigation.NavigatorScreen
import com.owncloud.android.utils.ScreenshotTest
import org.junit.Assert.assertTrue
import org.junit.BeforeClass
Expand Down Expand Up @@ -103,7 +105,8 @@ class ScreenshotsIT : AbstractIT() {
@Test
@ScreenshotTest
fun autoUploadScreenshot() {
launchActivity<SyncedFoldersActivity>().use {
val intent = NavigatorActivity.intent(targetContext, NavigatorScreen.AutoUpload)
ActivityScenario.launch<NavigatorActivity>(intent).use {
onView(isRoot()).check(matches(isDisplayed()))
Screengrab.screenshot("05_autoUpload")
assertTrue(true)
Expand Down
3 changes: 0 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,6 @@
<activity
android:name=".ui.activity.UserInfoActivity"
android:exported="false" />
<activity
android:name=".ui.activity.SyncedFoldersActivity"
android:exported="false" />
<activity
android:name=".ui.activity.InternalTwoWaySyncActivity"
android:exported="false" />
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/nextcloud/client/di/ComponentsModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ import com.owncloud.android.ui.activity.RichDocumentsEditorWebView
import com.owncloud.android.ui.activity.SettingsActivity
import com.owncloud.android.ui.activity.ShareActivity
import com.owncloud.android.ui.activity.SsoGrantPermissionActivity
import com.owncloud.android.ui.activity.SyncedFoldersActivity
import com.owncloud.android.ui.activity.TextEditorWebView
import com.owncloud.android.ui.activity.ToolbarActivity
import com.owncloud.android.ui.activity.UploadFilesActivity
Expand Down Expand Up @@ -125,6 +124,7 @@ import com.owncloud.android.ui.fragment.contactsbackup.BackupFragment
import com.owncloud.android.ui.fragment.contactsbackup.BackupListFragment
import com.owncloud.android.ui.fragment.localfilelist.LocalFileListFragment
import com.owncloud.android.ui.fragment.notifications.NotificationsFragment
import com.owncloud.android.ui.fragment.autoUpload.AutoUploadFragment
import com.owncloud.android.ui.fragment.uploadList.UploadListFragment
import com.owncloud.android.ui.navigation.NavigatorActivity
import com.owncloud.android.ui.preview.media.PreviewMediaDownloadFragment
Expand Down Expand Up @@ -152,6 +152,9 @@ internal interface ComponentsModule {
@ContributesAndroidInjector
fun uploadListFragment(): UploadListFragment

@ContributesAndroidInjector
fun autoUploadFragment(): AutoUploadFragment

@ContributesAndroidInjector
fun activitiesFragment(): ActivitiesFragment

Expand Down Expand Up @@ -230,9 +233,6 @@ internal interface ComponentsModule {
@ContributesAndroidInjector
fun ssoGrantPermissionActivity(): SsoGrantPermissionActivity

@ContributesAndroidInjector
fun syncedFoldersActivity(): SyncedFoldersActivity

@ContributesAndroidInjector
fun trashbinFileActionsBottomSheet(): TrashbinFileActionsBottomSheet

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ import com.owncloud.android.datamodel.MediaProvider
import com.owncloud.android.datamodel.SyncedFolderProvider
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.ui.activity.ManageAccountsActivity
import com.owncloud.android.ui.activity.SyncedFoldersActivity
import com.owncloud.android.ui.navigation.NavigatorActivity
import com.owncloud.android.ui.navigation.NavigatorScreen
import com.owncloud.android.ui.notifications.NotificationUtils
import com.owncloud.android.utils.SyncedFolderUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
Expand Down Expand Up @@ -195,7 +196,7 @@ class MediaFoldersDetectionWork(
private fun sendNotification(contentTitle: String, subtitle: String, user: User, path: String, type: Int) {
val notificationId = randomIdGenerator.nextInt()

val intent = Intent(context, SyncedFoldersActivity::class.java).apply {
val intent = NavigatorActivity.intent(context, NavigatorScreen.AutoUpload).apply {
putExtra(NOTIFICATION_ID, notificationId)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
putExtra(NotificationWork.KEY_NOTIFICATION_ACCOUNT, user.accountName)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
package com.nextcloud.utils.extensions

import com.owncloud.android.datamodel.SyncedFolderDisplayItem
import java.util.Locale

private val prioritizedFolders = listOf("Camera", "Screenshots")

fun List<SyncedFolderDisplayItem?>.sortAutoUploadFolderItems(): List<SyncedFolderDisplayItem?> =
sortedWith(::compareItems)

private fun compareItems(f1: SyncedFolderDisplayItem?, f2: SyncedFolderDisplayItem?): Int = when {
f1 == null && f2 == null -> 0
f1 == null -> -1
f2 == null -> 1
f1.isEnabled && f2.isEnabled -> compareEnabledItems(f1.folderName, f2.folderName)
else -> compareMixedItems(f1, f2)
}

private fun compareEnabledItems(name1: String?, name2: String?): Int = when {
name1 == null -> -1
name2 == null -> 1
else -> compareNames(name1, name2)
}

private fun compareMixedItems(f1: SyncedFolderDisplayItem, f2: SyncedFolderDisplayItem): Int {
val name1 = f1.folderName
val name2 = f2.folderName
return when {
name1 == null && name2 == null -> 0
f1.isEnabled -> -1
f2.isEnabled -> 1
name1 == null -> -1
name2 == null -> 1
else -> comparePrioritizedNames(name1, name2)
}
}

private fun comparePrioritizedNames(name1: String, name2: String): Int {
val prioritizedFolder = prioritizedFolders.firstOrNull { it == name1 || it == name2 }
return when {
prioritizedFolder == null -> compareNames(name1, name2)
prioritizedFolder == name1 && prioritizedFolder == name2 -> 0
prioritizedFolder == name1 -> -1
else -> 1
}
}

private fun compareNames(name1: String, name2: String): Int =
name1.lowercase(Locale.getDefault()).compareTo(name2.lowercase(Locale.getDefault()))
5 changes: 3 additions & 2 deletions app/src/main/java/com/owncloud/android/MainApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@
import com.owncloud.android.lib.resources.status.NextcloudVersion;
import com.owncloud.android.lib.resources.status.OCCapability;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import com.owncloud.android.ui.activity.SyncedFoldersActivity;
import com.owncloud.android.ui.navigation.NavigatorActivity;
import com.owncloud.android.ui.navigation.NavigatorScreen;
import com.owncloud.android.ui.notifications.NotificationUtils;
import com.owncloud.android.utils.FilesSyncHelper;
import com.owncloud.android.utils.PermissionUtil;
Expand Down Expand Up @@ -864,7 +865,7 @@ private static void showAutoUploadAlertDialog(Context context) {
.setTitle(R.string.drawer_synced_folders)
.setMessage(R.string.synced_folders_new_info)
.setPositiveButton(R.string.drawer_open, (dialog, which) -> {
Intent folderSyncIntent = new Intent(context, SyncedFoldersActivity.class);
Intent folderSyncIntent = NavigatorActivity.Companion.intent(context, NavigatorScreen.AutoUpload.INSTANCE);
dialog.dismiss();
context.startActivity(folderSyncIntent);
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1464,7 +1464,7 @@ protected void handleDeepLink(@NonNull Uri uri) {

switch (deepLinkType) {
case OPEN_AUTO_UPLOAD:
startActivity(new Intent(this, SyncedFoldersActivity.class));
pushFragment(NavigatorScreen.AutoUpload.INSTANCE);
break;
case OPEN_EXTERNAL_URL:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri.getQueryParameter("url")));
Expand Down Expand Up @@ -1499,9 +1499,7 @@ public BottomNavigationView getBottomNavigationView() {
}

private void checkStoragePermissionWarningBannerVisibility() {
if (this instanceof SyncedFoldersActivity syncedFoldersActivity) {
syncedFoldersActivity.setupStoragePermissionWarningBanner();
} else if (this instanceof UploadFilesActivity uploadFilesActivity) {
if (this instanceof UploadFilesActivity uploadFilesActivity) {
uploadFilesActivity.setupStoragePermissionWarningBanner();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -484,9 +484,8 @@ class FileDisplayActivity :
R.string.drawer_open
) { dialog: DialogInterface?, which: Int ->
// show instant upload
val syncedFoldersIntent = Intent(applicationContext, SyncedFoldersActivity::class.java)
dialog?.dismiss()
startActivity(syncedFoldersIntent)
pushFragment(NavigatorScreen.AutoUpload)
}.setNegativeButton(
R.string.drawer_close
) { dialog: DialogInterface?, which: Int -> dialog?.dismiss() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@
import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment;
import com.owncloud.android.ui.helpers.FileOperationsHelper;
import com.owncloud.android.ui.model.ExtendedSettingsActivityDialog;
import com.owncloud.android.ui.navigation.NavigatorActivity;
import com.owncloud.android.ui.navigation.NavigatorScreen;
import com.owncloud.android.utils.ClipboardUtil;
import com.owncloud.android.utils.DeviceCredentialUtils;
import com.owncloud.android.utils.EncryptionUtils;
Expand Down Expand Up @@ -681,8 +683,7 @@ private void setupAutoUploadPreference(PreferenceCategory preferenceCategoryMore
preferenceCategoryMore.removePreference(autoUpload);
} else {
autoUpload.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(this, SyncedFoldersActivity.class);
startActivity(intent);
startActivity(NavigatorActivity.Companion.intent(this, NavigatorScreen.AutoUpload.INSTANCE));
return true;
});
}
Expand Down Expand Up @@ -896,8 +897,7 @@ private void setupAutoUploadCategory(PreferenceScreen preferenceScreen) {
if (pSyncedFolder != null) {
if (getResources().getBoolean(R.bool.syncedFolder_light)) {
pSyncedFolder.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(this, SyncedFoldersActivity.class);
startActivity(intent);
startActivity(NavigatorActivity.Companion.intent(this, NavigatorScreen.AutoUpload.INSTANCE));
return true;
});
} else {
Expand Down
Loading
Loading