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
アンテナピクトをカスタマイズしてみよう
Search
umikaki
May 19, 2018
Programming
3
13k
アンテナピクトをカスタマイズしてみよう
2018/5/19開催 OSC名古屋2018で発表したスライドです。
umikaki
May 19, 2018
Tweet
Share
More Decks by umikaki
See All by umikaki
Tidy up my home LAN
umikaki5017
0
310
20190127_android_quick_settings
umikaki5017
0
370
Other Decks in Programming
See All in Programming
Zoneless Testing
rainerhahnekamp
0
120
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
103 Early Hints
sugi_0000
1
220
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
110
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
330
バグを見つけた?それAppleに直してもらおう!
uetyo
0
180
あれやってみてー駆動から成長を加速させる / areyattemite-driven
nashiusagi
1
200
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
Jakarta EE meets AI
ivargrimstad
0
230
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
We Have a Design System, Now What?
morganepeng
51
7.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Gamification - CAS2011
davidbonilla
80
5.1k
Docker and Python
trallard
42
3.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Transcript
"OESPJEͷΞϯςφϐΫτΛ ΧελϚΠζͯ͠ΈΑ͏ ʢʣ ౦ւಓΒ͙-JOVYϥΠτχϯάτʔΫେձˏ͋ͻΔম͖߹ઓਧ্ͷਞ !VNJLBLJ ɹIUUQTNBTUPEPOUSBJOJOGP!VNJLBLJ
࣍ ɹࣗݾհ ɹΞϯςφϐΫτͬͯԿʁ ɹΞϯςφϐΫτΛΧελϚΠζ͢Δʹʁ ɹΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ɹࠓޙͷల ɹ·ͱΊ
ࣗݾհ ͏Έ͔͖ʢ!VNJLBLJʣ ๏ ͱ͋ΔձࣾͷϓϩάϥϚʔ ๏ ओʹϞόΠϧϓϥοτϑΥʔϜͷΞϓϦ։ൃͯ͠·͢ ๏ ࠷ۙ"OESPJEͦͷͷΛΧελϚΠζ͢Δ͜ͱʹϋϚΔ ๏ NBTUPEPOͷḉཱͯ·ͨ͠
IUUQTNBTUPEPOUSBJOJOGPˡࣗḉ
ΞϯςφϐΫτͬͯԿʁ
ΞϯςφϐΫτͬͯԿʁ ͲͷϝʔΧʔͷΞΠίϯͰ͠ΐ͏ʁ ΞϯςφϐΫτʜݱࡏͷଓిঢ়گΛදࣔ͢Δͷ
ΞϯςφϐΫτΛΧελϚΠζ͢Δʹʁ
ΞϯςφϐΫτΛΧελϚΠζ͢Δʹʁ طଘͷ30.ͷ4ZTUFN6*BQLΛٯίϯύΠϧ 0SFPҎ߱4ZTUFN6*BQL͕PEFYԽ͞Ε͓ͯΓɺ ٯίϯύΠϧ͕ࠔ ιʔείʔυΛมߋ͠Ϗϧυ Ϗϧυ͢ΔʹɺͦΕͳΓͷεϖοΫͷϚγϯ͕ඞཁ
˞Ϗϧυํ๏ʹ͍ͭͯɺ΄ͨࢯͷϒϩάΛࢀর ɹʢʮ"OESPJEϏϧυʯͰάάΕग़͖ͯ·͢ʜʣ
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ΞϯςφϐΫτͷॲཧ4ZTUFN6*ʹهࡌ ˞-JOFBHF04ͷιʔεɿIUUQTHJUIVCDPN-JOFBHF04BOESPJE@GSBNFXPSLT@CBTF ΞϯςφϐΫτͷΞΠίϯɿQBDLBHFT4ZTUFN6*SFTESBXBCMF ΞΠίϯͷஔɿQBDLBHFT4ZTUFN6*SFTMBZPVU ΞΠίϯͷදࣔॲཧɿQBDLBHFT4ZTUFN6*TSDDPNBOESPJETZTUFNVJTUBUVTCBS 4JHOBM$MVTUFS7JFXKBWB
QBDLBHFT4ZTUFN6*TSDDPNBOESPJETZTUFNVJTUBUVTCBS QPMJDZ.PCJMF4JHOBM$POUSPMMFSKBWB
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ௨৴छผΞΠίϯ QBDLBHFT4ZTUFN6*SFTESBXBCMFҎԼ ˡYΞΠίϯ ˡ(ΞΠίϯ ˡ(ΞΠίϯ ˡ(
ΞΠίϯ ˡ&ΞΠίϯ ˡ(ΞΠίϯ ˡ)ΞΠίϯ ˡ) ΞΠίϯ ˡ-5&ΞΠίϯ ˡ-5& ΞΠίϯ
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ֤ΞΠίϯ9.-ʢϕΫλʔը૾ʣͰهࡌ ‣ "OESPJE4UVEJPΛ༻͍ͯ47(͔Β9.-ʹม͢Δ ࢀߟɿ͞·͟·ͳີʹద༻ՄೳͳϕΫλʔάϥϑΟοΫͷՃc"OESPJE%FWFMPQFS ɹɹɹɹIUUQTEFWFMPQFSBOESPJEDPNTUVEJPXSJUFWFDUPSBTTFUTUVEJP IMKB
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ిڧΞΠίϯ+BWBͰ࣮͞Ε͍ͯΔʂʂ ‣ QBDLBHFT4ZTUFN6*TSDDPNBOESPJETZTUFNVJTUBUVTCBSQIPOF 4JHOBM%SBXBCMFKBWB վ͢Δͷࢸͷۀʂʂ
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ΞΠίϯͷஔ QBDLBHFT4ZTUFN6*SFTMBZPVUҎԼ ˢϞόΠϧճઢͷσʔλ௨৴ϐΫτͱΞϯςφϐΫτͷஔΛઃఆ ˢ8J'JϐΫτͱΞϯςφϐΫτͷஔΛઃఆ ˢTJHOBM@DMVTUFS@WJFXYNM ˣNPCJMF@TJHOBM@HSPVQYNM
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ <FrameLayout android:id="@+id/wifi_combo" android:layout_height="wrap_content" android:layout_width="wrap_content" > <com.android.systemui.statusbar.AlphaOptimizedImageView android:theme="?attr/lightIconTheme" android:id="@+id/wifi_signal" android:layout_height="wrap_content"
android:layout_width="wrap_content" /> <com.android.systemui.statusbar.AlphaOptimizedImageView android:theme="?attr/darkIconTheme" android:id="@+id/wifi_signal_dark" android:layout_height="wrap_content" android:layout_width="wrap_content" android:alpha="0.0" /> <ImageView android:id="@+id/wifi_inout" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </FrameLayout> <!-- 〜〜(省略)〜〜 --> <LinearLayout android:id="@+id/mobile_signal_group" android:layout_height="wrap_content" android:layout_width="wrap_content" > </LinearLayout> <!-- 〜〜(省略)〜〜 --> </com.android.systemui.statusbar.SignalClusterView> <com.android.systemui.statusbar.SignalClusterView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/signal_cluster" android:layout_height="match_parent" android:layout_width="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:paddingEnd="@dimen/signal_cluster_battery_padding" > <!-- 〜〜(省略)〜〜 --> <FrameLayout android:layout_height="17dp" android:layout_width="wrap_content"> <ImageView android:id="@+id/wifi_in" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView android:id="@+id/wifi_out" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> TJHOBM@DMVTUFS@WJFXYNM 8J'J௨৴ঢ়گΞΠίϯ 8J'JిڧΞΠίϯ ϞόΠϧΞΠίϯ
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneLightTheme" android:id="@+id/mobile_signal" android:layout_height="wrap_content" android:layout_width="wrap_content" systemui:hasOverlappingRendering="false"
/> <com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneDarkTheme" android:id="@+id/mobile_signal_dark" android:layout_height="wrap_content" android:layout_width="wrap_content" android:alpha="0.0" systemui:hasOverlappingRendering="false" /> <ImageView android:id="@+id/mobile_type" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <ImageView android:id="@+id/mobile_roaming" android:layout_width="wrap_content" android:layout_height="17dp" android:paddingStart="22dp" android:paddingTop="1.5dp" android:paddingBottom="3dp" android:scaleType="fitCenter" android:src="@drawable/stat_sys_roaming" android:contentDescription="@string/accessibility_data_connection_roaming" android:visibility="gone" /> </FrameLayout> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/mobile_combo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <FrameLayout android:layout_height="17dp" android:layout_width="wrap_content"> <ImageView android:id="@+id/mobile_in" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView android:id="@+id/mobile_out" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> NPCJMF@TJHOBM@HSPVQYNM ϞόΠϧ௨৴ঢ়گΞΠίϯ ௨৴छผ ΞΠίϯ ిڧΞΠίϯ ϩʔϛϯάΞΠίϯ
ΞϯςφϐΫτͷιʔεΛͬͯΈΑ͏ ΞΠίϯͷදࣔઃఆ QBDLBHFT4ZTUFN6*SFTWBMVFTDPOpHYNM ˡ௨৴Πϯδέʔλදࣔઃఆ ˡ-5&ଓ࣌(ͱදࣔ͢Δ͔Ͳ͏͔ ˢ-5&"ଓ࣌ɺ( -5&
ͱදࣔ͢Δ͔Ͳ͏͔
ΞϯςφϐΫτΛΧελϚΠζͯ͠Έͨ
ΞϯςφϐΫτΛΧελϚΠζͯ͠Έͨ ͜Μͳײ͡ʹͯ͠Έ·ͨ͠ ˞ιʔεHJUIVCͰެ։ͯ͠·͢ˣ ɹIUUQTHJUIVCDPN-JOFBHF:VJBOESPJE@GSBNFXPSLT@CBTF
ΞϯςφϐΫτΛΧελϚΠζͯ͠Έͨ ΞΠίϯσαΠϯมߋ w ֤௨৴छผΞΠίϯͷมߋ w ௨৴ঢ়گΞΠίϯͷมߋ w 8J'JిڧΞΠίϯͷมߋ
ΞΠίϯදࣔҐஔͷมߋ w ௨৴छผΞΠίϯΛిڧΞΠίϯͱಠཱ w ௨৴ঢ়گΞΠίϯΛ௨৴छผΞΠίϯͷԼʹ -5&ଓ࣌-5&ɺ-5&"ଓ࣌(ͱදࣔ w .PCJMF4JHOBM$POUSPMMFSKBWBͷॲཧมߋ
ࠓޙͷల
ࠓޙͷల 8J'Jଓ࣌ͷΞΠίϯόά w 8J'Jʹଓ͍ͯͯ͠ɺ ϞόΠϧ௨৴͕ߦΘΕͨͱ͖௨৴छผΞΠίϯΛද͍ࣔͨ͠ ిڧΞΠίϯͷมߋ w
BSSPXTΈ͍ͨͳΞΠίϯʹ͍ͨ͠ʂ
·ͱΊ
·ͱΊ ΞϯςφϐΫτͷΧελϚΠζํ๏ w 4ZTUFN6*BQLΛٯίϯύΠϧʢ/PVHBUҎલʣ w ιʔεΛվม͠Ϗϧυ ΞϯςφϐΫτͷॲཧ w
BOESPJE@GSBNFXPSLT@CBTFQBDLBHFT4ZTUFN6*ҎԼ w ΞϯςφϐΫτͷΞΠίϯɿSFTESBXBCMF w ΞΠίϯͷஔɿSFTMBZPVU w ΞΠίϯͷදࣔॲཧ ɹTSDDPNBOESPJETZTUFNVJTUBUVTCBS4JHOBM$MVTUFS7JFXKBWB ɹTSDDPNBOESPJETZTUFNVJTUBUVTCBSQPMJDZ.PCJMF4JHOBM$POUSPMMFSKBWB
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