1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
package it.niedermann.owncloud.notes.glide;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoaderFactory;
import com.bumptech.glide.load.model.MultiModelLoaderFactory;
import com.google.gson.GsonBuilder;
import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
import java.io.InputStream;
/**
* A simple model loader for fetching media over http/https using OkHttp.
*/
public class SingleSignOnUrlLoader implements ModelLoader<GlideUrl, InputStream> {
private static final String TAG = SingleSignOnUrlLoader.class.getCanonicalName();
private final NextcloudAPI client;
// Public API.
@SuppressWarnings("WeakerAccess")
public SingleSignOnUrlLoader(@NonNull NextcloudAPI client) {
this.client = client;
}
@Override
public boolean handles(@NonNull GlideUrl url) {
return true;
}
@Override
public LoadData<InputStream> buildLoadData(
@NonNull GlideUrl model, int width, int height, @NonNull Options options) {
return new LoadData<>(model, new SingleSignOnStreamFetcher(client, model));
}
/**
* The default factory for {@link SingleSignOnUrlLoader}s.
*/
// Public API.
@SuppressWarnings("WeakerAccess")
public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {
private SingleSignOnUrlLoader loader;
/**
* Constructor for a new Factory that runs requests using given client.
*/
public Factory(@NonNull Context context) {
try {
loader = new SingleSignOnUrlLoader(new NextcloudAPI(context, SingleAccountHelper.getCurrentSingleSignOnAccount(context), new GsonBuilder().create(), new NextcloudAPI.ApiConnectedListener() {
@Override
public void onConnected() {
Log.v(TAG, "SSO API successfully initialized");
}
@Override
public void onError(Exception ex) {
Log.e(TAG, ex.getMessage(), ex);
}
}));
} catch (NextcloudFilesAppAccountNotFoundException e) {
e.printStackTrace();
} catch (NoCurrentAccountSelectedException e) {
e.printStackTrace();
}
}
@NonNull
@Override
public ModelLoader<GlideUrl, InputStream> build(MultiModelLoaderFactory multiFactory) {
return loader;
}
@Override
public void teardown() {
// Do nothing, this instance doesn't own the client.
}
}
}
|