Skip to content

Commit eb9361c

Browse files
committed
add bloger-entrance
1 parent 83bbe0b commit eb9361c

20 files changed

+266
-45
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ v1.3.75
1616
- 使用OkHttp进行网络请求;
1717
- 博文文件缓存;
1818
- 收藏与历史记录使用数据库存储;
19+
- 查看博主文章列表;
1920
- UI改进;
2021

2122
v1.3.75

app/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,7 @@ dependencies {
140140
compile 'me.imid.swipebacklayout.lib:library:1.0.0'
141141
compile 'com.umeng.analytics:analytics:latest.integration'
142142
compile 'com.squareup.okhttp3:okhttp:3.4.1'
143-
compile 'com.squareup.okio:okio:1.7.0'
144-
compile 'com.squareup.wire:wire-runtime:2.1.2'
143+
compile 'com.squareup.picasso:picasso:2.5.2'
145144

146145
compile 'com.jakewharton:butterknife:8.3.0'
147146
apt 'com.jakewharton:butterknife-compiler:8.3.0'

app/src/main/java/com/brian/csdnblog/activity/BlogListFrag.java

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
import android.os.Handler;
66
import android.os.Message;
77
import android.support.v4.app.Fragment;
8+
import android.text.Spannable;
9+
import android.text.SpannableStringBuilder;
810
import android.text.TextUtils;
11+
import android.text.style.ForegroundColorSpan;
912
import android.view.LayoutInflater;
1013
import android.view.View;
1114
import android.view.View.OnClickListener;
@@ -14,26 +17,29 @@
1417
import android.view.animation.AnimationUtils;
1518
import android.widget.FrameLayout;
1619
import android.widget.ListView;
20+
import android.widget.TextView;
1721

1822
import com.brian.common.view.RefreshLayout;
1923
import com.brian.csdnblog.Config;
2024
import com.brian.csdnblog.Env;
2125
import com.brian.csdnblog.R;
2226
import com.brian.csdnblog.datacenter.preference.SettingPreference;
27+
import com.brian.csdnblog.manager.BlogManager;
2328
import com.brian.csdnblog.manager.DataFetcher;
2429
import com.brian.csdnblog.manager.DataFetcher.OnFetchDataListener;
2530
import com.brian.csdnblog.manager.DataFetcher.Result;
26-
import com.brian.csdnblog.manager.BlogManager;
2731
import com.brian.csdnblog.manager.ThreadManager;
2832
import com.brian.csdnblog.manager.TypeManager;
2933
import com.brian.csdnblog.manager.UsageStatsManager;
3034
import com.brian.csdnblog.model.BlogInfo;
31-
import com.brian.csdnblog.model.TypeChangeEvent;
35+
import com.brian.csdnblog.model.Bloger;
36+
import com.brian.csdnblog.model.event.TypeChangeEvent;
3237
import com.brian.csdnblog.parser.BlogHtmlParserFactory;
3338
import com.brian.csdnblog.parser.IBlogHtmlParser;
3439
import com.brian.csdnblog.util.CommonAdapter;
3540
import com.brian.csdnblog.util.FileUtil;
3641
import com.brian.csdnblog.util.LogUtil;
42+
import com.brian.csdnblog.util.ResourceUtil;
3743
import com.brian.csdnblog.util.WeakRefHandler;
3844
import com.google.gson.Gson;
3945
import com.google.gson.reflect.TypeToken;
@@ -67,6 +73,8 @@ public class BlogListFrag extends Fragment {
6773

6874
private CommonAdapter<BlogInfo> mAdapter;// 列表适配器
6975

76+
private Bloger mBloger;
77+
7078
private int mCurrentPage = 1;
7179

7280
private boolean mIsEnd = false;// 标记是否已经加载完所有数据
@@ -98,18 +106,31 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
98106

99107
private void initUI(LayoutInflater inflater) {
100108
mAdapter = new CommonAdapter<BlogInfo>(Env.getContext(), null, R.layout.item_list_blog) {
101-
109+
private ForegroundColorSpan mColorSpanName = new ForegroundColorSpan(ResourceUtil.getColor(R.color.light_blue));
102110
@Override
103111
public void convert(ViewHolder holder, final BlogInfo item) {
104112
holder.setText(R.id.title, item.title);
105113
holder.setText(R.id.description, item.summary);
106-
holder.setText(R.id.msg, item.extraMsg);
107-
holder.getView(R.id.msg).setOnClickListener(new OnClickListener() {
114+
TextView nameView = holder.getView(R.id.msg);
115+
116+
SpannableStringBuilder builder = new SpannableStringBuilder(item.extraMsg);
117+
Bloger bloger = Bloger.fromJson(item.blogerJson);
118+
if (bloger != null && !TextUtils.isEmpty(bloger.nickName)) {
119+
int indexStart = item.extraMsg.indexOf(bloger.nickName);
120+
builder.setSpan(mColorSpanName, indexStart, indexStart + bloger.nickName.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
121+
}
122+
nameView.setText(builder);
123+
124+
nameView.setOnClickListener(new OnClickListener() {
108125
@Override
109126
public void onClick(View v) {
110-
// if (!TextUtils.isEmpty(item.blogerID)) {
111-
// BlogerBlogListActivity.startActivity(getActivity(), mType, item.blogerID);
112-
// }
127+
if (!TextUtils.isEmpty(item.blogerID)) {
128+
LogUtil.log(item.blogerJson);
129+
Bloger bloger = Bloger.fromJson(item.blogerJson);
130+
if (bloger != null) {
131+
BlogerBlogListActivity.startActivity(getActivity(), mType, bloger);
132+
}
133+
}
113134
}
114135
});
115136
holder.setOnClickListener(new OnClickListener() {
@@ -249,9 +270,17 @@ private void loadData(final boolean isRefresh) {
249270
mNoBlogView.setVisibility(View.GONE);
250271
String url;
251272
if (isRefresh) {
252-
url = mBlogParser.getUrlByType(mType, 1);
273+
if (mBloger != null) {
274+
url = mBlogParser.getBlogerUrl(mBloger.homePageUrl, 1);
275+
} else {
276+
url = mBlogParser.getUrlByType(mType, 1);
277+
}
253278
} else {
254-
url = mBlogParser.getUrlByType(mType, mCurrentPage + 1);
279+
if (mBloger != null) {
280+
url = mBlogParser.getBlogerUrl(mBloger.homePageUrl, mCurrentPage + 1);
281+
} else {
282+
url = mBlogParser.getUrlByType(mType, mCurrentPage + 1);
283+
}
255284
mFooterLayout.setVisibility(View.VISIBLE);
256285
}
257286
LogUtil.i(TAG, "refreshUrl=" + url);
@@ -367,6 +396,10 @@ public void setUserVisibleHint(boolean isVisibleToUser) {
367396
public void setPageName(String pageName) {
368397
mPageName = pageName;
369398
}
399+
400+
public void setBloger(Bloger bloger) {
401+
mBloger = bloger;
402+
}
370403

371404
public void clearList() {
372405
if (mAdapter != null) {
@@ -383,6 +416,10 @@ public void onStart() {
383416
super.onStart();
384417
LogUtil.d("onStart");
385418
EventBus.getDefault().register(this);
419+
420+
if (getArguments() != null) {
421+
mBloger = (Bloger) getArguments().getSerializable(BlogerBlogListActivity.EXTRA_KEY_BLOGER);
422+
}
386423
}
387424

388425
@Override

app/src/main/java/com/brian/csdnblog/activity/BlogerBlogListActivity.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import android.content.Intent;
55
import android.os.Bundle;
66
import android.support.v4.app.FragmentTransaction;
7+
import android.text.TextUtils;
78
import android.view.View;
89
import android.view.View.OnClickListener;
910

1011
import com.brian.common.view.TitleBar;
1112
import com.brian.csdnblog.R;
13+
import com.brian.csdnblog.manager.BlogerManager;
1214
import com.brian.csdnblog.manager.TypeManager;
15+
import com.brian.csdnblog.model.Bloger;
1316

1417
import butterknife.BindView;
1518
import butterknife.ButterKnife;
@@ -20,21 +23,19 @@
2023
*/
2124
public class BlogerBlogListActivity extends BaseActivity {
2225

23-
private static final String EXTRA_KEY_TYPE = "extra_key_type";
24-
private static final String EXTRA_KEY_BLOGERID = "extra_key_blogerid";
26+
public static final String EXTRA_KEY_TYPE = "extra_key_type";
27+
public static final String EXTRA_KEY_BLOGER = "extra_key_bloger";
2528

2629
@BindView(R.id.title_bar) TitleBar mTitleBar;
2730

2831
private BlogListFrag mListFrag;
2932

30-
private String mCurrBlogID;
31-
3233
private int mType = TypeManager.initType(TypeManager.TYPE_WEB_CSDN);
3334

34-
public static void startActivity(Activity activity, int type, String blogerID) {
35+
public static void startActivity(Activity activity, int type, Bloger bloger) {
3536
Intent intent = new Intent();
3637
intent.putExtra(EXTRA_KEY_TYPE, type);
37-
intent.putExtra(EXTRA_KEY_BLOGERID, blogerID);
38+
intent.putExtra(EXTRA_KEY_BLOGER, bloger);
3839
intent.setClass(activity, BlogerBlogListActivity.class);
3940
activity.startActivity(intent);
4041
}
@@ -47,32 +48,31 @@ protected void onCreate(Bundle savedInstanceState) {
4748

4849
mType = getIntent().getExtras().getInt(EXTRA_KEY_TYPE);
4950
mType = TypeManager.updateCateType(mType, TypeManager.TYPE_CAT_BLOGER);
51+
getIntent().getExtras().putInt(EXTRA_KEY_TYPE, mType);
5052

51-
mCurrBlogID = getIntent().getExtras().getString(EXTRA_KEY_BLOGERID);
53+
Bloger bloger = (Bloger) getIntent().getSerializableExtra(EXTRA_KEY_BLOGER);
5254

53-
mTitleBar.setTitle(mCurrBlogID + "的博客");
54-
mTitleBar.setRightImageResource(R.drawable.ic_delete);
55+
if (bloger == null) {
56+
finish();
57+
return;
58+
}
59+
if (!TextUtils.isEmpty(bloger.nickName)) {
60+
mTitleBar.setTitle(bloger.nickName + "的博客");
61+
}
62+
BlogerManager.getsInstance().setCurrBloger(bloger);
5563
mTitleBar.setLeftListener(new OnClickListener() {
5664
@Override
5765
public void onClick(View view) {
5866
finish();
5967
}
6068
});
61-
// 删除按钮监听
62-
mTitleBar.setRightListener(new OnClickListener() {
63-
@Override
64-
public void onClick(View v) {
65-
}
66-
});
67-
68-
Bundle bundle = new Bundle();
69-
bundle.putString(EXTRA_KEY_BLOGERID, mCurrBlogID);
69+
mTitleBar.setRightImageVisible(View.INVISIBLE);
7070

7171
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
7272
mListFrag = new BlogListFrag();
7373
mListFrag.setPageName("BlogerBlog");
7474
mListFrag.setType(mType);
75-
mListFrag.setArguments(bundle);
75+
mListFrag.setBloger(bloger);
7676
trans.add(R.id.list, mListFrag, null);
7777
trans.commit();
7878
}

app/src/main/java/com/brian/csdnblog/activity/SidePageFragment.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,21 @@
1313
import android.widget.TextView;
1414

1515
import com.brian.common.view.CircleImageView;
16+
import com.brian.csdnblog.Env;
1617
import com.brian.csdnblog.R;
18+
import com.brian.csdnblog.manager.BlogerManager;
1719
import com.brian.csdnblog.manager.Constants;
1820
import com.brian.csdnblog.manager.TypeManager;
1921
import com.brian.csdnblog.manager.UsageStatsManager;
22+
import com.brian.csdnblog.model.Bloger;
23+
import com.brian.csdnblog.model.event.CurrBlogerEvent;
2024
import com.brian.csdnblog.util.LogUtil;
25+
import com.squareup.picasso.Picasso;
2126
import com.umeng.analytics.MobclickAgent;
2227

28+
import org.greenrobot.eventbus.EventBus;
29+
import org.greenrobot.eventbus.Subscribe;
30+
2331
import butterknife.BindView;
2432
import butterknife.ButterKnife;
2533

@@ -69,14 +77,20 @@ private void initUI() {
6977
mAboutLy.setOnClickListener(this);
7078
mSettingsLy.setOnClickListener(this);
7179
viewChat.setOnClickListener(this);
80+
81+
Bloger bloger = BlogerManager.getsInstance().getCurrBloger();
82+
mBlogerNameView.setText(bloger.nickName + "的博客");
83+
LogUtil.log("headUrl=" + bloger.headUrl);
84+
Picasso.with(Env.getContext()).load(bloger.headUrl).into(mBlogerHeadView);
7285
}
7386

7487
@Override
7588
public void onClick(View view) {
7689
switch (view.getId()) {
7790
case R.id.bloger: // 博主博文列表入口
7891
UsageStatsManager.sendUsageData(UsageStatsManager.MENU_LIST, "bloger");
79-
BlogerBlogListActivity.startActivity(getActivity(), 256, "brian512");
92+
Bloger bloger = BlogerManager.getsInstance().getCurrBloger();
93+
BlogerBlogListActivity.startActivity(getActivity(), bloger.blogerType, bloger);
8094
break;
8195
case R.id.aboutView: // 关于
8296
UsageStatsManager.sendUsageData(UsageStatsManager.MENU_LIST, "about");
@@ -143,4 +157,26 @@ public void onPause() {
143157
MobclickAgent.onPageEnd(this.getClass().getName());
144158
}
145159

160+
@Override
161+
public void onStart() {
162+
super.onStart();
163+
EventBus.getDefault().register(this);
164+
}
165+
166+
@Override
167+
public void onStop() {
168+
EventBus.getDefault().register(this);
169+
super.onStop();
170+
}
171+
172+
/**
173+
* EventBus回调
174+
*/
175+
@Subscribe
176+
public void onEventMainThread(CurrBlogerEvent event) {
177+
mBlogerNameView.setText(event.bloger.nickName + "的博客");
178+
LogUtil.log("headUrl=" + event.bloger.headUrl);
179+
Picasso.with(Env.getContext()).load(event.bloger.headUrl).into(mBlogerHeadView);
180+
}
181+
146182
}

app/src/main/java/com/brian/csdnblog/datacenter/preference/CommonPreference.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.brian.csdnblog.datacenter.preference;
22

3+
import com.brian.csdnblog.model.Bloger;
4+
35
/**
46
* Created by Brian on 2016/9/11 0011.
57
*/
@@ -10,6 +12,8 @@ public class CommonPreference extends BasePreference {
1012
private static final String KEY_ARTICLE_TYPE = "pre_key_article_type";
1113
private static final String KEY_VERSION_CODE = "pre_key_version_code";
1214

15+
private static final String KEY_BLOGER_JSON = "pre_key_curr_bloger_json";
16+
1317
private static CommonPreference sInstance;
1418
private CommonPreference(){}
1519

@@ -60,4 +64,23 @@ public int getVersionCode() {
6064
return getInt(KEY_VERSION_CODE, 0);
6165
}
6266

67+
public String getCurrBlogerJson() {
68+
return getString(KEY_BLOGER_JSON, getDefaultBloger());
69+
}
70+
71+
public void setCurrBlogerJson(String blogerJson) {
72+
putString(KEY_BLOGER_JSON, blogerJson);
73+
}
74+
75+
private String getDefaultBloger() {
76+
Bloger bloger = new Bloger();
77+
bloger.homePageUrl = "http://blog.csdn.net/brian512";
78+
bloger.blogerID = Bloger.getBlogerId(bloger.homePageUrl);
79+
bloger.blogerType = 256;
80+
bloger.nickName = "brian512";
81+
bloger.headUrl = "http://avatar.csdn.net/8/D/9/1_brian512.jpg";
82+
bloger.bio = "踏踏实实做好一件事,拒绝酱油!";
83+
return bloger.toJson();
84+
}
85+
6386
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.brian.csdnblog.manager;
2+
3+
import com.brian.csdnblog.datacenter.preference.CommonPreference;
4+
import com.brian.csdnblog.model.Bloger;
5+
import com.brian.csdnblog.model.event.CurrBlogerEvent;
6+
7+
import org.greenrobot.eventbus.EventBus;
8+
9+
/**
10+
* Created by huamm on 2016/9/19 0019.
11+
*/
12+
public class BlogerManager {
13+
14+
private Bloger mCurrBloger;
15+
16+
private static BlogerManager sInstance;
17+
private BlogerManager() {}
18+
19+
public static BlogerManager getsInstance() {
20+
if (sInstance == null) {
21+
synchronized (BlogerManager.class) {
22+
if (sInstance == null) {
23+
sInstance = new BlogerManager();
24+
}
25+
}
26+
}
27+
return sInstance;
28+
}
29+
30+
public Bloger getCurrBloger() {
31+
return Bloger.fromJson(CommonPreference.getInstance().getCurrBlogerJson());
32+
}
33+
34+
public void setCurrBloger(Bloger bloger) {
35+
if (bloger == null) {
36+
return;
37+
}
38+
if (mCurrBloger == null || !mCurrBloger.blogerID.equals(bloger.blogerID)) {
39+
mCurrBloger = bloger.clone();// 防止静态引用导致内存泄漏
40+
CommonPreference.getInstance().setCurrBlogerJson(bloger.toJson());
41+
42+
CurrBlogerEvent event = new CurrBlogerEvent();
43+
event.bloger = mCurrBloger;
44+
EventBus.getDefault().post(event);
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)