hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

読書尚友 夜間モード

macOS Mojave でダークモードが搭載され、他OSでも流行りそうな気配である。

AndroidではAndroid N Developer Preview(初期版)では夜間モードがあったが、実際の製品では搭載が見送られた。だがスマートフォンの場合はバッテリの持ちが長くなるメリットがあるため、将来的に標準搭載されると思う。Twitterのようにアプリレベルで夜間モードを搭載しているものもある。

実はSupport Library の AppCompat 23.2.0 以降、DayNight テーマが導入されており、アプリレベルでの実装が簡単になった

qiita.com

ということで読書尚友にも夜間モードを実装してみた。

f:id:hishida:20190206163531j:plain

f:id:hishida:20190206163543j:plain

f:id:hishida:20190206163555j:plain

f:id:hishida:20190206163606j:plain

読書画面の背景色はこれまでもカスタマイズできたが、すべての画面のパーツの背景色をダークモードに切り替えられるのがミソである。

 

実装方法

ActivityのテーマのベースにTheme.AppCompat.DayNightを使用します。

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.ActionBar">
<item name="windowActionBar">true</item>
<item name="windowNoTitle">false</item>
</style>

</resources>

 

 

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textColorPrimary">#FFFFFF</color>

</resources>

 

 

AndroidManifest.xml

<activity android:name="MainActivity"

android:label="@string/app_name"              android:theme="@style/AppTheme.ActionBar" >

</activity>

 

 アプリでは、OnCreateの先頭で夜間モードを設定します。

MainActivity.java

public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {

if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
}
super.onCreate(savedInstanceState);
.....

 

 

AppCompatDelegate.MODE_NIGHT_AUTO 自動切替
AppCompatDelegate.MODE_NIGHT_NO 夜間モードオフ
AppCompatDelegate.MODE_NIGHT_YES 夜間モードオン
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM システムに依存

 自動切替を実験したところ、22:00に夜間モードに切り替わるようだ。

 

読書尚友 ファイラーの強化

読書尚友の改良の続き。ローカルファイルのファイラを強化し、複数ファイルを選択してコピー、移動、削除等ができるようになった。これでファイラとしては最低限の機能が揃ったと思う。

f:id:hishida:20190206163339j:plain

 まだ課題があるとすれば本棚の改良ぐらいだろうか。

読書尚友 小改良

読書尚友の小改良を続けている。

読み上げの速度と音程の調整

標準の読み上げ速度は日本語だと遅すぎ、英語だと速すぎに感じるので、速度を調整できるようにした。

f:id:hishida:20190206192326j:plain

共著や翻訳者がいる場合の作者一覧の改良

翻訳の場合は著者と翻訳者があるので、作者一覧でそれぞれの一覧が表示できるようにした。

f:id:hishida:20190206192339j:plain



 

読書尚友からの外部辞書検索

Androidの開発環境をMacからWindowsに移行したのを機に、読書尚友の開発をボチボチ再開しようと考えている。

まず手始めに、外部辞書検索ボタンを設けてEBPoketを起動できるようにした。

 

f:id:hishida:20181227182436j:plain

これまでも共有→アプリケーションでEBPocketを選択すれば検索ができたが、2ステップ必要なのと、EBPocketを終了して戻る場合も、戻るボタンを4回押す必要があった。

辞書検索ボタンで起動した場合、直接検索結果画面が開き、戻るボタン一回で画面を終了して戻ることができる。これで辞書引きが苦でなくなった。

f:id:hishida:20181227182450j:plain

本当はポップアップウインドーが開く形にしたかったが、それはまた次の機会にしたい。

EBPocketのAndroid6.0以降での障害について

なお、EBPocketをAndroid6.0以降の環境で初めてインストールするときに、異常終了するケースがあることが判明したので、対応した。今回Windows上にエミュレータ環境を作ったことがきっかけで表面化し、気づくことができた。

Android6.0以降ではストレージに書き込みを行うアプリはパーミッションを与えなくてはならないが、パーミッションを与える前に辞書ディレクトリを生成しようとしていたことが原因だった。

 

 

開発機としてのSurface Pro 6

Surface Pro 6(タイプカバー同梱版)のタイプカバーに初期不良があった件を報告したが、タイプカバーの交換も終わり、開発機としての運用を本格的に始めた。

なお、12月に入ってオンラインストアと正規販売店では期間限定でタイプカバー購入分の18,000円キャッシュバックが始まり、Amazonではサイバーマンデーで旧Serface Proの三点セットが登場するなど、購入タイミングとしては12月になってからのほうがお得だったかもしれない(旧Serface ProはWindows Proというメリットもある)。

