From 1e701e91a409a231b06dcf0500a52b7c46d62d90 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Wed, 17 Jan 2018 14:41:50 -0800 Subject: [PATCH 01/84] Show ROOT directory on Scoped Directory Access Sample. Test: ./gradlew preflight && ./gradlew assembleDebug && adb install -r \ ./Application/build/outputs/apk/debug/Application-debug.apk && adb shell \ am start com.example.android.scopeddirectoryaccess/.MainActivity Bug: 63720392 Change-Id: I7aa14b4e71fa5ce426848c138ac404e06310ba3c --- .../ScopedDirectoryAccessFragment.java | 16 +++++++++++++++- .../Application/src/main/res/values/strings.xml | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java index 23f1bb3b..27eaa867 100644 --- a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java +++ b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java @@ -30,6 +30,7 @@ import android.provider.DocumentsContract; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -38,6 +39,7 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; import java.util.ArrayList; import java.util.List; @@ -47,6 +49,8 @@ import java.util.List; */ public class ScopedDirectoryAccessFragment extends Fragment { + private static final String TAG = "ScopedDirectorySample"; + private static final String DIRECTORY_ENTRIES_KEY = "directory_entries"; private static final String SELECTED_DIRECTORY_KEY = "selected_directory"; private static final int OPEN_DIRECTORY_REQUEST_CODE = 1; @@ -117,6 +121,12 @@ public class ScopedDirectoryAccessFragment extends Fragment { public void onClick(View view) { String selected = mDirectoriesSpinner.getSelectedItem().toString(); String directoryName = getDirectoryName(selected); + Log.d(TAG, "Primary: selected=" + selected + " dir=" + directoryName); + if (directoryName == null) { + Toast.makeText(getContext(), "Cannot select ROOT on primary directory", + Toast.LENGTH_LONG).show(); + return; + } StorageVolume storageVolume = mStorageManager.getPrimaryStorageVolume(); Intent intent = storageVolume.createAccessIntent(directoryName); startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE); @@ -139,7 +149,7 @@ public class ScopedDirectoryAccessFragment extends Fragment { } LinearLayout volumeArea = (LinearLayout) mActivity.getLayoutInflater() .inflate(R.layout.volume_entry, containerVolumes); - TextView volumeName = (TextView) volumeArea.findViewById(R.id.textview_volume_name); + final TextView volumeName = volumeArea.findViewById(R.id.textview_volume_name); volumeName.setText(volumeDescription); Button button = (Button) volumeArea.findViewById(R.id.button_open_directory); button.setOnClickListener(new View.OnClickListener() { @@ -147,6 +157,8 @@ public class ScopedDirectoryAccessFragment extends Fragment { public void onClick(View view) { String selected = mDirectoriesSpinner.getSelectedItem().toString(); String directoryName = getDirectoryName(selected); + Log.d(TAG, "Secondary: volume=" + volumeName.getText() + ", selected=" + selected + + ", dir=" + directoryName); Intent intent = volume.createAccessIntent(directoryName); startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE); } @@ -221,6 +233,8 @@ public class ScopedDirectoryAccessFragment extends Fragment { private String getDirectoryName(String name) { switch (name) { + case "ROOT": + return null; case "ALARMS": return Environment.DIRECTORY_ALARMS; case "DCIM": diff --git a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/values/strings.xml b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/values/strings.xml index 8c4edcdf..e5463e21 100644 --- a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/values/strings.xml +++ b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/values/strings.xml @@ -21,6 +21,7 @@ Nothing in the directory Internal shared storage + ROOT ALARMS DCIM DOCUMENTS -- GitLab From 9331959de79b9a070b79b2627084c29ca52d0daf Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Mon, 22 Jan 2018 15:03:04 -0800 Subject: [PATCH 02/84] Added button to launch activity that resets directory access. Test: ./gradlew preflight && ./gradlew assembleDebug && adb install -r \ ./Application/build/outputs/apk/debug/Application-debug.apk && adb shell \ am start com.example.android.scopeddirectoryaccess/.MainActivity Bug: 63720392 Change-Id: I8bc5438ad9e9cfd9e1bcee8f38c830336d3c84ef --- .../ScopedDirectoryAccessFragment.java | 29 +++++++++++++++---- .../fragment_scoped_directory_access.xml | 18 ++++++++++++ .../src/main/res/values/strings.xml | 2 ++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java index 27eaa867..c19577c2 100644 --- a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java +++ b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/java/com/example/android/scopeddirectoryaccess/ScopedDirectoryAccessFragment.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.storage.StorageManager; @@ -67,6 +68,9 @@ public class ScopedDirectoryAccessFragment extends Fragment { private TextView mNothingInDirectoryTextView; private TextView mPrimaryVolumeNameTextView; private Spinner mDirectoriesSpinner; + private LinearLayout mDirectoryAccessSettings; + private Button mLaunchDirectoryAccessSettings; + private DirectoryEntryAdapter mAdapter; private ArrayList mDirectoryEntries; @@ -106,12 +110,25 @@ public class ScopedDirectoryAccessFragment extends Fragment { public void onViewCreated(final View rootView, Bundle savedInstanceState) { super.onViewCreated(rootView, savedInstanceState); - mCurrentDirectoryTextView = (TextView) rootView - .findViewById(R.id.textview_current_directory); - mNothingInDirectoryTextView = (TextView) rootView - .findViewById(R.id.textview_nothing_in_directory); - mPrimaryVolumeNameTextView = (TextView) rootView - .findViewById(R.id.textview_primary_volume_name); + mCurrentDirectoryTextView = rootView.findViewById(R.id.textview_current_directory); + mNothingInDirectoryTextView = rootView.findViewById(R.id.textview_nothing_in_directory); + mPrimaryVolumeNameTextView = rootView.findViewById(R.id.textview_primary_volume_name); + + mDirectoryAccessSettings = rootView.findViewById(R.id.directory_access_settings); + mLaunchDirectoryAccessSettings = rootView.findViewById(R.id.launch); + + // TODO: proper API check + if (Build.VERSION.CODENAME.equals("P")) { + mDirectoryAccessSettings.setVisibility(View.VISIBLE); + mLaunchDirectoryAccessSettings.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // TODO: use API constant for intent name + Intent intent = new Intent("android.settings.DIRECTORY_ACCESS_SETTINGS"); + startActivity(intent); + } + }); + } // Set onClickListener for the primary volume Button openPictureButton = (Button) rootView diff --git a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/layout/fragment_scoped_directory_access.xml b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/layout/fragment_scoped_directory_access.xml index dfee2aac..b2c6d1ab 100644 --- a/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/layout/fragment_scoped_directory_access.xml +++ b/content/documentsUi/ScopedDirectoryAccess/Application/src/main/res/layout/fragment_scoped_directory_access.xml @@ -51,6 +51,24 @@ + + +