diff options
6 files changed, 42 insertions, 1 deletions
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java index 4d0a422cb..c450c70de 100644 --- a/src/com/android/documentsui/AbstractActionHandler.java +++ b/src/com/android/documentsui/AbstractActionHandler.java @@ -964,6 +964,11 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA boolean isInRecents(); void setRootsDrawerOpen(boolean open); + /** + * Set the locked status of the DrawerController. + */ + void setRootsDrawerLocked(boolean locked); + // TODO: Let navigator listens to State void updateNavigator(); diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java index 3bf222782..49ce20f07 100644 --- a/src/com/android/documentsui/BaseActivity.java +++ b/src/com/android/documentsui/BaseActivity.java @@ -437,6 +437,12 @@ public abstract class BaseActivity } @Override + public void setRootsDrawerLocked(boolean locked) { + mDrawer.setLocked(locked); + mNavigator.update(); + } + + @Override public void onRootPicked(RootInfo root) { // Clicking on the current root removes search mSearchManager.cancelSearch(); diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java index fb2822aa9..cb536162d 100644 --- a/src/com/android/documentsui/DrawerController.java +++ b/src/com/android/documentsui/DrawerController.java @@ -20,6 +20,7 @@ import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.app.Activity; import android.util.Log; +import android.view.Gravity; import android.view.View; import androidx.annotation.ColorRes; @@ -41,6 +42,7 @@ public abstract class DrawerController implements DrawerListener { public abstract void update(); public abstract void setOpen(boolean open); + public abstract void setLocked(boolean locked); public abstract boolean isPresent(); public abstract boolean isOpen(); abstract void setTitle(String title); @@ -179,13 +181,23 @@ public abstract class DrawerController implements DrawerListener { } @Override + public void setLocked(boolean locked) { + if (locked) { + mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); + } else { + mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); + } + } + + @Override public boolean isOpen() { return mLayout.isDrawerOpen(mDrawer); } @Override public boolean isPresent() { - return true; + return DrawerLayout.LOCK_MODE_UNLOCKED + == mLayout.getDrawerLockMode(Gravity.START); } @Override @@ -231,6 +243,9 @@ public abstract class DrawerController implements DrawerListener { public void setOpen(boolean open) {} @Override + public void setLocked(boolean locked) {} + + @Override public boolean isOpen() { return false; } diff --git a/src/com/android/documentsui/sidebar/RootsFragment.java b/src/com/android/documentsui/sidebar/RootsFragment.java index 2cc62a03b..ec5989a19 100644 --- a/src/com/android/documentsui/sidebar/RootsFragment.java +++ b/src/com/android/documentsui/sidebar/RootsFragment.java @@ -254,6 +254,9 @@ public class RootsFragment extends Fragment { DocumentsApplication.getUserIdManager(getContext()).getUserIds(), maybeShowBadge); + // Disable drawer if only one root + activity.setRootsDrawerLocked(sortedItems.size() <= 1); + // Get the first visible position and offset final int firstPosition = mList.getFirstVisiblePosition(); View firstChild = mList.getChildAt(0); diff --git a/tests/common/com/android/documentsui/TestActivity.java b/tests/common/com/android/documentsui/TestActivity.java index 40de47931..2506bdf96 100644 --- a/tests/common/com/android/documentsui/TestActivity.java +++ b/tests/common/com/android/documentsui/TestActivity.java @@ -79,6 +79,7 @@ public abstract class TestActivity extends AbstractBase { public TestEventListener<Void> restoreRootAndDirectory; public TestEventListener<Integer> refreshCurrentRootAndDirectory; public TestEventListener<Boolean> setRootsDrawerOpen; + public TestEventListener<Boolean> setRootsDrawerLocked; public TestEventListener<Uri> notifyDirectoryNavigated; public TestEventHandler<Void> finishedHandler; @@ -102,6 +103,7 @@ public abstract class TestActivity extends AbstractBase { restoreRootAndDirectory = new TestEventListener<>(); refreshCurrentRootAndDirectory = new TestEventListener<>(); setRootsDrawerOpen = new TestEventListener<>(); + setRootsDrawerLocked = new TestEventListener<>(); notifyDirectoryNavigated = new TestEventListener<>(); contentResolver = env.contentResolver; loaderManager = new TestLoaderManager(); @@ -213,6 +215,11 @@ public abstract class TestActivity extends AbstractBase { } @Override + public final void setRootsDrawerLocked(boolean locked) { + setRootsDrawerLocked.accept(locked); + } + + @Override public final ContentResolver getContentResolver() { return contentResolver; } diff --git a/tests/unit/com/android/documentsui/ProfileTabsTest.java b/tests/unit/com/android/documentsui/ProfileTabsTest.java index 92aaaae6f..635380bad 100644 --- a/tests/unit/com/android/documentsui/ProfileTabsTest.java +++ b/tests/unit/com/android/documentsui/ProfileTabsTest.java @@ -326,6 +326,11 @@ public class ProfileTabsTest { } @Override + public void setRootsDrawerLocked(boolean locked) { + throw new UnsupportedOperationException("not implemented"); + } + + @Override public void updateNavigator() { throw new UnsupportedOperationException("not implemented"); } |