· 6 years ago · Nov 13, 2018, 09:06 AM
1package com.uei.halo.wizard;
2
3import android.app.Activity;
4import android.app.Fragment;
5import android.app.FragmentManager;
6import android.app.FragmentTransaction;
7import android.graphics.Color;
8import android.os.Bundle;
9import android.support.annotation.Nullable;
10import android.view.KeyEvent;
11import android.view.View;
12import android.widget.TextView;
13import android.widget.Toast;
14
15import com.uei.halo.R;
16import com.uei.halo.utils.MyKeyEventListener;
17import com.uei.halo.wizard.AvailableLightsFragment;
18import com.uei.halo.wizard.fragments.BluetoothFragment;
19import com.uei.halo.wizard.BridgeFragment;
20import com.uei.halo.wizard.fragments.CameraFragment;
21import com.uei.halo.wizard.fragments.HdmiFragment;
22import com.uei.halo.wizard.fragments.HueFragment1;
23import com.uei.halo.wizard.fragments.IpDevicesFragment;
24import com.uei.halo.wizard.fragments.WifiFragment;
25import com.uei.halo.wizard.fragments.AvailableIpsFragment;
26import com.uei.halo.utils.Constants;
27import com.uei.halo.fragments.HueFragment;
28import android.os.Handler;
29import android.content.Intent;
30import com.uei.halo.DroidLogicTv;
31
32///////////////// philips hue //////////////
33import java.util.List;
34import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnection;
35import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnectionCallback;
36import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnectionType;
37import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateUpdatedCallback;
38import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateUpdatedEvent;
39import com.philips.lighting.hue.sdk.wrapper.connection.ConnectionEvent;
40import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscovery;
41import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscoveryCallback;
42import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscoveryResult;
43import com.philips.lighting.hue.sdk.wrapper.domain.Bridge;
44import com.philips.lighting.hue.sdk.wrapper.domain.BridgeBuilder;
45import com.philips.lighting.hue.sdk.wrapper.domain.BridgeState;
46import com.philips.lighting.hue.sdk.wrapper.domain.HueError;
47import com.philips.lighting.hue.sdk.wrapper.domain.ReturnCode;
48import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightPoint;
49import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightState;
50import com.philips.lighting.hue.sdk.wrapper.knownbridges.KnownBridge;
51import com.philips.lighting.hue.sdk.wrapper.knownbridges.KnownBridges;
52import com.philips.lighting.hue.sdk.wrapper.connection.BridgeResponseCallback;
53
54import android.graphics.Bitmap;
55import com.philips.lighting.hue.sdk.wrapper.domain.clip.ClipResponse;
56import com.philips.lighting.hue.sdk.wrapper.utilities.HueColor;
57
58import com.philips.lighting.hue.sdk.wrapper.domain.BridgeState;
59import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightPoint;
60import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightState;
61import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateCacheType;
62import com.philips.lighting.hue.sdk.wrapper.connection.HeartbeatManager;
63import com.uei.halo.hue.HueBridge;
64
65import java.util.Collections;
66import java.util.Comparator;
67import android.util.Log;
68import com.uei.halo.fragments.LightFragment;
69import android.widget.EditText;
70import android.app.AlertDialog;
71import android.widget.LinearLayout;
72import android.content.DialogInterface;
73////////////////// philips hue end //////////////////////////
74
75
76public class LaunchActivty extends Activity {
77 private TextView titleText, tab1, tab2, tab3, tab4, tab5, tab6, tab7, previousTv, nextTv;
78 Fragment fragment;
79 private boolean isChildFragmentAdded;
80 private boolean isTravesedThroughPrevious;
81 private static final String TAG = "LaunchActivity";
82
83///////////// philips hue //////////////
84 private Bridge bridge;
85 private BridgeDiscovery bridgeDiscovery;
86 private List<BridgeDiscoveryResult> bridgeDiscoveryResults;
87 int hueStatus = -1;
88int callingFrom = -1;
89 enum UIState {
90 Idle,
91 BridgeDiscoveryRunning,
92 BridgeDiscoveryResults,
93 Connecting,
94 Pushlinking,
95 Connected
96 }
97
98//////////////// philips hue end///////////////
99
100 @Override
101 protected void onCreate(@Nullable Bundle savedInstanceState) {
102 super.onCreate(savedInstanceState);
103 setContentView(R.layout.main_ui_layout);
104
105 initViews();
106 fragment = new BluetoothFragment();
107 loadFragment(fragment);
108 }
109
110
111 private void initViews() {
112 titleText = (TextView) findViewById(R.id.titleText);
113 tab1 = (TextView) findViewById(R.id.tab1);
114 tab2 = (TextView) findViewById(R.id.tab2);
115 tab3 = (TextView) findViewById(R.id.tab3);
116 tab4 = (TextView) findViewById(R.id.tab4);
117 tab5 = (TextView) findViewById(R.id.tab5);
118 tab6 = (TextView) findViewById(R.id.tab6);
119 tab7 = (TextView) findViewById(R.id.tab7);
120 previousTv = (TextView) findViewById(R.id.previousTv);
121 nextTv = (TextView) findViewById(R.id.nextTv);
122
123 previousTv.setVisibility(View.GONE);
124 tab1.setTextColor(Color.parseColor("#FFFFFF"));
125 }
126
127 /*** @return true if it is bridge fragment*/
128 private boolean isBridgeFragment() {
129 return (fragment != null && fragment instanceof BridgeFragment);
130 }
131
132 /*** @return true if it is bridge fragment*/
133 private boolean isAvailableLightsFragment() {
134 return (fragment != null && fragment instanceof AvailableLightsFragment);
135 }
136
137
138
139 public void setBtnControls(boolean wifiRegistered) {
140 if (wifiRegistered) {
141 previousTv.setVisibility(View.VISIBLE);
142 nextTv.setVisibility(View.VISIBLE);
143 } else {
144 previousTv.setVisibility(View.INVISIBLE);
145 nextTv.setVisibility(View.INVISIBLE);
146 }
147 }
148
149
150
151 @Override
152 public boolean onKeyDown(int keyCode, KeyEvent event) {
153 if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
154 if (isBridgeFragment() || isAvailableLightsFragment()) {
155 if (previousTv.isFocused()) {
156 //do nothing
157 } else if (nextTv.isFocused()) {
158 removeFooterFocus();
159 focusOnPrevious();
160 setTraveresedThroughPrevious(false);
161 } else {
162 removeFooterFocus();
163 passEventsToFragment(keyCode, event, false);
164 }
165
166
167 } else {
168 previousTv.setFocusable(true);
169 previousTv.setBackgroundResource(R.drawable.focusbg);
170 }
171 } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
172// Bridge fragment will have list items which has custom focus
173 if (isBridgeFragment() || isAvailableLightsFragment()
174 | isAvailableIpFragment()|| isManufacturersListFragment()
175 || isAvailableAppsFragment()) {
176 //removeFooterFocus();
177 passEventsToFragment(keyCode, event, false);
178 } else {
179 nextTv.setFocusable(true);
180 nextTv.setBackgroundResource(R.drawable.focusbg);
181 }
182
183 } else if (keyCode == 23 || keyCode == KeyEvent.KEYCODE_ENTER) {
184 // Toast.makeText(this, "Enter Pressed", Toast.LENGTH_LONG).show();
185 if (fragment != null) {
186// for last fragment next btn visibility
187 if (fragment instanceof BluetoothFragment) {
188 nextTv.setVisibility(View.VISIBLE);
189 previousTv.setVisibility(View.GONE);
190 } else if (isBridgeFragment() || isAvailableLightsFragment()
191 || isAvailableIpFragment() || isManufacturersListFragment()
192 || isAvailableAppsFragment()) {
193 passEventsToFragment(keyCode, event, false);
194 } else {
195 nextTv.setVisibility(View.VISIBLE);
196 previousTv.setVisibility(View.VISIBLE);
197 }
198 if (nextTv.isFocused()) {
199 if (fragment instanceof BluetoothFragment) {
200 fragment = new WifiFragment();
201 loadFragment(fragment);
202 setColorFilterTab(tab2);
203 } else if (fragment instanceof WifiFragment) {
204 fragment = new HdmiFragment();
205 loadFragment(fragment);
206 setColorFilterTab(tab3);
207 } else if (fragment instanceof HdmiFragment) {
208 removeFooterFocus();
209 fragment = new BridgeFragment();
210 loadFragment(fragment);
211 setColorFilterTab(tab4);
212 } else if (fragment instanceof AvailableIpsFragment) {
213 fragment = new ManufacturersListFragment();
214 loadFragment(fragment);
215 setColorFilterTab(tab5);
216 } else if (fragment instanceof ManufacturersListFragment) {
217 fragment = new CameraFragment();
218 loadFragment(fragment);
219 setColorFilterTab(tab6);
220 } else if (fragment instanceof AvailableAppsFragment) {
221 fragment = new CameraFragment();
222 loadFragment(fragment);
223 setColorFilterTab(tab6);
224 } else if (fragment instanceof CameraFragment) {
225 fragment = new HueFragment1();
226 loadFragment(fragment);
227 setColorFilterTab(tab7);
228
229 } else if (fragment instanceof HueFragment1) {
230 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
231 startActivity(i);
232 }
233
234
235 } else if (previousTv.isFocused()) {
236 if (fragment instanceof BluetoothFragment) {
237 } else if (fragment instanceof WifiFragment) {
238 fragment = new BluetoothFragment();
239 loadFragment(fragment);
240 setColorFilterTab(tab1);
241 removeFooterFocus();
242 } else if (fragment instanceof HdmiFragment) {
243 fragment = new WifiFragment();
244 loadFragment(fragment);
245 setColorFilterTab(tab2);
246 } else if (isBridgeFragment()) {
247 removeFooterFocus();
248 fragment = new HdmiFragment();
249 loadFragment(fragment);
250 setColorFilterTab(tab3);
251 } else if (fragment instanceof AvailableLightsFragment) {
252 loadBridgeFragment();
253 } else if (fragment instanceof AvailableIpsFragment) {
254 loadBridgeFragment();
255 } else if (fragment instanceof ManufacturersListFragment) {
256 fragment = new AvailableIpsFragment();
257 loadFragment(fragment);
258 setColorFilterTab(tab5);
259 } else if (fragment instanceof AvailableAppsFragment) {
260 fragment = new ManufacturersListFragment();
261 loadFragment(fragment);
262 setColorFilterTab(tab6);
263 } else if (fragment instanceof CameraFragment) {
264 fragment = new ManufacturersListFragment();
265 loadFragment(fragment);
266 setColorFilterTab(tab6);
267 } else if (fragment instanceof HueFragment1) {
268 fragment = new CameraFragment();
269 loadFragment(fragment);
270 setColorFilterTab(tab6);
271 }
272 }
273
274 }
275 } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
276 if (isBridgeFragment() || isAvailableLightsFragment()
277 || isAvailableIpFragment() ||
278 isManufacturersListFragment() || isAvailableAppsFragment()) {
279 //if previous button is focused
280 if (previousTv.isFocused()) {
281 clearFocusOnPreviousText();
282 passEventsToFragment(keyCode, event, true);
283 } else if (nextTv.isFocused()){
284 clearFocusOnNextText();
285 }else {
286 passEventsToFragment(keyCode, event, false);
287 }
288 }
289 } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
290 if (isBridgeFragment() || isAvailableLightsFragment()
291 || isAvailableIpFragment() || isManufacturersListFragment()
292 || isAvailableAppsFragment()) {
293 passEventsToFragment(keyCode, event, false);
294 }
295
296
297 }
298
299 return super.onKeyDown(keyCode, event);
300
301 }
302
303
304/*** @return true if it AvailableIpsFragment*/
305private boolean isAvailableIpFragment() {
306return (fragment != null && fragment instanceof AvailableIpsFragment);
307}
308
309 public void loadhdmiFragment() {
310 fragment = new HdmiFragment();
311 loadFragment(fragment);
312 setColorFilterTab(tab3);
313 }
314
315 public void loadIPDevicesFragment() {
316 removeFooterFocus();
317 previousTv.clearFocus();
318 previousTv.setFocusable(false);
319 previousTv.setBackground(null);
320 fragment = new AvailableIpsFragment();
321 loadFragment(fragment);
322 setColorFilterTab(tab5);
323 setTraveresedThroughPrevious(false);
324 }
325
326 public void loadBridgeFragment() {
327 clearFocusOnPreviousText();
328 removeFooterFocus();
329 fragment = new BridgeFragment();
330 loadFragment(fragment);
331 setColorFilterTab(tab4);
332 }
333
334 public void loadCameraFragment() {
335 removeFooterFocus();
336 clearFocusOnPreviousText();
337 fragment = new CameraFragment();
338 loadFragment(fragment);
339 setColorFilterTab(tab6);
340 setTraveresedThroughPrevious(false);
341 }
342
343 public void loadManufacturerFragment() {
344 removeFooterFocus();
345 clearFocusOnPreviousText();
346 fragment = new ManufacturersListFragment();
347 loadFragment(fragment);
348 setColorFilterTab(tab6);
349 setTraveresedThroughPrevious(false);
350 }
351
352
353 public void clearFocusOnPreviousText() {
354 previousTv.clearFocus();
355 previousTv.setFocusable(false);
356 previousTv.setBackground(null);
357 }
358
359 public void clearFocusOnNextText() {
360 nextTv.clearFocus();
361 nextTv.setFocusable(false);
362 nextTv.setBackground(null);
363 }
364
365
366
367
368
369
370
371 /**
372 * @return true if it AvailableIpsFragment
373 */
374 private boolean isAvailableIpFragment() {
375 return (fragment != null && fragment instanceof AvailableIpsFragment);
376 }
377
378 /**
379 * @return true if it ManufacturersListFragment
380 */
381 private boolean isManufacturersListFragment() {
382 return (fragment != null && fragment instanceof ManufacturersListFragment);
383 }
384
385 /**
386 * @return true if it ManufacturersListFragment
387 */
388 private boolean isAvailableAppsFragment() {
389 return (fragment != null && fragment instanceof AvailableAppsFragment);
390 }
391
392 /**
393 * pass key events to respective screens
394 *
395 * @param keyCode
396 * @param event
397 * @param shouldFocusLastItem
398 */
399 private void passEventsToFragment(int keyCode, KeyEvent event, boolean shouldFocusLastItem) {
400
401 if (fragment != null && fragment instanceof MyKeyEventListener) {
402 if (shouldFocusLastItem) {
403 if (fragment instanceof AvailableLightsFragment) {
404 ((AvailableLightsFragment) fragment).setFocuLastItem(true);
405 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
406 } else if (fragment instanceof BridgeFragment) {
407 ((BridgeFragment) fragment).setFocuLastItem(true);
408 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
409 } else if (fragment instanceof AvailableIpsFragment) {
410 ((AvailableIpsFragment) fragment).setFocuLastItem(true);
411 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
412 } else if (fragment instanceof ManufacturersListFragment) {
413 ((ManufacturersListFragment) fragment).setFocuLastItem(true);
414 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
415 } else if (fragment instanceof AvailableAppsFragment) {
416 ((AvailableAppsFragment) fragment).setFocuLastItem(true);
417 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
418 }
419 } else {
420 if (fragment instanceof AvailableLightsFragment) {
421 ((AvailableLightsFragment) fragment).setFocuLastItem(false);
422 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
423 } else if (fragment instanceof BridgeFragment) {
424 ((BridgeFragment) fragment).setFocuLastItem(false);
425 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
426 } else if (fragment instanceof AvailableIpsFragment) {
427 ((AvailableIpsFragment) fragment).setFocuLastItem(false);
428 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
429 } else if (fragment instanceof ManufacturersListFragment) {
430 ((ManufacturersListFragment) fragment).setFocuLastItem(false);
431 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
432 } else if (fragment instanceof AvailableAppsFragment) {
433 ((AvailableAppsFragment) fragment).setFocuLastItem(false);
434 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
435 }
436 }
437 }
438 }
439
440 private void setColorFilterTab(TextView v) {
441 tab1.setTextColor(Color.parseColor("#404040"));
442 tab2.setTextColor(Color.parseColor("#404040"));
443 tab3.setTextColor(Color.parseColor("#404040"));
444 tab4.setTextColor(Color.parseColor("#404040"));
445 tab5.setTextColor(Color.parseColor("#404040"));
446 tab6.setTextColor(Color.parseColor("#404040"));
447 tab7.setTextColor(Color.parseColor("#404040"));
448
449
450 tab1.setBackgroundResource(0);
451tab2.setBackgroundResource(0);
452tab3.setBackgroundResource(0);
453tab4.setBackgroundResource(0);
454tab5.setBackgroundResource(0);
455tab6.setBackgroundResource(0);
456tab7.setBackgroundResource(0);
457v.setTextColor(Color.parseColor("#FFFFFF"));
458v.setBackgroundResource(R.drawable.ic_circle_icon_a);
459 if (fragment instanceof BluetoothFragment) {
460 previousTv.setVisibility(View.GONE);
461 } else {
462 previousTv.setVisibility(View.VISIBLE);
463 }
464 }
465
466 private void loadFragment(Fragment fragment) {
467 removeFragment();
468 FragmentManager fm = getFragmentManager();
469 FragmentTransaction fragmentTransaction = fm.beginTransaction();
470 fragmentTransaction.add(R.id.frameLayout, fragment);
471 fragmentTransaction.commit();
472 }
473
474 public void removeFragment() {
475 if (getFragmentManager().findFragmentById(R.id.frameLayout) != null) {
476 getFragmentManager()
477 .beginTransaction().
478 remove(getFragmentManager().findFragmentById(R.id.frameLayout)).commit();
479 }
480 }
481
482 /**
483 * move focus to previous
484 */
485 public void focusOnPrevious() {
486 Handler handler = new Handler();
487 handler.postDelayed(new Runnable() {
488 @Override
489 public void run() {
490 previousTv.requestFocus();
491 previousTv.setFocusable(true);
492 previousTv.setBackgroundResource(R.drawable.focusbg);
493 }
494 }, 30);
495 }
496
497 /**
498 * move focus to previous
499 */
500 public void focusOnNext() {
501 nextTv.requestFocus();
502 nextTv.setFocusable(true);
503 nextTv.setBackgroundResource(R.drawable.focusbg);
504 }
505
506
507 /**
508 * remove the focus on the textviews
509 */
510 public void removeFooterFocus() {
511 if (nextTv.isFocused()) {
512 nextTv.setFocusable(false);
513 nextTv.clearFocus();
514 nextTv.setBackground(null);
515 } else if (previousTv.isFocused()) {
516 previousTv.setFocusable(false);
517 previousTv.clearFocus();
518 previousTv.setBackground(null);
519 }
520
521 }
522
523
524 /**
525 * @return true id nextTv is focused
526 */
527 public boolean isNextFocused() {
528 return (nextTv.isFocused());
529 }
530
531 /**
532 * @return true id previousTv is focused
533 */
534 public boolean isPreviousFocused() {
535 return (previousTv.isFocused());
536 }
537
538
539 public boolean isFooterFocused() {
540 if (nextTv.isFocused()) {
541 return true;
542 } else if (previousTv.isFocused()) {
543 return true;
544 }
545 return false;
546 }
547
548 /**
549 * a setter to know if user navigated to NEXT BUTTON from PREVIOUS BUTTON
550 *
551 * @param isTraveresedThroughPrevious
552 */
553 public void setTraveresedThroughPrevious(boolean isTraveresedThroughPrevious) {
554 this.isTravesedThroughPrevious = isTraveresedThroughPrevious;
555 }
556
557 public void navigateToAvailableLights(String s) {
558 fragment = new AvailableLightsFragment();
559 Bundle bundle = new Bundle();
560 bundle.putString(Constants.Keys.TITILE, s);
561 fragment.setArguments(bundle);
562 loadFragment(fragment);
563 setColorFilterTab(tab4);
564 removeFooterFocus();
565
566 }
567
568 public void navigateToAvailableApps(String s) {
569 fragment = new AvailableAppsFragment();
570 Bundle bundle = new Bundle();
571 bundle.putString(Constants.Keys.TITILE, s);
572 fragment.setArguments(bundle);
573 loadFragment(fragment);
574 setColorFilterTab(tab5);
575 removeFooterFocus();
576
577 }
578
579 public void navigateToAvailableIps(String s) {
580 fragment = new AvailableIpsFragment();
581 Bundle bundle = new Bundle();
582 bundle.putString(Constants.Keys.TITILE, s);
583 fragment.setArguments(bundle);
584 loadFragment(fragment);
585 setColorFilterTab(tab4);
586 removeFooterFocus();
587
588 }
589
590////////////// philips hue //////////////////////
591 public void initBridge(){
592 String bridgeIp = getLastUsedBridgeIp();
593 Constants.initScene();
594 if (bridgeIp == null) {
595 startBridgeDiscovery();
596 } else {
597 connectToBridge(bridgeIp , -1);
598 }
599 }
600
601 private String getLastUsedBridgeIp() {
602 List<KnownBridge> bridges = KnownBridges.getAll();
603
604 if (bridges.isEmpty()) {
605 return null;
606 }
607
608 return Collections.max(bridges, new Comparator<KnownBridge>() {
609 @Override
610 public int compare(KnownBridge a, KnownBridge b) {
611 return a.getLastConnected().compareTo(b.getLastConnected());
612 }
613 }).getIpAddress();
614 }
615
616 private void startBridgeDiscovery() {
617 disconnectFromBridge();
618 bridgeDiscovery = new BridgeDiscovery();
619 // ALL Include [UPNP, IPSCAN, NUPNP] but in some nets UPNP and NUPNP is not working properly
620 bridgeDiscovery.search(BridgeDiscovery.BridgeDiscoveryOption.ALL, bridgeDiscoveryCallback);
621 updateUI(UIState.BridgeDiscoveryRunning, "Scanning the network for hue bridges...");
622 }
623
624
625 private void stopBridgeDiscovery() {
626 if (bridgeDiscovery != null) {
627 bridgeDiscovery.stop();
628 bridgeDiscovery = null;
629 }
630 }
631
632
633 private BridgeDiscoveryCallback bridgeDiscoveryCallback = new BridgeDiscoveryCallback() {
634 @Override
635 public void onFinished(final List<BridgeDiscoveryResult> results, final ReturnCode returnCode) {
636 // Set to null to prevent stopBridgeDiscovery from stopping it
637 bridgeDiscovery = null;
638
639 runOnUiThread(new Runnable() {
640 @Override
641 public void run() {
642 if (returnCode == ReturnCode.SUCCESS) {
643 bridgeDiscoveryResults = results;
644
645 updateUI(UIState.BridgeDiscoveryResults, "Found " + results.size() + " bridge(s) in the network.");
646 } else if (returnCode == ReturnCode.STOPPED) {
647 Log.i(TAG, "Bridge discovery stopped.");
648 } else {
649 updateUI(UIState.Idle, "Error doing bridge discovery: " + returnCode);
650 }
651 }
652 });
653 }
654 };
655
656 private void connectToBridge(String bridgeIp, int _callingFrom) {
657 callingFrom = _callingFrom;
658 stopBridgeDiscovery();
659 disconnectFromBridge();
660
661 bridge = new BridgeBuilder("app name", "device name")
662 .setIpAddress(bridgeIp)
663 .setConnectionType(BridgeConnectionType.LOCAL)
664 .setBridgeConnectionCallback(bridgeConnectionCallback)
665 .addBridgeStateUpdatedCallback(bridgeStateUpdatedCallback)
666 .build();
667
668 ReturnCode code = bridge.connect();
669 HueBridge.getInstance().setBridge(bridge);
670
671
672 Log.d("RETURN CODE>..........", "" + code);
673
674
675 updateUI(UIState.Connecting, "Connecting to bridge...");
676 }
677
678
679 private void disconnectFromBridge() {
680 if (bridge != null) {
681 bridge.disconnect();
682 bridge = null;
683 }
684 }
685
686 private BridgeConnectionCallback bridgeConnectionCallback = new BridgeConnectionCallback() {
687 @Override
688 public boolean equals(Object obj) {
689 return super.equals(obj);
690 }
691
692 @Override
693 public void onConnectionEvent(BridgeConnection bridgeConnection, ConnectionEvent connectionEvent) {
694 Log.i(TAG, "Connection event: " + connectionEvent);
695
696 switch (connectionEvent) {
697 case LINK_BUTTON_NOT_PRESSED:
698 updateUI(UIState.Pushlinking, "Press the link button to authenticate.");
699 break;
700
701 case COULD_NOT_CONNECT:
702 updateUI(UIState.Connecting, "Could not connect.");
703 break;
704
705 case CONNECTION_LOST:
706 updateUI(UIState.Connecting, "Connection lost. Attempting to reconnect.");
707 break;
708
709 case CONNECTION_RESTORED:
710 updateUI(UIState.Connected, "Connection restored.");
711 break;
712
713 case DISCONNECTED:
714 // User-initiated disconnection.
715 break;
716
717 default:
718 break;
719 }
720 }
721
722 @Override
723 public void onConnectionError(BridgeConnection bridgeConnection, List<HueError> list) {
724 Log.d("ERROR >>>>>>>>>>", "onConnectionError");
725 for (HueError error : list) {
726 Log.e(TAG, "Connection error: " + error.toString());
727 }
728 }
729 };
730
731
732 private BridgeStateUpdatedCallback bridgeStateUpdatedCallback = new BridgeStateUpdatedCallback() {
733 @Override
734 public void onBridgeStateUpdated(Bridge bridge, BridgeStateUpdatedEvent bridgeStateUpdatedEvent) {
735 Log.i(TAG, "Bridge state updated event: " + bridgeStateUpdatedEvent);
736
737 switch (bridgeStateUpdatedEvent) {
738 case INITIALIZED:
739 // The bridge state was fully initialized for the first time.
740 // It is now safe to perform operations on the bridge state.
741
742 final BridgeConnection bridgeConnection = bridge.getBridgeConnection(BridgeConnectionType.LOCAL);
743 if (bridgeConnection == null) return;
744 final HeartbeatManager heartbeatManager = bridgeConnection.getHeartbeatManager();
745 if (heartbeatManager == null) return;
746 heartbeatManager.stopAllHeartbeats();
747 //
748 heartbeatManager.startHeartbeat(BridgeStateCacheType.LIGHTS_AND_GROUPS, 1000);
749
750 updateUI(UIState.Connected, "Connected!");
751
752
753 break;
754
755 case LIGHTS_AND_GROUPS:
756 // At least one light was updated.
757 HueBridge.getInstance().setBridge(bridge);
758 break;
759
760 default:
761 break;
762 }
763 }
764 };
765
766
767 private Fragment getLightFrag(){
768 Fragment f = getFragmentManager().findFragmentById(R.id.frameLayout);
769 if(f != null){
770 Fragment f1 = f.getChildFragmentManager().findFragmentById(R.id.frameLayout);
771 if (f1 != null && f1 instanceof LightFragment)
772 return f1;
773 }
774 return null;
775 }
776
777 private void showDialog(){
778 AlertDialog.Builder alertDialog = new AlertDialog.Builder(LaunchActivty.this);
779 alertDialog.setTitle("Bridge discovery");
780 alertDialog.setMessage("Please help with Philips Hue Bridge IP");
781
782 final EditText input = new EditText(LaunchActivty.this);
783 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
784 LinearLayout.LayoutParams.MATCH_PARENT,
785 LinearLayout.LayoutParams.MATCH_PARENT);
786 input.setLayoutParams(lp);
787 alertDialog.setView(input);
788 alertDialog.setIcon(R.drawable.ic_halo);
789
790 alertDialog.setPositiveButton("YES",
791 new DialogInterface.OnClickListener() {
792 public void onClick(DialogInterface dialog, int which) {
793
794 if(!input.getText().toString().equals(""))
795 connectToBridge(input.getText().toString(),-1);
796
797 }
798 });
799
800 alertDialog.setNegativeButton("NO",
801 new DialogInterface.OnClickListener() {
802 public void onClick(DialogInterface dialog, int which) {
803 dialog.cancel();
804 }
805 });
806
807 alertDialog.show();
808 }
809
810 private void updateUI(final UIState state, final String status) {
811
812 runOnUiThread(new Runnable() {
813 @Override
814 public void run() {
815
816 if (getLightFrag() != null)
817 ((LightFragment)getLightFrag()).showAlertMsg(status);
818 // launchTv.setText(status);
819 Log.i(TAG, "Status: " + status);
820 switch (state) {
821 case Idle:
822 break;
823 case BridgeDiscoveryRunning:
824 // lauchBridge();
825 break;
826 case BridgeDiscoveryResults:
827 if (bridgeDiscoveryResults.size() > 0) {
828// String bridgeIp = "192.168.1.12";
829 String bridgeIp = bridgeDiscoveryResults.get(0).getIP();
830 connectToBridge(bridgeIp, -1);
831 } else {
832 if (getLightFrag() != null)
833 ((LightFragment)getLightFrag()).showAlertMsg(status);
834 // launchTv.setText("No bridges Found");
835
836 runOnUiThread(new Runnable() {
837 @Override
838 public void run() {
839 showDialog();
840 }
841 });
842
843 // connectToBridge("192.168.1.6");
844 }
845 break;
846 case Connecting:
847
848 break;
849 case Pushlinking:
850 if (getLightFrag() != null)
851 ((LightFragment)getLightFrag()).showData(1);
852
853 break;
854 case Connected:
855 if (getLightFrag() != null)
856 ((LightFragment)getLightFrag()).showData(0);
857 break;
858 }
859
860 }
861 });
862 }
863
864
865
866///////////////// philips hue end //////////////
867}