// Path: libeasyemoji/src/main/java/org/nicky/libeasyemoji/emoji/interfaces/PageEmojiStyle.java
// public interface PageEmojiStyle<T extends Parcelable> extends Parcelable{
//     int getExceptItemCount();
//     void setData(List<T> data);
// }
// 
// Path: libeasyemoji/src/main/java/org/nicky/libeasyemoji/emojicon/emoji/Emojicon.java
// public class Emojicon implements Parcelable {
//     @IntDef({DynamicDrawableSpan.ALIGN_BASELINE, DynamicDrawableSpan.ALIGN_BOTTOM})
//     public @interface Alignment {
//     }
// 
//     @IntDef({TYPE_UNDEFINED, TYPE_PEOPLE, TYPE_NATURE, TYPE_OBJECTS, TYPE_PLACES, TYPE_SYMBOLS})
//     @Retention(RetentionPolicy.SOURCE)
//     public @interface Type {
//     }
// 
//     public static final int TYPE_UNDEFINED = 0;
//     public static final int TYPE_PEOPLE = 1;
//     public static final int TYPE_NATURE = 2;
//     public static final int TYPE_OBJECTS = 3;
//     public static final int TYPE_PLACES = 4;
//     public static final int TYPE_SYMBOLS = 5;
// 
//     public static Emojicon[] getEmojicons(@Type int type) {
//         switch (type) {
//             case TYPE_PEOPLE:
//                 return People.DATA;
//             case TYPE_NATURE:
//                 return Nature.DATA;
//             case TYPE_OBJECTS:
//                 return Objects.DATA;
//             case TYPE_PLACES:
//                 return Places.DATA;
//             case TYPE_SYMBOLS:
//                 return Symbols.DATA;
//         }
//         throw new IllegalArgumentException("Invalid emojicon type: " + type);
//     }
// 
//     public static final Creator<Emojicon> CREATOR = new Creator<Emojicon>() {
//         @Override
//         public Emojicon createFromParcel(Parcel in) {
//             return new Emojicon(in);
//         }
// 
//         @Override
//         public Emojicon[] newArray(int size) {
//             return new Emojicon[size];
//         }
//     };
// 
//     private int icon;
// 
//     private char value;
// 
//     private String emoji;
// 
//     public Emojicon(int icon, char value, String emoji) {
//         this.icon = icon;
//         this.value = value;
//         this.emoji = emoji;
//     }
// 
//     public Emojicon(Parcel in) {
//         this.icon = in.readInt();
//         this.value = (char) in.readInt();
//         this.emoji = in.readString();
//     }
// 
//     private Emojicon() {
//     }
// 
//     public Emojicon(String emoji) {
//         this.emoji = emoji;
//     }
// 
//     public static Emojicon fromResource(int icon, int value) {
//         Emojicon emoji = new Emojicon();
//         emoji.icon = icon;
//         emoji.value = (char) value;
//         return emoji;
//     }
// 
//     public static Emojicon fromCodePoint(int codePoint) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = newString(codePoint);
//         return emoji;
//     }
// 
//     public static Emojicon fromChar(char ch) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = Character.toString(ch);
//         return emoji;
//     }
// 
//     public static Emojicon fromChars(String chars) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = chars;
//         return emoji;
//     }
// 
//     public static final String newString(int codePoint) {
//         if (Character.charCount(codePoint) == 1) {
//             return String.valueOf(codePoint);
//         } else {
//             return new String(Character.toChars(codePoint));
//         }
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(icon);
//         dest.writeInt(value);
//         dest.writeString(emoji);
//     }
// 
//     public char getValue() {
//         return value;
//     }
// 
//     public int getIcon() {
//         return icon;
//     }
// 
//     public String getEmoji() {
//         return emoji;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         return o instanceof Emojicon && emoji.equals(((Emojicon) o).emoji);
//     }
// 
//     @Override
//     public int hashCode() {
//         return emoji.hashCode();
//     }
// 
// }


import android.os.Parcel;
import org.nicky.libeasyemoji.emoji.interfaces.PageEmojiStyle;
import org.nicky.libeasyemoji.emojicon.emoji.Emojicon;
import java.util.List;
package org.nicky.easyemoji.lovedEmoji;




/**
 * Created by nickyang on 2017/4/1.
 */

public class LovedPageEmojiStyle<T extends Emoji> implements PageEmojiStyle<T> {
    private List<T> list;
    private boolean hasBackspace = true;

    public LovedPageEmojiStyle(){}

    public LovedPageEmojiStyle(Parcel in) {
        hasBackspace = in.readByte()!=0;
        in.readTypedList(list, (Creator<T>) Emoji.CREATOR);
    }

    public int getColumn(){
        return 7;
    }

    public int getRow(){
        return 4;
    }

    public boolean hasBackspace(){
        return hasBackspace;
    }

    @Override
    public int getExceptItemCount() {
        return hasBackspace?(getColumn()*getRow()-1):(getColumn()*getRow());
    }

