diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SettingsHeaderScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SettingsHeaderScene.java
index 3fceff27a..133fc05f1 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SettingsHeaderScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SettingsHeaderScene.java
@@ -26,12 +26,12 @@ import android.widget.TextView;
import com.hippo.effect.ripple.RippleSalon;
import com.hippo.ehviewer.R;
-import com.hippo.scene.Scene;
+import com.hippo.scene.AppbarScene;
import com.hippo.scene.StageActivity;
import com.hippo.util.ViewUtils;
import com.hippo.widget.recyclerview.EasyRecyclerView;
-public final class SettingsHeaderScene extends Scene implements EasyRecyclerView.OnItemClickListener {
+public final class SettingsHeaderScene extends AppbarScene implements EasyRecyclerView.OnItemClickListener {
private static final int[] HEADER_ICON_ARRAY = {
R.drawable.ic_cellphone_android_theme_primary,
@@ -52,6 +52,8 @@ public final class SettingsHeaderScene extends Scene implements EasyRecyclerView
super.onCreate(savedInstanceState);
mActivity = getStageActivity();
+ setTitle(R.string.signout);
+ setIcon(R.drawable.ic_arrow_left_dark);
mRecyclerView = new EasyRecyclerView(mActivity);
setContentView(mRecyclerView);
@@ -70,6 +72,11 @@ public final class SettingsHeaderScene extends Scene implements EasyRecyclerView
mRecyclerView.getPaddingRight(), b);
}
+ @Override
+ public void onIconClick() {
+ finish();
+ }
+
@Override
public boolean onItemClick(EasyRecyclerView parent, View view, int position, long id) {
return false;
diff --git a/app/src/main/java/com/hippo/scene/AppbarScene.java b/app/src/main/java/com/hippo/scene/AppbarScene.java
new file mode 100644
index 000000000..a900deb8c
--- /dev/null
+++ b/app/src/main/java/com/hippo/scene/AppbarScene.java
@@ -0,0 +1,92 @@
+/*
+ * 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.scene;
+
+import android.annotation.DrawableRes;
+import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.hippo.effect.ripple.RippleSalon;
+import com.hippo.ehviewer.R;
+import com.hippo.util.ViewUtils;
+import com.hippo.widget.SimpleImageView;
+
+public class AppbarScene extends Scene {
+
+ private SimpleImageView mIcon;
+ private TextView mTitle;
+ private FrameLayout mContent;
+
+ @Override
+ protected void setContentView(int resId) {
+ getStageActivity().getLayoutInflater().inflate(resId, mContent);
+ }
+
+ @Override
+ protected void setContentView(View view) {
+ mContent.addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ }
+
+ @Override
+ public View findViewById(int resId) {
+ return mContent.findViewById(resId);
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ super.setContentView(R.layout.scene_appbar);
+
+ mIcon = (SimpleImageView) super.findViewById(R.id.appbar_icon);
+ mTitle = (TextView) super.findViewById(R.id.appbar_title);
+ mContent = (FrameLayout) super.findViewById(R.id.appbar_content);
+
+ RippleSalon.addRipple(mIcon, true);
+ mIcon.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onIconClick();
+ }
+ });
+ }
+
+ public void onIconClick() {
+ }
+
+ public void setIcon(@DrawableRes int resId) {
+ mIcon.setDrawable(resId);
+ ViewUtils.setVisibility(mIcon, resId == -1 ? View.GONE : View.VISIBLE);
+ }
+
+ public void setIcon(Drawable icon) {
+ mIcon.setDrawable(icon);
+ ViewUtils.setVisibility(mIcon, icon == null ? View.GONE : View.VISIBLE);
+ }
+
+ public void setTitle(@StringRes int resId) {
+ mTitle.setText(resId);
+ }
+
+ public void setTitle(String title) {
+ mTitle.setText(title);
+ }
+}
diff --git a/app/src/main/java/com/hippo/widget/SimpleImageView.java b/app/src/main/java/com/hippo/widget/SimpleImageView.java
index 0a9f061d1..ac55e23b6 100644
--- a/app/src/main/java/com/hippo/widget/SimpleImageView.java
+++ b/app/src/main/java/com/hippo/widget/SimpleImageView.java
@@ -15,6 +15,7 @@
package com.hippo.widget;
+import android.annotation.DrawableRes;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -47,6 +48,10 @@ public class SimpleImageView extends View implements Drawable.Callback {
a.recycle();
}
+ public void setDrawable(@DrawableRes int resId) {
+ setDrawable(getContext().getResources().getDrawable(resId));
+ }
+
public void setDrawable(Drawable drawable) {
if (mDrawable != null) {
mDrawable.setCallback(null);
diff --git a/app/src/main/res/drawable/drop_shadow.xml b/app/src/main/res/drawable/drop_shadow.xml
new file mode 100644
index 000000000..9fc2ed158
--- /dev/null
+++ b/app/src/main/res/drawable/drop_shadow.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_arrow_left_dark.xml b/app/src/main/res/drawable/ic_arrow_left_dark.xml
new file mode 100644
index 000000000..53fbd7b8a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_arrow_left_dark.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout-v21/scene_appbar.xml b/app/src/main/res/layout-v21/scene_appbar.xml
new file mode 100644
index 000000000..1c8fe4e28
--- /dev/null
+++ b/app/src/main/res/layout-v21/scene_appbar.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/scene_appbar.xml b/app/src/main/res/layout/scene_appbar.xml
new file mode 100644
index 000000000..c004ac296
--- /dev/null
+++ b/app/src/main/res/layout/scene_appbar.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index b03a04dcc..a9a02d7d2 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -92,6 +92,8 @@
#ff333333
#ffeeff41
+ #38000000
+
#ffe53935
@color/material_purple_a700
#ff1d87e4
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 3b33a7ffd..ecba24f6f 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -15,6 +15,9 @@
-->
+
+ 56dp
+
72dp
24dp
diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml
index f107b0435..6c0abc6b4 100644
--- a/app/src/main/res/values/pathdata.xml
+++ b/app/src/main/res/values/pathdata.xml
@@ -18,6 +18,7 @@
M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M15.5,8C16.3,8 17,8.7 17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M12,14C13.75,14 15.29,14.72 16.19,15.81L14.77,17.23C14.32,16.5 13.25,16 12,16C10.75,16 9.68,16.5 9.23,17.23L7.81,15.81C8.71,14.72 10.25,14 12,14Z
M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z
M15.07,11.25L14.17,12.17C13.45,12.89 13,13.5 13,15H11V14.5C11,13.39 11.45,12.39 12.17,11.67L13.41,10.41C13.78,10.05 14,9.55 14,9C14,7.89 13.1,7 12,7A2,2 0 0,0 10,9H8A4,4 0 0,1 12,5A4,4 0 0,1 16,9C16,9.88 15.64,10.67 15.07,11.25M13,19H11V17H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z
+ M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z
M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z
M10.5,7A6.5,6.5 0 0,0 4,13.5A6.5,6.5 0 0,0 10.5,20H14V18H10.5C8,18 6,16 6,13.5C6,11 8,9 10.5,9H16.17L13.09,12.09L14.5,13.5L20,8L14.5,2.5L13.08,3.91L16.17,7H10.5M18,18H16V20H18V18Z
M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z