package xyz.klinker.blur.addons.utils;
import android.content.Context;
import android.content.res.XmlResourceParser;
import android.text.Html;
import android.text.Spanned;
import xyz.klinker.blur.R;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by luke on 7/30/14.
*/
public class XmlFaqUtils {
private static final String TAG = "XmlFaqUtils";
private static final String ns = null;
private static List items;
public static final class FAQ {
public Spanned question;
public Spanned text;
}
public static FAQ[] parse(Context context) {
try {
XmlResourceParser parser = context.getResources().getXml(R.xml.faq);
parser.next();
parser.nextTag();
return readFaq(parser);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static FAQ[] readFaq(XmlPullParser parser) throws XmlPullParserException, IOException {
items = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "faq");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if ("question".equals(name)) {
items.add(readItem(parser));
} else {
skip(parser);
}
}
return (FAQ[]) items.toArray(new FAQ[items.size()]);
}
private static FAQ readItem(XmlPullParser parser) throws XmlPullParserException, IOException {
FAQ faq = new FAQ();
parser.require(XmlPullParser.START_TAG, ns, "question");
faq.question = Html.fromHtml(readFaqQuestion(parser));
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if ("text".equals(name)) {
faq.text = Html.fromHtml(readFaqText(parser));
} else {
skip(parser);
}
}
return faq;
}
private static String readFaqQuestion(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "question");
String faqName = parser.getAttributeValue(null, "name");
String description = parser.getAttributeValue(null, "description");
String question = (items.size() + 1) + ".) <u><b>" + faqName + "</u></b>";
if (description != null) {
question += "<br/>(" + description + ")";
}
return question;
}
private static String readFaqText(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "text");
String text = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "text");
return text.replaceAll("\n", "<br/>");
}
private static String readText(XmlPullParser parser) throws XmlPullParserException, IOException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private static void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
}