1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 10:19:33 +02:00

first version of API

This commit is contained in:
Nikolay Pultsin 2011-06-17 02:47:36 +01:00
parent b3c1444e1b
commit c48df4b0f0
6 changed files with 236 additions and 0 deletions

View file

@ -7,6 +7,12 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:name="org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication" android:icon="@drawable/fbreader" android:label="FBReader"> <application android:name="org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication" android:icon="@drawable/fbreader" android:label="FBReader">
<activity android:name=".library.BugReportActivity" android:label="FBReader crash" android:configChanges="orientation|keyboardHidden" /> <activity android:name=".library.BugReportActivity" android:label="FBReader crash" android:configChanges="orientation|keyboardHidden" />
<service android:name="org.geometerplus.android.fbreader.api.ApiService">
<intent-filter>
<action android:name="android.fbreader.action.API" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
<activity android:name="org.geometerplus.android.fbreader.FBReader" android:launchMode="singleTask" android:icon="@drawable/fbreader" android:label="FBReader" android:configChanges="orientation|keyboardHidden"> <activity android:name="org.geometerplus.android.fbreader.FBReader" android:launchMode="singleTask" android:icon="@drawable/fbreader" android:label="FBReader" android:configChanges="orientation|keyboardHidden">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View file

@ -0,0 +1,30 @@
/*
* Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader.api;
public class ApiException extends Exception {
ApiException(String message) {
super(message);
}
ApiException(Exception parent) {
super(parent);
}
}

View file

@ -0,0 +1,57 @@
/*
* Copyright (C) 2009-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader.api;
import org.geometerplus.zlibrary.text.view.*;
import org.geometerplus.fbreader.fbreader.FBReaderApp;
public class ApiImplementation extends ApiInterface.Stub {
private final FBReaderApp myReader = (FBReaderApp)FBReaderApp.Instance();
@Override
public int getPageStartParagraphIndex() {
// TODO: check for NPE
return myReader.getTextView().getStartCursor().getParagraphIndex();
}
@Override
public int getMaxParagraphIndex() {
// TODO: check for NPE
return myReader.Model.BookTextModel.getParagraphsNumber() - 1;
}
@Override
public String getParagraphText(int paragraphIndex) {
// TODO: check for NPEs
final StringBuffer sb = new StringBuffer();
final ZLTextWordCursor cursor = new ZLTextWordCursor(myReader.getTextView().getStartCursor());
cursor.moveToParagraph(paragraphIndex);
cursor.moveToParagraphStart();
while (!cursor.isEndOfParagraph()) {
ZLTextElement element = cursor.getElement();
if (element instanceof ZLTextWord) {
sb.append(element.toString() + " ");
}
cursor.nextWord();
}
return sb.toString();
}
}

View file

@ -0,0 +1,28 @@
/*
* Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader.api;
interface ApiInterface {
int getPageStartParagraphIndex();
int getMaxParagraphIndex();
String getParagraphText(int paragraphIndex);
}

View file

@ -0,0 +1,31 @@
/*
* Copyright (C) 2009-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader.api;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ApiService extends Service {
@Override
public IBinder onBind(Intent intent) {
return new ApiImplementation();
}
}

View file

@ -0,0 +1,84 @@
/*
* Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader.api;
import android.content.*;
import android.os.IBinder;
public class ApiServiceConnection implements ServiceConnection {
private static String ACTION_API = "android.fbreader.action.API";
private final Context myContext;
private volatile ApiInterface myInterface;
public ApiServiceConnection(Context context) {
myContext = context;
connect();
}
public synchronized void connect() {
if (myInterface == null) {
myContext.bindService(new Intent(ACTION_API), this, Context.BIND_AUTO_CREATE);
}
}
public synchronized void onServiceConnected(ComponentName className, IBinder service) {
System.err.println("onServiceConnected call");
myInterface = ApiInterface.Stub.asInterface(service);
}
public synchronized void onServiceDisconnected(ComponentName name) {
System.err.println("onServiceDisconnected call");
myInterface = null;
}
private void checkConnection() throws ApiException {
if (myInterface == null) {
throw new ApiException("No connection with FBReader");
}
}
public synchronized int getPageStartParagraphIndex() throws ApiException {
checkConnection();
try {
return myInterface.getPageStartParagraphIndex();
} catch (android.os.RemoteException e) {
throw new ApiException(e);
}
}
public synchronized int getMaxParagraphIndex() throws ApiException {
checkConnection();
try {
return myInterface.getMaxParagraphIndex();
} catch (android.os.RemoteException e) {
throw new ApiException(e);
}
}
public synchronized String getParagraphText(int paragraphIndex) throws ApiException {
checkConnection();
try {
return myInterface.getParagraphText(paragraphIndex);
} catch (android.os.RemoteException e) {
throw new ApiException(e);
}
}
}