summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/EdgeSwipeView.java
diff options
context:
space:
mode:
authorPankaj Garg <pgarg@codeaurora.org>2015-05-12 11:52:17 -0700
committerPankaj Garg <pgarg@codeaurora.org>2015-06-01 16:18:16 -0700
commit1c13cab53dbf8c4bebf1bc59e8ecb919b5f5c253 (patch)
tree13d00ad68cf2f05223dee90e850dcf2241e101b6 /src/com/android/browser/EdgeSwipeView.java
parent0f808cac6457ab210043077deaf779f9aff03b62 (diff)
downloadandroid_packages_apps_Gello-1c13cab53dbf8c4bebf1bc59e8ecb919b5f5c253.tar.gz
android_packages_apps_Gello-1c13cab53dbf8c4bebf1bc59e8ecb919b5f5c253.tar.bz2
android_packages_apps_Gello-1c13cab53dbf8c4bebf1bc59e8ecb919b5f5c253.zip
Temporal edge navigation feature
- User can swipe from left and right edge to go back and forward in history of a tab Change-Id: I941f91122510b004bdcb6a718eb6c05730694960
Diffstat (limited to 'src/com/android/browser/EdgeSwipeView.java')
-rw-r--r--src/com/android/browser/EdgeSwipeView.java235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/com/android/browser/EdgeSwipeView.java b/src/com/android/browser/EdgeSwipeView.java
new file mode 100644
index 00000000..a777c26f
--- /dev/null
+++ b/src/com/android/browser/EdgeSwipeView.java
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package com.android.browser;
+
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.support.v4.widget.ViewDragHelper;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+public class EdgeSwipeView {
+ private ImageView mStationaryView;
+ private ImageView mSlidingView;
+ private ImageView mSlidingViewShadow;
+ private View mOpacityView;
+ private FrameLayout mLiveView;
+ private DraggableFrameLayout mViewGroup;
+
+ private int mSlidingViewIndex;
+
+ private boolean mbShowingLive = true;
+
+ private boolean mbStationaryViewBMSet = false;
+ private boolean mbSlidingViewBMSet = false;
+
+ private TitleBar mTitleBar;
+
+ public EdgeSwipeView(
+ View container,
+ int stationaryViewId,
+ int slidingViewId,
+ int slidingViewShadowId,
+ int opacityViewId,
+ int liveViewId,
+ int viewGroupId,
+ TitleBar titleBar) {
+ mStationaryView = (ImageView) container.findViewById(stationaryViewId);
+ mSlidingView = (ImageView) container.findViewById(slidingViewId);
+ mSlidingViewShadow = (ImageView) container.findViewById(slidingViewShadowId);
+ mOpacityView = container.findViewById(opacityViewId);
+ mLiveView = (FrameLayout) container.findViewById(liveViewId);
+ mViewGroup = (DraggableFrameLayout) container.findViewById(viewGroupId);
+ mSlidingViewShadow.setBackgroundResource(R.drawable.left_shade);
+
+ mSlidingView.setVisibility(View.GONE);
+ mSlidingViewShadow.setVisibility(View.GONE);
+ mOpacityView.setVisibility(View.GONE);
+
+ final int childCount = mViewGroup.getChildCount();
+ for (int i = childCount - 1; i >= 0; i--) {
+ final View child = mViewGroup.getChildAt(i);
+ if (mSlidingView == child) {
+ mSlidingViewIndex = i;
+ break;
+ }
+ }
+
+ mTitleBar = titleBar;
+ }
+
+ public void goLive() {
+ if (mbShowingLive)
+ return;
+
+ mLiveView.setVisibility(View.VISIBLE);
+ mStationaryView.setVisibility(View.GONE);
+ mSlidingView.setVisibility(View.GONE);
+ mSlidingViewShadow.setVisibility(View.GONE);
+ mOpacityView.setVisibility(View.GONE);
+ mbShowingLive = true;
+ }
+
+ public void goDormant() {
+ if (!mbShowingLive)
+ return;
+
+ mSlidingView.setVisibility(View.VISIBLE);
+ mStationaryView.setVisibility(View.VISIBLE);
+ mOpacityView.setVisibility(View.VISIBLE);
+ mLiveView.setVisibility(View.GONE);
+ mbShowingLive = false;
+ }
+
+ public boolean isLive() {
+ return mbShowingLive;
+ }
+
+ private Bitmap getColorBitmap(int color)
+ {
+ int height = mViewGroup.getMeasuredHeight();
+ int width = mViewGroup.getMeasuredWidth();
+ height -= (mTitleBar.getY()>= 0) ? mTitleBar.getNavigationBar().getMeasuredHeight() : 0;
+ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
+ bitmap.eraseColor(color);
+ return bitmap;
+ }
+
+ private void clampViewIfNeeded(View view) {
+ int offset = 0;
+ if (mTitleBar.getY() >= 0) {
+ offset = mTitleBar.getNavigationBar().getMeasuredHeight();
+ }
+ view.setPadding(0, offset - view.getTop(), 0, 0);
+ }
+
+ public boolean isPortrait() {
+ return (mViewGroup.getHeight() < mViewGroup.getWidth());
+ }
+
+ private void setBitmap(ImageView view, Bitmap bitmap) {
+ clampViewIfNeeded(view);
+ if (bitmap == null) {
+ bitmap = getColorBitmap(Color.DKGRAY);
+ }
+
+ int offset = 0;
+ if (mTitleBar.getY() >= 0) {
+ offset = mTitleBar.getNavigationBar().getMeasuredHeight();
+ }
+
+ int bitmap_height = bitmap.getHeight();
+
+ if (view.getMeasuredHeight() != 0) {
+ bitmap_height = (view.getMeasuredHeight() - offset) * bitmap.getWidth() /
+ view.getMeasuredWidth();
+ }
+
+ if ((bitmap.getHeight() - bitmap_height) > 5) {
+ Bitmap cropped = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap_height);
+ view.setImageBitmap(cropped);
+ } else {
+ view.setImageBitmap(bitmap);
+ }
+ }
+
+ public void setStationaryViewBitmap(Bitmap bitmap) {
+ mbStationaryViewBMSet = null != bitmap;
+ setBitmap(mStationaryView, bitmap);
+ }
+
+ public void setStationaryViewAlpha(float alpha) {
+ mStationaryView.setAlpha(alpha);
+ }
+
+ public void setSlidingViewBitmap(Bitmap bitmap) {
+ mbSlidingViewBMSet = null != bitmap;
+ setBitmap(mSlidingView, bitmap);
+ }
+
+ public boolean slidingViewHasImage() {
+ return mbSlidingViewBMSet;
+ }
+
+ public boolean stationaryViewHasImage() {
+ return mbStationaryViewBMSet;
+ }
+
+ public void slidingViewTouched(int edge) {
+ if (edge == ViewDragHelper.EDGE_RIGHT) {
+ mSlidingView.setTranslationX(mViewGroup.getMeasuredWidth());
+ } else {
+ mSlidingView.setTranslationX(0);
+ }
+ }
+
+ public void hideSlidingViews() {
+ mSlidingViewShadow.setVisibility(View.GONE);
+ mSlidingView.setVisibility(View.GONE);
+ }
+
+ public void showSlidingViews() {
+ mSlidingViewShadow.setVisibility(View.VISIBLE);
+ mSlidingView.setVisibility(View.VISIBLE);
+ }
+
+ public int slidingViewIndex() {
+ return mSlidingViewIndex;
+ }
+
+ public void moveShadowView(float x) {
+ x -= mSlidingViewShadow.getMeasuredWidth();
+ mSlidingViewShadow.setX(x);
+ mSlidingViewShadow.setVisibility(View.VISIBLE);
+ mOpacityView.setVisibility(View.VISIBLE);
+ }
+
+ public boolean allowCapture(View view) {
+ return (view == mSlidingView);
+ }
+
+ public int getMeasuredWidth() {
+ return mViewGroup.getMeasuredWidth();
+ }
+
+ public int getWidth() {
+ return mViewGroup.getWidth();
+ }
+
+ public void init() {
+ clampViewIfNeeded(mSlidingView);
+ clampViewIfNeeded(mStationaryView);
+ }
+
+ public void invalidate() {
+ mViewGroup.invalidate();
+ }
+}