Skip to content

Commit 90d9bbd

Browse files
authored
Add Storage Access Framework demos (#191)
* Add Storage Access Framework sample * Upgrade to compileSdk 36 Add Jetpack photopicker library
1 parent d8492a9 commit 90d9bbd

File tree

23 files changed

+895
-83
lines changed

23 files changed

+895
-83
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Browse the samples inside each topic samples folder:
2121
- [User-interface](https://github.com/android/platform-samples/tree/main/samples/user-interface)
2222
- More to come...
2323

24-
We regularly add new samples to this repository. You can find a list of all the available samples [here](https://github.com/android/platform-samples/tree/main/samples).
24+
We are constantly adding new samples to this repository. You can find a list of all the available samples [here](https://github.com/android/platform-samples/tree/main/samples).
2525

2626
## How to run
2727

app/src/main/java/com/example/platform/app/SampleDemo.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import com.example.platform.shared.MinSdkBox
6464
import com.example.platform.storage.mediastore.MediaStoreQuerySample
6565
import com.example.platform.storage.mediastore.SelectedPhotosAccessSample
6666
import com.example.platform.storage.photopicker.PhotoPickerSample
67+
import com.example.platform.storage.storageaccessframework.GetContentSample
6768
import com.example.platform.ui.appwidgets.AppWidgets
6869
import com.example.platform.ui.constraintlayout.AdvancedArrangementFragment
6970
import com.example.platform.ui.constraintlayout.AdvancedChainsFragment
@@ -580,6 +581,14 @@ val SAMPLE_DEMOS by lazy {
580581
apiSurface = StorageApiSurface,
581582
content = { MediaStoreQuerySample() },
582583
),
584+
ComposableSampleDemo(
585+
id = "storageaccessframework-getcontent",
586+
name = "Storage Access Framework - GET_CONTENT",
587+
description = "Open a document using the Storage Access Framework",
588+
documentation = "https://developer.android.com/training/data-storage/shared/documents-files#open-file",
589+
apiSurface = StorageApiSurface,
590+
content = { GetContentSample() },
591+
),
583592
ComposableSampleDemo(
584593
id = "selected-photos-access",
585594
name = "Selected Photos Access",

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ material = "1.12.0"
3030
coil = "2.4.0"
3131
navigationCompose = "2.8.7"
3232
coroutines = "1.7.3"
33+
photopickerCompose = "1.0.0-alpha01"
3334
play-services-location = "21.1.0"
3435

3536
accompanist = "0.32.0"
@@ -67,6 +68,7 @@ playServicesMlkitBarcodeScanning = "18.3.1"
6768
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
6869
androidx-fragment-compose = { module = "androidx.fragment:fragment-compose", version.ref = "fragmentCompose" }
6970
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
71+
androidx-photopicker-compose = { module = "androidx.photopicker:photopicker-compose", version.ref = "photopickerCompose" }
7072
junit = { group = "junit", name = "junit", version.ref = "junit" }
7173
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
7274
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }

samples/accessibility/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ android {
4242
dependencies {
4343
implementation(platform(libs.androidx.compose.bom))
4444
implementation(libs.androidx.ui)
45+
implementation(libs.androidx.ui.tooling)
4546
implementation(libs.androidx.ui.tooling.preview)
4647
implementation(libs.androidx.material3)
4748
implementation(libs.androidx.fragment)

samples/privacy/transparency/src/main/java/com/example/platform/privacy/transparency/DataAccess.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,10 @@ import androidx.compose.ui.platform.LocalContext
4747
import androidx.compose.ui.platform.LocalLifecycleOwner
4848
import androidx.compose.ui.unit.dp
4949
import androidx.core.app.AppOpsManagerCompat
50-
//import androidx.core.content.getSystemService
5150
import androidx.lifecycle.Lifecycle
5251
import androidx.lifecycle.LifecycleEventObserver
5352
import androidx.lifecycle.LifecycleOwner
54-
//import com.example.platform.base.PermissionBox
5553
import com.example.platform.shared.PermissionBox
56-
//import com.google.android.catalog.framework.annotations.Sample
5754
import com.google.android.gms.location.LocationServices
5855
import com.google.android.gms.location.Priority
5956
import com.google.android.gms.tasks.CancellationTokenSource
@@ -62,13 +59,6 @@ import kotlinx.coroutines.launch
6259
import kotlinx.coroutines.tasks.await
6360

6461
@SuppressLint("MissingPermission")
65-
//@Sample(
66-
// name = "Data Access",
67-
// description = "Demonstrates how to implement data access auditing for your app to identify " +
68-
// "unexpected data access, even from third-party SDKs and libraries.",
69-
// documentation = "https://developer.android.com/guide/topics/data/audit-access",
70-
//)
71-
7262
@RequiresApi(Build.VERSION_CODES.R)
7363
@Composable
7464
fun DataAccessSample() {

samples/privacy/transparency/src/main/java/com/example/platform/privacy/transparency/ScreenshotDetection.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ import androidx.fragment.app.Fragment
3939
import java.text.DateFormat
4040
import java.util.Date
4141

42-
//@Sample(
43-
// name = "Screenshot Detection",
44-
// description = "This sample shows how to detect that the user capture the screen in Android 14 onwards",
45-
//)
4642
@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
4743
class ScreenshotDetectionSample : Fragment() {
4844

samples/storage/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ dependencies {
4343
implementation(platform(libs.androidx.compose.bom))
4444
implementation(libs.androidx.ui)
4545
implementation(libs.androidx.ui.graphics)
46+
implementation(libs.androidx.ui.tooling)
4647
implementation(libs.androidx.ui.tooling.preview)
4748
implementation(libs.androidx.material3)
49+
implementation(libs.androidx.photopicker.compose)
4850

4951
implementation(project(":shared"))
5052

samples/storage/src/main/java/com/example/platform/storage/StorageSampleActivity.kt

Lines changed: 0 additions & 43 deletions
This file was deleted.

samples/storage/src/main/java/com/example/platform/storage/mediastore/MediaStoreQuery.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,10 @@ import androidx.compose.ui.platform.LocalContext
4545
import androidx.compose.ui.text.style.TextOverflow
4646
import androidx.compose.ui.unit.dp
4747
import coil.compose.AsyncImage
48-
//import com.example.platform.base.PermissionBox
4948
import com.example.platform.shared.PermissionBox
50-
//import com.google.android.catalog.framework.annotations.Sample
5149
import kotlinx.coroutines.Dispatchers
5250
import kotlinx.coroutines.withContext
5351

54-
//@Sample(
55-
// name = "MediaStore - Query",
56-
// description = "Query files indexed by MediaStore",
57-
// documentation = "https://developer.android.com/training/data-storage/shared/media#media_store",
58-
//)
5952
@SuppressLint("MissingPermission")
6053
@Composable
6154
fun MediaStoreQuerySample() {

samples/storage/src/main/java/com/example/platform/storage/mediastore/SelectedPhotosAccess.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ import kotlinx.coroutines.Dispatchers
4848
import kotlinx.coroutines.launch
4949
import kotlinx.coroutines.withContext
5050

51-
//@Sample(
52-
// name = "Selected Photos Access",
53-
// description = "Check and request storage permissions",
54-
// documentation = "https://developer.android.com/about/versions/14/changes/partial-photo-video-access",
55-
//)
56-
//@RequiresPermission(anyOf = [READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_EXTERNAL_STORAGE])
5751
@Composable
5852
fun SelectedPhotosAccessSample() {
5953
val context = LocalContext.current

0 commit comments

Comments
 (0)