pc.watch.impress.co.jp

現時点で一番安価に購入する方法は、ビックカメラ等の店舗でPayPay決済で20%還元を受けて、Microsoftの18,000円キャッシュバックも同時に得る方法だろう(PayPay決済の20%還元は12/13で終了しました)。ヤマダ電機なら、なぜかズワイガニのプレゼントまである。

akiba-pc.watch.impress.co.jp

高DPIでのVisual Studioのフォームデザイナの問題

さてSurface Pro 6だが、性能的には開発機として何の問題もない。難点はWindows10 がProではなくHomeであることで、Hyper-Vが使用できないのがちょっと痛い(Androidエミュレータ等でHyper-Vを使用すると高速化できる)。またOfficeが同梱されているので、すでにOfficeのライセンスを持っている人には無駄になる。WindowsのバージョンやOfficeの有無が選択出来たらありがたい。

使用していて気になったのは解像度が高すぎてディスプレー設定を200%にしないと文字が小さすぎることである。ディスプレー設定を100%以外にする場合、実はVisual Studio のフォームデザイナで自動スケーリングが働いてレイアウトがくずれるという問題がある。Visual Studioを使う時だけ100%にするという方法はSurface Proでは実用にならないので、Visual Studioだけ自動スケーリングを止める方法を探したところ、レジストリ設定で対応できることが分かった。

docs.microsoft.com

code4ward.net

これでVisual Studioのフォームデザイナだけ100%で表示するという運用が可能になった。

Android Studio Windows

次にAndroidの開発環境をMac OS X からWindowsに載せ替えを行った。Windows版のAndroid Studio 3.2をインストールしてソースを移行したところ、NDKも含めて予想外にスムーズに全コンパイルが完了。EBPocket for Android読書尚友Windows上でビルドできるようになった。

これでMacbook Proは、Xcodeが必要なMac OS X用のアプリ(EBMac,EBStudio2 for Mac OS X)とiOS用のアプリ(EBPocket for iOS)をビルドするとき以外は必要なくなり、日常の持ち歩きはSurface Pro 6だけで完結するようになった。

Macbook Pro 13"(Retina, 13-inch, Early 2015) の1.58kgから、1.08kg(タイプカバー込み)まで軽量化したので、通勤やカメラの携行が非常に楽になった。

 追加購入したアクセサリ

通勤で使用すると、職場と家庭にACアダプタが必要になる。また、Surface Proは有線LANが搭載されていないため、USB-LANアダプタも欲しい。ただ頻繁にUSBの抜き差しを行うと一つしかないUSBコネクタが劣化しそうで怖い。

以上の悩みを一気に解決する方法として、少々高価だがSurface Dockを購入することにした。Surface Connectケーブル接続で、HDビデオポートx2、ギガビットEthernetポートx1、USB3.0ポートx4、オーディオ出力x1が利用できる。ただし専用のACアダプタを含めて1kgぐらいあるので、デスクトップの利用限定となる。私の場合、職場にSurface Dockを置き、製品同梱のACアダプタは自宅で使うことにした。 

 ほかに本体保護用にガラスフィルム、背面保護フィルムを購入した。定番アクセサリのスタイラスペンはあまり使わない気がするので購入していない。

あと本体購入後45日以内なら延長保証Microsoft Complete を購入できるが、1年保証が2年保証に延びて15984円(税込)というのは割高な気もする。ただ+5400円でバッテリ交換できるので、保証期間の終わる頃にバッテリ交換すれば20,000円でバッテリ交換できるという考え方もあるので、購入検討中。

 

Surface Pro タイプカバー初期不良 続編

前回はSurface Pro 6 タイプカバー同梱版を購入したところ、タイプカバーのマウスパッドが傾いて取り付けられているという初期不良について報告した。その後の経緯についてご報告する。

ebstudio.hatenablog.com

