diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java
index ab76516a3..d9d25c1e1 100644
--- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java
+++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java
@@ -16,14 +16,11 @@
package com.hippo.ehviewer;
import com.hippo.scene.SceneApplication;
-import com.hippo.util.UiUtils;
public class EhApplication extends SceneApplication {
@Override
public void onCreate() {
super.onCreate();
-
- UiUtils.init(this);
}
}
diff --git a/app/src/main/java/com/hippo/scene/Scene.java b/app/src/main/java/com/hippo/scene/Scene.java
index e3b243b24..27c6dd381 100644
--- a/app/src/main/java/com/hippo/scene/Scene.java
+++ b/app/src/main/java/com/hippo/scene/Scene.java
@@ -182,8 +182,7 @@ public abstract class Scene {
StageActivity sa = getStageActivity();
mSceneView = new FrameLayout(sa);
initBackground(mSceneView);
- mSceneView.addView(view, new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ mSceneView.addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
private void initBackground(@NonNull View bg) {
@@ -212,6 +211,10 @@ public abstract class Scene {
protected void onOut() {
}
+ public View onCreateStageBar() {
+ return null;
+ }
+
/**
* Finds a view that was identified by the id attribute from the XML that
* was processed in {@link #onCreate}.
diff --git a/app/src/main/java/com/hippo/scene/SceneManager.java b/app/src/main/java/com/hippo/scene/SceneManager.java
index 44b252404..55b7ccf4f 100644
--- a/app/src/main/java/com/hippo/scene/SceneManager.java
+++ b/app/src/main/java/com/hippo/scene/SceneManager.java
@@ -18,6 +18,7 @@ package com.hippo.scene;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.view.View;
import com.hippo.util.Log;
@@ -136,6 +137,10 @@ class SceneManager {
scene.setState(Scene.SCENE_STATE_DESTROY);
scene.detachFromeStage();
}
+
+ // Switch stage bar
+ View stageBarContent = scene.onCreateStageBar();
+ getStageActivity().getStageBar().updateContent(stageBarContent);
}
} else {
Log.e(TAG, "The scene is not in stage");
diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java
index 78088a356..702175298 100644
--- a/app/src/main/java/com/hippo/scene/StageActivity.java
+++ b/app/src/main/java/com/hippo/scene/StageActivity.java
@@ -24,6 +24,7 @@ import android.view.View;
import com.hippo.ehviewer.ui.AbsActionBarActivity;
import com.hippo.util.IntIdGenerator;
+import com.hippo.widget.StageBar;
public abstract class StageActivity extends AbsActionBarActivity {
@@ -39,6 +40,8 @@ public abstract class StageActivity extends AbsActionBarActivity {
public abstract @NonNull StageLayout getStageLayout();
+ public abstract @NonNull StageBar getStageBar();
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -60,16 +63,6 @@ public abstract class StageActivity extends AbsActionBarActivity {
}
}
- /*
- void attachSceneToStageAsPreScene(Scene scene) {
- StageLayout stageLayout = getStageLayout();
- View sceneView = scene.getSceneView();
- if (sceneView != null) {
- stageLayout.addView(sceneView, stageLayout.getChildCount() - 1);
- }
- }
- */
-
void detachSceneFromStage(Scene scene) {
View sceneView = scene.getSceneView();
if (sceneView != null) {
diff --git a/app/src/main/java/com/hippo/scene/TransitionCurtain.java b/app/src/main/java/com/hippo/scene/TransitionCurtain.java
index 1e46f286a..91cee1fce 100644
--- a/app/src/main/java/com/hippo/scene/TransitionCurtain.java
+++ b/app/src/main/java/com/hippo/scene/TransitionCurtain.java
@@ -163,7 +163,6 @@ public class TransitionCurtain extends Curtain {
mAnimList.add(colorAnim);
-
// Handle transit part
for (ViewPair pair : mViewPairArray) {
final View enterView = pair.getFromView(enter);
@@ -177,8 +176,6 @@ public class TransitionCurtain extends Curtain {
continue;
}
- //int[] startloaction = new int[2];
- //ViewUtils.getLocationInAncestor(exitView, startloaction, exit.getSceneView());
int[] endloaction = new int[2];
ViewUtils.getLocationInAncestor(enterView, endloaction, enter.getSceneView());
int startWidth = exitView.getWidth();
diff --git a/app/src/main/java/com/hippo/util/UiUtils.java b/app/src/main/java/com/hippo/util/UiUtils.java
index 8c6a36e08..448085237 100644
--- a/app/src/main/java/com/hippo/util/UiUtils.java
+++ b/app/src/main/java/com/hippo/util/UiUtils.java
@@ -16,46 +16,32 @@
package com.hippo.util;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.Color;
import com.hippo.ehviewer.R;
public class UiUtils {
- private static float sDensity;
- private static float sScaledDensity;
-
- /**
- * Init UiUtils. Do is in Application.onCreate()
- *
- * @param context
- */
- public static void init(Context context) {
- Resources resources = context.getResources();
-
- sDensity = resources.getDisplayMetrics().density;
- sScaledDensity = resources.getDisplayMetrics().scaledDensity;
- }
-
/**
* dp conversion to pix
*
+ * @param context The context
* @param dp The value you want to conversion
* @return value in pix
*/
- public static int dp2pix(float dp) {
- return (int) (sDensity * dp + 0.5f);
+ public static int dp2pix(Context context, float dp) {
+ return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
}
/**
* pix conversion to dp
*
+ * @param context The context
* @param pix The value you want to conversion
* @return value in dp
*/
- public static float pix2dp(int pix) {
- return pix / sDensity;
+ public static float pix2dp(Context context, int pix) {
+ return pix / context.getResources().getDisplayMetrics().density;
}
/**
@@ -64,8 +50,8 @@ public class UiUtils {
* @param sp The value you want to conversion
* @return value in pix
*/
- public static int sp2pix(float sp) {
- return (int) (sp * sScaledDensity + 0.5f);
+ public static int sp2pix(Context context, float sp) {
+ return (int) (sp * context.getResources().getDisplayMetrics().scaledDensity + 0.5f);
}
/**
@@ -74,8 +60,8 @@ public class UiUtils {
* @param pix The value you want to conversion
* @return value in sp
*/
- public static float pix2sp(float pix) {
- return pix / sScaledDensity;
+ public static float pix2sp(Context context, float pix) {
+ return pix / context.getResources().getDisplayMetrics().scaledDensity;
}
/**
diff --git a/app/src/main/java/com/hippo/widget/FloatingActionButton.java b/app/src/main/java/com/hippo/widget/FloatingActionButton.java
index f68a024a5..9979bd396 100644
--- a/app/src/main/java/com/hippo/widget/FloatingActionButton.java
+++ b/app/src/main/java/com/hippo/widget/FloatingActionButton.java
@@ -35,11 +35,11 @@ import com.hippo.util.ViewUtils;
public class FloatingActionButton extends View {
- private static final int DRAWABLE_WIDTH = UiUtils.dp2pix(24);
-
private GasketDrawer mGasketDrawer;
private Drawable mDrawable;
+ private int mDrawableWidth;
+
public FloatingActionButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0, 0);
@@ -57,6 +57,8 @@ public class FloatingActionButton extends View {
}
private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ mDrawableWidth = UiUtils.dp2pix(context, 24);
+
TypedArray a;
a = context.obtainStyledAttributes(attrs, R.styleable.FloatingActionButton, defStyleAttr, defStyleRes);
@@ -95,11 +97,11 @@ public class FloatingActionButton extends View {
int bottom;
int width = getWidth();
int height = getHeight();
- int halfDrawableWidth = DRAWABLE_WIDTH / 2;
+ int halfDrawableWidth = mDrawableWidth / 2;
left = width / 2 - halfDrawableWidth;
top = height / 2 - halfDrawableWidth;
- right = left + DRAWABLE_WIDTH;
- bottom = top + DRAWABLE_WIDTH;
+ right = left + mDrawableWidth;
+ bottom = top + mDrawableWidth;
mDrawable.setBounds(left, top, right, bottom);
mDrawable.draw(canvas);
}
@@ -125,9 +127,6 @@ public class FloatingActionButton extends View {
static class GasketDrawerOld implements GasketDrawer {
- private static final int SHADOW_RADIOUS = UiUtils.dp2pix(3);
- private static final int SHADOW_OFFSET_Y = UiUtils.dp2pix(1);
- private static final int GASKET_PADDING = SHADOW_RADIOUS + SHADOW_OFFSET_Y; // 4dp
private static final int SHADOW_COLOR = 0x43000000;
private View mView;
@@ -140,7 +139,17 @@ public class FloatingActionButton extends View {
private boolean mIsDark;
+ private final int mShadowRadious;
+ private final int mShadowOffsetY;
+ private final int mGasketPadding;
+
private GasketDrawerOld(View view, int color) {
+ Context context = view.getContext();
+
+ mShadowRadious = UiUtils.dp2pix(context, 3);
+ mShadowOffsetY = UiUtils.dp2pix(context, 1);
+ mGasketPadding = mShadowRadious + mShadowOffsetY;
+
mView = view;
mBounds = new RectF();
mColor = color;
@@ -149,7 +158,7 @@ public class FloatingActionButton extends View {
mPaint.setColor(mColor);
mPaint.setStyle(Paint.Style.FILL);
- mPaint.setShadowLayer(SHADOW_RADIOUS, 0, SHADOW_OFFSET_Y, SHADOW_COLOR);
+ mPaint.setShadowLayer(mShadowRadious, 0, mShadowOffsetY, SHADOW_COLOR);
ViewUtils.removeHardwareAccelerationSupport(mView);
}
@@ -190,10 +199,10 @@ public class FloatingActionButton extends View {
}
public void draw(Canvas canvas) {
- mBounds.left = GASKET_PADDING;
- mBounds.top = GASKET_PADDING;
- mBounds.right = mView.getWidth() - GASKET_PADDING;
- mBounds.bottom = mView.getHeight() - GASKET_PADDING;
+ mBounds.left = mGasketPadding;
+ mBounds.top = mGasketPadding;
+ mBounds.right = mView.getWidth() - mGasketPadding;
+ mBounds.bottom = mView.getHeight() - mGasketPadding;
canvas.drawOval(mBounds, mPaint);
}
@@ -206,8 +215,6 @@ public class FloatingActionButton extends View {
static class GasketDrawerLollipop implements GasketDrawer {
- private static final int ELEVATION = UiUtils.dp2pix(4);
-
private static final int[][] STATES = new int[][]{
new int[]{-android.R.attr.state_enabled},
new int[]{android.R.attr.state_pressed},
@@ -220,8 +227,12 @@ public class FloatingActionButton extends View {
private GradientDrawable mGradientDrawable;
+ private final int mElevation;
+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public GasketDrawerLollipop(View view, int color) {
+ mElevation = UiUtils.dp2pix(view.getContext(), 4);
+
mView = view;
mColor = color;
@@ -232,7 +243,7 @@ public class FloatingActionButton extends View {
new int[] {darkColor, darkColor, darkColor, color}));
mView.setBackground(mGradientDrawable);
- mView.setElevation(ELEVATION);
+ mView.setElevation(mElevation);
}
@Override
diff --git a/app/src/main/java/com/hippo/widget/StageBar.java b/app/src/main/java/com/hippo/widget/StageBar.java
new file mode 100644
index 000000000..884e10277
--- /dev/null
+++ b/app/src/main/java/com/hippo/widget/StageBar.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2015 Hippo Seven
+ *
+ * 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
+ * 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.hippo.widget;
+
+import android.content.Context;
+import android.support.v7.widget.CardView;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.hippo.util.UiUtils;
+
+/**
+ * It is shown at the top of stage, just like actionbar
+ */
+public class StageBar extends CardView {
+
+ private Context mContext;
+
+ public StageBar(Context context) {
+ super(context);
+ }
+
+ public StageBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public StageBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ private void init(Context context) {
+ mContext = context;
+ setRadius(UiUtils.dp2pix(context, 2));
+ }
+
+ public void updateContent(View view) {
+ // TODO
+ }
+
+ public void endAnimation() {
+ // TODO
+ }
+
+ public boolean hasContent() {
+ // TODO
+ return false;
+ }
+
+
+
+}
diff --git a/app/src/main/res/drawable/vector_search.xml b/app/src/main/res/drawable/vector_search.xml
new file mode 100644
index 000000000..f21dbc25c
--- /dev/null
+++ b/app/src/main/res/drawable/vector_search.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_content.xml b/app/src/main/res/layout/activity_content.xml
index a1b92c363..f924ef7fa 100644
--- a/app/src/main/res/layout/activity_content.xml
+++ b/app/src/main/res/layout/activity_content.xml
@@ -26,6 +26,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"/>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 7e1e2f223..e4874bc40 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -49,5 +49,6 @@
关键字
+ 搜索
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index a8839691c..5a1714a0a 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -15,6 +15,11 @@
-->
+
+
+
+ 56dp
+
0dp
0dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0e8fb43aa..034b22129 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -67,5 +67,6 @@
Keyword
+ Search