diff options
Diffstat (limited to 'android/support/wear/widget/drawer/DrawerTestActivity.java')
-rw-r--r-- | android/support/wear/widget/drawer/DrawerTestActivity.java | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/android/support/wear/widget/drawer/DrawerTestActivity.java b/android/support/wear/widget/drawer/DrawerTestActivity.java new file mode 100644 index 00000000..414b97b9 --- /dev/null +++ b/android/support/wear/widget/drawer/DrawerTestActivity.java @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2017 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 android.support.wear.widget.drawer; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.support.annotation.IntDef; +import android.support.wear.test.R; +import android.support.wear.widget.drawer.WearableDrawerLayout.DrawerStateCallback; +import android.support.wear.widget.drawer.WearableNavigationDrawerView.WearableNavigationDrawerAdapter; +import android.util.ArrayMap; +import android.view.Gravity; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.Map; + +/** + * Test {@link Activity} for {@link WearableDrawerLayout} and implementations of {@link + * android.support.wear.widget.drawer.WearableDrawerView}. + */ +public class DrawerTestActivity extends Activity { + + private static final int DRAWER_SIZE = 5; + private static final String STYLE_EXTRA = "style"; + private static final String OPEN_TOP_IN_ONCREATE_EXTRA = "openTopInOnCreate"; + private static final String OPEN_BOTTOM_IN_ONCREATE_EXTRA = "openBottomInOnCreate"; + private static final String CLOSE_FIRST_DRAWER_OPENED = "closeFirstDrawerOpened"; + private static final Map<Integer, Integer> STYLE_TO_RES_ID = new ArrayMap<>(); + + static { + STYLE_TO_RES_ID.put( + DrawerStyle.BOTH_DRAWER_NAV_MULTI_PAGE, + R.layout.test_multi_page_nav_drawer_layout); + STYLE_TO_RES_ID.put( + DrawerStyle.BOTH_DRAWER_NAV_SINGLE_PAGE, + R.layout.test_single_page_nav_drawer_layout); + STYLE_TO_RES_ID.put( + DrawerStyle.ONLY_ACTION_DRAWER_WITH_TITLE, + R.layout.test_only_action_drawer_with_title_layout); + + } + + private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper()); + private final WearableNavigationDrawerAdapter mDrawerAdapter = + new WearableNavigationDrawerAdapter() { + @Override + public String getItemText(int pos) { + return Integer.toString(pos); + } + + @Override + public Drawable getItemDrawable(int pos) { + return getDrawable(android.R.drawable.star_on); + } + + @Override + public int getCount() { + return DRAWER_SIZE; + } + }; + private WearableActionDrawerView mActionDrawer; + private WearableDrawerLayout mDrawerLayout; + private WearableNavigationDrawerView mNavigationDrawer; + private final Runnable mCloseTopDrawerRunnable = + new Runnable() { + @Override + public void run() { + mNavigationDrawer.getController().closeDrawer(); + } + }; + private final DrawerStateCallback mCloseFirstDrawerOpenedCallback = + new DrawerStateCallback() { + @Override + public void onDrawerOpened(WearableDrawerLayout layout, + WearableDrawerView drawerView) { + mMainThreadHandler.postDelayed(mCloseTopDrawerRunnable, 1000); + } + }; + @DrawerStyle private int mNavigationStyle; + private boolean mOpenTopDrawerInOnCreate; + private boolean mOpenBottomDrawerInOnCreate; + private boolean mCloseFirstDrawerOpened; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + parseIntent(getIntent()); + + setContentView(STYLE_TO_RES_ID.get(mNavigationStyle)); + + mDrawerLayout = (WearableDrawerLayout) findViewById(R.id.drawer_layout); + mNavigationDrawer = (WearableNavigationDrawerView) findViewById(R.id.navigation_drawer); + mActionDrawer = (WearableActionDrawerView) findViewById(R.id.action_drawer); + + if (mCloseFirstDrawerOpened) { + mDrawerLayout.setDrawerStateCallback(mCloseFirstDrawerOpenedCallback); + } + + if (mNavigationDrawer != null) { + mNavigationDrawer.setAdapter(mDrawerAdapter); + if (mOpenTopDrawerInOnCreate) { + mDrawerLayout.openDrawer(Gravity.TOP); + } else { + mDrawerLayout.peekDrawer(Gravity.TOP); + } + } + + if (mActionDrawer != null) { + if (mOpenBottomDrawerInOnCreate) { + mDrawerLayout.openDrawer(Gravity.BOTTOM); + } else { + mDrawerLayout.peekDrawer(Gravity.BOTTOM); + } + } + } + + private void parseIntent(Intent intent) { + //noinspection WrongConstant - Linter doesn't know intent contains a NavigationStyle + mNavigationStyle = intent.getIntExtra(STYLE_EXTRA, DrawerStyle.BOTH_DRAWER_NAV_SINGLE_PAGE); + mOpenTopDrawerInOnCreate = intent.getBooleanExtra(OPEN_TOP_IN_ONCREATE_EXTRA, false); + mOpenBottomDrawerInOnCreate = intent.getBooleanExtra(OPEN_BOTTOM_IN_ONCREATE_EXTRA, false); + mCloseFirstDrawerOpened = intent.getBooleanExtra(CLOSE_FIRST_DRAWER_OPENED, false); + } + + /** + * Which configuration of drawers should be used. + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + DrawerStyle.BOTH_DRAWER_NAV_SINGLE_PAGE, + DrawerStyle.BOTH_DRAWER_NAV_MULTI_PAGE, + DrawerStyle.ONLY_ACTION_DRAWER_WITH_TITLE + }) + public @interface DrawerStyle { + int BOTH_DRAWER_NAV_SINGLE_PAGE = 0; + int BOTH_DRAWER_NAV_MULTI_PAGE = 1; + int ONLY_ACTION_DRAWER_WITH_TITLE = 2; + } + + /** + * Builds an {@link Intent} to start this {@link Activity} with the appropriate extras. + */ + public static class Builder { + + @DrawerStyle private int mStyle = DrawerStyle.BOTH_DRAWER_NAV_SINGLE_PAGE; + private boolean mOpenTopDrawerInOnCreate = false; + private boolean mOpenBottomDrawerInOnCreate = false; + private boolean mCloseFirstDrawerOpened = false; + + public Builder setStyle(@DrawerStyle int style) { + mStyle = style; + return this; + } + + public Builder openTopDrawerInOnCreate() { + mOpenTopDrawerInOnCreate = true; + return this; + } + + public Builder openBottomDrawerInOnCreate() { + mOpenBottomDrawerInOnCreate = true; + return this; + } + + public Builder closeFirstDrawerOpened() { + mCloseFirstDrawerOpened = true; + return this; + } + + public Intent build() { + return new Intent() + .putExtra(STYLE_EXTRA, mStyle) + .putExtra(OPEN_TOP_IN_ONCREATE_EXTRA, mOpenTopDrawerInOnCreate) + .putExtra(OPEN_BOTTOM_IN_ONCREATE_EXTRA, mOpenBottomDrawerInOnCreate) + .putExtra(CLOSE_FIRST_DRAWER_OPENED, mCloseFirstDrawerOpened); + } + } +} |