Android Open Source - android-sqlite-server Service Client






From Project

Back to project page android-sqlite-server.

License

The source code is released under:

Apache License

If you think the Android project android-sqlite-server listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.devtcg.sqliteserver.impl.binder;
//from w w w .ja v  a2 s  . c om
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class ServiceClient extends AbstractBinderClient {
    private static final String TAG = ServiceClient.class.getSimpleName();

    private final Context mContext;
    private final Intent mServiceIntent;

    private CountDownLatch mConnectLatch;
    private final Object mServiceLock = new Object();
    private IServiceInterface mService;

    public ServiceClient(Context context, Intent serviceIntent) {
        mContext = context;
        mServiceIntent = serviceIntent;
    }

    @Override
    public void close() {
        super.close();

        // See SQLiteServiceServer#onDestroy
        mContext.unbindService(mServiceConnection);

        // TODO: This isn't right, but I'm too sleepy to worry about it now...
        synchronized (mServiceLock) {
            if (mService != null && mConnectLatch.getCount() > 0) {
                mConnectLatch.countDown();
            }
        }
    }

    @Override
    protected Bundle doTransact(Bundle request) {
        // Wait forever, just like we would for a ContentProvider.
        // TODO: verify this absurd statement :)
        waitForConnection(Integer.MAX_VALUE, TimeUnit.SECONDS);
        try {
            return mService.sqliteCall(request);
        } catch (RemoteException e) {
            throw new UnsupportedOperationException("Exceptions not yet supported!");
        }
    }

    private void waitForConnection(long timeout, TimeUnit unit) {
        synchronized (mServiceLock) {
            if (mService != null) {
                return;
            }
        }
        mConnectLatch = new CountDownLatch(1);
        boolean bound = mContext.bindService(
                mServiceIntent,
                mServiceConnection,
                Context.BIND_AUTO_CREATE);
        if (!bound) {
            throw new UnsupportedOperationException("Exceptions not yet supported!");
        }

        while (true) {
            try {
                if (mConnectLatch.await(timeout, unit)) {
                    return;
                }
            } catch (InterruptedException e) {
                // XXX: Implement this correctly :)
            }
        }
    }

    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            synchronized (mServiceLock) {
                mService = IServiceInterface.Stub.asInterface(service);
            }
            mConnectLatch.countDown();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.i(TAG, "Service " + name + " unexpectedly disconnected");
            mService = null;
        }
    };
}




Java Source Code List

aosp.android.database.BulkCursorDescriptor.java
aosp.android.database.BulkCursorNative.java
aosp.android.database.BulkCursorToCursorAdaptor.java
aosp.android.database.CrossProcessCursorWrapper.java
aosp.android.database.CursorToBulkCursorAdaptor.java
aosp.android.database.IBulkCursor.java
aosp.android.database.MoreDatabaseUtils.java
org.devtcg.sqliteserver.SQLiteContentProviderServer.java
org.devtcg.sqliteserver.SQLiteServerConnectionManager.java
org.devtcg.sqliteserver.SQLiteServerConnection.java
org.devtcg.sqliteserver.SQLiteServer.java
org.devtcg.sqliteserver.SQLiteServiceServer.java
org.devtcg.sqliteserver.exception.SQLiteServerException.java
org.devtcg.sqliteserver.impl.ExecutorHelper.java
org.devtcg.sqliteserver.impl.SQLiteExecutor.java
org.devtcg.sqliteserver.impl.ServerImplProvider.java
org.devtcg.sqliteserver.impl.binder.AbstractBinderClient.java
org.devtcg.sqliteserver.impl.binder.BinderHandle.java
org.devtcg.sqliteserver.impl.binder.BundleUtils.java
org.devtcg.sqliteserver.impl.binder.ClientTransactor.java
org.devtcg.sqliteserver.impl.binder.ContentObserverProxy.java
org.devtcg.sqliteserver.impl.binder.ContentProviderClient.java
org.devtcg.sqliteserver.impl.binder.SQLiteServerProtocolException.java
org.devtcg.sqliteserver.impl.binder.ServerImpl.java
org.devtcg.sqliteserver.impl.binder.ServerState.java
org.devtcg.sqliteserver.impl.binder.ServiceClient.java
org.devtcg.sqliteserver.impl.binder.ThreadAffinityExecutor.java
org.devtcg.sqliteserver.impl.binder.protocol.AbstractCommandHandler.java
org.devtcg.sqliteserver.impl.binder.protocol.AbstractCommandMessage.java
org.devtcg.sqliteserver.impl.binder.protocol.AcquireCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.BeginTransactionCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.DeleteCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.EndTransactionCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.ExceptionTransportHelper.java
org.devtcg.sqliteserver.impl.binder.protocol.ExecSQLCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.InsertCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.MethodName.java
org.devtcg.sqliteserver.impl.binder.protocol.RawQueryCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.ReleaseCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.SetTransactionSuccessfulCommand.java
org.devtcg.sqliteserver.impl.binder.protocol.UpdateCommand.java
org.devtcg.sqliteserver.sample.MyActivity.java
org.devtcg.sqliteserver.sample.MyOpenHelper.java
org.devtcg.sqliteserver.sample.TestContentProvider.java
org.devtcg.sqliteserver.sample.TestService.java