• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 package com.android.providers.media.photopicker.data;
17 
18 import static android.content.ContentResolver.QUERY_ARG_LIMIT;
19 
20 import static com.android.providers.media.photopicker.data.PickerDbFacade.QueryFilterBuilder.BOOLEAN_DEFAULT;
21 import static com.android.providers.media.photopicker.data.PickerDbFacade.QueryFilterBuilder.LIMIT_DEFAULT;
22 import static com.android.providers.media.photopicker.data.PickerDbFacade.QueryFilterBuilder.LONG_DEFAULT;
23 import static com.android.providers.media.photopicker.data.PickerDbFacade.QueryFilterBuilder.STRING_ARRAY_DEFAULT;
24 import static com.android.providers.media.photopicker.data.PickerDbFacade.QueryFilterBuilder.STRING_DEFAULT;
25 
26 import android.content.Intent;
27 import android.os.Bundle;
28 import android.provider.CloudMediaProviderContract;
29 import android.provider.CloudMediaProviderContract.AlbumColumns;
30 import android.provider.MediaStore;
31 
32 import com.android.providers.media.photopicker.PickerDataLayer;
33 
34 /**
35  * Represents the {@link CloudMediaProviderContract} extra filters from a {@link Bundle}.
36  */
37 public class CloudProviderQueryExtras {
38     private final String mAlbumId;
39     private final String mAlbumAuthority;
40     private final String[] mMimeTypes;
41     private final long mSizeBytes;
42     private final long mGeneration;
43     private final int mLimit;
44     private final boolean mIsFavorite;
45     private final boolean mIsVideo;
46     private final boolean mIsLocalOnly;
47 
CloudProviderQueryExtras()48     private CloudProviderQueryExtras() {
49         mAlbumId = STRING_DEFAULT;
50         mAlbumAuthority = STRING_DEFAULT;
51         mMimeTypes = STRING_ARRAY_DEFAULT;
52         mSizeBytes = LONG_DEFAULT;
53         mGeneration = LONG_DEFAULT;
54         mLimit = LIMIT_DEFAULT;
55         mIsFavorite = BOOLEAN_DEFAULT;
56         mIsVideo = BOOLEAN_DEFAULT;
57         mIsLocalOnly = BOOLEAN_DEFAULT;
58     }
59 
CloudProviderQueryExtras(String albumId, String albumAuthority, String[] mimeTypes, long sizeBytes, long generation, int limit, boolean isFavorite, boolean isVideo, boolean isLocalOnly)60     private CloudProviderQueryExtras(String albumId, String albumAuthority, String[] mimeTypes,
61             long sizeBytes, long generation, int limit, boolean isFavorite, boolean isVideo,
62             boolean isLocalOnly) {
63         mAlbumId = albumId;
64         mAlbumAuthority = albumAuthority;
65         mMimeTypes = mimeTypes;
66         mSizeBytes = sizeBytes;
67         mGeneration = generation;
68         mLimit = limit;
69         mIsFavorite = isFavorite;
70         mIsVideo = isVideo;
71         mIsLocalOnly = isLocalOnly;
72     }
73 
74     /**
75      * Builds {@link CloudProviderQueryExtras} from {@link Bundle} queryExtras from MediaProvider
76      */
fromMediaStoreBundle(Bundle bundle)77     public static CloudProviderQueryExtras fromMediaStoreBundle(Bundle bundle) {
78         if (bundle == null) {
79             return new CloudProviderQueryExtras();
80         }
81 
82         final String albumId = bundle.getString(MediaStore.QUERY_ARG_ALBUM_ID, STRING_DEFAULT);
83         final String albumAuthority = bundle.getString(MediaStore.QUERY_ARG_ALBUM_AUTHORITY,
84                 STRING_DEFAULT);
85         final String[] mimeTypes = bundle.getStringArray(MediaStore.QUERY_ARG_MIME_TYPE);
86 
87         final long sizeBytes = bundle.getLong(MediaStore.QUERY_ARG_SIZE_BYTES, LONG_DEFAULT);
88         final long generation = LONG_DEFAULT;
89         final int limit = bundle.getInt(QUERY_ARG_LIMIT, LIMIT_DEFAULT);
90 
91         final boolean isFavorite = AlbumColumns.ALBUM_ID_FAVORITES.equals(albumId);
92         final boolean isVideo = AlbumColumns.ALBUM_ID_VIDEOS.equals(albumId);
93 
94         final boolean isLocalOnly = bundle.getBoolean(PickerDataLayer.QUERY_ARG_LOCAL_ONLY,
95                 BOOLEAN_DEFAULT);
96 
97         return new CloudProviderQueryExtras(albumId, albumAuthority, mimeTypes, sizeBytes,
98                 generation, limit, isFavorite, isVideo, isLocalOnly);
99     }
100 
fromCloudMediaBundle(Bundle bundle)101     public static CloudProviderQueryExtras fromCloudMediaBundle(Bundle bundle) {
102         if (bundle == null) {
103             return new CloudProviderQueryExtras();
104         }
105 
106         final String albumId = bundle.getString(CloudMediaProviderContract.EXTRA_ALBUM_ID,
107                 STRING_DEFAULT);
108         final String albumAuthority = STRING_DEFAULT;
109         final String[] mimeTypes = bundle.getStringArray(
110                 Intent.EXTRA_MIME_TYPES);
111         final long sizeBytes = bundle.getLong(CloudMediaProviderContract.EXTRA_SIZE_LIMIT_BYTES,
112                 LONG_DEFAULT);
113         final long generation = bundle.getLong(CloudMediaProviderContract.EXTRA_SYNC_GENERATION,
114                 LONG_DEFAULT);
115         final int limit = LIMIT_DEFAULT;
116 
117         final boolean isFavorite = BOOLEAN_DEFAULT;
118         final boolean isVideo = BOOLEAN_DEFAULT;
119         final boolean isLocalOnly = BOOLEAN_DEFAULT;
120 
121         return new CloudProviderQueryExtras(albumId, albumAuthority, mimeTypes, sizeBytes,
122                 generation, limit, isFavorite, isVideo, isLocalOnly);
123     }
124 
toQueryFilter()125     public PickerDbFacade.QueryFilter toQueryFilter() {
126         PickerDbFacade.QueryFilterBuilder qfb = new PickerDbFacade.QueryFilterBuilder(mLimit);
127         qfb.setSizeBytes(mSizeBytes);
128         qfb.setMimeTypes(mMimeTypes);
129         qfb.setIsFavorite(mIsFavorite);
130         qfb.setIsVideo(mIsVideo);
131         qfb.setAlbumId(mAlbumId);
132         qfb.setIsLocalOnly(mIsLocalOnly);
133         return qfb.build();
134     }
135 
toCloudMediaBundle()136     public Bundle toCloudMediaBundle() {
137         final Bundle extras = new Bundle();
138         extras.putString(CloudMediaProviderContract.EXTRA_ALBUM_ID, mAlbumId);
139         extras.putStringArray(Intent.EXTRA_MIME_TYPES, mMimeTypes);
140         extras.putLong(CloudMediaProviderContract.EXTRA_SIZE_LIMIT_BYTES, mSizeBytes);
141 
142         return extras;
143     }
144 
getAlbumId()145     public String getAlbumId() {
146         return mAlbumId;
147     }
148 
getAlbumAuthority()149     public String getAlbumAuthority() {
150         return mAlbumAuthority;
151     }
152 
getMimeTypes()153     public String[] getMimeTypes() {
154         return mMimeTypes;
155     }
156 
getSizeBytes()157     public long getSizeBytes() {
158         return mSizeBytes;
159     }
160 
getGeneration()161     public long getGeneration() {
162         return mGeneration;
163     }
164 
isFavorite()165     public boolean isFavorite() {
166         return mIsFavorite;
167     }
168 
isVideo()169     public boolean isVideo() {
170         return mIsVideo;
171     }
172 
isLocalOnly()173     public boolean isLocalOnly() {
174         return mIsLocalOnly;
175     }
176 }
177