Exemple #1
0
 @Override
 public void onClick(View v) {
   gridview.setVisibility(View.GONE);
   if (bible.getCount(Bible.TYPE.VERSION) == 0
       && bible.getDatabase() == null
       && v.getId() != R.id.version) {
     return;
   }
   switch (v.getId()) {
     case R.id.version:
       getVerse();
     case R.id.book:
     case R.id.chapter:
     case R.id.items:
       showSpinner(v);
       break;
     case R.id.search:
       onSearchRequested();
       break;
     case R.id.share:
       if (!copytext.equals("")) {
         Intent sendIntent = new Intent();
         sendIntent.setAction(Intent.ACTION_SEND);
         sendIntent.putExtra(Intent.EXTRA_TEXT, copytext);
         sendIntent.setType("text/plain");
         startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.share)));
       }
   }
 }
Exemple #2
0
 protected String formatOsisItem(OsisItem item) {
   String book = bible.get(Bible.TYPE.HUMAN, bible.getPosition(Bible.TYPE.OSIS, item.book));
   return book
       + " "
       + item.chapter
       + (item.verse.equals("") ? "" : ":" + item.verse)
       + (item.end.equals("") ? "" : "-" + item.end);
 }
Exemple #3
0
 private int getMatt() {
   int matt = bible.getPosition(Bible.TYPE.OSIS, "Matt");
   if (matt > 0 && matt * 2 > bible.getCount(Bible.TYPE.OSIS)) {
     return matt;
   } else {
     return -1;
   }
 }
Exemple #4
0
 public void setItemText(int index) {
   if (items != null && index >= 0 && index < items.size()) {
     OsisItem item = items.get(index);
     String book =
         bible.get(Bible.TYPE.BOOK, bible.getPosition(Bible.TYPE.OSIS, item.book)) + item.chapter;
     if (!item.verse.equals("") && !item.end.equals("")) {
       book += ":" + item.verse + "-" + item.end;
     } else if (!item.verse.equals("") || !item.end.equals("")) {
       book += ":" + item.verse + item.end;
     }
     ((TextView) findViewById(R.id.items)).setText(book);
   }
 }
Exemple #5
0
 private void _showData() {
   version = bible.getVersion();
   SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
   fontsize = sp.getInt("fontsize-" + version, 0);
   if (fontsize == 0) {
     fontsize = sp.getInt("fontsize", 16);
   }
   if (fontsize > 32) {
     fontsize = 32;
   }
   if (!osis.equals("")) {
     uri = Provider.CONTENT_URI_CHAPTER.buildUpon().appendEncodedPath(osis).build();
   }
   showView(R.id.search, true);
   if (items == null || items.size() == 0) {
     showView(R.id.items, false);
     showView(R.id.book, true);
     showView(R.id.chapter, true);
     showUri();
   } else {
     showView(R.id.items, true);
     showView(R.id.book, false);
     showView(R.id.chapter, false);
     if (this.index > -1 && this.index < items.size()) {
       showItem(this.index);
     } else {
       showItem(0);
     }
   }
 }
Exemple #6
0
  private void setBookChapter() {
    book = osis.split("\\.")[0];
    if (osis.split("\\.").length > 1) {
      chapter = osis.split("\\.")[1];
    } else {
      chapter = "0";
    }
    Log.d(TAG, "set book chapter, osis: " + osis);

    setItemText(this.index);
    ((TextView) findViewById(R.id.version)).setText(bible.getVersionName(bible.getVersion()));
    ((TextView) findViewById(R.id.book))
        .setText(bible.get(Bible.TYPE.BOOK, bible.getPosition(Bible.TYPE.OSIS, book)));
    if (!"".equals(verse) && !"".equals(end)) {
      ((TextView) findViewById(R.id.chapter)).setText(chapter + ":" + verse + "-" + end);
    } else if (!"".equals(verse) || !"".equals(end)) {
      ((TextView) findViewById(R.id.chapter)).setText(chapter + ":" + verse + end);
    } else {
      ((TextView) findViewById(R.id.chapter)).setText(chapter);
    }
  }
