package com.sonycsl.Kadecot.wamp.provider; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.os.Handler; import android.os.RemoteException; import android.text.format.DateFormat; import com.sonycsl.Kadecot.core.provider.KadecotCoreStore; import org.json.JSONException; import org.json.JSONObject; import java.util.Calendar; public class DeviceObserver { public interface OnDeviceChangedListener { public void onDeviceFound(JSONObject device); } private final ContentResolver mResolver; private String mLastUpdated; private OnDeviceChangedListener mListener; public DeviceObserver(ContentResolver resolver, Handler handler) { mResolver = resolver; mLastUpdated = DateFormat.format("yyyy-MM-dd kk:mm:ss", Calendar.getInstance()) .toString(); mResolver.registerContentObserver(KadecotCoreStore.Devices.CONTENT_URI, true, new ContentObserver(handler) { @Override public void onChange(boolean selfChange) { ContentProviderClient provider = mResolver .acquireContentProviderClient(KadecotCoreStore.Devices.CONTENT_URI); Cursor cursor; try { cursor = provider.query(KadecotCoreStore.Devices.CONTENT_URI, new String[] { KadecotCoreStore.Devices.DeviceColumns.DEVICE_ID, KadecotCoreStore.Devices.DeviceColumns.PROTOCOL, KadecotCoreStore.Devices.DeviceColumns.UUID, KadecotCoreStore.Devices.DeviceColumns.DEVICE_TYPE, KadecotCoreStore.Devices.DeviceColumns.DESCRIPTION, KadecotCoreStore.Devices.DeviceColumns.STATUS, KadecotCoreStore.Devices.DeviceColumns.NICKNAME, KadecotCoreStore.Devices.DeviceColumns.LOCAL_UPDATED }, KadecotCoreStore.Devices.DeviceColumns.LOCAL_UPDATED + " >= ?", new String[] { mLastUpdated }, KadecotCoreStore.Devices.DeviceColumns.LOCAL_UPDATED + " asc"); } catch (RemoteException e) { e.printStackTrace(); return; } if (cursor.getCount() == 0) { cursor.close(); return; } if (mListener != null) { cursor.moveToFirst(); do { JSONObject device = new JSONObject(); try { device.put( KadecotCoreStore.Devices.DeviceColumns.DEVICE_ID, cursor.getLong(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.DEVICE_ID))); device.put( KadecotCoreStore.Devices.DeviceColumns.PROTOCOL, cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.PROTOCOL))); device.put( KadecotCoreStore.Devices.DeviceColumns.UUID, cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.UUID))); device.put( KadecotCoreStore.Devices.DeviceColumns.DEVICE_TYPE, cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.DEVICE_TYPE))); device.put( KadecotCoreStore.Devices.DeviceColumns.DESCRIPTION, cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.DESCRIPTION))); device.put( KadecotCoreStore.Devices.DeviceColumns.STATUS, cursor.getInt(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.STATUS)) == 1 ? true : false); device.put( KadecotCoreStore.Devices.DeviceColumns.NICKNAME, cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.NICKNAME))); mListener.onDeviceFound(device); } catch (JSONException e) { e.printStackTrace(); } } while (cursor.moveToNext()); } cursor.moveToLast(); mLastUpdated = cursor.getString(cursor .getColumnIndex(KadecotCoreStore.Devices.DeviceColumns.LOCAL_UPDATED)); cursor.close(); } }); } public void setOnDeviceChangedListener(OnDeviceChangedListener listener) { mListener = listener; } }