Icicle
We all hate boilerplate codes right? We hate to have to do:
@Override protected void onSaveInstanceState(Bundle outState) {
outState.putString(AWESOME_STRING, mAwesomeString);
outState.putInt(AWESOME_INT, mAwesomeInt);
super.onSaveInstanceState(outState);
}
And then have to do:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mAwesomeString = savedInstanceState.getString(AWESOME_STRING);
mAwesomeInt = savedInstanceState.getInt(AWESOME_INT);
}
}
This is familiar Right?
Icicle does all the hard work for you. It automagically (I love that word too) saves and restore your instance state.
1.0.0
What's new in version Please check the Change Log for what's new
Setting up
- Add APT to your project-level
build.gradle
file
buildscript {
repositories {
jcenter() // Also available in maven central
}
dependencies {
...
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
- Add icicle and icicle-processor to your app-module-level
build.gradle
file
apply plugin: 'com.neenbedankt.android-apt' ... dependencies {
apt 'com.segunfamisa:icicle-processor:1.0.0'
compile 'com.segunfamisa:icicle:1.0.0'
}
Usage
Using Icicle is simple. Annotate the field variables you wish to persist the state with @Freeze
, call Icicle.freeze()
when you want to save, and call Icicle.thaw()
when you wish to restore from the state.
@Freeze int mAwesomeInt; @Freeze String mAwesomeString; @Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icicle.thaw(this, savedInstanceState);
}
@Override protected void onSaveInstanceState(Bundle outState) {
Icicle.freeze(this, outState);
super.onSaveInstanceState(outState);
}
Note: Icicle works only with non-private, non-final and non-static fields.
Proguard rules
Please use the following proguard configuration for Icicle
-keep class **$$Icicle {
*;
}
-keep class com.segunfamisa.icicle.** {
*;
}
-keepclasseswithmembers class * {
@com.segunfamisa.icicle.annotations.Freeze <fields>;
}
Contributing
Contributions are welcome. Please check the contributions guide for more details.
License
Copyright 2016 Segun Famisa Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.