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;
public class XmlChangelogUtils {
private static final String TAG = "XmlChangelogUtils";
private static final String ns = null;
public static Spanned[] parse(Context context) {
try {
XmlResourceParser parser = context.getResources().getXml(R.xml.changelog);
parser.next();
parser.nextTag();
return readChangelog(parser);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static Spanned[] readChangelog(XmlPullParser parser) throws XmlPullParserException, IOException {
List items = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "changelog");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if ("version".equals(name)) {
items.add(readVersion(parser));
} else {
skip(parser);
}
}
return (Spanned[]) items.toArray(new Spanned[items.size()]);
}
private static Spanned readVersion(XmlPullParser parser) throws XmlPullParserException, IOException {
StringBuilder versionInfo = new StringBuilder();
parser.require(XmlPullParser.START_TAG, ns, "version");
versionInfo.append(readVersionNumber(parser));
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if ("text".equals(name)) {
versionInfo.append(readVersionText(parser));
} else {
skip(parser);
}
}
return Html.fromHtml(versionInfo.toString());
}
private static String readVersionNumber(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "version");
String versionNumber = parser.getAttributeValue(null, "name");
String description = parser.getAttributeValue(null, "description");
String version = "<b><u>Version " + versionNumber + ":</b></u>";
if (description != null) {
version += " " + description;
}
version += "<br/><br/>";
return version;
}
private static String readVersionText(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "text");
String text = "\t• " + readText(parser) + "<br/>";
parser.require(XmlPullParser.END_TAG, ns, "text");
return text;
}
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;
}
}
}
}