All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ioc.commons.impl.android.common.util.SaveInstanceStateHelper Maven / Gradle / Ivy

package org.ioc.commons.impl.android.common.util;

import java.io.Serializable;

import org.ioc.commons.ui.HasLoader;
import org.ioc.commons.ui.HasPendingOperationsLoader;
import org.ioc.commons.ui.HasValue;
import org.ioc.commons.ui.HasVisibility;
import org.ioc.commons.utils.Format;

import android.os.Bundle;

public class SaveInstanceStateHelper {

	private Bundle outState;
	private String keyPrefix;
	
	public class Save {
		private int idx;

		private Save() {
			
		}
		
		public Save visible(HasVisibility... vs) {

			for (HasVisibility v : vs) {
				outState.putBoolean(Format.substitute("{0}_{1}", keyPrefix, (idx++)), v.isVisible());
			}

			return this;
		}

		public Save loader(HasLoader... elms) {

			for (HasLoader elm : elms) {
				outState.putBoolean(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.isLoading());
			}

			return this;
		}

		public Save loader(HasPendingOperationsLoader... elms) {

			for (HasPendingOperationsLoader elm : elms) {
				outState.putInt(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.getPendingOpCount());
			}

			return this;
		}


		public  Save value(HasValue... elms) {

			for (HasValue elm : elms) {
				outState.putSerializable(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.getValue());
			}

			return this;
		}


	}
	
	public class Restore {
		private int idx;

		private Restore() {
			
		}
		
		public Restore visible(HasVisibility... elms) {

			for (HasVisibility elm : elms) {
				elm.setVisible(outState.getBoolean(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.isVisible()));
			}

			return this;
		}

		public Restore loader(HasLoader... elms) {

			for (HasLoader elm : elms) {
				elm.setLoading(outState.getBoolean(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.isLoading()));
			}

			return this;
		}

		public Restore loader(HasPendingOperationsLoader... elms) {

			for (HasPendingOperationsLoader elm : elms) {
				int pendingOpCount = outState.getInt(Format.substitute("{0}_{1}", keyPrefix, (idx++)), elm.getPendingOpCount());
				for(int i = elm.getPendingOpCount() ; i < pendingOpCount;i++) {
					elm.operationBeginning();
				}
				for(int i = elm.getPendingOpCount() ; i > pendingOpCount;i--) {
					elm.operationFinished();
				}
			}

			return this;
		}

		@SuppressWarnings("unchecked")
		public  Restore value(HasValue... elms) {

			for (HasValue elm : elms) {
				elm.setValue((S)outState.getSerializable(Format.substitute("{0}_{1}", keyPrefix, (idx++))));
			}

			return this;
		}


	}
	
	public Save save() {
		return new Save();
	}

	public Restore restore() {
		return new Restore();
	}

	public SaveInstanceStateHelper(String keyPrefix, Bundle outState) {
		this.outState = outState;
		this.keyPrefix = keyPrefix;
	}

}