This commit is contained in:
seven332 committed 2015-05-17 00:51:58 +08:00
1 parent d528a9fbdc
commit 3c3dd4a7e2
14 files changed
+438 -41

No files matched your search

@@ -21,10 +21,14 @@ public final class Constants {
public static final int MESSENGER_ID_EH_SOURCE;
public static final int MESSENGER_ID_SHOW_APP_STATUS;
public static final int MESSENGER_ID_SIGN_IN_OR_OUT;
public static final int MESSENGER_ID_USER_AVATAR;
static {
Messenger messenger = Messenger.getInstance();
MESSENGER_ID_EH_SOURCE = messenger.newId();
MESSENGER_ID_SHOW_APP_STATUS = messenger.newId();
MESSENGER_ID_SIGN_IN_OR_OUT = messenger.newId();
MESSENGER_ID_USER_AVATAR = messenger.newId();
}
}
@@ -23,6 +23,8 @@ import com.hippo.ehviewer.network.EhHttpHelper;
import com.hippo.network.ResponseCodeException;
import com.hippo.util.PriorityThreadFactory;
import org.json.JSONObject;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -30,6 +32,7 @@ import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@SuppressWarnings("unchecked")
public final class EhClient {
@SuppressWarnings("unused")
@@ -107,10 +110,6 @@ public final class EhClient {
void onFailure(Exception e);
}
public abstract static class OnGetGalleryListListener implements EhClientListener {
public abstract void onSuccess(List<GalleryInfo> glList, int pageNum);
}
private void doBgJob(BgJobHelper bjh) {
new AsyncTask<BgJobHelper, Void, BgJobHelper>() {
@Override
@@ -165,7 +164,6 @@ public final class EhClient {
public abstract void doBgJob() throws Exception;
public abstract void doSuccessCallback();
}
private void checkRequest(EhHttpHelper ehh) throws ResponseCodeException {
@@ -176,16 +174,21 @@ public final class EhClient {
}
private Object[] doGetGalleryList(int source, String url) throws Exception {
EhHttpHelper ehh = new EhHttpHelper();
EhHttpHelper ehh = EhHttpHelper.obtain();
String body = ehh.get(url);
checkRequest(ehh);
EhHttpHelper.recycle(ehh);
ListParser parser = new ListParser();
GalleryListParser parser = new GalleryListParser();
parser.parse(body, source);
return new Object[]{parser.giList, parser.pageNum};
}
public abstract static class OnGetGalleryListListener implements EhClientListener {
public abstract void onSuccess(List<GalleryInfo> glList, int pageNum);
}
private final class GetGalleryListHelper extends SimpleBgJobHelper {
private int mSource;
@@ -227,4 +230,57 @@ public final class EhClient {
doBgJob(new GetGalleryListHelper(source, url, listener));
}
private Object[] doGetPopular() throws Exception {
final JSONObject json = new JSONObject();
json.put("method", "popular");
EhHttpHelper ehh = EhHttpHelper.obtain();
String body = ehh.postJson(API_EHVIEWER, json);
checkRequest(ehh);
EhHttpHelper.recycle(ehh);
PopularParser parser = new PopularParser();
parser.parse(body);
return new Object[]{parser.galleryInfoList, parser.timeStamp};
}
public abstract static class OnGetPopularListener implements EhClientListener {
public abstract void onSuccess(List<GalleryInfo> giList, long timeStamp);
}
private final class GetPopularHelper extends SimpleBgJobHelper {
private OnGetPopularListener mListener;
private List<GalleryInfo> mGiList;
private long mTimeStamp;
public GetPopularHelper(OnGetPopularListener listener) {
super(listener);
mListener = listener;
}
@Override
public void doBgJob() throws Exception {
Object[] objs = doGetPopular();
mGiList = (List<GalleryInfo>) objs[0];
mTimeStamp = (Long) objs[1];
}
@Override
public void doSuccessCallback() {
mListener.onSuccess(mGiList, mTimeStamp);
}
}
/**
* Get popular gallery list
*
* @param listener the listener for callback
*/
public void getPopular(OnGetPopularListener listener) {
doBgJob(new GetPopularHelper(listener));
}
}
@@ -27,7 +27,7 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ListParser {
public class GalleryListParser {
private static final String PARSE_MESSAGE = "Gallery list parser error";
private static final int DEFAULT_LIST_SIZE = 25;
@@ -0,0 +1,68 @@
/*
* 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.ehviewer.client;
import com.hippo.ehviewer.data.GalleryInfo;
import com.hippo.ehviewer.util.EhUtils;
import com.hippo.util.Utils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class PopularParser {
public List<GalleryInfo> galleryInfoList;
public long timeStamp;
public void parse(String body) throws Exception {
galleryInfoList = new ArrayList<>();
JSONObject js = new JSONObject(body);
js = js.getJSONObject("popular");
if (!js.has("galleries")) {
if (js.has("error")) {
throw new EhException(js.getString("error"));
} else {
throw new EhException("Parser error"); // TODO
}
}
JSONArray ja = js.getJSONArray("galleries");
for (int i = 0; i < ja.length(); i++) {
JSONObject j = ja.getJSONObject(i);
GalleryInfo gi = new GalleryInfo();
gi.gid = j.getInt("gid");
gi.token = j.getString("token");
gi.title = Utils.unescapeXml(j.getString("title"));
gi.posted = EhUtils.formatPostDate(Long.parseLong(j.getString("posted")) * 1000);
gi.thumb = j.getString("thumb");
gi.category = EhUtils.getCategory(j.getString("category"));
gi.uploader = j.getString("uploader");
gi.rating = Float.parseFloat(j.getString("rating"));
gi.generateSLang();
galleryInfoList.add(gi);
}
if (js.has("time")) {
timeStamp = js.getLong("time");
} else {
timeStamp = -1;
}
}
}
@@ -23,6 +23,8 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import com.hippo.content.VectorContext;
import com.hippo.ehviewer.R;
@@ -30,6 +32,7 @@ import com.hippo.ehviewer.ui.scene.GalleryListScene;
import com.hippo.ehviewer.util.Config;
import com.hippo.ehviewer.widget.DrawerLeftPanel;
import com.hippo.ehviewer.widget.StatusBarLayout;
import com.hippo.scene.Announcer;
import com.hippo.scene.StageActivity;
import com.hippo.scene.StageLayout;
import com.hippo.widget.DrawerListView;
@@ -37,6 +40,14 @@ import com.hippo.widget.DrawerListView;
public class ContentActivity extends StageActivity
implements StatusBarLayout.OnGetFitPaddingBottomListener {
public static final int DRAWER_LIST_NONE = -1;
public static final int DRAWER_LIST_HOMEPAGE = 0;
public static final int DRAWER_LIST_WHATS_HOT = 1;
public static final int DRAWER_LIST_HISTORY = 2;
public static final int DRAWER_LIST_FAVORITE = 3;
public static final int DRAWER_LIST_DOWNLOAD = 4;
public static final int DRAWER_LIST_SETTINGS = 5;
private Resources mResources;
private DrawerLayout mDrawerLayout;
@@ -45,11 +56,43 @@ public class ContentActivity extends StageActivity
private DrawerLeftPanel mDrawerLeftPanel;
private DrawerListView mDrawerListView;
private AdapterView.OnItemClickListener mDrawerListListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mDrawerListView.getActivatedPosition() != position) {
Announcer announcer;
switch (position) {
case DRAWER_LIST_HOMEPAGE:
announcer = new Announcer();
announcer.putExtra(GalleryListScene.KEY_MODE, GalleryListScene.MODE_HOMEPAGE);
startScene(GalleryListScene.class, announcer);
break;
case DRAWER_LIST_WHATS_HOT:
announcer = new Announcer();
announcer.putExtra(GalleryListScene.KEY_MODE, GalleryListScene.MODE_POPULAR);
startScene(GalleryListScene.class, announcer);
break;
case DRAWER_LIST_HISTORY:
break;
case DRAWER_LIST_FAVORITE:
break;
case DRAWER_LIST_DOWNLOAD:
break;
case DRAWER_LIST_SETTINGS:
break;
}
mDrawerLayout.closeDrawers();
}
}
};
@Override
protected boolean isShowStats() {
return Config.getShowApplicationStats();
}
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -83,11 +126,11 @@ public class ContentActivity extends StageActivity
mResources.getString(R.string.settings)
};
mDrawerListView.setData(drawerListDrawables, drawerListStrings);
mDrawerListView.setOnItemClickListener(mDrawerListListener);
// First time
if (savedInstanceState == null) {
startScene(GalleryListScene.class, null);
mDrawerListView.setActivatedPosition(0);
}
}
@@ -101,6 +144,20 @@ public class ContentActivity extends StageActivity
super.attachBaseContext(VectorContext.wrapContext(newBase));
}
@SuppressLint("RtlHardcoded")
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) || mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawers();
} else {
super.onBackPressed();
}
}
public void setDrawerListActivatedPosition(int position) {
mDrawerListView.setActivatedPosition(position);
}
@SuppressLint("RtlHardcoded")
public void toggleDrawer() {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) || mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
@@ -47,7 +47,7 @@ import com.hippo.drawable.AddDeleteDrawable;
import com.hippo.effect.ViewTransition;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.client.EhClient;
import com.hippo.ehviewer.client.ListParser;
import com.hippo.ehviewer.client.GalleryListParser;
import com.hippo.ehviewer.data.GalleryInfo;
import com.hippo.ehviewer.data.ListUrlBuilder;
import com.hippo.ehviewer.data.UnsupportedSearchException;
@@ -60,6 +60,7 @@ import com.hippo.ehviewer.widget.RatingView;
import com.hippo.ehviewer.widget.SearchBar;
import com.hippo.ehviewer.widget.SearchDatabase;
import com.hippo.ehviewer.widget.SearchLayout;
import com.hippo.scene.Announcer;
import com.hippo.scene.Scene;
import com.hippo.scene.SimpleDialog;
import com.hippo.util.AnimationUtils;
@@ -79,6 +80,11 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
View.OnClickListener, FabLayout.OnCancelListener,
SearchLayout.SearhLayoutHelper {
public static final String KEY_MODE = "mode";
public static final int MODE_HOMEPAGE = 0;
public static final int MODE_POPULAR = 1;
private static final long ANIMATE_TIME = 300l;
private final static int STATE_NORMAL = 0;
@@ -179,6 +185,11 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
}
};
@Override
public int getLaunchMode() {
return LAUNCH_MODE_SINGLE_TOP;
}
@Override
protected void onReplace(@NonNull Scene oldScene) {
super.onReplace(oldScene);
@@ -188,6 +199,39 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
.newInstance(getStageActivity());
}
private void handleAnnouncer(Announcer announcer) {
int mode = MODE_HOMEPAGE;
if (announcer != null) {
mode = announcer.getIntExtra(KEY_MODE, MODE_HOMEPAGE);
}
switch (mode) {
default:
case MODE_HOMEPAGE:
mActivity.setDrawerListActivatedPosition(ContentActivity.DRAWER_LIST_HOMEPAGE);
mListUrlBuilder.setMode(ListUrlBuilder.MODE_NORMAL);
break;
case MODE_POPULAR:
mActivity.setDrawerListActivatedPosition(ContentActivity.DRAWER_LIST_WHATS_HOT);
mListUrlBuilder.setMode(ListUrlBuilder.MODE_POPULAR);
break;
}
if (announcer == null) {
mGalleryListHelper.firstRefresh();
} else {
showSearchBar(true);
mGalleryListHelper.refresh();
}
}
@Override
protected void onNewAnnouncer(Announcer announcer) {
super.onNewAnnouncer(announcer);
handleAnnouncer(announcer);
}
@SuppressWarnings("deprecation")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -223,8 +267,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
ViewUtils.removeOnGlobalLayoutListener(mSearchBar.getViewTreeObserver(), this);
mSearchBarOriginalTop = mSearchBar.getTop();
mSearchBarOriginalBottom = mSearchBar.getBottom();
int fitPaddingTop = mSearchBar.getHeight() +
mResources.getDimensionPixelOffset(R.dimen.search_bar_padding_vertical);
int fitPaddingTop = mSearchBar.getHeight() + mResources.getDimensionPixelOffset(R.dimen.search_bar_padding_vertical);
mContentLayout.setFitPaddingTop(fitPaddingTop);
mSearchLayout.setFitPaddingTop(fitPaddingTop);
}
@@ -255,7 +298,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
// When scene start
if (savedInstanceState == null) {
mGalleryListHelper.firstRefresh();
handleAnnouncer(getAnnouncer());
}
}
@@ -447,6 +490,8 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
return;
}
mActivity.setDrawerListActivatedPosition(ContentActivity.DRAWER_LIST_NONE);
mSearchDatabase.addQuery(query);
if (mViewTransition.getShownViewIndex() == 0) {
@@ -463,7 +508,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
mState = STATE_NORMAL;
mViewTransition.showView(0);
mSearchBar.setState(SearchBar.STATE_NORMAL);
returnSearchBarPosition();
showSearchBar(true);
setFabState(FAB_STATE_NORMAL);
mGalleryListHelper.refresh();
@@ -486,17 +531,19 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
int offset = mSearchBarOriginalTop - mSearchBar.getTop();
if (offset != 0) {
if (animation) {
final boolean needRequestLayout = mSearchBar.getBottom() <= 0 && offset > 0;
final ValueAnimator va = ValueAnimator.ofInt(0, offset);
va.setDuration(ANIMATE_TIME);
va.addListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
public void onAnimationEnd(Animator animation, boolean canceled) {
super.onAnimationEnd(animation, canceled);
mSearchBarMoveAnimator = null;
}
});
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
int lastValue;
boolean hasRequestLayout;
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (Integer) animation.getAnimatedValue();
@@ -504,8 +551,16 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
lastValue = value;
mSearchBar.offsetTopAndBottom(offsetStep);
((OffsetLayout.LayoutParams) mSearchBar.getLayoutParams()).offsetY += offsetStep;
if (!hasRequestLayout && needRequestLayout && mSearchBar.getBottom() > 0) {
hasRequestLayout = true;
mSearchBar.requestLayout();
}
}
});
if (mSearchBarMoveAnimator != null) {
mSearchBarMoveAnimator.cancel();
}
mSearchBarMoveAnimator = va;
va.start();
} else {
@@ -646,7 +701,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
private LayoutInflater mInflater;
private GalleryListListener mLastGalleryListListener;
private GalleryListHelperSettable mListener;
private Runnable mSearchBarPositionTask = new Runnable() {
@Override
@@ -663,9 +718,9 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
private GalleryListHelper(Context context, GalleryListHelper oldContentHelper) {
super(context, oldContentHelper);
// Update gallery listener
mLastGalleryListListener = oldContentHelper.mLastGalleryListListener;
if (mLastGalleryListListener != null) {
mLastGalleryListListener.setGalleryListHelper(this);
mListener = oldContentHelper.mListener;
if (mListener != null) {
mListener.setGalleryListHelper(this);
}
init();
}
@@ -678,9 +733,9 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
mInflater = mActivity.getLayoutInflater();
}
private void clearLastGalleryListListener(GalleryListListener listener) {
if (mLastGalleryListListener == listener) {
mLastGalleryListListener = null;
private void clearLastGalleryListHelperSettable(GalleryListHelperSettable listener) {
if (mListener == listener) {
mListener = null;
}
}
@@ -708,17 +763,25 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
@Override
protected void getPageData(int taskId, int type, int page) {
try {
int source = Config.getEhSource();
mListUrlBuilder.setPageIndex(page);
String url = mListUrlBuilder.build(source);
GalleryListListener listener = new GalleryListListener(taskId, type,
page, source);
int mode = mListUrlBuilder.getMode();
if (mode == ListUrlBuilder.MODE_POPULAR) {
PopularListener listener = new PopularListener(taskId);
listener.setGalleryListHelper(this);
mLastGalleryListListener = listener;
EhClient.getInstance().getGalleryList(source, url, listener);
} catch (UnsupportedSearchException e) {
onGetPageData(taskId, e);
mListener = listener;
EhClient.getInstance().getPopular(listener);
} else {
try {
int source = Config.getEhSource();
mListUrlBuilder.setPageIndex(page);
String url = mListUrlBuilder.build(source);
GalleryListListener listener = new GalleryListListener(taskId,
type, page, source);
listener.setGalleryListHelper(this);
mListener = listener;
EhClient.getInstance().getGalleryList(source, url, listener);
} catch (UnsupportedSearchException e) {
onGetPageData(taskId, e);
}
}
}
@@ -746,7 +809,8 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
}
}
private static class GalleryListListener extends EhClient.OnGetGalleryListListener {
private static class GalleryListListener extends EhClient.OnGetGalleryListListener
implements GalleryListHelperSettable {
private int mTaskId;
private int mTaskType;
@@ -762,6 +826,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
mSource = source;
}
@Override
public void setGalleryListHelper(GalleryListHelper helper) {
mHelper = helper;
}
@@ -770,7 +835,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
public void onSuccess(List<GalleryInfo> glList, int pageNum) {
if (mHelper != null) {
if (mSource == EhClient.SOURCE_LOFI) {
if (pageNum == ListParser.CURRENT_PAGE_IS_LAST) {
if (pageNum == GalleryListParser.CURRENT_PAGE_IS_LAST) {
mHelper.setPageSize(mTargetPage);
} else if (mTaskType == ContentLayout.ContentHelper.TYPE_REFRESH) {
mHelper.setPageSize(Integer.MAX_VALUE);
@@ -780,7 +845,7 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
}
mHelper.onGetPageData(mTaskId, glList);
mHelper.clearLastGalleryListListener(this);
mHelper.clearLastGalleryListHelperSettable(this);
}
}
@@ -789,8 +854,47 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
if (mHelper != null) {
mHelper.onGetPageData(mTaskId, e);
mHelper.clearLastGalleryListListener(this);
mHelper.clearLastGalleryListHelperSettable(this);
}
}
}
private static class PopularListener extends EhClient.OnGetPopularListener
implements GalleryListHelperSettable {
private int mTaskId;
private GalleryListHelper mHelper;
public PopularListener(int taskId) {
mTaskId = taskId;
}
@Override
public void setGalleryListHelper(GalleryListHelper helper) {
mHelper = helper;
}
@Override
public void onSuccess(List<GalleryInfo> glList, long timeStamp) {
if (mHelper != null) {
mHelper.setPageSize(1);
mHelper.onGetPageData(mTaskId, glList);
mHelper.clearLastGalleryListHelperSettable(this);
}
}
@Override
public void onFailure(Exception e) {
if (mHelper != null) {
mHelper.onGetPageData(mTaskId, e);
mHelper.clearLastGalleryListHelperSettable(this);
}
}
}
private interface GalleryListHelperSettable {
void setGalleryListHelper(GalleryListHelper helper);
}
}
@@ -17,8 +17,14 @@ package com.hippo.ehviewer.util;
import android.graphics.Color;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
public final class EhUtils {
public static final DateFormat POST_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
public static final String EH_DOWNLOAD_FILENAME = ".ehviewer";
public static final int NONE = -1; // Use it for homepage
@@ -119,4 +125,8 @@ public final class EhUtils {
return BG_COLOR_UNKNOWN;
}
}
public static String formatPostDate(long date) {
return POST_DATE_FORMAT.format(date);
}
}
@@ -18,6 +18,7 @@ package com.hippo.ehviewer.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
@@ -30,7 +31,10 @@ import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.hippo.effect.ripple.RippleSalon;
import com.hippo.ehviewer.Constants;
import com.hippo.ehviewer.R;
import com.hippo.util.FrescoUtils;
import com.hippo.util.Messenger;
import com.hippo.widget.DrawerListView;
public class DrawerLeftPanel extends LinearLayout {
@@ -40,6 +44,8 @@ public class DrawerLeftPanel extends LinearLayout {
private static final int[] MAX_ATTRS = {android.R.attr.maxWidth};
private static Uri DEFAULT_AVATAR_URI = FrescoUtils.getResourcesDrawableUri(R.drawable.default_avatar);
private int mMaxWidth = -1;
private ViewGroup mSuperUserPanel;
@@ -57,6 +63,32 @@ public class DrawerLeftPanel extends LinearLayout {
private int mUserPanelOriginalPaddingTop;
private int mDrawerListViewOriginalPaddingBottom;
private boolean mSignIn;
private Messenger.Receiver mMessengerReceiver = new Messenger.Receiver() {
@Override
public void onReceive(int id, Object obj) {
if (id == Constants.MESSENGER_ID_SIGN_IN_OR_OUT) {
if (obj == null) {
// Sign out
mSignIn = false;
mAvatar.setImageURI(DEFAULT_AVATAR_URI);
mUsename.setText("");
mAction.setText(mContext.getString(R.string.signin));
} else if (obj instanceof String) {
// Sign in
mSignIn = true;
mUsename.setText((String) obj);
mAction.setText(mContext.getString(R.string.signout));
}
} else if (id == Constants.MESSENGER_ID_USER_AVATAR) {
if (mSignIn && obj instanceof Uri) {
mAvatar.setImageURI((Uri) obj);
}
}
}
};
public DrawerLeftPanel(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
@@ -86,9 +118,9 @@ public class DrawerLeftPanel extends LinearLayout {
RippleSalon.addRipple(mAction, false);
mAvatar.getHierarchy().setPlaceholderImage(R.drawable.theme_primary);
mUsename.setText("速度速度加快");
mAction.setText("退出");
mAvatar.setImageURI(DEFAULT_AVATAR_URI);
mUsename.setText("");
mAction.setText(mContext.getString(R.string.signin));
mSuperUserPanelHeight = mSuperUserPanel.getLayoutParams().height;
mUserPanelOriginalPaddingTop = mUserPanel.getPaddingTop();
@@ -99,6 +131,24 @@ public class DrawerLeftPanel extends LinearLayout {
return mDrawerListView;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Messenger.getInstance().register(Constants.MESSENGER_ID_SIGN_IN_OR_OUT, mMessengerReceiver);
Messenger.getInstance().register(Constants.MESSENGER_ID_USER_AVATAR, mMessengerReceiver);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Messenger.getInstance().unregister(Constants.MESSENGER_ID_SIGN_IN_OR_OUT, mMessengerReceiver);
Messenger.getInstance().register(Constants.MESSENGER_ID_USER_AVATAR, mMessengerReceiver);
}
@Override
public Parcelable onSaveInstanceState() {
final Bundle state = new Bundle();
+11 -1
View File
@@ -40,6 +40,9 @@ import com.hippo.util.ViewUtils;
*/
public abstract class Scene {
public static final int LAUNCH_MODE_STANDARD = 0;
public static final int LAUNCH_MODE_SINGLE_TOP = 1;
static final int SCENE_STATE_CREATE = 0;
static final int SCENE_STATE_RUN = 1;
static final int SCENE_STATE_DESTROY = 2;
@@ -86,7 +89,7 @@ public abstract class Scene {
return mCurtain;
}
@Nullable Announcer getAnnouncer() {
public @Nullable Announcer getAnnouncer() {
return mAnnouncer;
}
@@ -97,6 +100,10 @@ public abstract class Scene {
return stageActivity;
}
public int getLaunchMode() {
return LAUNCH_MODE_STANDARD;
}
/**
* You will get null before onCreate and after onDestroy mostly
*
@@ -257,6 +264,9 @@ public abstract class Scene {
mCurtain = oldScene.mCurtain;
}
protected void onNewAnnouncer(Announcer announcer) {
}
/**
* It will be called if nav bar is transparent.
* @param b the nav bar's height
@@ -76,6 +76,13 @@ class SceneManager {
return;
}
Scene topScene = getTopState();
if (sceneClass.isInstance(topScene) &&
topScene.getLaunchMode() == Scene.LAUNCH_MODE_SINGLE_TOP) {
topScene.onNewAnnouncer(announcer);
return;
}
Scene scene = createSceneByClass(sceneClass);
scene.setAnnouncer(announcer);
scene.setCurtain(curtain);
@@ -0,0 +1,29 @@
/*
* 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.util;
import android.annotation.IdRes;
import android.net.Uri;
import com.facebook.common.util.UriUtil;
public class FrescoUtils {
public static Uri getResourcesDrawableUri(@IdRes int resId) {
return new Uri.Builder().scheme(UriUtil.LOCAL_RESOURCE_SCHEME)
.path(String.valueOf(resId)).build();
}
}