diff options
author | Stefan Niedermann <info@niedermann.it> | 2023-03-24 13:02:55 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2023-03-24 13:03:02 +0300 |
commit | 79a1a9aa5cc9faf7ef0ada5086aa36dad2f729a5 (patch) | |
tree | ac577b4e0f103a45e2af31b5eca754bbb06d4dd4 /app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java | |
parent | 35ca8886441d281385d9f742e45220e549455e95 (diff) |
fix: Fixed ViewModel scoping which caused using wrong accounts to synchronize leading to HTTP 403
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java index 0b9bff3e1..4cfd498d2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/viewmodel/SyncViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelStoreOwner; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; @@ -19,6 +20,11 @@ import it.niedermann.nextcloud.deck.ui.stack.StackViewModel; /** * To be used for {@link ViewModel}s which need an {@link SyncRepository} instance + * <p> + * <code> + * new SyncViewModel.Provider(requireActivity(), requireActivity().getApplication(), account).get(CustomViewModel.class) + * </code> + * </p> */ public abstract class SyncViewModel extends BaseViewModel { @@ -38,7 +44,27 @@ public abstract class SyncViewModel extends BaseViewModel { this.syncRepository = syncRepository; } - public static class Factory implements ViewModelProvider.Factory { + public static class Provider extends ViewModelProvider { + + @NonNull + private final Account account; + + public Provider(@NonNull ViewModelStoreOwner owner, @NonNull Application application, @NonNull Account account) { + super(owner, new SyncViewModel.Factory(application, account)); + this.account = account; + } + + /** + * Calls {@link #get(String, Class)} with a custom key to retrieve a {@link ViewModel} instance scoped by the {@param modelClass} for the {@link Account} provided in the constructor. + */ + @NonNull + @Override + public <T extends ViewModel> T get(@NonNull Class<T> modelClass) { + return get(modelClass.getCanonicalName() + "@" + account.getName(), modelClass); + } + } + + private static class Factory implements ViewModelProvider.Factory { private final Application application; private final Account account; |