Exemple #7
0
  private void _showUri() {
    version = bible.getVersion();
    Log.d(TAG, "showuri: " + uri);
    if (uri == null) {
      Log.d(TAG, "show null uri, use default");
      uri =
          Provider.CONTENT_URI_CHAPTER
              .buildUpon()
              .appendEncodedPath(null)
              .fragment(version)
              .build();
    }
    Cursor cursor = null;
    try {
      cursor = getContentResolver().query(uri, null, null, null, null);
    } catch (SQLiteException e) {
      showContent("", getString(R.string.queryerror));
      return;
    } catch (Exception e) {
    }
    if (cursor != null) {
      cursor.moveToFirst();

      osis = cursor.getString(cursor.getColumnIndexOrThrow(Provider.COLUMN_OSIS));
      osis_next = cursor.getString(cursor.getColumnIndexOrThrow(Provider.COLUMN_NEXT));
      osis_prev = cursor.getString(cursor.getColumnIndexOrThrow(Provider.COLUMN_PREVIOUS));
      final String human = cursor.getString(cursor.getColumnIndexOrThrow(Provider.COLUMN_HUMAN));
      final String content =
          cursor.getString(cursor.getColumnIndexOrThrow(Provider.COLUMN_CONTENT));
      cursor.close();

      showContent(human + " | " + version, content);
    } else {
      Log.d(TAG, "no such chapter, try first chapter");
      Uri nulluri =
          Provider.CONTENT_URI_CHAPTER
              .buildUpon()
              .appendEncodedPath(null)
              .fragment(version)
              .build();
      if (!nulluri.equals(uri)) {
        uri = nulluri;
        showUri();
      } else {
        showContent("", getString(R.string.queryerror));
      }
    }
  }
Exemple #8
0
  private boolean setButtonsControllerAPI11(WebView webview) {
    Object mZoomManager = null;

    // android 4.1,  webview.mProvider.mZoomManager.getCurrentZoomControl().getControls()
    Object mProvider = Bible.getField(webview, WebView.class, "mProvider");
    if (mProvider != null) {
      mZoomManager = Bible.getField(mProvider, mProvider.getClass(), "mZoomManager");
    } else {
      // android 4.0, webview.mZoomManager.getCurrentZoomControl().getControls()
      mZoomManager = Bible.getField(webview, WebView.class, "mZoomManager");
    }

    if (mZoomManager == null) {
      return false;
    }

    try {
      // let canZoomOut always be true, part1
      Field MINIMUM_SCALE_INCREMENT =
          mZoomManager.getClass().getDeclaredField("MINIMUM_SCALE_INCREMENT");
      MINIMUM_SCALE_INCREMENT.setAccessible(true);
      MINIMUM_SCALE_INCREMENT.set(mZoomManager, -128.0f);
    } catch (Exception e) {
      Log.e(
          TAG,
          "cannot set " + mZoomManager.getClass().getName() + ".MINIMUM_SCALE_INCREMENT to -128.0f",
          e);
      return false;
    }

    try {
      // let canZoomOut always be true, part2
      Field mInZoomOverview = mZoomManager.getClass().getDeclaredField("mInZoomOverview");
      mInZoomOverview.setAccessible(true);
      mInZoomOverview.set(mZoomManager, false);
    } catch (Exception e) {
      Log.e(
          TAG, "cannot set " + mZoomManager.getClass().getName() + ".mInZoomOverview to false", e);
      return false;
    }

    if (mZoomButtonsController != null) {
      return true;
    }

    try {
      Method getCurrentZoomControl =
          mZoomManager.getClass().getDeclaredMethod("getCurrentZoomControl");
      getCurrentZoomControl.setAccessible(true);
      Object mEmbeddedZoomControl = getCurrentZoomControl.invoke(mZoomManager);
      Method getControls = mEmbeddedZoomControl.getClass().getDeclaredMethod("getControls");
      getControls.setAccessible(true);
      mZoomButtonsController = (ZoomButtonsController) getControls.invoke(mEmbeddedZoomControl);
    } catch (Exception e) {
      Log.e(
          TAG,
          "cannot call "
              + mZoomManager.getClass().getName()
              + ".getCurrentZoomControl().getControls()",
          e);
      return false;
    }

    return true;
  }
