diff --git a/PdfView/PdfView.iml b/PdfView/PdfView.iml index aa2d928..7ef96b0 100644 --- a/PdfView/PdfView.iml +++ b/PdfView/PdfView.iml @@ -65,14 +65,6 @@ - - - - - - - - @@ -81,6 +73,14 @@ + + + + + + + + @@ -102,6 +102,5 @@ - \ No newline at end of file diff --git a/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerActivity.java b/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerActivity.java index a7f4480..c6fb493 100644 --- a/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerActivity.java +++ b/PdfView/src/main/java/net/sf/andpdf/pdfviewer/PdfViewerActivity.java @@ -49,741 +49,592 @@ import java.io.IOException; * * @author ferenc.hechler */ -public abstract class PdfViewerActivity extends Activity { +public class PdfViewerActivity extends Activity { - public static final String BUNDLE_KEY = "BUNDLE_KEY"; + public static final String BUNDLE_KEY = "BUNDLE_KEY"; - private static final int STARTPAGE = 1; - private static final float STARTZOOM = 1.0f; + private static final int STARTPAGE = 1; + private static final float STARTZOOM = 1.0f; - private static final float MIN_ZOOM = 0.25f; - private static final float MAX_ZOOM = 3.0f; - private static final float ZOOM_INCREMENT = 1.5f; + private static final float MIN_ZOOM = 0.25f; + private static final float MAX_ZOOM = 3.0f; + private static final float ZOOM_INCREMENT = 1.5f; - private static final String TAG = "PDFVIEWER"; + private static final String TAG = "PDFVIEWER"; - public static final String EXTRA_PDFFILENAME = "net.sf.andpdf.extra.PDFFILENAME"; - public static final String EXTRA_SHOWIMAGES = "net.sf.andpdf.extra.SHOWIMAGES"; - public static final String EXTRA_ANTIALIAS = "net.sf.andpdf.extra.ANTIALIAS"; - public static final String EXTRA_USEFONTSUBSTITUTION = "net.sf.andpdf.extra.USEFONTSUBSTITUTION"; - public static final String EXTRA_KEEPCACHES = "net.sf.andpdf.extra.KEEPCACHES"; + public static final String EXTRA_PDFFILENAME = "net.sf.andpdf.extra.PDFFILENAME"; + public static final String EXTRA_SHOWIMAGES = "net.sf.andpdf.extra.SHOWIMAGES"; + public static final String EXTRA_ANTIALIAS = "net.sf.andpdf.extra.ANTIALIAS"; + public static final String EXTRA_USEFONTSUBSTITUTION = "net.sf.andpdf.extra.USEFONTSUBSTITUTION"; + public static final String EXTRA_KEEPCACHES = "net.sf.andpdf.extra.KEEPCACHES"; - public static final boolean DEFAULTSHOWIMAGES = true; - public static final boolean DEFAULTANTIALIAS = true; - public static final boolean DEFAULTUSEFONTSUBSTITUTION = false; - public static final boolean DEFAULTKEEPCACHES = false; + public static final boolean DEFAULTSHOWIMAGES = true; + public static final boolean DEFAULTANTIALIAS = true; + public static final boolean DEFAULTUSEFONTSUBSTITUTION = false; + public static final boolean DEFAULTKEEPCACHES = false; - private final static int MENU_NEXT_PAGE = 1; - private final static int MENU_PREV_PAGE = 2; - private final static int MENU_GOTO_PAGE = 3; - private final static int MENU_ZOOM_IN = 4; - private final static int MENU_ZOOM_OUT = 5; - private final static int MENU_BACK = 6; - private final static int MENU_CLEANUP = 7; + private final static int MENU_NEXT_PAGE = 1; + private final static int MENU_PREV_PAGE = 2; + private final static int MENU_GOTO_PAGE = 3; + private final static int MENU_ZOOM_IN = 4; + private final static int MENU_ZOOM_OUT = 5; + private final static int MENU_BACK = 6; + private final static int MENU_CLEANUP = 7; - private final static int DIALOG_PAGENUM = 1; + private final static int DIALOG_PAGENUM = 1; - private GraphView mOldGraphView; - private GraphView mGraphView; - private PDFFile mPdfFile; - private byte[] byteArray; - private int mPage; - private float mZoom; - private File mTmpFile; - private ProgressDialog progress; + private GraphView mOldGraphView; + private GraphView mGraphView; + private PDFFile mPdfFile; + private byte[] byteArray; + private int mPage; + private float mZoom; + private File mTmpFile; + private ProgressDialog progress; /*private View navigationPanel; private Handler closeNavigationHandler; private Thread closeNavigationThread;*/ - private PDFPage mPdfPage; + private PDFPage mPdfPage; - private Thread backgroundThread; - private Handler uiHandler; + private Thread backgroundThread; + private Handler uiHandler; - @Override public Object onRetainNonConfigurationInstance() { - // return a reference to the current instance - Log.e(TAG, "onRetainNonConfigurationInstance"); - return this; - } - - /** - * restore member variables from previously saved instance - * - * @return true if instance to restore from was found - * @see - */ - private boolean restoreInstance() { - mOldGraphView = null; - Log.e(TAG, "restoreInstance"); - if (getLastNonConfigurationInstance() == null) return false; - PdfViewerActivity inst = (PdfViewerActivity) getLastNonConfigurationInstance(); - if (inst != this) { - Log.e(TAG, "restoring Instance"); - mOldGraphView = inst.mGraphView; - mPage = inst.mPage; - mPdfFile = inst.mPdfFile; - mPdfPage = inst.mPdfPage; - mTmpFile = inst.mTmpFile; - mZoom = inst.mZoom; - backgroundThread = inst.backgroundThread; - // mGraphView.invalidate(); - } - return true; - } - - /** - * Called when the activity is first created. - */ - @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Log.i(TAG, "onCreate"); - uiHandler = new Handler(); - restoreInstance(); - if (savedInstanceState != null) { - final byte[] byteArray = savedInstanceState.getByteArray(BUNDLE_KEY); - if (byteArray != null) { - this.byteArray=byteArray; - } - } - if (mOldGraphView != null) { - mGraphView = new GraphView(this); - mGraphView.mBi = mOldGraphView.mBi; - mOldGraphView = null; - mGraphView.mImageView.setImageBitmap(mGraphView.mBi); - // mGraphView.updateTexts(); - setContentView(mGraphView); - } else { - mGraphView = new GraphView(this); - Intent intent = getIntent(); - Log.i(TAG, "" + intent); - - boolean showImages = - getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_SHOWIMAGES, PdfViewerActivity.DEFAULTSHOWIMAGES); - PDFImage.sShowImages = showImages; - boolean antiAlias = - getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_ANTIALIAS, PdfViewerActivity.DEFAULTANTIALIAS); - PDFPaint.s_doAntiAlias = antiAlias; - boolean useFontSubstitution = getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_USEFONTSUBSTITUTION, - PdfViewerActivity.DEFAULTUSEFONTSUBSTITUTION); - PDFFont.sUseFontSubstitution = useFontSubstitution; - boolean keepCaches = - getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_KEEPCACHES, PdfViewerActivity.DEFAULTKEEPCACHES); - HardReference.sKeepCaches = true; - - mPage = STARTPAGE; - mZoom = STARTZOOM; - - setContent(null); - } - } - - private void setContent(String password) { - try { - openFile(byteArray, password); - pdfView.setmPdfFile(mPdfFile); - setContentView(mGraphView); - startRenderThread(mPage, mZoom); - } catch (PDFAuthenticationFailureException e) { - setContentView(getPdfPasswordLayoutResource()); - final EditText etPW = (EditText) findViewById(getPdfPasswordEditField()); - Button btOK = (Button) findViewById(getPdfPasswordOkButton()); - Button btExit = (Button) findViewById(getPdfPasswordExitButton()); - btOK.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - String pw = etPW.getText().toString(); - setContent(pw); + /** + * restore member variables from previously saved instance + * + * @return true if instance to restore from was found + * @see + */ + private boolean restoreInstance() { + mOldGraphView = null; + Log.e(TAG, "restoreInstance"); + if (getLastNonConfigurationInstance() == null) return false; + PdfViewerActivity inst = (PdfViewerActivity) getLastNonConfigurationInstance(); + if (inst != this) { + Log.e(TAG, "restoring Instance"); + mOldGraphView = inst.mGraphView; + mPage = inst.mPage; + mPdfFile = inst.mPdfFile; + mPdfPage = inst.mPdfPage; + mTmpFile = inst.mTmpFile; + mZoom = inst.mZoom; + backgroundThread = inst.backgroundThread; } - }); - btExit.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - finish(); - } - }); - } catch (Exception ex){ - Log.e(TAG, "an unexpected exception occurred"); + return true; } - } - private synchronized void startRenderThread(final int page, final float zoom) { - if (backgroundThread != null) return; - // mGraphView.showText("reading page " + page + ", zoom:" + zoom); - //progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page"); - backgroundThread = new Thread(new Runnable() { - public void run() { + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Log.i(TAG, "onCreate"); + uiHandler = new Handler(); + restoreInstance(); + + if (mOldGraphView != null) { + mGraphView = new GraphView(this); + mGraphView.mBi = mOldGraphView.mBi; + mOldGraphView = null; + mGraphView.mImageView.setImageBitmap(mGraphView.mBi); + // mGraphView.updateTexts(); + setContentView(mGraphView); + } else { + mGraphView = new GraphView(this); + Intent intent = getIntent(); + Log.i(TAG, "" + intent); + + PDFImage.sShowImages = getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_SHOWIMAGES, PdfViewerActivity.DEFAULTSHOWIMAGES); + PDFPaint.s_doAntiAlias = getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_ANTIALIAS, PdfViewerActivity.DEFAULTANTIALIAS); + PDFFont.sUseFontSubstitution = getIntent().getBooleanExtra(PdfViewerActivity.EXTRA_USEFONTSUBSTITUTION, + PdfViewerActivity.DEFAULTUSEFONTSUBSTITUTION); + HardReference.sKeepCaches = true; + + mPage = STARTPAGE; + mZoom = STARTZOOM; + + setContent(null); + } + } + + private void setContent(String password) { try { - if (mPdfFile != null) { - showPage(page, zoom); - } - } catch (Exception e) { - Log.e(TAG, e.getMessage(), e); + openFile(byteArray, password); + pdfView.setmPdfFile(mPdfFile); + setContentView(mGraphView); + startRenderThread(mPage, mZoom); + } catch (PDFAuthenticationFailureException e) { + setContentView(getPdfPasswordLayoutResource()); + final EditText etPW = (EditText) findViewById(getPdfPasswordEditField()); + Button btOK = (Button) findViewById(getPdfPasswordOkButton()); + Button btExit = (Button) findViewById(getPdfPasswordExitButton()); + btOK.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + String pw = etPW.getText().toString(); + setContent(pw); + } + }); + btExit.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + finish(); + } + }); + } catch (Exception ex) { + Log.e(TAG, "an unexpected exception occurred"); } - backgroundThread = null; - } - }); - updateImageStatus(); - backgroundThread.start(); - } - - private void updateImageStatus() { - // Log.i(TAG, "updateImageStatus: " + (System.currentTimeMillis()&0xffff)); - if (backgroundThread == null) { - // mGraphView.updateUi(); - - /*if (progress != null) - progress.dismiss();*/ - return; } - // mGraphView.updateUi(); - mGraphView.postDelayed(new Runnable() { - public void run() { - updateImageStatus(); - /*if (progress != null) - progress.dismiss();*/ - } - }, 1000); - } - - @Override public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - menu.add(Menu.NONE, MENU_PREV_PAGE, Menu.NONE, "Previous Page").setIcon(getPreviousPageImageResource()); - menu.add(Menu.NONE, MENU_NEXT_PAGE, Menu.NONE, "Next Page").setIcon(getNextPageImageResource()); - menu.add(Menu.NONE, MENU_GOTO_PAGE, Menu.NONE, "Goto Page"); - menu.add(Menu.NONE, MENU_ZOOM_OUT, Menu.NONE, "Zoom Out").setIcon(getZoomOutImageResource()); - menu.add(Menu.NONE, MENU_ZOOM_IN, Menu.NONE, "Zoom In").setIcon(getZoomInImageResource()); - if (HardReference.sKeepCaches) menu.add(Menu.NONE, MENU_CLEANUP, Menu.NONE, "Clear Caches"); - - return true; - } - - /** - * Called when a menu item is selected. - */ - @Override public boolean onOptionsItemSelected(MenuItem item) { - super.onOptionsItemSelected(item); - switch (item.getItemId()) { - case MENU_NEXT_PAGE: { - nextPage(); - break; - } - case MENU_PREV_PAGE: { - prevPage(); - break; - } - case MENU_GOTO_PAGE: { - gotoPage(); - break; - } - case MENU_ZOOM_IN: { - zoomIn(); - break; - } - case MENU_ZOOM_OUT: { - zoomOut(); - break; - } - case MENU_BACK: { - finish(); - break; - } - case MENU_CLEANUP: { - HardReference.cleanup(); - break; - } - } - return true; - } - - private void zoomIn() { - if (mPdfFile != null) { - if (mZoom < MAX_ZOOM) { - mZoom *= ZOOM_INCREMENT; - if (mZoom > MAX_ZOOM) mZoom = MAX_ZOOM; - - if (mZoom >= MAX_ZOOM) { - Log.d(TAG, "Disabling zoom in button"); - mGraphView.bZoomIn.setEnabled(false); - } else { - mGraphView.bZoomIn.setEnabled(true); - } - - mGraphView.bZoomOut.setEnabled(true); - - //progress = ProgressDialog.show(PdfViewerActivity.this, "Rendering", "Rendering PDF Page"); - startRenderThread(mPage, mZoom); - } - } - } - - private void zoomOut() { - if (mPdfFile != null) { - if (mZoom > MIN_ZOOM) { - mZoom /= ZOOM_INCREMENT; - if (mZoom < MIN_ZOOM) mZoom = MIN_ZOOM; - - if (mZoom <= MIN_ZOOM) { - Log.d(TAG, "Disabling zoom out button"); - mGraphView.bZoomOut.setEnabled(false); - } else { - mGraphView.bZoomOut.setEnabled(true); - } - - mGraphView.bZoomIn.setEnabled(true); - - //progress = ProgressDialog.show(PdfViewerActivity.this, "Rendering", "Rendering PDF Page"); - startRenderThread(mPage, mZoom); - } - } - } - - private void nextPage() { - if (mPdfFile != null) { - if (mPage < mPdfFile.getNumPages()) { - mPage += 1; - mGraphView.bZoomOut.setEnabled(true); - mGraphView.bZoomIn.setEnabled(true); - progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); - startRenderThread(mPage, mZoom); - } - } - } - - private void prevPage() { - if (mPdfFile != null) { - if (mPage > 1) { - mPage -= 1; - mGraphView.bZoomOut.setEnabled(true); - mGraphView.bZoomIn.setEnabled(true); - progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); - startRenderThread(mPage, mZoom); - } - } - } - - private void gotoPage() { - if (mPdfFile != null) { - showDialog(DIALOG_PAGENUM); - } - } - - @Override protected Dialog onCreateDialog(int id) { - switch (id) { - case DIALOG_PAGENUM: - LayoutInflater factory = LayoutInflater.from(this); - final View pagenumView = factory.inflate(getPdfPageNumberResource(), null); - final EditText edPagenum = (EditText) pagenumView.findViewById(getPdfPageNumberEditField()); - edPagenum.setText(Integer.toString(mPage)); - edPagenum.setOnEditorActionListener(new TextView.OnEditorActionListener() { - - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (event == null || (event.getAction() == 1)) { - // Hide the keyboard - InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(edPagenum.getWindowToken(), 0); - } - return true; - } - }); - return new AlertDialog.Builder(this) - //.setIcon(R.drawable.icon) - .setTitle("Jump to page") - .setView(pagenumView) - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - String strPagenum = edPagenum.getText().toString(); - int pageNum = mPage; + private synchronized void startRenderThread(final int page, final float zoom) { + if (backgroundThread != null) return; + backgroundThread = new Thread(new Runnable() { + public void run() { try { - pageNum = Integer.parseInt(strPagenum); - } catch (NumberFormatException ignore) { + if (mPdfFile != null) { + showPage(page, zoom); + } + } catch (Exception e) { + Log.e(TAG, e.getMessage(), e); } - if ((pageNum != mPage) && (pageNum >= 1) && (pageNum <= mPdfFile.getNumPages())) { - mPage = pageNum; - mGraphView.bZoomOut.setEnabled(true); - mGraphView.bZoomIn.setEnabled(true); - progress = - ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); - startRenderThread(mPage, mZoom); + backgroundThread = null; + } + }); + updateImageStatus(); + backgroundThread.start(); + } + + private void updateImageStatus() { + if (backgroundThread == null) { + return; + } + mGraphView.postDelayed(new Runnable() { + public void run() { + updateImageStatus(); + } + }, 1000); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + menu.add(Menu.NONE, MENU_PREV_PAGE, Menu.NONE, "Previous Page").setIcon(getPreviousPageImageResource()); + menu.add(Menu.NONE, MENU_NEXT_PAGE, Menu.NONE, "Next Page").setIcon(getNextPageImageResource()); + menu.add(Menu.NONE, MENU_GOTO_PAGE, Menu.NONE, "Goto Page"); + menu.add(Menu.NONE, MENU_ZOOM_OUT, Menu.NONE, "Zoom Out").setIcon(getZoomOutImageResource()); + menu.add(Menu.NONE, MENU_ZOOM_IN, Menu.NONE, "Zoom In").setIcon(getZoomInImageResource()); + if (HardReference.sKeepCaches) menu.add(Menu.NONE, MENU_CLEANUP, Menu.NONE, "Clear Caches"); + + return true; + } + + /** + * Called when a menu item is selected. + */ + @Override + public boolean onOptionsItemSelected(MenuItem item) { + super.onOptionsItemSelected(item); + switch (item.getItemId()) { + case MENU_NEXT_PAGE: { + nextPage(); + break; + } + case MENU_PREV_PAGE: { + prevPage(); + break; + } + case MENU_GOTO_PAGE: { + gotoPage(); + break; + } + case MENU_ZOOM_IN: { + zoomIn(); + break; + } + case MENU_ZOOM_OUT: { + zoomOut(); + break; + } + case MENU_BACK: { + finish(); + break; + } + case MENU_CLEANUP: { + HardReference.cleanup(); + break; + } + } + return true; + } + + private void zoomIn() { + if (mPdfFile != null) { + if (mZoom < MAX_ZOOM) { + mZoom *= ZOOM_INCREMENT; + if (mZoom > MAX_ZOOM) mZoom = MAX_ZOOM; + + if (mZoom >= MAX_ZOOM) { + Log.d(TAG, "Disabling zoom in button"); + mGraphView.bZoomIn.setEnabled(false); + } else { + mGraphView.bZoomIn.setEnabled(true); } - } - }) - .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - } - }) - .create(); - } - return null; - } - //TODO - PdfView pdfView; + mGraphView.bZoomOut.setEnabled(true); - private class GraphView extends FullScrollView { - //private String mText; - //private long fileMillis; - //private long pageParseMillis; - //private long pageRenderMillis; - private Bitmap mBi; - //private String mLine1; - //private String mLine2; - //private String mLine3; - private ImageView mImageView; - //private TextView mLine1View; - //private TextView mLine2View; - //private TextView mLine3View; - private Button mBtPage; - private Button mBtPage2; - - ImageButton bZoomOut; - ImageButton bZoomIn; - - public GraphView(Context context) { - super(context); - - //setContentView(R.layout.graphics_view); - // layout params - LinearLayout.LayoutParams lpWrap1 = - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - LinearLayout.LayoutParams lpWrap10 = - new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); - - LinearLayout.LayoutParams matchLp = - new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - // vertical layout - LinearLayout vl = new LinearLayout(context); - vl.setLayoutParams(lpWrap10); - vl.setOrientation(LinearLayout.VERTICAL); - - if (mOldGraphView == null) { - progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page", true, true); - } - //TODO - pdfView = new PdfView(PdfViewerActivity.this); - - addNavButtons(vl); - // remember page button for updates - mBtPage2 = mBtPage; - - mImageView = new ImageView(context); - setPageBitmap(null); - updateImage(); - mImageView.setLayoutParams(lpWrap1); - // mImageView.setPadding(5, 5, 5, 5); - vl.addView(mImageView); - vl.addView(pdfView); - //addView(pdfView); - pdfView.setLayoutParams(matchLp); - - /*mImageView = (ImageView) findViewById(R.id.pdf_image); - if (mImageView == null) { - Log.i(TAG, "mImageView is null!!!!!!"); - } - setPageBitmap(null); - updateImage();*/ - - /* - navigationPanel = new ViewStub(PdfViewerActivity.this, R.layout.navigation_overlay); - final ImageButton previous = (ImageButton)navigationPanel.findViewById(R.id.navigation_previous); - previous.setBackgroundDrawable(null); - previous.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - prevPage(); - } - }); - - final ImageButton next = (ImageButton)navigationPanel.findViewById(R.id.navigation_next); - next.setBackgroundDrawable(null); - previous.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - nextPage(); - } - }); - - //stub.setLayoutParams(Layou) - vl.addView(navigationPanel); - - vl.setOnTouchListener(new OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (navigationPanel.getVisibility() != View.VISIBLE) { - navigationPanel.startAnimation(AnimationUtils.loadAnimation(PdfViewerActivity.this, - R.anim.slide_in)); - navigationPanel.setVisibility(View.VISIBLE); - } - - return false; - } - }); - */ - - //addNavButtons(vl); - - setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - setBackgroundColor(Color.LTGRAY); - setHorizontalScrollBarEnabled(true); - setHorizontalFadingEdgeEnabled(true); - setVerticalScrollBarEnabled(true); - setVerticalFadingEdgeEnabled(true); - addView(vl); - } - - private void addNavButtons(ViewGroup vg) { - - // addSpace(vg, 6, 6); - - LinearLayout.LayoutParams lpChild1 = - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - LinearLayout.LayoutParams lpWrap10 = - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - - Context context = vg.getContext(); - LinearLayout hl = new LinearLayout(context); - hl.setLayoutParams(lpWrap10); - hl.setOrientation(LinearLayout.HORIZONTAL); - - // zoom out button - bZoomOut = new ImageButton(context); - bZoomOut.setBackgroundDrawable(null); - bZoomOut.setLayoutParams(lpChild1); - //bZoomOut.setText("-"); - //bZoomOut.setWidth(40); - bZoomOut.setImageResource(getZoomOutImageResource()); - bZoomOut.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - zoomOut(); + startRenderThread(mPage, mZoom); + } } - }); - hl.addView(bZoomOut); + } - // zoom in button - bZoomIn = new ImageButton(context); - bZoomIn.setBackgroundDrawable(null); - bZoomIn.setLayoutParams(lpChild1); - //bZoomIn.setText("+"); - //bZoomIn.setWidth(40); - bZoomIn.setImageResource(getZoomInImageResource()); - bZoomIn.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - zoomIn(); + private void zoomOut() { + if (mPdfFile != null) { + if (mZoom > MIN_ZOOM) { + mZoom /= ZOOM_INCREMENT; + if (mZoom < MIN_ZOOM) mZoom = MIN_ZOOM; + + if (mZoom <= MIN_ZOOM) { + Log.d(TAG, "Disabling zoom out button"); + mGraphView.bZoomOut.setEnabled(false); + } else { + mGraphView.bZoomOut.setEnabled(true); + } + + mGraphView.bZoomIn.setEnabled(true); + + startRenderThread(mPage, mZoom); + } } - }); - hl.addView(bZoomIn); + } - // addSpace(hl, 6, 6); - - // prev button - ImageButton bPrev = new ImageButton(context); - bPrev.setBackgroundDrawable(null); - bPrev.setLayoutParams(lpChild1); - //bPrev.setText("<"); - //bPrev.setWidth(40); - bPrev.setImageResource(getPreviousPageImageResource()); - bPrev.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - prevPage(); + private void nextPage() { + if (mPdfFile != null) { + if (mPage < mPdfFile.getNumPages()) { + mPage += 1; + mGraphView.bZoomOut.setEnabled(true); + mGraphView.bZoomIn.setEnabled(true); + progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); + startRenderThread(mPage, mZoom); + } } - }); - hl.addView(bPrev); + } - // page button - mBtPage = new Button(context); - mBtPage.setLayoutParams(lpChild1); - String maxPage = ((mPdfFile == null) ? "0" : Integer.toString(mPdfFile.getNumPages())); - mBtPage.setText(mPage + "/" + maxPage); - mBtPage.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - gotoPage(); + private void prevPage() { + if (mPdfFile != null) { + if (mPage > 1) { + mPage -= 1; + mGraphView.bZoomOut.setEnabled(true); + mGraphView.bZoomIn.setEnabled(true); + progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); + startRenderThread(mPage, mZoom); + } } - }); - hl.addView(mBtPage); + } - // next button - ImageButton bNext = new ImageButton(context); - bNext.setBackgroundDrawable(null); - bNext.setLayoutParams(lpChild1); - //bNext.setText(">"); - //bNext.setWidth(40); - bNext.setImageResource(getNextPageImageResource()); - bNext.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - nextPage(); + private void gotoPage() { + if (mPdfFile != null) { + showDialog(DIALOG_PAGENUM); } - }); - hl.addView(bNext); - - // addSpace(hl, 20, 20); - - // exit button - /* - Button bExit=new Button(context); - bExit.setLayoutParams(lpChild1); - bExit.setText("Back"); - bExit.setWidth(60); - bExit.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - hl.addView(bExit);*/ - - vg.addView(hl); - - addSpace(vg, 6, 6); } - private void addSpace(ViewGroup vg, int width, int height) { - TextView tvSpacer = new TextView(vg.getContext()); - tvSpacer.setLayoutParams(new LinearLayout.LayoutParams(width, height, 1)); - tvSpacer.setText(""); - // tvSpacer.setWidth(width); - // tvSpacer.setHeight(height); - vg.addView(tvSpacer); - } + @Override + protected Dialog onCreateDialog(int id) { + switch (id) { + case DIALOG_PAGENUM: + LayoutInflater factory = LayoutInflater.from(this); + final View pagenumView = factory.inflate(getPdfPageNumberResource(), null); + final EditText edPagenum = (EditText) pagenumView.findViewById(getPdfPageNumberEditField()); + edPagenum.setText(Integer.toString(mPage)); + edPagenum.setOnEditorActionListener(new TextView.OnEditorActionListener() { - // private void updateUi() { - // uiHandler.post(new Runnable() { - // public void run() { - // updateTexts(); - // } - // }); - // } - - private void updateImage() { - uiHandler.post(new Runnable() { - public void run() { - mImageView.setImageBitmap(mBi); - - /*if (progress != null) - progress.dismiss();*/ + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (event == null || (event.getAction() == 1)) { + // Hide the keyboard + InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(edPagenum.getWindowToken(), 0); + } + return true; + } + }); + return new AlertDialog.Builder(this) + //.setIcon(R.drawable.icon) + .setTitle("Jump to page") + .setView(pagenumView) + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + String strPagenum = edPagenum.getText().toString(); + int pageNum = mPage; + try { + pageNum = Integer.parseInt(strPagenum); + } catch (NumberFormatException ignore) { + } + if ((pageNum != mPage) && (pageNum >= 1) && (pageNum <= mPdfFile.getNumPages())) { + mPage = pageNum; + mGraphView.bZoomOut.setEnabled(true); + mGraphView.bZoomIn.setEnabled(true); + progress = + ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page " + mPage, true, true); + startRenderThread(mPage, mZoom); + } + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + } + }) + .create(); } - }); + return null; } - private void setPageBitmap(Bitmap bi) { - if (bi != null) { - mBi = bi; - } else { - /* - mBi = Bitmap.createBitmap(100, 100, Config.RGB_565); - Canvas can = new Canvas(mBi); - can.drawColor(Color.RED); + //TODO + PdfView pdfView; - Paint paint = new Paint(); - paint.setColor(Color.BLUE); - can.drawCircle(50, 50, 50, paint); + private class GraphView extends FullScrollView { + private Bitmap mBi; + private ImageView mImageView; + private Button mBtPage; + private Button mBtPage2; - paint.setStrokeWidth(0); - paint.setColor(Color.BLACK); - can.drawText("Bitmap", 10, 50, paint); - */ - } + ImageButton bZoomOut; + ImageButton bZoomIn; + + public GraphView(Context context) { + super(context); + + LinearLayout.LayoutParams lpWrap1 = + new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + LinearLayout.LayoutParams lpWrap10 = + new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + + LinearLayout.LayoutParams matchLp = + new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + + LinearLayout vl = new LinearLayout(context); + vl.setLayoutParams(lpWrap10); + vl.setOrientation(LinearLayout.VERTICAL); + + if (mOldGraphView == null) { + progress = ProgressDialog.show(PdfViewerActivity.this, "Loading", "Loading PDF Page", true, true); + } + //TODO + pdfView = new PdfView(PdfViewerActivity.this); + + addNavButtons(vl); + // remember page button for updates + mBtPage2 = mBtPage; + + mImageView = new ImageView(context); + setPageBitmap(null); + updateImage(); + mImageView.setLayoutParams(lpWrap1); + vl.addView(mImageView); + vl.addView(pdfView); + pdfView.setLayoutParams(matchLp); + + setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + setBackgroundColor(Color.LTGRAY); + setHorizontalScrollBarEnabled(true); + setHorizontalFadingEdgeEnabled(true); + setVerticalScrollBarEnabled(true); + setVerticalFadingEdgeEnabled(true); + addView(vl); + } + + private void addNavButtons(ViewGroup vg) { + + LinearLayout.LayoutParams lpChild1 = + new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + LinearLayout.LayoutParams lpWrap10 = + new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + + Context context = vg.getContext(); + LinearLayout hl = new LinearLayout(context); + hl.setLayoutParams(lpWrap10); + hl.setOrientation(LinearLayout.HORIZONTAL); + + // zoom out button + bZoomOut = new ImageButton(context); + bZoomOut.setBackgroundDrawable(null); + bZoomOut.setLayoutParams(lpChild1); + bZoomOut.setImageResource(getZoomOutImageResource()); + bZoomOut.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + zoomOut(); + } + }); + hl.addView(bZoomOut); + + // zoom in button + bZoomIn = new ImageButton(context); + bZoomIn.setBackgroundDrawable(null); + bZoomIn.setLayoutParams(lpChild1); + bZoomIn.setImageResource(getZoomInImageResource()); + bZoomIn.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + zoomIn(); + } + }); + hl.addView(bZoomIn); + + // prev button + ImageButton bPrev = new ImageButton(context); + bPrev.setBackgroundDrawable(null); + bPrev.setLayoutParams(lpChild1); + //bPrev.setText("<"); + //bPrev.setWidth(40); + bPrev.setImageResource(getPreviousPageImageResource()); + bPrev.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + prevPage(); + } + }); + hl.addView(bPrev); + + // page button + mBtPage = new Button(context); + mBtPage.setLayoutParams(lpChild1); + String maxPage = ((mPdfFile == null) ? "0" : Integer.toString(mPdfFile.getNumPages())); + mBtPage.setText(mPage + "/" + maxPage); + mBtPage.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + gotoPage(); + } + }); + hl.addView(mBtPage); + + // next button + ImageButton bNext = new ImageButton(context); + bNext.setBackgroundDrawable(null); + bNext.setLayoutParams(lpChild1); + bNext.setImageResource(getNextPageImageResource()); + bNext.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + nextPage(); + } + }); + hl.addView(bNext); + + vg.addView(hl); + + addSpace(vg, 6, 6); + } + + private void addSpace(ViewGroup vg, int width, int height) { + TextView tvSpacer = new TextView(vg.getContext()); + tvSpacer.setLayoutParams(new LinearLayout.LayoutParams(width, height, 1)); + tvSpacer.setText(null); + vg.addView(tvSpacer); + } + + private void updateImage() { + uiHandler.post(new Runnable() { + public void run() { + mImageView.setImageBitmap(mBi); + } + }); + } + + private void setPageBitmap(Bitmap bi) { + if (bi != null) { + mBi = bi; + } + } } - // protected void updateTexts() { - // - // if (mPdfPage != null) { - // if (mBtPage != null) - // mBtPage.setText(mPdfPage.getPageNumber() + "/" + mPdfFile.getNumPages()); - // if (mBtPage2 != null) - // mBtPage2.setText(mPdfPage.getPageNumber() + "/" + mPdfFile.getNumPages()); - // } - // } - } + private void showPage(int page, float zoom) throws Exception { + pdfView.showPage(page, zoom); + try { - private void showPage(int page, float zoom) throws Exception { - pdfView.showPage(page, zoom); - //long startTime = System.currentTimeMillis(); - //long middleTime = startTime; - try { + // Only load the page if it's a different page (i.e. not just changing the zoom level) + if (mPdfPage == null || mPdfPage.getPageNumber() != page) { + mPdfPage = mPdfFile.getPage(page, true); + } - // Only load the page if it's a different page (i.e. not just changing the zoom level) - if (mPdfPage == null || mPdfPage.getPageNumber() != page) { - mPdfPage = mPdfFile.getPage(page, true); - } - //int num = mPdfPage.getPageNumber(); - //int maxNum = mPdfFile.getNumPages(); - float width = mPdfPage.getWidth(); - float height = mPdfPage.getHeight(); - //String pageInfo= new File(pdffilename).getName() + " - " + num +"/"+maxNum+ ": " + width + "x" + height; - //mGraphView.showText(pageInfo); - //Log.i(TAG, pageInfo); - RectF clip = null; - //middleTime = System.currentTimeMillis(); - Bitmap bi = mPdfPage.getImage((int) (width * zoom), (int) (height * zoom), clip, true, true); - mGraphView.setPageBitmap(bi); - mGraphView.updateImage(); + float width = mPdfPage.getWidth(); + float height = mPdfPage.getHeight(); + RectF clip = null; + Bitmap bi = mPdfPage.getImage((int) (width * zoom), (int) (height * zoom), clip, true, true); + mGraphView.setPageBitmap(bi); + mGraphView.updateImage(); - if (progress != null) progress.dismiss(); - } catch (Throwable e) { - Log.e(TAG, e.getMessage(), e); - // mGraphView.showText("Exception: " + e.getMessage()); - } - //long stopTime = System.currentTimeMillis(); - //mGraphView.pageParseMillis = middleTime-startTime; - //mGraphView.pageRenderMillis = stopTime-middleTime; - } - - /** - *

Open a specific pdf file. Creates a DocumentInfo from the file, - * and opens that.

- *

- *

Note: Mapping the file locks the file until the PDFFile - * is closed.

- * - * @param file the file to open - * @throws IOException - */ - public void openFile(final byte[] byteArray, String password) throws IOException { - - // now memory-map a byte-buffer - ByteBuffer bb = ByteBuffer.NEW(byteArray); - // create a PDFFile from the data - if (password == null) { - mPdfFile = new PDFFile(bb); - } else { - mPdfFile = new PDFFile(bb, new PDFPassword(password)); + if (progress != null) progress.dismiss(); + } catch (Throwable e) { + Log.e(TAG, e.getMessage(), e); + } } - } + /** + *

Open a specific pdf file. Creates a DocumentInfo from the file, + * and opens that.

+ *

+ *

Note: Mapping the file locks the file until the PDFFile + * is closed.

+ * + * @param byteArray the file to open + * @throws IOException + */ + public void openFile(final byte[] byteArray, String password) throws IOException { + + // now memory-map a byte-buffer + ByteBuffer bb = ByteBuffer.NEW(byteArray); + // create a PDFFile from the data + if (password == null) { + mPdfFile = new PDFFile(bb); + } else { + mPdfFile = new PDFFile(bb, new PDFPassword(password)); + } - @Override protected void onDestroy() { - super.onDestroy(); - if (mTmpFile != null) { - mTmpFile.delete(); - mTmpFile = null; } - } - /*private void postHideNavigation() { - // Start a time to hide the panel after 3 seconds - closeNavigationHandler.removeCallbacks(closeNavigationThread); - closeNavigationHandler.postDelayed(closeNavigationThread, 3000); - }*/ + @Override + public void onDestroy() { + super.onDestroy(); + if (mTmpFile != null) { + mTmpFile.delete(); + mTmpFile = null; + } + } - public abstract int getPreviousPageImageResource(); // R.drawable.left_arrow + private int getPreviousPageImageResource() { + return R.drawable.left_arrow; + } - public abstract int getNextPageImageResource(); // R.drawable.right_arrow + private int getNextPageImageResource() { + return R.drawable.right_arrow; + } - public abstract int getZoomInImageResource(); // R.drawable.zoom_int + private int getZoomInImageResource() { + return R.drawable.zoom_in; + } - public abstract int getZoomOutImageResource(); // R.drawable.zoom_out + private int getZoomOutImageResource() { + return R.drawable.zoom_out; + } - public abstract int getPdfPasswordLayoutResource(); // R.layout.pdf_file_password + private int getPdfPasswordLayoutResource() { + return R.layout.pdf_file_password; + } - public abstract int getPdfPageNumberResource(); // R.layout.dialog_pagenumber + private int getPdfPageNumberResource() { + return R.layout.dialog_pagenumber; + } - public abstract int getPdfPasswordEditField(); // R.id.etPassword + private int getPdfPasswordEditField() { + return R.id.etPassword; + } - public abstract int getPdfPasswordOkButton(); // R.id.btOK + private int getPdfPasswordOkButton() { + return R.id.btOK; + } - public abstract int getPdfPasswordExitButton(); // R.id.btExit + private int getPdfPasswordExitButton() { + return R.id.btExit; + } + + private int getPdfPageNumberEditField() { + return R.id.pagenum_edit; + } - public abstract int getPdfPageNumberEditField(); // R.id.pagenum_edit } \ No newline at end of file diff --git a/gestureimageview/gestureimageview.iml b/gestureimageview/gestureimageview.iml index d390f05..fc66be5 100644 --- a/gestureimageview/gestureimageview.iml +++ b/gestureimageview/gestureimageview.iml @@ -65,14 +65,6 @@ - - - - - - - - @@ -81,6 +73,14 @@ + + + + + + + + @@ -100,6 +100,5 @@ - \ No newline at end of file