From b6ad4ad2c8d3794fc87056914740e92cb0ff81a2 Mon Sep 17 00:00:00 2001 From: garakuta Date: Sun, 10 Jun 2018 22:44:17 +0900 Subject: [PATCH 1/3] Support-multibyte-title --- build.gradle | 3 ++- .../ui/folio/fragment/FolioPageFragment.java | 21 +++++++++++++++++-- .../android/sample/HomeActivity.java | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 334072821..368aa997d 100644 --- a/build.gradle +++ b/build.gradle @@ -14,9 +14,10 @@ buildscript { url 'https://maven.google.com/' name 'Google' } + google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION" diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java index a02fe77ae..3a6e00a27 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java @@ -71,6 +71,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.net.URLEncoder; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -209,6 +210,13 @@ public View onCreateView(LayoutInflater inflater, private String getWebviewUrl() { + //return Constants.LOCALHOST + mBookTitle + "/" + spineItem.href; + try{ + return Constants.LOCALHOST + URLEncoder.encode(mBookTitle, "UTF-8") + "/" + spineItem.href; + } + catch (Exception ex){ + + } return Constants.LOCALHOST + mBookTitle + "/" + spineItem.href; } @@ -227,7 +235,7 @@ public void onConfigurationChanged(Configuration newConfig) { /** * [EVENT BUS FUNCTION] - * Function triggered from {@link FolioActivity#initAudioView()} when pause/play + * Function triggered from {@link FolioActivity} when pause/play * button is clicked * * @param event of type {@link MediaOverlayPlayPauseEvent} contains if paused/played @@ -368,8 +376,17 @@ private void setHtml(boolean reloaded) { if (forwardSlashLastIndex != -1) path = ref.substring(0, forwardSlashLastIndex + 1); + String title; + try{ + title = URLEncoder.encode(mBookTitle, "UTF-8"); + } + catch(Exception ex){ + title = mBookTitle; + } + mWebview.loadDataWithBaseURL( - Constants.LOCALHOST + mBookTitle + "/" + path, + // Constants.LOCALHOST + mBookTitle + "/" + path, + Constants.LOCALHOST + title + "/" + path, HtmlUtil.getHtmlContent(getActivity(), mHtmlString, mConfig), "text/html", "UTF-8", diff --git a/sample/src/main/java/com/folioreader/android/sample/HomeActivity.java b/sample/src/main/java/com/folioreader/android/sample/HomeActivity.java index 4a98f319b..4021ed127 100644 --- a/sample/src/main/java/com/folioreader/android/sample/HomeActivity.java +++ b/sample/src/main/java/com/folioreader/android/sample/HomeActivity.java @@ -66,7 +66,7 @@ public void onClick(View v) { findViewById(R.id.btn_assest).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - folioReader.openBook("file:///android_asset/TheSilverChair.epub"); + folioReader.openBook("file:///android_asset/jpn.epub"); } }); From 5f06c579125d0326115a7f577e260cc366801a28 Mon Sep 17 00:00:00 2001 From: garakuta Date: Mon, 11 Jun 2018 22:38:16 +0900 Subject: [PATCH 2/3] Add url encoding for URL of book title. --- .../folioreader/ui/folio/activity/FolioActivity.java | 3 ++- .../tableofcontents/view/TableOfContentFragment.java | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java index 07d57f19d..9c62474f1 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java @@ -59,6 +59,7 @@ import org.readium.r2_streamer.server.EpubServerSingleton; import java.io.IOException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -162,7 +163,7 @@ private void initBook(String mEpubFileName, int mEpubRawId, String mEpubFilePath mEpubRawId, mEpubFileName); addEpub(path); - String urlString = Constants.LOCALHOST + bookFileName + "/manifest"; + String urlString = Constants.LOCALHOST + URLEncoder.encode(bookFileName, "UTF-8") + "/manifest"; new MainPresenter(this).parseManifest(urlString); } catch (IOException e) { diff --git a/folioreader/src/main/java/com/folioreader/ui/tableofcontents/view/TableOfContentFragment.java b/folioreader/src/main/java/com/folioreader/ui/tableofcontents/view/TableOfContentFragment.java index c9a63b5fa..0b32ea3a1 100644 --- a/folioreader/src/main/java/com/folioreader/ui/tableofcontents/view/TableOfContentFragment.java +++ b/folioreader/src/main/java/com/folioreader/ui/tableofcontents/view/TableOfContentFragment.java @@ -23,6 +23,7 @@ import com.folioreader.ui.tableofcontents.presenter.TableOfContentsPresenter; import com.folioreader.util.AppUtil; +import java.net.URLEncoder; import java.util.ArrayList; import static com.folioreader.Constants.BOOK_TITLE; @@ -72,7 +73,15 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mTableOfContentsRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_menu); errorView = (TextView) view.findViewById(R.id.tv_error); - String urlString = Constants.LOCALHOST + mBookTitle + "/manifest"; + + String bookTitle; + try{ + bookTitle = URLEncoder.encode(mBookTitle, "UTF-8"); + } + catch(Exception ex){ + bookTitle = mBookTitle; + } + String urlString = Constants.LOCALHOST + bookTitle + "/manifest"; configRecyclerViews(); presenter.getTOCContent(urlString); From 5c460a521fb7a204dc35308d61341dc8744d0c19 Mon Sep 17 00:00:00 2001 From: garakuta Date: Wed, 13 Jun 2018 23:50:03 +0900 Subject: [PATCH 3/3] [fix] can't read some multibytes string file. --- folioreader/res/values-ja/strings.xml | 34 ++++++++ folioreader/res/values-pt-rBR/strings.xml | 1 + folioreader/res/values-ru/strings.xml | 1 + folioreader/res/values/strings.xml | 1 + .../ui/folio/activity/FolioActivity.java | 83 ++++++++++++++++--- 5 files changed, 107 insertions(+), 13 deletions(-) create mode 100644 folioreader/res/values-ja/strings.xml diff --git a/folioreader/res/values-ja/strings.xml b/folioreader/res/values-ja/strings.xml new file mode 100644 index 000000000..6925e991d --- /dev/null +++ b/folioreader/res/values-ja/strings.xml @@ -0,0 +1,34 @@ + + + folioreader + 共有 + コピー + 送信先: + コピーしました + 1分未満 ·  + %1$d 分 ·  + %1$d 分 ·  + ハイライト + 定義 + ハイライト + スタイル + キャンセル + 読み込み中 + しばらくお待ちください + 編集 + 保存 + 入力してください + 目次 + 辞書 + epubを開くことができません。ストレージアクセスが必要です ! + 残り %1$d ページ + 残り %1$d ページ + フォントの変更e + フォント色 + スタイルの変更 + スタイルを変更できません! + Ok + 上部パネルサイズ: + 2つの言語を選択する: + このフィルは開けません。 + \ No newline at end of file diff --git a/folioreader/res/values-pt-rBR/strings.xml b/folioreader/res/values-pt-rBR/strings.xml index 47524d529..93a0f2f0d 100644 --- a/folioreader/res/values-pt-rBR/strings.xml +++ b/folioreader/res/values-pt-rBR/strings.xml @@ -30,4 +30,5 @@ Ok Painel superior Escolha 2 linguagens + Can\'t open file \ No newline at end of file diff --git a/folioreader/res/values-ru/strings.xml b/folioreader/res/values-ru/strings.xml index 764d690c2..79097c4be 100644 --- a/folioreader/res/values-ru/strings.xml +++ b/folioreader/res/values-ru/strings.xml @@ -41,5 +41,6 @@ Сохранить заметку пожалуйста введите заметку Содержание + Can\'t open file diff --git a/folioreader/res/values/strings.xml b/folioreader/res/values/strings.xml index 0ae3da5f8..a49008683 100644 --- a/folioreader/res/values/strings.xml +++ b/folioreader/res/values/strings.xml @@ -93,4 +93,5 @@ Cannot open epub it needs storage access ! horizontal vertical + Can\'t open file diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java index 9c62474f1..ae5b7c997 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java @@ -60,6 +60,8 @@ import java.io.IOException; import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; @@ -132,7 +134,10 @@ protected void onCreate(Bundle savedInstanceState) { if (ContextCompat.checkSelfPermission(FolioActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(FolioActivity.this, Constants.getWriteExternalStoragePerms(), Constants.WRITE_EXTERNAL_STORAGE_REQUEST); } else { - setupBook(); + if(setupBook() == false){ + Toast.makeText(this, R.string.cant_open_file, Toast.LENGTH_LONG); + finish(); + } } toolbar = findViewById(R.id.toolbar); @@ -154,27 +159,52 @@ public void startContentHighlightActivity() { overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up); } - private void initBook(String mEpubFileName, int mEpubRawId, String mEpubFilePath, EpubSourceType mEpubSourceType) { + private Boolean initBook(String mEpubFileName, int mEpubRawId, String mEpubFilePath, EpubSourceType mEpubSourceType) { + Log.v(TAG, "initBook >>"); + Boolean result = false; try { int portNumber = getIntent().getIntExtra(Config.INTENT_PORT, Constants.PORT_NUMBER); mEpubServer = EpubServerSingleton.getEpubServerInstance(portNumber); mEpubServer.start(); String path = FileUtil.saveEpubFileAndLoadLazyBook(FolioActivity.this, mEpubSourceType, mEpubFilePath, mEpubRawId, mEpubFileName); - addEpub(path); - String urlString = Constants.LOCALHOST + URLEncoder.encode(bookFileName, "UTF-8") + "/manifest"; - new MainPresenter(this).parseManifest(urlString); + if(addEpub(path)){ + + String urlString = Constants.LOCALHOST + URLEncoder.encode(bookFileName, "UTF-8") + "/manifest"; + Log.v(TAG, "initBook urlString = " + urlString); + new MainPresenter(this).parseManifest(urlString); + result = true; + } } catch (IOException e) { Log.e(TAG, "initBook failed", e); } + Log.v(TAG, "initBook <<"); + + return result; } - private void addEpub(String path) throws IOException { + private Boolean addEpub(String path) throws IOException { + Log.v(TAG, "addEpub >>"); + Log.v(TAG, "addEpub path = " + path); + Log.v(TAG, "addEpub bookFileName = " + bookFileName); + + Boolean result = true; + Container epubContainer = new EpubContainer(path); - mEpubServer.addEpub(epubContainer, "/" + bookFileName); + try{ + mEpubServer.addEpub(epubContainer, "/" + URLEncoder.encode(bookFileName)); + } + catch(Exception ex){ + Log.e(TAG, "addEpub error = " + ex.getMessage()); + result = false; + } getEpubResource(); + + Log.v(TAG, "addEpub <<"); + + return result; } private void getEpubResource() { @@ -370,15 +400,22 @@ public void onLoadPublication(EpubPublication publication) { } private void setConfig() { - if (AppUtil.getSavedConfig(this) != null) { - mConfig = AppUtil.getSavedConfig(this); - } else if (getIntent().getParcelableExtra(Config.INTENT_CONFIG) != null) { + Log.v(TAG, "setConfig >>"); + + Bundle args = getIntent().getExtras(); + Log.v(TAG, "setConfig args = " + args.toString()); + + if (getIntent().getParcelableExtra(Config.INTENT_CONFIG) != null) { mConfig = getIntent().getParcelableExtra(Config.INTENT_CONFIG); AppUtil.saveConfig(this, mConfig); + Log.v(TAG, "setConfig (2) isShowTts = " + mConfig.isShowTts()); + } else if (AppUtil.getSavedConfig(this) != null) { + mConfig = AppUtil.getSavedConfig(this); } else { mConfig = new Config.ConfigBuilder().build(); AppUtil.saveConfig(this, mConfig); } + Log.v(TAG, "setConfig <<"); } @Override @@ -395,9 +432,29 @@ public void pause() { public void onError() { } - private void setupBook() { - bookFileName = FileUtil.getEpubFilename(this, mEpubSourceType, mEpubFilePath, mEpubRawId); - initBook(bookFileName, mEpubRawId, mEpubFilePath, mEpubSourceType); + public String md5(String s) { + try { + // Create MD5 Hash + MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); + digest.update(s.getBytes()); + byte messageDigest[] = digest.digest(); + + // Create Hex String + StringBuffer hexString = new StringBuffer(); + for (int i=0; i