package com.integreight.onesheeld.shields.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.enums.ArduinoPin;
import com.integreight.onesheeld.model.ArduinoConnectedPin;
import com.integreight.onesheeld.sdk.OneSheeldDevice;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.controller.LedShield;
import com.integreight.onesheeld.shields.controller.LedShield.LedEventHandler;
import com.integreight.onesheeld.utils.ConnectingPinsView;
import com.integreight.onesheeld.utils.ConnectingPinsView.OnPinSelectionListener;
public class LedFragment extends ShieldFragmentParent<LedFragment> {
ImageView ledImage;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.led_shield_fragment_layout, container,
false);
}
@Override
public void doOnViewCreated(View view, @Nullable Bundle savedInstanceState) {
ledImage = (ImageView) view.findViewById(R.id.led_shield_led_imageview);
}
@Override
public void doOnResume() {
toggleLed(((LedShield) getApplication().getRunningShields().get(
getControllerTag())).refreshLed());
}
@Override
public void doOnStart() {
((LedShield) getApplication().getRunningShields().get(
getControllerTag())).setLedEventHandler(ledEventHandler);
ConnectingPinsView.getInstance().reset(
getApplication().getRunningShields().get(getControllerTag()),
new OnPinSelectionListener() {
@Override
public void onSelect(ArduinoPin pin) {
if (pin != null) {
(getApplication().getRunningShields()
.get(getControllerTag()))
.setConnected(new ArduinoConnectedPin(
pin.microHardwarePin,
OneSheeldDevice.INPUT));
if (getApplication().isConnectedToBluetooth())
toggleLed(getApplication().getConnectedDevice().digitalRead(pin.microHardwarePin));
} else {
((LedShield) getApplication().getRunningShields()
.get(getControllerTag())).connectedPin = -1;
toggleLed(false);
}
}
@Override
public void onUnSelect(ArduinoPin pin) {
// TODO Auto-generated method stub
}
}); // TODO Auto-generated method stub
}
private LedEventHandler ledEventHandler = new LedEventHandler() {
@Override
public void onLedChange(final boolean isLedOn) {
// TODO Auto-generated method stub
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
toggleLed(isLedOn);
}
}
});
}
};
private void toggleLed(final boolean isOn) {
uiHandler.removeCallbacksAndMessages(null);
uiHandler.post(new Runnable() {
@Override
public void run() {
if (isOn) {
ledImage.setImageResource(R.drawable.led_shield_led_on);
} else {
ledImage.setImageResource(R.drawable.led_shield_led_off);
}
}
});
}
private void initializeFirmata() {
if (getApplication().getRunningShields().get(getControllerTag()) == null) {
getApplication().getRunningShields().put(getControllerTag(),
new LedShield(activity, getControllerTag()));
}
}
@Override
public void doOnServiceConnected() {
initializeFirmata();
}
}