せっかくなので設定も追加してみた。
関連:
[Android]twiccaプラグインを作ってみた ツイート表示アクション編 | DevAchieve
設定用に PreferenceActivity を追加する。
PreferenceActivity は Android 3.0 以上からは Prefarence Fragment に置き換えられるらしい。
そして Android 3.0 未満は Compatibility Package というのを使って対応するらしい。
Support Library | Android Developersにある。
でもtwiccaプラグインの一つの項目しか無い設定画面1ページにそこまでするのが
面倒大げさな気がする。
いや、はい。Xperia Arc(Android 2.3以上にアップデート出来ない宿命を背負った端末)から変えたら対応するよ…。
ということで Androidmanifest.xml に Intent を受け取れるように記述する。
設定アクション | Developers | twicca - Yet another Twitter client for Android.
<activity
android:name=".QuoteTweetSettings"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="jp.r246.twicca.ACTION_PLUGIN_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
QuoteTweetSettings.java で設定画面用XMLを onCreate() で読み込んで onStart() で色々する。
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref);
}
@Override
protected void onStart(){
super.onStart();
final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
CheckBoxPreference check = (CheckBoxPreference)getPreferenceScreen().findPreference(getString(R.string.key));
check.setChecked(sp.getBoolean(check.getKey(), false));
check.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(Preference preference, Object newValue){
if(preference.getClass() == CheckBoxPreference.class){
if(preference.getKey().equals(getString(R.string.key))){
sp.edit().putBoolean(preference.getKey(), (Boolean)newValue).commit();
return true;
}
}
return false;
}
});
}
sp を final にしておくと OnPreferenceChangeListener() 内で使えるから便利。
設定項目が多かったら無名インナークラスで書くのはやめたほうがよさそう。
クラスの比較はなんかできたのでやってみただけ。意味は無い。と思う。
複数の CheckBoxPreference の onPreferenceChange() を一回の記述で済ませられそう。
そのためにはキーを string.xml で string-array で保存すればいけるのかもしれない。
addPreferencesFromResource(R.xml.pref);で読み込んだやつ。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="@string/key"
android:title="@string/title"
android:summaryOn="@string/on"
android:summaryOff="@string/off"
android:defaultValue="false"
/>
</PreferenceScreen>
ハードコーディングすると変更時に死ねるので全部 string.xml にぶち込む。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">QuoteTweet プラグイン for twicca</string>
<string name="key">reply</string>
<string name="title">リプライを入れる</string>
<string name="on">QT @screen_name https://twitter.com/</string>
<string name="off">QT https://twitter.com/</string>
</resources>