Skip to content

Commit c43cef2

Browse files
committed
修复评论问题;
闪存夜间模式适配; 修复闪存列表图片没显示问题;
1 parent cf1cba0 commit c43cef2

39 files changed

+519
-179
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package android.support.design.widget;
2+
3+
import android.content.Context;
4+
import android.content.res.TypedArray;
5+
import android.util.AttributeSet;
6+
7+
import com.rae.cnblogs.R;
8+
9+
import skin.support.content.res.SkinCompatResources;
10+
import skin.support.widget.SkinCompatBackgroundHelper;
11+
import skin.support.widget.SkinCompatHelper;
12+
import skin.support.widget.SkinCompatSupportable;
13+
14+
import static skin.support.widget.SkinCompatHelper.INVALID_ID;
15+
16+
17+
public class RaeSkinDesignTabLayout extends DesignTabLayout implements SkinCompatSupportable {
18+
19+
private SkinCompatBackgroundHelper mBackgroundTintHelper;
20+
private int mTabIndicatorColorResId;
21+
private int mTabTextColorsResId;
22+
private int mTabSelectedTextColorResId;
23+
private int mIndicatorColorResId = INVALID_ID;
24+
private int mTextSelectColorResId = INVALID_ID;
25+
private int mTextUnselectColorResId = INVALID_ID;
26+
27+
public RaeSkinDesignTabLayout(Context context) {
28+
this(context, null);
29+
}
30+
31+
public RaeSkinDesignTabLayout(Context context, AttributeSet attrs) {
32+
this(context, attrs, 0);
33+
}
34+
35+
public RaeSkinDesignTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
36+
super(context, attrs, defStyleAttr);
37+
initViews(attrs, defStyleAttr);
38+
this.applySkin();
39+
}
40+
41+
private void initViews(AttributeSet attrs, int defStyleAttr) {
42+
obtainAttributes(getContext(), attrs);
43+
mBackgroundTintHelper = new SkinCompatBackgroundHelper(this);
44+
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
45+
}
46+
47+
private void obtainAttributes(Context context, AttributeSet attrs) {
48+
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabLayout);
49+
mIndicatorColorResId = a.getResourceId(R.styleable.TabLayout_tabIndicatorColor, INVALID_ID);
50+
mIndicatorColorResId = SkinCompatHelper.checkResourceId(mIndicatorColorResId);
51+
52+
53+
mTextSelectColorResId = a.getResourceId(R.styleable.TabLayout_tabSelectedTextColor, INVALID_ID);
54+
mTextSelectColorResId = SkinCompatHelper.checkResourceId(mTextSelectColorResId);
55+
56+
mTextUnselectColorResId = a.getResourceId(R.styleable.TabLayout_tabTextColor, INVALID_ID);
57+
mTextUnselectColorResId = SkinCompatHelper.checkResourceId(mTextUnselectColorResId);
58+
59+
this.mTabIndicatorColorResId = 0;
60+
this.mTabTextColorsResId = 0;
61+
this.mTabSelectedTextColorResId = 0;
62+
this.mTabIndicatorColorResId = a.getResourceId(R.styleable.TabLayout_tabIndicatorColor, 0);
63+
int tabTextAppearance = a.getResourceId(R.styleable.TabLayout_tabTextAppearance, R.style.TextAppearance_Design_Tab);
64+
TypedArray ta = context.obtainStyledAttributes(tabTextAppearance, R.styleable.SkinTextAppearance);
65+
66+
67+
try {
68+
this.mTabTextColorsResId = ta.getResourceId(R.styleable.SkinTextAppearance_android_textColor, 0);
69+
} finally {
70+
ta.recycle();
71+
}
72+
73+
if (a.hasValue(R.styleable.TabLayout_tabTextColor)) {
74+
this.mTabTextColorsResId = a.getResourceId(R.styleable.TabLayout_tabTextColor, 0);
75+
}
76+
77+
if (a.hasValue(R.styleable.TabLayout_tabSelectedTextColor)) {
78+
this.mTabSelectedTextColorResId = a.getResourceId(R.styleable.TabLayout_tabSelectedTextColor, 0);
79+
}
80+
81+
a.recycle();
82+
applyTabLayoutResources();
83+
}
84+
85+
private void applyTabLayoutResources() {
86+
SkinCompatResources resources = SkinCompatResources.getInstance();
87+
if (mIndicatorColorResId != INVALID_ID) {
88+
setSelectedTabIndicatorColor(resources.getColor(mIndicatorColorResId));
89+
}
90+
if (mTextSelectColorResId != INVALID_ID && mTextUnselectColorResId != INVALID_ID) {
91+
setTabTextColors(resources.getColor(mTextUnselectColorResId), resources.getColor(mTextSelectColorResId));
92+
}
93+
}
94+
95+
@Override
96+
public void applySkin() {
97+
applyTabLayoutResources();
98+
if (mBackgroundTintHelper != null) {
99+
mBackgroundTintHelper.applySkin();
100+
}
101+
}
102+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ public static void jumpToFontSetting(Context context) {
356356
*/
357357
public static void jumpToComment(Context context, BlogBean blog, BlogType type) {
358358
Intent intent = new Intent(context, CommentActivity.class);
359-
intent.putExtra("type", type);
359+
intent.putExtra("type", type.getTypeName());
360360
intent.putExtra("blog", blog);
361361
startActivity(context, intent);
362362
}

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,20 @@ public static Toast failed(Context context, String msg) {
121121
}
122122

123123
public static void dismiss() {
124-
if (dialogWeakReference == null || dialogWeakReference.get() == null) {
125-
return;
126-
}
127-
IAppDialog dialog = dialogWeakReference.get();
128-
if (dialog.isShowing()) {
129-
dialog.dismiss();
130-
}
124+
try {
125+
if (dialogWeakReference == null || dialogWeakReference.get() == null) {
126+
return;
127+
}
128+
IAppDialog dialog = dialogWeakReference.get();
129+
if (dialog.isShowing()) {
130+
dialog.dismiss();
131+
}
131132

132-
dialogWeakReference.clear();
133-
dialogWeakReference = null;
133+
dialogWeakReference.clear();
134+
dialogWeakReference = null;
135+
} catch (Exception e) {
136+
e.printStackTrace();
137+
}
134138
}
135139

136140

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public void onClick(View v) {
2828
fragment.scrollToTop();
2929
}
3030
});
31-
fragment = BlogCommentFragment.newInstance((BlogBean) getIntent().getParcelableExtra("blog"), BlogType.typeOf(getIntent().getStringExtra("type")));
31+
BlogBean blog = getIntent().getParcelableExtra("blog");
32+
String type = getIntent().getStringExtra("type");
33+
fragment = BlogCommentFragment.newInstance(blog, BlogType.typeOf(type));
3234
getSupportFragmentManager().beginTransaction()
3335
.add(R.id.content, fragment)
3436
.commit();

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.rae.cnblogs.AppUI;
2222
import com.rae.cnblogs.GlideApp;
2323
import com.rae.cnblogs.R;
24+
import com.rae.cnblogs.ThemeCompat;
2425
import com.rae.cnblogs.dialog.IAppDialog;
2526
import com.rae.cnblogs.dialog.IAppDialogClickListener;
2627
import com.rae.cnblogs.dialog.impl.DefaultDialog;
@@ -148,6 +149,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
148149

