files = new ArrayList<>();
+ // 判断是否存在数据
+ if (cursor == null) {
+ // TODO:当媒体库没有数据的时候,需要做相应的处理
+ // 暂时直接返回空数据
+ resultCallback.onResultCallback(files);
+ return;
+ }
+ // 重复使用Loader时,需要重置cursor的position;
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ String path;
+
+ path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA));
+ // 路径无效
+ if (TextUtils.isEmpty(path)) {
+ continue;
+ } else {
+ File file = new File(path);
+ if (file.isDirectory() || !file.exists()){
+ continue;
+ }
+ else {
+ files.add(file);
+ }
+ }
+ }
+ if (resultCallback != null) {
+ resultCallback.onResultCallback(files);
+ }
+ }
+
+ /**
+ * 从Cursor中读取对应columnName的值
+ *
+ * @param cursor
+ * @param columnName
+ * @param defaultValue
+ * @return 当columnName无效时返回默认值;
+ */
+ protected Object getValueFromCursor(@NonNull Cursor cursor, String columnName, Object defaultValue) {
+ try {
+ int index = cursor.getColumnIndexOrThrow(columnName);
+ int type = cursor.getType(index);
+ switch (type) {
+ case Cursor.FIELD_TYPE_STRING:
+ // TO SOLVE:某些手机的数据库将数值类型存为String类型
+ String value = cursor.getString(index);
+ try {
+ if (defaultValue instanceof String) {
+ return value;
+ } else if (defaultValue instanceof Long) {
+ return Long.valueOf(value);
+ } else if (defaultValue instanceof Integer) {
+ return Integer.valueOf(value);
+ } else if (defaultValue instanceof Double) {
+ return Double.valueOf(value);
+ } else if (defaultValue instanceof Float) {
+ return Float.valueOf(value);
+ }
+ } catch (NumberFormatException e) {
+ return defaultValue;
+ }
+ case Cursor.FIELD_TYPE_INTEGER:
+ if (defaultValue instanceof Long) {
+ return cursor.getLong(index);
+ } else if (defaultValue instanceof Integer) {
+ return cursor.getInt(index);
+ }
+ case Cursor.FIELD_TYPE_FLOAT:
+ if (defaultValue instanceof Float) {
+ return cursor.getFloat(index);
+ } else if (defaultValue instanceof Double) {
+ return cursor.getDouble(index);
+ }
+ case Cursor.FIELD_TYPE_BLOB:
+ if (defaultValue instanceof Blob) {
+ return cursor.getBlob(index);
+ }
+ case Cursor.FIELD_TYPE_NULL:
+ default:
+ return defaultValue;
+ }
+ } catch (IllegalArgumentException e) {
+ return defaultValue;
+ }
+ }
+}
diff --git a/app/src/main/java/xyz/fycz/myreader/util/media/MediaStoreHelper.java b/app/src/main/java/xyz/fycz/myreader/util/media/MediaStoreHelper.java
new file mode 100644
index 0000000..d353e12
--- /dev/null
+++ b/app/src/main/java/xyz/fycz/myreader/util/media/MediaStoreHelper.java
@@ -0,0 +1,68 @@
+package xyz.fycz.myreader.util.media;
+
+import android.app.Activity;
+import android.content.Context;
+import android.database.Cursor;
+import android.os.Bundle;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.content.Loader;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.util.List;
+
+/**
+ * Created by newbiechen on 2018/1/14.
+ * 获取媒体库的数据。
+ */
+
+public class MediaStoreHelper {
+
+ /**
+ * 获取媒体库中所有的书籍文件
+ *
+ * 暂时只支持 TXT
+ *
+ * @param activity
+ * @param resultCallback
+ */
+ public static void getAllBookFile(FragmentActivity activity, MediaResultCallback resultCallback) {
+ // 将文件的获取处理交给 LoaderManager。
+ activity.getSupportLoaderManager()
+ .initLoader(LoaderCreator.ALL_BOOK_FILE, null, new MediaLoaderCallbacks(activity, resultCallback));
+ }
+
+ public interface MediaResultCallback {
+ void onResultCallback(List files);
+ }
+
+ /**
+ * Loader 回调处理
+ */
+ static class MediaLoaderCallbacks implements LoaderManager.LoaderCallbacks {
+ protected WeakReference mContext;
+ protected MediaResultCallback mResultCallback;
+
+ public MediaLoaderCallbacks(Context context, MediaResultCallback resultCallback) {
+ mContext = new WeakReference<>(context);
+ mResultCallback = resultCallback;
+ }
+
+ @Override
+ public Loader onCreateLoader(int id, Bundle args) {
+ return LoaderCreator.create(mContext.get(), id, args);
+ }
+
+ @Override
+ public void onLoadFinished(Loader loader, Cursor data) {
+ LocalFileLoader localFileLoader = (LocalFileLoader) loader;
+ localFileLoader.parseData(data, mResultCallback);
+ }
+
+ @Override
+ public void onLoaderReset(Loader loader) {
+ }
+ }
+}
diff --git a/app/src/main/java/xyz/fycz/myreader/widget/DividerItemDecoration.java b/app/src/main/java/xyz/fycz/myreader/widget/DividerItemDecoration.java
new file mode 100644
index 0000000..6cf30c3
--- /dev/null
+++ b/app/src/main/java/xyz/fycz/myreader/widget/DividerItemDecoration.java
@@ -0,0 +1,93 @@
+package xyz.fycz.myreader.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+
+import android.view.View;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Created by newbiechen on 2017/10/8.
+ */
+
+public class DividerItemDecoration extends RecyclerView.ItemDecoration {
+ private static final String TAG = "DividerItemDecoration";
+ private static final int[] ATTRS = new int[]{
+ android.R.attr.listDivider
+ };
+
+ public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
+
+ public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
+
+ private Drawable mDrawable;
+
+ public DividerItemDecoration(Context context) {
+ final TypedArray a = context.obtainStyledAttributes(ATTRS);
+ mDrawable = a.getDrawable(0);
+ a.recycle();
+ }
+
+ @Override
+ public void onDraw(Canvas c, RecyclerView parent) {
+ if (getLayoutManagerType(parent) == VERTICAL_LIST) {
+ drawVertical(c, parent);
+ } else {
+ drawHorizontal(c, parent);
+ }
+ }
+
+ private int getLayoutManagerType(RecyclerView rv){
+ RecyclerView.LayoutManager manager = rv.getLayoutManager();
+
+ if (!(manager instanceof LinearLayoutManager)){
+ throw new IllegalArgumentException("only supply linearLayoutManager");
+ }
+ return ((LinearLayoutManager) manager).getOrientation();
+ }
+
+ public void drawVertical(Canvas c, RecyclerView parent) {
+ final int left = parent.getPaddingLeft();
+ final int right = parent.getWidth() - parent.getPaddingRight();
+
+ final int childCount = parent.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int top = child.getBottom() + params.bottomMargin;
+ final int bottom = top + mDrawable.getIntrinsicHeight();
+ mDrawable.setBounds(left, top, right, bottom);
+ mDrawable.draw(c);
+ }
+ }
+
+ public void drawHorizontal(Canvas c, RecyclerView parent) {
+ final int top = parent.getPaddingTop();
+ final int bottom = parent.getHeight() - parent.getPaddingBottom();
+
+ final int childCount = parent.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int left = child.getRight() + params.rightMargin;
+ final int right = left + mDrawable.getIntrinsicHeight();
+ mDrawable.setBounds(left, top, right, bottom);
+ mDrawable.draw(c);
+ }
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
+ if (getLayoutManagerType(parent) == VERTICAL_LIST) {
+ outRect.set(0, 0, 0, mDrawable.getIntrinsicHeight());
+ } else {
+ outRect.set(0, 0, mDrawable.getIntrinsicWidth(), 0);
+ }
+ }
+}
diff --git a/app/src/main/java/xyz/fycz/myreader/widget/RefreshLayout.java b/app/src/main/java/xyz/fycz/myreader/widget/RefreshLayout.java
new file mode 100644
index 0000000..4faad4d
--- /dev/null
+++ b/app/src/main/java/xyz/fycz/myreader/widget/RefreshLayout.java
@@ -0,0 +1,267 @@
+package xyz.fycz.myreader.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import xyz.fycz.myreader.R;
+
+/**
+ * Created by newbiechen on 17-4-22.
+ * 功能:
+ * 1. 加载动画
+ * 2. 加载错误点击重新加载
+ */
+
+public class RefreshLayout extends FrameLayout {
+
+ private static final String TAG = "RefreshLayout";
+
+ protected static final int STATUS_LOADING = 0;
+ protected static final int STATUS_FINISH = 1;
+ protected static final int STATUS_ERROR = 2;
+ protected static final int STATUS_EMPTY = 3;
+
+ private Context mContext;
+
+ private int mEmptyViewId;
+ private int mErrorViewId;
+ private int mLoadingViewId;
+
+ private View mEmptyView;
+ private View mErrorView;
+ private View mLoadingView;
+ private View mContentView;
+
+ private OnReloadingListener mListener;
+ private int mStatus = 0;
+
+ public RefreshLayout(Context context) {
+ this(context,null);
+ }
+
+ public RefreshLayout(Context context, AttributeSet attrs) {
+ this(context, attrs,0);
+ }
+
+ public RefreshLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ mContext = context;
+ initAttrs(attrs);
+ initView();
+ }
+
+ private void initAttrs(AttributeSet attrs){
+ TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.RefreshLayout);
+ mEmptyViewId = typedArray.getResourceId(R.styleable.RefreshLayout_layout_refresh_empty,R.layout.view_empty);
+ mErrorViewId = typedArray.getResourceId(R.styleable.RefreshLayout_layout_refresh_error,R.layout.view_net_error);
+ mLoadingViewId = typedArray.getResourceId(R.styleable.RefreshLayout_layout_refresh_loading,R.layout.view_loading);
+
+ typedArray.recycle();
+ }
+
+ private void initView(){
+
+ //添加在empty、error、loading 情况下的布局
+ mEmptyView = inflateView(mEmptyViewId);
+ mErrorView = inflateView(mErrorViewId);
+ mLoadingView = inflateView(mLoadingViewId);
+
+ addView(mEmptyView);
+ addView(mErrorView);
+ addView(mLoadingView);
+
+ //设置监听器
+ mErrorView.setOnClickListener(
+ (view) -> {
+ if (mListener != null){
+ toggleStatus(STATUS_LOADING);
+ mListener.onReload();
+ }
+ }
+ );
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ toggleStatus(STATUS_LOADING);
+ }
+
+ @Override
+ public void onViewAdded(View child) {
+ super.onViewAdded(child);
+ if (getChildCount() == 4){
+ mContentView = child;
+ }
+ }
+
+ //除了自带的数据,保证子类只能够添加一个子View
+ @Override
+ public void addView(View child) {
+ if (getChildCount() > 4) {
+ throw new IllegalStateException("RefreshLayout can host only one direct child");
+ }
+ super.addView(child);
+ }
+
+ @Override
+ public void addView(View child, int index) {
+ if (getChildCount() > 4) {
+ throw new IllegalStateException("RefreshLayout can host only one direct child");
+ }
+
+ super.addView(child, index);
+ }
+
+ @Override
+ public void addView(View child, ViewGroup.LayoutParams params) {
+ if (getChildCount() > 4) {
+ throw new IllegalStateException("RefreshLayout can host only one direct child");
+ }
+
+ super.addView(child, params);
+ }
+
+ @Override
+ public void addView(View child, int index, ViewGroup.LayoutParams params) {
+ if (getChildCount() > 4) {
+ throw new IllegalStateException("RefreshLayout can host only one direct child");
+ }
+
+ super.addView(child, index, params);
+ }
+
+ public void showLoading(){
+ if (mStatus != STATUS_LOADING){
+ toggleStatus(STATUS_LOADING);
+ }
+ }
+
+ public void showFinish(){
+ if (mStatus == STATUS_LOADING){
+ toggleStatus(STATUS_FINISH);
+ }
+ }
+
+ public void showError(){
+ if (mStatus != STATUS_ERROR){
+ toggleStatus(STATUS_ERROR);
+ }
+ }
+
+ public void showEmpty(){
+ if (mStatus != STATUS_EMPTY){
+ toggleStatus(STATUS_EMPTY);
+ }
+ }
+
+ //视图根据状态切换
+ private void toggleStatus(int status){
+ switch (status){
+ case STATUS_LOADING:
+ mLoadingView.setVisibility(VISIBLE);
+ mEmptyView.setVisibility(GONE);
+ mErrorView.setVisibility(GONE);
+ if (mContentView != null){
+ mContentView.setVisibility(GONE);
+ }
+ break;
+ case STATUS_FINISH:
+ if (mContentView != null){
+ mContentView.setVisibility(VISIBLE);
+ }
+ mLoadingView.setVisibility(GONE);
+ mEmptyView.setVisibility(GONE);
+ mErrorView.setVisibility(GONE);
+ break;
+ case STATUS_ERROR:
+ mErrorView.setVisibility(VISIBLE);
+ mLoadingView.setVisibility(GONE);
+ mEmptyView.setVisibility(GONE);
+ if (mContentView != null){
+ mContentView.setVisibility(GONE);
+ }
+ break;
+ case STATUS_EMPTY:
+ mEmptyView.setVisibility(VISIBLE);
+ mErrorView.setVisibility(GONE);
+ mLoadingView.setVisibility(GONE);
+ if (mContentView != null){
+ mContentView.setVisibility(GONE);
+ }
+ break;
+ }
+ mStatus = status;
+ }
+
+ protected int getStatus(){
+ return mStatus;
+ }
+
+ public void setOnReloadingListener(OnReloadingListener listener){
+ mListener = listener;
+ }
+
+ private View inflateView(int id){
+ return LayoutInflater.from(mContext)
+ .inflate(id,this,false);
+ }
+
+ //数据存储
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ Parcelable superParcel = super.onSaveInstanceState();
+ SavedState savedState = new SavedState(superParcel);
+ savedState.status = mStatus;
+ return savedState;
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ SavedState savedState = (SavedState) state;
+ super.onRestoreInstanceState(savedState.getSuperState());
+ //刷新状态
+ toggleStatus(savedState.status);
+ }
+
+ static class SavedState extends BaseSavedState {
+ int status;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ status = in.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(status);
+ }
+
+ public static final Creator CREATOR
+ = new Creator() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ //添加错误重新加载的监听
+ public interface OnReloadingListener{
+ void onReload();
+ }
+}
diff --git a/app/src/main/java/xyz/fycz/myreader/widget/page/PageView.java b/app/src/main/java/xyz/fycz/myreader/widget/page/PageView.java
index ceaf428..83056d9 100644
--- a/app/src/main/java/xyz/fycz/myreader/widget/page/PageView.java
+++ b/app/src/main/java/xyz/fycz/myreader/widget/page/PageView.java
@@ -346,9 +346,9 @@ public class PageView extends View {
}
// 获取具体的加载器
if ("本地书籍".equals(collBook.getType())){
- mPageLoader = new LocalPageLoader(this, collBook, new ChapterService(), setting);
+ mPageLoader = new LocalPageLoader(this, collBook, ChapterService.getInstance(), setting);
}else {
- mPageLoader = new NetPageLoader(this, collBook, new ChapterService(), mReadCrawler, setting);
+ mPageLoader = new NetPageLoader(this, collBook, ChapterService.getInstance(), mReadCrawler, setting);
}
// 判断是否 PageView 已经初始化完成
if (mViewWidth != 0 || mViewHeight != 0) {
diff --git a/app/src/main/res/color/selector_btn_file_add.xml b/app/src/main/res/color/selector_btn_file_add.xml
new file mode 100644
index 0000000..ba3485d
--- /dev/null
+++ b/app/src/main/res/color/selector_btn_file_add.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_btn_file_delete.xml b/app/src/main/res/color/selector_btn_file_delete.xml
new file mode 100644
index 0000000..6ef72c8
--- /dev/null
+++ b/app/src/main/res/color/selector_btn_file_delete.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_cb_file.xml b/app/src/main/res/color/selector_cb_file.xml
new file mode 100644
index 0000000..acfdd26
--- /dev/null
+++ b/app/src/main/res/color/selector_cb_file.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/ic_back_last.png b/app/src/main/res/drawable-xhdpi/ic_back_last.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fede2323345fd6a1ba199d0a93f0512afc78d78
GIT binary patch
literal 616
zcmV-u0+;=XP)vz`c_4fPy{#B$7HjHh+Ik!bbUxW}()^#VM
zlf`0jFdmO9wz>!++ki3V2mmI59>+?l2>{d)T38U40c-6WA;jyLjzsicYyC0?%fYlZ
z;GCNf(NW80uMqKFOHLHLl>uw5-*>Yp0Nt7Aw?Om);w?)xuUP}-Xfy^a1gw*8Cac0MDz>*9t1mY0Qipvx1Kxy1l?a=CaVfn1a1)+q^aCzp#?638`4Zk<0a3DhxVp~-;&0000U!prw3eNZ(C`C^{Wz`*#?)5S5Q;?~<)H}jee1Y8Y&hlxFQc<|qT3-d|u
z#b&JDJmIHo`wuRTIa?u?)6^i~#G%-NOq^()VbC?%W
z-`kseUhZoT&(tcU7K>
zUrkGYPq$vFVZODl%Ea%r-i242FTFmVEGBfrE7MKLUgx-vnBm2l3#9sGRd#O)^bB3O
z>T}@Y$gFK{ho-fc-zmO6)#{~z?Dkn9L5Dm-Y?(qlV$Q$+AGFy@ez)J^c31XYue{rP
zP100fC#RdLEkCkZ*z>%%pSZej&4-QBDG?U2F=5xw9Y1%qv}~8fN|iX(gC4p+a|$mc
zw)%0r2x5wDS$JE#%_eIn1JS@
z0Xfda7M`19R@!(^w%~d?Lo{{iiuP5foLX)zlbf;kT_@t+}pltJdCU&OPDv_+!E1
zIcg`AdifTHbym^36IZj;TdeaB-_8B@+x`2d-Yc}qw}1PvHMn)fpWWHF*TrgT
z%KW>ttBglca8+d9+mFwS*S)^}KVzk|J8!r6?m(R-;g@zAmiYZuE4Dw}d+F-aP4DJg
z%bt6eH)XBf^|#afzWWrK?e6`x?CR5y^SP4Ygw9kTk>1B
zmSg809TO1P8)CF+^G?Ghlj?-zZbaUdnDk*m&DS??@_3$RNBpoZ6VBslt-oSa`)1i4
ziKu0Tn}2Sr-gS4+z5T~>f1S=d)VtL8dQ8E-GBNXM+ljlH_wAOPESdq5^mO%e
JS?83{1OVP$QQ!ao
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable-xhdpi/ic_file_loaded.png b/app/src/main/res/drawable-xhdpi/ic_file_loaded.png
new file mode 100644
index 0000000000000000000000000000000000000000..30193ee50dad7a88055a3d3c41d0f81ccc313fd5
GIT binary patch
literal 1007
zcmeAS@N?(olHy`uVBq!ia0vp^b3mAb8A$F;GpYwt6#+gWu0ZLkJpJD|E|2u5{b9rK#q7b|EvINhSY9)J2?#^J%4z@Yd-B5f-Yc2x=
z(?3ra$B>F!Z)d$OTI3+m%DD4XLqmhYL$$bj|9Q6`JdzqSEn$_+GOg#omzQWApEq+K
zZx<8LCRC8%8j`zMdRgl2X_+sieW$w5++3P_EOB?VJ6Gns{mH^_YVvC{-^F?hxZSh!
zn^f`MHL>9Tx!CZysvWCO%oDqK^4%={msPilR)-hpESo2K{NK!}>zBS=d_O1k>;B`R
zH}m)Qhb~dI`uo1>nsKGCTGb|}KL)?fik+7}`uCb~i~H0i*RO54KXa?^dcQ62GknXJ
ztG21%nz8G_W(Ph?U1QscD=!33oNPU7>9H-FtQ!SYm;QLR&3kRMmFTn`89tQ@`=-x6
zE)vLh=#%E#MbocoF1Ht$nw~k+OK(j`rAX<$bc^ouvbC#rOzJCY)jn6)Kj&)J!>6lL
zjQAsMR9Y9NaLxK7cwZ}V-Dl0~_H)EOgw9Frv%lJZ$04*qUnPIy;;xP2Cq3&f%k(ak
zDw|nrY1S*x^X`qDDOY6YiKN>f|6M#`8!zh|J+Xe>x%7^}z1+z+E9U1Nm1)n>S@-1A
zv8ksE>UoV7-JO-N!H3GR9&y_6i~MPXh41gAfX
z`qjI`!{up8!NU@P?UGHiOXrHZJ07ptZ6UPj`O%{)Yjj@zPV&1m&*;SMqk&sR>?_~d
zsBAto`)ka9;d^?0N}iu4GfxcAiS(Sa%1bdXEAs2Cx37}-{oCXx!*S|k+5E5HSIc*-
z4EPkd#j9|a>gx7MCl&TQaNyuP6trA_rSSeMs+VIn&Me;d=!k35ul3K3Y&m!@Z(IAI
z;Ps_F#k+dzHs;*kV{(iu)$00#4F9v!kJg`aF}H}xUa>LK=;B(%>mk-+tJg=ZQuCV{
z>%Duw9OvTAlT}uhbI*w7$X~Uy(4|W5{N!CZHb>Tcdvsi|h`(rwT;oYwn<-Uqw7wsR
zdKb9=&UBTac>R;LhRZ!_m##cfE2;C{beGasZjNS~%J{nyVuAOj$Gx+ixn(^!BWj{$
cU^tNfgugx7tLewrmAxQ2Pgg&ebxsLQ0K~oX6aWAK
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable-xhdpi/ic_no_data.png b/app/src/main/res/drawable-xhdpi/ic_no_data.png
new file mode 100644
index 0000000000000000000000000000000000000000..2578fbe396da87239cc4a35f0bb1cfa67310e9f0
GIT binary patch
literal 5615
zcmaJ_c{r4N`?rJ=<|tWZ
zrLvQy6h$#a(vT4S#(B>|c2O_q@;bd7kfb-S_8Sujh|D&DPqCpI4lhjg5`p!W?1G
zT4!1B-NW3hud*=Bi?xUmkuF3Bd;l>99f@Hx^2hsPfEGA(AjTep_CFu-9HYy|#wmk!
zbRoK+tl)lloC^9tMumh6XKAys=^Bv2(S9KqBG4BThz-+|S!-&O0b>32WSn6rRaCeM
zCJ1XD8;Nm>XP6r0vv{j29j{0VFWlyPv#F^IBS1!4VD4^Awmq%
zllhlZE+|`|2|f}7gsG@2`>8@8Kn)EQ2o$EF0Z{^~sY2Aisw`+IL!fY&23$=O_~#?T
zvKHwd0Jle&{%MPK(vt}y62swOa7;{$N{qS+J~9vt(bm>J;80UjW=SX$&W91vB;_yy
z=r0BYhTs>84JTspVZZ}Mv@br2s3*hn^j{(1!vCfXBm9{rR>Hs}bT}BIqIwY0UxFyq
z{}#pJ{+1>X?J@uM_rDSo9M6Yi!1fpdJ}T0WRk#4qfvIq~NhAhM#78>f@u7cZ(KZNA
z#1n$>;Xo4y4WNQEHq0L%Lpc41JPHN32qO^DVSX43gq{qGK?RHThns4tLp9Wlj9^Bl
z5C{aRVXS3hs-Sw>(YvC$ZR
z(?~oH_(#Za>_7XW^^bgi>iYk)FWUd83uZY3J}B&e6#B0#R`(oi|885>;qS)Bgt59k
zlGWDh=%6Atwqt%42qQ<*>y?6--_MPo=ox~Va!Ht*bsZihA~H-L3JKadBDzIyOc`c)
z-p)cKnO?dzT9W*$aA+-(X$E!eLHs6q7D@++L%Dz9GO~R_l-uolh5v{l_cyJ*{rb6O
zakpx-Dlai_H%xo>?e4~dCr{uehtmopXE=<5^bc@&!0Z6U+Xs+_N*y3&0d#<2@}KyH
zcJ%*!@=0q$;nS3TU9`WLlM1giLD*sTPstiQK(64$EvnA
z%Z*Dxr3{G?dAc^8OQD2*Y3E`D=j0TUc$aa(Ei4?RL!~hueYUI7RUXe7P=ic`wpe@Y
z`kuZY;zCS6&1~{$Hpv1XA8<<(u!S9u`eoCWc}{5Ec)Bb}%=<)((oRcIRuJJxjfmjA
z7KW^yl$}k>zVDREYsDS=jcnSntaX0a2lxPA{uMH`NYm$W(ell
9`3e*o+lS
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 <~^b6lh
z_Mix@6k^
zRmR}(F40Ckbk9oN6X_{aJ4^lZv?>B4q8X>3!glJ~n#Zdh{w(FoCw^=;QE&b8rxY&eObMI
zx1wIRqP`HLvg3^S_LaF>_O?sr*yk_3;XLPUD<1S`ft?vgn{uC})TiojSi)M!gESe`
z<$K|DkF^EW0UmwzXazvn@`cpo`(qs6uwB0wzDVHzUQKQ+Gvo}TJR`m0&MzrysBdpG
ziHlD1SS-80Oy2C^K{MM48)wFbKO{#+dJT`*B(m3h4Qfvp{0tqj{yZoeU(!3YCwFEJ
z7tAP2?bdCnFi9@}m|x>x_+IP|Os_C?`SLAzWJQ-NmVQ-8RgtrLYz1#$?WnHEOuVsE
z)@k_4HI=$1r?-O^m_|#V`l*L93S4U^1;w2_VK{$TYPcvD>*>jAjGHfQyQnY7rk~;-
z!f=g!;ZFx-A2!rVAT$6=-yhMGTkLB_IC>;JedjS|?G@te&XZKqlumqPD@CMqTTN*q
zJY6|%@%~Bq?09;yT(cN}0OJ^Zp*B;VD++c#aZ{EEO4z!)
zyRQ_{=Q5+T;o>^4-`m;&=JDl%X#&LG0NET{Zj_IA`n%eic-cdn1Rg;xAl`A&BIBYu
z8C_EhSgS^Ryh+~4{@C^Q
zdxX~V#qF}e-$*aFo0H_GuR2o548P9)Wrw=X+3c$-!a!w&=4h|4AyI)~h~(|h;a7ZE
zRPLo3o%t$}Osw^7v{=ZjFO4H?SFwgJ*Sr`1VU}vfZ;tPjR#wZ)8r-&ef2=O{elmFUY4bUQQ?C7%(L$ZPmxcBz
ypG?{!q3hOt5lnfCEk2rI7}W!&%sNy&%S|HgZGLrS>0zMz7(8A5T-G@yGywpV&r;<8
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/ic_book_has.xml b/app/src/main/res/drawable/ic_book_has.xml
new file mode 100644
index 0000000..a920e50
--- /dev/null
+++ b/app/src/main/res/drawable/ic_book_has.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_folder.xml b/app/src/main/res/drawable/ic_folder.xml
new file mode 100644
index 0000000..cb2a84c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_folder.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_tag_txt.xml b/app/src/main/res/drawable/ic_tag_txt.xml
new file mode 100644
index 0000000..1cfc74d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_tag_txt.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_btn_add.xml b/app/src/main/res/drawable/selector_btn_add.xml
new file mode 100644
index 0000000..d0b5df1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_btn_add.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_btn_delete.xml b/app/src/main/res/drawable/selector_btn_delete.xml
new file mode 100644
index 0000000..bdf86fb
--- /dev/null
+++ b/app/src/main/res/drawable/selector_btn_delete.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_cb_file.xml b/app/src/main/res/drawable/selector_cb_file.xml
new file mode 100644
index 0000000..17deb8d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_cb_file.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_common_bg.xml b/app/src/main/res/drawable/selector_common_bg.xml
new file mode 100644
index 0000000..701a4c2
--- /dev/null
+++ b/app/src/main/res/drawable/selector_common_bg.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pwd.xml b/app/src/main/res/drawable/selector_pwd.xml
new file mode 100644
index 0000000..f3b6764
--- /dev/null
+++ b/app/src/main/res/drawable/selector_pwd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_blue.xml b/app/src/main/res/drawable/shape_blue.xml
new file mode 100644
index 0000000..a61553f
--- /dev/null
+++ b/app/src/main/res/drawable/shape_blue.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_corner_black.xml b/app/src/main/res/drawable/shape_corner_black.xml
new file mode 100644
index 0000000..44b77df
--- /dev/null
+++ b/app/src/main/res/drawable/shape_corner_black.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_corner_blue.xml b/app/src/main/res/drawable/shape_corner_blue.xml
new file mode 100644
index 0000000..ecf07cf
--- /dev/null
+++ b/app/src/main/res/drawable/shape_corner_blue.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_unclick.xml b/app/src/main/res/drawable/shape_unclick.xml
new file mode 100644
index 0000000..3cca521
--- /dev/null
+++ b/app/src/main/res/drawable/shape_unclick.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml
index add0a94..20811a5 100644
--- a/app/src/main/res/layout/activity_book_info.xml
+++ b/app/src/main/res/layout/activity_book_info.xml
@@ -31,7 +31,7 @@
android:layout_width="80dp"
android:layout_height="120dp"
android:scaleType="fitXY"
- app:srcCompat="@mipmap/no_image"/>
+ app:srcCompat="@mipmap/default_cover"/>
diff --git a/app/src/main/res/layout/activity_file_system.xml b/app/src/main/res/layout/activity_file_system.xml
new file mode 100644
index 0000000..46f0b49
--- /dev/null
+++ b/app/src/main/res/layout/activity_file_system.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 05e3323..336147e 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -119,11 +119,10 @@
android:textSize="20dp" />
-
+ android:textSize="18dp" />-->
-
+
+
+
+
+
+
+
+
+
+
-
+ android:textSize="18dp" />-->
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
index 60a6e55..072ea86 100644
--- a/app/src/main/res/layout/activity_register.xml
+++ b/app/src/main/res/layout/activity_register.xml
@@ -70,49 +70,82 @@
android:textColor="@color/sys_red"
android:visibility="gone" />
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_file_category.xml b/app/src/main/res/layout/fragment_file_category.xml
new file mode 100644
index 0000000..271f11a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_file_category.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_local_book.xml b/app/src/main/res/layout/fragment_local_book.xml
new file mode 100644
index 0000000..6a913aa
--- /dev/null
+++ b/app/src/main/res/layout/fragment_local_book.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/gridview_book_detailed_item.xml b/app/src/main/res/layout/gridview_book_detailed_item.xml
index 87ff587..867f81c 100644
--- a/app/src/main/res/layout/gridview_book_detailed_item.xml
+++ b/app/src/main/res/layout/gridview_book_detailed_item.xml
@@ -16,7 +16,7 @@
android:layout_width="64dp"
android:layout_height="88dp"
android:scaleType="fitXY"
- app:srcCompat="@mipmap/no_image"/>
+ app:srcCompat="@mipmap/default_cover"/>
+ app:srcCompat="@mipmap/default_cover"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/listview_book_store_book_item.xml b/app/src/main/res/layout/listview_book_store_book_item.xml
index 8f50a36..a1b1070 100644
--- a/app/src/main/res/layout/listview_book_store_book_item.xml
+++ b/app/src/main/res/layout/listview_book_store_book_item.xml
@@ -12,7 +12,7 @@
android:layout_width="70dp"
android:layout_height="100dp"
android:scaleType="fitXY"
- app:srcCompat="@mipmap/no_image" />
+ app:srcCompat="@mipmap/default_cover" />
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_empty.xml b/app/src/main/res/layout/view_empty.xml
new file mode 100644
index 0000000..f4e7494
--- /dev/null
+++ b/app/src/main/res/layout/view_empty.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_loading.xml b/app/src/main/res/layout/view_loading.xml
new file mode 100644
index 0000000..e5fdb46
--- /dev/null
+++ b/app/src/main/res/layout/view_loading.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_net_error.xml b/app/src/main/res/layout/view_net_error.xml
new file mode 100644
index 0000000..bd881ad
--- /dev/null
+++ b/app/src/main/res/layout/view_net_error.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xhdpi/default_cover.jpg b/app/src/main/res/mipmap-xhdpi/default_cover.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3515f68b95f0397081b9d5d2f3d572c8a758dc70
GIT binary patch
literal 64772
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 |