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