こんばんは。
タイトルの通り、夜中に一人でパチパチとアプリを改造しました。
Atcoderに取り組むことで、Javaのライブラリやクラスの呼び出し方に少し慣れてきました。
便利なライブラリがいっぱいでほんとすごいですね。
自分のペースではありますが、研究していきます。
今回は、前からやってみたかったコピー機能を導入しました。
1.対象アプリ
消費税計算アプリ「消費税さん」です。
金額を入力すると税込み金額、または税抜き金額を計算してくれるシンプルかつ実用的な優良アプリです。
もし使いたい方がいらっしゃったら、自分のパソコンを持参してインストールさせていただきますのでご連絡ください。

最初はアプリ開発の練習のつもりで開発したこの消費税さんですが、実務に契約業務でめちゃくちゃ使用しています。
システム屋さん、特にユーザー系SIの方々であれば、パートナー社の契約業務で電卓をたたくことは結構多いのではないでしょうか。
社内の事情で今年度は契約の回数が増えたため、社内の予算をしっかり使い切るよう(余剰分はしっかり返却する)、税込み金額をきちんと計算して間違いのない契約作業が必要になっています。
消費税さんは画面に計算結果を表示してくれますが、この金額を更に他の計算で使用します。
そのため電卓アプリを開いて数字を転記し、他の月の予算と集計したり、他契約分を減算したり、といった作業をしています。
これが結構不便でして、数字を覚えて打ち込まないといけません。ミスが多発する危険があるので、何回か確かめて入力しており割とストレスになっています。
そこで、今回は表示された結果をクリップボードにコピーする機能を作る事にしました。
2.実装方法
使ったライブラリは、Clipdataです。
出典:https://developer.android.com/reference/android/content/ClipData
あとはこちらのブログの実装例を参考に(ほぼ踏襲)させていただきました。ありがとうございます。
https://logical-studio.com/develop/development/android_app_beginner/20161215-android_clipboard_copy/
消費税さんのメインのJavaプログラムは、ざっくり以下の流れになっています。
①あいさつ
②金額を入力し、「消費税さん、教えて」ボタンを押下(税抜き金額を出したい場合は、トグルスイッチをONに)
③結果表示
④結果をプリファレンスに設定(次回の画面で表示されるようにしている)
このうち、③のロジックが終了した直後に以下を追加しました。
textView.setText("税込み金額は、" + tax_disp2 + "円だよ。\n(税抜:" + textint + "円 税額:" + (tax_disp2-textint) + "円)" );
//2022/03/28 クリップボードに格納するItemを作成 from
ClipData.Item item = new ClipData.Item(String.valueOf(tax_disp2));
//A.MIMETYPEの作成
String[] mimeType = new String[1];
mimeType[0] = ClipDescription.MIMETYPE_TEXT_URILIST;
//B.クリップボードに格納するClipDataオブジェクトの作成
ClipData kekka = new ClipData(new ClipDescription("text_data", mimeType), item);
//C.クリップボードにデータを格納
ClipboardManager kaku = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
kaku.setPrimaryClip(kekka);
//2022/03/28 クリップボードに格納するItemを作成 to
String tax_disp3 = String.valueOf(tax_disp2);
それぞれこんな処理をしています(理解がふんわりしていますが)
先頭:itemに値を設定します。「tax_disp2」というのがコピーしたい計算結果です。
A.MIMEタイプのURIを保持する新しいClipDataを作成します。
B.Clipdataオブジェクトを生成します。ここでは、kekkaという名前でオブジェクトを生成しました。
C.生成したオブジェクトをインスタンス化し、クリップボードにデータを格納します。
なお、ライブラリは以下が必要です(AndroidstudioのAlt+Enterの機能で補足してくれます)。
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
3.テスト
計算結果(5500)が、電卓にコピペで転記できた(^▽^)/


4.最後に
一時間程度でできました。
これで明日は3分くらい早く帰れるでしょう。
契約は毎月1,2日が作業ピークなので、1年くらい使えば修正に使用した1時間分の元が取れそうですね。
ちょっとした改善で大きな効果が出るのは気持ちいいですね。