Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rx and Preferences
Search
@hotchemi
November 24, 2016
Programming
180
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rx and Preferences
http://www.meetup.com/Tokyo-Android-Meetup/events/235119373
@hotchemi
November 24, 2016
More Decks by @hotchemi
See All by @hotchemi
kompile-testing internal
hotchemi
0
290
The things we’ve learned from iOS×React Native hybrid development
hotchemi
2
5.5k
React Nativeを活用したアプリ開発体制/sapuri meetup
hotchemi
3
8.3k
Type-Safe i18n on RN
hotchemi
2
1.2k
Navigation in a hybrid app
hotchemi
3
1.4k
PermissionsDispatcher × Kotlin
hotchemi
0
3.4k
kotlin compiler plugin
hotchemi
1
820
Introducing PermissionsDispatcher
hotchemi
1
190
khronos
hotchemi
4
2k
Other Decks in Programming
See All in Programming
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
280
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
130
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
110
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
500
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
450
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
160
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
610
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
190
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
310
Mind Mapping
helmedeiros
PRO
1
290
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Measuring & Analyzing Core Web Vitals
bluesmoon
9
940
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Leo the Paperboy
mayatellez
8
2k
Transcript
Rx and Preferences Shintaro Katafuchi/hotchemi
• Shared Preferences • Just a XML based KVS •
boolean,String,float,int,long,Set<String> • Tend to be messy to manage keys
public class PreferenceManager { private static final String KEY_USER_ID
= "user_id"; public putUserId(int userId) { prefs.edit().putInt(KEY_USER_ID, userId).apply(); } public int getUserId() { return prefs.getUserId(KEY_USER_ID, -1); } public boolean hasUserId() { return prefs.contains(KEY_USER_ID); } public void removeUserId() { prefs.edit().remove(KEY_USER_ID).apply(); } }
private static final String SHARED_PREFS_NAME = "HogeActivity"; private static
final String LAST_UPDATE_TICK_KEY = "lastUpdateTick"; private static final String LAST_DAILY_TASK_TICK_KEY = "lastDailyTaskTick"; private static final String LAST_SPLASH_EVENT_KEY = "lastSplashEventTick"; private static final String FCM_TOKEN_KEY = "fcmToken"; private static final String GCM_REGISTRATION_ID_KEY = "gcmRegistrationId"; private static final String GCM_APP_VERSION_KEY = "gcmAppVersion"; private static final String INVALIDATED_COUNT_KEY = "invalidatedCount"; private static final String LAUNCH_COUNT_KEY = "launchCount"; private static final String FIRST_BOOT_TICK_KEY = "firstBootTick"; private static final String RATING_DIALOG_KEY = "ratingDialogKey";
• Rx and Preferences • Deal with every “data” as
Observable • We need a subscription mechanism • Yes, RxJava! • Compound with other Rx libraries
Android Application Architecture https://labs.ribot.co.uk/android-application-architecture-8b6e34acda65#.74al8nhsz
None
None
• What I wanna do… • manage keys easily •
subscribe a data with Rx
hotchemi/tiamat https://github.com/hotchemi/tiamat
apply plugin: 'android-apt' dependencies { compile ‘com.github.hotchemi:tiamat:0.8.1’ provided ‘com.github.hotchemi:tiamat-compiler:0.8.1’ }
Install
@Pref("sample") class Sample { @Key(name = "long_value") long longValue =
false; // you can define default value like stringValue @Key(name = "string_value") String stringValue = "default_value"; @Key(name = "boolean_value") boolean booleanValue; @Key(name = "int_value") int intValue; @Key(name = "float_value") float floatValue; @Key(name = "set_string") Set<String> setStringValue; } Define a model
RxPreferences preferences = new SampleSharedPreferences(context); preferences.putStringValue(string); preferences.putStringValue(string, defaultValue); preferences.getStringValue(); preferences.hasStringValue();
preferences.removeStringValue(); Generate codes
// as primitive boolean value = preferences.getBooleanValue().asValue(); // as Observable
Observable<Boolean> value = preferences.getBooleanValue().asObservable(); // as Action Action1<? super Boolean> value = preferences.getBooleanValue().asAction(); As RxJava
subscriptions.add(preference.asObservable() .observeOn(AndroidSchedulers.mainThread()) .subscribe(RxCompoundButton.checked(checkBox))); subscriptions.add(RxCompoundButton.checkedChanges(checkBox) .skip(1) .subscribe(preference.asAction())); With Rx libraries
None
Everything is a stream!