816 lines
31 KiB
Java

package com.bifan.txtreaderlib.ui;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.bifan.txtreaderlib.R;
import com.bifan.txtreaderlib.bean.TxtChar;
import com.bifan.txtreaderlib.bean.TxtMsg;
import com.bifan.txtreaderlib.interfaces.ICenterAreaClickListener;
import com.bifan.txtreaderlib.interfaces.IChapter;
import com.bifan.txtreaderlib.interfaces.ILoadListener;
import com.bifan.txtreaderlib.interfaces.IPageChangeListener;
import com.bifan.txtreaderlib.interfaces.ISliderListener;
import com.bifan.txtreaderlib.interfaces.ITextSelectListener;
import com.bifan.txtreaderlib.main.TxtConfig;
import com.bifan.txtreaderlib.main.TxtReaderView;
import com.bifan.txtreaderlib.utils.ELogger;
import com.bifan.txtreaderlib.utils.FileProvider;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.io.File;
/**
* Created by bifan-wei
* on 2017/12/8.
*/
public class HwTxtPlayActivity extends AppCompatActivity {
protected Handler mHandler;
protected boolean FileExist = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewLayout());
FileExist = getIntentData();
init();
loadFile();
registerListener();
}
protected int getContentViewLayout() {
return R.layout.activity_hwtxtpaly;
}
protected boolean getIntentData() {
// Get the intent that started this activity
Uri uri = getIntent().getData();
if (uri != null) {
ELogger.log("getIntentData", "" + uri);
} else {
ELogger.log("getIntentData", "uri is null");
}
if (uri != null) {
try {
String path = FileProvider.getFileAbsolutePath(this, uri);
if (!TextUtils.isEmpty(path)) {
if (path.contains("/storage/")) {
path = path.substring(path.indexOf("/storage/"));
}
ELogger.log("getIntentData", "path:" + path);
File file = new File(path);
if (file.exists()) {
FilePath = path;
FileName = file.getName();
return true;
} else {
toast("文件不存在");
return false;
}
}
return false;
} catch (Exception e) {
toast("文件出错了");
}
}
FilePath = getIntent().getStringExtra("FilePath");
FileName = getIntent().getStringExtra("FileName");
ContentStr = getIntent().getStringExtra("ContentStr");
if (ContentStr == null) {
return FilePath != null && new File(FilePath).exists();
} else {
return true;
}
}
/**
* @param context 上下文
* @param FilePath 文本文件路径
*/
public static void loadTxtFile(Context context, String FilePath) {
loadTxtFile(context, FilePath, null);
}
/**
* @param context 上下文
* @param str 文本文内容
*/
public static void loadStr(Context context, String str) {
loadTxtStr(context, str, null);
}
/**
* @param context 上下文
* @param str 文本显示内容
* @param FileName 显示的书籍或者文件名称
*/
public static void loadTxtStr(Context context, String str, String FileName) {
Intent intent = new Intent();
intent.putExtra("ContentStr", str);
intent.putExtra("FileName", FileName);
intent.setClass(context, HwTxtPlayActivity.class);
context.startActivity(intent);
}
/**
* @param context 上下文
* @param FilePath 文本文件路径
* @param FileName 显示的书籍或者文件名称
*/
public static void loadTxtFile(Context context, String FilePath, String FileName) {
Intent intent = new Intent();
intent.putExtra("FilePath", FilePath);
intent.putExtra("FileName", FileName);
intent.setClass(context, HwTxtPlayActivity.class);
context.startActivity(intent);
}
protected View mTopDecoration, mBottomDecoration;
protected View mChapterMsgView;
protected TextView mChapterMsgName;
protected TextView mChapterMsgProgress;
protected TextView mChapterNameText;
protected TextView mChapterMenuText;
protected TextView mProgressText;
protected TextView mSettingText;
protected TextView mSelectedText;
protected TxtReaderView mTxtReaderView;
protected View mTopMenu;
protected View mBottomMenu;
protected View mCoverView;
protected View ClipboardView;
protected String CurrentSelectedText;
protected ChapterList mChapterListPop;
protected MenuHolder mMenuHolder = new MenuHolder();
protected FloatingActionButton fab;
protected void init() {
mHandler = new Handler();
mChapterMsgView = findViewById(R.id.activity_hwTxtPlay_chapter_msg);
mChapterMsgName = findViewById(R.id.chapter_name);
mChapterMsgProgress = findViewById(R.id.chapter_progress);
mTopDecoration = findViewById(R.id.activity_hwTxtPlay_top);
mBottomDecoration = findViewById(R.id.activity_hwTxtPlay_bottom);
mTxtReaderView = findViewById(R.id.activity_hwTxtPlay_readerView);
mChapterNameText = findViewById(R.id.activity_hwTxtPlay_chapterName);
mChapterMenuText = findViewById(R.id.activity_hwTxtPlay_chapter_menuText);
mProgressText = findViewById(R.id.activity_hwTxtPlay_progress_text);
mSettingText = findViewById(R.id.activity_hwTxtPlay_setting_text); //设置
mTopMenu = findViewById(R.id.activity_hwTxtPlay_menu_top);
mBottomMenu = findViewById(R.id.activity_hwTxtPlay_menu_bottom);
mCoverView = findViewById(R.id.activity_hwTxtPlay_cover);
ClipboardView = findViewById(R.id.activity_hwTxtPlay_ClipBoar);
mSelectedText = findViewById(R.id.activity_hwTxtPlay_selected_text);
mMenuHolder.mTitle = findViewById(R.id.txtReader_menu_title);
mMenuHolder.mPreChapter = findViewById(R.id.txtReadr_menu_chapter_pre);
mMenuHolder.mNextChapter = findViewById(R.id.txtReadr_menu_chapter_next);
mMenuHolder.mSeekBar = findViewById(R.id.txtReadr_menu_seekbar);
mMenuHolder.mTextSizeDel = findViewById(R.id.txtRead_menu_textsize_del);
mMenuHolder.mTextSize = findViewById(R.id.txtRead_menu_textSize);
mMenuHolder.mTextSizeAdd = findViewById(R.id.txtRead_menu_textSize_add);
mMenuHolder.mBoldSelectedLayout = findViewById(R.id.txtRead_menu_textSetting1_bold);
mMenuHolder.mCoverSelectedLayout = findViewById(R.id.txtRead_menu_textSetting2_cover);
mMenuHolder.mShearSelectedLayout = findViewById(R.id.txtRead_menu_textSetting2_shear);
mMenuHolder.mTranslateSelectedLayout = findViewById(R.id.txtRead_menu_textSetting2_translate);
mMenuHolder.mStyle1 = findViewById(R.id.txtReader_menu_style1);
mMenuHolder.mStyle2 = findViewById(R.id.txtReader_menu_style2);
mMenuHolder.mStyle3 = findViewById(R.id.txtRead_menu_style3);
mMenuHolder.mStyle4 = findViewById(R.id.txtReader_menu_style4);
mMenuHolder.mStyle5 = findViewById(R.id.txtReader_menu_style5);
fab = findViewById(R.id.chatbot);
}
private final int[] StyleTextColors = new int[]{
Color.parseColor("#4a453a"),
Color.parseColor("#505550"),
Color.parseColor("#453e33"),
Color.parseColor("#8f8e88"),
Color.parseColor("#27576c")
};
protected String ContentStr = null;
protected String FilePath = null;
protected String FileName = null;
protected void loadFile() {
TxtConfig.savePageSwitchDuration(this, 400);
if (ContentStr == null) {
if (TextUtils.isEmpty(FilePath) || !(new File(FilePath).exists())) {
toast("文件不存在");
return;
}
}
mHandler.postDelayed(() -> {
//延迟加载避免闪一下的情况出现
if (ContentStr == null) {
loadOurFile();
} else {
loadStr();
}
}, 300);
}
/**
*
*/
protected void loadOurFile() {
mTxtReaderView.loadTxtFile(FilePath, new ILoadListener() {
@Override
public void onSuccess() {
if (!hasExisted) {
onLoadDataSuccess();
}
}
@Override
public void onFail(final TxtMsg txtMsg) {
if (!hasExisted) {
runOnUiThread(() -> onLoadDataFail(txtMsg));
}
}
@Override
public void onMessage(String message) {
//加载过程信息
}
});
}
/**
* @param txtMsg txtMsg
*/
protected void onLoadDataFail(TxtMsg txtMsg) {
//加载失败信息
toast(String.valueOf(txtMsg));
}
/**
*
*/
protected void onLoadDataSuccess() {
if (TextUtils.isEmpty(FileName)) {//没有显示的名称,获取文件名显示
FileName = mTxtReaderView.getTxtReaderContext().getFileMsg().FileName;
}
setBookName(FileName);
initWhenLoadDone();
}
private void loadStr() {
String testText = ContentStr;
mTxtReaderView.loadText(testText, new ILoadListener() {
@Override
public void onSuccess() {
setBookName("test with str");
initWhenLoadDone();
}
@Override
public void onFail(TxtMsg txtMsg) {
//加载失败信息
toast(txtMsg + "");
}
@Override
public void onMessage(String message) {
//加载过程信息
}
});
}
protected void initWhenLoadDone() {
if (mTxtReaderView.getTxtReaderContext().getFileMsg() != null) {
FileName = mTxtReaderView.getTxtReaderContext().getFileMsg().FileName;
}
mMenuHolder.mTextSize.setText(String.valueOf(mTxtReaderView.getTextSize()));
mTopDecoration.setBackgroundColor(mTxtReaderView.getBackgroundColor());
mBottomDecoration.setBackgroundColor(mTxtReaderView.getBackgroundColor());
//mTxtReaderView.setLeftSlider(new MuiLeftSlider());//修改左滑动条
//mTxtReaderView.setRightSlider(new MuiRightSlider());//修改右滑动条
//字体初始化
onTextSettingUi(mTxtReaderView.getTxtReaderContext().getTxtConfig().Bold);
//翻页初始化
onPageSwitchSettingUi(mTxtReaderView.getTxtReaderContext().getTxtConfig().Page_Switch_Mode);
//保存的翻页模式
int pageSwitchMode = mTxtReaderView.getTxtReaderContext().getTxtConfig().Page_Switch_Mode;
if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SERIAL) {
mTxtReaderView.setPageSwitchByTranslate();
} else if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_COVER) {
mTxtReaderView.setPageSwitchByCover();
} else if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SHEAR) {
mTxtReaderView.setPageSwitchByShear();
}
//章节初始化
if (mTxtReaderView.getChapters() != null && mTxtReaderView.getChapters().size() > 0) {
WindowManager m = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
m.getDefaultDisplay().getMetrics(metrics);
int ViewHeight = metrics.heightPixels - mTopDecoration.getHeight();
mChapterListPop = new ChapterList(this, ViewHeight, mTxtReaderView.getChapters(), mTxtReaderView.getTxtReaderContext().getParagraphData().getCharNum());
mChapterListPop.setOnDismissListener(this::hideNavigationBarStatusBar);
mChapterListPop.getListView().setOnItemClickListener((adapterView, view, i, l) -> {
IChapter chapter = (IChapter) mChapterListPop.getAdapter().getItem(i);
mChapterListPop.dismiss();
mTxtReaderView.loadFromProgress(chapter.getStartParagraphIndex(), 0);
});
} else {
Gone(mChapterMenuText);
}
}
protected void registerListener() {
mSettingText.setOnClickListener(view -> Show(mTopMenu, mBottomMenu, mCoverView));
setMenuListener();
setSeekBarListener();
setCenterClickListener();
setPageChangeListener();
setOnTextSelectListener();
setStyleChangeListener();
setExtraListener();
setChatbotListener();
}
private void setChatbotListener() {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Define what happens when the fab is clicked
// Toast.makeText(HwTxtPlayActivity.this, "Floating Action Button Clicked!", Toast.LENGTH_SHORT).show();
String bookName = FileName.substring(0, FileName.lastIndexOf("."));
Intent intent = new Intent(HwTxtPlayActivity.this,ChatWithGptActivity.class);
intent.putExtra("book_name", bookName);
startActivity(intent);
}
});
}
//底部菜单中的按钮监听:上一章,下一章,字体减小、放大,粗体,翻页的滑盖、平移、剪切
private void setExtraListener() {
mMenuHolder.mPreChapter.setOnClickListener(new ChapterChangeClickListener(true));
mMenuHolder.mNextChapter.setOnClickListener(new ChapterChangeClickListener(false));
mMenuHolder.mTextSizeAdd.setOnClickListener(new TextChangeClickListener(true));
mMenuHolder.mTextSizeDel.setOnClickListener(new TextChangeClickListener(false));
mMenuHolder.mBoldSelectedLayout.setOnClickListener(new TextSettingClickListener());
mMenuHolder.mCoverSelectedLayout.setOnClickListener(new SwitchSettingClickListener(TxtConfig.PAGE_SWITCH_MODE_COVER));
mMenuHolder.mTranslateSelectedLayout.setOnClickListener(new SwitchSettingClickListener(TxtConfig.PAGE_SWITCH_MODE_SERIAL));
mMenuHolder.mShearSelectedLayout.setOnClickListener(new SwitchSettingClickListener(TxtConfig.PAGE_SWITCH_MODE_SHEAR));
}
//背景色修改
protected void setStyleChangeListener() {
mMenuHolder.mStyle1.setOnClickListener(new StyleChangeClickListener(ContextCompat.getColor(this, R.color.hwTxtReader_styleColor1), StyleTextColors[0]));
mMenuHolder.mStyle2.setOnClickListener(new StyleChangeClickListener(ContextCompat.getColor(this, R.color.hwTxtReader_styleColor2), StyleTextColors[1]));
mMenuHolder.mStyle3.setOnClickListener(new StyleChangeClickListener(ContextCompat.getColor(this, R.color.hwTxtReader_styleColor3), StyleTextColors[2]));
mMenuHolder.mStyle4.setOnClickListener(new StyleChangeClickListener(ContextCompat.getColor(this, R.color.hwTxtReader_styleColor4), StyleTextColors[3]));
mMenuHolder.mStyle5.setOnClickListener(new StyleChangeClickListener(ContextCompat.getColor(this, R.color.hwTxtReader_styleColor5), StyleTextColors[4]));
}
protected void setOnTextSelectListener() {
mTxtReaderView.setOnTextSelectListener(new ITextSelectListener() {
@Override
public void onTextChanging(TxtChar firstSelectedChar, TxtChar lastSelectedChar) {
//firstSelectedChar.Top
// firstSelectedChar.Bottom
// 这里可以根据 firstSelectedChar与lastSelectedChar的top与bottom的位置
//计算显示你要显示的弹窗位置,如果需要的话
}
@Override
public void onTextChanging(String selectText) {
onCurrentSelectedText(selectText);
}
@Override
public void onTextSelected(String selectText) {
onCurrentSelectedText(selectText);
}
});
mTxtReaderView.setOnSliderListener(new ISliderListener() {
@Override
public void onShowSlider(TxtChar txtChar) {
//TxtChar 为当前长按选中的字符
// 这里可以根据 txtChar的top与bottom的位置
//计算显示你要显示的弹窗位置,如果需要的话
}
@Override
public void onShowSlider(String currentSelectedText) {
onCurrentSelectedText(currentSelectedText);
Show(ClipboardView);
}
@Override
public void onReleaseSlider() {
Gone(ClipboardView);
}
});
}
protected void setPageChangeListener() {
mTxtReaderView.setPageChangeListener(progress -> {
int p = (int) (progress * 1000);
mProgressText.setText(((float) p / 10) + "%");
mMenuHolder.mSeekBar.setProgress((int) (progress * 100));
IChapter currentChapter = mTxtReaderView.getCurrentChapter();
if (currentChapter != null) {
mChapterNameText.setText((currentChapter.getTitle() + "").trim());
} else {
mChapterNameText.setText("无章节");
}
});
}
protected void setCenterClickListener() {
mTxtReaderView.setOnCenterAreaClickListener(new ICenterAreaClickListener() {
@Override
public boolean onCenterClick(float widthPercentInView) { //点击中心区域才会弹出
mSettingText.performClick();
fab.setVisibility(View.VISIBLE); // Make FloatingActionButton visible
return true;
}
@Override
public boolean onOutSideCenterClick(float widthPercentInView) {
if (mBottomMenu.getVisibility() == View.VISIBLE) {
mSettingText.performClick();
fab.setVisibility(View.GONE); // 隐藏 FloatingActionButton
return true;
}
return false;
}
});
}
// 设置菜单监听器
protected void setMenuListener() {
mTopMenu.setOnTouchListener((view, motionEvent) -> true);
mBottomMenu.setOnTouchListener((view, motionEvent) -> true);
mCoverView.setOnTouchListener((view, motionEvent) -> {
Gone(mTopMenu, mBottomMenu, mCoverView, mChapterMsgView);
fab.setVisibility(View.GONE); // 同时隐藏 FloatingActionButton
return true;
});
//为章节信息文本设置点击监听器,当点击时会显示或隐藏章节列表弹窗
View.OnClickListener chapterMsgShowClick = v -> {
if (mChapterListPop != null) {
if (!mChapterListPop.isShowing()) {
mChapterListPop.showAsDropDown(mTopDecoration);
mHandler.postDelayed(() -> {
IChapter currentChapter = mTxtReaderView.getCurrentChapter();
if (currentChapter != null) {
mChapterListPop.setCurrentIndex(currentChapter.getIndex());
mChapterListPop.notifyDataSetChanged();
}
}, 300);
} else {
mChapterListPop.dismiss();
}
}
};
mChapterNameText.setOnClickListener(chapterMsgShowClick);
mChapterMenuText.setOnClickListener(chapterMsgShowClick);
mTopMenu.setOnClickListener(view -> {
if (mChapterListPop.isShowing()) {
mChapterListPop.dismiss();
}
});
}
// 设置进度条监听器
protected void setSeekBarListener() {
mMenuHolder.mSeekBar.setOnTouchListener((view, motionEvent) -> {
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
mTxtReaderView.loadFromProgress(mMenuHolder.mSeekBar.getProgress());
Gone(mChapterMsgView);
}
return false;
});
mMenuHolder.mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, final int progress, boolean fromUser) {
if (fromUser) {
mHandler.post(() -> onShowChapterMsg(progress));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Gone(mChapterMsgView);
}
});
}
private void onShowChapterMsg(int progress) {
if (mTxtReaderView != null && mChapterListPop != null) {
IChapter chapter = mTxtReaderView.getChapterFromProgress(progress);
if (chapter != null) {
float p = (float) chapter.getStartIndex() / (float) mChapterListPop.getAllCharNum();
if (p > 1) {
p = 1;
}
Show(mChapterMsgView);
mChapterMsgName.setText(chapter.getTitle());
mChapterMsgProgress.setText((int) (p * 100) + "%");
}
}
}
private void onCurrentSelectedText(String SelectedText) {
String selectTextShow = String.format(getString(R.string.select_char_num), (SelectedText + "").length());
mSelectedText.setText(selectTextShow);
CurrentSelectedText = SelectedText;
}
private void onTextSettingUi(Boolean isBold) {
int rs = isBold ? R.drawable.ic_bold_selected : R.drawable.ic_bold_normal;
mMenuHolder.mBoldSelectedLayout.setBackgroundDrawable(ResourcesCompat.getDrawable(getResources(), rs, null));
}
private void onPageSwitchSettingUi(int pageSwitchMode) {
if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SERIAL) {
mMenuHolder.mTranslateSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_selected);
mMenuHolder.mCoverSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
mMenuHolder.mShearSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
} else if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_COVER) {
mMenuHolder.mTranslateSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
mMenuHolder.mCoverSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_selected);
mMenuHolder.mShearSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
} else if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SHEAR) {
mMenuHolder.mTranslateSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
mMenuHolder.mCoverSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_unselected);
mMenuHolder.mShearSelectedLayout.setBackgroundResource(R.drawable.shape_menu_textsetting_selected);
}
}
private class TextSettingClickListener implements View.OnClickListener {
public TextSettingClickListener() {
}
@Override
public void onClick(View view) {
if (FileExist) {
Boolean Bold = mTxtReaderView.getTxtReaderContext().getTxtConfig().Bold;
mTxtReaderView.setTextBold(!Bold);
onTextSettingUi(!Bold);
}
}
}
//设置滑盖 平移 剪切的翻页模式
private class SwitchSettingClickListener implements View.OnClickListener {
private final int pageSwitchMode;
public SwitchSettingClickListener(int pageSwitchMode) {
this.pageSwitchMode = pageSwitchMode;
}
@Override
public void onClick(View view) {
if (FileExist) {
if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_COVER) {
mTxtReaderView.setPageSwitchByCover();
} else if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SERIAL) {
mTxtReaderView.setPageSwitchByTranslate();
}
if (pageSwitchMode == TxtConfig.PAGE_SWITCH_MODE_SHEAR) {
mTxtReaderView.setPageSwitchByShear();
}
onPageSwitchSettingUi(pageSwitchMode);
}
}
}
private class ChapterChangeClickListener implements View.OnClickListener {
private final Boolean Pre;
public ChapterChangeClickListener(Boolean pre) {
Pre = pre;
}
@Override
public void onClick(View view) {
if (Pre) {
mTxtReaderView.jumpToPreChapter();
} else {
mTxtReaderView.jumpToNextChapter();
}
}
}
private class TextChangeClickListener implements View.OnClickListener {
private final Boolean Add;
public TextChangeClickListener(Boolean pre) {
Add = pre;
}
@Override
public void onClick(View view) {
if (FileExist) {
int textSize = mTxtReaderView.getTextSize();
if (Add) {
if (textSize + 2 <= TxtConfig.MAX_TEXT_SIZE) {
mTxtReaderView.setTextSize(textSize + 2);
mMenuHolder.mTextSize.setText(textSize + 2 + "");
}
} else {
if (textSize - 2 >= TxtConfig.MIN_TEXT_SIZE) {
mTxtReaderView.setTextSize(textSize - 2);
mMenuHolder.mTextSize.setText(textSize - 2 + "");
}
}
}
}
}
private class StyleChangeClickListener implements View.OnClickListener {
private final int BgColor;
private final int TextColor;
public StyleChangeClickListener(int bgColor, int textColor) {
BgColor = bgColor;
TextColor = textColor;
}
@Override
public void onClick(View view) {
if (FileExist) {
mTxtReaderView.setStyle(BgColor, TextColor);
mTopDecoration.setBackgroundColor(BgColor);
mBottomDecoration.setBackgroundColor(BgColor);
}
}
}
protected void setBookName(String name) {
mMenuHolder.mTitle.setText(name + "");
}
protected void Show(View... views) {
for (View v : views) {
v.setVisibility(View.VISIBLE);
}
}
protected void Gone(View... views) {
for (View v : views) {
v.setVisibility(View.GONE);
}
}
private Toast t;
protected void toast(final String msg) {
if (t != null) {
t.cancel();
}
t = Toast.makeText(HwTxtPlayActivity.this, msg, Toast.LENGTH_SHORT);
t.show();
}
protected static class MenuHolder {
public TextView mTitle;
public TextView mPreChapter;
public TextView mNextChapter;
public SeekBar mSeekBar;
public View mTextSizeDel;
public View mTextSizeAdd;
public TextView mTextSize;
public View mBoldSelectedLayout;
public View mCoverSelectedLayout;
public View mShearSelectedLayout;
public View mTranslateSelectedLayout;
public View mStyle1;
public View mStyle2;
public View mStyle3;
public View mStyle4;
public View mStyle5;
}
@Override
protected void onResume() {
super.onResume();
hideNavigationBarStatusBar();
}
private void hideNavigationBarStatusBar() {
if (Build.VERSION.SDK_INT >= 19) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
exist();
}
public void BackClick(View view) {
finish();
}
public void onCopyText(View view) {
if (!TextUtils.isEmpty(CurrentSelectedText)) {
toast("已经复制到粘贴板");
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(CurrentSelectedText + "");
}
onCurrentSelectedText("");
mTxtReaderView.releaseSelectedState();
Gone(ClipboardView);
}
public void onChatbot(View view){
String bookName = FileName.substring(0, FileName.lastIndexOf("."));
Intent intent = new Intent(HwTxtPlayActivity.this,ChatWithGptActivity.class);
intent.putExtra("book_name", bookName);
intent.putExtra("cite", CurrentSelectedText);
startActivity(intent);
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
@Override
public void finish() {
super.finish();
exist();
}
protected boolean hasExisted = false;
protected void exist() {
if (!hasExisted) {
ContentStr = null;
hasExisted = true;
if (mHandler != null) {
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
if (mTxtReaderView != null) {
mTxtReaderView.saveCurrentProgress();
mTxtReaderView.onDestroy();
}
if (mTxtReaderView != null) {
mTxtReaderView.getTxtReaderContext().Clear();
mTxtReaderView = null;
}
if (mChapterListPop != null) {
if (mChapterListPop.isShowing()) {
mChapterListPop.dismiss();
}
mChapterListPop.onDestroy();
mChapterListPop = null;
}
mMenuHolder = null;
}
}
}