Пример #1
0
  public void createUI(Bundle savedInstanceState) {
    if (core == null) return;
    // Now create the UI.
    // First create the document view making use of the ReaderView's internal
    // gesture recognition
    mDocView =
        new ReaderView(this) {
          private boolean showButtonsDisabled;

          public boolean onSingleTapUp(MotionEvent e) {
            if (!showButtonsDisabled) {
              MuPDFPageView pageView = (MuPDFPageView) mDocView.getDisplayedView();
              if (MuPDFCore.javascriptSupported() && pageView.passClickEvent(e.getX(), e.getY())) {
                // If the page consumes the event do nothing else
              } else if (e.getX() < super.getWidth() / TAP_PAGE_MARGIN) {
                super.moveToPrevious();
              } else if (e.getX() > super.getWidth() * (TAP_PAGE_MARGIN - 1) / TAP_PAGE_MARGIN) {
                super.moveToNext();
              } else {
                int linkPage = -1;
                if (mLinkState != LinkState.INHIBIT) {
                  if (pageView != null) {
                    // XXX							linkPage = pageView.hitLinkPage(e.getX(), e.getY());
                  }
                }

                if (linkPage != -1) {
                  mDocView.setDisplayedViewIndex(linkPage);
                } else {
                  if (!mButtonsVisible) {
                    showButtons();
                  } else {
                    hideButtons();
                  }
                }
              }
            }
            return super.onSingleTapUp(e);
          }

          public boolean onScroll(
              MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            if (!showButtonsDisabled) hideButtons();

            return super.onScroll(e1, e2, distanceX, distanceY);
          }

          public boolean onScaleBegin(ScaleGestureDetector d) {
            // Disabled showing the buttons until next touch.
            // Not sure why this is needed, but without it
            // pinch zoom can make the buttons appear
            showButtonsDisabled = true;
            return super.onScaleBegin(d);
          }

          public boolean onTouchEvent(MotionEvent event) {
            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) showButtonsDisabled = false;

            return super.onTouchEvent(event);
          }

          protected void onChildSetup(int i, View v) {
            if (SearchTaskResult.get() != null && SearchTaskResult.get().pageNumber == i)
              ((PageView) v).setSearchBoxes(SearchTaskResult.get().searchBoxes);
            else ((PageView) v).setSearchBoxes(null);

            ((PageView) v).setLinkHighlighting(mLinkState == LinkState.HIGHLIGHT);
          }

          protected void onMoveToChild(int i) {
            if (core == null) return;
            mPageNumberView.setText(String.format("%d/%d", i + 1, core.countPages()));
            mPageSlider.setMax((core.countPages() - 1) * mPageSliderRes);
            mPageSlider.setProgress(i * mPageSliderRes);
            if (SearchTaskResult.get() != null && SearchTaskResult.get().pageNumber != i) {
              SearchTaskResult.set(null);
              mDocView.resetupChildren();
            }
          }

          protected void onSettle(View v) {
            // When the layout has settled ask the page to render
            // in HQ
            ((PageView) v).addHq(false);
          }

          protected void onUnsettle(View v) {
            // When something changes making the previous settled view
            // no longer appropriate, tell the page to remove HQ
            ((PageView) v).removeHq();
          }

          @Override
          protected void onNotInUse(View v) {
            ((PageView) v).releaseResources();
          }
        };
    mDocView.setAdapter(new MuPDFPageAdapter(this, core));

    // Make the buttons overlay, and store all its
    // controls in variables
    makeButtonsView();

    // Set up the page slider
    int smax = Math.max(core.countPages() - 1, 1);
    mPageSliderRes = ((10 + smax - 1) / smax) * 2;

    // Set the file-name text
    mFilenameView.setText(mFileName);

    // Activate the seekbar
    mPageSlider.setOnSeekBarChangeListener(
        new SeekBar.OnSeekBarChangeListener() {
          public void onStopTrackingTouch(SeekBar seekBar) {
            mDocView.setDisplayedViewIndex(
                (seekBar.getProgress() + mPageSliderRes / 2) / mPageSliderRes);
          }

          public void onStartTrackingTouch(SeekBar seekBar) {}

          public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            updatePageNumView((progress + mPageSliderRes / 2) / mPageSliderRes);
          }
        });

    // Activate the search-preparing button
    mSearchButton.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            searchModeOn();
          }
        });

    mCancelButton.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            searchModeOff();
          }
        });

    // Search invoking buttons are disabled while there is no text specified
    mSearchBack.setEnabled(false);
    mSearchFwd.setEnabled(false);

    // React to interaction with the text widget
    mSearchText.addTextChangedListener(
        new TextWatcher() {

          public void afterTextChanged(Editable s) {
            boolean haveText = s.toString().length() > 0;
            mSearchBack.setEnabled(haveText);
            mSearchFwd.setEnabled(haveText);

            // Remove any previous search results
            if (SearchTaskResult.get() != null
                && !mSearchText.getText().toString().equals(SearchTaskResult.get().txt)) {
              SearchTaskResult.set(null);
              mDocView.resetupChildren();
            }
          }

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          public void onTextChanged(CharSequence s, int start, int before, int count) {}
        });

    // React to Done button on keyboard
    mSearchText.setOnEditorActionListener(
        new TextView.OnEditorActionListener() {
          public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) search(1);
            return false;
          }
        });

    mSearchText.setOnKeyListener(
        new View.OnKeyListener() {
          public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER)
              search(1);
            return false;
          }
        });

    // Activate search invoking buttons
    mSearchBack.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            search(-1);
          }
        });
    mSearchFwd.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            search(1);
          }
        });

    /* XXX
    		mLinkButton.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				switch(mLinkState) {
    				case DEFAULT:
    					mLinkState = LinkState.HIGHLIGHT;
    					mLinkButton.setImageResource(R.drawable.ic_hl_link);
    					//Inform pages of the change.
    					mDocView.resetupChildren();
    					break;
    				case HIGHLIGHT:
    					mLinkState = LinkState.INHIBIT;
    					mLinkButton.setImageResource(R.drawable.ic_nolink);
    					//Inform pages of the change.
    					mDocView.resetupChildren();
    					break;
    				case INHIBIT:
    					mLinkState = LinkState.DEFAULT;
    					mLinkButton.setImageResource(R.drawable.ic_link);
    					break;
    				}
    			}
    		});
    */

    if (core.hasOutline()) {
      mOutlineButton.setOnClickListener(
          new View.OnClickListener() {
            public void onClick(View v) {
              OutlineItem outline[] = core.getOutline();
              if (outline != null) {
                OutlineActivityData.get().items = outline;
                Intent intent = new Intent(MuPDFActivity.this, OutlineActivity.class);
                startActivityForResult(intent, 0);
              }
            }
          });
    } else {
      mOutlineButton.setVisibility(View.GONE);
    }

    // Reenstate last state if it was recorded
    SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
    mDocView.setDisplayedViewIndex(prefs.getInt("page" + mFileName, 0));

    if (savedInstanceState == null || !savedInstanceState.getBoolean("ButtonsHidden", false))
      showButtons();

    if (savedInstanceState != null && savedInstanceState.getBoolean("SearchMode", false))
      searchModeOn();

    // Stick the document view and the buttons overlay into a parent view
    RelativeLayout layout = new RelativeLayout(this);
    layout.addView(mDocView);
    layout.addView(mButtonsView);
    layout.setBackgroundResource(R.drawable.tiled_background);
    // layout.setBackgroundResource(R.color.canvas);
    setContentView(layout);
  }