    @Override
// Path: libeasyemoji/src/main/java/org/nicky/libeasyemoji/emoji/interfaces/PageEmojiStyle.java
// public interface PageEmojiStyle<T extends Parcelable> extends Parcelable{
//     int getExceptItemCount();
//     void setData(List<T> data);
// }
// 
// Path: libeasyemoji/src/main/java/org/nicky/libeasyemoji/emojicon/emoji/Emojicon.java
// public class Emojicon implements Parcelable {
//     @IntDef({DynamicDrawableSpan.ALIGN_BASELINE, DynamicDrawableSpan.ALIGN_BOTTOM})
//     public @interface Alignment {
//     }
// 
//     @IntDef({TYPE_UNDEFINED, TYPE_PEOPLE, TYPE_NATURE, TYPE_OBJECTS, TYPE_PLACES, TYPE_SYMBOLS})
//     @Retention(RetentionPolicy.SOURCE)
//     public @interface Type {
//     }
// 
//     public static final int TYPE_UNDEFINED = 0;
//     public static final int TYPE_PEOPLE = 1;
//     public static final int TYPE_NATURE = 2;
//     public static final int TYPE_OBJECTS = 3;
//     public static final int TYPE_PLACES = 4;
//     public static final int TYPE_SYMBOLS = 5;
// 
//     public static Emojicon[] getEmojicons(@Type int type) {
//         switch (type) {
//             case TYPE_PEOPLE:
//                 return People.DATA;
//             case TYPE_NATURE:
//                 return Nature.DATA;
//             case TYPE_OBJECTS:
//                 return Objects.DATA;
//             case TYPE_PLACES:
//                 return Places.DATA;
//             case TYPE_SYMBOLS:
//                 return Symbols.DATA;
//         }
//         throw new IllegalArgumentException("Invalid emojicon type: " + type);
//     }
// 
//     public static final Creator<Emojicon> CREATOR = new Creator<Emojicon>() {
//         @Override
//         public Emojicon createFromParcel(Parcel in) {
//             return new Emojicon(in);
//         }
// 
//         @Override
//         public Emojicon[] newArray(int size) {
//             return new Emojicon[size];
//         }
//     };
// 
//     private int icon;
// 
//     private char value;
// 
//     private String emoji;
// 
//     public Emojicon(int icon, char value, String emoji) {
//         this.icon = icon;
//         this.value = value;
//         this.emoji = emoji;
//     }
// 
//     public Emojicon(Parcel in) {
//         this.icon = in.readInt();
//         this.value = (char) in.readInt();
//         this.emoji = in.readString();
//     }
// 
//     private Emojicon() {
//     }
// 
//     public Emojicon(String emoji) {
//         this.emoji = emoji;
//     }
// 
//     public static Emojicon fromResource(int icon, int value) {
//         Emojicon emoji = new Emojicon();
//         emoji.icon = icon;
//         emoji.value = (char) value;
//         return emoji;
//     }
// 
//     public static Emojicon fromCodePoint(int codePoint) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = newString(codePoint);
//         return emoji;
//     }
// 
//     public static Emojicon fromChar(char ch) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = Character.toString(ch);
//         return emoji;
//     }
// 
//     public static Emojicon fromChars(String chars) {
//         Emojicon emoji = new Emojicon();
//         emoji.emoji = chars;
//         return emoji;
//     }
// 
//     public static final String newString(int codePoint) {
//         if (Character.charCount(codePoint) == 1) {
//             return String.valueOf(codePoint);
//         } else {
//             return new String(Character.toChars(codePoint));
//         }
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeInt(icon);
//         dest.writeInt(value);
//         dest.writeString(emoji);
//     }
// 
//     public char getValue() {
//         return value;
//     }
// 
//     public int getIcon() {
//         return icon;
//     }
// 
//     public String getEmoji() {
//         return emoji;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         return o instanceof Emojicon && emoji.equals(((Emojicon) o).emoji);
//     }
// 
//     @Override
//     public int hashCode() {
//         return emoji.hashCode();
//     }
// 
// }


// Path: app/src/main/java/org/nicky/easyemoji/lovedEmoji/LovedPageEmojiStyle.java
import android.os.Parcel;
import org.nicky.libeasyemoji.emoji.interfaces.PageEmojiStyle;
import org.nicky.libeasyemoji.emojicon.emoji.Emojicon;
import java.util.List;

package org.nicky.easyemoji.lovedEmoji;




/**
 * Created by nickyang on 2017/4/1.
 */

public class LovedPageEmojiStyle<T extends Emoji> implements PageEmojiStyle<T> {
    private List<T> list;
    private boolean hasBackspace = true;

    public LovedPageEmojiStyle(){}

    public LovedPageEmojiStyle(Parcel in) {
        hasBackspace = in.readByte()!=0;
        in.readTypedList(list, (Creator<T>) Emoji.CREATOR);
    }

    public int getColumn(){
        return 7;
    }

    public int getRow(){
        return 4;
    }

    public boolean hasBackspace(){
        return hasBackspace;
    }

    @Override
    public int getExceptItemCount() {
        return hasBackspace?(getColumn()*getRow()-1):(getColumn()*getRow());
    }

    @Override
    public void setData(List<T> data) {