Skip to content
This repository was archived by the owner on Jun 5, 2024. It is now read-only.

Commit c51672a

Browse files
committed
单独新闻、知识库页面;添加博问功能;
1 parent ba94cba commit c51672a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1185
-60
lines changed

app/src/main/java/com/rae/cnblogs/MainActivity.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.content.DialogInterface;
55
import android.content.Intent;
66
import android.content.pm.PackageManager;
7-
import android.net.Uri;
87
import android.os.Build;
98
import android.os.Bundle;
109
import android.support.annotation.NonNull;
@@ -46,8 +45,6 @@
4645
import butterknife.BindView;
4746
import io.reactivex.Observable;
4847
import io.reactivex.ObservableSource;
49-
import io.reactivex.android.schedulers.AndroidSchedulers;
50-
import io.reactivex.annotations.SchedulerSupport;
5148
import io.reactivex.functions.Function;
5249
import io.reactivex.schedulers.Schedulers;
5350
import skin.support.SkinCompatManager;
@@ -96,8 +93,8 @@ protected void onCreate(Bundle savedInstanceState) {
9693
*/
9794
protected void debugLogin() {
9895
String url = "cnblogs.com";
99-
String cookie = "5FE90D097CFB91482ACE15CCFD172395D08CD682B8C8C0B525E5D4DCCC8BE15F0B0352B53E79EB268B14E8CF84F14C5217B244B7E8C8DE7C55BCC4053AFEC35EB6F0BEF467E9DD91646C4D28EBEAD3849FEBF091";
100-
String netCoreCookie = "CfDJ8KlpyPucjmhMuZTmH8oiYTPAP02sPZIJTcqQlPvrtRt3ypNxuiLoZhRKsCikysmkCgLvhs3z8gmn-xxTwC8mguAg3zMcZVsMfSAVhq1OiInLG5JT8cDGjOsA5LT4ZlOju7SWXfuivJKlxVkkudJzk1EnjxbNJiilSAi-MmRwjqLyhwcCTAgUlHPljHSTRtAODNAiuXzLKTmSo6plpbWMyHU9PojakONa8JBhI84CtOgUYEqsYjQ9F01QbfG8IBkwkvwnMtKR7wzvPQj7VaFEyUrTlur_r_-JBCe_EkGV6HmX";
96+
String cookie = "C2233C4672D83E274F6855541518CC64234BD6435653410D10A93ABB386C31B2B63EE915CF0AC11A146D49479D241685754BC7481AA33380CE931CC08BCA790A3AA8920B0E9B9DA29C27396EA39EADC6BE41B2BD";
97+
String netCoreCookie = "CfDJ8KlpyPucjmhMuZTmH8oiYTPjMAwCN7fxq5On8NXtiPH1soexQVsDurq8ZBzzXvihmlBKmvwaktbI6djETf6LcgZnKGemP8imggPdaBBKh7D0g3fbKKDt429KA5YxhsxSbqLbs8O6D_Thom1ErthQWCVIUXGFwfbeL4o-CShi0B3wswbHC-f3EG33pINydgs6XTdCQ2I1lP-PpV53K-1KEpcjNO4Dj3pxyKPbxlGWCPY3WOlzywS0D8DFhGyoM8QnTcqhHEFfDXlgilOhIk2BGLS0jj-W-GWW9Mjc2gI9_qsm-h8E-moxc_c_iOprixSVmg";
10198
CookieManager cookieManager = CookieManager.getInstance();
10299
cookieManager.removeAllCookie();
103100
cookieManager.setCookie(url, ".CNBlogsCookie=" + cookie + "; domain=.cnblogs.com; path=/; HttpOnly");

module-basic/src/main/java/com/rae/cnblogs/basic/AppImageLoader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ public static void displayAvatar(@Nullable String url, @Nullable ImageView view,
6060

6161
GlideApp.with(view)
6262
.load(url)
63-
.centerCrop()
64-
// .placeholder(resId)
63+
.placeholder(resId)
6564
.error(resId)
66-
// 渐变动画
67-
.transition(DrawableTransitionOptions.withCrossFade(300))
65+
.centerCrop()
66+
.transition(DrawableTransitionOptions.withCrossFade(300)) // 渐变动画
67+
.circleCrop()
6868
.into(view);
6969
}
7070

module-basic/src/main/java/com/rae/cnblogs/basic/ContentEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public String getCommentCount() {
120120
return mCommentCount == null ? "0" : mCommentCount;
121121
}
122122

123+
123124
public void setCommentCount(String commentCount) {
124125
mCommentCount = commentCount;
125126
}

module-basic/src/main/java/com/rae/cnblogs/basic/RaeUIActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class RaeUIActivity extends QMUIActivity {
2020
@Nullable
2121
Toolbar mToolbar;
2222

23-
TextView mTitleView;
23+
protected TextView mTitleView;
2424

2525

2626
private boolean mIsTranslucentFull = true; // 是否为沉浸式

module-blog/src/main/java/com/rae/cnblogs/blog/BloggerActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,6 @@ private void showAvatar(String blogApp, final String url) {
253253
.listener(new RequestListener<Drawable>() {
254254
@Override
255255
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target, boolean b) {
256-
// 如果没有这张封面图就展示默认的
257-
createAvatarGlide(url).into(mBackgroundView);
258256
return true;
259257
}
260258

@@ -267,6 +265,8 @@ public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> tar
267265
return false;
268266
}
269267
})
268+
// 如果没有这张封面图就展示默认的
269+
// .error(createAvatarGlide(url))
270270
.into(mBackgroundView);
271271
}
272272

module-blog/src/main/java/com/rae/cnblogs/blog/ContentDetailActivity.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,23 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.support.annotation.Nullable;
6+
import android.text.TextUtils;
7+
import android.view.View;
68

79
import com.alibaba.android.arouter.facade.annotation.Route;
810
import com.rae.cnblogs.AppRoute;
11+
import com.rae.cnblogs.ContentEntityConverter;
912
import com.rae.cnblogs.activity.SwipeBackBasicActivity;
1013
import com.rae.cnblogs.basic.ContentEntity;
14+
import com.rae.cnblogs.basic.rx.AndroidObservable;
1115
import com.rae.cnblogs.blog.fragment.BlogDetailFragment;
16+
import com.rae.cnblogs.sdk.ApiDefaultObserver;
17+
import com.rae.cnblogs.sdk.CnblogsApiFactory;
18+
import com.rae.cnblogs.sdk.api.IBlogApi;
19+
import com.rae.cnblogs.sdk.bean.BlogBean;
1220
import com.umeng.socialize.UMShareAPI;
1321

22+
import butterknife.BindView;
1423
import butterknife.OnClick;
1524

1625
/**
@@ -21,12 +30,54 @@
2130
@Route(path = AppRoute.PATH_CONTENT_DETAIL)
2231
public class ContentDetailActivity extends SwipeBackBasicActivity {
2332

33+
@BindView(R2.id.pb_loading)
34+
View mProgressBar;
35+
2436
@Override
2537
protected void onCreate(@Nullable Bundle savedInstanceState) {
2638
super.onCreate(savedInstanceState);
2739
setContentView(R.layout.activity_blog_detail);
2840
// 加载内容区域
2941
ContentEntity entity = getIntent().getParcelableExtra("entity");
42+
// 支持路径跳转
43+
String url = getIntent().getStringExtra("url");
44+
if (entity == null && !TextUtils.isEmpty(url)) {
45+
// 获取详情内容
46+
setTitle(" ");
47+
loadBlogDetail(url);
48+
} else {
49+
initBlogFragment(entity);
50+
}
51+
}
52+
53+
54+
/**
55+
* 加载博文详情
56+
*/
57+
private void loadBlogDetail(final String url) {
58+
IBlogApi blogApi = CnblogsApiFactory.getInstance(this).getBlogApi();
59+
mProgressBar.setVisibility(View.VISIBLE);
60+
AndroidObservable.create(blogApi.getBlogDetail(url))
61+
.with(this)
62+
.subscribe(new ApiDefaultObserver<BlogBean>() {
63+
@Override
64+
protected void onError(String message) {
65+
mProgressBar.setVisibility(View.GONE);
66+
// 加载错误直接加载原文链接
67+
AppRoute.routeToWeb(getContext(), url);
68+
finish();
69+
}
70+
71+
@Override
72+
protected void accept(BlogBean blogBean) {
73+
mProgressBar.setVisibility(View.GONE);
74+
ContentEntity entity = ContentEntityConverter.convert(blogBean);
75+
initBlogFragment(entity);
76+
}
77+
});
78+
}
79+
80+
private void initBlogFragment(ContentEntity entity) {
3081
BlogDetailFragment fragment = BlogDetailFragment.newInstance(entity);
3182
getSupportFragmentManager()
3283
.beginTransaction()

module-blog/src/main/java/com/rae/cnblogs/blog/detail/ContentDetailPresenterImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,15 @@ private Observable<String> createNetworkContentObservable() {
158158
ContentEntity contentEntity = getView().getContentEntity();
159159

160160
// 接口获取
161-
Observable<String> apiObservable = onCreateContentObservable(contentEntity.getId()).onErrorResumeNext(Observable.<String>empty());
161+
Observable<String> apiObservable = onCreateContentObservable(contentEntity.getId());
162162
// 网页获取
163-
Observable<String> webObservable = onCreateWebContentObservable(contentEntity.getId()).onErrorResumeNext(Observable.<String>empty());
163+
Observable<String> webObservable = onCreateWebContentObservable(contentEntity.getId());
164164
// 本地获取
165165
Observable<String> localObservable = createLocalContentObservable().onErrorResumeNext(Observable.<String>empty());
166166

167167
// 保存到本地数据库
168-
apiObservable = withSaveLocalContentObservable(apiObservable);
169-
webObservable = withSaveLocalContentObservable(webObservable);
168+
apiObservable = withSaveLocalContentObservable(apiObservable).onErrorResumeNext(Observable.<String>empty());
169+
webObservable = withSaveLocalContentObservable(webObservable).onErrorResumeNext(Observable.<String>empty());
170170

171171
// 关联顺序
172172
return Observable.concat(apiObservable, webObservable, localObservable).take(1);
@@ -180,10 +180,10 @@ private Observable<String> withSaveLocalContentObservable(Observable<String> obs
180180
return observable.map(new Function<String, String>() {
181181
@Override
182182
public String apply(String content) {
183-
Log.i("rae", "保存内容: " + content.length());
183+
// Log.i("rae", "保存内容: " + content.length());
184184
// 博文内容接口也没有返回内容
185185
if (TextUtils.isEmpty(content))
186-
return null;
186+
throw new NullPointerException("blog content is null!");
187187
updateContent(content); // 内容保存到本地数据库
188188
return content;
189189
}

module-blog/src/main/java/com/rae/cnblogs/blog/fragment/BlogDetailFragment.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ public void onLoadDataFailed(String message) {
242242
UICompat.failed(getContext(), message);
243243
Log.w("rae","load content failed");
244244
// 通知里面的Fragment处理
245-
mContentWebViewFragment.onLoadDataFailed(message);
245+
// mContentWebViewFragment.onLoadDataFailed(message);
246+
// 加载错误直接加载原文链接
247+
mContentWebViewFragment.loadUrl(mContentEntity.getUrl());
246248
}
247249

248250
@Override

module-blog/src/main/java/com/rae/cnblogs/blog/fragment/KbListFragment.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.os.Bundle;
44

5+
import com.alibaba.android.arouter.facade.annotation.Route;
6+
import com.rae.cnblogs.AppRoute;
57
import com.rae.cnblogs.blog.comm.ContentListContract;
68
import com.rae.cnblogs.blog.content.KbListPresenterImpl;
79
import com.rae.cnblogs.sdk.bean.CategoryBean;
@@ -11,6 +13,7 @@
1113
* Created by rae on 2018/5/28.
1214
* Copyright (c) https://github.com/raedev All rights reserved.
1315
*/
16+
@Route(path = AppRoute.PATH_FRAGMENT_KB)
1417
public class KbListFragment extends MultipleTypeBlogListFragment {
1518

1619
public static KbListFragment newInstance(CategoryBean category) {

module-blog/src/main/java/com/rae/cnblogs/blog/fragment/NewsListFragment.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.os.Bundle;
44

5+
import com.alibaba.android.arouter.facade.annotation.Route;
6+
import com.rae.cnblogs.AppRoute;
57
import com.rae.cnblogs.blog.adapter.ContentItemAdapter;
68
import com.rae.cnblogs.blog.comm.ContentListContract;
79
import com.rae.cnblogs.blog.content.NewsListPresenterImpl;
@@ -12,6 +14,7 @@
1214
* Created by rae on 2018/5/26.
1315
* Copyright (c) https://github.com/raedev All rights reserved.
1416
*/
17+
@Route(path = AppRoute.PATH_FRAGMENT_NEWS)
1518
public class NewsListFragment extends MultipleTypeBlogListFragment {
1619

1720
public static NewsListFragment newInstance(CategoryBean category) {

module-blog/src/main/res/layout/activity_blog_detail.xml

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:id="@+id/relativeLayout"
36
android:layout_width="match_parent"
47
android:layout_height="match_parent"
8+
android:background="@color/default_background"
59
android:fitsSystemWindows="true">
610

711

@@ -12,6 +16,7 @@
1216
android:layout_height="match_parent" />
1317

1418
<RelativeLayout
19+
android:id="@+id/ll_toolbar"
1520
android:layout_width="match_parent"
1621
android:layout_height="wrap_content">
1722

@@ -26,4 +31,37 @@
2631
android:src="@drawable/ic_action_bar_more" />
2732

2833
</RelativeLayout>
29-
</FrameLayout>
34+
35+
<android.support.constraint.ConstraintLayout
36+
android:id="@+id/pb_loading"
37+
android:layout_width="match_parent"
38+
android:layout_height="match_parent"
39+
android:background="@color/white"
40+
android:fitsSystemWindows="true"
41+
android:visibility="gone">
42+
43+
<FrameLayout
44+
android:id="@+id/layout_blog_detail"
45+
android:layout_width="match_parent"
46+
android:layout_height="wrap_content"
47+
app:layout_constraintBottom_toBottomOf="parent"
48+
app:layout_constraintEnd_toEndOf="parent"
49+
app:layout_constraintStart_toStartOf="parent">
50+
51+
<include layout="@layout/fm_blog_detail" />
52+
</FrameLayout>
53+
54+
<ProgressBar
55+
android:id="@+id/loading"
56+
style="@style/ProgressBar"
57+
android:layout_width="24dp"
58+
android:layout_height="24dp"
59+
android:layout_alignStart="@id/tv_loading"
60+
app:layout_constraintBottom_toTopOf="@+id/layout_blog_detail"
61+
app:layout_constraintEnd_toEndOf="parent"
62+
app:layout_constraintHorizontal_chainStyle="spread"
63+
app:layout_constraintStart_toStartOf="parent"
64+
app:layout_constraintTop_toTopOf="parent" />
65+
66+
</android.support.constraint.ConstraintLayout>
67+
</RelativeLayout>
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<com.rae.cnblogs.widget.PlaceholderView xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
34
android:id="@+id/placeholder"
45
android:layout_width="match_parent"
56
android:layout_height="match_parent"
6-
android:orientation="vertical">
7+
android:orientation="vertical"
8+
app:app_background="@color/default_background">
79

810
<include layout="@layout/fm_web" />
911

1012

1113
<ProgressBar
1214
android:id="@+id/pb_loading_web"
1315
style="@style/ProgressBar"
14-
android:layout_width="32dp"
15-
android:layout_height="32dp"
16-
android:layout_gravity="center"
17-
android:indeterminateDuration="1500" />
16+
android:layout_width="24dp"
17+
android:layout_height="24dp"
18+
android:layout_gravity="center" />
1819

1920
</com.rae.cnblogs.widget.PlaceholderView>

module-discover/src/main/AndroidManifest.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,16 @@
1717
android:name=".ui.AntUserSmsCodeActivity"
1818
android:windowSoftInputMode="stateVisible|adjustPan" />
1919
<activity android:name=".ui.AntAuthResultActivity" />
20+
<activity android:name=".ui.RankingActivity" />
2021
<activity
21-
android:name=".ui.RankingActivity"/>
22+
android:name=".ui.NewsActivity"
23+
android:label="@string/tab_news" />
24+
<activity
25+
android:name=".ui.KbActivity"
26+
android:label="@string/label_kb" />
27+
<activity android:name=".ui.BlogQuestionActivity" />
28+
<activity
29+
android:name=".ui.BlogQuestionDetailActivity"
30+
android:label="@string/label_question_detail" />
2231
</application>
2332
</manifest>

0 commit comments

Comments
 (0)