1 /* 2 * Copyright (C) 2023 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 android.scopedstorage.cts.device; 18 19 import static android.scopedstorage.cts.device.FileCreationUtils.createContentFromResource; 20 import static android.scopedstorage.cts.lib.TestUtils.getDcimDir; 21 22 import static com.google.common.truth.Truth.assertThat; 23 24 import android.content.ContentResolver; 25 import android.net.Uri; 26 import android.provider.MediaStore; 27 28 import org.junit.rules.ExternalResource; 29 30 import java.io.File; 31 import java.io.IOException; 32 33 public class OwnedFilesRule extends ExternalResource { 34 35 private static final String TAG = "OwnedFilesRule"; 36 public static final int RESOURCE_ID = R.raw.scenery; 37 public static final int RESOURCE_ID_WITH_METADATA = R.raw.img_with_metadata; 38 private static final String NONCE = String.valueOf(System.nanoTime()); 39 private static final String IMAGE_1 = TAG + "_image1_" + NONCE + ".jpg"; 40 private static final String IMAGE_2 = TAG + "_image2_" + NONCE + ".jpg"; 41 private static final String VIDEO_1 = TAG + "_video1_" + NONCE + ".mp4"; 42 43 private final ContentResolver mContentResolver; 44 45 private final File mImageFile1 = new File(getDcimDir(), IMAGE_1); 46 private final File mImageFile2Metadata = new File(getDcimDir(), IMAGE_2); 47 48 private final File mVideoFile1 = new File(getDcimDir(), VIDEO_1); 49 private Uri mImageUri1; 50 private Uri mImageUri2; 51 private Uri mVideoUri1; 52 OwnedFilesRule(ContentResolver contentResolver)53 public OwnedFilesRule(ContentResolver contentResolver) { 54 this.mContentResolver = contentResolver; 55 } 56 57 @Override before()58 protected void before() throws IOException { 59 mImageUri1 = createFile(RESOURCE_ID, mImageFile1); 60 mImageUri2 = createFile(RESOURCE_ID_WITH_METADATA, mImageFile2Metadata); 61 mVideoUri1 = createFile(mVideoFile1); 62 63 } 64 createFile(int resourceId, File imageFile)65 public Uri createFile(int resourceId, File imageFile) throws IOException { 66 assertThat(imageFile.createNewFile()).isTrue(); 67 Uri uri = MediaStore.scanFile(mContentResolver, imageFile); 68 createContentFromResource(resourceId, imageFile); 69 assertThat(uri).isNotNull(); 70 return uri; 71 } 72 createFile(File file)73 public Uri createFile(File file) throws IOException { 74 assertThat(file.createNewFile()).isTrue(); 75 Uri uri = MediaStore.scanFile(mContentResolver, file); 76 assertThat(uri).isNotNull(); 77 return uri; 78 } 79 80 @Override after()81 protected void after() { 82 mImageFile1.delete(); 83 mImageFile2Metadata.delete(); 84 mVideoFile1.delete(); 85 } 86 getImageFile1()87 public File getImageFile1() { 88 return mImageFile1; 89 } 90 getImageFile2Metadata()91 public File getImageFile2Metadata() { 92 return mImageFile2Metadata; 93 } 94 getVideoFile1()95 public File getVideoFile1() { 96 return mVideoFile1; 97 } 98 99 getImageUri1()100 public Uri getImageUri1() { 101 return mImageUri1; 102 } 103 getImageUri2_Metadata()104 public Uri getImageUri2_Metadata() { 105 return mImageUri2; 106 } 107 getVideoUri1()108 public Uri getVideoUri1() { 109 return mVideoUri1; 110 } 111 } 112