Exemple #9
0
 @Override
 public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
   gridview.setVisibility(View.GONE);
   switch (gridviewid) {
     case R.id.book:
       int matt = getMatt();
       String newbook;
       if (matt > 0) {
         if (pos % 2 == 0) {
           newbook = bible.get(Bible.TYPE.OSIS, pos / 2);
         } else {
           newbook = bible.get(Bible.TYPE.OSIS, matt + pos / 2);
         }
       } else {
         newbook = bible.get(Bible.TYPE.OSIS, pos);
       }
       if (!newbook.equals("") && !newbook.equals(book)) {
         storeOsisVersion();
         chapter = PreferenceManager.getDefaultSharedPreferences(this).getString(newbook, "1");
         openOsis(newbook + "." + chapter);
       }
       break;
     case R.id.chapter:
       openOsis(String.format("%s.%d", book, pos + 1));
       break;
     case R.id.version:
       storeOsisVersion();
       if (pos >= bible.getCount(Bible.TYPE.VERSION)) {
         String link_market =
             "<a href=\"market://search?q="
                 + getString(R.string.bibledatalink)
                 + "&c=apps\">market://search?q="
                 + getString(R.string.bibledatahuman)
                 + "&c=apps</a>";
         String body =
             "<div id=\"pb-demo\">"
                 + getString(
                     R.string.moreversion,
                     new Object[] {
                       link_market,
                       link_github,
                       "<a href=\"mailto:[email protected]\">Liu DongMiao</a>"
                     })
                 + "</div>\n";
         showContent("", body);
         return;
       }
       version = bible.get(Bible.TYPE.VERSION, pos);
       Log.d(TAG, "version: " + version);
       bible.setVersion(version);
       fontsize =
           PreferenceManager.getDefaultSharedPreferences(this)
               .getInt("fontsize-" + version, fontsize);
       uri =
           Provider.CONTENT_URI_CHAPTER
               .buildUpon()
               .appendEncodedPath(osis)
               .fragment(version)
               .build();
       showUri();
       break;
     case R.id.items:
       if (items != null && pos < items.size()) {
         showItem(pos);
       } else {
         showView(R.id.book, true);
         showView(R.id.chapter, true);
         showView(R.id.items, false);
         items.clear();
         findViewById(R.id.book).performClick();
       }
       break;
   }
 }
Exemple #10
0
  private void showSpinner(View v) {
    adapter.clear();
    gridviewid = v.getId();
    switch (v.getId()) {
      case R.id.book:
        int matt = getMatt();
        gridview.setNumColumns(2);
        Log.d(TAG, "book=" + book);
        selected = bible.get(Bible.TYPE.HUMAN, bible.getPosition(Bible.TYPE.OSIS, book));
        if (matt > 0) {
          for (int id = 0; id < matt; id++) {
            int right = matt + id;
            adapter.add(bible.get(Bible.TYPE.HUMAN, id));
            if (right < bible.getCount(Bible.TYPE.OSIS)) {
              adapter.add(bible.get(Bible.TYPE.HUMAN, right));
            } else {
              adapter.add("");
            }
          }
        } else {
          for (String string : bible.get(Bible.TYPE.HUMAN)) {
            adapter.add(string);
          }
        }
        break;
      case R.id.chapter:
        gridview.setNumColumns(5);
        selected = chapter;
        String chapters = bible.get(Bible.TYPE.CHAPTER, bible.getPosition(Bible.TYPE.OSIS, book));
        int maxchapter = 1;
        try {
          maxchapter = Integer.parseInt(chapters);
        } catch (Exception e) {
        }
        for (int i = 1; i <= maxchapter; i++) {
          adapter.add(String.valueOf(i));
        }
        break;
      case R.id.version:
        gridview.setNumColumns(1);
        Log.d(TAG, "version=" + version);
        selected = bible.getVersionFullname(version);
        for (String string : bible.get(Bible.TYPE.VERSION)) {
          Log.d(TAG, "add version " + string);
          adapter.add(bible.getVersionFullname(string));
        }
        adapter.add(getString(R.string.more));
        break;
      case R.id.items:
        gridview.setNumColumns(1);
        Log.d(TAG, "version=" + version);
        for (OsisItem item : items) {
          adapter.add(formatOsisItem(item));
        }
        adapter.add(getString(R.string.otherbook));
        selected = formatOsisItem(items.get(index));
        break;
    }

    if (adapter.getCount() > 0) {
      gridview.setVisibility(View.VISIBLE);
      gridview.setSelection(adapter.getPosition(selected));
    } else {
      gridview.setVisibility(View.GONE);
      showUri();
    }
  }
