diff --git a/src/org/geometerplus/android/fbreader/api/ApiObject.java b/src/org/geometerplus/android/fbreader/api/ApiObject.java index c443e97c9..25aace0ed 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiObject.java +++ b/src/org/geometerplus/android/fbreader/api/ApiObject.java @@ -4,6 +4,9 @@ package org.geometerplus.android.fbreader.api; +import java.util.List; +import java.util.ArrayList; + import android.os.Parcel; import android.os.Parcelable; @@ -117,6 +120,14 @@ public abstract class ApiObject implements Parcelable { return new String(value); } + static List envelope(List values) { + final ArrayList objects = new ArrayList(values.size()); + for (java.lang.String v : values) { + objects.add(new String(v)); + } + return objects; + } + abstract protected int type(); public int describeContents() { diff --git a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java index b60707e32..7c52e65f6 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java +++ b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java @@ -22,6 +22,7 @@ package org.geometerplus.android.fbreader.api; import java.util.*; import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.config.ZLConfig; import org.geometerplus.zlibrary.text.view.*; @@ -104,8 +105,13 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A try { switch (method) { case GET_OPTION_GROUPS: + return ApiObject.envelope(getOptionGroups()); case GET_OPTION_NAMES: + return ApiObject.envelope(getOptionNames( + ((ApiObject.String)parameters[0]).Value + )); case GET_BOOK_TAGS: + return ApiObject.envelope(getBookTags()); default: return Collections.singletonList(unsupportedMethodError(method)); } @@ -137,18 +143,15 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A // preferences information public List getOptionGroups() { - // TODO: implement - return Collections.emptyList(); + return ZLConfig.Instance().listGroups(); } public List getOptionNames(String group) { - // TODO: implement - return Collections.emptyList(); + return ZLConfig.Instance().listNames(group); } public String getOptionValue(String group, String name) { - // TODO: implement - return null; + return ZLConfig.Instance().getValue(group, name, null); } public void setOptionValue(String group, String name, String value) { diff --git a/src/org/geometerplus/zlibrary/core/config/ZLConfig.java b/src/org/geometerplus/zlibrary/core/config/ZLConfig.java index 1f7b6fb13..2ba5c6e55 100644 --- a/src/org/geometerplus/zlibrary/core/config/ZLConfig.java +++ b/src/org/geometerplus/zlibrary/core/config/ZLConfig.java @@ -19,6 +19,8 @@ package org.geometerplus.zlibrary.core.config; +import java.util.List; + public abstract class ZLConfig { public static ZLConfig Instance() { return ourInstance; @@ -30,6 +32,9 @@ public abstract class ZLConfig { ourInstance = this; } + public abstract List listGroups(); + public abstract List listNames(String group); + public abstract String getValue(String group, String name, String defaultValue); public abstract void setValue(String group, String name, String value); public abstract void unsetValue(String group, String name); diff --git a/src/org/geometerplus/zlibrary/core/sqliteconfig/ZLSQLiteConfig.java b/src/org/geometerplus/zlibrary/core/sqliteconfig/ZLSQLiteConfig.java index 8557c654c..79d1f098a 100644 --- a/src/org/geometerplus/zlibrary/core/sqliteconfig/ZLSQLiteConfig.java +++ b/src/org/geometerplus/zlibrary/core/sqliteconfig/ZLSQLiteConfig.java @@ -19,7 +19,11 @@ package org.geometerplus.zlibrary.core.sqliteconfig; +import java.util.List; +import java.util.LinkedList; + import android.content.Context; +import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; @@ -78,6 +82,26 @@ public final class ZLSQLiteConfig extends ZLConfig { */ } + synchronized public List listGroups() { + final LinkedList list = new LinkedList(); + final Cursor cursor = myDatabase.rawQuery("SELECT DISTINCT groupName FROM config", null); + while (cursor.moveToNext()) { + list.add(cursor.getString(0)); + } + cursor.close(); + return list; + } + + synchronized public List listNames(String group) { + final LinkedList list = new LinkedList(); + final Cursor cursor = myDatabase.rawQuery("SELECT name FROM config WHERE groupName = ?", new String[] { group }); + while (cursor.moveToNext()) { + list.add(cursor.getString(0)); + } + cursor.close(); + return list; + } + synchronized public void removeGroup(String name) { myDeleteGroupStatement.bindString(1, name); try {