ビックカメラオンラインストアであるビックカメラ.comから購入したのだが、メールでの問い合わせの回答が「商品のサポートにつきましてはメーカーにて行わせて頂いております。お手数ではございますがメーカーに直接ご確認頂きたく存じます(原文通り)」という内容だったので、製品の保証書に記載されているMicrosoftのサポート窓口に電話してみた。
その結果、「初期不良にあたるが、Microsoftのサポートで対応すると新品交換ではなく再生品との交換になり、その場合保証期間が1年ではなく90日になる。ビックカメラは正規販売店なので、販売店で新品交換の対応ができるはず」という回答だった。当然そうだよね。
続いてビックカメラ ネットショップ サポートセンターに電話し、経緯を説明する。その結果、初期不良として交換に応じられないわけではないが、初期不良と判断したMicrosoftの担当者の名前がいる、と言われた。要するに本当に初期不良かどうかビックカメラ ネットショップからMicrosoftに確認電話を入れるという手続きが必要らしい。流石に担当者の名前まで控えていなかったので、再度Microsoftのサポートに電話し、前回の問い合わせ番号を伝えて担当者名を教えてもらい、再度ビックカメラ ネットショップに電話してMicrosoftの担当者名とこの案件の問い合わせ番号を伝える。
しばらくして折り返しTELがあって、交換に応ずるとのこと。この間、数時間を要してしまった。

最初のメールは、ようするに「初期不良かどうかの判断をメーカーにしてもらってくれ」という意味だったと思われるが、あの文面でそのような意味は読み取れない。そもそも個人購入なのに法人窓口のURLを教えてくるのもどうかしている。写真を添付しているのだから初期不良かどうかはビックカメラが判断できるはずだ。

後の祭りだが、ビックカメラの実店舗で購入していれば、現物を見せれば速やかに交換してもらえた可能性がある。またはMicrosoftオンラインストアで購入していれば、スムーズに返品交換ができただろう。今後はビックカメラオンラインストアは利用しないと誓った。明らかな初期不良を認めるのに購入者にこれだけの負担を強いるというのはあってはならない。これが高額のカメラやレンズだったらと思うとゾッとする。

実際の交換は来週になるが、Surface Pro 6自体は非常に優れた機種なので、開発環境として今後数年間はメインで使用すると思う。

Surface Pro 6 タイプカバー同梱版を購入するもタイプカバー初期不良

開発機にMacBook Pro (Retina, 13-inch, Early 2015)を使用しており、カメラと同時に持ち歩く機会が多いこともあり、兼ねてから軽量化したいと思っていた。順当に考えればMacBook Pro の現行版か、MacBook 12"になるが、あのキーストロークの浅いキーボードが生理的に全くダメで、MacBook Airのリニューアル版に期待していた。長年待ったMacBook Airリニューアル版も、結局あの浅いぺこぺこのキーボードで、もうMacBookで購入できる機種はないとついに諦めをつけて、Surface Pro の購入を検討するようになった。Surface Pro 6 は第8世代Core i5 クアッドコアで、少なくとも現在使用しているMacBook Pro Early 2015 よりも高速で、タイプカバーをつけても1.08kgと、500gも軽量化できる。ネックは価格だけだと思っていたところ、タイプカバー同梱で2割安いモデルが数量限定で発売された。これは買うしかない。

ビックカメラ.com にちょうど在庫があったので、発注して到着したのが11/23の本日。ところがあろうことか、タイプカバーのマウスパッドが初期不良で左側が浮き上がり、右側が沈み込んでいる。店頭在庫でもこんな状態は見たことない。これは開封直後の使用していない状態の写真である。

f:id:hishida:20181123151542j:plain

とりあえず購入店舗であるビックカメラ.com にメールで問いあわせたところ、

平素は格別のお引き立てを賜り、厚くお礼申し上げます。
ビックカメラネットショップサポート担当のXXXXと申します。

ご連絡が遅くなりまして、誠に申し訳ございません。

お問い合わせの商品、
【LJM-00011 Windowsタブレット キーボード付き Surface Pro 6(サーフェスプロ6)特別版 シルバー [12.3型 /intel Core i5 /SSD:256GB /メモリ:8GB]】
につきまして、ご迷惑をおかけ致しまして、大変失礼いたしました

お求めいただきました商品の不具合の確認など
商品のサポートにつきましては
メーカーにて行わせて頂いております。

お手数ではございますが
メーカーに直接ご確認頂きたく存じます。

メーカーの問い合わせ先のURLを記載させて頂きますので、
ご参照頂ければと思います。

* URLの途中で改行になっている場合には、
URL部分の全体をコピー後、ブラウザのアドレスバーに直接貼り付けてください。

Surface・お問い合わせフォーム」
https://www.microsoft.com/ja-jp/business/devices/support/

お手数をおかけ致しまして、申し訳ございませんが
何卒、よろしくお願い申し上げます。

その他、ご不明な点がございましたら、お問い合わせください。
今後もビックカメラをご愛顧賜りますよう、お願い申し上げます。

そのURLは法人用なので役に立たないよ。

あいにく11/23は祝日なので、Microsoftのサポートは休み。

初期不良を認めさせて交換させたいが、経過はまたご報告する。