+public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
+
+ /**
+ * Enumeration for the possible states of a {@link Sone}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+ public enum SoneStatus {
+
+ /** The Sone is unknown, i.e. not yet downloaded. */
+ unknown,
+
+ /** The Sone is idle, i.e. not being downloaded or inserted. */
+ idle,
+
+ /** The Sone is currently being inserted. */
+ inserting,
+
+ /** The Sone is currently being downloaded. */
+ downloading,
+ }
+
+ /**
+ * The possible values for the “show custom avatars” option.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+ public static enum ShowCustomAvatars {
+
+ /** Never show custom avatars. */
+ NEVER,
+
+ /** Only show custom avatars of followed Sones. */
+ FOLLOWED,
+
+ /** Only show custom avatars of Sones you manually trust. */
+ MANUALLY_TRUSTED,
+
+ /** Only show custom avatars of automatically trusted Sones. */
+ TRUSTED,
+
+ /** Always show custom avatars. */
+ ALWAYS,
+
+ }
+
+ /** comparator that sorts Sones by their nice name. */
+ public static final Comparator<Sone> NICE_NAME_COMPARATOR = new Comparator<Sone>() {
+
+ @Override
+ public int compare(Sone leftSone, Sone rightSone) {
+ return ComparisonChain.start()
+ .compare(getNiceName(leftSone).toLowerCase(), getNiceName(rightSone).toLowerCase())
+ .compare(leftSone.getId(), rightSone.getId())
+ .result();
+ }
+
+ };
+
+ public static final Function<Sone, String> TO_NICE_NAME = new Function<Sone, String>() {
+ @Override
+ public String apply(Sone sone) {
+ return (sone == null) ? null : getNiceName(sone);
+ }
+ };
+
+ /** Comparator that sorts Sones by last activity (least recent active first). */
+ public static final Comparator<Sone> LAST_ACTIVITY_COMPARATOR = new Comparator<Sone>() {