You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.5 KiB
149 lines
4.5 KiB
/* |
|
* Copyright 2010-2018 Eric Kok et al. |
|
* |
|
* Transdroid is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation, either version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* Transdroid is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with Transdroid. If not, see <http://www.gnu.org/licenses/>. |
|
*/ |
|
package org.transdroid.core.gui.navigation; |
|
|
|
import android.os.Parcel; |
|
import android.os.Parcelable; |
|
import android.text.TextUtils; |
|
|
|
import org.transdroid.core.gui.lists.SimpleListItem; |
|
import org.transdroid.daemon.Torrent; |
|
|
|
import java.util.ArrayList; |
|
import java.util.Collections; |
|
import java.util.List; |
|
|
|
/** |
|
* Represents some label that is active or available on the server. |
|
* |
|
* @author Eric Kok |
|
*/ |
|
public class Label implements SimpleListItem, NavigationFilter, Comparable<Label> { |
|
|
|
private static String unnamedLabelText = null; |
|
|
|
private final boolean isEmptyLabel; |
|
private final String name; |
|
private final int count; |
|
|
|
private Label(String name, int count, boolean isEmptyLabel) { |
|
this.name = name; |
|
this.count = count; |
|
this.isEmptyLabel = isEmptyLabel; |
|
} |
|
|
|
public Label(org.transdroid.daemon.Label daemonLabel) { |
|
this(daemonLabel.getName(), daemonLabel.getCount(), false); |
|
} |
|
|
|
@Override |
|
public String getName() { |
|
if (TextUtils.isEmpty(this.name)) { |
|
return unnamedLabelText; |
|
} |
|
return this.name; |
|
} |
|
|
|
@Override |
|
public String getCode() { |
|
// Use the class name and label name to provide a unique navigation filter code |
|
return Label.class.getSimpleName() + "_" + name; |
|
} |
|
|
|
public int getCount() { |
|
return count; |
|
} |
|
|
|
public boolean isEmptyLabel() { |
|
return isEmptyLabel; |
|
} |
|
|
|
/** |
|
* Returns true if the torrent label's name matches this (selected) label's name, false otherwise |
|
* |
|
* @param torrent The torrent to match against this label |
|
* @param dormantAsInactive This property is ignored for label comparisons |
|
*/ |
|
@Override |
|
public boolean matches(Torrent torrent, boolean dormantAsInactive) { |
|
if (isEmptyLabel) { |
|
return TextUtils.isEmpty(torrent.getLabelName()); |
|
} |
|
return torrent.getLabelName() != null && torrent.getLabelName().equals(name); |
|
} |
|
|
|
@Override |
|
public int compareTo(Label another) { |
|
return this.name.compareTo(another.getName()); |
|
} |
|
|
|
/** |
|
* Converts a list of labels as retrieved from a server daemon into a list of labels that can be used in the UI as navigation filters. |
|
* |
|
* @param daemonLabels The raw list of labels as received from the server daemon adapter |
|
* @param unnamedLabel The text to show for the empty label (i.e. the unnamed label) |
|
* @return A label items that can be used in a filter list such as the action bar spinner |
|
*/ |
|
public static ArrayList<Label> convertToNavigationLabels(List<org.transdroid.daemon.Label> daemonLabels, String unnamedLabel) { |
|
if (daemonLabels == null) { |
|
return null; |
|
} |
|
ArrayList<Label> localLabels = new ArrayList<>(); |
|
unnamedLabelText = unnamedLabel; |
|
|
|
for (org.transdroid.daemon.Label label : daemonLabels) { |
|
if (label != null && !TextUtils.isEmpty(label.getName())) { |
|
localLabels.add(new Label(label)); |
|
} |
|
} |
|
Collections.sort(localLabels); |
|
|
|
// force unlabelled to be at the top |
|
localLabels.add(0, new Label(unnamedLabel, -1, true)); |
|
|
|
return localLabels; |
|
} |
|
|
|
private Label(Parcel in) { |
|
this.name = in.readString(); |
|
this.count = in.readInt(); |
|
this.isEmptyLabel = in.readInt() == 1; |
|
} |
|
|
|
public static final Parcelable.Creator<Label> CREATOR = new Parcelable.Creator<Label>() { |
|
public Label createFromParcel(Parcel in) { |
|
return new Label(in); |
|
} |
|
|
|
public Label[] newArray(int size) { |
|
return new Label[size]; |
|
} |
|
}; |
|
|
|
@Override |
|
public int describeContents() { |
|
return 0; |
|
} |
|
|
|
@Override |
|
public void writeToParcel(Parcel dest, int flags) { |
|
dest.writeString(name); |
|
dest.writeInt(count); |
|
dest.writeInt(isEmptyLabel ? 1 : 0); |
|
} |
|
|
|
}
|
|
|