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

Commit 8ef2954

Browse files
committed
登录UI
1 parent 37a6703 commit 8ef2954

Some content is hidden

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

42 files changed

+1178
-99
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.rae.cnblogs.sdk.bean.UserInfoBean;
3333
import com.rae.cnblogs.sdk.bean.VersionInfo;
3434
import com.rae.cnblogs.sdk.event.PostMomentEvent;
35+
import com.rae.cnblogs.user.LoginActivity;
3536
import com.rae.cnblogs.widget.ITopScrollable;
3637

3738
import butterknife.BindView;
@@ -59,6 +60,8 @@ protected void onCreate(Bundle savedInstanceState) {
5960
requestPermissions();
6061
// 启动服务
6162
startService(new Intent(this, CnblogsService.class));
63+
64+
startActivity(new Intent(this, LoginActivity.class));
6265
}
6366

6467

module-blog/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<activity
1616
android:name=".HistoryActivity"
1717
android:label="@string/history" />
18+
<activity android:name=".CategoryActivity" />
1819

1920
<service
2021
android:name=".CnblogsService"
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.rae.cnblogs.blog;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.app.Fragment;
6+
7+
import com.alibaba.android.arouter.facade.annotation.Route;
8+
import com.rae.cnblogs.AppRoute;
9+
import com.rae.cnblogs.basic.BasicActivity;
10+
import com.rae.cnblogs.blog.fragment.CategoryFragment;
11+
12+
/**
13+
* Created by rae on 2018/6/29.
14+
* Copyright (c) https://github.com/raedev All rights reserved.
15+
*/
16+
@Route(path = AppRoute.PATH_CATEGORY)
17+
public class CategoryActivity extends BasicActivity {
18+
19+
20+
@Override
21+
protected void onCreate(@Nullable Bundle savedInstanceState) {
22+
super.onCreate(savedInstanceState);
23+
setContentView(R.layout.activity_category);
24+
Fragment fragment = CategoryFragment.newInstance(null);
25+
getSupportFragmentManager().beginTransaction()
26+
.replace(R.id.content, fragment)
27+
.commit();
28+
}
29+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.rae.cnblogs.blog.adapter;
2+
3+
import android.support.annotation.NonNull;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
8+
import com.rae.cnblogs.blog.R;
9+
import com.rae.cnblogs.blog.holder.CategoryHolder;
10+
import com.rae.cnblogs.sdk.bean.CategoryBean;
11+
import com.rae.cnblogs.widget.drag.DragRecylerViewAdapter;
12+
import com.rae.cnblogs.widget.drag.OnStartDragListener;
13+
14+
/**
15+
* Created by rae on 2018/6/29.
16+
* Copyright (c) https://github.com/raedev All rights reserved.
17+
*/
18+
public class CategoryDragAdapter extends DragRecylerViewAdapter<CategoryBean, CategoryHolder> implements View.OnLongClickListener, View.OnClickListener {
19+
20+
// 是否为编辑模式
21+
private boolean mIsEditMode;
22+
23+
private ICategoryItemListener mCategoryItemListener;
24+
25+
26+
public CategoryDragAdapter(OnStartDragListener dragStartListener, @NonNull ICategoryItemListener listener) {
27+
super(dragStartListener);
28+
mCategoryItemListener = listener;
29+
}
30+
31+
@Override
32+
public void onClick(View v) {
33+
int position = (int) v.getTag();
34+
CategoryBean item = getDataItem(position);
35+
mCategoryItemListener.onItemClick(position, item);
36+
}
37+
38+
@Override
39+
public boolean onLongClick(View v) {
40+
int position = (int) v.getTag();
41+
CategoryBean item = getDataItem(position);
42+
mCategoryItemListener.onItemLongClick(position, item);
43+
return false;
44+
}
45+
46+
47+
/**
48+
* 设置是否为编辑模式
49+
*/
50+
public void setIsEditMode(boolean isEditMode) {
51+
mIsEditMode = isEditMode;
52+
}
53+
54+
/**
55+
* 是否为锁定的项目
56+
* 锁定的分类,不能编辑,不能拖动
57+
*
58+
* @param position 索引
59+
*/
60+
private boolean isLockItem(int position) {
61+
return position < 2;
62+
}
63+
64+
@NonNull
65+
@Override
66+
public CategoryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
67+
CategoryHolder holder = new CategoryHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category, parent, false));
68+
holder.itemView.setOnLongClickListener(this);
69+
holder.itemView.setOnClickListener(this);
70+
return holder;
71+
}
72+
73+
@Override
74+
public void onBindViewHolder(@NonNull final CategoryHolder holder, int position) {
75+
super.onBindViewHolder(holder, position);
76+
holder.itemView.setTag(position);
77+
final CategoryBean item = getDataItem(position);
78+
holder.setTitle(item.getName());
79+
holder.setIsEditMode(mIsEditMode && !isLockItem(position));
80+
holder.setOnRemoveClickListener(new View.OnClickListener() {
81+
@Override
82+
public void onClick(View v) {
83+
mCategoryItemListener.onItemRemoveClick(holder.getAdapterPosition(), item);
84+
}
85+
});
86+
}
87+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.rae.cnblogs.blog.adapter;
2+
3+
import com.rae.cnblogs.sdk.bean.CategoryBean;
4+
5+
/**
6+
* 分类单个Item操作监听
7+
* Created by rae on 2018/6/29.
8+
* Copyright (c) https://github.com/raedev All rights reserved.
9+
*/
10+
public interface ICategoryItemListener {
11+
12+
/**
13+
* 当分类移除按钮点击时候触发
14+
*/
15+
void onItemRemoveClick(int position, CategoryBean item);
16+
17+
/**
18+
* 点击触发
19+
*/
20+
void onItemClick(int position, CategoryBean item);
21+
22+
23+
/**
24+
* 长按触发
25+
*/
26+
void onItemLongClick(int position, CategoryBean item);
27+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.rae.cnblogs.blog.category;
2+
3+
import com.rae.cnblogs.basic.IPresenter;
4+
import com.rae.cnblogs.basic.IPresenterView;
5+
import com.rae.cnblogs.sdk.bean.CategoryBean;
6+
7+
import java.util.List;
8+
9+
/**
10+
* 分类
11+
* Created by rae on 2018/6/29.
12+
* Copyright (c) https://github.com/raedev All rights reserved.
13+
*/
14+
public interface CategoryContract {
15+
interface Presenter extends IPresenter {
16+
17+
/**
18+
* 保存分类信息
19+
*
20+
* @param mycategories 我的分类
21+
* @param recommendcategories 推荐分类
22+
*/
23+
void save(List<CategoryBean> mycategories, List<CategoryBean> recommendcategories);
24+
}
25+
26+
interface View extends IPresenterView {
27+
28+
29+
/**
30+
* 加载分类失败
31+
*
32+
* @param message 错误消息
33+
*/
34+
void onLoadCategoryFailed(String message);
35+
36+
/**
37+
* 加载分类数据
38+
*
39+
* @param myCategories 我的分类数据
40+
* @param recommendCategories 推荐的分类数据
41+
*/
42+
void onLoadCategory(List<CategoryBean> myCategories, List<CategoryBean> recommendCategories);
43+
}
44+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.rae.cnblogs.blog.category;
2+
3+
import android.util.Log;
4+
5+
import com.rae.cnblogs.basic.BasicPresenter;
6+
import com.rae.cnblogs.basic.rx.AndroidObservable;
7+
import com.rae.cnblogs.sdk.ApiDefaultObserver;
8+
import com.rae.cnblogs.sdk.CnblogsApiFactory;
9+
import com.rae.cnblogs.sdk.api.ICategoryApi;
10+
import com.rae.cnblogs.sdk.bean.CategoryBean;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
import io.reactivex.Observable;
16+
import io.reactivex.observers.DefaultObserver;
17+
import io.reactivex.schedulers.Schedulers;
18+
19+
/**
20+
* Created by rae on 2018/6/29.
21+
* Copyright (c) https://github.com/raedev All rights reserved.
22+
*/
23+
public class CategoryPresenterImpl extends BasicPresenter<CategoryContract.View> implements CategoryContract.Presenter {
24+
25+
26+
private final ICategoryApi mCategoriesApi;
27+
28+
public CategoryPresenterImpl(CategoryContract.View view) {
29+
super(view);
30+
mCategoriesApi = CnblogsApiFactory.getInstance(getContext()).getCategoriesApi();
31+
}
32+
33+
@Override
34+
protected void onStart() {
35+
AndroidObservable
36+
.create(mCategoriesApi.getCategories())
37+
.with(this)
38+
.subscribe(new ApiDefaultObserver<List<CategoryBean>>() {
39+
@Override
40+
protected void onError(String message) {
41+
getView().onLoadCategoryFailed(message);
42+
}
43+
44+
@Override
45+
protected void accept(List<CategoryBean> categoryBeans) {
46+
// 我的分类
47+
List<CategoryBean> myCategories = new ArrayList<>();
48+
// 推荐的分类
49+
List<CategoryBean> recommendCategories = new ArrayList<>();
50+
for (CategoryBean item : categoryBeans) {
51+
if (item.isHide())
52+
recommendCategories.add(item);
53+
else
54+
myCategories.add(item);
55+
}
56+
57+
getView().onLoadCategory(myCategories, recommendCategories);
58+
}
59+
});
60+
}
61+
62+
@Override
63+
public void save(List<CategoryBean> mycategories, List<CategoryBean> recommendcategories) {
64+
// 异步线程处理
65+
final ThreadEntity entity = new ThreadEntity();
66+
entity.mycategories = mycategories;
67+
entity.recommendcategories = recommendcategories;
68+
69+
AndroidObservable.create(Observable.just(entity))
70+
.subscribeOn(Schedulers.computation())
71+
.observeOn(Schedulers.computation())
72+
.subscribe(new DefaultObserver<ThreadEntity>() {
73+
@Override
74+
public void onNext(ThreadEntity threadEntity) {
75+
Log.i("rae", "当前线程为:" + Thread.currentThread().getId());
76+
threadUpdateCategoies(threadEntity.mycategories, threadEntity.recommendcategories);
77+
}
78+
79+
@Override
80+
public void onError(Throwable e) {
81+
82+
}
83+
84+
@Override
85+
public void onComplete() {
86+
87+
}
88+
});
89+
90+
91+
threadUpdateCategoies(mycategories, recommendcategories);
92+
93+
}
94+
95+
/**
96+
* 线程更新分类
97+
*/
98+
private void threadUpdateCategoies(List<CategoryBean> mycategories, List<CategoryBean> recommendcategories) {
99+
List<CategoryBean> dbEntities = new ArrayList<>();
100+
int size = mycategories.size();
101+
for (int i = 0; i < size; i++) {
102+
CategoryBean item = mycategories.get(i);
103+
item.setHide(false);
104+
item.setIsHide(false);
105+
item.setOrderNo(i);
106+
dbEntities.add(item);
107+
}
108+
109+
size = recommendcategories.size();
110+
for (int i = 0; i < size; i++) {
111+
CategoryBean item = recommendcategories.get(i);
112+
item.setHide(true);
113+
item.setIsHide(true);
114+
item.setOrderNo(i);
115+
dbEntities.add(item);
116+
}
117+
118+
mCategoriesApi.updateCategories(dbEntities);
119+
}
120+
121+
private class ThreadEntity {
122+
List<CategoryBean> mycategories;
123+
List<CategoryBean> recommendcategories;
124+
}
125+
}

0 commit comments

Comments
 (0)