frankiesardo/icepick


Android Instance State made easy

License: EPL-1.0

Language: Clojure


Icepick

Icepick is an Android library that eliminates the boilerplate of saving and restoring instance state. It uses annotation processing to generate code that does bundle manipulation and key generation, so that you don't have to write it yourself.

class ExampleActivity extends Activity {
  @State String username; // This will be automatically saved and restored

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Icepick.restoreInstanceState(this, savedInstanceState);
  }

  @Override public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Icepick.saveInstanceState(this, outState);
  }

  // You can put the calls to Icepick into a BaseActivity
  // All Activities extending BaseActivity automatically have state saved/restored
}

It works for Activities, Fragments or any object that needs to serialize its state on a Bundle (e.g. mortar's ViewPresenters)

Icepick can also generate the instance state code for custom Views:

class CustomView extends View {
  @State int selectedPosition; // This will be automatically saved and restored

  @Override public Parcelable onSaveInstanceState() {
    return Icepick.saveInstanceState(this, super.onSaveInstanceState());
  }

  @Override public void onRestoreInstanceState(Parcelable state) {
    super.onRestoreInstanceState(Icepick.restoreInstanceState(this, state));
  }

  // You can put the calls to Icepick into a BaseCustomView and inherit from it
  // All Views extending this CustomView automatically have state saved/restored
}

Custom Bundler

From version 3.2.0 you can supply a class parameter to the State annotation. This class should implement the Bundler interface and you can use it to provide custom serialisation and deserialisation for your types.

class MyFragment {
  @State(MyCustomBundler.class) MyCustomType myCustomType;
}

class MyCustomBundler implements Bundler<MyCustomType> {
  void put(String key, MyCustomType value, Bundle bundle) {
    ...
  }

  MyCustomType get(String key, Bundle bundle) {
    ...
  }
}

This is useful if you want to use icepick in conjunction with Parceler.

Proguard

If Proguard is enabled make sure you add these rules to your configuration:

-dontwarn icepick.**
-keep class icepick.** { *; }
-keep class **$$Icepick { *; }
-keepclasseswithmembernames class * {
    @icepick.* <fields>;
}
-keepnames class * { @icepick.State *;}

Download

Icepick needs two libraries: icepick and icepick-processor.

Clojars Project

Clojars Project

Gradle:

repositories {
  maven {url "https://clojars.org/repo/"}
}
dependencies {
  compile 'frankiesardo:icepick:{{latest-version}}'
  provided 'frankiesardo:icepick-processor:{{latest-version}}'
}

Maven:

<repositories>
  <repository>
    <id>clojars</id>
    <url>https://clojars.org/repo/</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <releases>
      <enabled>true</enabled>
    </releases>
  </repository>
</repositories>
<dependencies>
  <dependency>
    <groupId>frankiesardo</groupId>
    <artifactId>icepick</artifactId>
    <version>{{latest-version}}</version>
  </dependency>
  <dependency>
    <groupId>frankiesardo</groupId>
    <artifactId>icepick-processor</artifactId>
    <version>{{latest-version}}</version>
    <optional>true</optional>
  </dependency>
</dependencies>

Project Statistics

Sourcerank 11
Repository Size 923 KB
Stars 3,645
Forks 203
Watchers 99
Open issues 20
Dependencies 0
Contributors 10
Tags 13
Created
Last updated
Last pushed

Top Contributors See all

Frankie Sardo Maxim Naumov Chris Horner Artur Dryomov Chris Day Igor Ganapolsky Paul Woitaschek Kevin McMahon pushbit Justin Hall

Packages Referencing this Repo

com.github.frankiesardo/icepick-parent
Android Instance State made easy
Latest release 3.1.0 - Updated - 3.65K stars
com.github.frankiesardo/icepick
FIXME: write description
Latest release 3.0.0-SNAPSHOT - Published - 3.65K stars
com.github.frankiesardo:icepick-processor
Android Bundle save and restore instance state made easy
Latest release 2.3.6 - Updated - 3.65K stars
com.github.frankiesardo:icepick
Android Bundle save and restore instance state made easy
Latest release 2.3.6 - Updated - 3.65K stars

Recent Tags See all

v3.1.0 July 23, 2015
v3.0.2 March 12, 2015
v3.0.1 March 04, 2015
3.0.0 February 15, 2015
v2.3.6 June 19, 2014
v2.3.5 March 02, 2014
v2.3.3 February 28, 2014
v2.3.1 February 05, 2014
v2.3 January 23, 2014
v2.2.1 January 12, 2014
v2.2 January 08, 2014
v2.1 October 13, 2013
v2.0 August 04, 2013

Interesting Forks See all

johncarl81/icepick
Android Instance State made easy
Java - Apache-2.0 - Last pushed - 4 stars
dreamsaway/icepick
Android Instance State made easy
Clojure - Updated - 1 stars
vsoft-phuong/icepick
Android Instance State made easy
Clojure - Updated - 1 stars

Something wrong with this page? Make a suggestion

Last synced: 2016-11-24 15:55:47 UTC

Login to resync this repository