package kc.spark.pixels.android.ui.tinker;
import static org.solemnsilence.util.Py.list;
import java.util.ArrayList;
import kc.get.pixel.list.android.R;
import org.apache.http.HttpStatus;
import org.solemnsilence.util.TLog;
import kc.spark.pixels.android.app.DeviceState;
import kc.spark.pixels.android.cloud.ApiFacade;
import kc.spark.pixels.android.cloud.api.Device;
import kc.spark.pixels.android.cloud.api.FunctionResponse;
import kc.spark.pixels.android.storage.Preferences;
import kc.spark.pixels.android.storage.TinkerPrefs;
import kc.spark.pixels.android.ui.BaseActivity;
import kc.spark.pixels.android.ui.BaseFragment;
import kc.spark.pixels.android.ui.ErrorsDelegate;
import kc.spark.pixels.android.ui.corelist.CoreListActivity;
import kc.spark.pixels.android.ui.tinker.ColorPickerDialog;
import kc.spark.pixels.android.ui.tinker.Item;
import kc.spark.pixels.android.ui.tinker.ItemAdapter;
import kc.spark.pixels.android.ui.tinker.ColorPickerDialog.OnColorSelectedListener;
import kc.spark.pixels.android.ui.util.NamingHelper;
import kc.spark.pixels.android.ui.util.Ui;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
//https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView
//http://stackoverflow.com/questions/14188685/android-onclick-event-on-custom-listview-adapter-not-working
//https://www.bignerdranch.com/blog/customizing-android-listview-rows-subclassing/
/**
* A fragment representing a single Core detail screen. This fragment is either
* contained in a {@link CoreListActivity} in two-pane mode (on tablets) or a
* {@link CoreDetailActivity} on handsets.
*/
public class PixelFragment extends BaseFragment implements OnClickListener, OnSeekBarChangeListener {
private static final TLog log = new TLog(PixelFragment.class);
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
public static final String ARG_DEVICE_ID = "ARG_DEVICE_ID";
private static final int UPDATE_VIEW = 1;
private static final int Is_First_Visit = 2;
AlertDialog selectDialog;
int defaultColor;
int i_speed = 5;
int i_brightness = 100;
int currentModeNum = 0;
String pixelCoreName = null;
String initialMode;
String s_userMode = "";
final String modeHeader = "M:";
final String brightnessHeader = "B:";
final String speedHeader = "S:";
final String color1Header = "C1:";
final String color2Header = "C2:";
final String color3Header = "C3:";
final String color4Header = "C4:";
final String color5Header = "C5:";
final String color6Header = "C6:";
Item thisItem;
Context globalContext;
SharedPreferences prefs;
private SeekBar sbPixleBrightness;
private SeekBar sbPixleSpeed;
private TextView tvBoxTempTitle;
private TextView tvBoxTempValue;
private TextView tvModeTitle;
private TextView tvModeValue;
private TextView tvColumnTitleMode;
private TextView tvColumnTitleColor;
private ListView listView;
ArrayList<Item> mode = new ArrayList<Item>();
String[] speed_names = new String[9];
private Device device;
private FunctionReceiver functionReceiver;
private NamingCompleteReceiver namingCompleteReceiver;
private NamingFailedReceiver namingFailedReceiver;
private NamingStartedReceiver namingStartedReceiver;
public static PixelFragment newInstance(String deviceId) {
Bundle arguments = new Bundle();
arguments.putString(PixelFragment.ARG_DEVICE_ID, deviceId);
PixelFragment fragment = new PixelFragment();
fragment.setArguments(arguments);
return fragment;
}
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public PixelFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
globalContext = this.getActivity();
defaultColor = getResources().getColor(R.color.tinker_pin_bg);
if (getArguments().containsKey(ARG_DEVICE_ID)) {
device = DeviceState.getDeviceById(getArguments().getString(ARG_DEVICE_ID));
}
functionReceiver = new FunctionReceiver();
namingCompleteReceiver = new NamingCompleteReceiver();
namingFailedReceiver = new NamingFailedReceiver();
namingStartedReceiver = new NamingStartedReceiver();
prefs = PreferenceManager.getDefaultSharedPreferences(globalContext);
//get the pixel driver core name preference
pixelCoreName = prefs.getString("pixelCore", "NA");
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
boolean isThisTheFirstVisit = false;
pixelCoreName = prefs.getString("pixelCore", "NA"); //update the pixel Core
tvBoxTempTitle = (TextView)Ui.findView(this, R.id.tv_temp_title);
tvBoxTempValue = (TextView)Ui.findView(this, R.id.tv_temp_value);
tvModeTitle = (TextView)Ui.findView(this, R.id.tv_mode_title);
tvModeValue = (TextView)Ui.findView(this, R.id.tv_mode_value);
tvColumnTitleMode = (TextView)Ui.findView(this, R.id.header_mode_name);
tvColumnTitleColor = (TextView)Ui.findView(this, R.id.header_colors);
if (TinkerPrefs.getInstance().isFirstVisit()) {
isThisTheFirstVisit = true;
showInstructions();
}
if(device.name.equals(pixelCoreName)) {
showProgress(R.id.progress_indicator, true);
//first get the current selected mode from the Core, don't ask me why I do this first
getVariable("mode", "SVgetInitialMode");
}
else if(!isThisTheFirstVisit) {
setWrongCoreView();
}
}
@Override
public void onStart() {
super.onStart();
broadcastMgr.registerReceiver(functionReceiver, functionReceiver.getFilter());
broadcastMgr.registerReceiver(namingCompleteReceiver, namingCompleteReceiver.getFilter());
broadcastMgr.registerReceiver(namingFailedReceiver, namingFailedReceiver.getFilter());
broadcastMgr.registerReceiver(namingStartedReceiver, namingStartedReceiver.getFilter());
}
@Override
public void onStop() {
broadcastMgr.unregisterReceiver(functionReceiver);
broadcastMgr.unregisterReceiver(namingCompleteReceiver);
broadcastMgr.unregisterReceiver(namingFailedReceiver);
broadcastMgr.unregisterReceiver(namingStartedReceiver);
super.onStop();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.tinker, menu);
inflater.inflate(R.menu.core_row_overflow, menu);
inflater.inflate(R.menu.pref_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_rename_core:
new NamingHelper(getActivity(), api).showRenameDialog(device);
return true;
case R.id.action_settings:
//Show preferences screen
//startActivity(new Intent(getActivity(), Preferences.class));
startActivityForResult(new Intent(getActivity(), Preferences.class), UPDATE_VIEW);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case UPDATE_VIEW:
//Check to see if the pixel Core changed
if(pixelCoreName.equals(prefs.getString("pixelCore", "NA"))) {
if(device.name.equals(pixelCoreName)) {
//update view from changed preferences
setSpeedValues();
showBoxTemp(prefs.getBoolean("showBoxTemp", false));
}
}
else {
//Pixel Core Preference changed, so lets load the whole view
listView = (ListView) Ui.findView(this, R.id.mode_list);
pixelCoreName = prefs.getString("pixelCore", "NA"); //update the pixel Core
if(device.name.equals(pixelCoreName)) {
showProgress(R.id.progress_indicator, true);
//first get the current selected mode from the Core, don't ask me why I do this first
getVariable("mode", "SVgetInitialMode");
if(listView != null) {
listView.setVisibility(View.VISIBLE);
}
}
else {
setWrongCoreView();
if(listView != null) {
listView.setVisibility(View.INVISIBLE);
}
}
}
break;
case Is_First_Visit:
showProgress(R.id.progress_indicator, true);
pixelCoreName = prefs.getString("pixelCore", "NA");
if(device.name.equals(pixelCoreName)) {
//first get the current selected mode from the Core, don't ask me why I do this first
getVariable("mode", "SVgetInitialMode");
}
else {
setWrongCoreView();
}
break;
}
}
private void setWrongCoreView() {
showProgress(R.id.progress_indicator, false);
showBoxTemp(false);
showHeaderTitles(false);
tvModeTitle.setText("Wrong Core Selected");
tvModeValue.setText("");
}
private void completeOnViewCreated() {
loadViews();
setupListeners();
showProgress(R.id.progress_indicator, false);
//Step 5: get initial temp and mode
if(prefs.getBoolean("showBoxTemp", false)) {
getVariable("temp", "SVshowMeasuredTemperature");
}
//refreshSparkReadings();
}
private void loadViews() {
log.d("REACHED THIS POINT");
//Set brightness Slider
sbPixleBrightness = (SeekBar)Ui.findView(this, R.id.pixel_brightness); // make seekbar object
sbPixleBrightness.setProgress(i_brightness);
Ui.setText(this, R.id.tv_brightness_value, Integer.toString(i_brightness)); //set brightness value text
sbPixleSpeed = (SeekBar)Ui.findView(this, R.id.pixel_speed); // make seekbar object
sbPixleSpeed.setProgress(i_speed);
setSpeedValues();
showBoxTemp(prefs.getBoolean("showBoxTemp", false));
}
private void showBoxTemp(boolean doIShowItOrNot) {
if(doIShowItOrNot) {
tvBoxTempTitle.setVisibility(View.VISIBLE);
tvBoxTempValue.setVisibility(View.VISIBLE);
}
else {
tvBoxTempTitle.setVisibility(View.GONE);
tvBoxTempValue.setVisibility(View.GONE);
}
}
private void showHeaderTitles(boolean doIShowItOrNot) {
if(doIShowItOrNot) {
tvColumnTitleMode.setVisibility(View.VISIBLE);
tvColumnTitleColor.setVisibility(View.VISIBLE);
}
else {
tvColumnTitleMode.setVisibility(View.GONE);
tvColumnTitleColor.setVisibility(View.GONE);
}
}
private void setupListeners() {
Ui.findView(this, R.id.tinker_main).setOnClickListener(this);
//Brightness Listener
sbPixleBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
callSimpleFunction("SetMode", "SFsetSpeedOrBrightness");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
i_brightness = progress;
Ui.setText(getActivity(), R.id.tv_brightness_value, Integer.toString(i_brightness));
//Ui.setText(getActivity(), R.id.tv_brightness_value, String.format("%3d",ibrightness));
}
});
//Speed Listener
sbPixleSpeed.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
callSimpleFunction("SetMode", "SFsetSpeedOrBrightness");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
i_speed = progress;
//Ui.setText(getActivity(), R.id.tv_speed_value, Integer.toString(ispeed));
Ui.setText(getActivity(), R.id.tv_speed_value, speed_names[i_speed]);
}
});
//Control Box Temperature Listener
//Touch the text view of the temp reading to make a Core request to get the current temp
tvBoxTempValue.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//check preferences to see if we should get the temp reading from the Core
//We really should never get here if the preferences is set to false
if(prefs.getBoolean("showBoxTemp", false)) {
getVariable("temp", "SVshowMeasuredTemperature");
}
}
});
//Current Mode Listener
//Touch the text view of the current mode to make a Core request to get the current mode
Ui.findView(this, R.id.tv_mode_value).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getVariable("mode", "SVshowCurrentMode");
}
});
//Item in ListView Listener
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ListView Clicked item value
final Item item = (Item)listView.getItemAtPosition(position);
thisItem = item;
//display color picker dialog for modes that need colors
if(item.getNumColors() > 0) {
//Have to setup views in reverse order so that they pop up on the phone in the ascending order
for(int i=item.getNumColors();i>0;i--) {
pickColor(item, view, i, item.getNumColors());
}
}
else {
callFunction("SetMode", item, "SFsetMode");
getVariable("mode", "SVshowCurrentMode");
}
}
});
}
private void setSpeedValues() {
int i;
String s_buff;
for(i=0;i<9;i++) {
s_buff = "speedTag" + (i+1);
speed_names[i] = prefs.getString(s_buff, "NA");
}
Ui.setText(this, R.id.tv_speed_value, speed_names[i_speed]); //set speed value text
}
public int pickColor(final Item item, final View view, final int colorNum, final int numColors) {
String dialogTitle = "Pick Color " + (colorNum);
new ColorPickerDialog(
globalContext,
item.getColor(colorNum),
dialogTitle,
i_brightness,
new OnColorSelectedListener() {
@Override
public void onColorSelected(int color, int brightnessValue) {
item.setColor(colorNum, color);
i_brightness = brightnessValue;
sbPixleBrightness.setProgress(i_brightness);
//Update color in view
ItemView itemView = (ItemView)view;
itemView.setItem(item);
if(numColors == colorNum) {
callFunction("SetMode", item, "SFsetMode");
getVariable("mode", "SVshowCurrentMode");
}
}
@Override
public void onCancelSelected() {
// TODO Auto-generated method stub
return;
}
}).show();
return 1;
}
private Bundle bundleSimpleArgs() {
Bundle args = new Bundle();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(speedHeader+i_speed+","+brightnessHeader+i_brightness+",");
args.putString("params",stringBuilder.toString() );
return args;
}
private Bundle bundleFunctionArgs(Item item) {
int i;
Bundle args = new Bundle();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(modeHeader+item.getTitle()+","+speedHeader+i_speed+","+brightnessHeader+i_brightness+",");
for(i=1;i<=item.getNumColors();i++) {
switch(i){
case 1:
stringBuilder.append(color1Header+String.format("%06X",0xFFFFFF &item.getColor1())+",");
//args.putString("params",color1Header+String.format("%06X",0xFFFFFF &color1)+",");
break;
case 2:
stringBuilder.append(color2Header+String.format("%06X",0xFFFFFF &item.getColor2())+",");
//args.putString("params",color2Header+String.format("%06X",0xFFFFFF &color2)+",");
break;
case 3:
stringBuilder.append(color3Header+String.format("%06X",0xFFFFFF &item.getColor3())+",");
//args.putString("params",color3Header+String.format("%06X",0xFFFFFF &color3)+",");
break;
case 4:
stringBuilder.append(color4Header+String.format("%06X",0xFFFFFF &item.getColor4())+",");
//args.putString("params",color4Header+String.format("%06X",0xFFFFFF &color4)+",");
break;
}
}
args.putString("params",stringBuilder.toString() );
return args;
}
private void getVariable(String spark_variable, String responseType) {
if(device.name.equals(pixelCoreName)) {
api.getSparkVariable(device.id, spark_variable, responseType);
}
}
private void callFunction(String spark_function, Item item, String responseType) {
if(device.name.equals(pixelCoreName)) {
api.callSparkFunction(device.id, spark_function, bundleFunctionArgs(item), responseType);
}
}
private void callSimpleFunction(String spark_function, String responseType) {
if(device.name.equals(pixelCoreName)) {
api.callSparkFunction(device.id, spark_function, bundleSimpleArgs(), responseType);
}
}
private void refreshSparkReadings() {
new Thread(new Runnable() {
public void run(){
while (true) {
//getVariable("temp", "SVshowMeasuredTemperature");
//Sleep(30000);
}
}
}).start();
}
private void Sleep(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void showInstructions() {
View instructions = Ui.findView(this, R.id.tinker_instructions);
// set visible and then set it to disappear when we're done. and then
// never show up again.
instructions.setVisibility(View.VISIBLE);
instructions.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);
TinkerPrefs.getInstance().setVisited(true);
startActivityForResult(new Intent(getActivity(), Preferences.class), Is_First_Visit);
}
});
}
private void toggleViewVisibilityWithFade(int viewId, final boolean show) {
final View view = Ui.findView(this, viewId);
int shortAnimTime = 150; // ms
view.setVisibility(View.VISIBLE);
view.animate()
.setDuration(shortAnimTime)
.alpha(show ? 1 : 0)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
}
@Override
public int getContentViewLayoutId() {
return R.layout.fragment_tinker;
}
private void onFunctionResponse(final FunctionResponse response) {
log.d("Function response received: " + response);
if (!device.id.equals(response.coreId)) {
log.i("Function resposne did not match core ID");
return;
}
if (response.errorMakingRequest) {
ErrorsDelegate errorsDelegate = ((BaseActivity) getActivity()).getErrorsDelegate();
errorsDelegate.showTinkerError();
}
log.d("response value: " + response.responseValue);
log.d("CoreId value: " + response.coreId);
log.d("response Type: " + response.responseType);
log.d("response to String: " + response.toString());
//Response Type starting with SV = Spark Variable
//Response Type starting with SF = Spark Function
switch (response.responseType) {
case "SVshowMeasuredTemperature" :
if(response.responseValue != null) {
//Set the received temperature on screen
tvBoxTempValue.setText(String.format("%3.1f * F", Double.parseDouble(response.responseValue)));
}
else {
showReadingError("No response from Core");
}
break;
case "SVshowCurrentMode":
if(response.responseValue != null) {
if(!(response.responseValue.equalsIgnoreCase("None"))) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Set the received current mode title
tvModeTitle.setText("Current Mode:");
tvModeValue.setText(response.responseValue);
}
}, 1); //Delay updating view for 1 millisec
//Increase this to your hearts desire, but I think it slows the app down too much
}
else {
showReadingError("Error reading from Core");
}
}
else {
showReadingError("No response from Core");
}
break;
case "SVgetInitialMode":
if(response.responseValue != null) {
if(!(response.responseValue.equalsIgnoreCase("None"))) {
//Store initial mode, then get number of available modes from the Core
initialMode = response.responseValue;
tvModeValue.setText(initialMode);
//Step 2: Now get the current brightness value from the Core
api.getSparkVariable(device.id, "brightness", "SVgetInitialBrightnessValue");
}
else {
showReadingError("Error reading from Core");
}
}
else {
showReadingError("No response from Core");
}
break;
case "SVgetInitialBrightnessValue":
if(response.responseValue != null) {
i_brightness = (int)((Integer.parseInt(response.responseValue)+0.5) * 100 / 255); //Scale from 0-255 to 0-100
//Step 3: Now get the current Speed (delay) value from the Core
api.getSparkVariable(device.id, "speed", "SVgetInitialSpeedValue");
}
break;
case "SVgetInitialSpeedValue":
if(response.responseValue != null) {
i_speed = (int)(Integer.parseInt(response.responseValue));
//Step 4: Get the list of modes from the Core
api.getSparkVariable(device.id, "modeList", "SVsetModeView");
}
break;
case "SVsetModeView":
if(response.responseValue != null) {
if(!(response.responseValue.equalsIgnoreCase("None"))) {
tvModeTitle.setText("Getting modes from Core");
tvModeValue.setText("");
int beginIdx = 0; //parsing index helper
int modeIdx = response.responseValue.indexOf(','); //parsing index helper
int colorNumIdx = response.responseValue.indexOf(',', modeIdx+1); //parsing index helper
int maxNumColors=0; //use this to help wipe out the unused color views
//Expect a string like this: "OFF,0,NORMAL,0,COLORALL,1,ZONE,4,etc..."
//Sequence is: "FUNCTION NAME 1,Number of Colors for Mode 1,FUNCTION NAME 2,Number of Colors for Mode 2,etc,"
//Sending command should have an ending comma, it makes this code easier
while(modeIdx != -1) {
String returnedMode = response.responseValue.substring(beginIdx, modeIdx);
int numOfColors = Integer.parseInt(response.responseValue.substring(modeIdx+1,colorNumIdx));
Item item = new Item(returnedMode, numOfColors, defaultColor, defaultColor, defaultColor, defaultColor, defaultColor, defaultColor);
mode.add(item);
if(numOfColors > maxNumColors) {
maxNumColors = numOfColors;
}
if(initialMode.equals(returnedMode)) {
thisItem = item; //set the current core selected mode by item
}
beginIdx = colorNumIdx+1;
modeIdx = response.responseValue.indexOf(',', beginIdx);
colorNumIdx = response.responseValue.indexOf(',', modeIdx+1);
}
ItemAdapter adapter = new ItemAdapter(globalContext, mode, maxNumColors);
// Attach the adapter to a ListView
listView = (ListView) Ui.findView(this, R.id.mode_list);
listView.setAdapter(adapter);
tvModeTitle.setText("Current Mode:");
tvModeValue.setText(initialMode);
showHeaderTitles(true);
//Step 5: Finish populating the view using the gathered data from the Core
completeOnViewCreated();
}
else {
showReadingError("Error reading from Core");
}
}
else {
showReadingError("No response from Core");
}
break;
case "SFsetMode":
if(response.responseValue != null) {
if(Integer.parseInt(response.responseValue) != -1) {
tvModeTitle.setText("Mode sent successfully");
tvModeValue.setText("");
}
}
break;
case "SFsetSpeedOrBrightness":
if(response.responseValue != null) {
if(Integer.parseInt(response.responseValue) == 1000) {
tvModeTitle.setText("No new values were sent");
tvModeValue.setText("");
}
else if(Integer.parseInt(response.responseValue) == 1001) {
tvModeTitle.setText("Brightness Updated");
tvModeValue.setText("");
}
else if(Integer.parseInt(response.responseValue) == 1002) {
tvModeTitle.setText("Speed Updated");
tvModeValue.setText("");
}
else {
tvModeTitle.setText("Not sure how I got here");
tvModeValue.setText("");
}
getVariable("mode", "SVshowCurrentMode");
}
break;
default :
log.d("no known responseType: " + response.responseType);
showReadingError("no known responseType: " + response.responseType);
break;
}
}
private void showReadingError(String errorMsg) {
Log.e("Error", errorMsg);
tvModeTitle.setText(errorMsg);
tvModeValue.setText("");
showProgress(R.id.progress_indicator, false);
showBoxTemp(false);
showHeaderTitles(false);
}
private class FunctionReceiver extends BroadcastReceiver {
IntentFilter getFilter() {
return new IntentFilter(ApiFacade.BROADCAST_FUNCTION_RESPONSE_RECEIVED);
}
@Override
public void onReceive(Context context, Intent intent) {
FunctionResponse response = intent.getParcelableExtra(ApiFacade.EXTRA_FUNCTION_RESPONSE);
onFunctionResponse(response);
}
}
private class NamingFailedReceiver extends BroadcastReceiver {
IntentFilter getFilter() {
return new IntentFilter(ApiFacade.BROADCAST_CORE_NAMING_REQUEST_COMPLETE);
}
@Override
public void onReceive(Context context, Intent intent) {
if ((ApiFacade.getResultCode(intent) != HttpStatus.SC_OK)) {
BaseActivity activity = (BaseActivity) getActivity();
activity.setCustomActionBarTitle(device.name);
DeviceState.updateSingleDevice(device, true);
}
}
}
private class NamingStartedReceiver extends BroadcastReceiver {
IntentFilter getFilter() {
return new IntentFilter(NamingHelper.BROADCAST_NEW_NAME_FOUND);
}
@Override
public void onReceive(Context context, Intent intent) {
String newName = intent.getStringExtra(NamingHelper.EXTRA_NEW_NAME);
if (newName != null) {
BaseActivity activity = (BaseActivity) getActivity();
activity.setCustomActionBarTitle(newName);
}
}
}
private class NamingCompleteReceiver extends BroadcastReceiver {
IntentFilter getFilter() {
return new IntentFilter(ApiFacade.BROADCAST_DEVICES_UPDATED);
}
@Override
public void onReceive(Context context, Intent intent) {
Device newDevice = DeviceState.getDeviceById(device.id);
if (newDevice == null) {
return;
}
// store previous name before switching out class level var
String previousName = (device.name == null)
? getString(R.string._unnamed_core_)
: device.name;
device = newDevice;
if (!previousName.equals(device.name) && device.name != null) {
BaseActivity activity = (BaseActivity) getActivity();
activity.setCustomActionBarTitle(device.name);
}
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}