Skip to content

Commit b837b38

Browse files
author
ChenRui
committed
- 知识库显示图文模式
- 解决友盟没统计到分类问题 - WebView支持下载链接 - 首页点击分类回顶部 - 分类列表长按提示分类名称 - 调整收藏界面背景颜色 - 版本更新接口添加渠道参数
1 parent 9c066a0 commit b837b38

File tree

14 files changed

+206
-64
lines changed

14 files changed

+206
-64
lines changed

CHANGES.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# 版本更新记录
2+
3+
## V1.0.0 补丁版本
4+
5+
> **2017-08-28**
6+
7+
- 知识库显示图文模式
8+
- 解决友盟没统计到分类问题
9+
- WebView支持下载链接
10+
- 首页点击分类回顶部
11+
- 分类列表长按提示分类名称
12+
- 调整收藏界面背景颜色
13+
- 版本更新接口添加渠道参数
14+
15+
> **2017-08-27**
16+
17+
- 解决登录出现 Null is not a valid element的问题
18+
- 解决查看评论界面列表下拉不了问题
19+
- 解决分享到新浪微博报错问题
20+
- 登录界面添加忘记密码入口、查看明文密码、删除密码功能
21+
22+
23+
## V1.0.0
24+
25+
- 界面净白风格,专注阅读,给你极简体验。
26+
- 首页分类阅读,定制你喜欢的栏目。
27+
- 首页列表图文结合,让阅读不在单调。
28+
- 博文阅读代码高亮,大图查看。
29+
- 博文支持评论、点赞、收藏。
30+
- 博主界面更加清爽,博主动态显示,博客列表,一起来关注大牛吧。
31+
- 新闻阅读、知识库该有的都有了
32+
- 你要的登录!登录!登录!来啦~~~~
33+
- WIFI自动离线下载,无需配置。
34+
35+

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ android {
7171
DEV {} // 测试
7272
baidu {} // 百度手机助手
7373
yinyongbao {} // 应用宝
74-
m360 {} // 360手机助手
75-
pp {} // PP助手
74+
// m360 {} // 360手机助手
75+
// pp {} // PP助手
7676
xiaomi {} // 小米商店
7777
huawei {} // 华为商店
7878
official {} // 官方版本

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import android.annotation.SuppressLint;
44
import android.content.Context;
55
import android.text.TextUtils;
6-
import android.util.Log;
76

87
import com.umeng.analytics.MobclickAgent;
98

@@ -27,18 +26,25 @@ public static void onAppOpenEvent(Context context) {
2726
MobclickAgent.onEvent(context, "APP_OPEN_EVENT", openDate);
2827
}
2928

29+
/**
30+
* 统计栏目点击
31+
*
32+
* @param category 栏目
33+
*/
3034
public static void onCategoryEvent(Context context, String category) {
3135
MobclickAgent.onEvent(context, "APP_CATEGORY", category);
3236
}
3337

38+
/**
39+
* 广告统计
40+
*/
3441
private static void onAdEvent(Context context, Map<String, String> map) {
3542
MobclickAgent.onEvent(context, "APP_AD_EVENT", map);
3643
}
3744

3845
/**
3946
* 启动页广告曝光次数
4047
*
41-
* @param context
4248
* @param id 广告ID
4349
*/
4450
public static void onLaunchAdExposureEvent(Context context, String id, String name) {
@@ -52,7 +58,6 @@ public static void onLaunchAdExposureEvent(Context context, String id, String na
5258
/**
5359
* 启动页广告点击次数
5460
*
55-
* @param context
5661
* @param id 广告ID
5762
*/
5863
public static void onLaunchAdClickEvent(Context context, String id, String name) {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.tencent.bugly.Bugly;
1414
import com.tencent.tinker.loader.app.TinkerApplication;
1515
import com.tencent.tinker.loader.shareutil.ShareConstants;
16+
import com.umeng.analytics.MobclickAgent;
1617
import com.umeng.socialize.PlatformConfig;
1718
import com.umeng.socialize.UMShareAPI;
1819

@@ -35,12 +36,13 @@ public void onCreate() {
3536
// 日志上报
3637
Bugly.init(getApplication(), BuildConfig.BUGLY_APP_ID, BuildConfig.DEBUG);
3738
if (!LeakCanary.isInAnalyzerProcess(this)) {
38-
LeakCanary.install(this);
39+
// LeakCanary.install(this);
3940
}
4041

4142
// LeanCloud用户反馈初始化,要在主线程总
4243
AVOSCloud.initialize(getApplication(), BuildConfig.LEAN_CLOUD_APP_ID, BuildConfig.LEAN_CLOUD_APP_KEY);
4344
FeedbackThread.getInstance();
45+
MobclickAgent.setDebugMode(BuildConfig.DEBUG);
4446

4547
// 一些要求不高的初始化操作放到线程中去操作
4648
new Thread(new Runnable() {

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import com.rae.cnblogs.message.TabEvent;
3737
import com.rae.cnblogs.sdk.ApiDefaultObserver;
3838
import com.rae.cnblogs.sdk.CnblogsApiFactory;
39-
import com.rae.cnblogs.sdk.UserProvider;
4039
import com.rae.cnblogs.sdk.bean.BlogType;
4140
import com.rae.cnblogs.sdk.bean.CategoryBean;
4241
import com.rae.cnblogs.sdk.bean.VersionInfo;
@@ -135,7 +134,7 @@ public void onTabReselected(TabLayout.Tab tab) {
135134
RxObservable.create(CnblogsApiFactory
136135
.getInstance(getContext())
137136
.getRaeServerApi()
138-
.versionInfo(getVersionCode()), "MainActivity")
137+
.versionInfo(getVersionCode(), getChannel()), "MainActivity")
139138
.subscribe(new ApiDefaultObserver<VersionInfo>() {
140139
@Override
141140
protected void onError(String message) {
@@ -274,4 +273,19 @@ public void onEvent(JobEvent event) {
274273
if (mCnblogsServiceBinder == null) return;
275274
mCnblogsServiceBinder.getJobScheduler().start(event.getAction());
276275
}
276+
277+
/**
278+
* 获取渠道包
279+
*/
280+
public String getChannel() {
281+
try {
282+
return getPackageManager()
283+
.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA)
284+
.metaData
285+
.getString("UMENG_CHANNEL", "official");
286+
} catch (Exception e) {
287+
e.printStackTrace();
288+
}
289+
return "official";
290+
}
277291
}

app/src/main/java/com/rae/cnblogs/fragment/BlogListFragment.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.rae.cnblogs.widget.PlaceholderView;
2222
import com.rae.cnblogs.widget.RaeRecyclerView;
2323
import com.rae.swift.Rx;
24+
import com.umeng.analytics.MobclickAgent;
2425

2526
import org.greenrobot.eventbus.EventBus;
2627
import org.greenrobot.eventbus.Subscribe;
@@ -80,14 +81,18 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
8081
EventBus.getDefault().register(this);
8182
}
8283

84+
@Override
85+
public void onPause() {
86+
super.onPause();
87+
MobclickAgent.onPageEnd("博客列表");
88+
}
89+
8390
@Override
8491
public void onResume() {
8592
super.onResume();
93+
MobclickAgent.onPageStart("博客列表");
8694
// 统计分类
87-
if (mCategory != null
88-
&& "news".equalsIgnoreCase(mCategory.getType())
89-
&& "kb".equalsIgnoreCase(mCategory.getType())
90-
) {
95+
if (mCategory != null) {
9196
AppMobclickAgent.onCategoryEvent(getContext(), mCategory.getName());
9297
}
9398
}

app/src/main/java/com/rae/cnblogs/fragment/CategoriesFragment.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,15 @@ public boolean onItemClick(int position) {
173173
return false;
174174
}
175175
});
176+
177+
mCategoryAdapter.addListener(new FlexibleAdapter.OnItemLongClickListener() {
178+
@Override
179+
public void onItemLongClick(int i) {
180+
CategoriesOverallItem item = (CategoriesOverallItem) mCategoryAdapter.getItem(i);
181+
if (item == null) return;
182+
AppUI.toastInCenter(getContext(), item.getCategory().getName());
183+
}
184+
});
176185
}
177186

178187

app/src/main/java/com/rae/cnblogs/fragment/HomeFragment.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -99,32 +99,28 @@ public void onLoadCategory(List<CategoryBean> data) {
9999
mAdapter = new BlogListAdapter(getChildFragmentManager(), data);
100100
mViewPager.setAdapter(mAdapter);
101101
mTabLayout.setupWithViewPager(mViewPager);
102+
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
103+
@Override
104+
public void onTabSelected(TabLayout.Tab tab) {
105+
106+
}
107+
108+
@Override
109+
public void onTabUnselected(TabLayout.Tab tab) {
110+
111+
}
112+
113+
@Override
114+
public void onTabReselected(TabLayout.Tab tab) {
115+
onLogoClick();
116+
}
117+
});
102118
} else {
103119
mAdapter.updateDataSet(data);
104120
}
105121
if (data.size() < count) {
106122
mViewPager.setCurrentItem(0);
107-
}
108-
// else if (mPosition > 1 && mPosition == mViewPager.getCurrentItem()) {
109-
// // 非首页、推荐,排序后还在当前页,需要重新刷新
110-
// BlogListFragment fragment = mAdapter.getFragment(mPosition);
111-
// if (fragment != null) {
112-
// m
113-
//
114-
// // 先移除
115-
// FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
116-
// transaction.detach(fragment);
117-
// transaction.remove(fragment);
118-
// transaction.commit();
119-
//
120-
// transaction = getChildFragmentManager().beginTransaction();
121-
//
122-
//// fragment.refreshCategory(data.get(mPosition));
123-
// transaction.re(fragment);
124-
// transaction.commit();
125-
// }
126-
// }
127-
else {
123+
} else {
128124
mViewPager.setCurrentItem(mPosition);
129125
}
130126
}

app/src/main/java/com/rae/cnblogs/fragment/WebViewFragment.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
package com.rae.cnblogs.fragment;
22

33
import android.annotation.SuppressLint;
4+
import android.content.Intent;
5+
import android.net.Uri;
46
import android.os.Bundle;
57
import android.support.annotation.Nullable;
68
import android.view.LayoutInflater;
79
import android.view.View;
810
import android.view.ViewGroup;
11+
import android.webkit.DownloadListener;
912
import android.webkit.WebChromeClient;
1013
import android.webkit.WebSettings;
1114
import android.webkit.WebView;
1215
import android.webkit.WebViewClient;
1316
import android.widget.FrameLayout;
1417
import android.widget.ProgressBar;
1518

19+
import com.rae.cnblogs.AppUI;
1620
import com.rae.cnblogs.R;
1721
import com.rae.cnblogs.widget.AppLayout;
1822
import com.rae.cnblogs.widget.RaeWebView;
@@ -76,6 +80,21 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
7680
mWebView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
7781
mContentLayout.addView(mWebView);
7882

83+
// 下载监听
84+
mWebView.setDownloadListener(new DownloadListener() {
85+
@Override
86+
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
87+
try {
88+
Uri uri = Uri.parse(url);
89+
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
90+
startActivity(intent);
91+
} catch (Exception e) {
92+
e.printStackTrace();
93+
AppUI.failed(getContext(), "下载文件错误");
94+
}
95+
}
96+
});
97+
7998
mAppLayout.setPtrHandler(new PtrDefaultHandler() {
8099
@Override
81100
public void onRefreshBegin(PtrFrameLayout ptrFrameLayout) {

app/src/main/res/layout/activity_favorites.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<com.rae.cnblogs.widget.RaeRecyclerView
1717
android:id="@+id/rec_friends_list"
1818
android:layout_width="match_parent"
19-
android:layout_height="wrap_content"
19+
android:layout_height="match_parent"
2020
android:background="@color/background_divider"/>
2121
</com.rae.cnblogs.widget.PlaceholderView>
2222
</LinearLayout>

sdk/src/androidTest/java/rae/com/cnblogs/sdk/RaeApiTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ public void testVersionUpdate() throws InterruptedException {
4040
e.printStackTrace();
4141
}
4242

43-
runTest("testVersionUpdate", mApi.versionInfo(1));
43+
runTest("testVersionUpdate", mApi.versionInfo(1,"dev"));
4444
}
4545
}

sdk/src/main/java/com/rae/cnblogs/sdk/UserProvider.java

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,9 @@
1010
import com.rae.cnblogs.sdk.config.CnblogSdkConfig;
1111
import com.rae.swift.session.SessionManager;
1212

13-
import java.io.IOException;
1413
import java.net.CookieHandler;
15-
import java.net.URI;
1614
import java.util.ArrayList;
17-
import java.util.Collections;
1815
import java.util.List;
19-
import java.util.Map;
2016

2117
import io.reactivex.annotations.Nullable;
2218
import okhttp3.Cookie;
@@ -176,27 +172,27 @@ public void syncFormWebview() {
176172
Log.i("rae", "cookie:" + list.size());
177173
}
178174

179-
// TODO:调试登录
180-
public void debugLogin() {
181-
UserInfoBean userInfo = new UserInfoBean();
182-
userInfo.setAvatar("http://pic.cnblogs.com/avatar/446312/20170124105915.png");
183-
userInfo.setBlogApp("chenrui7");
184-
userInfo.setDisplayName("RAE");
185-
userInfo.setUserId("fdeed5f3-11fb-e111-aa3f-842b2b196315");
186-
URI url = URI.create("http://www.cnblogs.com");
187-
List<String> cookieStrings = new ArrayList<>();
188-
cookieStrings.add(".CNBlogsCookie=3479CA4E4D0D34A70D41CA7F641FF395B033357076EB7D40B6E885781771F4424EAD83FFC60C1FC60AE7C4C8265F873A3FE0F67FF068D9607DFA23C8B9A586082F6F524218CCCA684051FE18989643BF8D591927; domain=.cnblogs.com; path=/; HttpOnly");
189-
cookieStrings.add(".Cnblogs.AspNetCore.Cookies=CfDJ8PhlBN8IFxtHhqIV3s0LCDnwRFoSQTC7lIE6RZakFxsC4zQjlWxND689FLk6p708fPrjiF36MbSGlbg2IoFc-C4_jVIXfWqyOHigX8-o6v2LmAzDpaos_027aT5ufroTJ3fLnL6TEadGIMlU27eT537As8KTgZ-g06478rwL0N99IJMOsuPsO-4eji0DX5zCoKugWJDlHiZbLCcKpyP-OEEzFpOgUjrmOVXW70phIpQJjlb0DSDPoRrjF6_2lL0_EHkCmRFqPsW1bsgWRUWVHUC-AD65TNvckNj4w8YDbDBf; domain=.cnblogs.com; path=/; HttpOnly");
190-
191-
192-
Map<String, List<String>> map = Collections.singletonMap("Set-Cookie", cookieStrings);
193-
CookieHandler cookieManager = java.net.CookieManager.getDefault();
194-
try {
195-
cookieManager.put(url, map);
196-
} catch (IOException e) {
197-
e.printStackTrace();
198-
}
199-
200-
UserProvider.getInstance().setLoginUserInfo(userInfo);
201-
}
175+
// // TODO:调试登录
176+
// public void debugLogin() {
177+
// UserInfoBean userInfo = new UserInfoBean();
178+
// userInfo.setAvatar("http://pic.cnblogs.com/avatar/446312/20170124105915.png");
179+
// userInfo.setBlogApp("chenrui7");
180+
// userInfo.setDisplayName("RAE");
181+
// userInfo.setUserId("fdeed5f3-11fb-e111-aa3f-842b2b196315");
182+
// URI url = URI.create("http://www.cnblogs.com");
183+
// List<String> cookieStrings = new ArrayList<>();
184+
// cookieStrings.add(".CNBlogsCookie=3479CA4E4D0D34A70D41CA7F641FF395B033357076EB7D40B6E885781771F4424EAD83FFC60C1FC60AE7C4C8265F873A3FE0F67FF068D9607DFA23C8B9A586082F6F524218CCCA684051FE18989643BF8D591927; domain=.cnblogs.com; path=/; HttpOnly");
185+
// cookieStrings.add(".Cnblogs.AspNetCore.Cookies=CfDJ8PhlBN8IFxtHhqIV3s0LCDnwRFoSQTC7lIE6RZakFxsC4zQjlWxND689FLk6p708fPrjiF36MbSGlbg2IoFc-C4_jVIXfWqyOHigX8-o6v2LmAzDpaos_027aT5ufroTJ3fLnL6TEadGIMlU27eT537As8KTgZ-g06478rwL0N99IJMOsuPsO-4eji0DX5zCoKugWJDlHiZbLCcKpyP-OEEzFpOgUjrmOVXW70phIpQJjlb0DSDPoRrjF6_2lL0_EHkCmRFqPsW1bsgWRUWVHUC-AD65TNvckNj4w8YDbDBf; domain=.cnblogs.com; path=/; HttpOnly");
186+
//
187+
//
188+
// Map<String, List<String>> map = Collections.singletonMap("Set-Cookie", cookieStrings);
189+
// CookieHandler cookieManager = java.net.CookieManager.getDefault();
190+
// try {
191+
// cookieManager.put(url, map);
192+
// } catch (IOException e) {
193+
// e.printStackTrace();
194+
// }
195+
//
196+
// UserProvider.getInstance().setLoginUserInfo(userInfo);
197+
// }
202198
}

sdk/src/main/java/com/rae/cnblogs/sdk/api/IRaeServerApi.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.reactivex.Observable;
77
import retrofit2.http.GET;
88
import retrofit2.http.Path;
9+
import retrofit2.http.Query;
910

1011
/**
1112
* 个人接口
@@ -17,6 +18,10 @@ public interface IRaeServerApi {
1718
Observable<AdvertBean> getLauncherAd();
1819

1920

21+
/**
22+
* @param versionCode 版本代码
23+
* @param channel 渠道
24+
*/
2025
@GET(ApiUrls.RAE_API_CHECK_VERSION)
21-
Observable<VersionInfo> versionInfo(@Path("versionCode") int versionCode);
26+
Observable<VersionInfo> versionInfo(@Path("versionCode") int versionCode, @Query("channel") String channel);
2227
}

0 commit comments

Comments
 (0)