Skip to content

Commit 6234fc5

Browse files
committed
闪存添加删除功能
1 parent c5148ea commit 6234fc5

27 files changed

+608
-48
lines changed

Diff for: app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ android {
8282
}
8383
beta {
8484
initWith release
85-
versionNameSuffix rootProject.hasProperty("buildNum") ? '.beta-' + rootProject.property("buildNum") : ''
85+
versionNameSuffix rootProject.hasProperty("buildNum") ? 'beta.' + rootProject.property("buildNum") : ''
8686
}
8787
}
8888
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }

Diff for: app/src/main/java/com/rae/cnblogs/AppRoute.java

+17
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.rae.cnblogs.sdk.bean.BlogBean;
3030
import com.rae.cnblogs.sdk.bean.BlogType;
3131
import com.rae.cnblogs.sdk.bean.MomentBean;
32+
import com.rae.cnblogs.sdk.model.MomentMetaData;
3233

3334
import java.util.ArrayList;
3435

@@ -150,6 +151,13 @@ public static void jumpToLogin(Context context) {
150151
startActivity(context, LoginActivity.class);
151152
}
152153

154+
/**
155+
* 登录
156+
*/
157+
public static void jumpToLogin(Activity context, int req) {
158+
startActivityForResult(context, LoginActivity.class, req);
159+
}
160+
153161
/**
154162
* 登录,有回调结果
155163
*/
@@ -354,6 +362,15 @@ public static void jumpToPostMoment(Activity context) {
354362
startActivityForResult(context, intent, REQ_POST_MOMENT);
355363
}
356364

365+
/**
366+
* 发布闪存
367+
*/
368+
public static void jumpToPostMoment(Activity context, MomentMetaData data) {
369+
Intent intent = new Intent(context, PostMomentActivity.class);
370+
intent.putExtra(Intent.EXTRA_TEXT, data);
371+
startActivityForResult(context, intent, REQ_POST_MOMENT);
372+
}
373+
357374
/**
358375
* 闪存详情
359376
*/

