Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE REQUEST] oCIS Users light #4518

Merged
merged 25 commits into from
Dec 4, 2024
Merged

[FEATURE REQUEST] oCIS Users light #4518

merged 25 commits into from
Dec 4, 2024

Conversation

joragua
Copy link
Collaborator

@joragua joragua commented Nov 26, 2024

Related Issues

App: #4490

  • Add changelog files for the fixed issues in folder changelog/unreleased. More info here
  • Add feature to Release Notes in ReleaseNotesViewModel.kt creating a new ReleaseNote() with String resources (if required)

QA

Test plan: https://github.com/owncloud/QA/blob/master/Mobile/Android/Executions/Release_4.5/No%20Personal%20space.md

Reports:

@joragua joragua self-assigned this Nov 26, 2024
@joragua joragua changed the title [FEATURE] oCIS Light Users [FEATURE REQUEST] oCIS Light Users Nov 26, 2024
@joragua joragua linked an issue Nov 26, 2024 that may be closed by this pull request
18 tasks
@joragua joragua force-pushed the feature/light_users branch 2 times, most recently from c8cdae3 to c193f02 Compare November 26, 2024 09:26
@joragua
Copy link
Collaborator Author

joragua commented Nov 26, 2024

COMPLETED TASKS ✅

  • Added a condition to support light users in the login
  • Created a new fragment to show an empty folder in Personal tab
  • Disabled refresh from av. offline view
  • Updated drawer and manage accounts for light users
  • Modified automatic uploads for light users (if there are only light users, automatic uploads are disabled. On the other hand, light accounts are removed from accounts list)
  • Modified ReceiveExternalFiles
  • Added a new condition to avoid oCIS accounts warning dialog for light users

@joragua joragua requested a review from JuancaG05 November 26, 2024 09:45
@joragua joragua marked this pull request as ready for review November 26, 2024 09:46
@JuancaG05 JuancaG05 changed the title [FEATURE REQUEST] oCIS Light Users [FEATURE REQUEST] oCIS Light users Nov 27, 2024
Copy link
Collaborator

@JuancaG05 JuancaG05 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job here @joragua! Some comments and questions before we proceed to QA 👍

@joragua joragua requested a review from JuancaG05 November 28, 2024 10:07
@joragua joragua force-pushed the feature/light_users branch 3 times, most recently from 8273a93 to 9791efb Compare November 28, 2024 10:55
Copy link
Collaborator

@JuancaG05 JuancaG05 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, moving to QA!

@joragua joragua force-pushed the feature/light_users branch from f739c47 to 69e545e Compare November 28, 2024 11:01
@jesmrec
Copy link
Collaborator

jesmrec commented Nov 28, 2024

(1) [FIXED]

  1. Login with a User Light in oCIS
  2. In Settings try to enable automatic uploads

Current:

Not posible, and no feedback why

Expected:

Not posible, but user should know why (snackbar, subtitle..)

Xiaomi Redmi Note 13
Android 14
69e545e34

@joragua
Copy link
Collaborator Author

joragua commented Nov 28, 2024

(1) should be done with the last commit @jesmrec

@jesmrec
Copy link
Collaborator

jesmrec commented Nov 28, 2024

(2) [FIXED]

  1. User light with at least one space
  2. Enter in the space and select Copy for any file -> list of spaces is displayed
  3. Select any space

Current:

App crashes. This is the stacktrace:

FATAL EXCEPTION: main (Ask Gemini)
                 Process: com.owncloud.android.debug, PID: 21197
                 java.lang.ClassCastException: com.owncloud.android.ui.activity.FolderPickerActivity cannot be cast to com.owncloud.android.ui.activity.FileDisplayActivity
                 	at com.owncloud.android.presentation.files.filelist.MainFileListFragment$subscribeToViewModels$1.invokeSuspend(MainFileListFragment.kt:319)
                 	at com.owncloud.android.presentation.files.filelist.MainFileListFragment$subscribeToViewModels$1.invoke(Unknown Source:8)
                 	at com.owncloud.android.presentation.files.filelist.MainFileListFragment$subscribeToViewModels$1.invoke(Unknown Source:4)
                 	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invokeSuspend(Merge.kt:214)
                 	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:13)
                 	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:4)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invokeSuspend(Merge.kt:34)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:8)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:4)
                 	at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
                 	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
                 	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
                 	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
                 	at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
                 	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
                 	at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1.emit(Merge.kt:33)
                 	at kotlinx.coroutines.flow.StateFlowImpl.collect(StateFlow.kt:398)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invokeSuspend(Merge.kt:27)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(Unknown Source:8)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(Unknown Source:4)
                 	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
                 	at kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:264)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest.flowCollect(Merge.kt:25)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowOperator.collectTo$suspendImpl(ChannelFlow.kt:157)
                 	at kotlinx.coroutines.flow.internal.ChannelFlowOperator.collectTo(Unknown Source:0)
                 	at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:60)
                 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                 	at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:69)
                 	at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:376)
                 	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)
                 	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25)
                 	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110)
                 	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
                 	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
                 	at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
                 	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
                 	at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
                 	at androidx.lifecycle.RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1.onStateChanged(RepeatOnLifecycle.kt:106)
                 	at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:360)
                 	at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:271)
