├── LICENSE └── sessions_2017.md /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /sessions_2017.md: -------------------------------------------------------------------------------- 1 | # Quick notes from Google IO 2 | Quick summary from every session I watched. 3 | I try to cover just the new stuff not the recapitulation parts of every session 4 | and I cover mostly technical bits, not so much the "philosophical" parts 5 | 6 | [All sessions from Google I/O](https://www.youtube.com/playlist?list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy) 7 | 8 | [All android sessions](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-odHd6XEaf7ykfsosYyCKp) 9 | 10 | #### [What’s new in android?](https://www.youtube.com/watch?v=1N9KveJ-FU8&index=1&list=PLWz5rJ2EKKc-odHd6XEaf7ykfsosYyCKp) 11 | Just the basic summary of everything new in android 12 | 13 | #### [What’s new in firebase?](https://www.youtube.com/watch?v=m7a26ymUu2U&list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy) 14 | - New view for firebase analytics TODO 15 | 16 | #### [New Release & Device Targeting Tools](https://www.youtube.com/watch?v=peCWuCSIv7U) 17 | - New device selection screen. More filters, more devices everything is just awesome 18 | - Google can handle signing and manage your keys for you now 19 | - TODO 20 | 21 | #### [Architecture Components - Introduction](https://www.youtube.com/watch?v=FrteWKKVyzI&list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy) 22 | Opening session for other three Architecture sessions. Basic overview of new first party components and reasoning behind them. 23 | - `Lifecycle` components can now be notified from `LifecycleOwner` and perform their lifecycle sensitive actions 24 | - `LiveData` lifecycle aware observable 25 | - `ViewModel` component that survives configuration change 26 | - `Room` sqlite library 27 | 28 | 29 | #### [Architecture Components - Solving the Lifecycle Problem](https://www.youtube.com/watch?v=bEKNi1JOrNs) 30 | - `Lifecycle` as first class citizen, answers the question what is the current state to it's observers 31 | - `LifecycleObserver` component that can observe `Lifecycle` states using annotations 32 | - `LifecycleOwner` interface that can return `Lifecycle`, 33 | currently implemented by `LifecycleActivity` and `LifecycleFragment` but should be implemented by standard versions from suport lib in the future 34 | - `ProcessLifecycleOwner` composite lifecycle of all activities 35 | - `LiveData` lifecycle aware observable with automatic subscription management. 36 | when you call `LiveData.observe` you pass in `LifecycleOwner`. It also gives it's 37 | subscribers last available value on re-subscription 38 | - Nice quick example how to implement your own `LiveData` with 39 | `LocationManger` inside. 40 | - `MutableLiveData<>` TODO research but it's more like a subject, you can 41 | set data on it from the outside 42 | - In depth explanation how fragments handle `LiveData` so you can be sure 43 | there will be no Fragment transaction exception (state loss) 44 | - They admit it is RxJava because it promotes reactive programing but 45 | it's not because its lifecycle-aware and it's easier 46 | - `LiveDataReactiveStreams` they provide `fromPublisher` and `toPublisher` 47 | to translate `LiveData` and `RxJava` back and forth 48 | - `LiveData` is holder not a stream. New observer will receive 49 | last value of `LiveData` 50 | - `LiveData` is only on main thread 51 | - `ViewModel` associated with fragment/activity and it's retained across 52 | configChanges. It is destroyed only when activity is destroyed 53 | - `ViewModel` don access views, activity context and don hold resources (drawables etc) 54 | - Inner fragment communication via `ViewModel`. You have one `ViewModel` 55 | for all fragments and you get it by `ViewModelProviders.of(getActivity())` so 56 | you receive activity's `ViewModel` not fragment's. 57 | 58 | #### [Architecture Components - Persistence and Offline](https://www.youtube.com/watch?v=MfHsPGQ6bgE) 59 | - `@Query` annotation containing whole query in it's pure form 60 | - You create the whole interface `@Dao` with annotated methods similar to retrofit 61 | - `@Dao` maps queries to `@Entity` annotated classes 62 | - `@Database` annotated abstract class extends `RoomDatabase` 63 | - Build database with builder similar to retrofit 64 | - Room provides `@Insert`, `@Delete`, `@Update` annotations too 65 | - Multiple bind parameters 66 | - Room compile time checks for many things and that's awesome 67 | - You can just create simple pojo for mapping custom return types from queries 68 | when you select just specific things in in SELECT statement and not the whole `@Entity` 69 | - `TypeAdapters` to help Room convert data form sql to java and vice versa 70 | you then need to add `@TypeConverters` annotation 71 | - TypeAdapters doesn't work very well for nested objects in `@Entity` so you they 72 | provide `@Embedded` annotation for that. You need to yous `prefix` attribute 73 | on `@Embedded` annotation if you want more than one embedded objects of the same type 74 | in one entity 75 | - You can return `LiveData` or RxJava2 `Flowable` from queries to get fresh data 76 | every time something updates 77 | - Pojos For Relations = in room you cannot have entity in entity to represent joint sql tables 78 | entities contains just foreign keys like real table. If you want to query 79 | data and select rows from different tables you need to create new pojo to represent 80 | the results, so no lazy loading stuff 81 | - You define foreignKeys as attribute in `@Entity` annotation and the same for indexes 82 | - For testing purpouses you can create `inMemoryDatabaseBuilder` 83 | - Daos are just interfaces so it's easy to mock when you need to test 84 | dependent components like `ViewModel` 85 | - Migrations: you can `.addMigrations()` in you database builder 86 | - Room provides testing migration `android.arch.presistence.room.testing:1.0` 87 | 88 | #### [Whats New in Android Development Tools](https://www.youtube.com/watch?v=Hx_rwS1NTiI) 89 | - Android Studio 3.0 90 | ###### Editor 91 | - Parameter hints 92 | - Kotlin support 93 | - Bitecode view -> decompile button and you can see javacode generate by kotlin 94 | - All lint check works on kotlin now 95 | - `ConstraintLayout` 1.1 with barriers and everything is now supported now in 96 | layout editor 97 | - New sample resource type contains lorem ipsum texts and other stuff 98 | - You can for example bind text from your resource json file to tools: attributes 99 | to show example editor data from your real data 100 | - You can create sample data for `RecyclerView` that looks like the real app 101 | - Support for O downloadable fonts and new Icons directly from editor 102 | - Device explorer for browsing files 103 | - Support for Instant Apps and refactoring your existing app to modules 104 | - You can pull activities to it's own modules 105 | - Improved APK analyzer, you can look at the bitecode now 106 | - APK debuging - demo didn't work 107 | - Profiler for CPU, Memory and network like before but more powerful now. 108 | - Network profile - now looks looks like stetho in chrome dev tool and supports 109 | all networking libs you need 110 | - CPU profiler - start collecting samples and then timeline shows you more. 111 | - Memory profiler - start collecting alocations and then you can see heap dump 112 | with all the objects in it with preview of bitmap etc and where the objects came from 113 | ###### Build 114 | - Google maven repo: `http://maven.google.com` with all support libs etc 115 | - Incremental tasks now support everything except annotation processors 116 | - Gradle have build cache now 117 | - More Java 8 features support 118 | - Better dependency management `flavorSelection` 119 | - Instant App explanation of features and feature dependencies 120 | ###### Test 121 | - Google play store added to emulator 122 | - OpenGL ES 3.0 in emulator 123 | - Proxy support in emulator 124 | - Emulator rotary input (wear) 125 | - Improved Layout Inspector 126 | ###### Optimize 127 | - WebP support, just click on any png file and convert 128 | 129 | 130 | #### [Whats New in Android Support Library](https://www.youtube.com/watch?v=V6-roIeNUY0) 131 | - Move support to minimal API Level 14 so Gingerbread and Honeycomb are dead 132 | - Many deprecated old methods related to old API and method limit dropped significantly 133 | - Google maven repository 134 | - Fonts are new resource type (fonts folder) and declare font to use on TextView in xml 135 | - Downloadable fonts, entire Google fonts catalogue 136 | - Everything you need to download some font you can declare in xml 137 | - Font picker in android studio under font -> "more fonts" and you can select 138 | anything from google fonts directly from AS and it will handle all the import 139 | xml declarations and everything for you 140 | - Emoji compatibility lib 141 | - TextView autosizing 142 | - Physic-based animations Velocity not duration. Spring and Fling Animations for now 143 | - VectorDrawable now supports fill-rule from svg back to API 14+ 144 | - AnimatedVector, DrawableCompat Path morphing & interpolation 145 | - Backport for pathInterpolator 146 | - Wearable support lib integrated to main lib so many improvements on wear ui elements 147 | - Leanback lib some new prefabricated fragments for commonly used screens 148 | - `PreferenceDataStore` allows customization of preference storage mechanism in 149 | Preference and Preference manager. So you can now set new "Backend" for preference fragment/activity. 150 | - `executePendingTransaction()` and `commitNow`, and similar transaction calls 151 | are no longer allowed during FragmentManager state changes 152 | - `FrameMetricsAggregator` 153 | - `ActionBarDrawerToggle` finally it is simple to disable toggle animation 154 | 155 | #### [Background Check and Other Insights into the Android Operating System Framework](https://www.youtube.com/watch?v=hbLAzwhBjFE&list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy) 156 | TODO 157 | 158 | #### [Whats Possible with Cloud Functions for Firebase](https://www.youtube.com/watch?v=G-MBeEW92v4) 159 | No new material just a nice complex example of cloud function TODO 160 | 161 | #### [Introduction to Kotlin](https://www.youtube.com/watch?v=X1RVYt2QKQE&list=PLWz5rJ2EKKc-odHd6XEaf7ykfsosYyCKp) 162 | - Data classes are awesome, they generate 163 | - Strong type infference 164 | - Equals functionality 165 | - Interop with java 166 | - String interpolation 167 | - Default params 168 | - Naming params 169 | - "I love when people crap" 170 | - When statement 171 | - Extension functions on `BigDecimal` example 172 | - Infix extension functions for functions with one param 173 | - Extension property on Int to create `BigDecimal` literal 174 | - Overloading operators 175 | - Null safety 176 | - High order functions 177 | - When last parameter is an function you can have it outside of parameter brackets and it looks like currying or some DSL 178 | - Extension high order functions on generic collections like `map`, `filter` or `sort` 179 | - Data class destruction 180 | - Algebraic data type using sealed classes 181 | - Smart cast example in when statement 182 | - Sequences, lazy evaluation `asSequence()` 183 | - Kotlin can now compile to javascript 184 | - Kotlin native in preview version 185 | - Coroutines for writing asynchronous code the way you write synchronous code 186 | 187 | 188 | #### [What's New in Android Design Tools - New Features for Rapid UI Development](https://youtu.be/nYb4FUdlLZE) 189 | - Full designer view in preview view 190 | - [Community website](http://www.constraintlayout.com) 191 | - `ConstraintLayout` 1.1.0 Beta released 192 | - Barriers - similar to keylines but with some differences for other usecase 193 | - Group - add views to group and you can se for example visibility of that group 194 | - Slices of data in layout editor for easier property changes 195 | - Sample data referencing @tools. Predefined sample data like `full_names` or `us_phones` or your custom sample data 196 | useful in `RecyclerView` previews 197 | - Placeholder - you can now set a placeholder and set its content id with combination of TransitionManager and create automatic 198 | animations 199 | - You can create placeholder screens and fill them with data later so you can create template screens with placeholders 200 | and fill them up later for different use cases 201 | - With constraint sets you can separate views from how we layout them 202 | - You can use constraint sets to have lighter orientation change, just have one constraint sets for portrait and one for 203 | landscape and set them on change 204 | - You can create cool animations with constraint sets if you thing about them as keyframes and with use of 205 | `TransitionManger.beginDelayedTransition` 206 | - You can connect all of this with new physical animations 207 | 208 | #### [Test-Driven Development on Android with the Android Testing Support Library](https://youtu.be/pK7W5npkhho) 209 | - Write tests man! 210 | - Example of TDD 211 | - Unit tests: Set conditions for test -> exercise -> make assertions 212 | - Robolectric provides alternate implementation of android components 213 | - You can config individual test to run on specific versions of android or all of them 214 | - Android test orchestrator - runs each test in single instrumentation invocation 215 | - Isolate screen tests with espresso intents 216 | - Create more isolated tests 217 | - Multiprocess Expresso support 218 | 219 | #### [Android Fireside Chat](https://youtu.be/NSZ7iadGaa8) 220 | - Explanation of project Treble 221 | - Thinking behind new restrictions on Broadcast Receivers 222 | - Battery profiling in the future maybe 223 | - No plans to write android libs and APIs in kotlin but they want to ensure that is's good for consumption in kotlin 224 | - They may solve problem with huge string resources for apps that have like 50 language translations in the future 225 | - Valley is not that recommended anymore, use Retrofit and Glide for images 226 | 227 | #### [Life is Great and Everything Will Be Ok, Kotlin is Here](https://www.youtube.com/watch?v=fPzxfeDJDzY) 228 | - `Bundle` nullability is in type in kotlin (if there is `@Nullable` annotation 229 | - Bean like fields with setters and getters are properties in kotlin 230 | - Example of useful usage of extension methods in case of `ViewGroup` 231 | - `ViewGroup` can be extended to gain list-like methods 232 | - You can even add operators to have super simple manipulation 233 | - Make sure your functions are inline to reduce overhead 234 | - Extend view group to provide iterator to make use of all kotlin high order functions 235 | - You can even add extension properties like `size` 236 | - Use high order functions and extension functions to encapsulate complexity 237 | - Lambdas with receivers (lambdas with extensions) to create DSL-like constructs 238 | - Property delegation with `by lazy` 239 | - `by Deleate.notNull` you can define vals that have value later 240 | - Sealed classes usage on example with `RecyclerView` 241 | 242 | - Share your enthusiasm about kotlin with the world 243 | - Convince your management that kotlin is the way to get less buggy app, faster iteration etc 244 | - Work with your team, discuss a create guidelines for new people on the team 245 | --------------------------------------------------------------------------------