package shts.jp.android.nogifeed.entities;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import shts.jp.android.nogifeed.R;
import shts.jp.android.nogifeed.common.Logger;
import shts.jp.android.nogifeed.utils.PreferencesUtils;
public class News implements Parcelable {
public static final String TAG = News.class.getSimpleName();
public final String iconType;
public final String date; // 2016.01.07
public final String url;
public final String title;
public News(String date, String iconType, String url, String title) {
this.iconType = iconType;
this.date = date;
this.url = url;
this.title = title;
}
public News(String date, int category, String url, String title) {
this.iconType = Type.from(category).iconTypeText;
this.date = date;
this.url = url;
this.title = title;
}
public enum Type {
MEDIA("icon1", 1) {
@Override
public int getIconResource() {
return R.drawable.ic_news_media;
}
@Override
public String getNewsUrl() {
return "http://www.nogizaka46.com/smph/news/media/";
}
},
EVENT("icon2", 2) {
@Override
public int getIconResource() {
return R.drawable.ic_news_event;
}
@Override
public String getNewsUrl() {
return "http://www.nogizaka46.com/smph/news/events/";
}
},
RELEASE("icon3", 3) {
@Override
public int getIconResource() {
return R.drawable.ic_news_release;
}
@Override
public String getNewsUrl() {
return "http://www.nogizaka46.com/smph/news/releases/";
}
},
OTHER("icon4", 4) {
@Override
public int getIconResource() {
return R.drawable.ic_news_other;
}
@Override
public String getNewsUrl() {
return "http://www.nogizaka46.com/smph/news/etc/";
}
},
;
private static final String URL_NEWS = "http://www.nogizaka46.com/smph/news/";
public final String iconTypeText;
private final int iconTypeNumber;
private Type(String iconTypeText, int iconTypeNumber) {
// Feedで利用
this.iconTypeText = iconTypeText;
// Notificationで利用
this.iconTypeNumber = iconTypeNumber;
}
public static Type from(String typeText) {
for (Type t : values()) {
if (t.iconTypeText.equals(typeText)) {
return t;
}
}
return null;
}
public static Type from(int typeText) {
for (Type t : values()) {
if (t.iconTypeNumber == typeText) {
return t;
}
}
return null;
}
public static String[] getTypeList(Context context) {
return context.getResources().getStringArray(R.array.news_category_array);
}
public static List<Type> getFilteredTypes(Context context) {
List<Type> filteredTypes = new ArrayList<>();
final boolean[] filter = getFilter(context);
for (int i = 0; i < filter.length; i++) {
if (filter[i]) {
filteredTypes.add(values()[i]);
}
}
return filteredTypes;
}
public static void setFilter(Context context, boolean[] filter) {
final int N = values().length;
for (int i = 0; i < N; i++) {
final String key = "pref_key_filter_" + values()[i].name();
PreferencesUtils.setBoolean(context, key, filter[i]);
}
}
public static boolean[] getFilter(Context context) {
boolean[] filter = new boolean[Type.values().length];
final int N = values().length;
for (int i = 0; i < N; i++) {
final String key = "pref_key_filter_" + values()[i].name();
filter[i] = PreferencesUtils.getBoolean(context, key, true);
}
return filter;
}
public abstract int getIconResource();
public abstract String getNewsUrl();
}
public Type getNewsType() {
return Type.from(iconType);
}
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy.MM.dd");
public Date getDate() {
try {
return SDF.parse(this.date);
} catch (ParseException e) {
Logger.e(TAG, "failed to parse date", e);
}
return null;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("date(").append(date).append(") ");
sb.append("iconType(").append(iconType).append(") ");
sb.append("url(").append(url).append(") ");
sb.append("title(").append(title).append(") ");
return sb.toString();
}
protected News(Parcel in) {
iconType = in.readString();
date = in.readString();
url = in.readString();
title = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(iconType);
dest.writeString(date);
dest.writeString(url);
dest.writeString(title);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<News> CREATOR = new Parcelable.Creator<News>() {
@Override
public News createFromParcel(Parcel in) {
return new News(in);
}
@Override
public News[] newArray(int size) {
return new News[size];
}
};
}