package no.nordicsemi.puckcentral.adapters;
import android.app.AlertDialog;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import org.droidparts.adapter.cursor.EntityCursorAdapter;
import org.droidparts.annotation.inject.InjectDependency;
import org.droidparts.bus.EventBus;
import org.droidparts.persist.sql.stmt.Select;
import org.droidparts.util.L;
import java.util.HashMap;
import java.util.Map;
import no.nordicsemi.puckcentral.R;
import no.nordicsemi.puckcentral.bluetooth.gatt.GattManager;
import no.nordicsemi.puckcentral.db.PuckManager;
import no.nordicsemi.puckcentral.db.RuleManager;
import no.nordicsemi.puckcentral.models.Puck;
import no.nordicsemi.puckcentral.triggers.Trigger;
public class PuckAdapter extends EntityCursorAdapter<Puck> {
@InjectDependency
private RuleManager mRuleManager;
@InjectDependency
private PuckManager mPuckManager;
private Map<String, Integer> connectionStates;
private Puck mClosestPuck;
public PuckAdapter(Context ctx, Select<Puck> select) {
super(ctx, new PuckManager(ctx), select);
mClosestPuck = null;
connectionStates = new HashMap<>();
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {
View view = getLayoutInflater().inflate(R.layout.puck_list_item, null);
PuckViewHolder puckViewHolder = new PuckViewHolder(view);
view.setTag(puckViewHolder);
return view;
}
@Override
public void bindView(final Context context, View view, final Puck puck) {
entityManager.fillForeignKeys(puck);
final PuckViewHolder holder = (PuckViewHolder) view.getTag();
StringBuilder puckName = new StringBuilder(puck.getName());
puckName.setCharAt(0, Character.toUpperCase(puckName.charAt(0)));
holder.mTvPuckName.setText(puckName.toString() +
(puck.equals(mClosestPuck) ?
" (Immediate)"
: ""));
int color = context.getResources().getColor(android.R.color.black);
if (connectionStates.containsKey(puck.getAddress())) {
switch (connectionStates.get(puck.getAddress())) {
case BluetoothProfile.STATE_CONNECTING:
color = context.getResources().getColor(android.R.color.holo_orange_light);
break;
case BluetoothProfile.STATE_CONNECTED:
color = context.getResources().getColor(android.R.color.holo_green_light);
break;
}
}
holder.mTvPuckName.setTextColor(color);
RuleAdapter ruleAdapter = new RuleAdapter(context, mRuleManager.getRulesForPuck(puck));
holder.mLlTriggerList.removeAllViews();
for (int i=0; i< ruleAdapter.getCount(); i++) {
View item = ruleAdapter.getView(i, null, null);
holder.mLlTriggerList.addView(item);
}
holder.mBtnDeletePuck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setTitle(context.getString(R.string.remove_puck, puck.getName()))
.setPositiveButton(context.getString(R.string.remove), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mPuckManager.delete(puck.id)) {
requeryData();
}
}
})
.setNegativeButton(context.getString(R.string.abort), null);
builder.create().show();
}
});
holder.mBtnAddRuleToPuck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.postEvent(Trigger.TRIGGER_ADD_RULE_FOR_EXISTING_PUCK, puck);
}
});
}
public void connectionStateChanged(GattManager.ConnectionStateChangedBundle bundle) {
if (!connectionStates.containsKey(bundle.mAddress)) {
connectionStates.put(bundle.mAddress, BluetoothProfile.STATE_DISCONNECTED);
}
if (connectionStates.get(bundle.mAddress) == bundle.mNewState) {
return;
}
connectionStates.put(bundle.mAddress, bundle.mNewState);
requeryData();
}
public void closestPuckChanged(Puck closestPuck) {
if (closestPuck == null && mClosestPuck == null ||
closestPuck != null && closestPuck.equals(mClosestPuck)) {
return;
}
mClosestPuck = closestPuck;
requeryData();
}
}