1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.providers.media.cloudproviders;
18 
19 import static android.provider.CloudMediaProviderContract.EXTRA_PAGE_TOKEN;
20 
21 import static com.android.providers.media.PickerProviderMediaGenerator.MediaGenerator;
22 import static com.android.providers.media.photopicker.ui.testapp.TestActivityUtils.TEST_ACTIVITY_INTENT;
23 
24 import android.content.res.AssetFileDescriptor;
25 import android.database.Cursor;
26 import android.graphics.Point;
27 import android.os.Bundle;
28 import android.os.CancellationSignal;
29 import android.os.ParcelFileDescriptor;
30 import android.provider.CloudMediaProvider;
31 
32 import com.android.providers.media.PickerProviderMediaGenerator;
33 import com.android.providers.media.photopicker.data.CloudProviderQueryExtras;
34 
35 import java.io.FileNotFoundException;
36 
37 /**
38  * Implements a cloud {@link CloudMediaProvider} interface over items generated with
39  * {@link MediaGenerator}
40  */
41 public class CloudProviderSecondary extends CloudMediaProvider {
42     public static final String AUTHORITY =
43             "com.android.providers.media.photopicker.tests.cloud_secondary";
44     public static final String ACCOUNT_NAME = "test_account@secondaryCloudProvider";
45 
46     private final MediaGenerator mMediaGenerator =
47             PickerProviderMediaGenerator.getMediaGenerator(AUTHORITY);
48 
49     @Override
onCreate()50     public boolean onCreate() {
51         mMediaGenerator.setAccountInfo(ACCOUNT_NAME, TEST_ACTIVITY_INTENT);
52         return true;
53     }
54 
55     @Override
onQueryMedia(Bundle extras)56     public Cursor onQueryMedia(Bundle extras) {
57         final CloudProviderQueryExtras queryExtras =
58                 CloudProviderQueryExtras.fromCloudMediaBundle(extras);
59 
60         String pageToken = extras.getString(EXTRA_PAGE_TOKEN, null);
61 
62         return mMediaGenerator.getMedia(queryExtras.getGeneration(), queryExtras.getAlbumId(),
63                 queryExtras.getMimeTypes(), queryExtras.getSizeBytes(), pageToken,
64                 queryExtras.getPageSize());
65     }
66 
67     @Override
onQueryDeletedMedia(Bundle extras)68     public Cursor onQueryDeletedMedia(Bundle extras) {
69         final CloudProviderQueryExtras queryExtras =
70                 CloudProviderQueryExtras.fromCloudMediaBundle(extras);
71 
72         String pageToken = extras.getString(EXTRA_PAGE_TOKEN, null);
73         return mMediaGenerator.getDeletedMedia(queryExtras.getGeneration(), pageToken);
74     }
75 
76     @Override
onQueryAlbums(Bundle extras)77     public Cursor onQueryAlbums(Bundle extras) {
78         final CloudProviderQueryExtras queryExtras =
79                 CloudProviderQueryExtras.fromCloudMediaBundle(extras);
80 
81         String pageToken = extras.getString(EXTRA_PAGE_TOKEN, null);
82         return mMediaGenerator.getAlbums(queryExtras.getMimeTypes(), queryExtras.getSizeBytes(),
83                 /* isLocal */ false, pageToken);
84     }
85 
86     @Override
onOpenPreview(String mediaId, Point size, Bundle extras, CancellationSignal signal)87     public AssetFileDescriptor onOpenPreview(String mediaId, Point size, Bundle extras,
88             CancellationSignal signal) throws FileNotFoundException {
89         throw new UnsupportedOperationException("onOpenPreview not supported");
90     }
91 
92     @Override
onOpenMedia(String mediaId, Bundle extras, CancellationSignal signal)93     public ParcelFileDescriptor onOpenMedia(String mediaId, Bundle extras,
94             CancellationSignal signal) throws FileNotFoundException {
95         throw new UnsupportedOperationException("onOpenMedia not supported");
96     }
97 
98     @Override
onGetMediaCollectionInfo(Bundle extras)99     public Bundle onGetMediaCollectionInfo(Bundle extras) {
100         return mMediaGenerator.getMediaCollectionInfo();
101     }
102 }
103