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

Commit c05d021

Browse files
committed
支持无图模式,优化latex公式渲染
1 parent 9f0da09 commit c05d021

File tree

27 files changed

+487
-239
lines changed

27 files changed

+487
-239
lines changed

.idea/modules.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ android {
1010
versionName "1.1.5"
1111
multiDexEnabled true
1212
ndk {
13-
// 兼容ebView问题
13+
// 兼容webView问题
1414
abiFilters "armeabi"
1515
abiFilters "x86"
1616
abiFilters "armeabi-v7a"
@@ -37,7 +37,7 @@ android {
3737
debug {
3838
minifyEnabled false
3939
debuggable true
40-
applicationIdSuffix '.debug'
40+
// applicationIdSuffix '.debug'
4141
signingConfig signingConfigs.release
4242
}
4343
release {

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2-
package="com.rae.cnblogs">
2+
package="com.rae.cnblogs">
33

44
<application
55
android:allowBackup="true"
@@ -9,9 +9,6 @@
99
<!--主界面-->
1010
<activity
1111
android:name=".MainActivity"
12-
android:configChanges="keyboard|keyboardHidden|orientation"
13-
android:screenOrientation="portrait">
14-
15-
</activity>
12+
android:configChanges="keyboard|keyboardHidden|orientation" />
1613
</application>
1714
</manifest>

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

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,23 @@ protected void onCreate(Bundle savedInstanceState) {
5555
super.onCreate(savedInstanceState);
5656
setContentView(R.layout.activity_main);
5757
mPresenter = new MainPresenterImpl(this);
58-
// 测试登录
59-
debugLogin();
6058
initTab();
6159
requestPermissions();
6260
// 启动服务
6361
startService(new Intent(this, CnblogsService.class));
62+
if (BuildConfig.DEBUG) {
63+
debugLogin();
64+
}
6465
}
6566

6667

68+
/**
69+
* 登录调试
70+
*/
6771
protected void debugLogin() {
6872
String url = "cnblogs.com";
69-
String cookie = "26004F7A01C39CBACF70ED396FFA307BB21E7AEDE4B6245B5B433F47540749569981C77803953DFE28B7F5741FB795F49187BB7BDA995F5B150A8C65B418D70E25802D583F09F66005298BD6A817C913884D4436";
70-
String netCoreCookie = "CfDJ8FHXRRtkJWRFtU30nh_M9mBulNHC1c_O8RDhAJhrChUixuMz1QxRLZ-f-3-WHrQV6olTonldUcMkhUBz2wW3bB4ZMIHEnQUr7EP2HREgyEeyaffzgkf-7eMRCxKejSvBV81SdD5CQXuyAQF5jCHElhQ2eMfB8vz26qp4_Df5eZmfH8e0eOiWjrXY1FRW-WcWbUzHLKwNfYiDaZx5F5n1bEPMJDzRfKeOKPZOxFxM_mFCC_BTy-_gQ79Qdvpg15bVs5FkK_oCdnZBS5o9sh5_BrSNWpAnqzWF97uvWptCoJ5N";
73+
String cookie = "28E6D1BBA89ACB6EE5DF550A5F2054E76A60D2CE55F92465A59263AC78952CE9B5AB276BC6B26E68CAE5C096EFD9082817D5EC1951483E1420B549BAEE5EC5B2B46CAC4347CD603B1D1FEE1CBE114D39C96FA883";
74+
String netCoreCookie = "CfDJ8KlpyPucjmhMuZTmH8oiYTNaViYaV05_zR2tme3N70DGDNqd5eFXK6QQWXD1FauprFJW5aNb-L6BzuH1SYrbbAqCXMB8zmMHaZW7k5AiHFDpdR9TjeAmDUed7cI-EleHMOOI3101hNBpTNPMd-j8J5SMG_yhdbF2_l4eonHptfrGjykx_mVaulTqQZEMKvgzpLYLNX3pilu5Aho578YmJQIY3v8046QY3yLbLNhhnqmb2J78QMdHv06B4kNJHiy5olgfuxHOkzB2xUzVI6FrI8KfOiImmw1dxg5mep_ebVaz";
7175
CookieManager cookieManager = CookieManager.getInstance();
7276
cookieManager.removeAllCookie();
7377
cookieManager.setCookie(url, ".CNBlogsCookie=" + cookie + "; domain=.cnblogs.com; path=/; HttpOnly");
@@ -118,6 +122,7 @@ private void initTab() {
118122
}
119123

120124
private void addTab(AppFragmentAdapter adapter, int resId, int iconId, Fragment fragment) {
125+
121126
if (fragment == null) {
122127
Log.e("rae", "初始化首页TAB的Fragment为空!" + getString(resId));
123128
return;
@@ -170,24 +175,21 @@ private void requestPermissions() {
170175
.message(getString(R.string.permission_request_message))
171176
.confirmText(getString(R.string.allow))
172177
.cancelText(getString(R.string.permission_cancel))
173-
.confirm(new DialogInterface.OnClickListener() {
174-
@Override
175-
public void onClick(DialogInterface dialog, int which) {
176-
dialog.dismiss();
177-
String[] permissionList = new String[]{
178-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
179-
Manifest.permission.ACCESS_FINE_LOCATION,
180-
Manifest.permission.CALL_PHONE,
181-
Manifest.permission.READ_LOGS,
182-
Manifest.permission.READ_PHONE_STATE,
183-
Manifest.permission.READ_EXTERNAL_STORAGE,
184-
Manifest.permission.SET_DEBUG_APP,
185-
Manifest.permission.SYSTEM_ALERT_WINDOW,
186-
Manifest.permission.GET_ACCOUNTS,
187-
Manifest.permission.WRITE_APN_SETTINGS
188-
};
189-
ActivityCompat.requestPermissions(MainActivity.this, permissionList, 100);
190-
}
178+
.confirm((dialog, which) -> {
179+
dialog.dismiss();
180+
String[] permissionList = new String[]{
181+
Manifest.permission.WRITE_EXTERNAL_STORAGE,
182+
Manifest.permission.ACCESS_FINE_LOCATION,
183+
Manifest.permission.CALL_PHONE,
184+
Manifest.permission.READ_LOGS,
185+
Manifest.permission.READ_PHONE_STATE,
186+
Manifest.permission.READ_EXTERNAL_STORAGE,
187+
Manifest.permission.SET_DEBUG_APP,
188+
Manifest.permission.SYSTEM_ALERT_WINDOW,
189+
Manifest.permission.GET_ACCOUNTS,
190+
Manifest.permission.WRITE_APN_SETTINGS
191+
};
192+
ActivityCompat.requestPermissions(MainActivity.this, permissionList, 100);
191193
})
192194
.show(getSupportFragmentManager(), "permissionDialog");
193195

module-blog/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
22
package="com.rae.cnblogs.blog">
33

4+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
45
<application
56
android:allowBackup="true"
67
android:fullBackupContent="true">

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ public class BloggerActivity extends SwipeBackBasicActivity implements BloggerCo
102102
// @BindView(R2.id.view_bg_holder)
103103
// View mBloggerBackgroundView;
104104

105-
@BindView(R2.id.pb_blogger_follow)
106-
View mFollowProgressBar;
105+
// @BindView(R2.id.pb_blogger_follow)
106+
// View mFollowProgressBar;
107107

108108
@BindView(R2.id.tv_blogger_introduce)
109109
TextView mIntroduceView;
@@ -227,7 +227,7 @@ public void onLoadBloggerInfo(final FriendsInfoBean userInfo) {
227227

228228
@Override
229229
public void onFollowSuccess() {
230-
mFollowProgressBar.setVisibility(ViewPager.GONE);
230+
// mFollowProgressBar.setVisibility(ViewPager.GONE);
231231
mFollowView.setVisibility(View.VISIBLE);
232232

233233
mFollowView.setText(mBloggerPresenter.isFollowed() ? R.string.cancel_follow : R.string.following);
@@ -239,7 +239,7 @@ public void onFollowSuccess() {
239239

240240
@Override
241241
public void onFollowFailed(String message) {
242-
mFollowProgressBar.setVisibility(ViewPager.GONE);
242+
// mFollowProgressBar.setVisibility(ViewPager.GONE);
243243
mFollowView.setVisibility(View.VISIBLE);
244244
UICompat.toast(this, message);
245245
}
@@ -321,7 +321,7 @@ public void onFollowButtonClick() {
321321
if (mUserInfo == null) return;
322322

323323
// AppUI.loading(this);
324-
mFollowProgressBar.setVisibility(ViewPager.VISIBLE);
324+
// mFollowProgressBar.setVisibility(ViewPager.VISIBLE);
325325
mFollowView.setVisibility(View.GONE);
326326
mBloggerPresenter.doFollow();
327327
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.rae.cnblogs.blog;
22

3+
import android.content.Intent;
34
import android.os.Bundle;
45
import android.support.annotation.Nullable;
56

@@ -8,6 +9,7 @@
89
import com.rae.cnblogs.activity.SwipeBackBasicActivity;
910
import com.rae.cnblogs.basic.ContentEntity;
1011
import com.rae.cnblogs.blog.fragment.BlogDetailFragment;
12+
import com.umeng.socialize.UMShareAPI;
1113

1214
import butterknife.OnClick;
1315

@@ -44,4 +46,10 @@ public void onActionMenuMoreClick() {
4446
fragment.onActionMenuMoreClick();
4547
}
4648
}
49+
50+
@Override
51+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
52+
super.onActivityResult(requestCode, resultCode, data);
53+
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
54+
}
4755
}

module-blog/src/main/java/com/rae/cnblogs/blog/adapter/BlogHomeFragmentAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import android.support.v4.app.FragmentManager;
77
import android.support.v4.app.FragmentPagerAdapter;
88
import android.support.v4.view.PagerAdapter;
9+
import android.text.TextUtils;
910

1011
import com.rae.cnblogs.basic.Rx;
12+
import com.rae.cnblogs.blog.fragment.KbListFragment;
1113
import com.rae.cnblogs.blog.fragment.MultipleTypeBlogListFragment;
14+
import com.rae.cnblogs.blog.fragment.NewsListFragment;
1215
import com.rae.cnblogs.sdk.bean.CategoryBean;
1316

1417
import java.util.List;
@@ -37,6 +40,10 @@ public int getItemPosition(@NonNull Object object) {
3740
@Override
3841
public Fragment getItem(int position) {
3942
CategoryBean m = mDataList.get(position);
43+
if (TextUtils.equals("news", m.getType()))
44+
return NewsListFragment.newInstance();
45+
if (TextUtils.equals("kb", m.getType()))
46+
return KbListFragment.newInstance();
4047
return MultipleTypeBlogListFragment.newInstance(m);
4148
}
4249

module-blog/src/main/java/com/rae/cnblogs/blog/content/BasicBlogPresenterImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.greenrobot.eventbus.EventBus;
2121

22+
import java.io.IOException;
2223
import java.util.ArrayList;
2324
import java.util.List;
2425

@@ -97,9 +98,11 @@ protected void loadLocalData(int page) {
9798
AndroidObservable.create(Observable.just(page))
9899
.map(new Function<Integer, List<BlogBean>>() {
99100
@Override
100-
public List<BlogBean> apply(Integer page) {
101+
public List<BlogBean> apply(Integer page) throws IOException {
101102
CategoryBean category = getView().getCategory();
102-
if (category == null) return null;
103+
if (category == null || category.getCategoryId() == null) {
104+
throw new NullPointerException("暂无记录");
105+
}
103106
return mDbBlog.getList(category.getCategoryId(), page, mBlogType);
104107
}
105108
})

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

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.rae.cnblogs.blog.detail;
22

3+
import android.content.Context;
4+
import android.net.ConnectivityManager;
5+
import android.net.NetworkInfo;
36
import android.support.annotation.Nullable;
47
import android.text.TextUtils;
58

@@ -18,10 +21,16 @@
1821
import com.rae.cnblogs.sdk.api.INewsApi;
1922
import com.rae.cnblogs.sdk.bean.BlogBean;
2023
import com.rae.cnblogs.sdk.bean.BlogType;
24+
import com.rae.cnblogs.sdk.config.CnblogAppConfig;
2125
import com.rae.cnblogs.sdk.db.DbBlog;
2226
import com.rae.cnblogs.sdk.db.DbFactory;
2327
import com.rae.cnblogs.sdk.db.model.UserBlogInfo;
2428

29+
import org.jsoup.Jsoup;
30+
import org.jsoup.nodes.Document;
31+
import org.jsoup.nodes.Element;
32+
import org.jsoup.select.Elements;
33+
2534
import io.reactivex.Observable;
2635
import io.reactivex.ObservableEmitter;
2736
import io.reactivex.ObservableOnSubscribe;
@@ -36,6 +45,8 @@
3645
*/
3746
public class BlogDetailPresenterImpl extends BasicPresenter<ContentDetailContract.View> implements ContentDetailContract.Presenter {
3847

48+
private final CnblogAppConfig mAppConfig;
49+
private final ConnectivityManager mConnectivityManager;
3950
// 博客数据库
4051
private DbBlog mDbBlog;
4152
private IBlogApi mBlogApi;
@@ -45,10 +56,21 @@ public class BlogDetailPresenterImpl extends BasicPresenter<ContentDetailContrac
4556

4657
public BlogDetailPresenterImpl(ContentDetailContract.View view) {
4758
super(view);
59+
mConnectivityManager = (ConnectivityManager) view.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
60+
mAppConfig = CnblogAppConfig.getInstance(getContext());
4861
mDbBlog = DbFactory.getInstance().getBlog();
4962
mBlogApi = CnblogsApiFactory.getInstance(getContext()).getBlogApi();
5063
}
5164

65+
private boolean isWIFI() {
66+
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
67+
return networkInfo != null && networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
68+
}
69+
70+
private boolean networkIsOk() {
71+
return mConnectivityManager.getActiveNetworkInfo() != null;
72+
}
73+
5274

5375
@Override
5476
public void onLike(final boolean selected) {
@@ -199,6 +221,25 @@ protected void onStart() {
199221
// 请求内容
200222
AndroidObservable.create(fetchContentSource())
201223
.with(this)
224+
225+
// 离线模式下处理图片
226+
.map(new Function<String, String>() {
227+
@Override
228+
public String apply(String content) throws Exception {
229+
230+
// 网络不可用、WIFI情况、 关闭智能无图模式
231+
if (!networkIsOk() || isWIFI() || !mAppConfig.disableBlogImage())
232+
return content;
233+
234+
Document document = Jsoup.parse(content);
235+
Elements elements = document.select("img");
236+
for (Element element : elements) {
237+
element.attr("src", "file:///android_asset/images/placeholder.png");
238+
}
239+
240+
return document.html();
241+
}
242+
})
202243
.map(new Function<String, BlogBean>() {
203244
@Override
204245
public BlogBean apply(String content) {
@@ -323,7 +364,6 @@ public String apply(String content) {
323364
}
324365
});
325366

326-
327367
return Observable.concat(local, network, source).take(1);
328368
}
329369

module-blog/src/main/java/com/rae/cnblogs/blog/home/BlogHomePresenterImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@ protected void onError(String message) {
6161

6262
@Override
6363
protected void accept(List<CategoryBean> data) {
64+
65+
CategoryBean news = new CategoryBean();
66+
news.setCategoryId("0");
67+
news.setParentId("0");
68+
news.setName("新闻");
69+
news.setType("news");
70+
71+
CategoryBean kb = new CategoryBean();
72+
kb.setCategoryId("0");
73+
kb.setParentId("0");
74+
kb.setName("知识库");
75+
kb.setType("kb");
76+
77+
data.add(2, news);
78+
data.add(3, kb);
79+
6480
getView().onLoadCategory(data);
6581
}
6682
});

0 commit comments

Comments
 (0)