1cfd74d65d832137e20e193c960802afba73b5d38sm/* 23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project 3cfd74d65d832137e20e193c960802afba73b5d38sm * 4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License"); 5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License. 6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at 7cfd74d65d832137e20e193c960802afba73b5d38sm * 8cfd74d65d832137e20e193c960802afba73b5d38sm * http://www.apache.org/licenses/LICENSE-2.0 9cfd74d65d832137e20e193c960802afba73b5d38sm * 10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software 11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS, 12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and 14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License. 15cfd74d65d832137e20e193c960802afba73b5d38sm */ 16cfd74d65d832137e20e193c960802afba73b5d38sm 17cfd74d65d832137e20e193c960802afba73b5d38sm 18cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland; 19cfd74d65d832137e20e193c960802afba73b5d38sm 20cfd74d65d832137e20e193c960802afba73b5d38smimport java.util.ArrayList; 21cfd74d65d832137e20e193c960802afba73b5d38sm 22cfd74d65d832137e20e193c960802afba73b5d38smimport org.xmlpull.v1.XmlPullParser; 23cfd74d65d832137e20e193c960802afba73b5d38sm 24cfd74d65d832137e20e193c960802afba73b5d38smimport android.content.Context; 25cfd74d65d832137e20e193c960802afba73b5d38smimport android.content.res.XmlResourceParser; 26cfd74d65d832137e20e193c960802afba73b5d38smimport android.text.TextUtils; 27cfd74d65d832137e20e193c960802afba73b5d38sm 28cfd74d65d832137e20e193c960802afba73b5d38smpublic final class ConversationUtils { 29cfd74d65d832137e20e193c960802afba73b5d38sm private static final int MAX_CHARACTERS_PER_PAGE = 250; 30cfd74d65d832137e20e193c960802afba73b5d38sm 31cfd74d65d832137e20e193c960802afba73b5d38sm public static class ConversationPage { 32cfd74d65d832137e20e193c960802afba73b5d38sm public int imageResource; 33cfd74d65d832137e20e193c960802afba73b5d38sm public CharSequence text; 34cfd74d65d832137e20e193c960802afba73b5d38sm public String title; 35cfd74d65d832137e20e193c960802afba73b5d38sm } 36cfd74d65d832137e20e193c960802afba73b5d38sm 37cfd74d65d832137e20e193c960802afba73b5d38sm public static class Conversation { 38cfd74d65d832137e20e193c960802afba73b5d38sm public ArrayList<ConversationPage> pages = new ArrayList<ConversationPage>(); 39cfd74d65d832137e20e193c960802afba73b5d38sm public boolean splittingComplete; 40cfd74d65d832137e20e193c960802afba73b5d38sm } 41cfd74d65d832137e20e193c960802afba73b5d38sm 42cfd74d65d832137e20e193c960802afba73b5d38sm public final static ArrayList<Conversation> loadDialog(int resource, Context context) { 43cfd74d65d832137e20e193c960802afba73b5d38sm XmlResourceParser parser = context.getResources().getXml(resource); 44cfd74d65d832137e20e193c960802afba73b5d38sm 45cfd74d65d832137e20e193c960802afba73b5d38sm ArrayList<Conversation> dialog = null; 46cfd74d65d832137e20e193c960802afba73b5d38sm Conversation currentConversation = null; 47cfd74d65d832137e20e193c960802afba73b5d38sm 48cfd74d65d832137e20e193c960802afba73b5d38sm try { 49cfd74d65d832137e20e193c960802afba73b5d38sm int eventType = parser.getEventType(); 50cfd74d65d832137e20e193c960802afba73b5d38sm while (eventType != XmlPullParser.END_DOCUMENT) { 51cfd74d65d832137e20e193c960802afba73b5d38sm if (eventType == XmlPullParser.START_TAG) { 52cfd74d65d832137e20e193c960802afba73b5d38sm if (parser.getName().equals("conversation")) { 53cfd74d65d832137e20e193c960802afba73b5d38sm if (dialog == null) { 54cfd74d65d832137e20e193c960802afba73b5d38sm dialog = new ArrayList<Conversation>(); 55cfd74d65d832137e20e193c960802afba73b5d38sm } 56cfd74d65d832137e20e193c960802afba73b5d38sm currentConversation = new Conversation(); 57cfd74d65d832137e20e193c960802afba73b5d38sm currentConversation.splittingComplete = false; 58cfd74d65d832137e20e193c960802afba73b5d38sm dialog.add(currentConversation); 59cfd74d65d832137e20e193c960802afba73b5d38sm } else if (parser.getName().equals("page")) { 60cfd74d65d832137e20e193c960802afba73b5d38sm ConversationPage page = new ConversationPage(); 61cfd74d65d832137e20e193c960802afba73b5d38sm for (int i=0; i < parser.getAttributeCount(); i++) { 62cfd74d65d832137e20e193c960802afba73b5d38sm final int value = parser.getAttributeResourceValue(i, -1); 63cfd74d65d832137e20e193c960802afba73b5d38sm if (value != -1) { 64cfd74d65d832137e20e193c960802afba73b5d38sm if (parser.getAttributeName(i).equals("image")) { 65cfd74d65d832137e20e193c960802afba73b5d38sm page.imageResource = value; 66cfd74d65d832137e20e193c960802afba73b5d38sm } 67cfd74d65d832137e20e193c960802afba73b5d38sm if (parser.getAttributeName(i).equals("text")) { 68cfd74d65d832137e20e193c960802afba73b5d38sm page.text = context.getText(value); 69cfd74d65d832137e20e193c960802afba73b5d38sm } 70cfd74d65d832137e20e193c960802afba73b5d38sm if (parser.getAttributeName(i).equals("title")) { 71cfd74d65d832137e20e193c960802afba73b5d38sm page.title = context.getString(value); 72cfd74d65d832137e20e193c960802afba73b5d38sm } 73cfd74d65d832137e20e193c960802afba73b5d38sm } 74cfd74d65d832137e20e193c960802afba73b5d38sm } 75cfd74d65d832137e20e193c960802afba73b5d38sm currentConversation.pages.add(page); 76cfd74d65d832137e20e193c960802afba73b5d38sm } 77cfd74d65d832137e20e193c960802afba73b5d38sm } 78cfd74d65d832137e20e193c960802afba73b5d38sm eventType = parser.next(); 79cfd74d65d832137e20e193c960802afba73b5d38sm } 80cfd74d65d832137e20e193c960802afba73b5d38sm } catch(Exception e) { 81cfd74d65d832137e20e193c960802afba73b5d38sm DebugLog.e("LoadDialog", e.getStackTrace().toString()); 82cfd74d65d832137e20e193c960802afba73b5d38sm } finally { 83cfd74d65d832137e20e193c960802afba73b5d38sm parser.close(); 84cfd74d65d832137e20e193c960802afba73b5d38sm } 85cfd74d65d832137e20e193c960802afba73b5d38sm 86cfd74d65d832137e20e193c960802afba73b5d38sm return dialog; 87cfd74d65d832137e20e193c960802afba73b5d38sm } 88cfd74d65d832137e20e193c960802afba73b5d38sm 89cfd74d65d832137e20e193c960802afba73b5d38sm} 90