13:21:27.651  E  	at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:313) (Ask Gemini)
                 	at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:151)
                 	at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
                 	at androidx.fragment.app.Fragment.performStart(Fragment.java:3176)
                 	at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:588)
                 	at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:279)
                 	at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1901)
                 	at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1819)
                 	at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1762)
                 	at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:547)
                 	at android.os.Handler.handleCallback(Handler.java:958)
                 	at android.os.Handler.dispatchMessage(Handler.java:99)
                 	at android.os.Looper.loopOnce(Looper.java:224)
                 	at android.os.Looper.loop(Looper.java:318)
                 	at android.app.ActivityThread.main(ActivityThread.java:8763)
                 	at java.lang.reflect.Method.invoke(Native Method)
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
                 	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@17a752, Dispatchers.Main.immediate]

Expected:

No crash

Xiaomi Redmi Note 13
Android 14
69e545e34

@jesmrec
Copy link
Collaborator

jesmrec commented Nov 28, 2024

(3) [FIXED]

Related with navigation

  1. A user light with edit permissions enters in any space with edit permissions
  2. Click on FAB -> Upload
  3. Upload some files

Current:

Personal is displayed (the new fragment), but Spaces selected in the bottom bar:

Screen_recording_20241128_140154.mp4

Expected:

Space's list of files is displayed with the new files uploaded

NOTE: Also reproducible with regular users, and not in master

Xiaomi Redmi Note 13
Android 14
254d09323

@jesmrec
Copy link
Collaborator

jesmrec commented Nov 29, 2024

(4) [MOVED to https://github.com//issues/4522]

maybe related with (3)

  1. Enter in a 3rd party app
  2. Share something with any user (light or not), inside an space (not Personal)

Current:

empty list in the picker, but not in every space of every account... that's strange

Screen_recording_20241129_094551.mp4

Expected:

list of files inside the space is displayed.

Xiaomi Redmi Note 13
Android 14
b064986

@jesmrec
Copy link
Collaborator

jesmrec commented Nov 29, 2024

Note that (4) is also reproducible in current master, so it's not something from this PR and does not need to be fixed here.

It is not reproducible in stable so this is a regression that must be fixed in the scope of the current version.

@joragua joragua force-pushed the feature/light_users branch 2 times, most recently from dcfb6b8 to 28cf5de Compare November 29, 2024 13:50
@jesmrec
Copy link
Collaborator

jesmrec commented Nov 29, 2024

(5) [FIXED]

  1. Add two accounts: user light and regular user
  2. Go to Settings and enable automatic uploads

Current:

Account to upload pictures as Not set .

Expected:

One account should be set as target when automatic uploads are enabled. Otherwise, the uploads will not have a target to upload and fail with a non-recoverable Connection error

Xiaomi Redmi Note 13
Android 14
b064986

@joragua joragua force-pushed the feature/light_users branch 2 times, most recently from 679c9c7 to bf814d7 Compare December 2, 2024 09:47
@joragua joragua force-pushed the feature/light_users branch from 431679c to 98ebf7c Compare December 2, 2024 10:31
@joragua
Copy link
Collaborator Author

joragua commented Dec 2, 2024

(2) (3) and (5) should be fixed @jesmrec

@jesmrec
Copy link
Collaborator

jesmrec commented Dec 4, 2024

Report (4) was moved to #4522, because it's not a matter of the current PR

@jesmrec
Copy link
Collaborator

jesmrec commented Dec 4, 2024

(6) [FIXED]

  1. Add a non-user light account (a regular one)
  2. In Settings, enable automatic uploads -> current account set as default target
  3. Add another account to the app

Current

In Settings > automatic uploads, the newly added account is set as target

Expected:

the target account of automatic uploads should be only changed by the user. The account set in step 2. must keep.

Xiaomi Readmi 13
Android 14
4f3409b0b

@JuancaG05 JuancaG05 changed the title [FEATURE REQUEST] oCIS Light users [FEATURE REQUEST] oCIS Users light Dec 4, 2024
@jesmrec
Copy link
Collaborator

jesmrec commented Dec 4, 2024

Approved on my side 💯

@joragua joragua merged commit 59f9378 into master Dec 4, 2024
7 checks passed
@joragua joragua deleted the feature/light_users branch December 4, 2024 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEATURE REQUEST] oCIS Users light
3 participants