private void startPDF(SharedPreferences options) {
   this.pdf = this.getPDF();
   if (!this.pdf.isValid()) {
     Log.v(TAG, "Invalid PDF");
     if (this.pdf.isInvalidPassword()) {
       Toast.makeText(this, "This file needs a password", Toast.LENGTH_SHORT).show();
     } else {
       Toast.makeText(this, "Invalid PDF file", Toast.LENGTH_SHORT).show();
     }
     return;
   }
   this.colorMode = Options.getColorMode(options);
   this.pdfPagesProvider =
       new PDFPagesProvider(
           this,
           pdf,
           options.getBoolean(Options.PREF_OMIT_IMAGES, false),
           options.getBoolean(Options.PREF_RENDER_AHEAD, true));
   pagesView.setPagesProvider(pdfPagesProvider);
   Bookmark b = new Bookmark(this.getApplicationContext()).open();
   pagesView.setStartBookmark(b, filePath);
   b.close();
 }
  /**
   * Called when the activity is first created. TODO: initialize dialog fast, then move file loading
   * to other thread TODO: add progress bar for file load TODO: add progress icon for file rendering
   */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Options.setOrientation(this);
    SharedPreferences options = PreferenceManager.getDefaultSharedPreferences(this);

    this.box = Integer.parseInt(options.getString(Options.PREF_BOX, "2"));
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

    // Get display metrics
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    // use a relative layout to stack the views
    activityLayout = new RelativeLayout(this);

    // the PDF view
    this.pagesView = new PagesView(this);
    activityLayout.addView(pagesView);
    startPDF(options);
    if (!this.pdf.isValid()) {
      finish();
    }

    // #ifdef pro
    //         /* TODO: move to separate method */
    //         LinearLayout textReflowLayout = new LinearLayout(this);
    //         this.textReflowView = textReflowLayout;
    //         textReflowLayout.setOrientation(LinearLayout.VERTICAL);
    //
    //         this.textReflowScrollView = new ScrollView(this);
    //         this.textReflowScrollView.setFillViewport(true);
    //
    //         this.textReflowTextView = new TextView(this);
    //
    //         LinearLayout textReflowButtonsLayout = new LinearLayout(this);
    //         textReflowButtonsLayout.setGravity(Gravity.CENTER);
    //         textReflowButtonsLayout.setOrientation(LinearLayout.HORIZONTAL);
    //         Button textReflowPrevPageButton = new Button(this);
    //         textReflowPrevPageButton.setText("Prev");
    //         textReflowPrevPageButton.setOnClickListener(new OnClickListener() {
    // 			public void onClick(View v) {
    // 				OpenFileActivity.this.nextPage(-1);
    // 			}
    //         });
    //         Button textReflowNextPageButton = new Button(this);
    //         textReflowNextPageButton.setText("Next");
    //         textReflowNextPageButton.setOnClickListener(new OnClickListener() {
    //         	public void onClick(View v) {
    //         		OpenFileActivity.this.nextPage(1);
    //         	}
    //         });
    //         textReflowButtonsLayout.addView(textReflowPrevPageButton);
    //         textReflowButtonsLayout.addView(textReflowNextPageButton);
    //
    //         this.textReflowScrollView.addView(this.textReflowTextView);
    //         LinearLayout.LayoutParams textReflowScrollViewLayoutParams = new
    // LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1);
    //         textReflowLayout.addView(this.textReflowScrollView,
    // textReflowScrollViewLayoutParams);
    //         textReflowLayout.addView(textReflowButtonsLayout, new
    // LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 0));
    //
    //         activityLayout.addView(this.textReflowView, new
    // RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT,
    // RelativeLayout.LayoutParams.FILL_PARENT));
    //         this.textReflowView.setVisibility(View.GONE);
    //         AndroidReflections.setScrollbarFadingEnabled(this.textReflowView, true);
    // #endif

    // the find buttons
    this.findButtonsLayout = new LinearLayout(this);
    this.findButtonsLayout.setOrientation(LinearLayout.HORIZONTAL);
    this.findButtonsLayout.setVisibility(View.GONE);
    this.findButtonsLayout.setGravity(Gravity.CENTER);
    this.findPrevButton = new Button(this);
    this.findPrevButton.setText("Prev");
    this.findButtonsLayout.addView(this.findPrevButton);
    this.findNextButton = new Button(this);
    this.findNextButton.setText("Next");
    this.findButtonsLayout.addView(this.findNextButton);
    this.findHideButton = new Button(this);
    this.findHideButton.setText("Hide");
    this.findButtonsLayout.addView(this.findHideButton);
    this.setFindButtonHandlers();
    RelativeLayout.LayoutParams lp =
        new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
    lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    activityLayout.addView(this.findButtonsLayout, lp);

    this.pageNumberTextView = new TextView(this);
    this.pageNumberTextView.setTextSize(8f * metrics.density);
    lp =
        new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    activityLayout.addView(this.pageNumberTextView, lp);

    // display this
    this.setContentView(activityLayout);

    // go to last viewed page
    //        gotoLastPage();

    // send keyboard events to this view
    pagesView.setFocusable(true);
    pagesView.setFocusableInTouchMode(true);

    this.zoomHandler = new Handler();
    this.pageHandler = new Handler();
    this.zoomRunnable =
        new Runnable() {
          public void run() {
            fadeZoom();
          }
        };
    this.pageRunnable =
        new Runnable() {
          public void run() {
            fadePage();
          }
        };
  }