149150
@Override
150151
protected int getHomeAsUpIndicator() {
152+
if (ThemeCompat.isNight()) return R.drawable.ic_back_closed_night;
151153
return R.drawable.ic_back_closed;
152154
}
153155

@@ -211,6 +213,36 @@ public void onBlogApplyClick() {
211213

212214
@OnClick(R.id.tv_post)
213215
public void onPostViewClick() {
216+
// 检查是否开通博客
217+
if (!mPresenter.isBlogOpened() && Rx.getCount(getImageUrls()) > 0) {
218+
DefaultDialog dialog = new DefaultDialog(this);
219+
dialog.setMessage(getString(R.string.tips_post_moment_apply));
220+
dialog.setEnSureText("继续发布");
221+
dialog.setCancelText(getString(R.string.blog_apply));
222+
dialog.setOnCancelListener(new IAppDialogClickListener() {
223+
@Override
224+
public void onClick(IAppDialog dialog, int buttonType) {
225+
dialog.dismiss();
226+
onBlogApplyClick();
227+
}
228+
});
229+
dialog.setOnEnSureListener(new IAppDialogClickListener() {
230+
@Override
231+
public void onClick(IAppDialog dialog, int buttonType) {
232+
dialog.dismiss();
233+
performPostMoment();
234+
}
235+
});
236+
dialog.show();
237+
return;
238+
}
239+
240+
performPostMoment();
241+
242+
243+
}
244+
245+
private void performPostMoment() {
214246
// 统计发布
215247
if (mPresenter.post()) {
216248
AppUI.loading(this, "正在发布");
@@ -228,7 +260,7 @@ public void onBackPressed() {
228260
DefaultDialog dialog = new DefaultDialog(this);
229261
dialog.setMessage("内容还没有发布,真的要放弃吗?");
230262
dialog.setEnSureText("我再想想");
231-
dialog.setCancelText("退下吧");
263+
dialog.setCancelText("不想要了");
232264
dialog.setOnCancelListener(new IAppDialogClickListener() {
233265
@Override
234266
public void onClick(IAppDialog dialog, int buttonType) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public void setTitle(CharSequence title) {
100100

101101
@Override
102102
protected int getHomeAsUpIndicator() {
103+
if (ThemeCompat.isNight()) return R.drawable.ic_back_closed_night;
103104
return R.drawable.ic_back_closed;
104105
}
105106

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

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

33
import android.app.Activity;
4-
import android.graphics.drawable.Drawable;
5-
import android.support.annotation.Nullable;
64
import android.support.v7.widget.GridLayoutManager;
75
import android.text.TextUtils;
86
import android.view.LayoutInflater;
97
import android.view.View;
108
import android.view.ViewGroup;
11-
import android.widget.ImageView;
129

13-
import com.bumptech.glide.load.DataSource;
14-
import com.bumptech.glide.load.engine.GlideException;
15-
import com.bumptech.glide.request.RequestListener;
16-
import com.bumptech.glide.request.target.ImageViewTarget;
17-
import com.bumptech.glide.request.target.Target;
1810
import com.rae.cnblogs.AppRoute;
1911
import com.rae.cnblogs.GlideApp;
2012
import com.rae.cnblogs.R;
@@ -40,25 +32,6 @@ public class MomentAdapter extends BaseItemAdapter<MomentBean, SimpleViewHolder>
4032

4133
String blogApp;
4234

43-
private RequestListener<Drawable> mThumbViewRequestListener = new RequestListener<Drawable>() {
44-
@Override
45-
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
46-
return false;
47-
}
48-
49-
@Override
50-
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
51-
52-
// 限制图片不超过最大高度
53-
if (target instanceof ImageViewTarget) {
54-
ImageView view = (ImageView) ((ImageViewTarget) target).getView();
55-
view.getLayoutParams().height = Math.min(resource.getIntrinsicHeight(), view.getMaxHeight());
56-
view.invalidate();
57-
}
58-
return false;
59-
}
60-
};
61-
6235
public MomentAdapter() {
6336
initUserInfo();
6437
int size = 5;
@@ -98,15 +71,15 @@ public interface OnDeleteClickListener {
9871
}
9972

10073
private OnBloggerClickListener mOnBloggerClickListener;
101-
private OnDeleteClickListener mOnDeleteClickListener;
74+
// private OnDeleteClickListener mOnDeleteClickListener;
10275

10376
public void setOnBloggerClickListener(OnBloggerClickListener onBloggerClickListener) {
10477
mOnBloggerClickListener = onBloggerClickListener;
10578
}
10679

107-
public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
108-
mOnDeleteClickListener = onDeleteClickListener;
109-
}
80+
// public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
81+
// mOnDeleteClickListener = onDeleteClickListener;
82+
// }
11083

11184
@Override
11285
public int getItemViewType(int position) {
@@ -157,14 +130,13 @@ public void onBindViewHolder(SimpleViewHolder viewHolder, int position, MomentBe
157130
String url = m.getImageList().get(0);
158131
GlideApp.with(holder.thumbView)
159132
.load(url)
160-
.listener(mThumbViewRequestListener)
161133
.into(holder.thumbView);
162134
holder.thumbView.setOnClickListener(new ItemImageClickListener(url));
163135
}
164136

165137
RaeImageLoader.displayHeaderImage(m.getAvatar(), holder.avatarView);
166-
holder.deleteView.setVisibility(TextUtils.equals(blogApp, m.getBlogApp()) ? View.VISIBLE : View.GONE);
167-
holder.deleteView.setOnClickListener(new ItemDeleteClickListener(m.getId(), position, mOnDeleteClickListener));
138+
// holder.deleteView.setVisibility(TextUtils.equals(blogApp, m.getBlogApp()) ? View.VISIBLE : View.GONE);
139+
// holder.deleteView.setOnClickListener(new ItemDeleteClickListener(m.getId(), position, mOnDeleteClickListener));
168140
holder.authorView.setText(m.getAuthorName());
169141
holder.dateView.setText(m.getPostTime());
170142
holder.summaryView.setText(m.getContent());

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.view.View;
1212
import android.view.ViewGroup;
1313

14+
import com.rae.cnblogs.GlideApp;
1415
import com.rae.cnblogs.R;
1516
import com.rae.cnblogs.RaeImageLoader;
1617
import com.rae.cnblogs.model.MomentCommentHolder;
@@ -44,9 +45,18 @@ public class MomentDetailAdapter extends BaseItemAdapter<MomentCommentBean, Simp
4445
private MomentAdapter.OnBloggerClickListener mOnBloggerClickListener;
4546
private MomentHolder mMomentHolder;
4647
private CharSequence mBlogApp;
48+
private View.OnClickListener mMomentDeleteOnClickListener;
49+
4750

4851
public MomentDetailAdapter(MomentBean momentBean) {
4952
mMomentBean = momentBean;
53+
initBlogApp();
54+
}
55+
56+
private void initBlogApp() {
57+
if (UserProvider.getInstance().isLogin()) {
58+
mBlogApp = UserProvider.getInstance().getLoginUserInfo().getBlogApp();
59+
}
5060
}
5161

5262
public void setOnPlaceholderClickListener(View.OnClickListener onPlaceholderClickListener) {
@@ -66,6 +76,10 @@ public MomentHolder getMomentHolder() {
6676
return mMomentHolder;
6777
}
6878

79+
public void setMomentDeleteOnClickListener(View.OnClickListener listener) {
80+
mMomentDeleteOnClickListener = listener;
81+
}
82+
6983
@Override
7084
public int getItemCount() {
7185
int count = super.getItemCount();
@@ -177,6 +191,8 @@ private void onBindDetailInfoViewHolder(MomentHolder holder, MomentBean m) {
177191
holder.followView.setOnClickListener(mOnFollowClickListener);
178192
holder.followView.setVisibility(TextUtils.equals(m.getBlogApp(), mBlogApp) ? View.GONE : View.VISIBLE);
179193
holder.mRecyclerView.setVisibility(Rx.isEmpty(m.getImageList()) ? View.GONE : View.VISIBLE);
194+
holder.deleteView.setOnClickListener(mMomentDeleteOnClickListener);
195+
holder.deleteView.setVisibility(TextUtils.equals(m.getBlogApp(), mBlogApp) ? View.VISIBLE : View.GONE);
180196

181197
int imageCount = Rx.getCount(m.getImageList());
182198
if (imageCount == 1) {
@@ -191,7 +207,9 @@ private void onBindDetailInfoViewHolder(MomentHolder holder, MomentBean m) {
191207
holder.thumbView.setVisibility(imageCount == 1 ? View.VISIBLE : View.GONE);
192208
if (imageCount == 1) {
193209
String url = m.getImageList().get(0);
194-
RaeImageLoader.displayImage(url, holder.thumbView);
210+
GlideApp.with(holder.thumbView)
211+
.load(url)
212+
.into(holder.thumbView);
195213
holder.thumbView.setOnClickListener(new MomentAdapter.ItemImageClickListener(url));
196214
}
197215

@@ -231,9 +249,7 @@ private void onBindEmptyViewHolder(final PlaceholderView view) {
231249
@Override
232250
public void invalidate(List<MomentCommentBean> data) {
233251
mIsEmpty = false;
234-
if (UserProvider.getInstance().isLogin()) {
235-
mBlogApp = UserProvider.getInstance().getLoginUserInfo().getBlogApp();
236-
}
252+
initBlogApp();
237253
super.invalidate(data);
238254
}
239255

0 commit comments

Comments
 (0)