Exemple #11
0
  private void _showContent(String title, String content) {
    if (!title.equals("")) {
      versename = "pb-" + version + "-" + book.toLowerCase(Locale.US) + "-" + chapter;
    } else {
      versename = "versename";
    }
    copytext = "";
    showView(R.id.share, !copytext.equals(""));
    String context = content;
    // for biblegateway.com
    context =
        context.replaceAll(
            "<span class=\"chapternum\">.*?</span>", "<sup class=\"versenum\">1 </sup>");
    context = context.replaceAll("<span class=\"chapternum mid-paragraph\">.*?</span>", "");
    context =
        context.replaceAll(
            "(<strong>\\D*?(\\d+).*?</strong>)",
            "<span class=\"pb-verse\" title=\"$2\"><a id=\""
                + versename
                + "-$2\"></a><sup>$1</sup></span>");
    context =
        context.replaceAll(
            "<sup(.*?>\\D*?(\\d+).*?)</sup>",
            "<span class=\"pb-verse\" title=\"$2\"><a id=\""
                + versename
                + "-$2\"></a><sup><strong$1</strong></sup></span>");
    if (Locale.getDefault().equals(Locale.SIMPLIFIED_CHINESE)) {
      context = context.replaceAll("「", "“").replaceAll("」", "”");
      context = context.replaceAll("『", "‘").replaceAll("』", "’");
    }

    fontsize = (int) (fontsize * scale);
    if (fontsize > 32) {
      fontsize = 24;
    }

    String body =
        "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n";
    body += "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n";
    body += "<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
    body +=
        "<meta name=\"viewport\" content=\"target-densitydpi=device-dpi, width=device-width, initial-scale=1.0, minimum-scale=0.1, maximum-scale=2\" />\n";
    body += "<style type=\"text/css\">\n";
    if (font.exists()) {
      body += "@font-face { font-family: 'custom'; src: url('" + font.getAbsolutePath() + "'); }\n";
      body +=
          "body {font-family: 'custom', serif; line-height: 1.4em; font-weight: 100; font-size: "
              + fontsize
              + "pt;}\n";
    } else {
      body +=
          "body {font-family: serif; line-height: 1.4em; font-weight: 100; font-size: "
              + fontsize
              + "pt;}\n";
    }
    body += ".trans {display: none;}\n";
    body += ".wordsofchrist {color: red;}\n";
    body += "h1 {font-size: 2em;}\n";
    body += "h2 {font-size: 1.5em;}\n";
    body += ".selected {" + background + "}\n";
    body += ".highlight {" + background + "}\n";
    body += "</style>\n";
    body += "<title>" + title + "</title>\n";
    body += "<link rel=\"stylesheet\" type=\"text/css\" href=\"reader.css\"/>\n";
    body += "<script type=\"text/javascript\">\n";
    body +=
        String.format(
            "var verse_start=%s, verse_end=%s, versename=\"%s\", search=\"%s\";",
            verse.equals("") ? "-1" : verse,
            end.equals("") ? "-1" : verse,
            versename,
            items != null ? search : "");
    verse = "";
    search = "";
    body += "\n</script>\n";
    body += "<script type=\"text/javascript\" src=\"reader.js\"></script>\n";
    body += "</head>\n<body>\n";
    if (!"".equals(title) && bible.getVersion().endsWith("demo")) {
      String link_market =
          "<a href=\"market://search?q="
              + getString(R.string.bibledatalink)
              + "&c=apps\">market://search?q="
              + getString(R.string.bibledatahuman)
              + "&c=apps</a>";
      body +=
          "<div id=\"pb-demo\">"
              + getString(R.string.noversion, new Object[] {link_market, link_github})
              + "</div>\n";
    }
    body += "<div id=\"content\">\n";
    body += context;
    body += "</div>\n</body>\n</html>\n";
    webview.clearCache(true);
    webview.setInitialScale(100);
    scale = 1.0f;
    webview.loadDataWithBaseURL("file:///android_asset/", body, "text/html", "utf-8", null);
    dismiss();
    /*
    {
        String path = "/sdcard/" + versename + ".html";
        try {
            Log.d("write", path);
            java.io.OutputStream os = new java.io.BufferedOutputStream(new java.io.FileOutputStream(new java.io.File(path)));
            os.write(body.getBytes());
            os.close();
        } catch (Exception e) {
            Log.e("write", path, e);
        }
    }
    */
  }
