このアプリについて    ↑  

名称    ↑  

VioletNote

Copyright 2024, Yoshiaki Watanabe

概要    ↑  

VioletNoteは暗号化機能を持つメモ帳です。文字修飾無しのプレーンテキストをファイル単位で管理します。 設定を変更するとMarkdown記法を解釈して表示します。画像を埋め込んだ暗号化ファイルを作成・送付することもできます。

免責    ↑  

本ソフトウェアは無保証です。このソフトウェアに関係して損害・不利益等が発生しても一切の責任を負いません。

使用ライブラリ    ↑  

このソフトウェアは、Mozilla Public License 1.1 (https://www.mozilla.org/en-US/MPL/1.1/) の下で公開されている以下のライブラリを使用しています。

  • juniversalchardet (https://code.google.com/archive/p/juniversalchardet/)
  • このソフトウェアは、The Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0) の下で公開されている以下のライブラリを使用しています。

  • Apache Commons (https://commons.apache.org/).
  • Markwon (https://noties.io/Markwon/).
  • Zip4j (https://github.com/srikanth-lingala/zip4j).
  • このソフトウェアは、GNU General Public License v2.0 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.ja.html) の下で公開されている以下のライブラリを使用しています。

  • APISENSE / rhino-android (https://github.com/APISENSE/rhino-android).
  • プライバシーポリシー    ↑  

    このソフトウェアは、利用者の個人データの収集を行いません。

    このソフトウェアは、利用者を識別するサービスを利用します。 それらのサービスのポリシーはサービスのサイト(Google Play Services, AdMob)に記述があります。

    このソフトウェアは、実行時の権限リクエストを必要とする特別な処理を含みません。


    使用説明    ↑  

    起動と終了    ↑  

    通常のアプリと同様に、アプリのアイコンをタッチして起動します。またバックキーで終了します。 起動するとメイン画面を表示します。

    メイン画面    ↑  

    最初に表示する画面です。アプリ固有ストレージ内のファイルリストを表示します。 インストール時点では、リストは空白です。 新規ファイルの追加は、右下隅のアイコンから行います。 ファイルをタッチすると、ビューワに移行します。 ファイルを長押しするとファイラに移行します。 また、画面上部の「共有ストレージ⇒」をタッチすると、 共有ストレージをSAF(Storage Access Framework)を使って表示します。 (SAFは、ストレージアクセス特権なしで利用できますが、基本的な標準UIのみを提供します)。 アイコンは並べ替えです。 アイコンは他のメニューです。

    メイン画面のメニュー
    並べ替えファイルリストの表示順を選択します。
    新規新規ファイルを開きます。
    設定アプリの設定を表示します。
    ファイラファイラを表示します。
    ゴミ箱ゴミ箱を表示します。
    ヘルプこのWebページを表示します。
    バージョンアプリのバージョンを表示します。
    広告除去購入処理を行い広告を除去します。

    データファイル    ↑  

    データファイルは、アプリ固有ストレージもしくは共有ストレージに保存します。

    アプリ固有ストレージは、他アプリからアクセスできません。 またアプリをアンインストールするとアクセス不可になります。 他アプリからアクセス可能にしたい場合やアンイストール後に保持したい場合は、共有ストレージに保存するか、 またはファイラモードを使って、ファイルをエクスポートして下さい。

    共有ストレージにあるファイルは、他からアクセス可能であり、アンインストール後も保持します。 ただし、共有ストレージ内のファイルの削除・コピーやフォルダ作成等の機能は、実装していません。 'Files by Google'などの外部アプリを利用して下さい。

    ビューワ    ↑  

    メイン画面でファイルをタッチすると表示します。 この画面では、ファイルは書き換え不可です。 アイコンはエディタです。 アイコンは文字列検索です。 暗号化テキストファイルを選択すると、パスワードの入力を要求します。 パスワードは一度入力すると、設定した時間が過ぎるまで要求しません。

    テキスト長押し範囲指定時に表示するメニューに、「範囲調整」、「スクリプト」、「翻字/字訳」を加えました (「翻字/字訳」はAndroid 10から)。

    「範囲調整」はテキスト範囲調整のボタンを表示します。 上段は、閉じボタン、情報表示、改行位置へのカーソル移動、範囲の端点入替、伸縮/移動のモード切替です。 下段は、カーソル位置移動ボタンです。

    「スクリプト」は選択範囲の文字列を指定したスクリプトで処理します。 表示するリストからスクリプトを選択すると、選択文字列をそのスクリプトで処理し、処理結果を「結果」フィールドに表示します。 「コピー」ボタンを押すと、処理結果をシステムクリップボードにコピーします。 詳しくは、下記の「スクリプトについて」を参照してください。

    「翻字/字訳」は選択範囲の文字を変換します。 変換方法(例「Katakana-Latin」)をリストから選ぶと、変換結果を「結果」フィールドに表示します。 「コピー」ボタンを押すと、変換結果をシステムクリップボードにコピーします。

    ビューワのメニュー
    エディタエディタを表示します。
    検索文字列検索を行います。大文字小文字区別と正規表現の有無をで切替できます。

    エディタ    ↑  

    ビューワで、アイコンをタッチすると表示します。 もしくは、メイン画面右下隅のアイコンをタッチすると表示します。 この画面では、テキストの追加、修正、削除が可能です。 はアンドゥ、リドゥです。 アイコンは他のメニューです。

    新規ファイル保存の際に暗号化テキストを選択すると、パスワードの設定を要求します。 パスワードは一度入力すると、設定した時間が過ぎるまで要求しません。 パスワードはファイルごとに独立です。 パスワードを忘れると、そのファイルを2度と開けなくなります。

    テキスト長押しで表示するメニューに加えた項目はビューアと同様です。 ただし「スクリプト」、「翻字/字訳」ダイアログに「貼り付け」ボタンが加わっています。

    エディタのメニュー
    アンドゥ直前の編集作業を取り消します。
    リドゥ直前のアンドゥを取り消します。
    検索と置換文字列検索と置換を行います。大文字小文字区別と正規表現の有無をで切替できます。
    画像の埋込選択した画像を現位置に埋込みます(マークアップ記法がMarkdown時に表示)。
    保存せず終了保存せずにエディタを閉じます。
    保存して終了保存処理を行ってからエディタを閉じます。
    別名保存して終了新しい名前で保存処理を行ってからエディタを閉じます。
    パスワード変更して終了暗号化選択時に表示します。 パスワードを変更して保存する処理を行ってからエディタを閉じます。

    ファイラ    ↑  

    メイン画面で他のメニューから[ファイラ]を選択するか、 またはファイルを長押しすると移行します。 アイコンは並べ替えです。 アイコンは他のメニューです。 この画面ではアプリ固有ストレージ内のファイルのコピー、名称変更、削除、共有、サブフォルダ作成、 エクスポート、インポート、それにバックアップ、リストアができます。 なお、[共有]ボタンはテキストデータの送付を行いますが、 本アプリは他アプリが共有機能を使って送付したテキストデータの受信もできます。

    本アプリは共有ストレージのファイラ機能を含みません。'Files by Google'等の他アプリを利用下さい。

    ファイラのボタン
    コピー選択したファイルをコピーします。
    名変更選択したファイルの名前を変更します。
    削除選択したファイルを削除します。削除ファイルはゴミ箱に保持します。
    共有選択したファイルを共有機能を使って送付します。
    その他以下のファイル操作コマンドを表示します。
    - フォルダ作成現在表示中のフォルダにサブフォルダを作成します。
    - エクスポートファイルリストで選択したファイルを共有ストレージに取り出します。
    - インポート共有ストレージで選択したファイルをアプリ固有ストレージに取り込みます。
    - バックアップ全データファイルをまとめたアーカイブファイルを共有ストレージに作成します。
    - リストアアーカイブファイルをアプリ固有ストレージに展開します。既存のデータファイルを上書きしますので注意ください。
    - スクリプト再ロードスクリプトフォルダ「.scripts」にサンプルスクリプトを再ロードします。
    ファイラのメニュー
    並べ替えファイルリストの表示順を選択します。
    全て選択 ファイルリスト上の全ファイルを選択状態にします。
    全て非選択ファイルリスト上の全ファイルの選択状態を解除します。

    ゴミ箱    ↑  

    メイン画面の他のメニューから、[ゴミ箱]を選択すると移行します。 この画面はアプリ固有ストレージ内の削除済みファイルのリストを表示します。 アイコンは並べ替えです。 アイコンは他のメニューです。 ゴミ箱内のファイルは、一定期間が経過すると自動的に消滅します。 また、[元に戻す]ボタンで選択したファイルを元のフォルダに戻すことができます。 ゴミ箱内のファイルは[.trash1234567890_note.txt]のような名前です。 [1234567890]は、削除時点のタイムスタンプです。その後ろ[note.txt]は元のファイル名です。

    ゴミ箱のボタン
    元に戻す 指定したファイルを削除前のフォルダに戻します。
    完全に削除指定したファイルをゴミ箱から削除します。
    ゴミ箱のメニュー
    並べ替えファイルリストの表示順を選択します。
    全て選択 ファイルリスト上の全ファイルを選択状態にします。
    全て非選択ファイルリスト上の全ファイルの選択状態を解除します。

    設定    ↑  

    メイン画面の他のメニューから[設定]を選択すると表示します。 アプリの各種設定を行います。 アイコンは他のメニューです。

    設定項目
    デフォルトファイル形式新規ファイルのデフォルト保存形式です。
    パスワード再要求時間(秒)この時間内はパスワード入力を省略します。
    復帰時にパスワードオンの場合、アプリがバックグラウンドからフォアグラウンドへの復帰時にパスワードを再要求します。
    ビューワの文字サイズビューワにおける文字のサイズです。
    エディタの文字サイズエディタにおける文字のサイズです。
    ビューワで文字列折り返しオンの場合、ビューワにおいて、画面幅を超えた文字列を次の行に表示します。
    エディタで文字列折り返しオンの場合、エディタにおいて、画面幅を超えた文字列を次の行に表示します。
    ファイルの詳細表示オンの場合、ファイルリストに、ファイルの更新日時とサイズを表示します。
    ゴミの保管期間ゴミ箱内のゴミはこの期間が過ぎると自動的に削除されます。
    カラーテーマ画面表示のカラーを設定します。[System Default]は、システムのダーク・ライトモード設定に依存します。
    マークアップ記法ビューワにおいて解釈するマークアップ記法を選択します。デフォルトはNone(無し)です。
    埋込画像サイズ埋込画像の高さと幅がこのサイズに収まるように画像を縮小します。
    画像埋込のIMGタグオプション画像埋込に使うIMGタグのオプション文字列です。
    .txtの文字セット[.txt]ファイルの文字セットを指定します。デフォルトはUTF-8です。
    .txt文字セット自動判別オンの場合、[.txt]ファイルの読み込み時に文字セットの自動判定を行います。書き込み時の文字セットは上記の文字セット設定に従います。
    .chiの文字セット[.chi]ファイルの文字セットを指定します。デフォルトはUTF-8です。
    .chi文字セット自動判別オンの場合、[.chi]ファイルの読み込み時に文字セットの自動判定を行います。書き込み時の文字セットは上記の文字セット設定に従います。
    スクリプトフォルダを表示オンの場合、スクリプトを保持するフォルダをファイラに表示します。

    設定のメニュー
    設定をリセット本アプリの設定を初期値へ戻します。

    暗号化について    ↑  

    .vlnt形式の暗号化と復号化を実装した部分のJavaソースコードを示します。

            public String encrypt(String key, byte[] source) throws Exception {
                String iv = RandomStringUtils.randomAlphanumeric(16);  // Initial_value
                byte[] keyDigest = MessageDigest.getInstance("MD5").digest(key.getBytes());
                SecretKeySpec sksSpec = new SecretKeySpec(keyDigest, "AES");
                IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
                javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS7Padding");
                cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec, ivSpec);
                String encodedStr = new String(Base64.encodeBase64(cipher.doFinal(source)));
                // return Encode_version(4btyes) + Initial_value(16bytes) + Base64_encoded_str
                return "VN01" + iv + encodedStr;
            }
    
            public String decrypt(String key, byte[] source) throws Exception {
                // source : Encode_version(4bytes) + Initial_value(16bytes) + Base64_encoded_content
                String version = new String(source, 0, 4);
                if(!version.equals("VN01")) {
                    throw new UnsupportedEncodingException("Unsupported VioletNote encoding.");
                }
                byte[] iv = Arrays.copyOfRange(source, 4, 20); // Initial_value
                byte[] content = Arrays.copyOfRange(source, 20, source.length);
                byte[] keyDigest = MessageDigest.getInstance("MD5").digest(key.getBytes());
                SecretKeySpec sksSpec = new SecretKeySpec(keyDigest, "AES");
                IvParameterSpec ivSpec = new IvParameterSpec(iv);
                javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS7Padding");
                cipher.init(javax.crypto.Cipher.DECRYPT_MODE, sksSpec, ivSpec);
                return new String(cipher.doFinal((Base64.decodeBase64(content))));
            }
          

    [.vlnt]ファイルは、AES暗号化後にBase64コード化を行っており、7ビットコードで扱える64種類の印字可能な英数字のみからなります。 内容を変更せず、拡張子のみを[.txt]に変更すると、様々なアプリで、暗号化済みのテキストを表示・送付できます。

    Androidアプリ [Clipboard From/To](Ver.1.17.5以降)を使用すると、以下の処理で平文が再生できます。

    1. 何らかのファイラアプリで、ファイル拡張子を[.vlnt]から[.txt]に変更します。
    2. [Clipboard From/To]を起動し、メニュー[ファイルから]を使って、暗号化テキストを読み込みます。
    3. メニュー[AES復号化]を使って、復号化を行います。
    4. 注意:履歴とクリップボードにも、再生したテキストが残ります。秘密メモの場合は注意深く消去して下さい。

    [.chi]ファイルについては、Tombo/Kumagusuについて記述しているWebサイトを探して下さい。

    テキスト修飾と画像について    ↑  

    このアプリは文字修飾の無いプレーンテキストを基本とします。 文章中に目立つマーカを付けるには、絵文字を利用して下さい。

    より多彩なテキスト表現が必要な場合は、「設定>マークアップ記法」を変更すると、 Markdown記法またはHTML記法を解釈します。 Markdown記法の実装にはライブラリMarkwon(includes core, ext-tables, ext-strikethrough, ext-tasklist, image and html)を利用しています。 HTML記法の実装にはAndroid APIのHtml.fromHtmlを利用しています。 これらの機能の詳細は各サイトを参照して下さい。

    画像はURL指定とMIME埋込の両方で記述でき、Markdownモードでのみ表示します。 文字と背景の色付けは、HTMLモードでのみ表示します。

    Markdownモードでは、エディタのオプションメニューに「画像の埋込み」が追加されます。 埋込みでは以下のような文字列がカーソル位置に挿入されます。

    <img alt="?" width="25%" src="__embN__"/>
    「src="__embN__"」は変更しないでください。エディタは、起動時に「__embN__」をキーとして MIME画像をアプリメモリに保持します(終了時に消えます)。数字Nはメモ中の連番です。 「alt="?" width="25%"」の部分は自由に変更できます (設定項目にデフォルトの文字列があります)。 例えば25%を100%に変更すると全幅表示となります。

    リンク画像は以下のように直接記述してください。

    ![sample](https://foo.bar.com/xxx.jpg)
    または
    <img alt="sample" width="25%" src="https://foo.bar.com/xxx.jpg">

    ビューワにおいて画像をタッチすると、画像ビューワが起動します。 画像ビューワでは、画像の拡大縮小と画像の保存ができます。

    正規表現検索について    ↑  

    このアプリは、検索バー内のオプションから正規表現検索に切替できます。 正規表現検索の場合、最長一致検索を行います (例えば、検索文字列が"a.*c"、対象文字列が"bcabcabcab"では、検索は"abcabc"に一致します)。 また、置換文字列にグループ指定を用いることもできます (例えば、検索文字列が"a(.)(.)b"、置換文字列が"p$2$1q"では、"axyb"を"pyxq"に置換します)。 ヘルプ画面では正規表現検索をサポートしません。

    正規表現の実装には、java.util.regexパッケージのPattern/Matcherを使用しています。 このパッケージで解釈可能な正規表現を用いて下さい。

    スクリプトについて    ↑  

    スクリプトはJavaScriptで記述して、アプリ固有ストレージの「.script」フォルダに保持します。 スクリプト保持のフォルダを表示するには、設定で「スクリプトフォルダを表示」をオンにして下さい。

    スクリプトはテキスト長押しで表示されるメニューから選択します。 起動時に、長押しで選択した文字列をJavaScript変数「selectedText」にセットします。 終了時に、JavaScript変数「resultText」の値をダイアログの「結果」フィールドにセットします。 例えば、下記のスクリプトは、選択した文字列を大文字に変換した結果を得ます。

    resultText = selectedText.toUpperCase();

    端末制御の機能は持ちません。単にテキスト処理用として利用下さい。 JavaScript処理にはRhinoを使います。

    サポート    ↑  

    質問やバグ報告は下のメールアドレスへ送ってください。
     watanaby00@yahoo.co.jp

    下のサポートページを用意しました。このHelpを置いています。PCなどでの閲覧に利用下さい。
     https://violetnote-5ff6d.web.app/ja/

    変更履歴    ↑  

  • 2024/01/16 Version 1.0.0 最初のリリースです。
  • 2024/02/22 Version 1.0.1 複数のバグを修正しました。
  • 2024/03/19 Version 1.0.2 パスワード保持時間のバグを修正しました。 パスワード入力のUIを変更しました。
  • 2024/05/15 Version 1.1.0 正規表現検索と大文字小文字区別の検索を追加しました。 一括置換と逐次置換を追加しました。 パスワードタイムアウト時の手順を変更しました。
  • 2024/05/18 Version 1.1.1 サポートライブラリを更新しました。
  • 2024/07/26 Version 1.2.0 共有ストレージ内のデータファイルのロードとセーブ機能を追加しました。 サポートライブラリを更新しました。 細かい修正を行いました。
  • 2024/09/19 Version 1.3.0 テキスト長押しのメニューに、「範囲調整」、「スクリプト」、「翻字/字訳」を加えました。
  • 2025/02/08 Version 1.4.0 Markdownモードにおいて、ビューアで画像を表示可能にしました。 「画像の埋込」をエディタのメニューに加えました。 画像の拡大と保存の機能を持つ画像ビューワを加えました。
  • 2025/05/15 Version 1.4.1 edge-to-edge表示を調整するインセットを加えました。 ファイラのメニュー項目を移動しました。