package com.example.flow_free; import android.content.Context; import android.content.res.AssetManager; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class PuzzleParser { public static Puzzle parsePuzzle(Context context, String filename) { AssetManager assetManager = context.getAssets(); try { InputStream inputStream = assetManager.open("puzzles/" + filename); XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); parser.setInput(inputStream, "UTF-8"); int size = -1; String name = filename.replace(".xml", ""); List pairs = new ArrayList<>(); int[] currentPair = new int[4]; int pointIndex = 0; int currentColorId=0; //test pour coleur int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { String tagName = parser.getName(); if (tagName.equals("puzzle")) { size = Integer.parseInt(parser.getAttributeValue(null, "size")); if (parser.getAttributeValue(null, "nom") != null) { name = parser.getAttributeValue(null, "nom"); } } else if (tagName.equals("point")) { int col = Integer.parseInt(parser.getAttributeValue(null, "colonne")); int row = Integer.parseInt(parser.getAttributeValue(null, "ligne")); currentPair[pointIndex * 2] = col; currentPair[pointIndex * 2 + 1] = row; pointIndex++; if (pointIndex == 2) { pairs.add(new int[]{currentPair[0], currentPair[1], currentPair[2], currentPair[3]}); currentColorId++; currentPair = new int[4]; pointIndex = 0; } } } eventType = parser.next(); } return new Puzzle(size, name, pairs); } catch (IOException | XmlPullParserException | NumberFormatException e) { e.printStackTrace(); return null; } } }