fragments = new ArrayList<>();
18 |
19 | public static void add(@NonNull BaseFragment fragment) {
20 | fragments.add(fragment);
21 | }
22 |
23 | public static void remove(@NonNull BaseFragment fragment) {
24 | fragments.remove(fragment);
25 | }
26 |
27 | @Nullable public static BaseFragment pop() {
28 | int length = fragments.size();
29 | if (length == 0) {
30 | return null;
31 | }
32 | return fragments.remove(length - 1);
33 | }
34 |
35 | @Nullable public static BaseFragment peek() {
36 | int length = fragments.size();
37 | if (length == 0) {
38 | return null;
39 | }
40 | return fragments.get(length - 1);
41 | }
42 |
43 | public static int size() {
44 | return fragments.size();
45 | }
46 |
47 | public static void clear() {
48 | fragments.clear();
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/MainPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter;
2 |
3 | import android.support.v4.app.FragmentManager;
4 | import android.support.v4.app.FragmentPagerAdapter;
5 | import android.view.ViewGroup;
6 |
7 | import cn.xhl.client.manga.presenter.main.CategoryPresenter;
8 | import cn.xhl.client.manga.presenter.main.HomePresenter;
9 | import cn.xhl.client.manga.presenter.main.MinePresenter;
10 | import cn.xhl.client.manga.view.main.fragment.CategoryFragment;
11 | import cn.xhl.client.manga.view.main.fragment.HomeFragment;
12 | import cn.xhl.client.manga.view.main.fragment.MineFragment;
13 |
14 | /**
15 | * @author Mike on 2017/10/10 0010.
16 | *
17 | * MainActivity最外层的适配器
18 | */
19 | public class MainPagerAdapter extends FragmentPagerAdapter {
20 | public MainPagerAdapter(FragmentManager fm) {
21 | super(fm);
22 | }
23 |
24 | @Override
25 | public android.support.v4.app.Fragment getItem(int position) {
26 | switch (position) {
27 | case 0:
28 | HomeFragment homeFragment = new HomeFragment();
29 | new HomePresenter(homeFragment);
30 | return homeFragment;
31 | case 1:
32 | CategoryFragment categoryFragment = new CategoryFragment();
33 | new CategoryPresenter(categoryFragment);
34 | return categoryFragment;
35 | case 2:
36 | MineFragment mineFragment = new MineFragment();
37 | new MinePresenter(mineFragment);
38 | return mineFragment;
39 | default:
40 | return null;
41 | }
42 | }
43 |
44 | @Override
45 | public int getCount() {
46 | return 3;
47 | }
48 |
49 | @Override
50 | public void destroyItem(ViewGroup container, int position, Object object) {
51 | // 每次移除item会产生不可控的bug,比如导致一些fragment被回收不再初始化,同时也会造成Fragment反复初始化带来的资源消耗
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/gallery/FavoriteFolderAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter.gallery;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.chad.library.adapter.base.BaseQuickAdapter;
6 | import com.chad.library.adapter.base.BaseViewHolder;
7 |
8 | import java.util.List;
9 |
10 | import cn.xhl.client.manga.R;
11 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder;
12 |
13 | /**
14 | * Created by xiuhaoli on 2017/11/17.
15 | */
16 |
17 | public class FavoriteFolderAdapter extends BaseQuickAdapter {
18 | public FavoriteFolderAdapter(@Nullable List data) {
19 | super(R.layout.item_favorite_folder, data);
20 | }
21 |
22 | @Override
23 | protected void convert(BaseViewHolder helper, Res_FavoriteFolder.Data item) {
24 | helper.setText(R.id.text_item_favorite_folder, item.getFolder());
25 | helper.setText(R.id.content_item_favorite_folder, String.valueOf(item.getCount()));
26 | helper.setVisible(R.id.encrypt_item_favorite_folder, item.getEncrypt() == 1);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/gallery/FavoriteFolderDialogAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter.gallery;
2 |
3 | import android.support.annotation.Nullable;
4 |
5 | import com.chad.library.adapter.base.BaseQuickAdapter;
6 | import com.chad.library.adapter.base.BaseViewHolder;
7 |
8 | import java.util.List;
9 |
10 | import cn.xhl.client.manga.R;
11 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder;
12 |
13 | /**
14 | * Created by xiuhaoli on 2017/11/18.
15 | */
16 |
17 | public class FavoriteFolderDialogAdapter extends BaseQuickAdapter {
18 | public FavoriteFolderDialogAdapter(@Nullable List data) {
19 | super(R.layout.item_bottomsheet_favorite_folder, data);
20 | }
21 |
22 | @Override
23 | protected void convert(BaseViewHolder helper, Res_FavoriteFolder.Data item) {
24 | helper.setText(R.id.text_item_bottomsheet_favorite_folder, item.getFolder());
25 | helper.setText(R.id.content_item_bottomsheet_favorite_folder, String.valueOf(item.getCount()));
26 | helper.setChecked(R.id.checkbox_item_bottomsheet_favorite_folder, item.isChecked());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/gallery/SummaryAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter.gallery;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.view.View;
5 |
6 | import com.chad.library.adapter.base.BaseQuickAdapter;
7 | import com.chad.library.adapter.base.BaseViewHolder;
8 |
9 | import java.util.List;
10 |
11 | import cn.xhl.client.manga.R;
12 | import cn.xhl.client.manga.custom.TextImageSpan;
13 |
14 | /**
15 | *
16 | * author : xiuhaoli
17 | * e-mail : xiuhaoli@outlook.com
18 | * time : 2018/01/19
19 | * version: 1.0
20 | *
21 | */
22 | public class SummaryAdapter extends BaseQuickAdapter {
24 | public SummaryAdapter(@Nullable List data) {
25 | super(R.layout.item_summary, data);
26 | }
27 |
28 | @Override
29 | protected void convert(SummaryViewHolder helper, SummaryItem item) {
30 | helper.setImageSpanLeft(R.id.imagespan_item_summary,item.getImgRes());
31 | helper.setText(R.id.imagespan_item_summary, item.getLeft());
32 | helper.setText(R.id.follow_item_summary, item.getRight());
33 | helper.addOnClickListener(R.id.follow_item_summary);
34 | }
35 |
36 | class SummaryViewHolder extends BaseViewHolder {
37 |
38 | private SummaryViewHolder(View view) {
39 | super(view);
40 | }
41 |
42 | private void setImageSpanLeft(int resId, int imgId) {
43 | TextImageSpan imageSpan = getView(resId);
44 | imageSpan.setLeftImageSpan(imgId);
45 | }
46 | }
47 |
48 | public static class SummaryItem {
49 | private int imgRes;
50 | private String left;
51 | private String right;
52 |
53 | public int getImgRes() {
54 | return imgRes;
55 | }
56 |
57 | public void setImgRes(int imgRes) {
58 | this.imgRes = imgRes;
59 | }
60 |
61 | public String getLeft() {
62 | return left;
63 | }
64 |
65 | public void setLeft(String left) {
66 | this.left = left;
67 | }
68 |
69 | public String getRight() {
70 | return right;
71 | }
72 |
73 | public void setRight(String right) {
74 | this.right = right;
75 | }
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/main/CategoryAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter.main;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.view.View;
5 |
6 | import com.chad.library.adapter.base.BaseQuickAdapter;
7 | import com.chad.library.adapter.base.BaseViewHolder;
8 | import com.facebook.drawee.view.SimpleDraweeView;
9 |
10 | import java.util.List;
11 |
12 | import cn.xhl.client.manga.R;
13 |
14 | /**
15 | * 分类页的适配器
16 | *
17 | * @author Mike on 2017/10/25 0025.
18 | */
19 | public class CategoryAdapter extends BaseQuickAdapter {
20 |
21 | public CategoryAdapter(@Nullable List data) {
22 | super(R.layout.item_category, data);
23 | }
24 |
25 | @Override
26 | protected void convert(CategoryViewHolder helper, CategoryItem item) {
27 | helper.setText(R.id.text_item_category, item.getText());
28 | helper.setImgRes(R.id.img_item_category, item.getImgId());
29 | }
30 |
31 | class CategoryViewHolder extends BaseViewHolder {
32 |
33 | private CategoryViewHolder(View view) {
34 | super(view);
35 | }
36 |
37 | private void setImgRes(int resId, int imgId) {
38 | SimpleDraweeView simpleDraweeView = getView(resId);
39 | simpleDraweeView.setActualImageResource(imgId);
40 | }
41 | }
42 |
43 | public static class CategoryItem {
44 | private int imgId;
45 | private String text;
46 |
47 | public CategoryItem() {
48 | }
49 |
50 | public CategoryItem(int imgId, String text) {
51 | this.imgId = imgId;
52 | this.text = text;
53 | }
54 |
55 | public int getImgId() {
56 | return imgId;
57 | }
58 |
59 | public void setImgId(int imgId) {
60 | this.imgId = imgId;
61 | }
62 |
63 | public String getText() {
64 | return text;
65 | }
66 |
67 | public void setText(String text) {
68 | this.text = text;
69 | }
70 |
71 | @Override
72 | public String toString() {
73 | return "CategoryItem{" +
74 | "imgId=" + imgId +
75 | ", text=" + text +
76 | '}';
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/adapter/main/FilterAdapter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.adapter.main;
2 |
3 | import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
4 | import com.chad.library.adapter.base.BaseQuickAdapter;
5 | import com.chad.library.adapter.base.BaseViewHolder;
6 |
7 | import java.util.List;
8 |
9 | import cn.xhl.client.manga.R;
10 |
11 | /**
12 | *
13 | * author : xiuhaoli
14 | * e-mail : xiuhaoli@outlook.com
15 | * time : 2018/01/13
16 | * version: 1.0
17 | *
18 | */
19 | public class FilterAdapter extends BaseQuickAdapter {
20 |
21 | public FilterAdapter(List data) {
22 | super(R.layout.item_filter, data);
23 | }
24 |
25 | @Override
26 | protected void convert(BaseViewHolder helper, FilterItem item) {
27 | helper.setChecked(R.id.checkbox_item_filter, item.isChecked());
28 | helper.setText(R.id.checkbox_item_filter, item.getText());
29 | }
30 |
31 | public static class FilterItem {
32 | private boolean checked;
33 | private String text;
34 |
35 | public boolean isChecked() {
36 | return checked;
37 | }
38 |
39 | public void setChecked(boolean checked) {
40 | this.checked = checked;
41 | }
42 |
43 | public String getText() {
44 | return text;
45 | }
46 |
47 | public void setText(String text) {
48 | this.text = text;
49 | }
50 |
51 | }
52 | }
53 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/base/BaseFragment.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.base;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.support.annotation.Nullable;
7 | import android.support.v4.app.Fragment;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 |
12 |
13 | /**
14 | * @author Mike on 2017/9/22 0022.
15 | */
16 | public abstract class BaseFragment extends Fragment {
17 | protected BaseActivity mActivity;
18 | protected BackHandledInterface backHandledInterface;
19 |
20 | /**
21 | * 获得全局的,防止使用getActivity()为空 * @param context
22 | */
23 | @Override
24 | public void onAttach(Context context) {
25 | super.onAttach(context);
26 | Activity activity = (Activity) context;
27 | mActivity = (BaseActivity) activity;
28 | if (mActivity instanceof BackHandledInterface) {
29 | backHandledInterface = (BackHandledInterface) mActivity;
30 | }
31 | }
32 |
33 | @Nullable
34 | @Override
35 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
36 | View view = inflater.inflate(layoutId(), container, false);
37 | initView(view, savedInstanceState);
38 | return view;
39 | }
40 |
41 | @Override
42 | public void onResume() {
43 | super.onResume();
44 | if (backHandledInterface != null) {
45 | backHandledInterface.setSelectedFragment(this);
46 | }
47 | }
48 |
49 | /**
50 | * 获取fragment的layout
51 | */
52 | protected abstract int layoutId();
53 |
54 | /**
55 | * 该抽象方法就是 初始化view * @param view * @param savedInstanceState
56 | */
57 | protected abstract void initView(View view, Bundle savedInstanceState);
58 |
59 | public void onBackPressed() {
60 | mActivity.finish();
61 | }
62 |
63 |
64 | /**
65 | * 如果需要Fragment的返回监听,就在对应的activity中实现该接口
66 | *
67 | * 实现该接口后,就可以在fragment里面重写onBackPressed方法
68 | */
69 | public interface BackHandledInterface {
70 | void setSelectedFragment(BaseFragment selectedFragment);
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/base/BaseObserver.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.base;
2 |
3 |
4 | import cn.xhl.client.manga.config.HttpRespCode;
5 | import cn.xhl.client.manga.model.bean.response.BaseResponse;
6 | import cn.xhl.client.manga.utils.LogUtil;
7 | import cn.xhl.client.manga.utils.StringUtil;
8 | import io.reactivex.annotations.NonNull;
9 | import io.reactivex.observers.DisposableObserver;
10 |
11 | /**
12 | * @author Mike on 2017/9/18 0018.
13 | */
14 | public abstract class BaseObserver extends DisposableObserver> {
15 | private static final String TAG = "BaseObserver";
16 |
17 | // @Override
18 | // public void onSubscribe(@NonNull Disposable d) {
19 | // LogUtil.i(TAG, "onSubscribe: subscribe");
20 | // }
21 |
22 | @Override
23 | public void onNext(@NonNull BaseResponse tBaseResponse) {
24 | LogUtil.e(TAG, tBaseResponse.toString());
25 | long code = tBaseResponse.getCode();
26 | String msg = tBaseResponse.getMsg();
27 | if (code == HttpRespCode.SUCCESS_CODE) {
28 | T t = tBaseResponse.getData();
29 | onHandleSuccess(t);
30 | } else {
31 | if (!StringUtil.isEmpty(msg)) {
32 | msg = StringUtil.utf_8(msg);
33 | }
34 | onHandleError(code, msg);
35 | }
36 | }
37 |
38 | @Override
39 | public void onError(@NonNull Throwable e) {
40 | // LogUtil.e(TAG, e.getCause().toString());
41 | onHandleError(HttpRespCode.SERVER_ERR, "server error");
42 | }
43 |
44 | @Override
45 | public void onComplete() {
46 | // LogUtil.e(TAG, "onComplete: ok");
47 | }
48 |
49 | protected abstract void onHandleSuccess(T t);
50 |
51 | protected abstract void onHandleError(long code, String msg);
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/base/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.base;
2 |
3 | /**
4 | * @author Mike on 2017/9/22 0022.
5 | */
6 |
7 | public interface BasePresenter {
8 | void subscribe();
9 | void unSubscribe();
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/base/BaseView.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.base;
2 |
3 | /**
4 | * @author Mike on 2017/9/22 0022.
5 | */
6 |
7 | public interface BaseView {
8 | void setPresenter(T presenter);
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/config/HttpRespCode.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.config;
2 |
3 | /**
4 | * @author Mike on 2017/4/29 0029.
5 | *
6 | * 网络请求的返回码
7 | */
8 | public interface HttpRespCode {
9 | long SUCCESS_CODE = 200L;
10 | long CHECK_SIGN_FAILED = 406L;
11 | long TOKEN_TIMEOUT = 407L;
12 | long TOKEN_ERR = 408L;
13 | long UID_ERR = 409L;
14 | long PAGE_UNAVAILABLE = 410L;
15 | long HAVE_BEEN_REGISTERED = 411L;
16 | long ACCOUNT_ERR = 412L;
17 | long PASSWORD_ERR = 413L;
18 | long HYPELINK_ERR = 416L;
19 | long VERIFY_CODE_ERR = 418L;
20 | long SERVER_ERR = 500L;
21 | long REGISTER_FAILED = 511L;
22 | long RESET_FAILED = 514L;
23 | long OBTAIN_DATA_FAILED = 516L;
24 | long REFRESH_TOKEN_FAILED = 521L;
25 | long REFRESH_TOKEN_TIMEOUT_FAILED = 522L;
26 | long REFRESH_SALT_FAILED = 523L;
27 | long OBTAIN_VERIFY_CODE_FAILED = 524L;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/SplashContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.auth.Res_RefreshToken;
6 |
7 | /**
8 | * @author Mike on 2017/9/28 0028.
9 | *
10 | * Splash 协议
11 | */
12 | public interface SplashContract {
13 |
14 | interface View extends BaseView {
15 |
16 | /**
17 | * 通过SharedPreferences获取用户信息,等初始化操作
18 | */
19 | void initUserInfo();
20 |
21 | /**
22 | * expire_time没过期且token等信息不为空,跳转主界面
23 | */
24 | void change2MainActivity();
25 |
26 | /**
27 | * 当本地存储的token、salt、uid为空或者expire_time过期了,就会调用此方法跳转登录
28 | */
29 | void change2AuthActivity();
30 |
31 | /**
32 | * 处理刷新token接口返回的数据
33 | *
34 | * @param res_refreshToken 返回信息实体类
35 | */
36 | void handleUserInfo(Res_RefreshToken res_refreshToken);
37 | }
38 |
39 | interface Presenter extends BasePresenter {
40 |
41 | /**
42 | * 校验登录信息是否完备
43 | *
44 | * @param token
45 | * @param uid
46 | * @param salt
47 | * @param expire_time
48 | * @return
49 | */
50 | boolean isUserInfoAvailable(String token, int uid, String salt, int expire_time);
51 |
52 | /**
53 | * 刷新登录信息
54 | *
55 | * @param token
56 | * @param uid
57 | * @param salt
58 | * @param expire_time
59 | */
60 | void refreshToken(String token, int uid, String salt, int expire_time);
61 |
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/auth/LoginContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.auth;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.auth.Res_Login;
6 |
7 | /**
8 | * @author Mike on 2017/9/22 0022.
9 | *
10 | * login 协议
11 | */
12 | public interface LoginContract {
13 | interface View extends BaseView {
14 | void createView();
15 |
16 | void showLoading();
17 |
18 | void hideLoading();
19 |
20 | void showTipMsg(String msg);
21 |
22 | void change2MainActivity();
23 |
24 | void change2Register();
25 |
26 | void change2Reset();
27 |
28 | void hideKeyboard();
29 |
30 | void saveLoginInfo(Res_Login res_login);
31 | }
32 |
33 | interface Presenter extends BasePresenter {
34 |
35 | boolean isEmailValid(String email);
36 |
37 | boolean isPasswordValid(String password);
38 |
39 | void activateLoginTask(String email, String password);
40 |
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/auth/RegisterContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.auth;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 |
6 | /**
7 | * @author Mike on 2017/9/29 0029.
8 | */
9 |
10 | public interface RegisterContract {
11 | interface View extends BaseView {
12 | void createView();
13 |
14 | void showLoading();
15 |
16 | void hideLoading();
17 |
18 | void showTipMsg(String msg);
19 |
20 | void back2Login();
21 |
22 | void countDown();
23 |
24 | void hideKeyboard();
25 |
26 | }
27 |
28 | interface Presenter extends BasePresenter {
29 | @Deprecated
30 | void obtainVerify(String email);
31 |
32 | boolean isEmailValid(String email);
33 |
34 | boolean isPasswordValid(String password);
35 |
36 | void submit(String email, String password, String verify);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/auth/ResetPasswdContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.auth;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 |
6 | /**
7 | * @author Mike on 2017/9/29 0029.
8 | *
9 | * 重置密码页面协议
10 | */
11 | public interface ResetPasswdContract {
12 |
13 | interface View extends BaseView {
14 | void createView();
15 |
16 | void showLoading();
17 |
18 | void hideLoading();
19 |
20 | void showTipMsg(String msg);
21 |
22 | void back2Login();
23 |
24 | void countDown();
25 |
26 | void hideKeyboard();
27 | }
28 |
29 | interface Presenter extends BasePresenter {
30 | void obtainVerify(String email);
31 |
32 | boolean isEmailValid(String email);
33 |
34 | boolean isPasswordValid(String password);
35 |
36 | void submit(String email, String password, String verify);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/gallery/CommentContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.gallery;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_CommentList;
6 |
7 | /**
8 | *
9 | * author : xiuhaoli
10 | * e-mail : xiuhaoli@outlook.com
11 | * time : 2017/12/18
12 | * version: 1.0
13 | *
14 | */
15 | public interface CommentContract {
16 | interface View extends BaseView {
17 | void showToast(String msg);
18 |
19 | void showLoading();
20 |
21 | void hideLoading();
22 |
23 | void failLoadMore();
24 |
25 | void noMoreToLoad();
26 |
27 | void showReTry();
28 |
29 | void hideReTry();
30 |
31 | void notifyAdapter(Res_CommentList res_commentList);
32 |
33 | void notifyAddSingleComment(Res_CommentList.CommentEntity commentEntity);
34 |
35 | void notifyDeleteComment(int position);
36 |
37 | void showNoData();
38 |
39 | void hideNoData();
40 |
41 | void showEmptyLoading();
42 |
43 | void hideEmptyLoading();
44 |
45 | void clearEditText();
46 | }
47 |
48 | interface Presenter extends BasePresenter {
49 | void listComment(int gid, boolean isLoadMore);
50 |
51 | void comment(int gid, String comment);
52 |
53 | /**
54 | * 删除评论
55 | *
56 | * @param id 这是评论在数据库中的主键id
57 | * @param gid galleryId
58 | * @param position 删除的item所在的位置索引
59 | */
60 | void deleteComment(int id, int gid, int position);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/gallery/ConcreteMangaContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.gallery;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder;
6 |
7 | /**
8 | * @author lixiuhao on 2017/10/30 0030.
9 | */
10 | public interface ConcreteMangaContract {
11 | interface View extends BaseView {
12 |
13 | void showReadLoading();
14 |
15 | void hideReadLoading();
16 |
17 | void showLoading();
18 |
19 | void hideLoading();
20 |
21 | void showToastMsg(String msg);
22 |
23 | void changeStarNumber(int delta);
24 |
25 | void plusViewedNumber();
26 |
27 | void failLoadMore();
28 |
29 | void noMoreToLoad();
30 |
31 | void showReTry();
32 |
33 | void hideReTry();
34 |
35 | void notifyAdapterFolder(Res_FavoriteFolder favoriteFolder);
36 |
37 | void showNoData();
38 |
39 | void hideNoData();
40 |
41 | void showEmptyLoading();
42 |
43 | void hideEmptyLoading();
44 |
45 | void createBottomSheet();
46 |
47 | /**
48 | * 在BottomSheet这个dialog上创建一个浮在底部的button
49 | */
50 | void createBottomSheetCheckButton();
51 |
52 | void showBottomSheet();
53 |
54 | void dismissBottomSheet();
55 | }
56 |
57 | interface Presenter extends BasePresenter {
58 |
59 | /**
60 | * 初始化请求folder列表的相关参数
61 | */
62 | void initReqListData();
63 |
64 | void favorite(int galleryId, String folder);
65 |
66 | void viewed(int galleryId);
67 |
68 | void listFolder(boolean isLoadMore, int id);
69 |
70 | void sort(Res_FavoriteFolder favoriteFolder);
71 |
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/gallery/FavoriteContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.gallery;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder;
6 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList;
7 |
8 | /**
9 | * Created by xiuhaoli on 2017/11/17.
10 | */
11 |
12 | public interface FavoriteContract {
13 | interface View extends BaseView {
14 |
15 | void showLoading();
16 |
17 | void hideLoading();
18 |
19 | void showTipMsg(String msg);
20 |
21 | void failLoadMore();
22 |
23 | void noMoreToLoad();
24 |
25 | void showReTry();
26 |
27 | void hideReTry();
28 |
29 | void notifyAdapterFolder(Res_FavoriteFolder favoriteFolder);
30 |
31 | void showNoData();
32 |
33 | void hideNoData();
34 |
35 | void showEmptyLoading();
36 |
37 | void hideEmptyLoading();
38 |
39 | void notifyAdapter2Remove();
40 |
41 | void notifyAdapter2Rename(String newFolder);
42 |
43 | void notifyAdapter2Encrypt();
44 | }
45 |
46 | interface Presenter extends BasePresenter {
47 | /**
48 | * 请求文件夹
49 | *
50 | * @param isLoadMore 是否是在加载更多, 该值用于判断是否展示加载圈
51 | */
52 | void listFolder(boolean isLoadMore);
53 |
54 | void renameFolder(String oldName, String newName);
55 |
56 | void deleteFolder(String folder);
57 |
58 | void encryptFolder(String folder);
59 |
60 | void listOthersFolder(boolean isLoadMore, int uid);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/gallery/SummaryContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.gallery;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList;
6 |
7 | /**
8 | *
9 | * author : xiuhaoli
10 | * e-mail : xiuhaoli@outlook.com
11 | * time : 2017/12/19
12 | * version: 1.0
13 | *
14 | */
15 | public interface SummaryContract {
16 | interface View extends BaseView {
17 | void showLoading();
18 |
19 | void hideLoading();
20 |
21 | void showToastMsg(String msg);
22 |
23 | void changeArtistFollowButton(boolean isFollowed);
24 |
25 | void changeUploaderFollowButton(boolean isFollowed);
26 |
27 | void notifyActivity();
28 | }
29 |
30 | interface Presenter extends BasePresenter {
31 | void parsePage(Res_GalleryList.GalleryEntity galleryEntity);
32 |
33 | String getShowKey();
34 |
35 | String getImgKey();
36 |
37 | String getFirstImg();
38 |
39 | void attendArtist(String artist);
40 |
41 | void attendUploader(String uploader);
42 |
43 | void isFollowed(String artist, String uploader);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/main/CategoryContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.main;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 |
6 | /**
7 | * @author Mike on 2017/10/9 0009.
8 | *
9 | * 分类页的协议
10 | */
11 | public interface CategoryContract {
12 | interface View extends BaseView {
13 | void initRecyclerData();
14 | }
15 |
16 | interface Presenter extends BasePresenter {
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/main/HomeContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.main;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 |
6 | /**
7 | * @author Mike on 2017/10/9 0009.
8 | *
9 | * 主页协议
10 | */
11 | public interface HomeContract {
12 | interface View extends BaseView {
13 |
14 | void showLoading();
15 |
16 | void hideLoading();
17 |
18 | void showTipMsg(String msg);
19 |
20 | void hideKeyboard();
21 |
22 | void showSearchDialog();
23 | }
24 |
25 | interface Presenter extends BasePresenter {
26 | void search();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/main/LatestContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.main;
2 |
3 |
4 | import cn.xhl.client.manga.base.BasePresenter;
5 | import cn.xhl.client.manga.base.BaseView;
6 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList;
7 |
8 | /**
9 | * @author Mike on 2017/10/23 0023.
10 | */
11 |
12 | public interface LatestContract {
13 | interface View extends BaseView {
14 |
15 | void showLoading();
16 |
17 | void hideLoading();
18 |
19 | void showTipMsg(String msg);
20 |
21 | void failLoadMore();
22 |
23 | void noMoreToLoad();
24 |
25 | void showReTry();
26 |
27 | void hideReTry();
28 |
29 | void notifyAdapter(Res_GalleryList galleryList);
30 |
31 | void showNoData();
32 |
33 | void hideNoData();
34 |
35 | void showEmptyLoading();
36 |
37 | void hideEmptyLoading();
38 |
39 | void filterItem(Res_GalleryList galleryList);
40 | }
41 |
42 | interface Presenter extends BasePresenter {
43 | /**
44 | * 请求列表
45 | *
46 | * @param category 书籍类型
47 | * @param type 请求类型
48 | * @param isLoadMore 是否是在加载更多, 该值用于判断是否展示加载圈
49 | */
50 | void list(String category, String type, boolean isLoadMore);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/main/MineContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.main;
2 |
3 | import cn.xhl.client.manga.base.BasePresenter;
4 | import cn.xhl.client.manga.base.BaseView;
5 |
6 | /**
7 | * 我的协议
8 | *
9 | *
10 | * @author Mike on 2017/10/9 0009.
11 | */
12 | public interface MineContract {
13 | interface View extends BaseView {
14 | void initAdapter();
15 |
16 | void showLoading();
17 |
18 | void hideLoading();
19 |
20 | void showTipMsg(String msg);
21 |
22 | void changeThemeMode(boolean isNightMode);
23 |
24 | void notifyUI2ChangeUsername(String username);
25 |
26 | void notifyUI2ChangeHeader(String url);
27 | }
28 |
29 | interface Presenter extends BasePresenter {
30 |
31 | void modifyUsername(String newName);
32 |
33 | void modifyProfileHeader(String url);
34 |
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/contract/main/SettingContract.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.contract.main;
2 |
3 | import java.io.File;
4 |
5 | import cn.xhl.client.manga.base.BasePresenter;
6 | import cn.xhl.client.manga.base.BaseView;
7 | import cn.xhl.client.manga.model.bean.response.user.Res_CheckUpdate;
8 |
9 | /**
10 | *
11 | * author : xiuhaoli
12 | * e-mail : xiuhaoli@outlook.com
13 | * time : 2018/01/04
14 | * version: 1.0
15 | *
16 | */
17 | public interface SettingContract {
18 | interface View extends BaseView {
19 |
20 | void showLoading();
21 |
22 | void hideLoading();
23 |
24 | void showTipMsg(String msg);
25 |
26 | void createClearCachePromptDialog();
27 |
28 | void createLogoutPromptDialog();
29 |
30 | /**
31 | * 更新缓存item
32 | *
33 | * @param cacheSize 清除缓存后的大小
34 | */
35 | void notifyAdapterForCacheItem(String cacheSize);
36 |
37 | void showNewVersionPrompt(Res_CheckUpdate res_checkUpdate);
38 |
39 | void install(File apkPath);
40 | }
41 |
42 | interface Presenter extends BasePresenter {
43 | String cacheSize();
44 |
45 | void clearCache();
46 |
47 | void checkNewVersion(int versionCode, String versionName);
48 |
49 | void startDownloadApk(String url);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/CommentItemDecoration.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.graphics.drawable.Drawable;
6 | import android.support.v7.widget.DividerItemDecoration;
7 | import android.support.v7.widget.RecyclerView;
8 | import android.view.View;
9 | import android.widget.LinearLayout;
10 |
11 | import cn.xhl.client.manga.R;
12 | import cn.xhl.client.manga.utils.DpUtil;
13 |
14 | /**
15 | * Created by xiuhaoli on 2017/11/18.
16 | */
17 |
18 | public class CommentItemDecoration extends DividerItemDecoration {
19 | private Context mContext;
20 |
21 | public CommentItemDecoration(Context context) {
22 | super(context, LinearLayout.VERTICAL);
23 | this.mContext = context;
24 | // the default drawable will lead to draw a white line, so I should change the color as same as background
25 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider);
26 | if (drawable != null) {
27 | setDrawable(drawable);
28 | }
29 | }
30 |
31 | @Override
32 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
33 | int position = parent.getChildAdapterPosition(view);
34 | if (position == 0) {
35 | outRect.top = DpUtil.dp2Px(mContext, 5);
36 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
37 | } else {
38 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
39 | }
40 | }
41 |
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/DefaultLoading.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.support.annotation.NonNull;
7 | import android.widget.TextView;
8 |
9 | import cn.xhl.client.manga.R;
10 |
11 |
12 | /**
13 | * @author lixiuhao on 2017/5/13 0013.
14 | * 自定义加载圈
15 | */
16 |
17 | public class DefaultLoading extends Dialog {
18 | private TextView tv;
19 |
20 | public DefaultLoading(@NonNull Context context) {
21 | super(context, R.style.customDialogStyle);
22 | }
23 |
24 | @Override
25 | protected void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 | setContentView(R.layout.progressbar_default);
28 |
29 | tv = findViewById(R.id.tv_progressbar_default);
30 | // 默认点击外界不被取消
31 | this.setCanceledOnTouchOutside(false);
32 | }
33 |
34 | public void setText(String str) {
35 | tv.setText(str);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/DownloadProgressbar.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.support.annotation.NonNull;
7 |
8 | import cn.xhl.client.manga.R;
9 |
10 | /**
11 | *
12 | * author : xiuhaoli
13 | * e-mail : xiuhaoli@outlook.com
14 | * time : 2018/01/09
15 | * version: 1.0
16 | *
17 | */
18 | public class DownloadProgressbar extends Dialog {
19 | public DownloadProgressbar(@NonNull Context context) {
20 | this(context, 0);
21 | }
22 |
23 | public DownloadProgressbar(@NonNull Context context, int themeResId) {
24 | super(context, themeResId);
25 | }
26 |
27 | @Override
28 | protected void onCreate(Bundle savedInstanceState) {
29 | super.onCreate(savedInstanceState);
30 | setContentView(R.layout.dialog_progressbar);
31 |
32 | setCanceledOnTouchOutside(false);
33 | setCancelable(false);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/FavoriteFolderItemDecoration.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.content.Context;
4 | import android.graphics.Canvas;
5 | import android.graphics.Rect;
6 | import android.graphics.drawable.Drawable;
7 | import android.support.v7.widget.DividerItemDecoration;
8 | import android.support.v7.widget.RecyclerView;
9 | import android.view.View;
10 | import android.widget.LinearLayout;
11 |
12 | import cn.xhl.client.manga.R;
13 | import cn.xhl.client.manga.utils.DpUtil;
14 |
15 | /**
16 | * Created by xiuhaoli on 2017/11/18.
17 | */
18 |
19 | public class FavoriteFolderItemDecoration extends DividerItemDecoration {
20 | private Context mContext;
21 |
22 | public FavoriteFolderItemDecoration(Context context) {
23 | super(context, LinearLayout.VERTICAL);
24 | this.mContext = context;
25 | // the default drawable will lead to draw a white line, so I should change the color as same as background
26 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider);
27 | if (drawable != null) {
28 | setDrawable(drawable);
29 | }
30 | }
31 |
32 | @Override
33 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
34 | int position = parent.getChildAdapterPosition(view);
35 | if (position == 0) {
36 | outRect.top = DpUtil.dp2Px(mContext, 20);
37 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
38 | } else {
39 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
40 | }
41 | }
42 |
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/MineItemDecoration.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.graphics.drawable.Drawable;
6 | import android.support.v7.widget.DividerItemDecoration;
7 | import android.support.v7.widget.RecyclerView;
8 | import android.view.View;
9 | import android.widget.LinearLayout;
10 |
11 | import cn.xhl.client.manga.R;
12 | import cn.xhl.client.manga.utils.DpUtil;
13 |
14 |
15 | /**
16 | * Decoration for MineFragment RecyclerView
17 | *
18 | * @author Mike on 2017/4/15 0015.
19 | */
20 | public class MineItemDecoration extends DividerItemDecoration {
21 | private Context mContext;
22 | private int size;
23 |
24 | public MineItemDecoration(Context context, int size) {
25 | super(context, LinearLayout.VERTICAL);
26 | this.mContext = context;
27 | this.size = size;
28 | // the default drawable will lead to draw a white line, so I should change the color as same as background
29 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider);
30 | if (drawable != null) {
31 | setDrawable(drawable);
32 | }
33 | }
34 |
35 | @Override
36 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
37 | int position = parent.getChildAdapterPosition(view);
38 | if (position == 0) {
39 | outRect.top = DpUtil.dp2Px(mContext, 5);
40 | outRect.bottom = DpUtil.dp2Px(mContext, 10);
41 | } else if (position == size - 1) {
42 | outRect.bottom = 0;
43 | } else {
44 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
45 | }
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/SettingItemDecoration.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.custom;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import android.graphics.drawable.Drawable;
6 | import android.support.v7.widget.DividerItemDecoration;
7 | import android.support.v7.widget.RecyclerView;
8 | import android.view.View;
9 | import android.widget.LinearLayout;
10 |
11 | import cn.xhl.client.manga.R;
12 | import cn.xhl.client.manga.utils.DpUtil;
13 |
14 |
15 | /**
16 | * Decoration for MineFragment RecyclerView
17 | *
18 | * @author Mike on 2017/4/15 0015.
19 | */
20 | public class SettingItemDecoration extends DividerItemDecoration {
21 | private Context mContext;
22 | private int size;
23 |
24 | public SettingItemDecoration(Context context, int size) {
25 | super(context, LinearLayout.VERTICAL);
26 | this.mContext = context;
27 | this.size = size;
28 | // the default drawable will lead to draw a white line, so I should change the color as same as background
29 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider);
30 | if (drawable != null) {
31 | setDrawable(drawable);
32 | }
33 | }
34 |
35 | @Override
36 | public void getItemOffsets(Rect outRect, View view,
37 | RecyclerView parent, RecyclerView.State state) {
38 | int position = parent.getChildAdapterPosition(view);
39 | if (position == 0) {
40 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
41 | outRect.top = DpUtil.dp2Px(mContext, 20);
42 | } else if (position == size - 1) {
43 | outRect.top = DpUtil.dp2Px(mContext, 10);
44 | } else {
45 | outRect.bottom = DpUtil.dp2Px(mContext, 1);
46 | }
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/custom/zoomable/ZoomableDraweeViewSupport.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file provided by Facebook is for non-commercial testing and evaluation
3 | * purposes only. Facebook reserves all rights not expressly granted.
4 | *
5 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
8 | * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
9 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11 | */
12 |
13 | package cn.xhl.client.manga.custom.zoomable;
14 |
15 | import android.content.Context;
16 | import android.util.AttributeSet;
17 |
18 | import com.facebook.drawee.generic.GenericDraweeHierarchy;
19 |
20 | /**
21 | * DraweeView that has zoomable capabilities.
22 | *
23 | * Once the image loads, pinch-to-zoom and translation gestures are enabled.
24 | */
25 | public class ZoomableDraweeViewSupport extends ZoomableDraweeView {
26 |
27 | private static final Class> TAG = ZoomableDraweeViewSupport.class;
28 |
29 | public ZoomableDraweeViewSupport(Context context, GenericDraweeHierarchy hierarchy) {
30 | super(context, hierarchy);
31 | }
32 |
33 | public ZoomableDraweeViewSupport(Context context) {
34 | super(context);
35 | }
36 |
37 | public ZoomableDraweeViewSupport(Context context, AttributeSet attrs) {
38 | super(context, attrs);
39 | }
40 |
41 | public ZoomableDraweeViewSupport(Context context, AttributeSet attrs, int defStyle) {
42 | super(context, attrs, defStyle);
43 | }
44 |
45 | @Override
46 | protected Class> getLogTag() {
47 | return TAG;
48 | }
49 |
50 | @Override
51 | protected ZoomableController createZoomableController() {
52 | return AnimatedZoomableControllerSupport.newInstance();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/listener/GalleryListScrollListener.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.listener;
2 |
3 | import android.support.v7.widget.LinearLayoutManager;
4 | import android.support.v7.widget.RecyclerView;
5 |
6 |
7 | /**
8 | * 自定义滑动监听,用于清除RecyclerView的不可见图片
9 | *
10 | * Created by xiuhaoli on 2017/11/13.
11 | */
12 | public abstract class GalleryListScrollListener extends RecyclerView.OnScrollListener {
13 |
14 | @Override
15 | public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
16 | if (dx == 0 && dy == 0) {
17 | return;
18 | }
19 | LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
20 | int firstVisible = linearLayoutManager.findFirstVisibleItemPosition();
21 | int lastVisible = linearLayoutManager.findLastVisibleItemPosition();
22 | if (dy > 0) {
23 | onScrolledUp(firstVisible, lastVisible);
24 | } else {
25 | onScrolledDown(firstVisible, lastVisible);
26 | }
27 | }
28 |
29 | @Override
30 | public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
31 | super.onScrollStateChanged(recyclerView, newState);
32 | }
33 |
34 | public abstract void onScrolledUp(int firstVisible, int lastVisible);
35 |
36 | public abstract void onScrolledDown(int firstVisible, int lastVisible);
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/api/ApiEh.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.api;
2 |
3 | import cn.xhl.client.manga.config.IConstants;
4 | import cn.xhl.client.manga.model.bean.response.gallery.Res_BrowseImage;
5 | import io.reactivex.Observable;
6 | import okhttp3.RequestBody;
7 | import okhttp3.ResponseBody;
8 | import retrofit2.http.Body;
9 | import retrofit2.http.GET;
10 | import retrofit2.http.Headers;
11 | import retrofit2.http.POST;
12 | import retrofit2.http.Url;
13 |
14 | /**
15 | * Eh的相关接口放这儿
16 | *
17 | * Created by xiuhaoli on 2017/12/4.
18 | */
19 | public interface ApiEh {
20 | /**
21 | * 获取图片的url
22 | *
23 | * @param requestBody
24 | * @return
25 | */
26 | @Headers({"Content-Type: application/json", "Accept: application/json"})
27 | @POST(IConstants.POST_URL)
28 | Observable obtainImageUrl(@Body RequestBody requestBody);
29 |
30 | /**
31 | * 这玩意是用来访问三级页面来获取ImageKey的
32 | *
33 | * @param url
34 | * @return
35 | */
36 | @GET
37 | Observable parseThirdPage(@Url String url);
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/api/ApiGithub.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.api;
2 |
3 | import cn.xhl.client.manga.config.IConstants;
4 | import cn.xhl.client.manga.model.bean.response.user.Res_CheckUpdate;
5 | import io.reactivex.Observable;
6 | import okhttp3.ResponseBody;
7 | import retrofit2.http.GET;
8 | import retrofit2.http.Url;
9 |
10 | /**
11 | *
12 | * author : xiuhaoli
13 | * e-mail : xiuhaoli@outlook.com
14 | * time : 2018/01/23
15 | * version: 1.0
16 | *
17 | */
18 | public interface ApiGithub {
19 | @GET(IConstants.APK_URL)
20 | Observable checkNewVersion();
21 |
22 | /**
23 | * 下载apk
24 | *
25 | * @param url
26 | * @return
27 | */
28 | @GET
29 | Observable downloadApk(@Url String url);
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/auth/Req_Login.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.auth;
2 |
3 | /**
4 | * @author Mike on 2017/9/22 0022.
5 | */
6 |
7 | public class Req_Login {
8 | private String account;
9 | private String password;
10 |
11 | public String getAccount() {
12 | return account;
13 | }
14 |
15 | public void setAccount(String account) {
16 | this.account = account;
17 | }
18 |
19 | public String getPassword() {
20 | return password;
21 | }
22 |
23 | public void setPassword(String password) {
24 | this.password = password;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_BrowseImage.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/10/30 0030.
5 | */
6 |
7 | public class Req_BrowseImage {
8 | private String method = "showpage";
9 | private int gid;
10 | private int page;
11 | private String imgkey;
12 | private String showkey;
13 |
14 | public Req_BrowseImage() {
15 | }
16 |
17 | public Req_BrowseImage(String method, int gid, int page, String imgkey, String showkey) {
18 | this.method = method;
19 | this.gid = gid;
20 | this.page = page;
21 | this.imgkey = imgkey;
22 | this.showkey = showkey;
23 | }
24 |
25 | public String getMethod() {
26 | return method;
27 | }
28 |
29 | public void setMethod(String method) {
30 | this.method = method;
31 | }
32 |
33 | public int getGid() {
34 | return gid;
35 | }
36 |
37 | public void setGid(int gid) {
38 | this.gid = gid;
39 | }
40 |
41 | public int getPage() {
42 | return page;
43 | }
44 |
45 | public void setPage(int page) {
46 | this.page = page;
47 | }
48 |
49 | public String getImgkey() {
50 | return imgkey;
51 | }
52 |
53 | public void setImgkey(String imgkey) {
54 | this.imgkey = imgkey;
55 | }
56 |
57 | public String getShowkey() {
58 | return showkey;
59 | }
60 |
61 | public void setShowkey(String showkey) {
62 | this.showkey = showkey;
63 | }
64 |
65 | @Override
66 | public String toString() {
67 | return "Req_BrowseImage{" +
68 | "method='" + method + '\'' +
69 | ", gid=" + gid +
70 | ", page=" + page +
71 | ", imgkey='" + imgkey + '\'' +
72 | ", showkey='" + showkey + '\'' +
73 | '}';
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Comment.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/21
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_Comment {
11 | private int galleryId;
12 | private String content;
13 |
14 | public Req_Comment(int galleryId, String content) {
15 | this.galleryId = galleryId;
16 | this.content = content;
17 | }
18 |
19 | public Req_Comment() {
20 | }
21 |
22 |
23 | public int getGalleryId() {
24 | return galleryId;
25 | }
26 |
27 | public void setGalleryId(int galleryId) {
28 | this.galleryId = galleryId;
29 | }
30 |
31 | public String getContent() {
32 | return content;
33 | }
34 |
35 | public void setContent(String content) {
36 | this.content = content;
37 | }
38 |
39 | @Override
40 | public String toString() {
41 | return "Req_Comment{" +
42 | ", galleryId=" + galleryId +
43 | ", content='" + content + '\'' +
44 | '}';
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_CommentList.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/21
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_CommentList {
11 | /**
12 | * 页码
13 | */
14 | private int page;
15 | /**
16 | * 每页的长度
17 | */
18 | private int size;
19 |
20 | private int galleryId;
21 |
22 | public Req_CommentList(int page, int size, int galleryId) {
23 | this.page = page;
24 | this.size = size;
25 | this.galleryId = galleryId;
26 | }
27 |
28 | public Req_CommentList() {
29 | }
30 |
31 | public int getGalleryId() {
32 | return galleryId;
33 | }
34 |
35 | public void setGalleryId(int galleryId) {
36 | this.galleryId = galleryId;
37 | }
38 |
39 | public int getPage() {
40 | return page;
41 | }
42 |
43 | public void setPage(int page) {
44 | this.page = page;
45 | }
46 |
47 | public int getSize() {
48 | return size;
49 | }
50 |
51 | public void setSize(int size) {
52 | this.size = size;
53 | }
54 |
55 | @Override
56 | public String toString() {
57 | return "Req_CommentList{" +
58 | "page=" + page +
59 | "galleryId=" + galleryId +
60 | ", size=" + size +
61 | '}';
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_DeleteComment.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/21
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_DeleteComment {
11 | private int id;
12 | private int galleryId;
13 |
14 | public Req_DeleteComment(int id, int galleryId) {
15 | this.id = id;
16 | this.galleryId = galleryId;
17 | }
18 |
19 | public Req_DeleteComment() {
20 | }
21 |
22 | public int getId() {
23 | return id;
24 | }
25 |
26 | public void setId(int id) {
27 | this.id = id;
28 | }
29 |
30 | public int getGalleryId() {
31 | return galleryId;
32 | }
33 |
34 | public void setGalleryId(int galleryId) {
35 | this.galleryId = galleryId;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Req_DeleteComment{" +
41 | "id=" + id +
42 | ", galleryId=" + galleryId +
43 | '}';
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_DeleteFolder.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * Created by xiuhaoli on 2017/12/5.
5 | */
6 | public class Req_DeleteFolder {
7 | private String folder;
8 |
9 | public Req_DeleteFolder() {
10 | }
11 |
12 | public Req_DeleteFolder(String folder) {
13 | this.folder = folder;
14 | }
15 |
16 | public String getFolder() {
17 | return folder;
18 | }
19 |
20 | public void setFolder(String folder) {
21 | this.folder = folder;
22 | }
23 |
24 | @Override
25 | public String toString() {
26 | return "Req_DeleteFolder{" +
27 | "folder='" + folder + '\'' +
28 | '}';
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_EncryptFolder.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * Created by xiuhaoli on 2017/12/5.
5 | */
6 | public class Req_EncryptFolder {
7 | private String folder;
8 |
9 | public Req_EncryptFolder() {
10 | }
11 |
12 | public Req_EncryptFolder(String folder) {
13 | this.folder = folder;
14 | }
15 |
16 | public String getFolder() {
17 | return folder;
18 | }
19 |
20 | public void setFolder(String folder) {
21 | this.folder = folder;
22 | }
23 |
24 | @Override
25 | public String toString() {
26 | return "Req_DeleteFolder{" +
27 | "folder='" + folder + '\'' +
28 | '}';
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_FavoriteFolder.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * Created by xiuhaoli on 2017/11/17.
5 | */
6 | public class Req_FavoriteFolder {
7 | private int page;
8 | private int size;
9 | private int id;// 被点击收藏的书籍id(在请求收藏列表时是带0上来)
10 |
11 |
12 | public Req_FavoriteFolder() {
13 | }
14 |
15 | public Req_FavoriteFolder(int page, int size, int id) {
16 | this.page = page;
17 | this.size = size;
18 | this.id = id;
19 | }
20 |
21 | public int getId() {
22 | return id;
23 | }
24 |
25 | public void setId(int id) {
26 | this.id = id;
27 | }
28 |
29 | public int getPage() {
30 | return page;
31 | }
32 |
33 | public void setPage(int page) {
34 | this.page = page;
35 | }
36 |
37 | public int getSize() {
38 | return size;
39 | }
40 |
41 | public void setSize(int size) {
42 | this.size = size;
43 | }
44 |
45 | @Override
46 | public String toString() {
47 | return "Req_FavoriteFolder{" +
48 | "page=" + page +
49 | ", size=" + size +
50 | ", id=" + id +
51 | '}';
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_FavoriteFolderOther.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/18
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_FavoriteFolderOther {
11 | private int uid;
12 | private int page;
13 | private int size;
14 |
15 | public Req_FavoriteFolderOther() {
16 | }
17 |
18 | public Req_FavoriteFolderOther(int uid, int page, int size) {
19 | this.uid = uid;
20 | this.page = page;
21 | this.size = size;
22 | }
23 |
24 | public int getUid() {
25 | return uid;
26 | }
27 |
28 | public void setUid(int uid) {
29 | this.uid = uid;
30 | }
31 |
32 | public int getPage() {
33 | return page;
34 | }
35 |
36 | public void setPage(int page) {
37 | this.page = page;
38 | }
39 |
40 | public int getSize() {
41 | return size;
42 | }
43 |
44 | public void setSize(int size) {
45 | this.size = size;
46 | }
47 |
48 | @Override
49 | public String toString() {
50 | return "Req_FavoriteFolderOther{" +
51 | "uid=" + uid +
52 | ", page=" + page +
53 | ", size=" + size +
54 | '}';
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_GalleryList.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * @author Mike on 2017/10/23 0023.
5 | */
6 | public class Req_GalleryList {
7 | /**
8 | * 书籍的类型
9 | */
10 | private String category;
11 | /**
12 | * 页码
13 | */
14 | private int page;
15 | /**
16 | * 每页的长度
17 | */
18 | private int size;
19 | /**
20 | * 请求的类型
21 | */
22 | private String type;
23 |
24 | public Req_GalleryList() {
25 | }
26 |
27 | public Req_GalleryList(String category, int page, int size, String type) {
28 | this.category = category;
29 | this.page = page;
30 | this.size = size;
31 | this.type = type;
32 | }
33 |
34 | public String getType() {
35 | return type;
36 | }
37 |
38 | public void setType(String type) {
39 | this.type = type;
40 | }
41 |
42 | public String getCategory() {
43 | return category;
44 | }
45 |
46 | public void setCategory(String category) {
47 | this.category = category;
48 | }
49 |
50 | public int getPage() {
51 | return page;
52 | }
53 |
54 | public void setPage(int page) {
55 | this.page = page;
56 | }
57 |
58 | public int getSize() {
59 | return size;
60 | }
61 |
62 | public void setSize(int size) {
63 | this.size = size;
64 | }
65 |
66 | @Override
67 | public String toString() {
68 | return "Req_GalleryList{" +
69 | "category='" + category + '\'' +
70 | ", page=" + page +
71 | ", size=" + size +
72 | ", type='" + type + '\'' +
73 | '}';
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_RenameFolder.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * Created by xiuhaoli on 2017/11/17.
5 | */
6 | public class Req_RenameFolder {
7 | /**
8 | * 收藏夹
9 | */
10 | private String oldFolder;
11 | private String newFolder;
12 |
13 | public Req_RenameFolder() {
14 | }
15 |
16 | public Req_RenameFolder(String oldFolder, String newFolder) {
17 | this.oldFolder = oldFolder;
18 | this.newFolder = newFolder;
19 | }
20 |
21 | public String getOldFolder() {
22 | return oldFolder;
23 | }
24 |
25 | public void setOldFolder(String oldFolder) {
26 | this.oldFolder = oldFolder;
27 | }
28 |
29 | public String getNewFolder() {
30 | return newFolder;
31 | }
32 |
33 | public void setNewFolder(String newFolder) {
34 | this.newFolder = newFolder;
35 | }
36 |
37 | @Override
38 | public String toString() {
39 | return "Req_RenameFolder{" +
40 | "oldFolder='" + oldFolder + '\'' +
41 | ", newFolder='" + newFolder + '\'' +
42 | '}';
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Subscribe.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/11/1 0001.
5 | */
6 | public class Req_Subscribe {
7 | private int id;
8 | private String folder;
9 |
10 | public Req_Subscribe() {
11 | }
12 |
13 | public Req_Subscribe(int id, String folder) {
14 | this.id = id;
15 | this.folder = folder;
16 | }
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public String getFolder() {
27 | return folder;
28 | }
29 |
30 | public void setFolder(String folder) {
31 | this.folder = folder;
32 | }
33 |
34 | @Override
35 | public String toString() {
36 | return "Req_Subscribe{" +
37 | "id=" + id +
38 | ", folder='" + folder + '\'' +
39 | '}';
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Viewed.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/11/2 0002.
5 | */
6 | public class Req_Viewed {
7 | private int id;
8 |
9 | public Req_Viewed() {
10 | }
11 |
12 | public Req_Viewed(int id) {
13 | this.id = id;
14 | }
15 |
16 | public int getId() {
17 | return id;
18 | }
19 |
20 | public void setId(int id) {
21 | this.id = id;
22 | }
23 |
24 | @Override
25 | public String toString() {
26 | return "Req_Subscribe{" +
27 | "id=" + id +
28 | '}';
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_Attention.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/16
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_Attention {
11 | private String follow;
12 |
13 | public Req_Attention() {
14 | }
15 |
16 | public Req_Attention(String follow) {
17 | this.follow = follow;
18 | }
19 |
20 | public String getFollow() {
21 | return follow;
22 | }
23 |
24 | public void setFollow(String follow) {
25 | this.follow = follow;
26 | }
27 |
28 | @Override
29 | public String toString() {
30 | return "Req_Attention{" +
31 | "follow='" + follow + '\'' +
32 | '}';
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_CheckUpdate.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/9
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | @Deprecated
11 | public class Req_CheckUpdate {
12 | private int version_code;
13 | private String version_name;
14 |
15 | public Req_CheckUpdate() {
16 | }
17 |
18 | public Req_CheckUpdate(int version_code, String version_name) {
19 | this.version_code = version_code;
20 | this.version_name = version_name;
21 | }
22 |
23 | public String getVersion_name() {
24 | return version_name;
25 | }
26 |
27 | public void setVersion_name(String version_name) {
28 | this.version_name = version_name;
29 | }
30 |
31 | public int getVersion_code() {
32 | return version_code;
33 | }
34 |
35 | public void setVersion_code(int version_code) {
36 | this.version_code = version_code;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_FollowExist.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/16
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_FollowExist {
11 | private String artist;
12 | private String uploader;
13 |
14 | public Req_FollowExist() {
15 | }
16 |
17 | public Req_FollowExist(String artist, String uploader) {
18 | this.artist = artist;
19 | this.uploader = uploader;
20 | }
21 |
22 | public String getArtist() {
23 | return artist;
24 | }
25 |
26 | public void setArtist(String artist) {
27 | this.artist = artist;
28 | }
29 |
30 | public String getUploader() {
31 | return uploader;
32 | }
33 |
34 | public void setUploader(String uploader) {
35 | this.uploader = uploader;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Req_FollowExist{" +
41 | "uploader='" + uploader + '\'' +
42 | ", artist='" + artist + '\'' +
43 | '}';
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_ModifyProfileHeader.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/23
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_ModifyProfileHeader {
11 | private String url;
12 |
13 | public Req_ModifyProfileHeader(String url) {
14 | this.url = url;
15 | }
16 |
17 | public String getUrl() {
18 | return url;
19 | }
20 |
21 | public void setUrl(String url) {
22 | this.url = url;
23 | }
24 |
25 | @Override
26 | public String toString() {
27 | return "Req_ModifyProfileHeader{" +
28 | "url='" + url + '\'' +
29 | '}';
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_ModifyUsername.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.request.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/23
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Req_ModifyUsername {
11 | private String username;
12 |
13 | public Req_ModifyUsername(String username) {
14 | this.username = username;
15 | }
16 |
17 | public String getUsername() {
18 | return username;
19 | }
20 |
21 | public void setUsername(String username) {
22 | this.username = username;
23 | }
24 |
25 | @Override
26 | public String toString() {
27 | return "Req_ModifyProfileHeader{" +
28 | "username='" + username + '\'' +
29 | '}';
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/BaseResponse.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | /**
6 | * @author Mike on 2017/9/18 0018.
7 | *
8 | * 返回的json外层
9 | */
10 | public class BaseResponse {
11 | @SerializedName("code")
12 | private int code;
13 | @SerializedName("msg")
14 | private String msg;
15 | @SerializedName("data")
16 | private E data;
17 |
18 | public int getCode() {
19 | return code;
20 | }
21 |
22 | public void setCode(int code) {
23 | this.code = code;
24 | }
25 |
26 | public String getMsg() {
27 | return msg;
28 | }
29 |
30 | public void setMsg(String msg) {
31 | this.msg = msg;
32 | }
33 |
34 | public E getData() {
35 | return data;
36 | }
37 |
38 | public void setData(E data) {
39 | this.data = data;
40 | }
41 |
42 | @Override
43 | public String toString() {
44 | return "BaseResponse[code = " + code + ", msg = " + msg + ", data = " + data + "]";
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_GetVerify.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.auth;
2 |
3 | /**
4 | * @author Mike on 2017/9/29 0029.
5 | */
6 |
7 | public class Res_GetVerify {
8 | private String msg;
9 |
10 | public String getMsg() {
11 | return msg;
12 | }
13 |
14 | public void setMsg(String msg) {
15 | this.msg = msg;
16 | }
17 |
18 | @Override
19 | public String toString() {
20 | return "Res_GetVerify[msg = " + msg + "]";
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_RefreshToken.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.auth;
2 |
3 | /**
4 | * @author Mike on 2017/9/28 0028.
5 | */
6 |
7 | public class Res_RefreshToken {
8 | private String token;
9 | private int expire_time;
10 |
11 | public String getToken() {
12 | return token;
13 | }
14 |
15 | public void setToken(String token) {
16 | this.token = token;
17 | }
18 |
19 | public int getExpire_time() {
20 | return expire_time;
21 | }
22 |
23 | public void setExpire_time(int expire_time) {
24 | this.expire_time = expire_time;
25 | }
26 |
27 | @Override
28 | public String toString() {
29 | return "Res_RefreshToken[token = " + token + ", expire_time = " + expire_time + "]";
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_Register.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.auth;
2 |
3 | /**
4 | * @author Mike on 2017/9/29 0029.
5 | */
6 |
7 | public class Res_Register {
8 | private String msg;
9 |
10 | public String getMsg() {
11 | return msg;
12 | }
13 |
14 | public void setMsg(String msg) {
15 | this.msg = msg;
16 | }
17 |
18 | @Override
19 | public String toString() {
20 | return "Res_Register[msg = " + msg + "]";
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_ResetPassword.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.auth;
2 |
3 | /**
4 | * @author Mike on 2017/9/29 0029.
5 | */
6 |
7 | public class Res_ResetPassword {
8 | private String msg;
9 |
10 | public String getMsg() {
11 | return msg;
12 | }
13 |
14 | public void setMsg(String msg) {
15 | this.msg = msg;
16 | }
17 |
18 | @Override
19 | public String toString() {
20 | return "Res_ResetPassword[msg = " + msg + "]";
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_BrowseImage.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/10/30 0030.
5 | */
6 |
7 | public class Res_BrowseImage {
8 | private String n;
9 | private String i3;
10 |
11 | public Res_BrowseImage(String n, String i3) {
12 | this.n = n;
13 | this.i3 = i3;
14 | }
15 |
16 | public Res_BrowseImage() {
17 | }
18 |
19 | public String getI3() {
20 | return i3;
21 | }
22 |
23 | public void setI3(String i3) {
24 | this.i3 = i3;
25 | }
26 |
27 | public String getN() {
28 | return n;
29 | }
30 |
31 | public void setN(String n) {
32 | this.n = n;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return "Res_BrowseImage{" +
38 | "n='" + n + '\'' +
39 | ", i3='" + i3 + '\'' +
40 | '}';
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Comment.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | * Created by lixiuhao on 2017/11/2 0002.
5 | */
6 | public class Res_Comment {
7 | private String msg;
8 | private int id;
9 | private int create_time;
10 |
11 | public Res_Comment(String msg, int id,int create_time) {
12 | this.msg = msg;
13 | this.id = id;
14 | this.create_time = create_time;
15 | }
16 |
17 | public Res_Comment() {
18 | }
19 |
20 | public int getId() {
21 | return id;
22 | }
23 |
24 | public void setId(int id) {
25 | this.id = id;
26 | }
27 |
28 | public String getMsg() {
29 | return msg;
30 | }
31 |
32 | public void setMsg(String msg) {
33 | this.msg = msg;
34 | }
35 |
36 | public int getCreate_time() {
37 | return create_time;
38 | }
39 |
40 | public void setCreate_time(int create_time) {
41 | this.create_time = create_time;
42 | }
43 |
44 | @Override
45 | public String toString() {
46 | return "Res_Comment{" +
47 | "id='" + id + '\'' +
48 | "msg='" + msg + '\'' +
49 | "create_time='" + create_time + '\'' +
50 | '}';
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_DeleteComment.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2017/12/21
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Res_DeleteComment {
11 | private String msg;
12 |
13 | public Res_DeleteComment(String msg) {
14 | this.msg = msg;
15 | }
16 |
17 | public Res_DeleteComment() {
18 | }
19 |
20 | public String getMsg() {
21 | return msg;
22 | }
23 |
24 | public void setMsg(String msg) {
25 | this.msg = msg;
26 | }
27 |
28 | @Override
29 | public String toString() {
30 | return "Res_DeleteComment{" +
31 | "msg='" + msg + '\'' +
32 | '}';
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Folder.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | * Created by xiuhaoli on 2017/12/5.
5 | */
6 |
7 | public class Res_Folder {
8 | private String msg;
9 |
10 | public Res_Folder() {
11 | }
12 |
13 | public Res_Folder(String msg) {
14 | this.msg = msg;
15 | }
16 |
17 | public String getMsg() {
18 | return msg;
19 | }
20 |
21 | public void setMsg(String msg) {
22 | this.msg = msg;
23 | }
24 |
25 | @Override
26 | public String toString() {
27 | return "Res_Folder{" +
28 | "msg='" + msg + '\'' +
29 | '}';
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Subscribe.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/11/2 0002.
5 | */
6 |
7 | public class Res_Subscribe {
8 | private int delta;
9 | private String msg;
10 |
11 | public Res_Subscribe(int delta, String msg) {
12 | this.delta = delta;
13 | this.msg = msg;
14 | }
15 |
16 | public Res_Subscribe() {
17 | }
18 |
19 | public int getDelta() {
20 | return delta;
21 | }
22 |
23 | public void setDelta(int delta) {
24 | this.delta = delta;
25 | }
26 |
27 | public String getMsg() {
28 | return msg;
29 | }
30 |
31 | public void setMsg(String msg) {
32 | this.msg = msg;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return "Res_Subscribe{" +
38 | "delta=" + delta +
39 | ", msg='" + msg + '\'' +
40 | '}';
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Viewed.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.gallery;
2 |
3 | /**
4 | * @author lixiuhao on 2017/11/2 0002.
5 | */
6 | public class Res_Viewed {
7 | private String msg;
8 |
9 | public Res_Viewed(String msg) {
10 | this.msg = msg;
11 | }
12 |
13 | public Res_Viewed() {
14 | }
15 |
16 | public String getMsg() {
17 | return msg;
18 | }
19 |
20 | public void setMsg(String msg) {
21 | this.msg = msg;
22 | }
23 |
24 | @Override
25 | public String toString() {
26 | return "Res_Viewed{" +
27 | "msg='" + msg + '\'' +
28 | '}';
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/user/Res_CheckUpdate.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/9
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Res_CheckUpdate {
11 | private String tag_name;
12 | private String name;
13 | private String body;
14 |
15 | public Res_CheckUpdate() {
16 | }
17 |
18 | public Res_CheckUpdate(String tag_name, String name, String body) {
19 | this.tag_name = tag_name;
20 | this.name = name;
21 | this.body = body;
22 | }
23 |
24 | public String getTag_name() {
25 | return tag_name;
26 | }
27 |
28 | public void setTag_name(String tag_name) {
29 | this.tag_name = tag_name;
30 | }
31 |
32 | public String getName() {
33 | return name;
34 | }
35 |
36 | public void setName(String name) {
37 | this.name = name;
38 | }
39 |
40 | public String getBody() {
41 | return body;
42 | }
43 |
44 | public void setBody(String body) {
45 | this.body = body;
46 | }
47 |
48 | @Override
49 | public String toString() {
50 | return "Res_CheckUpdate{" +
51 | "tag_name='" + tag_name + '\'' +
52 | ", name='" + name + '\'' +
53 | ", body='" + body + '\'' +
54 | '}';
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/model/bean/response/user/Res_FollowExist.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.model.bean.response.user;
2 |
3 | /**
4 | *
5 | * author xiuhaoli
6 | * time 2018/1/16
7 | * e-mail 526193779@qq.com
8 | *
9 | */
10 | public class Res_FollowExist {
11 | private boolean artist;
12 | private boolean uploader;
13 |
14 | public Res_FollowExist() {
15 | }
16 |
17 | public Res_FollowExist(boolean artist, boolean uploader) {
18 | this.artist = artist;
19 | this.uploader = uploader;
20 | }
21 |
22 | public boolean isArtist() {
23 | return artist;
24 | }
25 |
26 | public void setArtist(boolean artist) {
27 | this.artist = artist;
28 | }
29 |
30 | public boolean isUploader() {
31 | return uploader;
32 | }
33 |
34 | public void setUploader(boolean uploader) {
35 | this.uploader = uploader;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Res_FollowExist{" +
41 | "artist=" + artist +
42 | ", uploader=" + uploader +
43 | '}';
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/presenter/main/CategoryPresenter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.presenter.main;
2 |
3 | import cn.xhl.client.manga.contract.main.CategoryContract;
4 |
5 | /**
6 | * @author Mike on 2017/10/9 0009.
7 | */
8 |
9 | public class CategoryPresenter implements CategoryContract.Presenter {
10 | private CategoryContract.View view;
11 |
12 | public CategoryPresenter(CategoryContract.View view) {
13 | this.view = view;
14 | view.setPresenter(this);
15 | }
16 |
17 | @Override
18 | public void subscribe() {
19 | // view.initRecyclerData();
20 | }
21 |
22 | @Override
23 | public void unSubscribe() {
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/presenter/main/HomePresenter.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.presenter.main;
2 |
3 | import cn.xhl.client.manga.contract.main.HomeContract;
4 |
5 | /**
6 | * @author Mike on 2017/10/9 0009.
7 | *
8 | * 首页的Presenter
9 | */
10 | public class HomePresenter implements HomeContract.Presenter {
11 | private HomeContract.View view;
12 |
13 | public HomePresenter(HomeContract.View view) {
14 | this.view = view;
15 | view.setPresenter(this);
16 | }
17 |
18 | @Override
19 | public void subscribe() {
20 |
21 | }
22 |
23 | @Override
24 | public void unSubscribe() {
25 | }
26 |
27 | @Override
28 | public void search() {
29 | view.showSearchDialog();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/ControlUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import android.app.Activity;
4 | import android.view.View;
5 |
6 | /**
7 | * @author Mike on 2017/4/18 0018.
8 | */
9 |
10 | public class ControlUtil {
11 | /**
12 | * 初始化控件
13 | *
14 | * @param resId 控件id
15 | * @param listener 监听器
16 | * @param activity 上下文
17 | * @return
18 | */
19 | public static View initControlOnClick(int resId, View.OnClickListener listener, Activity activity) {
20 | if (activity == null) return null;
21 | View view = activity.findViewById(resId);
22 | view.setOnClickListener(listener);
23 | return view;
24 | }
25 |
26 | /**
27 | * @param resId
28 | * @param listener
29 | * @param view parent View
30 | * @return
31 | */
32 | public static View initControlOnClick(int resId, View view, View.OnClickListener listener) {
33 | if (view == null) return null;
34 | view = view.findViewById(resId);
35 | view.setOnClickListener(listener);
36 | return view;
37 | }
38 |
39 | public static View initControlOnClick(int resId, Activity activity) {
40 | return initControlOnClick(resId, null, activity);
41 | }
42 |
43 | public static View initControlOnClick(int resId, View view) {
44 | return initControlOnClick(resId, view, null);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/DpUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import android.content.Context;
4 | import android.view.WindowManager;
5 |
6 | /**
7 | * @author lixiuhao on 2017/5/12 0012.
8 | */
9 | public class DpUtil {
10 | /**
11 | * Dp---->Px
12 | *
13 | * @param context
14 | * @param dp
15 | * @return
16 | */
17 | public static int dp2Px(Context context, float dp) {
18 | final float scale = context.getResources().getDisplayMetrics().density;
19 | return (int) (dp * scale + 0.5f);
20 | }
21 |
22 | /**
23 | * px转dip
24 | *
25 | * @param context
26 | * @param pxValue
27 | * @return
28 | */
29 | public static int px2Dp(Context context, float pxValue) {
30 | final float scale = context.getResources().getDisplayMetrics().density;
31 | return (int) (pxValue / scale + 0.5f);
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/ResourceUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.GradientDrawable;
5 | import android.support.annotation.AttrRes;
6 | import android.support.annotation.IdRes;
7 | import android.support.v4.app.ActivityCompat;
8 | import android.util.TypedValue;
9 |
10 | import cn.xhl.client.manga.MyActivityManager;
11 | import cn.xhl.client.manga.MyApplication;
12 | import cn.xhl.client.manga.R;
13 |
14 | /**
15 | *
16 | * author : xiuhaoli
17 | * e-mail : xiuhaoli@outlook.com
18 | * time : 2017/12/09
19 | * version: 1.0
20 | *
21 | */
22 | public class ResourceUtil {
23 | public static int getAttrData(@AttrRes int attrId) {
24 | return getAttrData(attrId, new TypedValue());
25 | }
26 |
27 | public static int getAttrData(@AttrRes int attrId, TypedValue typedValue) {
28 | Context context = MyActivityManager.peek();
29 | if (context != null) {
30 | context.getTheme().resolveAttribute(attrId, typedValue, true);
31 | }
32 | return typedValue.data;
33 | }
34 |
35 | public static GradientDrawable getDrawableWithRound5(@AttrRes int attrId) {
36 | int attr = getAttrData(attrId);
37 | Context context = MyApplication.getAppContext();
38 | GradientDrawable drawable = new GradientDrawable();
39 | drawable.setCornerRadius(DpUtil.dp2Px(context, 5));
40 | drawable.setStroke(1, attr);
41 | drawable.setColor(attr);
42 | return drawable;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/RxSchedulesHelper.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import io.reactivex.Observable;
4 | import io.reactivex.ObservableSource;
5 | import io.reactivex.ObservableTransformer;
6 | import io.reactivex.android.schedulers.AndroidSchedulers;
7 | import io.reactivex.annotations.NonNull;
8 | import io.reactivex.schedulers.Schedulers;
9 |
10 | /**
11 | * @author Mike on 2017/9/25 0025.
12 | */
13 | public class RxSchedulesHelper {
14 | public static ObservableTransformer io_ui() {
15 | return new ObservableTransformer() {
16 | @Override
17 | public ObservableSource apply(@NonNull Observable upstream) {
18 | return upstream
19 | .subscribeOn(Schedulers.io())
20 | .observeOn(AndroidSchedulers.mainThread());
21 | }
22 | };
23 | }
24 |
25 | public static ObservableTransformer computation_ui() {
26 | return new ObservableTransformer() {
27 | @Override
28 | public ObservableSource apply(@NonNull Observable upstream) {
29 | return upstream
30 | .subscribeOn(Schedulers.computation())
31 | .observeOn(AndroidSchedulers.mainThread());
32 | }
33 | };
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/SignUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import java.util.Iterator;
4 | import java.util.Map;
5 | import java.util.TreeMap;
6 |
7 | import cn.xhl.client.manga.UserInfo;
8 | import cn.xhl.client.manga.config.IConstants;
9 | import cn.xhl.client.manga.model.bean.request.BaseRequest;
10 |
11 | /**
12 | * @author Mike on 2017/9/28 0028.
13 | *
14 | * 签名工具类
15 | */
16 | public class SignUtil {
17 | private static UserInfo userInfo = UserInfo.getInstance();
18 |
19 | /**
20 | * 获取URL签名,按照字典序进行加签
21 | * sign = md5(md5(salt + 字典排序的参数value + salt) + 固定salt)
22 | * salt在登录时获取并存于本地,只要salt不被知道,签名就会不过,
23 | * 因此在登录的时候,salt要采用三次握手的方式加密下发,
24 | * 这样可以确保,第三方拿到token等参数由于没有salt而无法过验签
25 | *
26 | * @param params 需要进行加签的参数
27 | * @return
28 | */
29 | public static String generateSign(String... params) {
30 | String salt = userInfo.getSalt();
31 | String[] p = new String[params.length + 3];
32 | p[0] = userInfo.getToken();
33 | p[1] = SystemUtil.getTimeStamp();
34 | p[2] = String.valueOf(userInfo.getUid());
35 | for (int i = 0, size = params.length; i < size; i++) {
36 | p[i + 3] = params[i];
37 | }
38 | params = StringUtil.bubbleSort(p);
39 | StringBuilder stringBuilder = new StringBuilder("");
40 | for (String param : params) {
41 | stringBuilder.append(param);
42 | }
43 | return MD5Util.encrypt(MD5Util.encrypt(salt + stringBuilder.toString() + salt) + IConstants.SALT);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/StringUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 |
4 | import java.io.UnsupportedEncodingException;
5 | import java.util.regex.Matcher;
6 | import java.util.regex.Pattern;
7 |
8 | import okhttp3.MediaType;
9 | import okhttp3.RequestBody;
10 |
11 | /**
12 | * @author Mike on 2017/9/25 0025.
13 | */
14 |
15 | public class StringUtil {
16 | private static final Pattern p = Pattern.compile("^(?!_)(?!.*?_$)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$");
17 |
18 | public static boolean isEmpty(Object str) {
19 | return str == null || "".equals(str);
20 | }
21 |
22 | public static boolean isNotEmpty(Object str) {
23 | return !isEmpty(str);
24 | }
25 |
26 | public static String utf_8(String str) {
27 | String result = null;
28 | try {
29 | result = new String(str.getBytes("UTF-8"), "UTF-8");
30 | } catch (UnsupportedEncodingException e) {
31 | e.printStackTrace();
32 | }
33 | return result;
34 | }
35 |
36 | public static RequestBody getRequestBody(String jsonText) {
37 | return RequestBody.create(MediaType.parse("Content-Type, application/json"), jsonText);
38 | }
39 |
40 | /**
41 | * 按照ascii码表排序
42 | *
43 | * @param s array
44 | * @return array
45 | */
46 | public static String[] bubbleSort(String s[]) {
47 | for (int i = 0, size = s.length; i < size; i++) {
48 | for (int j = 0; j < size - 1; j++) {
49 | String temp;
50 | if (s[j].compareTo(s[j + 1]) > 0) {
51 | temp = s[j + 1];
52 | s[j + 1] = s[j];
53 | s[j] = temp;
54 | }
55 | }
56 | }
57 | return s;
58 | }
59 |
60 | public static boolean isValidName(String str) {
61 | Matcher matcher = p.matcher(str);
62 | return matcher.matches();
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/utils/SystemUtil.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.utils;
2 |
3 | import android.content.Context;
4 | import android.content.pm.PackageInfo;
5 | import android.content.pm.PackageManager;
6 |
7 | import java.util.List;
8 | import java.util.regex.Pattern;
9 |
10 | /**
11 | * @author Mike on 2017/5/5 0005.
12 | */
13 |
14 | public class SystemUtil {
15 |
16 | public static String getTimeStamp() {
17 | return String.valueOf(System.currentTimeMillis() / 1000);
18 | }
19 |
20 | public static int getTimestamp() {
21 | return Long.valueOf(System.currentTimeMillis() / 1000).intValue();
22 | }
23 |
24 | /**
25 | * 判断str是否为数字
26 | *
27 | * @param str 传入的字符串
28 | * @return
29 | */
30 | public static boolean isInteger(String str) {
31 | Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
32 | // Pattern pattern = Pattern.compile("[0-9]*");
33 | return pattern.matcher(str).matches();
34 | }
35 |
36 | /**
37 | * 检查手机上是否安装了指定的软件
38 | *
39 | * @param context
40 | * @param packageName:应用包名
41 | * @return
42 | */
43 | public static boolean isInstalled(Context context, String packageName) {
44 | final PackageManager packageManager = context.getPackageManager();
45 | List packageInfos = packageManager.getInstalledPackages(0);
46 | if (packageInfos != null) {
47 | for (int i = 0; i < packageInfos.size(); i++) {
48 | String pkName = packageInfos.get(i).packageName;
49 | if (pkName.equals(packageName)) {
50 | return true;
51 | }
52 | }
53 | }
54 | return false;
55 | }
56 |
57 | public static String formatNumber6(double d) {
58 | java.text.DecimalFormat df = new java.text.DecimalFormat("#.######");
59 | return df.format(d);
60 | }
61 |
62 | public static String formatNumber2(double d) {
63 | java.text.DecimalFormat df = new java.text.DecimalFormat("#.##");
64 | return df.format(d);
65 | }
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/view/auth/AuthActivity.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.view.auth;
2 |
3 | import android.os.Bundle;
4 |
5 | import cn.xhl.client.manga.base.BaseActivity;
6 | import cn.xhl.client.manga.R;
7 | import cn.xhl.client.manga.base.BaseFragment;
8 | import cn.xhl.client.manga.presenter.auth.LoginPresenter;
9 | import cn.xhl.client.manga.utils.ActivityUtil;
10 | import cn.xhl.client.manga.view.auth.fragment.LoginFragment;
11 |
12 | /**
13 | * 登录认证、注册等页面
14 | */
15 | public class AuthActivity extends BaseActivity implements BaseFragment.BackHandledInterface {
16 |
17 | public static final String LOGIN_TAG = "loginFragment";
18 | public static final String RESET_TAG = "resetFragment";
19 | public static final String REGISTER_TAG = "registerFragment";
20 |
21 | private BaseFragment selectedFragment;
22 |
23 | @Override
24 | protected void onCreate(Bundle savedInstanceState) {
25 | super.onCreate(savedInstanceState);
26 | this.overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_alpha_out);// 载入载出动画
27 | LoginFragment loginFragment = (LoginFragment) getSupportFragmentManager()
28 | .findFragmentByTag(LOGIN_TAG);
29 | if (loginFragment == null) {
30 | loginFragment = LoginFragment.newInstance();
31 | }
32 | ActivityUtil.switchContentHideCurrent(this, null, loginFragment, LOGIN_TAG, R.id.content_activity_auth);// google的demo里是把这句话放到上面的判空括号中
33 | new LoginPresenter(loginFragment);
34 | }
35 |
36 | @Override
37 | protected int layoutId() {
38 | return R.layout.activity_auth;
39 | }
40 |
41 | @Override
42 | public void setSelectedFragment(BaseFragment selectedFragment) {
43 | this.selectedFragment = selectedFragment;
44 | }
45 |
46 | @Override
47 | public void onBackPressed() {
48 | selectedFragment.onBackPressed();
49 | }
50 |
51 |
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/java/cn/xhl/client/manga/view/main/SettingActivity.kt:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga.view.main
2 |
3 | import android.os.Bundle
4 | import cn.xhl.client.manga.R
5 | import cn.xhl.client.manga.base.BaseActivity
6 | import cn.xhl.client.manga.base.BaseFragment
7 | import cn.xhl.client.manga.presenter.main.SettingPresenter
8 | import cn.xhl.client.manga.utils.ActivityUtil
9 | import cn.xhl.client.manga.view.main.fragment.SettingFragment
10 |
11 | class SettingActivity : BaseActivity(), BaseFragment.BackHandledInterface {
12 | private lateinit var baseFragment: BaseFragment
13 |
14 | override fun layoutId(): Int {
15 | return R.layout.activity_setting
16 | }
17 |
18 | override fun onCreate(savedInstanceState: Bundle?) {
19 | super.onCreate(savedInstanceState)
20 | val settingFragment = SettingFragment()
21 | SettingPresenter(settingFragment)
22 | ActivityUtil.switchContentHideCurrent(this, null,
23 | settingFragment,
24 | SettingFragment.TAG, R.id.framelayout_activity_setting)
25 | setSlipClose()
26 |
27 | }
28 |
29 | override fun setSelectedFragment(selectedFragment: BaseFragment) {
30 | baseFragment = selectedFragment
31 | }
32 |
33 | override fun onBackPressed() {
34 | baseFragment.onBackPressed()
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/loading-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/loading-web.png
--------------------------------------------------------------------------------
/app/src/main/night_mode-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/night_mode-web.png
--------------------------------------------------------------------------------
/app/src/main/no_data-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/no_data-web.png
--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_alpha_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_alpha_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_slide_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_slide_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/popup_alpha_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/popup_alpha_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/browse_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/custom_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dotted_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_dashboard_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_home_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notifications_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_check.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_gallery_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/login_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/mine_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/progressbar_style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/qmui_tip_dialog_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/retry_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_auth.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_base.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_concrete_category.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_favorite.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
20 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_splash.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_progressbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
26 |
27 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_category.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_favorite.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_latest.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_manga_summary.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_bottomsheet_favorite_folder.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
17 |
18 |
29 |
30 |
38 |
39 |
49 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_category.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
17 |
18 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_summary.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
26 |
27 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/progressbar_default.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
25 |
26 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/qmui_tip_dialog_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/recycler_only.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/titlebar_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
25 |
26 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/navigation.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/broom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/broom.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/comment.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/edit.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/favorite.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/filter.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/history.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_setting_pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/ic_setting_pink.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_book.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_brightness_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_brightness_high.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_brightness_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_brightness_low.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_check.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_check_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_check_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_folder.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_lock.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_plane.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/loading.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/night_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/no_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/no_data.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_author.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_author.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_category.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_filecount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_filecount.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_posted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_posted.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/span_uploader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_uploader.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/viewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/viewed.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/broom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/broom.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/comment.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/edit.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/favorite.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/filter.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/history.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_setting_pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/ic_setting_pink.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_book.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_brightness_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_brightness_high.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_brightness_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_brightness_low.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_check.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_check_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_check_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_folder.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_lock.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_plane.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/icon_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/loading.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/night_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/no_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/no_data.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_author.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_author.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_category.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_filecount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_filecount.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_posted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_posted.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/span_uploader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_uploader.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/viewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/viewed.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/artist_cg_sets.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/artist_cg_sets.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/chinese.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/chinese.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/cosplay.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/cosplay.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/doujinshi.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/doujinshi.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/english.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/english.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/failure_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/failure_img.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/french.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/french.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/game_cg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/game_cg.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/german.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/german.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/greek.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/greek.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/image_sets.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/image_sets.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/italian.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/italian.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/japanese.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/japanese.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/korean.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/korean.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/logo.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/manga.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/manga.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/misc.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/misc.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/non_h.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/non_h.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/polish.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/polish.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/portuguese.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/portuguese.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/profile_cover.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/profile_cover.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/profile_header.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/profile_header.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/russian.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/russian.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/spanish.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/spanish.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/splash.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/splash.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/thai.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/thai.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/vietnamese.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/vietnamese.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-nodpi/western.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/western.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/broom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/broom.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/comment.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/edit.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/favorite.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/filter.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/history.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_setting_pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/ic_setting_pink.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_book.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_brightness_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_brightness_high.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_brightness_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_brightness_low.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_check.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_check_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_check_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_folder.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_lock.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_plane.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/icon_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/loading.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/night_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/no_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/no_data.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_author.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_author.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_category.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_filecount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_filecount.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_posted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_posted.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/span_uploader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_uploader.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/viewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/viewed.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/broom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/broom.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/comment.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/edit.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/favorite.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/filter.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/history.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_setting_pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/ic_setting_pink.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_book.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_brightness_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_brightness_high.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_brightness_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_brightness_low.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_check.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_check_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_check_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_folder.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_lock.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_plane.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/icon_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/loading.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/night_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/no_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/no_data.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_author.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_author.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_category.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_filecount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_filecount.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_posted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_posted.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/span_uploader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_uploader.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/viewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/viewed.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/broom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/broom.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/comment.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/edit.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/favorite.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/filter.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/history.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_setting_pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/ic_setting_pink.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_book.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_brightness_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_brightness_high.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_brightness_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_brightness_low.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_check.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_check_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_check_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_folder.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_lock.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_plane.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/icon_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/loading.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/night_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/night_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/no_data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/no_data.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_author.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_author.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_category.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_filecount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_filecount.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_posted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_posted.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_rating.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/span_uploader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_uploader.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/viewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/viewed.png
--------------------------------------------------------------------------------
/app/src/main/res/transition/explode.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | #2C2C2C
12 | #373737
13 | #747474
14 |
15 |
16 |
17 |
18 |
19 | #2C2C2C
20 | #B3FFFFFF
21 |
22 |
23 | #B3333333
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 | #FFFFFF
7 | #000000
8 | #94989B
9 | #333333
10 | #66000000
11 | #F4F4F4
12 | #FFFFFF
13 | #333333
14 | #E3E3E3
15 | #00A8E1
16 | #010101
17 | #323232
18 |
19 | #FFFFFF
20 | #333333
21 |
22 | #373737
23 | #747474
24 | #2C2C2C
25 | #B3FFFFFF
26 | #3B3B3B
27 |
28 | #FFFFFF
29 | #333333
30 | #F4F4F4
31 | #333333
32 | #F4F4F4
33 |
34 |
35 | #B3FFFFFF
36 | #66FFFFFF
37 | #80000000
38 | #66000000
39 | #4D000000
40 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/filepaths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
10 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/search-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/search-web.png
--------------------------------------------------------------------------------
/app/src/main/span_author-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_author-web.png
--------------------------------------------------------------------------------
/app/src/main/span_category-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_category-web.png
--------------------------------------------------------------------------------
/app/src/main/span_filecount-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_filecount-web.png
--------------------------------------------------------------------------------
/app/src/main/span_posted-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_posted-web.png
--------------------------------------------------------------------------------
/app/src/main/span_rating-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_rating-web.png
--------------------------------------------------------------------------------
/app/src/main/span_uploader-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_uploader-web.png
--------------------------------------------------------------------------------
/app/src/main/viewed-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/viewed-web.png
--------------------------------------------------------------------------------
/app/src/test/java/cn/xhl/client/manga/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package cn.xhl.client.manga;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | ext.kotlin_version = '1.2.20'
5 | repositories {
6 | google()
7 | jcenter()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:3.0.1'
11 |
12 | classpath 'com.google.gms:google-services:3.1.0'
13 | // NOTE: Do not place your application dependencies here; they belong
14 | // in the individual module build.gradle files
15 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
16 | }
17 | }
18 |
19 | allprojects {
20 | repositories {
21 | jcenter()
22 | google()
23 | maven {
24 | url "https://jitpack.io"
25 | }
26 | // maven {
27 | // url 'https://dl.google.com/dl/android/maven2/'
28 | // }
29 | }
30 | }
31 |
32 | task clean(type: Delete) {
33 | delete rootProject.buildDir
34 | }
35 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your screenBuilder environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | org.gradle.jvmargs=-Xmx1536m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
13 |
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 | org.gradle.parallel=true
19 | org.gradle.daemon=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Nov 13 11:12:21 CST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/img/content.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/img/content.jpg
--------------------------------------------------------------------------------
/img/list.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/img/list.jpg
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------