From 411802a47e72d51d6a396eeffe1742fd401efd8b Mon Sep 17 00:00:00 2001 From: leiyun Date: Sat, 8 May 2021 20:28:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=BB=E4=B9=A6=E9=A1=B5=E9=9D=A2=E2=80=94?= =?UTF-8?q?=E2=80=94=E5=A4=84=E7=90=86pdf=E5=92=8Ctxt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + app/src/main/java/com/yzx/webebook/App.kt | 11 +- .../java/com/yzx/webebook/MainActivity.kt | 32 ++- .../yzx/webebook/activity/ReadActivity.java | 141 +++------ .../com/yzx/webebook/activity/WebActivity.kt | 32 ++- .../main/java/com/yzx/webebook/model/Book.kt | 23 ++ .../model/local/ReadSettingManager.java | 2 +- .../yzx/webebook/presenter/ReadPresenter.java | 125 +++++++- .../com/yzx/webebook/presenter/ReadView.java | 2 +- .../com/yzx/webebook/utils/FileUtils.java | 58 ++++ .../webebook/widget/ReadSettingDialog.java | 55 +++- .../webebook/widget/page/LocalPageLoader.java | 2 +- .../yzx/webebook/widget/page/PageView.java | 44 +-- .../res/color/selector_btn_read_setting.xml | 8 +- app/src/main/res/drawable/seekbar_bg.xml | 10 +- .../shape_btn_read_setting_checked.xml | 2 +- app/src/main/res/drawable/shape_dialog.xml | 9 + app/src/main/res/layout/activity_read.xml | 90 +++--- .../main/res/layout/dialog_read_setting.xml | 271 +++++++++++++----- .../mipmap-xhdpi/ic_read_menu_category.png | Bin 503 -> 257 bytes .../mipmap-xhdpi/ic_read_menu_download.png | Bin 547 -> 399 bytes .../res/mipmap-xhdpi/ic_read_menu_font.png | Bin 611 -> 1147 bytes .../res/mipmap-xhdpi/ic_read_menu_morning.png | Bin 1097 -> 1159 bytes .../res/mipmap-xhdpi/ic_read_menu_night.png | Bin 1106 -> 1326 bytes .../res/mipmap-xhdpi/seekbar_thumb_normal.png | Bin 1607 -> 750 bytes .../mipmap-xhdpi/seekbar_thumb_selected.png | Bin 1886 -> 750 bytes app/src/main/res/values/colors.xml | 12 +- app/src/main/res/values/styles.xml | 4 +- app/src/main/res/values/styles_text.xml | 2 +- 29 files changed, 648 insertions(+), 289 deletions(-) create mode 100644 app/src/main/java/com/yzx/webebook/model/Book.kt create mode 100644 app/src/main/res/drawable/shape_dialog.xml diff --git a/app/build.gradle b/app/build.gradle index fbb58b7..53f5398 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,6 +74,8 @@ android { shrinkResources false buildConfigField "String", "BASE_URL", '"http://192.168.69.99:9009"' buildConfigField "String", "M_URL", '"http://192.168.69.112:8098"' +// buildConfigField "String", "BASE_URL", '"https://oa.live.educlouddata.com"' +// buildConfigField "String", "M_URL", '"https://m.live.educlouddata.com/"' buildConfigField "String", "APP_NAME", '"家校互通(开发)"' } diff --git a/app/src/main/java/com/yzx/webebook/App.kt b/app/src/main/java/com/yzx/webebook/App.kt index 9359ffa..9d6aad8 100644 --- a/app/src/main/java/com/yzx/webebook/App.kt +++ b/app/src/main/java/com/yzx/webebook/App.kt @@ -5,9 +5,11 @@ import android.content.Context import android.util.Log import com.blankj.utilcode.util.Utils import com.lzy.okgo.OkGo +import com.lzy.okgo.model.HttpHeaders import com.umeng.analytics.MobclickAgent import com.umeng.commonsdk.UMConfigure import com.yzx.webebook.adapter.ImageAdapter +import com.yzx.webebook.model.User import com.yzx.webebook.modules.ActivityWXModule import org.apache.weex.InitConfig import org.apache.weex.WXEnvironment @@ -44,7 +46,14 @@ class App : Application() { Log.i("welog", "WXSDKEngine.isInitializedApplication: " + WXSDKEngine.isInitialized()) Log.i("welog", "WXSDKEngine.registerModule: $registerSuccess") - OkGo.getInstance().init(this) + + val headers = HttpHeaders() + val user = User.getUser() + headers.put("phone",user.phone) + headers.put("token",user.token) + OkGo.getInstance() + .addCommonHeaders(headers) + .init(this) Utils.init(this) diff --git a/app/src/main/java/com/yzx/webebook/MainActivity.kt b/app/src/main/java/com/yzx/webebook/MainActivity.kt index ea03601..e06af32 100644 --- a/app/src/main/java/com/yzx/webebook/MainActivity.kt +++ b/app/src/main/java/com/yzx/webebook/MainActivity.kt @@ -13,8 +13,8 @@ import com.yzx.webebook.config.Config import com.yzx.webebook.model.User import com.yzx.webebook.model.bean.CollBookBean import com.yzx.webebook.model.local.BookRepository -import com.yzx.webebook.presenter.base.BasePresenter -import com.yzx.webebook.utils.MD5Utils +import com.yzx.webebook.presenter.ReadPresenter +import com.yzx.webebook.presenter.ReadView import kotlinx.android.synthetic.main.activity_main.* import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast @@ -24,7 +24,7 @@ import org.jetbrains.anko.toast * Yun.Lei * 2020年5月6日14:49:10 */ -class MainActivity : BaseActivity>() { +class MainActivity : BaseActivity(),ReadView { override val inflateId: Int @@ -67,7 +67,7 @@ class MainActivity : BaseActivity>() { Config.APP_NAME = "家校互通(本地)" Config.BASE_URL = mBaseUrl Config.M_URL = mUrl - User.clearUserInfo() +// User.clearUserInfo() startActivity() } btn4.setOnClickListener { @@ -88,7 +88,9 @@ class MainActivity : BaseActivity>() { } btn7.setOnClickListener { - startActivity() + + + mPresenter?.loadCategory("17") } /*OkGo.post("https://fileupload.oa.qbjjyyun.net/edufile/fileUpload") @@ -144,9 +146,9 @@ class MainActivity : BaseActivity>() { } fun saveDb(){ - val path = "/storage/emulated/0/sgyy.txt"; + val path = "/storage/emulated/0/xxjs.pdf"; val collBook = CollBookBean() - collBook._id = MD5Utils.strToMd5By16(path) + collBook._id = "xxjs" collBook.title = "三国演义sgyy" collBook.author = "yzx" collBook.shortIntro = "" @@ -160,7 +162,7 @@ class MainActivity : BaseActivity>() { .saveCollBooks(mutableListOf(collBook)) } - override fun initPresenter(): BasePresenter<*>? = null + override fun initPresenter(): ReadPresenter = ReadPresenter(this) @SuppressLint("SetTextI18n") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -184,4 +186,18 @@ class MainActivity : BaseActivity>() { backInfo.text = json } } + + override fun finishChapter() { + + } + + override fun errorChapter() { + + } + + override fun showCategory(localId: String?) { +// startActivity("book_id" to "xxjs") + + + } } diff --git a/app/src/main/java/com/yzx/webebook/activity/ReadActivity.java b/app/src/main/java/com/yzx/webebook/activity/ReadActivity.java index a2e32ac..9accc49 100644 --- a/app/src/main/java/com/yzx/webebook/activity/ReadActivity.java +++ b/app/src/main/java/com/yzx/webebook/activity/ReadActivity.java @@ -83,9 +83,9 @@ public class ReadActivity extends BaseActivity implements ReadVie DrawerLayout mDlSlide; /*************top_menu_view*******************/ - AppBarLayout mAblTopMenu; - TextView mTvCommunity; - TextView mTvBrief; +// AppBarLayout mAblTopMenu; +// TextView mTvCommunity; +// TextView mTvBrief; /***************content_view******************/ PageView mPvPage; /***************bottom_menu_view***************************/ @@ -143,11 +143,15 @@ public class ReadActivity extends BaseActivity implements ReadVie public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) { int level = intent.getIntExtra("level", 0); - mPageLoader.updateBattery(level); + if (mPageLoader != null) { + mPageLoader.updateBattery(level); + } } // 监听分钟的变化 else if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) { - mPageLoader.updateTime(); + if (mPageLoader != null) { + mPageLoader.updateTime(); + } } } }; @@ -195,9 +199,8 @@ public class ReadActivity extends BaseActivity implements ReadVie @Override public void initView() { mDlSlide = findViewById(R.id.read_dl_slide); - mAblTopMenu = findViewById(R.id.read_abl_top_menu); - mTvCommunity = findViewById(R.id.read_tv_community); - mTvBrief = findViewById(R.id.read_tv_brief); +// mTvCommunity = findViewById(R.id.read_tv_community); +// mTvBrief = findViewById(R.id.read_tv_brief); mPvPage = findViewById(R.id.read_pv_page); mTvPageTip = findViewById(R.id.read_tv_page_tip); mLlBottomMenu = findViewById(R.id.read_ll_bottom_menu); @@ -208,28 +211,25 @@ public class ReadActivity extends BaseActivity implements ReadVie mTvNightMode = findViewById(R.id.read_tv_night_mode); mTvSetting = findViewById(R.id.read_tv_setting); mLvCategory = findViewById(R.id.read_iv_category); - - - } @Override public void initData() { -// mCollBook = getIntent().getParcelableExtra(EXTRA_COLL_BOOK); - - mCollBook = BookRepository.getInstance().getCollBook("75979111277b0955"); + String id = getIntent().getStringExtra("book_id"); + loadBookData(id); + } + private void loadBookData(String id) { + mCollBook = BookRepository.getInstance().getCollBook(id); - isCollected = getIntent().getBooleanExtra(EXTRA_IS_COLLECTED, false); isNightMode = ReadSettingManager.getInstance().isNightMode(); isFullScreen = ReadSettingManager.getInstance().isFullScreen(); - mBookId = mCollBook.get_id(); - Log.d(TAG, "initData: " + mCollBook.toString()); //获取页面加载器 mPageLoader = mPvPage.getPageLoader(mCollBook); + //禁止滑动展示DrawerLayout mDlSlide.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); //侧边打开后,返回键能够起作用 @@ -258,13 +258,6 @@ public class ReadActivity extends BaseActivity implements ReadVie PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "ireader:keep bright"); - //隐藏StatusBar - mPvPage.post( - () -> hideSystemBar() - ); - - //初始化TopMenu - initTopMenu(); //初始化BottomMenu initBottomMenu(); @@ -279,20 +272,25 @@ public class ReadActivity extends BaseActivity implements ReadVie mPageLoader.getCollBook().setBookChapters(bookChapterBeen); // 刷新章节列表 mPageLoader.refreshChapterList(); - // 如果是网络小说并被标记更新的,则从网络下载目录 -// if (mCollBook.isUpdate() && !mCollBook.isLocal()) { -// getMPresenter().loadCategory(mBookId); -// } LogUtils.e(throwable); } ); addDisposable(disposable); - initClick(); } + private void saveBookInfo() { + if(mCollBook!=null){ + mCollBook.setLastRead(StringUtils. + dateConvert(System.currentTimeMillis(), Constant.FORMAT_BOOK_DATE)); + + BookRepository.getInstance() + .saveCollBookWithAsync(mCollBook); + } + } - private void initClick(){ + + private void initClick() { mPageLoader.setOnPageChangeListener( new PageLoader.OnPageChangeListener() { @@ -444,20 +442,6 @@ public class ReadActivity extends BaseActivity implements ReadVie } ); -// mTvBrief.setOnClickListener( -// (v) -> BookDetailActivity.startActivity(this, mBookId) -// ); - -// mTvCommunity.setOnClickListener( -// (v) -> { -// Intent intent = new Intent(this, CommunityActivity.class); -// startActivity(intent); -// } -// ); - - mSettingDialog.setOnDismissListener( - dialog -> hideSystemBar() - ); } @Nullable @@ -467,8 +451,8 @@ public class ReadActivity extends BaseActivity implements ReadVie } @Override - public void showCategory(List bookChapterList) { - + public void showCategory(String localId) { + loadBookData(localId); } @Override @@ -481,12 +465,6 @@ public class ReadActivity extends BaseActivity implements ReadVie } - private void initTopMenu() { -// if (Build.VERSION.SDK_INT >= 19) { -// mAblTopMenu.setPadding(0, ScreenUtils.getStatusBarHeight(), 0, 0); -// } - } - private void initBottomMenu() { //判断是否全屏 if (ReadSettingManager.getInstance().isFullScreen()) { @@ -505,7 +483,6 @@ public class ReadActivity extends BaseActivity implements ReadVie @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); - Log.d(TAG, "onWindowFocusChanged: " + mAblTopMenu.getMeasuredHeight()); } private void toggleNightMode() { @@ -564,8 +541,7 @@ public class ReadActivity extends BaseActivity implements ReadVie * @return 是否隐藏成功 */ private boolean hideReadMenu() { - hideSystemBar(); - if (mAblTopMenu.getVisibility() == VISIBLE) { + if (mLlBottomMenu.getVisibility() == VISIBLE) { toggleMenu(true); return true; } else if (mSettingDialog.isShowing()) { @@ -575,21 +551,6 @@ public class ReadActivity extends BaseActivity implements ReadVie return false; } - private void showSystemBar() { - //显示 -// SystemBarUtils.showUnStableStatusBar(this); -// if (isFullScreen) { -// SystemBarUtils.showUnStableNavBar(this); -// } - } - - private void hideSystemBar() { - //隐藏 -// SystemBarUtils.hideStableStatusBar(this); -// if (isFullScreen) { -// SystemBarUtils.hideStableNavBar(this); -// } - } /** * 切换菜单栏的可视状态 @@ -598,24 +559,12 @@ public class ReadActivity extends BaseActivity implements ReadVie private void toggleMenu(boolean hideStatusBar) { initMenuAnim(); - if (mAblTopMenu.getVisibility() == View.VISIBLE) { + if (mLlBottomMenu.getVisibility() == View.VISIBLE) { //关闭 - mAblTopMenu.startAnimation(mTopOutAnim); - mLlBottomMenu.startAnimation(mBottomOutAnim); - mAblTopMenu.setVisibility(GONE); mLlBottomMenu.setVisibility(GONE); mTvPageTip.setVisibility(GONE); - - if (hideStatusBar) { - hideSystemBar(); - } } else { - mAblTopMenu.setVisibility(View.VISIBLE); mLlBottomMenu.setVisibility(View.VISIBLE); - mAblTopMenu.startAnimation(mTopInAnim); - mLlBottomMenu.startAnimation(mBottomInAnim); - - showSystemBar(); } } @@ -634,7 +583,7 @@ public class ReadActivity extends BaseActivity implements ReadVie @Override public void onBackPressed() { - if (mAblTopMenu.getVisibility() == View.VISIBLE) { + if (mLlBottomMenu.getVisibility() == View.VISIBLE) { // 非全屏下才收缩,全屏下直接退出 if (!ReadSettingManager.getInstance().isFullScreen()) { toggleMenu(true); @@ -649,7 +598,7 @@ public class ReadActivity extends BaseActivity implements ReadVie } if (!mCollBook.isLocal() && !isCollected - && !mCollBook.getBookChapters().isEmpty()) { + && !mCollBook.getBookChapters().isEmpty() && false) { AlertDialog alertDialog = new AlertDialog.Builder(this) .setTitle("加入书架") .setMessage("喜欢本书就加入书架吧") @@ -676,10 +625,6 @@ public class ReadActivity extends BaseActivity implements ReadVie // 退出 private void exit() { - // 返回给BookDetail。 -// Intent result = new Intent(); -// result.putExtra(BookDetailActivity.RESULT_IS_COLLECTED, isCollected); -// setResult(Activity.RESULT_OK, result); // 退出 super.onBackPressed(); } @@ -693,14 +638,19 @@ public class ReadActivity extends BaseActivity implements ReadVie @Override protected void onResume() { super.onResume(); - mWakeLock.acquire(); + if (mWakeLock != null) { + mWakeLock.acquire(); + } } @Override protected void onPause() { super.onPause(); - mWakeLock.release(); - if (isCollected) { + if (mWakeLock != null) { + mWakeLock.release(); + } + if (mPageLoader != null) { + saveBookInfo(); mPageLoader.saveRecord(); } } @@ -745,7 +695,6 @@ public class ReadActivity extends BaseActivity implements ReadVie @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); -// SystemBarUtils.hideStableStatusBar(this); if (requestCode == REQUEST_MORE_SETTING) { boolean fullScreen = ReadSettingManager.getInstance().isFullScreen(); if (isFullScreen != fullScreen) { @@ -754,12 +703,6 @@ public class ReadActivity extends BaseActivity implements ReadVie initBottomMenu(); } - // 设置显示状态 -// if (isFullScreen) { -// SystemBarUtils.hideStableNavBar(this); -// } else { -// SystemBarUtils.showStableNavBar(this); -// } } } } \ No newline at end of file diff --git a/app/src/main/java/com/yzx/webebook/activity/WebActivity.kt b/app/src/main/java/com/yzx/webebook/activity/WebActivity.kt index 9cc5689..ea70c97 100644 --- a/app/src/main/java/com/yzx/webebook/activity/WebActivity.kt +++ b/app/src/main/java/com/yzx/webebook/activity/WebActivity.kt @@ -14,28 +14,29 @@ import android.view.View import android.view.ViewGroup import android.webkit.* import android.widget.LinearLayout -import android.widget.ProgressBar import android.widget.TextView import androidx.annotation.RequiresApi import androidx.core.widget.ContentLoadingProgressBar -import com.allenliu.versionchecklib.callback.APKDownloadListener import com.allenliu.versionchecklib.v2.AllenVersionChecker import com.allenliu.versionchecklib.v2.builder.UIData import com.allenliu.versionchecklib.v2.callback.CustomDownloadingDialogListener import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.SPUtils +import com.blankj.utilcode.util.ToastUtils import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.lzy.okgo.OkGo import com.lzy.okgo.callback.StringCallback import com.lzy.okgo.model.Response -import com.yzx.webebook.MainActivity import com.yzx.webebook.R import com.yzx.webebook.activity.base.BaseActivity import com.yzx.webebook.config.Config import com.yzx.webebook.model.BaseBean import com.yzx.webebook.model.User import com.yzx.webebook.model.Version +import com.yzx.webebook.model.local.BookRepository +import com.yzx.webebook.presenter.ReadPresenter +import com.yzx.webebook.presenter.ReadView import com.yzx.webebook.presenter.base.BasePresenter import com.yzx.webebook.widget.BaseDialog import kotlinx.android.synthetic.main.activity_web.* @@ -44,7 +45,6 @@ import org.jetbrains.anko.find import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast import org.json.JSONObject -import java.io.File import java.util.* /** @@ -476,6 +476,30 @@ class YzxJavascriptInterface(var ctx: Activity) { sp.remove("unit_count") ctx.startActivity() } + + @JavascriptInterface + fun readPage(bookTaskId:String){ + val presenter = ReadPresenter(object :ReadView{ + override fun finishChapter() { + + } + + override fun errorChapter() { + + } + + override fun showCategory(localId: String?) { + val collBook = BookRepository.getInstance().getCollBook(localId) + if(collBook.cover.endsWith(".txt")){ + ctx.startActivity("book_id" to localId) + }else{ + ToastUtils.showLong("暂不支持该格式预览!") + } + } + + }) + presenter.loadCategory(bookTaskId) + } } diff --git a/app/src/main/java/com/yzx/webebook/model/Book.kt b/app/src/main/java/com/yzx/webebook/model/Book.kt new file mode 100644 index 0000000..3b2959c --- /dev/null +++ b/app/src/main/java/com/yzx/webebook/model/Book.kt @@ -0,0 +1,23 @@ +package com.yzx.webebook.model + +class Book { + var book_name:String = "" + var file_type:String = "" + var book_file_identity:String = "" + var book_file_id:String = "" + var author:String = "" + var read_requires:String = "" + var volumes:MutableList = mutableListOf() +} + +class Volumes{ + var id:String = "" + var title:String = "" + var sections:MutableList = mutableListOf() +} + +class Sections{ + var id:String = "" + var title:String = "" + var content:String = "" +} \ No newline at end of file diff --git a/app/src/main/java/com/yzx/webebook/model/local/ReadSettingManager.java b/app/src/main/java/com/yzx/webebook/model/local/ReadSettingManager.java index 200db5e..3e26a34 100644 --- a/app/src/main/java/com/yzx/webebook/model/local/ReadSettingManager.java +++ b/app/src/main/java/com/yzx/webebook/model/local/ReadSettingManager.java @@ -95,7 +95,7 @@ public class ReadSettingManager { } public PageMode getPageMode() { - int mode = sharedPreUtils.getInt(SHARED_READ_PAGE_MODE, PageMode.SIMULATION.ordinal()); + int mode = sharedPreUtils.getInt(SHARED_READ_PAGE_MODE, PageMode.NONE.ordinal()); return PageMode.values()[mode]; } diff --git a/app/src/main/java/com/yzx/webebook/presenter/ReadPresenter.java b/app/src/main/java/com/yzx/webebook/presenter/ReadPresenter.java index e6e239d..e36d798 100644 --- a/app/src/main/java/com/yzx/webebook/presenter/ReadPresenter.java +++ b/app/src/main/java/com/yzx/webebook/presenter/ReadPresenter.java @@ -1,24 +1,145 @@ package com.yzx.webebook.presenter; +import android.util.Log; + +import com.blankj.utilcode.util.TimeUtils; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.FileCallback; +import com.lzy.okgo.callback.StringCallback; +import com.lzy.okgo.model.HttpHeaders; +import com.lzy.okgo.model.Response; +import com.yzx.webebook.config.Config; +import com.yzx.webebook.model.BaseBean; +import com.yzx.webebook.model.Book; +import com.yzx.webebook.model.Sections; +import com.yzx.webebook.model.User; +import com.yzx.webebook.model.Volumes; +import com.yzx.webebook.model.bean.CollBookBean; +import com.yzx.webebook.model.local.BookRepository; import com.yzx.webebook.presenter.base.BasePresenter; +import com.yzx.webebook.utils.FileUtils; +import com.yzx.webebook.utils.MD5Utils; import com.yzx.webebook.widget.page.TxtChapter; import org.jetbrains.annotations.NotNull; +import java.io.File; +import java.util.ArrayList; import java.util.List; public class ReadPresenter extends BasePresenter { + static String NOTE_FOLDER_DIR = "/mnt/sdcard/ebook/book/"; public ReadPresenter(@NotNull ReadView view) { super(view); } - public void loadCategory(String bookId){ + public void loadCategory(String bookTaskId) { + User user = User.Companion.getUser(); + String localId = user.getUser_id() + "_" + bookTaskId; + CollBookBean collBook = BookRepository.getInstance().getCollBook(localId); + if (collBook != null) { + getMView().showCategory(localId); + } else { + String url = Config.INSTANCE.getBASE_URL() + "/parent/readTask/getBookWarehouseContent"; + HttpHeaders headers = new HttpHeaders(); + headers.put("phone", user.getPhone()); + headers.put("token", user.getToken()); + OkGo.post(url) + .tag(this) + .params("id", bookTaskId) + .headers(headers) + .execute(new StringCallback() { + + @Override + public void onSuccess(Response response) { + Log.d("ReadActivity", "onSuccess: " + response.body()); + Gson gson = new Gson(); + BaseBean bean = gson.fromJson(response.body(), new TypeToken>() { + }.getType()); + if ("txt".equals(bean.getData().getFile_type())) { + downloadBook(bean.getData(), bookTaskId); + } else { + Book book = bean.getData(); + StringBuilder builder = new StringBuilder(); + if (book.getVolumes().size() > 0) { + for (Volumes volume : book.getVolumes()) { + builder.append(volume.getTitle()); + for (Sections section : volume.getSections()) { + builder.append(section.getTitle()); + builder.append(section.getContent()); + } + } + } + String filePath = FileUtils.writeTxtToFile(builder.toString(), NOTE_FOLDER_DIR, user.getUser_id() + "_" + bookTaskId + ".txt"); + CollBookBean bookBean = new CollBookBean(); + String localId = user.getUser_id() + "_" + bookTaskId; + bookBean.set_id(localId); + bookBean.setAuthor(book.getAuthor()); + bookBean.setTitle(book.getBook_name()); + bookBean.setShortIntro(book.getRead_requires()); + bookBean.setLastChapter("开始阅读"); + bookBean.setUpdate(true); + bookBean.setIsLocal(true); + bookBean.setLastRead(TimeUtils.getNowString()); + bookBean.setUpdated(TimeUtils.getNowString()); + bookBean.setCover(filePath); + + List list = new ArrayList(); + list.add(bookBean); + BookRepository.getInstance() + .saveCollBooks(list); + + getMView().showCategory(localId); + } + } + + @Override + public void onError(Response response) { + super.onError(response); + } + }); + } + + + } + + private void downloadBook(Book data, String bookTaskId) { + User user = User.Companion.getUser(); + OkGo.get("https://" + data.getBook_file_identity() + ".oa.qbjjyyun.net/edufile/download?uniqueKey=" + data.getBook_file_id()) + .tag(this) + .execute(new FileCallback(NOTE_FOLDER_DIR, user.getUser_id() + "_" + data.getBook_name() + "." + data.getFile_type()) { + + @Override + public void onSuccess(Response response) { + File file = response.body(); + CollBookBean bookBean = new CollBookBean(); + String localId = user.getUser_id() + "_" + bookTaskId; + bookBean.set_id(localId); + bookBean.setAuthor(data.getAuthor()); + bookBean.setTitle(data.getBook_name()); + bookBean.setShortIntro(data.getRead_requires()); + bookBean.setLastChapter("开始阅读"); + bookBean.setUpdate(true); + bookBean.setIsLocal(true); + bookBean.setLastRead(TimeUtils.getNowString()); + bookBean.setUpdated(TimeUtils.getNowString()); + bookBean.setCover(file.getAbsolutePath()); + + List list = new ArrayList(); + list.add(bookBean); + BookRepository.getInstance() + .saveCollBooks(list); + getMView().showCategory(localId); + } + }); } - public void loadChapter(String bookId, List bookChapterList){ + public void loadChapter(String bookId, List bookChapterList) { } } diff --git a/app/src/main/java/com/yzx/webebook/presenter/ReadView.java b/app/src/main/java/com/yzx/webebook/presenter/ReadView.java index e3fcb91..745938d 100644 --- a/app/src/main/java/com/yzx/webebook/presenter/ReadView.java +++ b/app/src/main/java/com/yzx/webebook/presenter/ReadView.java @@ -8,7 +8,7 @@ import java.util.List; public interface ReadView extends IView { - void showCategory(List bookChapterList); + void showCategory(String localId); void finishChapter(); void errorChapter(); } diff --git a/app/src/main/java/com/yzx/webebook/utils/FileUtils.java b/app/src/main/java/com/yzx/webebook/utils/FileUtils.java index 94b6e03..a0ce216 100644 --- a/app/src/main/java/com/yzx/webebook/utils/FileUtils.java +++ b/app/src/main/java/com/yzx/webebook/utils/FileUtils.java @@ -1,6 +1,7 @@ package com.yzx.webebook.utils; import android.os.Environment; +import android.util.Log; import com.yzx.webebook.App; @@ -11,6 +12,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import java.io.RandomAccessFile; import java.io.Reader; import java.text.DecimalFormat; import java.util.ArrayList; @@ -267,4 +269,60 @@ public class FileUtils { } return charset; } + + // 将字符串写入到文本文件中 + public static String writeTxtToFile(String strcontent, String filePath, String fileName) { + //生成文件夹之后,再生成文件,不然会出错 + makeFilePath(filePath, fileName); + + String strFilePath = filePath + fileName; + // 每次写入时,都换行写 + String strContent = strcontent + "\r\n"; + try { + File file = new File(strFilePath); + if (!file.exists()) { + Log.d("TestFile", "Create the file:" + strFilePath); + file.getParentFile().mkdirs(); + file.createNewFile(); + } + RandomAccessFile raf = new RandomAccessFile(file, "rwd"); + raf.seek(file.length()); + raf.write(strContent.getBytes()); + raf.close(); + return strFilePath; + } catch (Exception e) { + Log.e("TestFile", "Error on write File:" + e); + return ""; + } + } + + //生成文件 + + public static File makeFilePath(String filePath, String fileName) { + File file = null; + makeRootDirectory(filePath); + try { + file = new File(filePath + fileName); + if (!file.exists()) { + file.createNewFile(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return file; + } + +//生成文件夹 + + public static void makeRootDirectory(String filePath) { + File file = null; + try { + file = new File(filePath); + if (!file.exists()) { + file.mkdir(); + } + } catch (Exception e) { + Log.i("error:", e + ""); + } + } } diff --git a/app/src/main/java/com/yzx/webebook/widget/ReadSettingDialog.java b/app/src/main/java/com/yzx/webebook/widget/ReadSettingDialog.java index d0ea93a..59115a2 100644 --- a/app/src/main/java/com/yzx/webebook/widget/ReadSettingDialog.java +++ b/app/src/main/java/com/yzx/webebook/widget/ReadSettingDialog.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.Gravity; +import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.CheckBox; @@ -30,16 +31,18 @@ import com.yzx.webebook.widget.page.PageLoader; import com.yzx.webebook.widget.page.PageMode; import com.yzx.webebook.widget.page.PageStyle; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Created by newbiechen on 17-5-18. */ -public class ReadSettingDialog extends Dialog { +public class ReadSettingDialog extends Dialog implements View.OnClickListener { private static final String TAG = "ReadSettingDialog"; - private static final int DEFAULT_TEXT_SIZE = 16; + private static final int DEFAULT_TEXT_SIZE = 28; ImageView mIvBrightnessMinus; SeekBar mSbBrightness; @@ -74,6 +77,8 @@ public class ReadSettingDialog extends Dialog { private boolean isTextDefault; + private List sizeBtnList = new ArrayList<>(); + public ReadSettingDialog(@NonNull Activity activity, PageLoader mPageLoader) { super(activity, R.style.ReadSettingDialog); mActivity = activity; @@ -108,6 +113,20 @@ public class ReadSettingDialog extends Dialog { mRbNone = findViewById(R.id.read_setting_rb_none); mRvBg = findViewById(R.id.read_setting_rv_bg); mTvMore = findViewById(R.id.read_setting_tv_more); + + sizeBtnList.clear(); + sizeBtnList.add(findViewById(R.id.size_btn_1)); + sizeBtnList.add(findViewById(R.id.size_btn_2)); + sizeBtnList.add(findViewById(R.id.size_btn_3)); + sizeBtnList.add(findViewById(R.id.size_btn_4)); + sizeBtnList.add(findViewById(R.id.size_btn_5)); + sizeBtnList.add(findViewById(R.id.size_btn_6)); + sizeBtnList.add(findViewById(R.id.size_btn_7)); + for (View view : sizeBtnList) { + int index = sizeBtnList.indexOf(view); + view.setTag(28 + index * 6); + view.setOnClickListener(this); + } } //设置Dialog显示的位置 @@ -115,8 +134,8 @@ public class ReadSettingDialog extends Dialog { Window window = getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; - lp.height = WindowManager.LayoutParams.WRAP_CONTENT; - lp.gravity = Gravity.BOTTOM; + lp.height = WindowManager.LayoutParams.MATCH_PARENT; + lp.gravity = Gravity.CENTER; window.setAttributes(lp); } @@ -129,6 +148,18 @@ public class ReadSettingDialog extends Dialog { isTextDefault = mSettingManager.isDefaultTextSize(); mPageMode = mSettingManager.getPageMode(); mPageStyle = mSettingManager.getPageStyle(); + + for (View view : sizeBtnList) { + int size = (int) view.getTag(); + int fontSize = ScreenUtils.dpToPx(size); + + TextView tv = (TextView) view; + if (mTextSize == fontSize) { + tv.setText("O"); + } else { + tv.setText("|"); + } + } } private void initWidget() { @@ -139,6 +170,8 @@ public class ReadSettingDialog extends Dialog { initPageMode(); //RecyclerView setUpAdapter(); + + } private void setUpAdapter() { @@ -330,4 +363,18 @@ public class ReadSettingDialog extends Dialog { } return mCbBrightnessAuto.isChecked(); } + + @Override + public void onClick(View v) { + int size = (int) v.getTag(); + + for (View view : sizeBtnList) { + TextView tv = (TextView) view; + tv.setText("|"); + } + ((TextView) v).setText("O"); + int fontSize = ScreenUtils.dpToPx(size); + mPageLoader.setTextSize(fontSize); + dismiss(); + } } diff --git a/app/src/main/java/com/yzx/webebook/widget/page/LocalPageLoader.java b/app/src/main/java/com/yzx/webebook/widget/page/LocalPageLoader.java index 80e84c7..b8fb93c 100644 --- a/app/src/main/java/com/yzx/webebook/widget/page/LocalPageLoader.java +++ b/app/src/main/java/com/yzx/webebook/widget/page/LocalPageLoader.java @@ -41,7 +41,7 @@ import io.reactivex.disposables.Disposable; public class LocalPageLoader extends PageLoader { private static final String TAG = "LocalPageLoader"; //默认从文件中获取数据的长度 - private final static int BUFFER_SIZE = 512 * 1024; + private final static int BUFFER_SIZE = 10 * 1024; //没有标题的时候,每个章节的最大长度 private final static int MAX_LENGTH_WITH_NO_CHAPTER = 10 * 1024; diff --git a/app/src/main/java/com/yzx/webebook/widget/page/PageView.java b/app/src/main/java/com/yzx/webebook/widget/page/PageView.java index 248e585..405356f 100644 --- a/app/src/main/java/com/yzx/webebook/widget/page/PageView.java +++ b/app/src/main/java/com/yzx/webebook/widget/page/PageView.java @@ -36,8 +36,8 @@ public class PageView extends View { private int mStartY = 0; private boolean isMove = false; // 初始化参数 - private int mBgColor = 0xFFCEC29C; - private PageMode mPageMode = PageMode.SIMULATION; + private int mBgColor = 0xFFFFFFFF; + private PageMode mPageMode = PageMode.NONE; // 是否允许点击 private boolean canTouch = true; // 唤醒菜单的区域 @@ -99,26 +99,26 @@ public class PageView extends View { //视图未初始化的时候,禁止调用 if (mViewWidth == 0 || mViewHeight == 0) return; - switch (mPageMode) { - case SIMULATION: - mPageAnim = new SimulationPageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); - break; - case COVER: - mPageAnim = new CoverPageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); - break; - case SLIDE: - mPageAnim = new SlidePageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); - break; - case NONE: - mPageAnim = new NonePageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); - break; - case SCROLL: - mPageAnim = new ScrollPageAnim(mViewWidth, mViewHeight, 0, - mPageLoader.getMarginHeight(), this, mPageAnimListener); - break; - default: - mPageAnim = new SimulationPageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); - } +// switch (mPageMode) { +// case SIMULATION: +// mPageAnim = new SimulationPageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); +// break; +// case COVER: +// mPageAnim = new CoverPageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); +// break; +// case SLIDE: +// mPageAnim = new SlidePageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); +// break; +// case NONE: +// mPageAnim = new NonePageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); +// break; +// case SCROLL: +// mPageAnim = new ScrollPageAnim(mViewWidth, mViewHeight, 0, +// mPageLoader.getMarginHeight(), this, mPageAnimListener); +// break; +// default: +// } + mPageAnim = new NonePageAnim(mViewWidth, mViewHeight, this, mPageAnimListener); } public Bitmap getNextBitmap() { diff --git a/app/src/main/res/color/selector_btn_read_setting.xml b/app/src/main/res/color/selector_btn_read_setting.xml index 385291d..ba77f4b 100644 --- a/app/src/main/res/color/selector_btn_read_setting.xml +++ b/app/src/main/res/color/selector_btn_read_setting.xml @@ -1,8 +1,8 @@ - - - + + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_bg.xml b/app/src/main/res/drawable/seekbar_bg.xml index fbbe04f..538e724 100644 --- a/app/src/main/res/drawable/seekbar_bg.xml +++ b/app/src/main/res/drawable/seekbar_bg.xml @@ -4,20 +4,18 @@ - + android:endColor="@color/orange" + android:startColor="@color/orange" /> - + android:endColor="#000000" + android:startColor="#000000" /> diff --git a/app/src/main/res/drawable/shape_btn_read_setting_checked.xml b/app/src/main/res/drawable/shape_btn_read_setting_checked.xml index f67604f..a7650e0 100644 --- a/app/src/main/res/drawable/shape_btn_read_setting_checked.xml +++ b/app/src/main/res/drawable/shape_btn_read_setting_checked.xml @@ -4,5 +4,5 @@ + android:color="@color/black"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_dialog.xml b/app/src/main/res/drawable/shape_dialog.xml new file mode 100644 index 0000000..3cf2978 --- /dev/null +++ b/app/src/main/res/drawable/shape_dialog.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_read.xml b/app/src/main/res/layout/activity_read.xml index faf6c1e..e8c3675 100644 --- a/app/src/main/res/layout/activity_read.xml +++ b/app/src/main/res/layout/activity_read.xml @@ -10,8 +10,7 @@ + android:layout_height="match_parent"> - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + android:scrollbars="vertical"/> diff --git a/app/src/main/res/layout/dialog_read_setting.xml b/app/src/main/res/layout/dialog_read_setting.xml index 31b2cb8..8e82382 100644 --- a/app/src/main/res/layout/dialog_read_setting.xml +++ b/app/src/main/res/layout/dialog_read_setting.xml @@ -13,25 +13,135 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - - + android:paddingLeft="30dp" + android:paddingRight="30dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:visibility="gone"> - + + android:textColor="@color/selector_btn_read_setting" /> - + - + android:visibility="gone"> + - + android:textSize="14dp" /> + - + android:textColor="@color/black" + android:textSize="14dp" /> + - + android:textSize="18dp" /> + + android:button="@null" + android:gravity="center" + android:text="默认" /> - + - + android:visibility="gone"> + - + android:button="@null" + android:gravity="center" + android:text="仿真" + android:textSize="14dp" /> + - + android:button="@null" + android:gravity="center" + android:text="覆盖" + android:textSize="14dp" /> + - + android:visibility="gone" /> + - + android:button="@null" + android:gravity="center" + android:text="滚动" + android:textSize="14dp" /> + + android:button="@null" + android:gravity="center" + android:text="无" + android:textSize="14dp" /> - + - + android:layout_marginRight="5dp" + android:scrollbars="none" + android:visibility="gone" /> + - + android:visibility="gone" /> + diff --git a/app/src/main/res/mipmap-xhdpi/ic_read_menu_category.png b/app/src/main/res/mipmap-xhdpi/ic_read_menu_category.png index 149b65d5a492be50b13313662ee0d703071dea94..ba33ae7e24a552cf1f6f793e29075ba995f54d97 100644 GIT binary patch delta 230 zcmVU;9zcBjP zz-Gz6mi+vt0@wsQfsK6-Xa1`faG2TY48oG_W~KsI?mu}&fa!ic0_mSoc00K9Yn5$KKsu(fKnQ2J*Sq{)+) gnZ!H`!OZCi+;&qsF*y{tcmMzZ07*qoM6N<$f(>(O)c^nh delta 478 zcmV<40U`c@0`~)uBYy$DNkl2x~Z1qpNhJW~N?#(yY^#)!C;W*rjIow>(x z+)k3@0RY<0EBXb<%%5Qxo@C|utARH}++NbaW|AZyWfz~~&xk0KsN5Y;O6?)yJu|=h zzCY-8yVHt_wocRRCAOxa#z0Y^M)DV_MFCNuAOkW&1qm$tyx9sUrOpuXf|)0t=N$(@ zFfL4)V}M*Ur+>Bn0)P#ZlbO%MFuYFPs4;WKjaG7qXuk|M`dCTz08=75_;&;5f!4au z%mYMx2Y}lk2xb)(ZJnmsOKeR;je(*-jpU0Pt($yNKooGnK(jxiEA2+L);=>EH@com zeMLl<=B||5LB!a_2-si{QRbxNj!+auF96U_lN=J!Q&(!I&ClI|O>ze@#*Hq1Dla>^ z4U9&kwfTI0WZY=4*Ly}pc2JO0h-NRbQ>sb=69q~l)*4n6u%@b{KvAG1Vy$6+0Hj}$ UG3dT9TL1t607*qoM6N<$f=)`^!2kdN diff --git a/app/src/main/res/mipmap-xhdpi/ic_read_menu_download.png b/app/src/main/res/mipmap-xhdpi/ic_read_menu_download.png index 8da99723d7747f6f0e313382bab7134d3415fd7b..3829a41f382ad69d6d48e8bdc05f09753a70f540 100644 GIT binary patch delta 372 zcmV-)0gL{l1djudB!5;(L_t(&L+zKr4#F@DL)n)DUk-}2O50cyJ2BfOT##55`^9NH zmdAfSpGnz8EhjIy8f*YGsZLBUJ1_k5I9J=qdDEb>5&} z^;H7aLjbJUYc+1)2t);d(u)AL#YXcHh%5lD=K-7*Lm@H%DSy2zfPr{PumGNUS1U6@ z+kHHPU;xtQ%}4}bYcc{TK&JNYAVdH%5C}loJet5DW&|Surj~p4pb4-L9)Qd|n*akb zF1};;?DyHT=wv%hf=vL00N*%v%a9B5r*0Mi+1Lz3%6xW&w#K4)Mj+DW6#&&FO6FAn zS%|WEB>)Q{F>S8~Kp|x22S9XdA{!Ci*cJ1qKJ6G)1I&`Bn75jj0vsW#=5GNQ5cZAy zkB&z5@&qD7?DGa-JEmUW38*{D)}s?(1#VgIU1YZyVnrK(?U;IfC!p>qTki|ZO>iPm S*5zgZ0000im1EU0xB!B8jL_t(&L+zMNPQx$|g=eIAO*sMFfM#K@=?Ul&;3RMpxCwNd zEZp9JBed&O8Z@Y_O32UHu9HTxw{7hA%^Q#HL74c!iR*_1Ft&ry9I)2j1Hd-V^KDGX zC;(+yJ_5ie5v`3e`4j=(0N|B{YptUM=@^tKlb2sGDNg|uP35~F=j1+@C7J};u#U& zc|EQ5tz@lE0DhG0_j?w7;{xFWa3&szXk(0-2Ltc~2N%9vAY1|J;+0a5(wCg53b{hK z0ECF=0E+-zoqv!5go<|paDk8jTtd7vfE1z+;8Nnf03;Ay0GAa12Y^dvRaJKYu#?pL zu8rLW;3M8zJFBYdfyFANHudUs+QeszuC&(N*XbQ?5KRC+;#t74$8-?0&{}gzKaC)O zwsbu~?s6ni=EL%!1W=&-;dKK!ewSj*~0D%Dv{yaGl9Kyf}k^_MO4F255fgJ#FE9EK% z5zP?s*r5>JMz2D6i-=ADeglZ!0b>znS@u!y5Q@7JV~Ortck%!~7)cvXU06Kn00000 MNkvXXt^-0~f`4r14FCWD diff --git a/app/src/main/res/mipmap-xhdpi/ic_read_menu_font.png b/app/src/main/res/mipmap-xhdpi/ic_read_menu_font.png index ad0f11bf5be6c031ac72c10d2db70e1003b60ad4..6c36f4e26ef44c2c24891035f176de197a4afc35 100644 GIT binary patch literal 1147 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 R`49jA002ovPDHLkV1h{0ZlnMJ delta 1085 zcmV-D1j75S3epIWB!3x6L_t(&L+x4JQ5!)FmYDN%NCh|*1ka#-4O9SB5K=)%1tAp# zDu`1-Oa*aXcbPF%kWfLKXM0fQ^Xz&y=I(aSz9TThJ>Jh+pY%!kBr`qni=Vjt^bFvC zN3gXBSZjBg`H+ZqRkhE|y8x%E*T$GZS3oxcFqusH^ZER}s(&6abHBpKTM?;xwlS`? z08A#6?fHEEk%&$s3vN|)%*@wBv`s{KjtC5lF}T;s)fm9l)zy)ze(^@as7q!Z?(OZ3 zf`!)FiKoy95jpR~a(`$e0M5D3!RxAeLqsR5-gVCH6VZ1f>XbUcDOmtKW#IKABKku_ zXH}lH)()BZEq@Vp?tOsB0^pqc7K~Tb{W?xN=YE4;MNzyO3EgHxX~4&r>Ymmm{=<{Iw$w#dl7KXq1t>@)vv~wliY(M9Ryho2TXl4n>Ib8 z$@^shAj%F^^_?+h*yOM%nb9xaJVX@k0f>}jWBvyKaTR0c<5;P#uYXfjJ?LsCs01J)SwgSQJ5e*7GV{B2BZ0y~M36Mo)$z1b0O$*|*$iS3@*3B9 zQ52sBgF#ke`@RApxs)-hj_r&>abzMo;WmsP`YKmCYDNnJ(D0v9o&;d6y=LauIqI`X zLi)r;ReKYC2QaH3K$oS_0Lsj0jwtOn#+b#nqkpoIIp-E-w5#gj`Fz66nC^BeoUm9B z^m@HB3`J1{FGU33)dJY4ku{78wi`>2sw$H799GB|!7O@*afjw&@8=HQWt95?yFw%-joSv3`w0$6vTY1{Zn8B^7kqq5sZi8B_F zgMYS-%Q-LTvN}fP-UINkqq~1y_!j%ii%@4X92SpEVI?0a#U)s(NaSxmefG3ghvA z!a{Yz_+GDfnxk5?07T&p{Qf%IO7@rzYt4sB|+Q0fPLVnbD;I^lx& z8;Zzf>f4nn1A~`_V++E}CryW*MiB@GcuJl5t#!DKBp)&J2%-!I1!3kD=!>nbt^VEJ z-M&|%v1GpR$}?-w*(d_>$LQFz+3YkSjjIB4i^vs4G2G;Tgta12W|1#{pvAubn>H0g z(elDD;s=v4w0>Jdero`l@W0J>p8>S#&2`Rt@)7t88iQg_y<7zs00000NkvXXu0mjf DN_`NY diff --git a/app/src/main/res/mipmap-xhdpi/seekbar_thumb_normal.png b/app/src/main/res/mipmap-xhdpi/seekbar_thumb_normal.png index d043cb9bdbe09b56c09f98018350d7153e1ee69d..c0ac35b6e935ee159bf16fa5773f69c9046790c7 100644 GIT binary patch delta 727 zcmV;|0x12*4DJPxBYy(5Nkl*{sMHbDE(vzV~_gvBDfd0XC!N4=i_86`@LvQd*j766&H<PNzF9-xcA+JA_@5SR`GmjUmM0JniXnLd-i z?o8WYwjB5n2(AUDi~tvlY$V4`+0c<3!;;N9;6*$r;Lslo?q@g`nq%Zvdm2 zD_#foXWB-O*b^kuKD|11d8zY|+$cz_npg=EugpjTwYfuws6pezYw4eeaXsv6oR)u7D^MXVY%?pVVq$EnLuPn(zG9DZu}G~7 zh+3vpR3ueIoK_K0gyNXgB8oaiv05vRA`d|Yi&Ki};G-J^?GNkD?0(<9bI!fzK4!Nj z#4qymo$5=Y(fky#vP9~f<9WyVP~W^4HD>AvCFL4Yg{P1<#ER0ydOR5g6lNq9O+*p> z`t(LLnnv@QX;f=SjWSN4!_7>@gJIgu7K%-yMK7>h5M3Hd0?BBq5fjq?taH)l^L(rWv1!)dinwp5N#Jw0n8|g0CuwpBLsFKeJHMgx_jIp9T+&1PfT*i77-3c`FoAB0#Si^ZT23}QV-B6bEwgpEXyp@hzA zw2(#|13VFtWITfu(kZ2{N-$fL%GZH0Vz^OM%RoC~0bwQtn$4cNhR_6=h`y2WRy3hr zZ$ZICl)y8rI%*y%VIyR!ckfQ*0a9uNGF+EoMln($6VfRUQ*YD@Br*=fiDC04EGZ1b za*kLUDd)?jJQj~jIU-pjTm?pu2&O|vxW+f!sCRM&QY(s(xK)kgrjh9-7;q9N47df5 zN`W~^Mof>}h`FB54hu!C#&xJZ#)_MPq1FhDZ%NOEI1&yo3W6b+k}Bu$IWe$UDy1w| zBm_w*>94r@x0F51h5wfeQer^QT>mrY5f`;Qp6lzarHt2mk7CraTdA$ip5S26XroUn zWMZ}b*5#tRX@TO2=Oa@&g}b~3KZsN$-Qzfmt7keO7hc zb-G}~CVsx?Wyr0{hOb@T7p{c>WB2Cs4mo@;I=t73rGMQIsPlQ8-4c9emU|xC@58L7 zR$)}$r`q5kmwGz_o$LAXcSrE1g_(o&*rIMzz-{kK+VFCOuH8Ay6`+B-(q_0;Mif?I z>CL_W6o|Hj?KxC=u_JuW;eh#<;d@;0y7>mRtQa|}EuT%za2YG<}x zpLa4St#5KvvuR{pS*5)9KeT^UTiCv%*6U7ISm%<8x{|1hprrmuT_-uGLYMcKJZ)$#Z}XeN zNL}4LP;y{@IMi4o3kr*#UtPGo-tM2ii*yI_C0)~UmhxtsmhNuOXThnHMWLIT(DU`T zW3{S#Nh&%|A?-xl!6_Ck~IKj_* z;cK$w#m$>PST93A+v1#2-1YPIkb}-;POnF!Zsupzm@lt6*iziFjg`I#Ro=MrceA?P zTJJE0RwcbxH$`F`~0I*Bd#}|HkXqzafr4@czrFV(kIoFz=0lACBou}CTH>L4y zhY8KZ@QKx-zg;L3)il;g#6=gLn>Mc%_3ubti5$#dGy10|s`2i^o!@PLaIEj#v$>;^ zOvR^ZeQs@_5-%iFV_^ D91MCq diff --git a/app/src/main/res/mipmap-xhdpi/seekbar_thumb_selected.png b/app/src/main/res/mipmap-xhdpi/seekbar_thumb_selected.png index 16106bb32bd0a256a4a2766273d7a20139b84b82..c0ac35b6e935ee159bf16fa5773f69c9046790c7 100644 GIT binary patch delta 727 zcmV;|0x1374(*{sMHbDE(vzV~_gvBDfd0XC!N4=i_86`@LvQd*j766&H<PNzF9-xcA+JA_@5SR`GmjUmM0JniXnLd-i z?o8WYwjB5n2(AUDi~tvlY$V4`+0c<3!;;N9;6*$r;Lslo?q@g`nq%Zvdm2 zD_#foXWB-O*b^kuKD|11d8zY|+$cz_npg=EugpjTw!u;GXp8ZlN-z+4MiL$YzRNI+1etrvn~ z5K-`;Sg_*-PDQj;Q5X?x@#HWSL5s?Gptd7mMW-7D?GM|X+5O({o9B7o=RLmJP14vX zXD3f55{cw2juyoctFQHSv?sn>-qq`fWeOex7S$N@$kDiIA+ zr|{!Mkt4B)oq(#raRZ;p%*e=KWUv`1mdXTqJRXx3$P5gm69~F7Q;#c5biL7M)Po2% zsxZWWBd8v*dQ>RUbX-6slzvD-XOKufI@TLU3PqHRX;K)NAcMu!>8yFZM;q}t_>+v! zqK&dl1I&zrjc7WiBKncyGfF0E_y2*cKtc^)gsReYupSqS1XSXLp+?kvhyw-lxRIjp zKnMiEh#+AwhZ`OOvDm>}!e9$WxnjK$SLjvnC>Qy}h5nbzhcH-yqnHdu(?+`|)u1?P z)Sw0cf&kwoh+d6m7-w56J0cXukX5ic5<_*s`_k}{&x8jf1BD>O3ISOlp*8^nAX1jtIwlH#PC?nk5fx*KF&R?Cx#s(ruqwc zbP{n{Zi+=hnaOe`p*yBn=sv9@J?VI2M@f#xqu3pcaV>U|`E@r=_o2<0koDx)#;m{S zEMMQ%N0YPToOT@k$$`$kj)|S!*d7IKadURIQX1>RQU*4xy4Sa6AA4}`8TR1aUE0>{ z)!$ssHRY0e9vJQ7?d!~vfXtBHFP`_ikMppR%yX9750RGKDov6*JKCBXST%a>r4qTv zHT!Zq?8M-*2AAJd_pd{_`wluVY@g@OYQU?;*{_S;UwHLgF0Y4N(?lzvCASLfi?OqE zoBHNc$i%d6qSHPyYf276He#!)@Pr}SxtG11wN$qUW z>}k1ieCE>rDVF{%Q8l}Heit-d=&t?G_@-LFN$2y21v@G<658qNp;L7JLdx-M@pq*s zWaSR!_p-yfb5avlBc<1-x&B@)qWluS@lJjJgfwM8*?i!~V%ur+7T$V8npoR=-60@< zCbf=YBDu!qw7PX@%GzY2mRFN|@s}$X?1CGHAN1bXGTVIr2>r?8#-;raJLf`OG5lE+ zZROUes*M%fZ|oaX8+4?y~)R-U!OKNnYCW* z)C%qaBW9y29c*_y%a-u=<(4%hJUpd5yS!qZ>#vP@WnN8Bn0Ve3neWLXPCehit)4S( z>~O+7o8K)f2z3c<`{L+c+vv>cmam_N4jbh=8t;cx9vmP!w%@2Tq5QjhdPB+SKfnzK z{JkxAs2l2cR?+Hw+_`J6hi>!#o?et}LTBGT6Q4zc0=SP(sIr5bzM87kI`-Nxm_rsc z_zsG+B_(r2UCEZmwMb6%^v5ZxsIy7rYuhUN2Bb^K>G=hE6WUz&wyqhawG26NSI(}? zY5#M$uUuL_P_}c-OUI_aZ$5L`oOkk<$U``E$K{EpQLgv eG{f9&GoDmJdCh1(u;RY;k0*|Z6&($i=luiay5iXY diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 8c675b3..65cbd8d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -80,10 +80,10 @@ #8bd715 - #CEC29C - #CCEBCC - #AAAAAA - #D1CEC5 + #FFFFFF + #FFFFFF + #FFFFFF + #FFFFFF #001C27 #DDCEC29C @@ -95,9 +95,9 @@ #627176 #000000 - #99ffffff + #ffffffff - #191919 + #ffffff #CBCBCB #88000000 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fc1fcab..2cf9c7f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -32,11 +32,11 @@ false Re - @style/anim_slide_left_in_right_out + diff --git a/app/src/main/res/values/styles_text.xml b/app/src/main/res/values/styles_text.xml index b1de9e8..db06ec7 100644 --- a/app/src/main/res/values/styles_text.xml +++ b/app/src/main/res/values/styles_text.xml @@ -38,7 +38,7 @@ @color/nb.read.menu.text