package com.kuxhausen.huemore.net.lifx;
import com.google.gson.Gson;
import android.content.Context;
import android.database.Cursor;
import com.kuxhausen.huemore.R;
import com.kuxhausen.huemore.net.Connection;
import com.kuxhausen.huemore.net.DeviceManager;
import com.kuxhausen.huemore.net.NetworkBulb;
import com.kuxhausen.huemore.persistence.Definitions;
import java.util.ArrayList;
import lifx.java.android.light.LFXLight;
public class LifxConnection implements Connection {
private static final String[] bulbColumns = {Definitions.NetBulbColumns._ID,
Definitions.NetBulbColumns.CONNECTION_DATABASE_ID,
Definitions.NetBulbColumns.TYPE_COLUMN,
Definitions.NetBulbColumns.NAME_COLUMN,
Definitions.NetBulbColumns.DEVICE_ID_COLUMN,
Definitions.NetBulbColumns.JSON_COLUMN,
Definitions.NetBulbColumns.CURRENT_MAX_BRIGHTNESS};
private static final Gson gson = new Gson();
private Long mBaseId;
private String mName, mDeviceId;
ExtraData mData;
private Context mContext;
private LifxBulb mBulb;
DeviceManager mDeviceManager;
private LFXLight mLight;
public LifxConnection(Context c, Long baseId, String name, String deviceId,
ExtraData data, DeviceManager dm) {
mBaseId = baseId;
mName = name;
mDeviceId = deviceId;
mData = data;
mContext = c;
mDeviceManager = dm;
String selection =
Definitions.NetBulbColumns.TYPE_COLUMN + " = ? AND "
+ Definitions.NetBulbColumns.CONNECTION_DATABASE_ID + " = ?";
String[]
selectionArgs =
{"" + Definitions.NetBulbColumns.NetBulbType.LIFX, "" + mBaseId};
Cursor cursor =
c.getContentResolver()
.query(Definitions.NetBulbColumns.URI, bulbColumns, selection, selectionArgs,
null);
cursor.moveToFirst();
Long bulbBaseId = cursor.getLong(0);
String bulbName = cursor.getString(3);
String bulbDeviceId = cursor.getString(4);
LifxBulb.ExtraData bulbData = gson.fromJson(cursor.getString(5), LifxBulb.ExtraData.class);
int currentMaxBri = cursor.getInt(6);
cursor.close();
mBulb = new LifxBulb(c, bulbBaseId, bulbName, bulbDeviceId, bulbData, this);
}
@Override
public void initializeConnection(Context c) {
mBulb.onInitialize();
}
@Override
public void onDestroy() {
lightDisconnected();
}
@Override
public ArrayList<NetworkBulb> getBulbs() {
ArrayList<NetworkBulb> result = new ArrayList<NetworkBulb>(1);
result.add(mBulb);
return result;
}
@Override
public String mainDescription() {
return mName;
}
@Override
public String subDescription() {
return mContext.getString(R.string.device_lifx);
}
@Override
public boolean hasPendingWork() {
return this.mBulb.hasPendingWork();
}
@Override
public void delete() {
this.onDestroy();
String selector = Definitions.NetConnectionColumns._ID + "=?";
String[] selectionArgs = {"" + mBaseId};
mContext.getContentResolver()
.delete(Definitions.NetConnectionColumns.URI, selector, selectionArgs);
}
public String getDeviceId() {
return mDeviceId;
}
public void lightConnected(LFXLight light) {
mLight = light;
this.mBulb.lightConnected(light);
}
public void lightDisconnected() {
this.mBulb.lightDisconnected();
mLight = null;
}
public DeviceManager getDeviceManager() {
return mDeviceManager;
}
public static class ExtraData {
}
}