Diff for: app/src/main/java/com/rae/cnblogs/AppUI.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ public static IAppDialog loading(Context context, String msg) {
7171
LoadingDialog loadingDialog = (LoadingDialog) dialog;
7272

7373
if (!((ContextWrapper) loadingDialog.getContext()).getBaseContext().equals(context)) {
74-
loadingDialog.dismiss();
74+
if (loadingDialog.getWindow() != null && loadingDialog.getWindow().getDecorView() != null) {
75+
loadingDialog.dismiss();
76+
}
7577
dialogWeakReference.clear();
7678
dialogWeakReference = null;
7779
dialog = DialogProvider.create(context, DialogProvider.TYPE_LOADING);

Diff for: app/src/main/java/com/rae/cnblogs/activity/MainActivity.java

+57
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.rae.cnblogs.activity;
22

33
import android.Manifest;
4+
import android.app.NotificationManager;
45
import android.content.ComponentName;
6+
import android.content.Context;
57
import android.content.Intent;
68
import android.content.ServiceConnection;
79
import android.content.pm.PackageManager;
@@ -18,6 +20,7 @@
1820
import android.widget.TextView;
1921

2022
import com.rae.cnblogs.AppMobclickAgent;
23+
import com.rae.cnblogs.AppRoute;
2124
import com.rae.cnblogs.AppStatusBar;
2225
import com.rae.cnblogs.AppUI;
2326
import com.rae.cnblogs.BuildConfig;
@@ -33,6 +36,7 @@
3336
import com.rae.cnblogs.fragment.HomeFragment;
3437
import com.rae.cnblogs.fragment.MineFragment;
3538
import com.rae.cnblogs.fragment.SNSFragment;
39+
import com.rae.cnblogs.message.PostMomentEvent;
3640
import com.rae.cnblogs.message.TabEvent;
3741
import com.rae.cnblogs.message.ThemeChangedEvent;
3842
import com.rae.cnblogs.sdk.ApiDefaultObserver;
@@ -41,10 +45,12 @@
4145
import com.rae.cnblogs.service.CnblogsService;
4246
import com.rae.cnblogs.service.CnblogsServiceBinder;
4347
import com.rae.cnblogs.service.job.JobEvent;
48+
import com.rae.swift.Rx;
4449
import com.rae.swift.app.RaeFragmentAdapter;
4550

4651
import org.greenrobot.eventbus.EventBus;
4752
import org.greenrobot.eventbus.Subscribe;
53+
import org.greenrobot.eventbus.ThreadMode;
4854

4955
import butterknife.BindView;
5056

@@ -262,4 +268,55 @@ public void onEvent(JobEvent event) {
262268
mCnblogsServiceBinder.getJobScheduler().start(event.getAction());
263269
}
264270

271+
@Subscribe(threadMode = ThreadMode.MAIN)
272+
public void onEvent(final PostMomentEvent event) {
273+
274+
// 清除通知
275+
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
276+
if (nm != null) {
277+
nm.cancel(event.getNotificationId());
278+
}
279+
280+
HintCardDialog dialog = new HintCardDialog(this);
281+
dialog.setEnSureText("立即查看");
282+
dialog.showCloseButton();
283+
284+
// 闪存事件
285+
if (event.getIsSuccess()) {
286+
// 刷新
287+
dialog.setTitle("发布闪存闪存");
288+
dialog.setMessage("是否立即查看?");
289+
dialog.setOnEnSureListener(new IAppDialogClickListener() {
290+
@Override
291+
public void onClick(IAppDialog dialog, int buttonType) {
292+
dialog.dismiss();
293+
// 切换到动态TAB
294+
mViewPager.setCurrentItem(1);
295+
if (!Rx.isEmpty(getSupportFragmentManager().getFragments())) {
296+
try {
297+
SNSFragment fragment = (SNSFragment) getSupportFragmentManager().getFragments().get(mViewPager.getCurrentItem());
298+
fragment.onTabEvent(new TabEvent(1));
299+
} catch (Exception e) {
300+
e.printStackTrace();
301+
}
302+
}
303+
}
304+
});
305+
306+
} else {
307+
dialog.setTitle("发布闪存失败");
308+
dialog.setMessage(event.getMessage());
309+
dialog.setOnEnSureListener(new IAppDialogClickListener() {
310+
@Override
311+
public void onClick(IAppDialog dialog, int buttonType) {
312+
dialog.dismiss();
313+
// 跳转到闪存发布
314+
AppRoute.jumpToPostMoment(getContext(), event.getMomentMetaData());
315+
}
316+
});
317+
}
318+
319+
dialog.show();
320+
}
321+
265322
}

Diff for: app/src/main/java/com/rae/cnblogs/activity/PostMomentActivity.java

+17-10
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void onClick(View v) {
9595

9696
if (mMomentMetaData != null) {
9797
mContentView.setText(mMomentMetaData.content);
98+
mContentView.setSelection(mContentView.length());
9899
ArrayList<String> urls = new ArrayList<>();
99100
for (ImageMetaData image : mMomentMetaData.images) {
100101
urls.add(image.localPath);
@@ -146,6 +147,7 @@ public void onPostMomentFailed(String msg) {
146147

147148
@Override
148149
public void onPostMomentSuccess() {
150+
AppUI.success(this, R.string.tips_post_moment_success);
149151
setResult(RESULT_OK);
150152
finish();
151153
}
@@ -158,16 +160,21 @@ public List<String> getImageUrls() {
158160
@Override
159161
public void onPostMomentInProgress() {
160162
AppUI.dismiss();
161-
DefaultDialog dialog = new DefaultDialog(this);
162-
dialog.setMessage("为了节省您的时间,已为进入后台发送,结果请稍后留意通知栏消息。");
163-
dialog.setCancelButtonVisibility(View.GONE);
164-
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
165-
@Override
166-
public void onDismiss(DialogInterface dialog) {
167-
finish();
168-
}
169-
});
170-
dialog.show();
163+
if (config().getPostMomentInProgressTips()) {
164+
DefaultDialog dialog = new DefaultDialog(this);
165+
dialog.setMessage(getString(R.string.tips_post_moment_progress));
166+
dialog.setCancelButtonVisibility(View.GONE);
167+
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
168+
@Override
169+
public void onDismiss(DialogInterface dialog) {
170+
finish();
171+
}
172+
});
173+
dialog.show();
174+
} else {
175+
AppUI.success(getContext(), R.string.tips_post_moment_progress_simple);
176+
finish();
177+
}
171178
}
172179

173180
@OnClick(R.id.tv_post)

Diff for: app/src/main/java/com/rae/cnblogs/adapter/BaseItemAdapter.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ public abstract class BaseItemAdapter<T, VH extends RecyclerView.ViewHolder> ext
2525
/* 内容为空的时候显示 */
2626
static final int VIEW_TYPE_EMPTY = 3;
2727

28+
public void remove(int position) {
29+
if (mDataList != null) {
30+
mDataList.remove(position);
31+
}
32+
}
33+
2834

2935
public interface onItemClickListener<T> {
3036
void onItemClick(T item);
@@ -71,7 +77,7 @@ public void onClick(View v) {
7177
}
7278

7379

74-
T getDataItem(int position) {
80+
public T getDataItem(int position) {
7581
return Rx.isEmpty(mDataList) ? null : mDataList.get(position % getItemCount());
7682
}
7783

Diff for: app/src/main/java/com/rae/cnblogs/adapter/MomentAdapter.java

+66-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.rae.cnblogs.adapter;
22

33
import android.support.v7.widget.GridLayoutManager;
4-
import android.support.v7.widget.LinearLayoutManager;
54
import android.text.TextUtils;
65
import android.view.LayoutInflater;
76
import android.view.View;
@@ -10,16 +9,39 @@
109
import com.rae.cnblogs.R;
1110
import com.rae.cnblogs.RaeImageLoader;
1211
import com.rae.cnblogs.model.MomentHolder;
12+
import com.rae.cnblogs.sdk.UserProvider;
1313
import com.rae.cnblogs.sdk.bean.MomentBean;
14+
import com.rae.cnblogs.sdk.bean.UserInfoBean;
1415
import com.rae.swift.Rx;
1516

1617
import java.lang.ref.WeakReference;
18+
import java.util.List;
1719

1820
/**
1921
* 闪存
2022
* Created by ChenRui on 2017/10/27 0027 10:49.
2123
*/
2224
public class MomentAdapter extends BaseItemAdapter<MomentBean, MomentHolder> implements View.OnClickListener {
25+
26+
String blogApp;
27+
28+
public MomentAdapter() {
29+
initUserInfo();
30+
}
31+
32+
private void initUserInfo() {
33+
UserInfoBean userInfoBean = UserProvider.getInstance().getLoginUserInfo();
34+
if (userInfoBean != null) {
35+
blogApp = userInfoBean.getBlogApp();
36+
}
37+
}
38+
39+
@Override
40+
public void invalidate(List<MomentBean> data) {
41+
super.invalidate(data);
42+
initUserInfo();
43+
}
44+
2345
@Override
2446
public void onClick(View v) {
2547

@@ -29,44 +51,80 @@ public interface OnBloggerClickListener {
2951
void onBloggerClick(String blogApp);
3052
}
3153

54+
public interface OnDeleteClickListener {
55+
void onDeleteClick(String ingId, int position);
56+
}
57+
3258
private OnBloggerClickListener mOnBloggerClickListener;
59+
private OnDeleteClickListener mOnDeleteClickListener;
3360

3461
public void setOnBloggerClickListener(OnBloggerClickListener onBloggerClickListener) {
3562
mOnBloggerClickListener = onBloggerClickListener;
3663
}
3764

65+
public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
66+
mOnDeleteClickListener = onDeleteClickListener;
67+
}
68+
3869
@Override
3970
public MomentHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) {
4071
return new MomentHolder(inflateView(parent, R.layout.item_moment_list));
4172
}
4273

4374
@Override
4475
public void onBindViewHolder(MomentHolder holder, int position, MomentBean m) {
45-
holder.mRecyclerView.setVisibility(Rx.isEmpty(m.getImageList()) ? View.GONE : View.VISIBLE);
46-
4776
int imageCount = Rx.getCount(m.getImageList());
48-
if (imageCount == 1) {
49-
holder.mRecyclerView.setLayoutManager(new LinearLayoutManager(holder.itemView.getContext()));
50-
} else {
77+
holder.mRecyclerView.setVisibility(imageCount > 1 ? View.GONE : View.VISIBLE);
78+
79+
if (imageCount > 1) {
5180
int spanCount = imageCount == 4 || imageCount == 2 ? 2 : 3;
5281
holder.mRecyclerView.setLayoutManager(new GridLayoutManager(holder.itemView.getContext(), spanCount));
82+
holder.mRecyclerView.setAdapter(new MomentImageAdapter(m.getImageList()));
83+
} else {
84+
holder.mRecyclerView.getLayoutManager().removeAllViews();
85+
holder.mRecyclerView.removeAllViews();
5386
}
5487

55-
holder.mRecyclerView.setAdapter(new MomentImageAdapter(m.getImageList()));
56-
5788

5889
View.OnClickListener onClickListener = TextUtils.isEmpty(m.getBlogApp()) ? null : new ItemBloggerClickListener(m.getBlogApp(), mOnBloggerClickListener);
5990
holder.authorView.setOnClickListener(onClickListener);
6091
holder.avatarView.setOnClickListener(onClickListener);
6192
holder.dateView.setOnClickListener(onClickListener);
6293

94+
holder.thumbView.setVisibility(imageCount == 1 ? View.VISIBLE : View.GONE);
95+
if (imageCount == 1) {
96+
RaeImageLoader.displayHeaderImage(m.getImageList().get(0), holder.thumbView);
97+
}
98+
6399
RaeImageLoader.displayHeaderImage(m.getAvatar(), holder.avatarView);
100+
holder.deleteView.setVisibility(TextUtils.equals(blogApp, m.getBlogApp()) ? View.VISIBLE : View.GONE);
101+
holder.deleteView.setOnClickListener(new ItemDeleteClickListener(m.getId(), position, mOnDeleteClickListener));
64102
holder.authorView.setText(m.getAuthorName());
65103
holder.dateView.setText(m.getPostTime());
66104
holder.summaryView.setText(m.getContent());
67105
holder.commentView.setText(m.getCommentCount());
68106
}
69107

108+
private static class ItemDeleteClickListener implements View.OnClickListener {
109+
110+
private final WeakReference<OnDeleteClickListener> mOnDeleteClickListener;
111+
private final String mId;
112+
private final int mPosition;
113+
114+
public ItemDeleteClickListener(String id, int position, OnDeleteClickListener onDeleteClickListener) {
115+
mId = id;
116+
mPosition = position;
117+
mOnDeleteClickListener = new WeakReference<>(onDeleteClickListener);
118+
}
119+
120+
@Override
121+
public void onClick(View v) {
122+
if (mOnDeleteClickListener.get() != null) {
123+
mOnDeleteClickListener.get().onDeleteClick(mId, mPosition);
124+
}
125+
}
126+
}
127+
70128

71129
private static class ItemBloggerClickListener implements View.OnClickListener {
72130
private String blogApp;

Diff for: app/src/main/java/com/rae/cnblogs/adapter/MomentDetailAdapter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public int getItemCount() {
5454
}
5555

5656
@Override
57-
MomentCommentBean getDataItem(int position) {
57+
public MomentCommentBean getDataItem(int position) {
5858
return super.getDataItem(Math.max(0, position - mViewTypeCount));
5959
}
6060

0 commit comments

Comments
 (0)