Skip to content

Commit e893bba

Browse files
author
ChenRui
committed
闪存
1 parent 6234fc5 commit e893bba

Some content is hidden

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

41 files changed

+834
-133
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ android {
4444
applicationId "com.rae.cnblogs"
4545
minSdkVersion rootProject.ext.minSdkVersion
4646
targetSdkVersion rootProject.ext.targetSdkVersion
47-
versionCode 2
48-
versionName "1.0.1"
47+
versionCode 3
48+
versionName "1.1.0"
4949
multiDexEnabled true
5050
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
5151
buildConfigField 'String', 'BUGLY_APP_ID', '"' + buglyAppId + '"'

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
import com.rae.cnblogs.sdk.db.DbCnblogs;
1313
import com.rae.cnblogs.sdk.db.DbFactory;
1414
import com.rae.swift.session.SessionManager;
15+
import com.tencent.bugly.Bugly;
1516
import com.tencent.tinker.loader.app.TinkerApplication;
1617
import com.tencent.tinker.loader.shareutil.ShareConstants;
18+
import com.umeng.analytics.MobclickAgent;
1719
import com.umeng.socialize.PlatformConfig;
1820
import com.umeng.socialize.UMShareAPI;
1921

@@ -36,8 +38,16 @@ public void onCreate() {
3638

3739
// 级别较高的初始化操作
3840
DbCnblogs.init(getApplication());
39-
// 日志上报
40-
// Bugly.init(getApplication(), BuildConfig.BUGLY_APP_ID, BuildConfig.DEBUG);
41+
// TODO:日志上报
42+
if (!BuildConfig.DEBUG) {
43+
// 正式环境
44+
Bugly.init(getApplication(), BuildConfig.BUGLY_APP_ID, false);
45+
MobclickAgent.setCatchUncaughtExceptions(true);
46+
} else {
47+
// 开发环境
48+
MobclickAgent.setCatchUncaughtExceptions(false);
49+
}
50+
4151
// if (!LeakCanary.isInAnalyzerProcess(this)) {
4252
// LeakCanary.install(this);
4353
// }

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,8 @@ public void onActionBarClick() {
296296
@Override
297297
public void onPostComment(String content, BlogCommentBean parent, boolean isReference) {
298298
// 发表评论
299-
AppUI.loading(getContext(), "正在发表..");
299+
mEditCommentDialog.showLoading();
300300
mCommentPresenter.post(parent);
301-
mEditCommentDialog.dismiss();
302301
}
303302

304303
@Override
@@ -328,7 +327,7 @@ public String getCommentContent() {
328327

329328
@Override
330329
public void onPostCommentFailed(String msg) {
331-
AppUI.dismiss();
330+
mEditCommentDialog.dismissLoading();
332331
AppUI.failed(getContext(), msg);
333332
}
334333

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void onTabReselected(TabLayout.Tab tab) {
127127

128128
// 统计打开时间
129129
AppMobclickAgent.onAppOpenEvent(this);
130-
mViewPager.setCurrentItem(0);
130+
mViewPager.setCurrentItem(1);
131131

132132
// 检查更新
133133
RxObservable.create(CnblogsApiFactory

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,42 @@
22

33
import android.os.Bundle;
44
import android.support.annotation.Nullable;
5+
import android.view.View;
56

67
import com.rae.cnblogs.R;
8+
import com.rae.cnblogs.dialog.impl.ShareDialog;
79
import com.rae.cnblogs.fragment.MomentDetailFragment;
810
import com.rae.cnblogs.sdk.bean.MomentBean;
911

12+
import butterknife.OnClick;
13+
1014
/**
1115
* 详情
1216
* Created by ChenRui on 2017/11/2 0002 15:01.
1317
*/
1418
public class MomentDetailActivity extends SwipeBackBaseActivity {
1519

20+
private MomentBean mMomentBean;
21+
1622
@Override
1723
protected void onCreate(@Nullable Bundle savedInstanceState) {
1824
super.onCreate(savedInstanceState);
1925
setContentView(R.layout.activity_moment_detail);
2026
showHomeAsUp();
27+
mMomentBean = getIntent().getParcelableExtra("data");
2128
getSupportFragmentManager().beginTransaction()
22-
.add(R.id.fl_content, MomentDetailFragment.newInstance((MomentBean) getIntent().getParcelableExtra("data"))).commitNow();
29+
.add(R.id.fl_content, MomentDetailFragment.newInstance(mMomentBean)).commitNow();
30+
}
31+
32+
33+
/**
34+
* 分享
35+
*/
36+
@OnClick(R.id.btn_share)
37+
public void onShareClick() {
38+
ShareDialog shareDialog = new ShareDialog(this);
39+
shareDialog.setExtLayoutVisibility(View.GONE);
40+
shareDialog.setShareWeb(mMomentBean.getSourceUrl(), mMomentBean.getAuthorName() + ":" + mMomentBean.getContent(), mMomentBean.getContent(), mMomentBean.getAvatar());
41+
shareDialog.show();
2342
}
2443
}

app/src/main/java/com/rae/cnblogs/adapter/BaseItemAdapter.java

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

33
import android.content.Context;
4+
import android.support.annotation.Nullable;
45
import android.support.v7.widget.RecyclerView;
56
import android.view.LayoutInflater;
67
import android.view.View;
@@ -64,21 +65,26 @@ public VH onCreateViewHolder(ViewGroup parent, int viewType) {
6465

6566
@Override
6667
public void onBindViewHolder(VH holder, int position) {
67-
final T dataItem = getDataItem(position);
68+
final T dataItem = getDataItem(Math.max(0, position));
6869
onBindViewHolder(holder, position, dataItem);
6970
if (mOnItemClickListener != null && dataItem != null) {
70-
holder.itemView.setOnClickListener(new View.OnClickListener() {
71-
@Override
72-
public void onClick(View v) {
73-
mOnItemClickListener.onItemClick(dataItem);
74-
}
75-
});
71+
onBindItemClickListener(holder, position, dataItem);
7672
}
7773
}
7874

75+
protected void onBindItemClickListener(VH holder, int position, final T dataItem) {
76+
holder.itemView.setOnClickListener(new View.OnClickListener() {
77+
@Override
78+
public void onClick(View v) {
79+
mOnItemClickListener.onItemClick(dataItem);
80+
}
81+
});
82+
}
83+
7984

85+
@Nullable
8086
public T getDataItem(int position) {
81-
return Rx.isEmpty(mDataList) ? null : mDataList.get(position % getItemCount());
87+
return Rx.isEmpty(mDataList) || position < 0 ? null : mDataList.get(position % Rx.getCount(mDataList));
8288
}
8389

8490
@Override

app/src/main/java/com/rae/cnblogs/adapter/MomentAdapter.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,37 @@
88

99
import com.rae.cnblogs.R;
1010
import com.rae.cnblogs.RaeImageLoader;
11+
import com.rae.cnblogs.model.ItemLoadingViewHolder;
1112
import com.rae.cnblogs.model.MomentHolder;
13+
import com.rae.cnblogs.model.SimpleViewHolder;
1214
import com.rae.cnblogs.sdk.UserProvider;
1315
import com.rae.cnblogs.sdk.bean.MomentBean;
1416
import com.rae.cnblogs.sdk.bean.UserInfoBean;
1517
import com.rae.swift.Rx;
1618

1719
import java.lang.ref.WeakReference;
20+
import java.util.ArrayList;
1821
import java.util.List;
1922

2023
/**
2124
* 闪存
2225
* Created by ChenRui on 2017/10/27 0027 10:49.
2326
*/
24-
public class MomentAdapter extends BaseItemAdapter<MomentBean, MomentHolder> implements View.OnClickListener {
27+
public class MomentAdapter extends BaseItemAdapter<MomentBean, SimpleViewHolder> implements View.OnClickListener {
28+
2529

2630
String blogApp;
2731

2832
public MomentAdapter() {
2933
initUserInfo();
34+
int size = 5;
35+
List<MomentBean> data = new ArrayList<>();
36+
for (int i = 0; i < size; i++) {
37+
MomentBean m = new MomentBean();
38+
m.setId("loading");
39+
data.add(m);
40+
}
41+
invalidate(data);
3042
}
3143

3244
private void initUserInfo() {
@@ -67,20 +79,36 @@ public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener
6779
}
6880

6981
@Override
70-
public MomentHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
82+
public int getItemViewType(int position) {
83+
MomentBean dataItem = getDataItem(position);
84+
if (dataItem != null && "loading".equalsIgnoreCase(dataItem.getId())) {
85+
return VIEW_TYPE_LOADING;
86+
}
87+
return super.getItemViewType(position);
88+
}
89+
90+
@Override
91+
public SimpleViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
92+
if (viewType == VIEW_TYPE_LOADING) {
93+
return new ItemLoadingViewHolder(inflateView(parent, R.layout.item_list_loading));
94+
}
7195
return new MomentHolder(inflateView(parent, R.layout.item_moment_list));
7296
}
7397

7498
@Override
75-
public void onBindViewHolder(MomentHolder holder, int position, MomentBean m) {
99+
public void onBindViewHolder(SimpleViewHolder viewHolder, int position, MomentBean m) {
100+
int viewType = getItemViewType(position);
101+
if (viewType == VIEW_TYPE_LOADING) return;
102+
103+
MomentHolder holder = (MomentHolder) viewHolder;
76104
int imageCount = Rx.getCount(m.getImageList());
77105
holder.mRecyclerView.setVisibility(imageCount > 1 ? View.GONE : View.VISIBLE);
78106

79107
if (imageCount > 1) {
80108
int spanCount = imageCount == 4 || imageCount == 2 ? 2 : 3;
81109
holder.mRecyclerView.setLayoutManager(new GridLayoutManager(holder.itemView.getContext(), spanCount));
82110
holder.mRecyclerView.setAdapter(new MomentImageAdapter(m.getImageList()));
83-
} else {
111+
} else if (holder.mRecyclerView.getLayoutManager() != null) {
84112
holder.mRecyclerView.getLayoutManager().removeAllViews();
85113
holder.mRecyclerView.removeAllViews();
86114
}
@@ -126,7 +154,7 @@ public void onClick(View v) {
126154
}
127155

128156

129-
private static class ItemBloggerClickListener implements View.OnClickListener {
157+
public static class ItemBloggerClickListener implements View.OnClickListener {
130158
private String blogApp;
131159
private WeakReference<OnBloggerClickListener> mOnBloggerClickListenerWeakReference;
132160

app/src/main/java/com/rae/cnblogs/adapter/MomentDetailAdapter.java

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package com.rae.cnblogs.adapter;
22

3+
import android.support.annotation.Nullable;
4+
import android.support.v4.content.ContextCompat;
35
import android.support.v7.widget.GridLayoutManager;
46
import android.support.v7.widget.LinearLayoutManager;
7+
import android.text.SpannableString;
8+
import android.text.Spanned;
9+
import android.text.TextUtils;
10+
import android.text.style.ForegroundColorSpan;
511
import android.view.LayoutInflater;
612
import android.view.View;
713
import android.view.ViewGroup;
@@ -25,20 +31,36 @@
2531
*/
2632
public class MomentDetailAdapter extends BaseItemAdapter<MomentCommentBean, SimpleViewHolder> {
2733

34+
2835
private static final int VIEW_TYPE_DETAIL = 10;
2936
private final MomentBean mMomentBean;
3037
private boolean mIsEmpty;
3138
private String mEmptyMessage;
32-
private int mDetailLayoutHeight;
3339

3440
// 显示类型
3541
private int mViewTypeCount = 1;
3642
private WeakReference<ViewGroup> mViewParent;
43+
private View.OnClickListener mOnPlaceholderClickListener;
44+
private MomentAdapter.OnBloggerClickListener mOnBloggerClickListener;
45+
private MomentHolder mMomentHolder;
3746

3847
public MomentDetailAdapter(MomentBean momentBean) {
3948
mMomentBean = momentBean;
4049
}
4150

51+
public void setOnPlaceholderClickListener(View.OnClickListener onPlaceholderClickListener) {
52+
mOnPlaceholderClickListener = onPlaceholderClickListener;
53+
}
54+
55+
public void setOnBloggerClickListener(MomentAdapter.OnBloggerClickListener onBloggerClickListener) {
56+
mOnBloggerClickListener = onBloggerClickListener;
57+
}
58+
59+
@Nullable
60+
public MomentHolder getMomentHolder() {
61+
return mMomentHolder;
62+
}
63+
4264
@Override
4365
public int getItemCount() {
4466
int count = super.getItemCount();
@@ -70,6 +92,13 @@ public int getItemViewType(int position) {
7092
return super.getItemViewType(position);
7193
}
7294

95+
@Override
96+
protected void onBindItemClickListener(SimpleViewHolder holder, int position, MomentCommentBean dataItem) {
97+
if (position > 0) {
98+
super.onBindItemClickListener(holder, position, dataItem);
99+
}
100+
}
101+
73102
@Override
74103
public SimpleViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
75104

@@ -82,7 +111,8 @@ public SimpleViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup pa
82111
return new SimpleViewHolder(inflateView(parent, R.layout.item_comment_placeholder));
83112
// 详情
84113
case VIEW_TYPE_DETAIL:
85-
return new MomentHolder(inflateView(parent, R.layout.item_moment_detail_info));
114+
mMomentHolder = new MomentHolder(inflateView(parent, R.layout.item_moment_detail_info));
115+
return mMomentHolder;
86116
default:
87117
return new MomentCommentHolder(inflateView(parent, R.layout.item_moment_comment));
88118
}
@@ -100,7 +130,6 @@ public void onBindViewHolder(SimpleViewHolder holder, int position, MomentCommen
100130
// 详情
101131
case VIEW_TYPE_DETAIL:
102132
onBindDetailInfoViewHolder((MomentHolder) holder, mMomentBean);
103-
mDetailLayoutHeight = holder.itemView.getMeasuredHeight();
104133
return;
105134
default:
106135
onBindCommentViewHolder((MomentCommentHolder) holder, m);
@@ -113,9 +142,18 @@ public void onBindViewHolder(SimpleViewHolder holder, int position, MomentCommen
113142
* 评论
114143
*/
115144
private void onBindCommentViewHolder(MomentCommentHolder holder, MomentCommentBean m) {
145+
SpannableString content = new SpannableString(m.getContent());
146+
147+
if (!TextUtils.isEmpty(m.getAtAuthorName())) {
148+
content.setSpan(new ForegroundColorSpan(ContextCompat.getColor(holder.itemView.getContext(), R.color.colorPrimary)), 0, m.getAtAuthorName().length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
149+
}
150+
151+
int index = mDataList.indexOf(m);
152+
holder.titleLayout.setVisibility(index == 0 ? View.VISIBLE : View.GONE);
153+
holder.dividerView.setVisibility(index == mDataList.size() - 1 ? View.GONE : View.VISIBLE);
116154
holder.authorView.setText(m.getAuthorName());
117155
holder.dateView.setText(m.getPostTime());
118-
holder.summaryView.setText(m.getContent());
156+
holder.summaryView.setText(content);
119157
}
120158

121159
/**
@@ -132,6 +170,11 @@ private void onBindDetailInfoViewHolder(MomentHolder holder, MomentBean m) {
132170
holder.mRecyclerView.setLayoutManager(new GridLayoutManager(holder.itemView.getContext(), spanCount));
133171
}
134172

173+
View.OnClickListener onClickListener = TextUtils.isEmpty(m.getBlogApp()) ? null : new MomentAdapter.ItemBloggerClickListener(m.getBlogApp(), mOnBloggerClickListener);
174+
holder.authorView.setOnClickListener(onClickListener);
175+
holder.avatarView.setOnClickListener(onClickListener);
176+
holder.dateView.setOnClickListener(onClickListener);
177+
135178
holder.mRecyclerView.setAdapter(new MomentImageAdapter(m.getImageList()));
136179
RaeImageLoader.displayHeaderImage(m.getAvatar(), holder.avatarView);
137180
holder.authorView.setText(m.getAuthorName());
@@ -144,19 +187,8 @@ private void onBindDetailInfoViewHolder(MomentHolder holder, MomentBean m) {
144187
* 空视图
145188
*/
146189
private void onBindEmptyViewHolder(final PlaceholderView view) {
147-
// 重新计算高度
148-
if (mViewParent != null && mViewParent.get() != null) {
149-
view.post(new Runnable() {
150-
@Override
151-
public void run() {
152-
ViewGroup parent = mViewParent.get();
153-
int height = parent.getMeasuredHeight();
154-
int[] location = new int[2];
155-
view.getLocationInWindow(location);
156-
view.getLayoutParams().height = height - location[1];
157-
}
158-
});
159-
}
190+
// 绑定点击事件
191+
view.setOnClickListener(mOnPlaceholderClickListener);
160192

161193
// 有评论
162194
if (getItemCount() > mViewTypeCount) {

0 commit comments

Comments
 (0)