package xyz.klinker.blur.addons.utils;
import android.content.Context;
import android.content.res.XmlResourceParser;
import android.text.Html;
import android.text.Spanned;
import android.util.Log;
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 lucasklinker on 8/7/14.
*/
public class XmlCreditsUtils {
private static final String TAG = "XmlCreditsUtils";
private static final String ns = null;
public static Spanned[] parse(Context context) {
try {
XmlResourceParser parser = context.getResources().getXml(R.xml.credits);
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, "credits");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.v("launcher_credits", name);
if ("source".equals(name)) {
items.add(readSource(parser));
} else if ("library".equals(name)) {
items.add(readLibrary(parser));
} else {
skip(parser);
}
int next = parser.next();
}
return (Spanned[]) items.toArray(new Spanned[items.size()]);
}
private static Spanned readSource(XmlPullParser parser) throws XmlPullParserException, IOException {
StringBuilder versionInfo = new StringBuilder();
parser.require(XmlPullParser.START_TAG, ns, "source");
versionInfo.append(readSourceInfo(parser));
return Html.fromHtml(versionInfo.toString());
}
private static Spanned readLibrary(XmlPullParser parser) throws XmlPullParserException, IOException {
StringBuilder versionInfo = new StringBuilder();
parser.require(XmlPullParser.START_TAG, ns, "library");
versionInfo.append(readLibraryInfo(parser));
return Html.fromHtml(versionInfo.toString());
}
private static String readLibraryInfo(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "library");
String userName = parser.getAttributeValue(null, "user_name");
String libName = parser.getAttributeValue(null, "lib_name");
String license = parser.getAttributeValue(null, "license");
String version = "• <b>" + userName + ":</b>";
if (libName != null) {
version += " " + libName;
}
if (license != null) {
version += "<br/>\t\t\t• " + license;
};
return version;
}
private static String readSourceInfo(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "source");
String sourceName = parser.getAttributeValue(null, "name");
String sourceDescription = parser.getAttributeValue(null, "description");
String version = "• <b>" + sourceName + ":</b>";
if (sourceDescription != null) {
version += " " + sourceDescription;
};
return version;
}
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;
}
}
}
}