Commit a712c8cd authored by wanglei's avatar wanglei

...

parent ee0d0337
package com.base.pdfviewerscannerwhite.ui.document.word
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.content.pm.ActivityInfo
import android.view.View
import android.view.animation.Animation
import android.view.animation.TranslateAnimation
import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.isVisible
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.ActivityWordBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentMore
import com.base.pdfviewerscannerwhite.utils.KeyBoardUtils.hideKeyboard
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.cherry.lib.doc.widget.PoiViewer
import com.cherry.lib.doc.bean.DocEngine
import com.cherry.lib.doc.office.constant.EventConstant.APP_PAGE_DOWN_ID
import com.cherry.lib.doc.office.constant.EventConstant.APP_PAGE_UP_ID
import com.cherry.lib.doc.office.wp.control.WPControl
import com.cherry.lib.doc.util.Constant
class WordActivity : BaseActivity<ActivityWordBinding>() {
......@@ -20,12 +27,33 @@ class WordActivity : BaseActivity<ActivityWordBinding>() {
override val binding: ActivityWordBinding by lazy {
ActivityWordBinding.inflate(layoutInflater)
}
private lateinit var mPoiViewer: PoiViewer
private var path: String = ""
private var totalPageNumber = 0
private var currentPageNumber = 0
@SuppressLint("SetTextI18n")
override fun initView() {
path = intent.extras?.getString("path") ?: ""
word2Html(path)
initSpData(intent)
binding.mDocView.getPageNumberAction = { current, total ->
LogEx.logDebug(TAG, "getPageNumberAction")
if (!binding.tvPageCount.isVisible) {
binding.tvPageCount.isVisible = true
}
currentPageNumber = current
totalPageNumber = total
binding.tvPageCount.text = "$current/$total"
}
binding.mDocView.singleTapAction = {
LogEx.logDebug(TAG, "actionDownCallBack")
if (isShowTopLayout) {
LogEx.logDebug(TAG, "hide")
hideTopLayout()
} else {
showTopLayout()
LogEx.logDebug(TAG, "show")
}
}
}
override fun initListener() {
......@@ -40,20 +68,16 @@ class WordActivity : BaseActivity<ActivityWordBinding>() {
switchOrientation()
}
binding.ivMore.setOnClickListener {
showDocumentMore(wordDocumentBean)
}
mPoiViewer.singleTapAction = {
LogEx.logDebug(TAG, "singleTapAction")
if (isShowTopLayout) {
LogEx.logDebug(TAG, "hide")
hideTopLayout()
} else {
showTopLayout()
LogEx.logDebug(TAG, "show")
showDocumentMore(wordDocumentBean, totalPageNumber - 1) { pageIndex ->
val wpControl: WPControl = (binding.mDocView.iOffice?.control?.appControl as WPControl)
if (pageIndex > currentPageNumber) {
wpControl.wpView.showPage(pageIndex, APP_PAGE_DOWN_ID)
} else {
wpControl.wpView.showPage(pageIndex, APP_PAGE_UP_ID)
}
// wpControl.actionEvent(APP_PAGE_UP_ID, null)
}
}
}
private fun switchOrientation() {
......@@ -64,15 +88,6 @@ class WordActivity : BaseActivity<ActivityWordBinding>() {
}
}
private fun word2Html(sourceFilePath: String) {
mPoiViewer = PoiViewer(this)
try {
mPoiViewer.loadFile(binding.mFlDocContainer, sourceFilePath)
} catch (e: java.lang.Exception) {
Toast.makeText(this, "open failed", Toast.LENGTH_SHORT).show()
}
}
private var isShowTopLayout = true
private fun showTopLayout() {
......@@ -112,8 +127,41 @@ class WordActivity : BaseActivity<ActivityWordBinding>() {
}
}
private var docSourceType = 0
private var fileType = -1
private var engine: Int = DocEngine.INTERNAL.value
private var pathOrUri: String? = null// 文件地址
private fun initSpData(intent: Intent?) {
pathOrUri = intent?.getStringExtra(Constant.INTENT_DATA_KEY)
docSourceType = intent?.getIntExtra(Constant.INTENT_SOURCE_KEY, 0) ?: 0
fileType = intent?.getIntExtra(Constant.INTENT_TYPE_KEY, -1) ?: -1
engine = intent?.getIntExtra(Constant.INTENT_ENGINE_KEY, DocEngine.INTERNAL.value) ?: DocEngine.INTERNAL.value
binding.mDocView.openDoc(this, pathOrUri, docSourceType, fileType, false, DocEngine.values().first { it.value == engine })
LogEx.logDebug(TAG, "initData-docUrl = $pathOrUri")
LogEx.logDebug(TAG, "initData-docSourceType = $docSourceType")
LogEx.logDebug(TAG, "initData-fileType = $fileType")
LogEx.logDebug(TAG, "initData-engine = $engine")
}
companion object {
var wordDocumentBean: DocumentBean = DocumentBean()
fun launchDocViewer(
activity: Activity,
docSourceType: Int,
path: String?,
fileType: Int? = null,
engine: Int? = null
) {
val intent = Intent(activity, WordActivity::class.java)
intent.putExtra(Constant.INTENT_SOURCE_KEY, docSourceType)
intent.putExtra(Constant.INTENT_DATA_KEY, path)
intent.putExtra(Constant.INTENT_TYPE_KEY, fileType)
intent.putExtra(Constant.INTENT_ENGINE_KEY, engine)
activity.startActivity(intent)
}
}
}
\ No newline at end of file
......@@ -17,7 +17,6 @@ import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfActivity
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSplitActivity
import com.base.pdfviewerscannerwhite.ui.document.ppt.PptActivity
import com.base.pdfviewerscannerwhite.ui.document.word.WordActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentDetail
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfHomeMoreDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfPwdDialog
......@@ -82,8 +81,8 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
// startActivity(Intent(requireContext(), WordActivity::class.java).apply {
// putExtra("path", item.path)
// })
WordActivity.wordDocumentBean
PptActivity.launchDocViewer(requireActivity(), 3, item.path, -1, 100)
WordActivity.wordDocumentBean = item
WordActivity.launchDocViewer(requireActivity(), 3, item.path, -1, 100)
}
if (type == TYPE_EXCEL) {
ExcelActivity.excelDocumentBean
......
......@@ -13,6 +13,8 @@ import androidx.core.widget.addTextChangedListener
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_EXCEL
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfviewerscannerwhite.databinding.DialogCommonTipBinding
import com.base.pdfviewerscannerwhite.databinding.DialogDeleteBinding
import com.base.pdfviewerscannerwhite.databinding.DialogDocumentDetailBinding
......@@ -32,6 +34,7 @@ import com.base.pdfviewerscannerwhite.utils.ActivityLauncher
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfIntent
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfPrintIntent
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePptIntent
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.shareWordIntent
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime2
......@@ -293,7 +296,17 @@ object DialogView {
val uri = FileProvider.getUriForFile(
this, this.packageName + ".provider", File(documentBean.path)
)
startActivity(Intent.createChooser(sharePptIntent(uri), "Share PDF"))
var intent: Intent? = null
var desc = "Share PDF"
if (documentBean.type == TYPE_PPT) {
intent = sharePptIntent(uri)
desc = "Share PPT"
}
if (documentBean.type == TYPE_WORD) {
intent = shareWordIntent(uri)
desc = "Share Word"
}
intent?.let { startActivity(Intent.createChooser(it, desc)) }
}
binding.llJump.setOnClickListener {
showJumpPageNumberDialog(pageNumber) { pageIndex ->
......
......@@ -25,6 +25,16 @@ object IntentShareUtils {
return shareIntent
}
fun shareWordIntent(uri: Uri): Intent {
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, uri)
type = "application/msword"
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 授权临时权限
}
return shareIntent
}
fun sharePdfPrintIntent(uri: Uri): Intent {
// 创建打印的 Intent
val intent = Intent(Intent.ACTION_SEND)
......
......@@ -2,10 +2,10 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.document.word.WordActivity">
tools:context=".ui.document.ppt.PptActivity">
<ViewAnimator
android:id="@+id/v_animator_top"
......@@ -52,7 +52,7 @@
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="DEMO.docx" />
tools:text="DEMO.xlsx" />
<ImageView
android:id="@+id/iv_xuanzhuan"
......@@ -112,11 +112,34 @@
</ViewAnimator>
<FrameLayout
android:id="@+id/mFlDocContainer"
<com.cherry.lib.doc.widget.DocView
android:id="@+id/mDocView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:dv_engine="internal"
app:dv_moving_orientation="vertical"
app:dv_page_pb_color="@color/yellow"
app:dv_page_pb_height="2dp"
app:dv_show_page_num="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top" />
<TextView
android:id="@+id/tv_pageCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="28dp"
android:background="@drawable/bg_54585b_5"
android:includeFontPadding="false"
android:paddingHorizontal="2dp"
android:paddingVertical="2dp"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top"
tools:text="1/3" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -59,7 +59,6 @@ public interface IWord
/**
*
* @param para
* @return
*/
public IAnimation getParagraphAnimation(int pargraphID);
......
......@@ -380,7 +380,6 @@ public abstract class AbstractView implements IView
/**
* 删除一个指定视图
*
* @param idDeleteChlid = ture,则连子视图也删除。
*/
public void deleteView(IView view, boolean isDeleteChild)
{
......
......@@ -70,6 +70,7 @@ public class PrintWord extends FrameLayout implements IPageListViewListener {
this.control = control;
this.pageRoot = pageRoot;
Log.e("PrintWord", "PrintWord");
listView = new APageListView(context, this);
addView(listView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
......@@ -625,11 +626,11 @@ public class PrintWord extends FrameLayout implements IPageListViewListener {
//
private IControl control;
//
private APageListView listView;
public APageListView listView;
// 绘制器
private Paint paint;
//
private PageRoot pageRoot;
public PageRoot pageRoot;
//
private Rect pageSize = new Rect();
......
......@@ -597,5 +597,5 @@ public class WPControl extends AbstractControl
//
private IControl mainControl;
//
private Word wpView;
public Word wpView;
}
......@@ -61,6 +61,7 @@ public class Word extends LinearLayout implements IWord {
*/
public Word(Context context, IDocument doc, String filePath, IControl control) {
super(context);
this.control = control;
this.doc = doc;
int defaultMode = control.getMainFrame().getWordDefaultView();
......@@ -68,8 +69,10 @@ public class Word extends LinearLayout implements IWord {
if (defaultMode == WPViewConstant.NORMAL_ROOT) {
normalRoot = new NormalRoot(this);
} else if (defaultMode == WPViewConstant.PAGE_ROOT) {
Log.e("Word", "PageRoot");
pageRoot = new PageRoot(this);
} else if (defaultMode == WPViewConstant.PRINT_ROOT) {
Log.e("Word", "PrintWord");
pageRoot = new PageRoot(this);
printWord = new PrintWord(context, control, pageRoot);
addView(printWord);
......@@ -526,16 +529,19 @@ public class Word extends LinearLayout implements IWord {
*/
public int getCurrentPageNumber() {
if (currentRootType == WPViewConstant.NORMAL_ROOT || pageRoot == null) {
Log.e("Word", "getCurrentPageNumber0");
return 1;
}
if (getCurrentRootType() == WPViewConstant.PRINT_ROOT) {
Log.e("Word", "getCurrentPageNumber1");
return printWord.getCurrentPageNumber();
}
PageView pv = WPViewKit.instance().getPageView(pageRoot, (int) (getScrollX() / zoom),
(int) (getScrollY() / zoom) + getHeight() / 3);
PageView pv = WPViewKit.instance().getPageView(pageRoot, (int) (getScrollX() / zoom), (int) (getScrollY() / zoom) + getHeight() / 3);
if (pv == null) {
Log.e("Word", "getCurrentPageNumber2");
return 1;
}
Log.e("Word", "getCurrentPageNumber3");
return pv.getPageNumber();
}
......@@ -571,15 +577,17 @@ public class Word extends LinearLayout implements IWord {
*/
private void drawPageNubmer(Canvas canvas, float zoom) {
Log.e("Word", "drawPageNubmer");
int currentNumber = getCurrentPageNumber();
control.getMainFrame().getPageNumber(currentNumber, pageRoot.getPageCount());
if (control.getMainFrame().isDrawPageNumber() && pageRoot != null) {
Rect rect = canvas.getClipBounds();
if (rect.width() != getWidth()
|| rect.height() != getHeight()) {
return;
}
String pn = String.valueOf(currentNumber) + " / "
+ String.valueOf(pageRoot.getPageCount());
String pn = String.valueOf(currentNumber) + " / " + String.valueOf(pageRoot.getPageCount());
int w = (int) paint.measureText(pn);
int h = (int) (paint.descent() - paint.ascent());
int x = (int) ((rect.right + getScrollX() - w) / 2);
......@@ -753,7 +761,7 @@ public class Word extends LinearLayout implements IWord {
*
* @param index page index
*/
protected void showPage(int index, int direction) {
public void showPage(int index, int direction) {
if (index < 0 || index >= getPageCount()
|| getCurrentRootType() == WPViewConstant.NORMAL_ROOT) {
return;
......@@ -1085,7 +1093,7 @@ public class Word extends LinearLayout implements IWord {
//
private NormalRoot normalRoot;
//
private PrintWord printWord;
public PrintWord printWord;
// 绘制器
private Paint paint;
//
......
......@@ -20,7 +20,6 @@ import com.cherry.lib.doc.office.simpletext.view.AbstractView;
import com.cherry.lib.doc.office.simpletext.view.IRoot;
import com.cherry.lib.doc.office.simpletext.view.IView;
import com.cherry.lib.doc.office.simpletext.view.ViewContainer;
import com.cherry.lib.doc.office.system.ErrorUtil;
import com.cherry.lib.doc.office.system.IControl;
import com.cherry.lib.doc.office.wp.control.Word;
......@@ -101,8 +100,6 @@ public class PageRoot extends AbstractView implements IRoot
/**
*
* @param canvas
* @param x
* @param y
* @param zoom
*/
public synchronized void draw(Canvas canvas, int originX, int originY, float zoom)
......
......@@ -65,8 +65,6 @@ public class PageView extends AbstractView
/**
*
* @param canvas
* @param x
* @param y
* @param zoom
*/
public void draw(Canvas canvas, int originX, int originY, float zoom)
......
......@@ -59,7 +59,6 @@ public class TableLayoutKit
* @param docAttr 文档属性
* @param pageAttr 页面属性
* @param paraAttr 段浇属性
* @param para 布局段落视图
* @param startOffset 布局开始Offset
* @param x 布局开始x值
* @param y 布局开始y值
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment