Loading packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +12 −68 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_TREE; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.DirectoryFragment.ANIM_UP; import static com.android.documentsui.DirectoryFragment.ANIM_UP; import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.app.Activity; import android.app.Fragment; import android.app.Fragment; Loading @@ -48,9 +47,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.os.Parcelable; import android.provider.DocumentsContract; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Root; import android.provider.DocumentsContract.Root; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.util.Log; import android.util.Log; import android.view.Menu; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem; Loading Loading @@ -81,9 +77,7 @@ public class DocumentsActivity extends BaseActivity { private Toolbar mRootsToolbar; private Toolbar mRootsToolbar; private DrawerLayout mDrawerLayout; private DrawerController mDrawer; private ActionBarDrawerToggle mDrawerToggle; private View mRootsDrawer; private DirectoryContainerView mDirectoryContainer; private DirectoryContainerView mDirectoryContainer; Loading @@ -105,6 +99,7 @@ public class DocumentsActivity extends BaseActivity { final Resources res = getResources(); final Resources res = getResources(); mShowAsDialog = res.getBoolean(R.bool.show_as_dialog) && mState.action != ACTION_MANAGE && mShowAsDialog = res.getBoolean(R.bool.show_as_dialog) && mState.action != ACTION_MANAGE && mState.action != ACTION_BROWSE; mState.action != ACTION_BROWSE; if (!mShowAsDialog) { if (!mShowAsDialog) { setTheme(R.style.DocumentsNonDialogTheme); setTheme(R.style.DocumentsNonDialogTheme); } } Loading @@ -117,6 +112,8 @@ public class DocumentsActivity extends BaseActivity { final Context context = this; final Context context = this; if (mShowAsDialog) { if (mShowAsDialog) { mDrawer = DrawerController.createDummy(); // Strongly define our horizontal dimension; we leave vertical as // Strongly define our horizontal dimension; we leave vertical as // WRAP_CONTENT so that system resizes us when IME is showing. // WRAP_CONTENT so that system resizes us when IME is showing. final WindowManager.LayoutParams a = getWindow().getAttributes(); final WindowManager.LayoutParams a = getWindow().getAttributes(); Loading @@ -128,17 +125,7 @@ public class DocumentsActivity extends BaseActivity { getWindow().setAttributes(a); getWindow().setAttributes(a); } else { } else { // Non-dialog means we have a drawer mDrawer = DrawerController.create(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); if (mDrawerLayout != null) { mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_hamburger, R.string.drawer_open, R.string.drawer_close); mDrawerLayout.setDrawerListener(mDrawerListener); mRootsDrawer = findViewById(R.id.drawer_roots); } } } mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory); mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory); Loading @@ -162,10 +149,9 @@ public class DocumentsActivity extends BaseActivity { // Hide roots when we're managing a specific root // Hide roots when we're managing a specific root if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) { if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) { if (mShowAsDialog || mDrawerLayout == null) { mDrawer.lockClosed(); if (mShowAsDialog) { findViewById(R.id.container_roots).setVisibility(View.GONE); findViewById(R.id.container_roots).setVisibility(View.GONE); } else { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } } } } Loading Loading @@ -341,53 +327,15 @@ public class DocumentsActivity extends BaseActivity { } } } } private DrawerListener mDrawerListener = new DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { mDrawerToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerOpened(View drawerView) { mDrawerToggle.onDrawerOpened(drawerView); } @Override public void onDrawerClosed(View drawerView) { mDrawerToggle.onDrawerClosed(drawerView); } @Override public void onDrawerStateChanged(int newState) { mDrawerToggle.onDrawerStateChanged(newState); } }; @Override @Override protected void onPostCreate(Bundle savedInstanceState) { protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState); if (mDrawerToggle != null) { mDrawer.syncState(); mDrawerToggle.syncState(); } updateActionBar(); updateActionBar(); } } public void setRootsDrawerOpen(boolean open) { public void setRootsDrawerOpen(boolean open) { if (!mShowAsDialog && mDrawerLayout != null) { mDrawer.setOpen(open); if (open) { mDrawerLayout.openDrawer(mRootsDrawer); } else { mDrawerLayout.closeDrawer(mRootsDrawer); } } } private boolean isRootsDrawerOpen() { if (mShowAsDialog || mDrawerLayout == null) { return false; } else { return mDrawerLayout.isDrawerOpen(mRootsDrawer); } } } @Override @Override Loading @@ -408,8 +356,7 @@ public class DocumentsActivity extends BaseActivity { } } } } if (!mShowAsDialog && mDrawerLayout != null && if (!mShowAsDialog && mDrawer.isUnlocked()) { mDrawerLayout.getDrawerLockMode(mRootsDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED) { mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { mToolbar.setNavigationOnClickListener(new View.OnClickListener() { Loading Loading @@ -504,10 +451,7 @@ public class DocumentsActivity extends BaseActivity { @Override @Override public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) { return mDrawer.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); return true; } return super.onOptionsItemSelected(item); } } @Override @Override Loading @@ -526,7 +470,7 @@ public class DocumentsActivity extends BaseActivity { if (size > 1) { if (size > 1) { mState.stack.pop(); mState.stack.pop(); onCurrentDirectoryChanged(ANIM_UP); onCurrentDirectoryChanged(ANIM_UP); } else if (size == 1 && !isRootsDrawerOpen()) { } else if (size == 1 && !mDrawer.isOpen()) { // TODO: open root drawer once we can capture back key // TODO: open root drawer once we can capture back key super.onBackPressed(); super.onBackPressed(); } else { } else { Loading packages/DocumentsUI/src/com/android/documentsui/DrawerController.java 0 → 100644 +196 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.view.MenuItem; import android.view.View; /** * A facade over the various pieces comprising "roots fragment in a Drawer". * * @see DrawerController#create(DrawerLayout) */ abstract class DrawerController implements DrawerListener { abstract void setOpen(boolean open); abstract void lockOpen(); abstract void lockClosed(); abstract boolean isOpen(); abstract boolean isUnlocked(); abstract void syncState(); abstract boolean onOptionsItemSelected(MenuItem item); /** * Returns a controller suitable for {@code Layout}. */ static DrawerController create(Activity activity) { DrawerLayout layout = (DrawerLayout) activity.findViewById(R.id.drawer_layout); if (layout == null) { return new DummyDrawerController(); } View drawer = activity.findViewById(R.id.drawer_roots); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( activity, layout, R.drawable.ic_hamburger, R.string.drawer_open, R.string.drawer_close); return new RuntimeDrawerController(layout, drawer, toggle); } /** * Returns a controller suitable for {@code Layout}. */ static DrawerController createDummy() { return new DummyDrawerController(); } /** * Runtime controller that manages a real drawer. */ private static final class RuntimeDrawerController extends DrawerController { private final ActionBarDrawerToggle mToggle; private DrawerLayout mLayout; private View mDrawer; public RuntimeDrawerController( DrawerLayout layout, View drawer, ActionBarDrawerToggle toggle) { checkArgument(layout != null); mLayout = layout; mDrawer = drawer; mToggle = toggle; mLayout.setDrawerListener(this); } @Override void setOpen(boolean open) { if (open) { mLayout.openDrawer(mDrawer); } else { mLayout.closeDrawer(mDrawer); } } @Override boolean isOpen() { return mLayout.isDrawerOpen(mDrawer); } @Override void syncState() { mToggle.syncState(); } @Override boolean isUnlocked() { return mLayout.getDrawerLockMode(mDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED; } @Override void lockOpen() { mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); } @Override void lockClosed() { mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } @Override boolean onOptionsItemSelected(MenuItem item) { return false; } @Override public void onDrawerSlide(View drawerView, float slideOffset) { mToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerOpened(View drawerView) { mToggle.onDrawerOpened(drawerView); } @Override public void onDrawerClosed(View drawerView) { mToggle.onDrawerClosed(drawerView); } @Override public void onDrawerStateChanged(int newState) { mToggle.onDrawerStateChanged(newState); } } /* * Dummy controller useful with clients that don't host a real drawer. */ private static final class DummyDrawerController extends DrawerController { @Override boolean isOpen() { return false; } @Override void syncState() {} @Override void lockOpen() {} @Override void lockClosed() {} @Override boolean isUnlocked() { return true; } @Override boolean onOptionsItemSelected(MenuItem item) { return false; } @Override public void onDrawerSlide(View drawerView, float slideOffset) {} @Override public void onDrawerOpened(View drawerView) {} @Override public void onDrawerClosed(View drawerView) {} @Override public void onDrawerStateChanged(int newState) {} @Override void setOpen(boolean open) {} } } packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java +37 −4 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class StandaloneActivity extends BaseActivity { private ItemSelectedListener mStackListener; private ItemSelectedListener mStackListener; private BaseAdapter mStackAdapter; private BaseAdapter mStackAdapter; private DocumentClipper mClipper; private DocumentClipper mClipper; private DrawerController mDrawer; private boolean mCompactMode; public StandaloneActivity() { public StandaloneActivity() { super(TAG); super(TAG); Loading Loading @@ -107,6 +109,18 @@ public class StandaloneActivity extends BaseActivity { setActionBar(mToolbar); setActionBar(mToolbar); // "show as dialog" is true on BIG screens. But we *assume* a big screen // and specialize for smaller screens by moving roots into an auto-hide drawer. // This works in conjunction with the specialized layouts defined for sw720dp. mCompactMode = !getResources().getBoolean(R.bool.show_as_dialog); if (mCompactMode) { setTheme(R.style.DocumentsNonDialogTheme); } mDrawer = DrawerController.create(this); mClipper = new DocumentClipper(this); mClipper = new DocumentClipper(this); RootsFragment.show(getFragmentManager(), null); RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -164,10 +178,23 @@ public class StandaloneActivity extends BaseActivity { @Override @Override public void updateActionBar() { public void updateActionBar() { final RootInfo root = getCurrentRoot(); final RootInfo root = getCurrentRoot(); if (mCompactMode) { mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { mDrawer.setOpen(true); } }); } else { mToolbar.setNavigationIcon( mToolbar.setNavigationIcon( root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null); root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener(null); mToolbar.setNavigationOnClickListener(null); } if (mSearchManager.isExpanded()) { if (mSearchManager.isExpanded()) { mToolbar.setTitle(null); mToolbar.setTitle(null); Loading Loading @@ -283,6 +310,12 @@ public class StandaloneActivity extends BaseActivity { } } } } @Override void onRootPicked(RootInfo root) { super.onRootPicked(root); mDrawer.setOpen(false); } @Override @Override public void onDocumentsPicked(List<DocumentInfo> docs) { public void onDocumentsPicked(List<DocumentInfo> docs) { throw new UnsupportedOperationException(); throw new UnsupportedOperationException(); Loading Loading
packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +12 −68 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_TREE; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.DirectoryFragment.ANIM_UP; import static com.android.documentsui.DirectoryFragment.ANIM_UP; import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.app.Activity; import android.app.Fragment; import android.app.Fragment; Loading @@ -48,9 +47,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.os.Parcelable; import android.provider.DocumentsContract; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Root; import android.provider.DocumentsContract.Root; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.util.Log; import android.util.Log; import android.view.Menu; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem; Loading Loading @@ -81,9 +77,7 @@ public class DocumentsActivity extends BaseActivity { private Toolbar mRootsToolbar; private Toolbar mRootsToolbar; private DrawerLayout mDrawerLayout; private DrawerController mDrawer; private ActionBarDrawerToggle mDrawerToggle; private View mRootsDrawer; private DirectoryContainerView mDirectoryContainer; private DirectoryContainerView mDirectoryContainer; Loading @@ -105,6 +99,7 @@ public class DocumentsActivity extends BaseActivity { final Resources res = getResources(); final Resources res = getResources(); mShowAsDialog = res.getBoolean(R.bool.show_as_dialog) && mState.action != ACTION_MANAGE && mShowAsDialog = res.getBoolean(R.bool.show_as_dialog) && mState.action != ACTION_MANAGE && mState.action != ACTION_BROWSE; mState.action != ACTION_BROWSE; if (!mShowAsDialog) { if (!mShowAsDialog) { setTheme(R.style.DocumentsNonDialogTheme); setTheme(R.style.DocumentsNonDialogTheme); } } Loading @@ -117,6 +112,8 @@ public class DocumentsActivity extends BaseActivity { final Context context = this; final Context context = this; if (mShowAsDialog) { if (mShowAsDialog) { mDrawer = DrawerController.createDummy(); // Strongly define our horizontal dimension; we leave vertical as // Strongly define our horizontal dimension; we leave vertical as // WRAP_CONTENT so that system resizes us when IME is showing. // WRAP_CONTENT so that system resizes us when IME is showing. final WindowManager.LayoutParams a = getWindow().getAttributes(); final WindowManager.LayoutParams a = getWindow().getAttributes(); Loading @@ -128,17 +125,7 @@ public class DocumentsActivity extends BaseActivity { getWindow().setAttributes(a); getWindow().setAttributes(a); } else { } else { // Non-dialog means we have a drawer mDrawer = DrawerController.create(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); if (mDrawerLayout != null) { mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_hamburger, R.string.drawer_open, R.string.drawer_close); mDrawerLayout.setDrawerListener(mDrawerListener); mRootsDrawer = findViewById(R.id.drawer_roots); } } } mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory); mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory); Loading @@ -162,10 +149,9 @@ public class DocumentsActivity extends BaseActivity { // Hide roots when we're managing a specific root // Hide roots when we're managing a specific root if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) { if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) { if (mShowAsDialog || mDrawerLayout == null) { mDrawer.lockClosed(); if (mShowAsDialog) { findViewById(R.id.container_roots).setVisibility(View.GONE); findViewById(R.id.container_roots).setVisibility(View.GONE); } else { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } } } } Loading Loading @@ -341,53 +327,15 @@ public class DocumentsActivity extends BaseActivity { } } } } private DrawerListener mDrawerListener = new DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { mDrawerToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerOpened(View drawerView) { mDrawerToggle.onDrawerOpened(drawerView); } @Override public void onDrawerClosed(View drawerView) { mDrawerToggle.onDrawerClosed(drawerView); } @Override public void onDrawerStateChanged(int newState) { mDrawerToggle.onDrawerStateChanged(newState); } }; @Override @Override protected void onPostCreate(Bundle savedInstanceState) { protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState); if (mDrawerToggle != null) { mDrawer.syncState(); mDrawerToggle.syncState(); } updateActionBar(); updateActionBar(); } } public void setRootsDrawerOpen(boolean open) { public void setRootsDrawerOpen(boolean open) { if (!mShowAsDialog && mDrawerLayout != null) { mDrawer.setOpen(open); if (open) { mDrawerLayout.openDrawer(mRootsDrawer); } else { mDrawerLayout.closeDrawer(mRootsDrawer); } } } private boolean isRootsDrawerOpen() { if (mShowAsDialog || mDrawerLayout == null) { return false; } else { return mDrawerLayout.isDrawerOpen(mRootsDrawer); } } } @Override @Override Loading @@ -408,8 +356,7 @@ public class DocumentsActivity extends BaseActivity { } } } } if (!mShowAsDialog && mDrawerLayout != null && if (!mShowAsDialog && mDrawer.isUnlocked()) { mDrawerLayout.getDrawerLockMode(mRootsDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED) { mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { mToolbar.setNavigationOnClickListener(new View.OnClickListener() { Loading Loading @@ -504,10 +451,7 @@ public class DocumentsActivity extends BaseActivity { @Override @Override public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) { return mDrawer.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); return true; } return super.onOptionsItemSelected(item); } } @Override @Override Loading @@ -526,7 +470,7 @@ public class DocumentsActivity extends BaseActivity { if (size > 1) { if (size > 1) { mState.stack.pop(); mState.stack.pop(); onCurrentDirectoryChanged(ANIM_UP); onCurrentDirectoryChanged(ANIM_UP); } else if (size == 1 && !isRootsDrawerOpen()) { } else if (size == 1 && !mDrawer.isOpen()) { // TODO: open root drawer once we can capture back key // TODO: open root drawer once we can capture back key super.onBackPressed(); super.onBackPressed(); } else { } else { Loading
packages/DocumentsUI/src/com/android/documentsui/DrawerController.java 0 → 100644 +196 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.view.MenuItem; import android.view.View; /** * A facade over the various pieces comprising "roots fragment in a Drawer". * * @see DrawerController#create(DrawerLayout) */ abstract class DrawerController implements DrawerListener { abstract void setOpen(boolean open); abstract void lockOpen(); abstract void lockClosed(); abstract boolean isOpen(); abstract boolean isUnlocked(); abstract void syncState(); abstract boolean onOptionsItemSelected(MenuItem item); /** * Returns a controller suitable for {@code Layout}. */ static DrawerController create(Activity activity) { DrawerLayout layout = (DrawerLayout) activity.findViewById(R.id.drawer_layout); if (layout == null) { return new DummyDrawerController(); } View drawer = activity.findViewById(R.id.drawer_roots); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( activity, layout, R.drawable.ic_hamburger, R.string.drawer_open, R.string.drawer_close); return new RuntimeDrawerController(layout, drawer, toggle); } /** * Returns a controller suitable for {@code Layout}. */ static DrawerController createDummy() { return new DummyDrawerController(); } /** * Runtime controller that manages a real drawer. */ private static final class RuntimeDrawerController extends DrawerController { private final ActionBarDrawerToggle mToggle; private DrawerLayout mLayout; private View mDrawer; public RuntimeDrawerController( DrawerLayout layout, View drawer, ActionBarDrawerToggle toggle) { checkArgument(layout != null); mLayout = layout; mDrawer = drawer; mToggle = toggle; mLayout.setDrawerListener(this); } @Override void setOpen(boolean open) { if (open) { mLayout.openDrawer(mDrawer); } else { mLayout.closeDrawer(mDrawer); } } @Override boolean isOpen() { return mLayout.isDrawerOpen(mDrawer); } @Override void syncState() { mToggle.syncState(); } @Override boolean isUnlocked() { return mLayout.getDrawerLockMode(mDrawer) == DrawerLayout.LOCK_MODE_UNLOCKED; } @Override void lockOpen() { mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); } @Override void lockClosed() { mLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } @Override boolean onOptionsItemSelected(MenuItem item) { return false; } @Override public void onDrawerSlide(View drawerView, float slideOffset) { mToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerOpened(View drawerView) { mToggle.onDrawerOpened(drawerView); } @Override public void onDrawerClosed(View drawerView) { mToggle.onDrawerClosed(drawerView); } @Override public void onDrawerStateChanged(int newState) { mToggle.onDrawerStateChanged(newState); } } /* * Dummy controller useful with clients that don't host a real drawer. */ private static final class DummyDrawerController extends DrawerController { @Override boolean isOpen() { return false; } @Override void syncState() {} @Override void lockOpen() {} @Override void lockClosed() {} @Override boolean isUnlocked() { return true; } @Override boolean onOptionsItemSelected(MenuItem item) { return false; } @Override public void onDrawerSlide(View drawerView, float slideOffset) {} @Override public void onDrawerOpened(View drawerView) {} @Override public void onDrawerClosed(View drawerView) {} @Override public void onDrawerStateChanged(int newState) {} @Override void setOpen(boolean open) {} } }
packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java +37 −4 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,8 @@ public class StandaloneActivity extends BaseActivity { private ItemSelectedListener mStackListener; private ItemSelectedListener mStackListener; private BaseAdapter mStackAdapter; private BaseAdapter mStackAdapter; private DocumentClipper mClipper; private DocumentClipper mClipper; private DrawerController mDrawer; private boolean mCompactMode; public StandaloneActivity() { public StandaloneActivity() { super(TAG); super(TAG); Loading Loading @@ -107,6 +109,18 @@ public class StandaloneActivity extends BaseActivity { setActionBar(mToolbar); setActionBar(mToolbar); // "show as dialog" is true on BIG screens. But we *assume* a big screen // and specialize for smaller screens by moving roots into an auto-hide drawer. // This works in conjunction with the specialized layouts defined for sw720dp. mCompactMode = !getResources().getBoolean(R.bool.show_as_dialog); if (mCompactMode) { setTheme(R.style.DocumentsNonDialogTheme); } mDrawer = DrawerController.create(this); mClipper = new DocumentClipper(this); mClipper = new DocumentClipper(this); RootsFragment.show(getFragmentManager(), null); RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -164,10 +178,23 @@ public class StandaloneActivity extends BaseActivity { @Override @Override public void updateActionBar() { public void updateActionBar() { final RootInfo root = getCurrentRoot(); final RootInfo root = getCurrentRoot(); if (mCompactMode) { mToolbar.setNavigationIcon(R.drawable.ic_hamburger); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { mDrawer.setOpen(true); } }); } else { mToolbar.setNavigationIcon( mToolbar.setNavigationIcon( root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null); root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationContentDescription(R.string.drawer_open); mToolbar.setNavigationOnClickListener(null); mToolbar.setNavigationOnClickListener(null); } if (mSearchManager.isExpanded()) { if (mSearchManager.isExpanded()) { mToolbar.setTitle(null); mToolbar.setTitle(null); Loading Loading @@ -283,6 +310,12 @@ public class StandaloneActivity extends BaseActivity { } } } } @Override void onRootPicked(RootInfo root) { super.onRootPicked(root); mDrawer.setOpen(false); } @Override @Override public void onDocumentsPicked(List<DocumentInfo> docs) { public void onDocumentsPicked(List<DocumentInfo> docs) { throw new UnsupportedOperationException(); throw new UnsupportedOperationException(); Loading