package com.marverenic.music.model.playlistrules; import android.support.annotation.StringRes; import android.text.InputType; import com.marverenic.music.R; import com.marverenic.music.model.playlistrules.AutoPlaylistRule.Field; import com.marverenic.music.model.playlistrules.AutoPlaylistRule.Match; import java.util.Arrays; import java.util.List; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.CONTAINS; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.DATE_ADDED; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.DATE_PLAYED; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.EQUALS; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.GREATER_THAN; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.ID; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.LESS_THAN; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.NAME; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.NOT_EQUALS; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.PLAY_COUNT; import static com.marverenic.music.model.playlistrules.AutoPlaylistRule.SKIP_COUNT; public enum RuleEnumeration { IS(R.string.rule_is, ID, EQUALS), ISNT(R.string.rule_isnt, ID, NOT_EQUALS), NAME_IS(R.string.rule_name_is, NAME, EQUALS), NAME_ISNT(R.string.rule_name_isnt, NAME, NOT_EQUALS), NAME_CONTAINS(R.string.rule_name_contains, NAME, CONTAINS), NAME_DOESNT_CONTAIN(R.string.rule_name_doesnt_contain, NAME, CONTAINS), PLAY_COUNT_LESS_THAN(R.string.rule_play_count_lt, PLAY_COUNT, LESS_THAN), PLAY_COUNT_EQUALS(R.string.rule_play_count_eq, PLAY_COUNT, EQUALS), PLAY_COUNT_GREATER_THAN(R.string.rule_play_count_gt, PLAY_COUNT, GREATER_THAN), SKIP_COUNT_LESS_THAN(R.string.rule_skip_count_lt, SKIP_COUNT, LESS_THAN), SKIP_COUNT_EQUALS(R.string.rule_skip_count_eq, SKIP_COUNT, EQUALS), SKIP_COUNT_GREATER_THAN(R.string.rule_skip_count_gt, SKIP_COUNT, GREATER_THAN), ADDED_BEFORE(R.string.rule_added_before, DATE_ADDED, LESS_THAN), ADDED_ON(R.string.rule_added_on, DATE_ADDED, EQUALS), ADDED_AFTER(R.string.rule_added_after, DATE_ADDED, GREATER_THAN), PLAYED_BEFORE(R.string.rule_played_before, DATE_PLAYED, LESS_THAN), PLAYED_ON(R.string.rule_played_on, DATE_PLAYED, EQUALS), PLAYER_AFTER(R.string.rule_played_after, DATE_PLAYED, GREATER_THAN); private static final int NO_INPUT_TYPE = InputType.TYPE_NULL; private static final int TEXT_INPUT_TYPE = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT; private static final int NUMBER_INPUT_TYPE = InputType.TYPE_CLASS_NUMBER; private static final int DATE_INPUT_TYPE = InputType.TYPE_CLASS_DATETIME; @StringRes private int mNameRes; @Field private int mField; @Match private int mMatch; private int mInputType; static { IS.mInputType = NO_INPUT_TYPE; ISNT.mInputType = NO_INPUT_TYPE; NAME_IS.mInputType = TEXT_INPUT_TYPE; NAME_ISNT.mInputType = TEXT_INPUT_TYPE; NAME_CONTAINS.mInputType = TEXT_INPUT_TYPE; NAME_DOESNT_CONTAIN.mInputType = TEXT_INPUT_TYPE; PLAY_COUNT_LESS_THAN.mInputType = NUMBER_INPUT_TYPE; PLAY_COUNT_EQUALS.mInputType = NUMBER_INPUT_TYPE; PLAY_COUNT_GREATER_THAN.mInputType = NUMBER_INPUT_TYPE; SKIP_COUNT_LESS_THAN.mInputType = NUMBER_INPUT_TYPE; SKIP_COUNT_EQUALS.mInputType = NUMBER_INPUT_TYPE; SKIP_COUNT_GREATER_THAN.mInputType = NUMBER_INPUT_TYPE; ADDED_BEFORE.mInputType = DATE_INPUT_TYPE; ADDED_ON.mInputType = DATE_INPUT_TYPE; ADDED_AFTER.mInputType = DATE_INPUT_TYPE; PLAYED_BEFORE.mInputType = DATE_INPUT_TYPE; PLAYED_ON.mInputType = DATE_INPUT_TYPE; PLAYER_AFTER.mInputType = DATE_INPUT_TYPE; } RuleEnumeration(@StringRes int nameRes, @Field int field, @Match int match) { mNameRes = nameRes; mField = field; mMatch = match; } @StringRes public int getNameRes() { return mNameRes; } @Field public int getField() { return mField; } @Match public int getMatch() { return mMatch; } public int getInputType() { return mInputType; } public long getId() { return (long) getField() << 32 | getMatch(); } public static RuleEnumeration from(@Field int field, @Match int match) { for (RuleEnumeration rule : values()) { if (rule.getField() == field && rule.getMatch() == match) { return rule; } } return null; } public static List<RuleEnumeration> getAllSongRules() { return Arrays.asList(values()); } public static List<RuleEnumeration> getAllArtistRules() { return Arrays.asList(IS, ISNT, NAME_IS, NAME_ISNT, NAME_CONTAINS, NAME_DOESNT_CONTAIN); } public static List<RuleEnumeration> getAllAlbumRules() { return Arrays.asList(IS, ISNT, NAME_IS, NAME_ISNT, NAME_CONTAINS, NAME_DOESNT_CONTAIN); } public static List<RuleEnumeration> getAllPlaylistRules() { return Arrays.asList(IS, ISNT, NAME_IS, NAME_ISNT, NAME_CONTAINS, NAME_DOESNT_CONTAIN); } public static List<RuleEnumeration> getAllGenreRules() { return Arrays.asList(IS, ISNT, NAME_IS, NAME_ISNT, NAME_CONTAINS, NAME_DOESNT_CONTAIN); } }