· 6 years ago · Jan 04, 2019, 10:26 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.LanFragment;
22import com.uei.halo.wizard.fragments.HdmiFragment;
23import com.uei.halo.wizard.fragments.HueFragment1;
24import com.uei.halo.wizard.fragments.IpDevicesFragment;
25import com.uei.halo.wizard.fragments.WifiFragment;
26import com.uei.halo.wizard.fragments.AvailableIpsFragment;
27import com.uei.halo.wizard.fragments.AvailableIpsForAppsFragment;
28import com.uei.halo.utils.Constants;
29import com.uei.halo.fragments.HueFragment;
30import android.os.Handler;
31import android.content.Intent;
32import com.uei.halo.DroidLogicTv;
33import com.uei.halo.wizard.fragments.AvailableAppsFragment;
34import com.uei.halo.wizard.fragments.ManufacturersListFragment;
35
36
37///////////////// philips hue //////////////
38import java.util.List;
39import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnection;
40import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnectionCallback;
41import com.philips.lighting.hue.sdk.wrapper.connection.BridgeConnectionType;
42import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateUpdatedCallback;
43import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateUpdatedEvent;
44import com.philips.lighting.hue.sdk.wrapper.connection.ConnectionEvent;
45import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscovery;
46import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscoveryCallback;
47import com.philips.lighting.hue.sdk.wrapper.discovery.BridgeDiscoveryResult;
48import com.philips.lighting.hue.sdk.wrapper.domain.Bridge;
49import com.philips.lighting.hue.sdk.wrapper.domain.BridgeBuilder;
50import com.philips.lighting.hue.sdk.wrapper.domain.BridgeState;
51import com.philips.lighting.hue.sdk.wrapper.domain.HueError;
52import com.philips.lighting.hue.sdk.wrapper.domain.ReturnCode;
53import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightPoint;
54import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightState;
55import com.philips.lighting.hue.sdk.wrapper.knownbridges.KnownBridge;
56import com.philips.lighting.hue.sdk.wrapper.knownbridges.KnownBridges;
57import com.philips.lighting.hue.sdk.wrapper.connection.BridgeResponseCallback;
58
59import android.graphics.Bitmap;
60import com.philips.lighting.hue.sdk.wrapper.domain.clip.ClipResponse;
61import com.philips.lighting.hue.sdk.wrapper.utilities.HueColor;
62
63import com.philips.lighting.hue.sdk.wrapper.domain.BridgeState;
64import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightPoint;
65import com.philips.lighting.hue.sdk.wrapper.domain.device.light.LightState;
66import com.philips.lighting.hue.sdk.wrapper.connection.BridgeStateCacheType;
67import com.philips.lighting.hue.sdk.wrapper.connection.HeartbeatManager;
68import com.uei.halo.hue.HueBridge;
69
70import java.util.Collections;
71import java.util.Comparator;
72import android.util.Log;
73import com.uei.halo.fragments.LightFragment;
74import android.widget.EditText;
75import android.app.AlertDialog;
76import android.widget.LinearLayout;
77import android.content.DialogInterface;
78import android.widget.FrameLayout;
79import com.uei.halo.models.QuicksetModel;
80////////////////// philips hue end //////////////////////////
81
82import com.uei.halo.database.DatabaseHelper;
83import com.uei.halo.database.DbBridgeConfigModel;
84import java.util.ArrayList;
85
86
87public class LaunchActivty extends Activity {
88 private TextView titleText, tab1, tab2, tab3, tab4, tab5, tab6, tab7, previousTv, nextTv;
89 Fragment fragment;
90 private boolean isChildFragmentAdded;
91 private boolean isTravesedThroughPrevious;
92 private static final String TAG = "LaunchActivity";
93
94///////////// philips hue //////////////
95 private Bridge bridge;
96 private BridgeDiscovery bridgeDiscovery;
97 private List<BridgeDiscoveryResult> bridgeDiscoveryResults;
98 int hueStatus = -1;
99int callingFrom = -1;
100FrameLayout frameLayout1,frameLayout ;
101 enum UIState {
102 Idle,
103 BridgeDiscoveryRunning,
104 BridgeDiscoveryResults,
105 Connecting,
106 Pushlinking,
107 Connected
108 }
109
110DatabaseHelper db;
111//////////////// philips hue end///////////////
112
113 @Override
114 protected void onCreate(@Nullable Bundle savedInstanceState) {
115 super.onCreate(savedInstanceState);
116 setContentView(R.layout.main_ui_layout);
117
118 db = new DatabaseHelper(this);
119 initViews();
120 fragment = new BluetoothFragment();
121 loadFragment(fragment);
122 }
123
124
125 private void initViews() {
126 titleText = (TextView) findViewById(R.id.titleText);
127 tab1 = (TextView) findViewById(R.id.tab1);
128 tab2 = (TextView) findViewById(R.id.tab2);
129 tab3 = (TextView) findViewById(R.id.tab3);
130 tab4 = (TextView) findViewById(R.id.tab4);
131 tab5 = (TextView) findViewById(R.id.tab5);
132 tab6 = (TextView) findViewById(R.id.tab6);
133 tab7 = (TextView) findViewById(R.id.tab7);
134 previousTv = (TextView) findViewById(R.id.previousTv);
135 nextTv = (TextView) findViewById(R.id.nextTv);
136frameLayout1 = (FrameLayout) findViewById(R.id.frameLayout1);
137frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
138
139 previousTv.setVisibility(View.GONE);
140 tab1.setTextColor(Color.parseColor("#FFFFFF"));
141 titleText.setText("Remote Setup");
142 }
143
144 /*** @return true if it is bridge fragment*/
145 private boolean isBridgeFragment() {
146 return (fragment != null && fragment instanceof BridgeFragment);
147 }
148
149 /*** @return true if it is bridge fragment*/
150 private boolean isAvailableLightsFragment() {
151 return (fragment != null && fragment instanceof AvailableLightsFragment);
152 }
153
154
155
156 public void setBtnControls(boolean wifiRegistered) {
157 if (wifiRegistered) {
158 previousTv.setVisibility(View.VISIBLE);
159 nextTv.setVisibility(View.VISIBLE);
160 } else {
161 previousTv.setVisibility(View.INVISIBLE);
162 nextTv.setVisibility(View.INVISIBLE);
163 }
164 }
165
166
167public void launchActivity(){
168 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
169 startActivity(i);
170 LaunchActivty.this.finish();
171}
172
173
174 @Override
175 public boolean onKeyDown(int keyCode, KeyEvent event) {
176
177 if(isHdmiFragment() && ((HdmiFragment)fragment).setUpStatus()){
178 return false;
179 }
180
181 else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
182 if (isBridgeFragment() || isAvailableLightsFragment() || isAvailableIpFragment()|| isManufacturersListFragment()
183 || isAvailableAppsFragment() ) {
184 if (previousTv.isFocused()) {
185 //do nothing
186 } else if (nextTv.isFocused()) {
187 removeFooterFocus();
188 focusOnPrevious();
189 setTraveresedThroughPrevious(false);
190 } else {
191 removeFooterFocus();
192 passEventsToFragment(keyCode, event, false);
193 }
194
195
196 } else {
197 previousTv.setFocusable(true);
198 previousTv.setBackgroundResource(R.drawable.focusbg);
199 }
200 } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
201 Log.i("Size","KeyEvent.KEYCODE_DPAD_RIGHT launch");
202// Bridge fragment will have list items which has custom focus
203 if (isBridgeFragment() || isAvailableLightsFragment()
204 || isAvailableIpFragment()|| isManufacturersListFragment()
205 || isAvailableAppsFragment()) {
206 //removeFooterFocus();
207 Log.i("Size","KeyEvent.KEYCODE_DPAD_RIGHT if condition");
208 passEventsToFragment(keyCode, event, false);
209 } else {
210 nextTv.setFocusable(true);
211 nextTv.setBackgroundResource(R.drawable.focusbg);
212 }
213
214 } else if (keyCode == 23 || keyCode == KeyEvent.KEYCODE_ENTER) {
215Log.i("fragment class : ",""+fragment.getClass());
216 // Toast.makeText(this, "Enter Pressed", Toast.LENGTH_LONG).show();
217 if (fragment != null) {
218// for last fragment next btn visibility
219 if (fragment instanceof BluetoothFragment) {
220 nextTv.setVisibility(View.VISIBLE);
221 previousTv.setVisibility(View.GONE);
222 } else if (isBridgeFragment() || isAvailableLightsFragment()
223 || isAvailableIpFragment() || isManufacturersListFragment()
224 || isAvailableAppsFragment()) {
225 passEventsToFragment(keyCode, event, false);
226 } else {
227 nextTv.setVisibility(View.VISIBLE);
228 previousTv.setVisibility(View.VISIBLE);
229 }
230
231
232
233 if (nextTv.isFocused()) {
234
235 if (fragment instanceof BluetoothFragment) {
236 removeFooterFocus();
237 fragment = new LanFragment();
238 loadFragment(fragment);
239 setColorFilterTab(tab2);
240 } else if (fragment instanceof WifiFragment) {
241 removeFooterFocus();
242 fragment = new HdmiFragment();
243 loadFragment(fragment);
244 setColorFilterTab(tab3);
245 }else if (fragment instanceof LanFragment) {
246 removeFooterFocus();
247 fragment = new HdmiFragment();
248 loadFragment(fragment);
249 setColorFilterTab(tab3);
250 }
251 else if (fragment instanceof HdmiFragment) {
252 removeFooterFocus();
253 fragment = new AvailableIpsForAppsFragment();
254 loadFragment(fragment);
255 setColorFilterTab(tab4);
256 } else if (fragment instanceof AvailableIpsForAppsFragment || fragment instanceof AvailableAppsFragment) {
257 removeFooterFocus();
258 fragment = new BridgeFragment();
259 loadFragment(fragment);
260 setColorFilterTab(tab5);
261 }
262 else if (fragment instanceof BridgeFragment
263 ||fragment instanceof HueFragment ||
264 fragment instanceof com.uei.halo.fragments.LightFragment||
265 fragment instanceof com.uei.halo.wizard.AvailableLightsFragment) {
266
267 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
268 startActivity(i);
269 LaunchActivty.this.finish();
270
271 }
272 /*else if (fragment instanceof AvailableAppsFragment) {
273 // fragment = new LanFragment();
274 // loadFragment(fragment);
275 // setColorFilterTab(tab7);
276 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
277 startActivity(i);
278 LaunchActivty.this.finish();
279
280 }*/
281
282// else if (fragment instanceof LanFragment) {
283 // Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
284 // startActivity(i);
285 // }
286 /*else if (fragment instanceof AvailableAppsFragment) {
287 // fragment = new CameraFragment();
288 // loadFragment(fragment);
289 setColorFilterTab(tab6);
290 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
291 startActivity(i);
292 } else if (fragment instanceof CameraFragment) {
293 fragment = new HueFragment1();
294 loadFragment(fragment);
295 setColorFilterTab(tab7);
296
297 } else if (fragment instanceof HueFragment1) {
298 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
299 startActivity(i);
300 }*/
301
302
303 } else if (previousTv.isFocused()) {
304 if (fragment instanceof BluetoothFragment) {
305 } else if (fragment instanceof WifiFragment) {
306 fragment = new BluetoothFragment();
307 loadFragment(fragment);
308 setColorFilterTab(tab1);
309 removeFooterFocus();
310 } else if (fragment instanceof LanFragment) {
311 fragment = new BluetoothFragment();
312 loadFragment(fragment);
313 setColorFilterTab(tab1);
314 }
315 else if (fragment instanceof HdmiFragment) {
316 fragment = new LanFragment();
317 loadFragment(fragment);
318 setColorFilterTab(tab2);
319 } else (fragment instanceof AvailableIpsForAppsFragment ){
320 removeFooterFocus();
321 fragment = new HdmiFragment();
322 loadFragment(fragment);
323 setColorFilterTab(tab3);
324 } else if (fragment instanceof AvailableAppsFragment){
325 removeFooterFocus();
326 fragment = new AvailableIpsForAppsFragment();
327 loadFragment(fragment);
328 setColorFilterTab(tab4);
329 }else if (isBridgeFragment()){
330 removeFooterFocus();
331 fragment = new AvailableIpsForAppsFragment();
332 loadFragment(fragment);
333 setColorFilterTab(tab4);
334 } else if (fragment instanceof com.uei.halo.fragments.LightFragment||
335 fragment instanceof com.uei.halo.wizard.AvailableLightsFragment){
336 removeFooterFocus();
337 fragment = new BridgeFragment();
338 loadFragment(fragment);
339 setColorFilterTab(tab5);
340
341 }
342
343
344 /*else if (isBridgeFragment()||
345 fragment instanceof HueFragment ||
346 fragment instanceof com.uei.halo.fragments.LightFragment||
347 fragment instanceof com.uei.halo.wizard.AvailableLightsFragment) {
348 removeFooterFocus();
349 fragment = new AvailableIpsForAppsFragment();
350 loadFragment(fragment);
351 setColorFilterTab(tab4);
352 } else if (fragment instanceof AvailableIpsForAppsFragment
353 || fragment instanceof AvailableAppsFragment) {
354 removeFooterFocus();
355 fragment = new HdmiFragment();
356 loadFragment(fragment);
357 setColorFilterTab(tab3);
358
359 }
360
361 else if (fragment instanceof AvailableAppsFragment) {
362 fragment = new ManufacturersListFragment();
363 loadFragment(fragment);
364 setColorFilterTab(tab6);
365 } else if (fragment instanceof CameraFragment) {
366 fragment = new ManufacturersListFragment();
367 loadFragment(fragment);
368 setColorFilterTab(tab6);
369 } else if (fragment instanceof HueFragment1) {
370 fragment = new CameraFragment();
371 loadFragment(fragment);
372 setColorFilterTab(tab6);
373 }*/
374 }
375
376 }
377 } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
378 if (isBridgeFragment() || isAvailableLightsFragment()
379 || isAvailableIpFragment() ||
380 isManufacturersListFragment() || isAvailableAppsFragment()) {
381 //if previous button is focused
382 if (previousTv.isFocused()) {
383 clearFocusOnPreviousText();
384 passEventsToFragment(keyCode, event, true);
385 } else if (nextTv.isFocused()){
386 clearFocusOnNextText();
387 }else {
388 passEventsToFragment(keyCode, event, false);
389 }
390 }
391 } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
392 if (isBridgeFragment() || isAvailableLightsFragment()
393 || isAvailableIpFragment() || isManufacturersListFragment()
394 || isAvailableAppsFragment()) {
395 passEventsToFragment(keyCode, event, false);
396 }
397
398
399 } else if (keyCode == KeyEvent.KEYCODE_BACK) {
400
401 Log.i("Event","back passing 111 ");
402
403
404 if (getFragmentManager().findFragmentById(R.id.frameLayout) != null) {
405 fragment = getFragmentManager().findFragmentById(R.id.frameLayout);
406 }
407 Log.i("Event","back passing 111 "+fragment.getClass());
408
409 if (fragment instanceof HueFragment) {
410 Log.i("Event","back passing ");
411 removeFooterFocus();
412 fragment = new BridgeFragment();
413 loadFragment(fragment);
414 setColorFilterTab(tab4);
415 return true;
416 } else {
417 LaunchActivty.this.finish();
418 }
419
420 // passEventsToFragment(keyCode, event, false);
421 }
422
423 return super.onKeyDown(keyCode, event);
424
425 }
426
427
428public void launchAvailableIpsFragmentForHdmi(){
429 fragment = new AvailableIpsFragment();
430Bundle bundle = new Bundle();
431 bundle.putString("FROM_HDMI", "from_hdmi");
432fragment.setArguments(bundle);
433 loadFragmentNew(fragment,true);
434 setColorFilterTab(tab3);
435}
436
437
438public void launchHueFragment(String s){
439HueFragment fragment = new HueFragment();
440Bundle bundle = new Bundle();
441bundle.putString(Constants.Keys.TITILE, s);
442fragment.setArguments(bundle);
443loadFragment(fragment);
444//fragment.show(getFragmentManager(),"");
445setColorFilterTab(tab4);
446removeFooterFocus();
447}
448
449 public void loadhdmiFragment() {
450 fragment = new HdmiFragment();
451 loadFragment(fragment);
452 setColorFilterTab(tab3);
453 }
454
455
456 /**
457 * gtm
458 * <p>
459 * sets the title dynamically based on the fragment
460 */
461 private void setTitleText() {
462 if (fragment instanceof BluetoothFragment) {
463 titleText.setText("Remote Setup");
464 }else if (fragment instanceof WifiFragment) {
465 titleText.setText("Connection Setup");
466 }else if (fragment instanceof LanFragment) {
467 titleText.setText("Connection Setup");
468 }
469else if (fragment instanceof HdmiFragment) {
470 titleText.setText("Device Setup");
471 }else if (fragment instanceof BridgeFragment) {
472 titleText.setText("Smart Lights");
473 }else if (fragment instanceof LightFragment || fragment instanceof AvailableLightsFragment) {
474 titleText.setText("Smart Lights");
475 }else if (fragment instanceof AvailableIpsFragment) {
476 titleText.setText("Device Setup");
477 }else if (fragment instanceof AvailableAppsFragment) {
478 titleText.setText("Apps");
479 }else if (fragment instanceof AvailableIpsForAppsFragment) {
480 titleText.setText("Apps");
481 }
482 }
483
484
485 public void loadIPDevicesFragment() {
486
487 if(isAvailableLightsFragment()){
488 ArrayList<Boolean> isLightSelectedList = ((AvailableLightsFragment)fragment).mAdapter.getSelectedList();
489 List<LightPoint> mLightsList = ((AvailableLightsFragment)fragment).mAdapter.getLightsList();
490
491 for(int i = 0; i < isLightSelectedList.size() ; i++){
492 if(isLightSelectedList.get(i)){
493 DbBridgeConfigModel model = new DbBridgeConfigModel();
494 model.setId(i);
495 model.setBrdigeName(((AvailableLightsFragment)fragment).getBridgeName());
496 model.setLightsCount(isLightSelectedList.size());
497 model.setLightName(mLightsList.get(i).getName());
498 if(i==0)
499 model.setBridgeIcon(R.drawable.halo_32_hue1);
500 else if(i ==1)
501 model.setBridgeIcon(R.drawable.halo_33_hue2);
502 else
503 model.setBridgeIcon(R.drawable.halo_34_hue3);
504
505 model.setBridgeIp("");
506 db.addBridgeConfig(model);
507 }
508 }
509 }
510
511 removeFooterFocus();
512 previousTv.clearFocus();
513 previousTv.setFocusable(false);
514 previousTv.setBackground(null);
515
516 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
517 startActivity(i);
518 LaunchActivty.this.finish();
519
520 /* fragment = new AvailableIpsFragment();
521 loadFragment(fragment);
522 setColorFilterTab(tab5);*/
523
524 setTraveresedThroughPrevious(false);
525 }
526
527 public void loadBridgeFragment() {
528 clearFocusOnPreviousText();
529 removeFooterFocus();
530 fragment = new BridgeFragment();
531 loadFragment(fragment);
532 setColorFilterTab(tab5);
533
534 }
535
536 public void loadCameraFragment() {
537
538 // Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
539 // startActivity(i);
540
541 removeFooterFocus();
542 clearFocusOnPreviousText();
543 fragment = new BridgeFragment();
544 loadFragment(fragment);
545 setColorFilterTab(tab5);
546 setTraveresedThroughPrevious(false);
547
548 }
549
550 public void loadManufacturerFragment() {
551 removeFooterFocus();
552 clearFocusOnPreviousText();
553 fragment = new AvailableIpsForAppsFragment();
554 loadFragment(fragment);
555 setColorFilterTab(tab4);
556 setTraveresedThroughPrevious(false);
557 }
558
559
560 public void clearFocusOnPreviousText() {
561 previousTv.clearFocus();
562 previousTv.setFocusable(false);
563 previousTv.setBackground(null);
564 }
565
566 public void clearFocusOnNextText() {
567 nextTv.clearFocus();
568 nextTv.setFocusable(false);
569 nextTv.setBackground(null);
570 }
571
572
573
574
575
576
577
578 /**
579 * @return true if it AvailableIpsFragment
580 */
581 private boolean isAvailableIpFragment() {
582 return (fragment != null && fragment instanceof AvailableIpsFragment);
583 }
584
585 /**
586 * @return true if it ManufacturersListFragment
587 */
588 private boolean isManufacturersListFragment() {
589 return (fragment != null && fragment instanceof AvailableIpsForAppsFragment);
590 }
591
592 /**
593 * @return true if it ManufacturersListFragment
594 */
595 private boolean isAvailableAppsFragment() {
596 return (fragment != null && fragment instanceof AvailableAppsFragment);
597 }
598
599 /**
600 * @return true if it ManufacturersListFragment
601 */
602 private boolean isHdmiFragment() {
603 return (fragment != null && fragment instanceof HdmiFragment);
604 }
605
606
607 /**
608 * pass key events to respective screens
609 *
610 * @param keyCode
611 * @param event
612 * @param shouldFocusLastItem
613 */
614 private void passEventsToFragment(int keyCode, KeyEvent event, boolean shouldFocusLastItem) {
615
616 if (fragment != null && fragment instanceof MyKeyEventListener) {
617 if (shouldFocusLastItem) {
618 if (fragment instanceof AvailableLightsFragment) {
619 ((AvailableLightsFragment) fragment).setFocuLastItem(true);
620 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
621 } else if (fragment instanceof BridgeFragment) {
622 ((BridgeFragment) fragment).setFocuLastItem(true);
623 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
624 } else if (fragment instanceof AvailableIpsFragment) {
625 Log.i("Size","KeyEvent.KEYCODE_DPAD_RIGHT if condition AvailableIpsFragment");
626 ((AvailableIpsFragment) fragment).setFocuLastItem(true);
627 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
628 } else if (fragment instanceof AvailableIpsForAppsFragment) {
629 ((AvailableIpsForAppsFragment) fragment).setFocuLastItem(true);
630 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
631 } else if (fragment instanceof AvailableAppsFragment) {
632 ((AvailableAppsFragment) fragment).setFocuLastItem(true);
633 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
634 }
635 } else {
636 if (fragment instanceof AvailableLightsFragment) {
637 ((AvailableLightsFragment) fragment).setFocuLastItem(false);
638 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
639 } else if (fragment instanceof BridgeFragment) {
640 ((BridgeFragment) fragment).setFocuLastItem(false);
641 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
642 } else if (fragment instanceof AvailableIpsFragment) {
643 Log.i("Size","KeyEvent.KEYCODE_DPAD_RIGHT else AvailableIpsFragment");
644 ((AvailableIpsFragment) fragment).setFocuLastItem(false);
645 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
646 } else if (fragment instanceof AvailableIpsForAppsFragment) {
647 ((AvailableIpsForAppsFragment) fragment).setFocuLastItem(false);
648 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
649 } else if (fragment instanceof AvailableAppsFragment) {
650 ((AvailableAppsFragment) fragment).setFocuLastItem(false);
651 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
652 } else if (fragment instanceof HueFragment) {
653 Log.i("Event","back passing ");
654 ((MyKeyEventListener) fragment).onKeyDown(keyCode, event);
655
656 }
657 }
658 }
659 }
660
661 private void setColorFilterTab(TextView v) {
662 tab1.setTextColor(Color.parseColor("#404040"));
663 tab2.setTextColor(Color.parseColor("#404040"));
664 tab3.setTextColor(Color.parseColor("#404040"));
665 tab4.setTextColor(Color.parseColor("#404040"));
666 tab5.setTextColor(Color.parseColor("#404040"));
667 tab6.setTextColor(Color.parseColor("#404040"));
668 tab7.setTextColor(Color.parseColor("#404040"));
669
670
671tab1.setBackgroundResource(0);
672tab2.setBackgroundResource(0);
673tab3.setBackgroundResource(0);
674tab4.setBackgroundResource(0);
675tab5.setBackgroundResource(0);
676tab6.setBackgroundResource(0);
677tab7.setBackgroundResource(0);
678v.setTextColor(Color.parseColor("#FFFFFF"));
679v.setBackgroundResource(R.drawable.ic_circle_icon_a);
680 if (fragment instanceof BluetoothFragment) {
681 previousTv.setVisibility(View.GONE);
682 } else {
683 previousTv.setVisibility(View.VISIBLE);
684 }
685 }
686
687 private void loadFragmentNew(Fragment fragment, boolean isBakcStack) {
688 // removeFragment();
689 frameLayout.setVisibility(View.GONE);
690 FragmentManager fm = getFragmentManager();
691 FragmentTransaction fragmentTransaction = fm.beginTransaction();
692 fragmentTransaction.add(R.id.frameLayout1, fragment);
693 // fragmentTransaction.addToBackStack(null);
694 fragmentTransaction.commit();
695 }
696
697 private void loadFragment(Fragment fragment) {
698 setTitleText();
699 removeFragment();
700 FragmentManager fm = getFragmentManager();
701 FragmentTransaction fragmentTransaction = fm.beginTransaction();
702 /*if(fragment instanceof HueFragment){
703 fragmentTransaction.addToBackStack("Hue Fragment");
704 }else{
705 removeFragment();
706 }*/
707 fragmentTransaction.add(R.id.frameLayout, fragment);
708 fragmentTransaction.commit();
709 }
710
711 public void removeFragment() {
712 if (getFragmentManager().findFragmentById(R.id.frameLayout) != null) {
713 getFragmentManager()
714 .beginTransaction().
715 remove(getFragmentManager().findFragmentById(R.id.frameLayout)).commit();
716 }
717 }
718
719
720public void getRokoDataForHdmi(final QuicksetModel item){
721
722 if (getFragmentManager().findFragmentById(R.id.frameLayout1) != null) {
723 getFragmentManager()
724 .beginTransaction().
725 remove(getFragmentManager().findFragmentById(R.id.frameLayout1)).commit();
726 }
727 frameLayout.setVisibility(View.VISIBLE);
728 frameLayout1.setVisibility(View.GONE);
729
730 fragment = getFragmentManager().findFragmentById(R.id.frameLayout);
731
732 Log.d("isHdmiFragment()", ""+isHdmiFragment()+ " " +fragment.getClass());
733 if(isHdmiFragment()){
734 ((HdmiFragment)fragment).setRokuData();
735}
736
737}
738
739
740 /**
741 * move focus to previous
742 */
743 public void focusOnPrevious() {
744
745 previousTv.requestFocus();
746 previousTv.setFocusable(true);
747 previousTv.setBackgroundResource(R.drawable.focusbg);
748
749 /*Handler handler = new Handler();
750 handler.postDelayed(new Runnable() {
751 @Override
752 public void run() {
753
754 }
755 }, 30);*/
756
757 }
758
759 /**
760 * move focus to previous
761 */
762 public void focusOnNext() {
763 nextTv.requestFocus();
764 nextTv.setFocusable(true);
765 nextTv.setBackgroundResource(R.drawable.focusbg);
766 }
767
768
769 /**
770 * remove the focus on the textviews
771 */
772 public void removeFooterFocus() {
773 if (nextTv.isFocused()) {
774 nextTv.setFocusable(false);
775 nextTv.clearFocus();
776 nextTv.setBackground(null);
777 } else if (previousTv.isFocused()) {
778 previousTv.setFocusable(false);
779 previousTv.clearFocus();
780 previousTv.setBackground(null);
781 }
782
783 }
784
785
786 /**
787 * @return true id nextTv is focused
788 */
789 public boolean isNextFocused() {
790 return (nextTv.isFocused());
791 }
792
793 /**
794 * @return true id previousTv is focused
795 */
796 public boolean isPreviousFocused() {
797 return (previousTv.isFocused());
798 }
799
800
801 public boolean isFooterFocused() {
802 if (nextTv.isFocused()) {
803 return true;
804 } else if (previousTv.isFocused()) {
805 return true;
806 }
807 return false;
808 }
809
810 /**
811 * a setter to know if user navigated to NEXT BUTTON from PREVIOUS BUTTON
812 *
813 * @param isTraveresedThroughPrevious
814 */
815 public void setTraveresedThroughPrevious(boolean isTraveresedThroughPrevious) {
816 this.isTravesedThroughPrevious = isTraveresedThroughPrevious;
817 }
818
819 public void navigateToAvailableLights(String s) {
820
821
822
823 fragment = new AvailableLightsFragment();
824 Bundle bundle = new Bundle();
825 bundle.putString(Constants.Keys.TITILE, s);
826 fragment.setArguments(bundle);
827 loadFragment(fragment);
828 setColorFilterTab(tab3);
829 removeFooterFocus();
830
831
832 }
833
834 public void navigateToAvailableApps(String s, String id) {
835 fragment = new AvailableAppsFragment();
836 Bundle bundle = new Bundle();
837 bundle.putString(Constants.Keys.TITILE, s);
838 bundle.putString("DEVICE_ID", id);
839 fragment.setArguments(bundle);
840 loadFragment(fragment);
841 setColorFilterTab(tab4);
842 removeFooterFocus();
843
844 }
845
846 public void navigateToAvailableIps(String s) {
847 /* fragment = new AvailableIpsFragment();
848 Bundle bundle = new Bundle();
849 bundle.putString(Constants.Keys.TITILE, s);
850 bundle.putString("FROM_HDMI", "not_from_hdmi");
851 fragment.setArguments(bundle);
852 loadFragment(fragment);
853 setColorFilterTab(tab3);
854 removeFooterFocus();*/
855
856 Intent i = new Intent(LaunchActivty.this, DroidLogicTv.class);
857 startActivity(i);
858 LaunchActivty.this.finish();
859
860 }
861
862////////////// philips hue //////////////////////
863 public void initBridge(){
864 String bridgeIp = getLastUsedBridgeIp();
865 Constants.initScene();
866 if (bridgeIp == null) {
867 startBridgeDiscovery();
868 } else {
869 connectToBridge(bridgeIp , -1);
870 }
871 }
872
873 private String getLastUsedBridgeIp() {
874 List<KnownBridge> bridges = KnownBridges.getAll();
875
876 if (bridges.isEmpty()) {
877 return null;
878 }
879
880 return Collections.max(bridges, new Comparator<KnownBridge>() {
881 @Override
882 public int compare(KnownBridge a, KnownBridge b) {
883 return a.getLastConnected().compareTo(b.getLastConnected());
884 }
885 }).getIpAddress();
886 }
887
888 private void startBridgeDiscovery() {
889 disconnectFromBridge();
890 bridgeDiscovery = new BridgeDiscovery();
891 // ALL Include [UPNP, IPSCAN, NUPNP] but in some nets UPNP and NUPNP is not working properly
892 bridgeDiscovery.search(BridgeDiscovery.BridgeDiscoveryOption.ALL, bridgeDiscoveryCallback);
893 updateUI(UIState.BridgeDiscoveryRunning, "Scanning the network for hue bridges...");
894 }
895
896
897 private void stopBridgeDiscovery() {
898 if (bridgeDiscovery != null) {
899 bridgeDiscovery.stop();
900 bridgeDiscovery = null;
901 }
902 }
903
904
905 private BridgeDiscoveryCallback bridgeDiscoveryCallback = new BridgeDiscoveryCallback() {
906 @Override
907 public void onFinished(final List<BridgeDiscoveryResult> results, final ReturnCode returnCode) {
908 // Set to null to prevent stopBridgeDiscovery from stopping it
909 bridgeDiscovery = null;
910
911 runOnUiThread(new Runnable() {
912 @Override
913 public void run() {
914 if (returnCode == ReturnCode.SUCCESS) {
915 bridgeDiscoveryResults = results;
916
917 updateUI(UIState.BridgeDiscoveryResults, "Found " + results.size() + " bridge(s) in the network.");
918 } else if (returnCode == ReturnCode.STOPPED) {
919 Log.i(TAG, "Bridge discovery stopped.");
920 } else {
921 updateUI(UIState.Idle, "Error doing bridge discovery: " + returnCode);
922 }
923 }
924 });
925 }
926 };
927
928
929 private void connectToBridge(String bridgeIp, int _callingFrom) {
930 callingFrom = _callingFrom;
931 stopBridgeDiscovery();
932 disconnectFromBridge();
933
934 bridge = new BridgeBuilder("app name", "device name")
935 .setIpAddress(bridgeIp)
936 .setConnectionType(BridgeConnectionType.LOCAL)
937 .setBridgeConnectionCallback(bridgeConnectionCallback)
938 .addBridgeStateUpdatedCallback(bridgeStateUpdatedCallback)
939 .build();
940
941 ReturnCode code = bridge.connect();
942 HueBridge.getInstance().setBridge(bridge);
943
944
945 Log.d("RETURN CODE>..........", "" + code);
946
947
948 updateUI(UIState.Connecting, "Connecting to bridge...");
949 }
950
951
952 private void disconnectFromBridge() {
953 if (bridge != null) {
954 bridge.disconnect();
955 bridge = null;
956 }
957 }
958
959 private BridgeConnectionCallback bridgeConnectionCallback = new BridgeConnectionCallback() {
960 @Override
961 public boolean equals(Object obj) {
962 return super.equals(obj);
963 }
964
965 @Override
966 public void onConnectionEvent(BridgeConnection bridgeConnection, ConnectionEvent connectionEvent) {
967 Log.i(TAG, "Connection event: " + connectionEvent);
968
969 switch (connectionEvent) {
970 case LINK_BUTTON_NOT_PRESSED:
971 updateUI(UIState.Pushlinking, "Press the link button to authenticate.");
972 break;
973
974 case COULD_NOT_CONNECT:
975 updateUI(UIState.Connecting, "Could not connect.");
976 break;
977
978 case CONNECTION_LOST:
979 updateUI(UIState.Connecting, "Connection lost. Attempting to reconnect.");
980 break;
981
982 case CONNECTION_RESTORED:
983 updateUI(UIState.Connected, "Connection restored.");
984 break;
985
986 case DISCONNECTED:
987 // User-initiated disconnection.
988 break;
989
990 default:
991 break;
992 }
993 }
994
995 @Override
996 public void onConnectionError(BridgeConnection bridgeConnection, List<HueError> list) {
997 Log.d("ERROR >>>>>>>>>>", "onConnectionError");
998 for (HueError error : list) {
999 Log.e(TAG, "Connection error: " + error.toString());
1000 }
1001 }
1002 };
1003
1004
1005 private BridgeStateUpdatedCallback bridgeStateUpdatedCallback = new BridgeStateUpdatedCallback() {
1006 @Override
1007 public void onBridgeStateUpdated(Bridge bridge, BridgeStateUpdatedEvent bridgeStateUpdatedEvent) {
1008 Log.i(TAG, "Bridge state updated event: " + bridgeStateUpdatedEvent);
1009
1010 switch (bridgeStateUpdatedEvent) {
1011 case INITIALIZED:
1012 // The bridge state was fully initialized for the first time.
1013 // It is now safe to perform operations on the bridge state.
1014
1015 final BridgeConnection bridgeConnection = bridge.getBridgeConnection(BridgeConnectionType.LOCAL);
1016 if (bridgeConnection == null) return;
1017 final HeartbeatManager heartbeatManager = bridgeConnection.getHeartbeatManager();
1018 if (heartbeatManager == null) return;
1019 heartbeatManager.stopAllHeartbeats();
1020 //
1021 heartbeatManager.startHeartbeat(BridgeStateCacheType.LIGHTS_AND_GROUPS, 1000);
1022
1023 updateUI(UIState.Connected, "Connected!");
1024
1025
1026 break;
1027
1028 case LIGHTS_AND_GROUPS:
1029 // At least one light was updated.
1030 HueBridge.getInstance().setBridge(bridge);
1031 break;
1032
1033 default:
1034 break;
1035 }
1036 }
1037 };
1038
1039
1040 private Fragment getLightFrag(){
1041 Fragment f = getFragmentManager().findFragmentById(R.id.frameLayout);
1042 if(f != null){
1043 Fragment f1 = f.getChildFragmentManager().findFragmentById(R.id.frameLayout);
1044 if (f1 != null && f1 instanceof LightFragment)
1045 return f1;
1046 }
1047 return null;
1048 }
1049
1050 private void showDialog(){
1051
1052 if(!getWindow().getDecorView().getRootView().isShown())
1053 return;
1054
1055 AlertDialog.Builder alertDialog = new AlertDialog.Builder(LaunchActivty.this);
1056 alertDialog.setTitle("Bridge discovery");
1057 alertDialog.setMessage("Please help with Philips Hue Bridge IP");
1058
1059 final EditText input = new EditText(LaunchActivty.this);
1060 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
1061 LinearLayout.LayoutParams.MATCH_PARENT,
1062 LinearLayout.LayoutParams.MATCH_PARENT);
1063 input.setLayoutParams(lp);
1064 alertDialog.setView(input);
1065 alertDialog.setIcon(R.drawable.ic_halo);
1066
1067 alertDialog.setPositiveButton("YES",
1068 new DialogInterface.OnClickListener() {
1069 public void onClick(DialogInterface dialog, int which) {
1070
1071 if(!input.getText().toString().equals(""))
1072 connectToBridge(input.getText().toString(),-1);
1073
1074 }
1075 });
1076
1077 alertDialog.setNegativeButton("NO",
1078 new DialogInterface.OnClickListener() {
1079 public void onClick(DialogInterface dialog, int which) {
1080 dialog.cancel();
1081 }
1082 });
1083
1084 alertDialog.show();
1085 }
1086
1087 private void updateUI(final UIState state, final String status) {
1088
1089 runOnUiThread(new Runnable() {
1090 @Override
1091 public void run() {
1092
1093 if (getLightFrag() != null)
1094 ((LightFragment)getLightFrag()).showAlertMsg(status);
1095 // launchTv.setText(status);
1096 Log.i(TAG, "Status: " + status);
1097 switch (state) {
1098 case Idle:
1099 break;
1100 case BridgeDiscoveryRunning:
1101 // lauchBridge();
1102 break;
1103 case BridgeDiscoveryResults:
1104 if (bridgeDiscoveryResults.size() > 0) {
1105// String bridgeIp = "192.168.1.12";
1106 String bridgeIp = bridgeDiscoveryResults.get(0).getIP();
1107 connectToBridge(bridgeIp, -1);
1108 } else {
1109 if (getLightFrag() != null)
1110 ((LightFragment)getLightFrag()).showAlertMsg(status);
1111 // launchTv.setText("No bridges Found");
1112
1113 runOnUiThread(new Runnable() {
1114 @Override
1115 public void run() {
1116 if(fragment instanceof HueFragment) {
1117 showDialog();
1118 }
1119 }
1120 });
1121
1122 // connectToBridge("192.168.1.6");
1123 }
1124 break;
1125 case Connecting:
1126
1127 break;
1128 case Pushlinking:
1129 if (getLightFrag() != null)
1130 ((LightFragment)getLightFrag()).showData(1);
1131
1132 break;
1133 case Connected:
1134 if (getLightFrag() != null)
1135 ((LightFragment)getLightFrag()).showData(0);
1136 break;
1137 }
1138
1139 }
1140 });
1141 }
1142
1143
1144//For Wifi fragment to launch from LAN settings
1145public void launchWifiFragment(){
1146 removeFooterFocus();
1147 fragment = new WifiFragment();
1148 loadFragment(fragment);
1149 setColorFilterTab(tab2);
1150}
1151
1152
1153///////////////// philips hue end //////////////
1154}