Exemple #12
0
  @Override
  @SuppressLint("SetJavaScriptEnabled")
  protected void onCreate(Bundle savedInstanceState) {
    // on MB612, the search and share icon is so dark ...
    if (Build.MODEL.equals("MB612")) {
      setTheme(android.R.style.Theme_Light_NoTitleBar);
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.chapter);
    findViewById(R.id.book).setOnClickListener(this);
    findViewById(R.id.chapter).setOnClickListener(this);
    findViewById(R.id.search).setOnClickListener(this);
    findViewById(R.id.version).setOnClickListener(this);
    findViewById(R.id.share).setOnClickListener(this);
    findViewById(R.id.items).setOnClickListener(this);

    adapter =
        new ArrayAdapter<String>(this, R.layout.grid) {
          private LayoutInflater inflater =
              (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            ToggleButton grid = null;
            if (view == null) {
              view = inflater.inflate(R.layout.grid, null);
            }
            grid = (ToggleButton) view.findViewById(R.id.text1);
            grid.setTextOn(getItem(position));
            grid.setTextOff(getItem(position));
            grid.setChecked(getItem(position).equals(selected));
            grid.setVisibility(getItem(position).equals("") ? View.INVISIBLE : View.VISIBLE);
            return view;
          }
        };

    gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(adapter);
    gridview.setVisibility(View.GONE);
    gridview.setOnItemClickListener(this);

    setGestureDetector();
    webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setSupportZoom(true);
    webview.getSettings().setBuiltInZoomControls(true);
    webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webview.addJavascriptInterface(
        new Object() {
          @SuppressWarnings("unused")
          public void setVerse(String string) {
            synchronized (verseLock) {
              verse = string;
              Log.d(TAG, "verse from javascript: " + verse);
              verseLock.notifyAll();
            }
          }

          @SuppressWarnings({"unused", "deprecation"})
          public void setCopyText(String text) {
            if (!text.equals("")) {
              copytext =
                  bible
                          .getVersionFullname(version)
                          .replace("(" + getString(R.string.demo) + ")", "")
                      + " ";
              copytext +=
                  bible.get(Bible.TYPE.HUMAN, bible.getPosition(Bible.TYPE.OSIS, book))
                      + " "
                      + chapter
                      + ":"
                      + text;
              ((android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE))
                  .setText(copytext);
              Log.d(TAG, "copy from javascript: " + copytext);
            } else {
              copytext = "";
            }
            handler.sendEmptyMessage(COPYTEXT);
          }
        },
        "android");
    setZoomButtonsController(webview);

    osis = PreferenceManager.getDefaultSharedPreferences(this).getString("osis", "null");
    uri =
        Provider.CONTENT_URI_CHAPTER.buildUpon().appendEncodedPath(osis).fragment(version).build();

    setIntentData();
    int color = 0x6633B5E5;
    Integer mHighlightColor =
        (Integer) Bible.getField(findViewById(R.id.version), TextView.class, "mHighlightColor");
    if (mHighlightColor != null) {
      color = mHighlightColor.intValue();
    }
    background =
        String.format(
            "background: rgba(%d, %d, %d, %.2f);",
            (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, (color >>> 24) / 255.0);
    Log.d(TAG, "onCreate");
    hasIntentData = true;
    font =
        new File(
            new File(
                new File(
                    new File(
                        new File(Environment.getExternalStorageDirectory(), "Android"), "data"),
                    getPackageName()),
                "files"),
            "custom.ttf");
  }