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; } } }