3.5.2面倒臭いので最近の更新の内容を色々ひっくるめて説明。概要この辺りの改造で今まで何をやっていたのかと言うと、主に以下の変更になります。基本的には、内部的なコードの置換えと、それに伴って発生・顕在化したバグの修正になります。アプリの保守性を高めることと、今後のバージョンアップを継続的に行っていくための置換えになりますので、機能の追加などはあまり行っていません。この辺の変更の理由は以下の通りになります。コードをJavaからKotlinへの置換えKotlinはAndroid開発で使用される新しいプログラム言語です。従来のコードと互換性があるので、ファイルを段階的にKotlinに置換えながら継続的に更新を行っていました。これによって何が良くなるかと言うと、ざっくり言うと全体的にコードの量が削減されること、プログラムのバグが起きにくくなること、などの効果があります。Kotlinを使った方が開発する上で何かと楽になります。Kotlinだけの効果だけではないのですが、参考程度に)。JavaKotlinサポートライブラリをAndroidXに置換えAndroid開発を行う上で、通常サポートライブラリというものを使います。サポートという名前からイメージしにくいのですが、開発する上ではほぼ必須のライブラリです。いう名前に変わって新しくなり、今後はこちらを使うよう勧告されています。旧サポートライブラリはサポート外になっていくので、遅かれ早かれAndroidXに置換える必要があったのですが、このタイミングで一気に置換えてしまいました。DBの処理にRoomを使用するように変更Androidの内部的なデータ管理にデータベースを使っているのですが、今までこの入出力にはかなり初期の頃の実装を用いていました。問題があったわけではないのですが、実装上のコード量も多く、メンテナンス性も低いので、アプリの拡大に伴って扱いにくくなっていました。現在は、GoogleがリリースするDB入出力ライブラリのRoomというものがあり、これを使うとDBがかなり扱いやすくなるので、このタイミングで置換えることにしました。今回の変更に伴って、DB構造も見直しています。以前から構想のあったネットワーク再生等も視野に入れて再設計しています。表面的な変更があまり無い割りに、全体的には大規模な更新なので、アップデートに伴うマイグレーション処理も割と気を遣って作ってたのですが、それでもやっぱり問題が発生する場合もあったようで、ユーザの方には御迷惑をおかけしました。土台は更新したので、これから機能の追加やユーザビリティの向上に向けて開発を進めていこうと思うので、よろしくお願いします。3.3.5サボってた更新履歴を書く。3.3.5プラグインのインターフェースを変更プラグイン周りのインターフェースを変更しました。これに伴い、各種プラグインもアップデートしています。これらを利用するためには、すべてのアプリをアップデートする必要があります。今回プラグインインターフェースを変更したのは、プラグインの起動に失敗した場合のエラーを検出するためです。特定のメーカーに搭載される省電力機能など、バックグラウンドのアプリ起動が抑制されている場合に、プラグインが起動メッセージを受け取れない事象が発生することが分かりました。「自動起動マネージャ」によってバックグラウンドのアプリ起動が抑制されている場合に発生する事象を確認しています。これはユーザ様からの報告によって発覚しました。自分でもASUSの端末を1台持っていたので割とすぐに原因が発覚したのですが、持っていなかったら原因不明で終わるところだった...。ちなみに、起動に失敗した場合意は「○○の起動に失敗しました」というメッセージが表示されます。文字コード変更機能追加メディアのタグおよび歌詞の文字コードを変更する機能を追加しました。これは、ユーザ様からの「MP3のタグが文字化けする」という意見が来たために対応しました。これは、同時期に2件の要望が届いていました。1件は日本語でしたが、もう1件はロシア語でした。これに対し、日本のユーザ様から文字化けするサンプルのMP3ファイルをもらった上での対応を行いました。Medolyでは文字コードの判定に「juniversalchardet」を使用しています。このライブラリではテキストのバイナリを与えると、テキストの文字コードを返し、文字コードの判定に失敗するとnullを返します。ところが、頂いたファイルを調べて見ると、文字コードはShift_JISにも関わらず、Windows-1252を返していました。バイト列がたまたま上手く判定できない並びになっているものと推測しましたが、これを改善する方法が思いつきませんでした。そこで、判定結果がWindows-1252になる場合もnullと同様に失敗と見なすことにしました。判定に失敗した場合の処理も変更しています。従来は判定に失敗した場合、利用する言語によって異なる文字コードを返すような処理を行っていました(日本語ならShift_JIS)。それだと使う言語によって判定結果がブレてしまうので、ユーザが任意に設定できるようにしました。具体的には、文字コードを選択するダイアログを追加しています。プロパティ一覧のうち、メディアまたは歌詞の「文字コード」→「変更」を選択するとダイアログが開きます。ここで選択した文字コードが、判定に失敗した文字コードとして利用されます。ダイアログ上方の「強制的に適用」にチェックを入れると、文字コードの判定を行わずに強制的に文字コードを適用しますが、利用する場面はまず無いと思います。何となく気分で付けただけです。サイドメニューのタブを下に移動サイドメニュー(ドロワーメニュー)の「プレイリスト」「プラグイン」のタブを下側に移動しました。理由は、上側は指で押しにくいからです。個人的には割と頻繁に切り替える部分なので、操作しやすい下側タブへ変更しました。出力デバイスの切替えを行った際に、設定が適用されないバグがあったので修正しました。前バージョンの実装ミスです。端末のフォントサイズを変更した際、画面上の一部文字が切れてしまってきちんと表示されない場合があったので、修正しました。具体的には、文字サイズを自動的に調整するようにしたり、文字サイズが変わらないように指定方法を変えたりしています。歌詞・アルバムアートが検索されない問題修正これはユーザ様のバグ報告です。外部ファイルのアルバムアートや歌詞ファイルの検索において、ファイル名に括弧が含まれていた場合に検索できないという問題がありました。これは、検索に正規表現を使用していたのですが、そのエスケープがうまくできていなかったことが原因でした(括弧が正規表現として処理されていた)。そのため、検索文字列のエスケープが正しく行われるように修正しました。一部プラグインイベントが2回起動してしまう問題があったので修正しました。前のバージョンから発生していたのですが、気付いていませんでした。再生キューを削除した際に、再生中のメディアが停止してしまう問題があったので修正しました。これも結構前のバージョンから発生していたのですが、気付いてなかったです。ジャンルの修正MP3等のメディアでは仕様上、ジャンルの指定に名前ではなくコードを指定することができます。今までこのジャンルコードに対応していなかったので、画面上にはコードがそのまま表示されてしまっていたのですが、これをジャンル名として表示するように修正しました。これは実はずっと認識していたのですが、面倒なので放っておいただけです。今回、ユーザ様の利用しているMP3ファイルでこのジャンルコードを使用していることが判明したため、せっかくなので対応しました。3.3.2サボってた更新履歴を書きます。)出力デバイスメニューで扱えるデバイスの対象を拡張し、有線デバイス(オーディオジャック)、Bluetooth、USBオーディオデバイス、HDMI、Miracast、Chromecastまで認識できるようにしました(従来は有線デバイス、Bluetoothまで)。接続すると自動的に接続対象デバイスが切り替わり、設定が切り替わります(デバイスが接続されていない場合、またはデバイスを認識しない場合は「通常」デバイスになります)。なります(例えば、HDMIに画面を映しながらBluetoothイヤホンを接続した場合、画面はHDMI、音声はBluetoothという感じになりますが、ChromeCastの場合は映像も音声も画面から出力されます)。これは手持ちの端末で確認しただけなので、OSやデバイスで変わってくるかもしれません。端末によっては、音声が出力されているにも関わらずデバイスが選択状態にならないことがあるかもしれませんので、その際は報告いただけると助かります。イヤホンとUSBは後勝ち優先出力になっているのですが、この状態でどちらから音声が出力されているかを識別させる方法が分からなかったので同時に接続するとデバイス状態に齟齬が出ます。ご了承下さいまた、これに伴いメニューの構成および挙動を少し変更しています。従来、メニューをタップするとBluetoothデバイスの接続・切断動作になっていましたが、変更後は設定ダイアログの表示になります。Bluetoothデバイスの接続・切断は、該当デバイス項目の右側にあるボタンを押して下さい。出力デバイス毎に設定できる項目を大幅に変更しました。従来、設定画面にあった項目をいくつかデバイス単位に変更できるようにしいています。この設定は該当デバイスが接続状態になっている場合に有効になります。追加した(もしくは設定画面から移動した)設定は以下の通りです。再生可能:OFFの場合、このデバイスが出力状態の場合、再生を抑止しします。再生ボタン拡張:このボタンの2回押し、3回押しで曲送り・曲戻しをします。アプリ起動:デバイス接続時にアプリを表示します。音声フォーカス:デバイス接続時に音声フォーカスを取得します。接続時:デバイス接続時の再生状態をコントロールします。切断時:デバイス切断時の再生状態をコントロールします。従来のダイアログには、「自動起動を抑止」の設定がありましたが、それは「接続時」の項目に移動しています。各項目の先頭についているチェックボックスをONにすると設定項目が有効になります。OFFの項目については、「通常」のデバイス設定を使用します。バージョンアップに伴い、設定は自動的に移行されます。...されるはずです。されなかったらすいません。非同期歌詞の自動スクロール方法を少し調整しています。スクロール位置が従来と少しずれるかもしれません。スクロール位置調整に使用するイントロ・アウトロ時間のデフォルト値を変更しています。再生速度変更した際、歌詞が追従しないなどの不具合を一部修正しています。外部アプリ通知機能が動作しなくなっていた問題を修正しています。以前からおかしかったので、ずっと機能していなかったですね...。3.3.1Galaxyシリーズ端末で再生ができない問題修正Galaxy端末で、再生がうまくできない問題を修正しました。これは、再生速度の調整機能によるもので、端末固有の挙動の違いによるものでした。対応策として、再生処理を少し調整しています。エラーが出力される問題があったのですが、修正しました。画面が破棄されてContextの参照が途切れる場合があることが要因だったようです。3.3.2プラグインのバグを修正プラグインが正しく動作しない、プラグインの処理が完了しないといった各種問題があったため、プラグイン周りの処理を修正しています。書いていますが、結構バグまみれだったので、子コードを大きく変更しています。(画面、アイコン、ウィジェットなど)アプリのデザインを全体的に見直しました。デザインをフラットな感じにしています。近年のデザインの主流がフラットなデザインを主体としたUIなので、それを意識して近づけてみた感じです。Androidが標準で推進しているマテリアルデザインとは呼ぶには無理がありますが...。それに併せてウィジェットや(独自にレイアウトした)通知もデザインを変更しています。加えて、アプリ上で使用している各種アイコンを一新しています。今までPNGで作成していたアイコン画像を、ベクタ画像に差し替えました。これは、アイコン作成や管理の手間を省略するとともに、各種解像度に適切に対応できるようにするためです(具体的には、昔作ったアイコンの中には、xxxhdpiに対応していないアイコンが含まれていたりしました)。Studioに標準で含まれているものや、過去作成したものを再利用したものの他、デザインが実体に合わない一部のアイコンは、新たに取得・作成しています。ループ時に再生速度がリセットされてしまう問題があったため、修正しました。3.2.6無効なコードを削除しました開発中に挿入した余計なコードが含まれており、一部ダイアログが開かなくなっていた問題があったため、修正しました。(追記)アイコンを変更ランチャーアイコン(ホーム画面等に表示されるアプリアイコン)のデザインを変更しました。背景をちょっと弄ってます。(Oreo)から、背景は必ず付けないといけない(標準で丸い形状にしないといけない)ということになっていますので、この辺は仕方なしの変更です。3.2.5で作成した再生速度変更機能ですが、一部機種で再生速度が変更できないというユーザ様からの報告があり、調査して修正しました。ちなみに、この挙動が確認できたのは以下の2機種です。lite恐らく、他にあったかと思いますが、とりあえず問題は種数セイしました。この変の技術情報は、そのうち別途書こうかと思います。ウィジェット調整ウィジェット周りを少し調整しています。それから、ウィジェット配置時のサムネイル画像が古いままだったので差し替えてます。希にアプリが落ちる問題が2件ほどエラーレポートにあがっていたので、修正しました。3.2.3実に8ヶ月ぶりの更新です。転職、引越など色々と重なってしまったため、対応がかなりご無沙汰になっていました。落ち着いてきたのでこれから徐々に更新していくつもり。