blob: a777c26ffaf75f6d4f1369a5499b54074c944e63 [file] [log] [blame]
Pankaj Garg1c13cab2015-05-12 11:52:17 -07001/*
2 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30package com.android.browser;
31
32import android.graphics.Bitmap;
33import android.graphics.Color;
34import android.support.v4.widget.ViewDragHelper;
35import android.view.View;
36import android.widget.FrameLayout;
37import android.widget.ImageView;
38
39public class EdgeSwipeView {
40 private ImageView mStationaryView;
41 private ImageView mSlidingView;
42 private ImageView mSlidingViewShadow;
43 private View mOpacityView;
44 private FrameLayout mLiveView;
45 private DraggableFrameLayout mViewGroup;
46
47 private int mSlidingViewIndex;
48
49 private boolean mbShowingLive = true;
50
51 private boolean mbStationaryViewBMSet = false;
52 private boolean mbSlidingViewBMSet = false;
53
54 private TitleBar mTitleBar;
55
56 public EdgeSwipeView(
57 View container,
58 int stationaryViewId,
59 int slidingViewId,
60 int slidingViewShadowId,
61 int opacityViewId,
62 int liveViewId,
63 int viewGroupId,
64 TitleBar titleBar) {
65 mStationaryView = (ImageView) container.findViewById(stationaryViewId);
66 mSlidingView = (ImageView) container.findViewById(slidingViewId);
67 mSlidingViewShadow = (ImageView) container.findViewById(slidingViewShadowId);
68 mOpacityView = container.findViewById(opacityViewId);
69 mLiveView = (FrameLayout) container.findViewById(liveViewId);
70 mViewGroup = (DraggableFrameLayout) container.findViewById(viewGroupId);
71 mSlidingViewShadow.setBackgroundResource(R.drawable.left_shade);
72
73 mSlidingView.setVisibility(View.GONE);
74 mSlidingViewShadow.setVisibility(View.GONE);
75 mOpacityView.setVisibility(View.GONE);
76
77 final int childCount = mViewGroup.getChildCount();
78 for (int i = childCount - 1; i >= 0; i--) {
79 final View child = mViewGroup.getChildAt(i);
80 if (mSlidingView == child) {
81 mSlidingViewIndex = i;
82 break;
83 }
84 }
85
86 mTitleBar = titleBar;
87 }
88
89 public void goLive() {
90 if (mbShowingLive)
91 return;
92
93 mLiveView.setVisibility(View.VISIBLE);
94 mStationaryView.setVisibility(View.GONE);
95 mSlidingView.setVisibility(View.GONE);
96 mSlidingViewShadow.setVisibility(View.GONE);
97 mOpacityView.setVisibility(View.GONE);
98 mbShowingLive = true;
99 }
100
101 public void goDormant() {
102 if (!mbShowingLive)
103 return;
104
105 mSlidingView.setVisibility(View.VISIBLE);
106 mStationaryView.setVisibility(View.VISIBLE);
107 mOpacityView.setVisibility(View.VISIBLE);
108 mLiveView.setVisibility(View.GONE);
109 mbShowingLive = false;
110 }
111
112 public boolean isLive() {
113 return mbShowingLive;
114 }
115
116 private Bitmap getColorBitmap(int color)
117 {
118 int height = mViewGroup.getMeasuredHeight();
119 int width = mViewGroup.getMeasuredWidth();
120 height -= (mTitleBar.getY()>= 0) ? mTitleBar.getNavigationBar().getMeasuredHeight() : 0;
121 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
122 bitmap.eraseColor(color);
123 return bitmap;
124 }
125
126 private void clampViewIfNeeded(View view) {
127 int offset = 0;
128 if (mTitleBar.getY() >= 0) {
129 offset = mTitleBar.getNavigationBar().getMeasuredHeight();
130 }
131 view.setPadding(0, offset - view.getTop(), 0, 0);
132 }
133
134 public boolean isPortrait() {
135 return (mViewGroup.getHeight() < mViewGroup.getWidth());
136 }
137
138 private void setBitmap(ImageView view, Bitmap bitmap) {
139 clampViewIfNeeded(view);
140 if (bitmap == null) {
141 bitmap = getColorBitmap(Color.DKGRAY);
142 }
143
144 int offset = 0;
145 if (mTitleBar.getY() >= 0) {
146 offset = mTitleBar.getNavigationBar().getMeasuredHeight();
147 }
148
149 int bitmap_height = bitmap.getHeight();
150
151 if (view.getMeasuredHeight() != 0) {
152 bitmap_height = (view.getMeasuredHeight() - offset) * bitmap.getWidth() /
153 view.getMeasuredWidth();
154 }
155
156 if ((bitmap.getHeight() - bitmap_height) > 5) {
157 Bitmap cropped = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap_height);
158 view.setImageBitmap(cropped);
159 } else {
160 view.setImageBitmap(bitmap);
161 }
162 }
163
164 public void setStationaryViewBitmap(Bitmap bitmap) {
165 mbStationaryViewBMSet = null != bitmap;
166 setBitmap(mStationaryView, bitmap);
167 }
168
169 public void setStationaryViewAlpha(float alpha) {
170 mStationaryView.setAlpha(alpha);
171 }
172
173 public void setSlidingViewBitmap(Bitmap bitmap) {
174 mbSlidingViewBMSet = null != bitmap;
175 setBitmap(mSlidingView, bitmap);
176 }
177
178 public boolean slidingViewHasImage() {
179 return mbSlidingViewBMSet;
180 }
181
182 public boolean stationaryViewHasImage() {
183 return mbStationaryViewBMSet;
184 }
185
186 public void slidingViewTouched(int edge) {
187 if (edge == ViewDragHelper.EDGE_RIGHT) {
188 mSlidingView.setTranslationX(mViewGroup.getMeasuredWidth());
189 } else {
190 mSlidingView.setTranslationX(0);
191 }
192 }
193
194 public void hideSlidingViews() {
195 mSlidingViewShadow.setVisibility(View.GONE);
196 mSlidingView.setVisibility(View.GONE);
197 }
198
199 public void showSlidingViews() {
200 mSlidingViewShadow.setVisibility(View.VISIBLE);
201 mSlidingView.setVisibility(View.VISIBLE);
202 }
203
204 public int slidingViewIndex() {
205 return mSlidingViewIndex;
206 }
207
208 public void moveShadowView(float x) {
209 x -= mSlidingViewShadow.getMeasuredWidth();
210 mSlidingViewShadow.setX(x);
211 mSlidingViewShadow.setVisibility(View.VISIBLE);
212 mOpacityView.setVisibility(View.VISIBLE);
213 }
214
215 public boolean allowCapture(View view) {
216 return (view == mSlidingView);
217 }
218
219 public int getMeasuredWidth() {
220 return mViewGroup.getMeasuredWidth();
221 }
222
223 public int getWidth() {
224 return mViewGroup.getWidth();
225 }
226
227 public void init() {
228 clampViewIfNeeded(mSlidingView);
229 clampViewIfNeeded(mStationaryView);
230 }
231
232 public void invalidate() {
233 mViewGroup.invalidate();
234 }
235}