package com.integreight.onesheeld.shields.fragments;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.controller.DataLoggerShield;
import com.integreight.onesheeld.shields.controller.DataLoggerShield.DataLoggerListener;
import com.integreight.onesheeld.utils.customviews.OneSheeldButton;
import com.integreight.onesheeld.utils.customviews.OneSheeldTextView;
import java.util.ArrayList;
import java.util.Map;
public class DataLoggerFragment extends
ShieldFragmentParent<DataLoggerFragment> {
OneSheeldTextView loggerStatus;
OneSheeldButton stopLogging;
LinearLayout keysContainer, valuesContainer;
float scale = 0;
LinearLayout.LayoutParams cellParams;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.data_logger_shield_fragment_layout,
container, false);
}
@Override
public void doOnStart() {
((DataLoggerShield) getApplication().getRunningShields().get(
getControllerTag())).setEventHandler(eventHandler);
if (stopLogging != null) {
if (((DataLoggerShield) getApplication().getRunningShields().get(getControllerTag())).currentStatus == DataLoggerShield.LOGGING) {
stopLogging.setVisibility(View.VISIBLE);
} else {
stopLogging.setVisibility(View.INVISIBLE);
}
}
}
@Override
public void doOnViewCreated(View v, @Nullable Bundle savedInstanceState) {
uiHandler = new Handler();
loggerStatus = (OneSheeldTextView) v.findViewById(R.id.loggerStatus);
keysContainer = (LinearLayout) v.findViewById(R.id.keysContainer);
valuesContainer = (LinearLayout) v.findViewById(R.id.valuesContainer);
stopLogging = (OneSheeldButton) v.findViewById(R.id.stop_logging_btn);
scale = getResources().getDisplayMetrics().density;
cellParams = new LinearLayout.LayoutParams((int) (100 * scale + .5f),
LinearLayout.LayoutParams.MATCH_PARENT);
int status = ((DataLoggerShield) getApplication().getRunningShields()
.get(getControllerTag())).currentStatus;
loggerStatus
.setBackgroundResource(status == DataLoggerShield.READ_FOR_LOGGING ? R.drawable.large_yellow_circle
: R.drawable.large_green_circle);
loggerStatus
.setText(status == DataLoggerShield.READ_FOR_LOGGING ? R.string.data_logger_ready_for_logging
: R.string.data_logger_logging);
stopLogging.setVisibility(View.INVISIBLE);
stopLogging.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((DataLoggerShield) getApplication().getRunningShields().get(getControllerTag())).saveData();
}
});
keysContainer.removeAllViews();
valuesContainer.removeAllViews();
}
DataLoggerListener eventHandler = new DataLoggerListener() {
@Override
public void onStopLogging(
final ArrayList<Map<String, String>> loggedValues) {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
loggerStatus
.setBackgroundResource(R.drawable.large_red_circle);
loggerStatus.setText(R.string.data_logger_logging_stopped_button);
((DataLoggerShield) getApplication()
.getRunningShields().get(getControllerTag())).currentStatus = DataLoggerShield.STOPPED_LOGGING;
loggerStatus.postDelayed(new Runnable() {
@Override
public void run() {
if (canChangeUI()
&& !((DataLoggerShield) getApplication()
.getRunningShields().get(
getControllerTag()))
.isLoggingStarted()) {
keysContainer.removeAllViews();
valuesContainer.removeAllViews();
((DataLoggerShield) getApplication()
.getRunningShields().get(
getControllerTag())).currentStatus = DataLoggerShield.READ_FOR_LOGGING;
loggerStatus
.setBackgroundResource(R.drawable.large_yellow_circle);
loggerStatus.setText(R.string.data_logger_ready_for_logging);
stopLogging.setVisibility(View.INVISIBLE);
}
}
}, 1000);
}
}
});
}
@Override
public void onStartLogging() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
keysContainer.removeAllViews();
valuesContainer.removeAllViews();
loggerStatus
.setBackgroundResource(R.drawable.large_green_circle);
loggerStatus.setText(R.string.data_logger_logging);
stopLogging.setVisibility(View.VISIBLE);
}
}
});
}
@Override
public void onReadyForLogging() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
loggerStatus
.setBackgroundResource(R.drawable.large_yellow_circle);
loggerStatus.setText(R.string.data_logger_ready_for_logging);
}
}
});
}
@Override
public void onLog(final Map<String, String> rowData) {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
loggerStatus
.setBackgroundResource(R.drawable.large_green_circle);
loggerStatus.setText(R.string.data_logger_logging);
for (String header : rowData.keySet()) {
if (keysContainer.findViewWithTag(header) != null) {
((OneSheeldTextView) valuesContainer
.findViewWithTag(header + "Value"))
.setText("");
} else {
OneSheeldTextView key = new OneSheeldTextView(
activity);
key.setLayoutParams(cellParams);
key.setSingleLine(true);
key.setText(header);
key.setTextColor(getResources().getColor(
R.color.offWhite));
key.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
key.setGravity(Gravity.CENTER);
key.setTag(header);
key.setBackgroundResource(R.drawable.squared_data_logger_cell_borded);
OneSheeldTextView value = new OneSheeldTextView(
activity);
value.setLayoutParams(cellParams);
value.setSingleLine(true);
value.setTextColor(getResources().getColor(
R.color.offWhite));
value.setTextSize(TypedValue.COMPLEX_UNIT_DIP,
14);
value.setBackgroundResource(R.drawable.squared_data_logger_cell_borded);
value.setGravity(Gravity.CENTER);
value.setTag(header + "Value");
keysContainer.addView(key);
valuesContainer.addView(value);
}
}
}
}
});
}
void add(String header, String valueT) {
if (keysContainer.findViewWithTag(header) != null) {
((OneSheeldTextView) valuesContainer.findViewWithTag(header
+ "Value")).setText(valueT);
} else {
OneSheeldTextView key = new OneSheeldTextView(activity);
key.setLayoutParams(cellParams);
key.setSingleLine(true);
key.setText(header);
key.setTextColor(getResources().getColor(R.color.offWhite));
key.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
key.setGravity(Gravity.CENTER);
key.setTag(header);
key.setBackgroundResource(R.drawable.squared_data_logger_cell_borded);
OneSheeldTextView value = new OneSheeldTextView(activity);
value.setLayoutParams(cellParams);
value.setSingleLine(true);
value.setText(valueT);
value.setTextColor(getResources().getColor(R.color.offWhite));
value.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
value.setBackgroundResource(R.drawable.squared_data_logger_cell_borded);
value.setGravity(Gravity.CENTER);
value.setTag(header + "Value");
keysContainer.addView(key);
valuesContainer.addView(value);
}
}
@Override
public void onAdd(final String header, final String valueT) {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
add(header, valueT);
}
}
});
}
};
}