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