package com.sonycsl.Kadecot.wamp; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.os.RemoteException; import com.sonycsl.Kadecot.core.provider.KadecotCoreStore; import com.sonycsl.wamp.role.WampBroker.PubSubMessageHandler; public class KadecotTopicResolver implements PubSubMessageHandler { private final ContentResolver mResolver; public KadecotTopicResolver(ContentResolver resolver) { mResolver = resolver; } private void updateDB(String topic, boolean countUp) { ContentProviderClient provider = mResolver .acquireContentProviderClient(KadecotCoreStore.Topics.CONTENT_URI); try { Cursor cursor = provider.query(KadecotCoreStore.Topics.CONTENT_URI, new String[] { KadecotCoreStore.Topics.TopicColumns.NAME, KadecotCoreStore.Topics.TopicColumns.REFERENCE_COUNT }, KadecotCoreStore.Topics.TopicColumns.NAME + " =?", new String[] { topic }, null); if (cursor.getCount() != 1) { cursor.close(); return; } cursor.moveToFirst(); int refCount = cursor.getInt(cursor .getColumnIndex(KadecotCoreStore.Topics.TopicColumns.REFERENCE_COUNT)); cursor.close(); if (countUp) { refCount++; } else { refCount--; } if (refCount < 0) { refCount = 0; } ContentValues values = new ContentValues(); values.put(KadecotCoreStore.Topics.TopicColumns.REFERENCE_COUNT, refCount); provider.update(KadecotCoreStore.Topics.CONTENT_URI, values, KadecotCoreStore.Topics.TopicColumns.NAME + " =?", new String[] { topic }); } catch (RemoteException e) { e.printStackTrace(); } finally { provider.release(); } } @Override public void onSubscribe(String topic) { updateDB(topic, true); } @Override public void onUnsubscribe(String topic) { updateDB(topic, false); } }