169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown/* 269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * Copyright (C) 2013 The Android Open Source Project 369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * 469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * you may not use this file except in compliance with the License. 669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * You may obtain a copy of the License at 769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * 869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * 1069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * Unless required by applicable law or agreed to in writing, software 1169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * See the License for the specific language governing permissions and 1469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * limitations under the License. 1569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown */ 1669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 1769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownpackage com.android.media.remotedisplay.test; 1869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 1969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport com.android.media.remotedisplay.RemoteDisplay; 2069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport com.android.media.remotedisplay.RemoteDisplayProvider; 2169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 2269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport android.app.Service; 2369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport android.content.Intent; 2469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport android.os.Handler; 2569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport android.os.IBinder; 2669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownimport android.util.Log; 2769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 2869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown/** 2969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown * Remote display provider implementation that publishes working routes. 3069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown */ 3169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brownpublic class RemoteDisplayProviderService extends Service { 3269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private static final String TAG = "RemoteDisplayProviderTest"; 3369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 3469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private Provider mProvider; 3569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 3669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 3769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public IBinder onBind(Intent intent) { 3869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (intent.getAction().equals(RemoteDisplayProvider.SERVICE_INTERFACE)) { 3969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mProvider == null) { 4069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mProvider = new Provider(); 4169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown return mProvider.getBinder(); 4269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 4369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 4469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown return null; 4569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 4669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 4769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown final class Provider extends RemoteDisplayProvider { 4869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay1; // variable volume 4969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay2; // fixed volume 5069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay3; // not available 5169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay4; // in use 5269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay5; // available but ignores request to connect 5369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay6; // available but never finishes connecting 5469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private RemoteDisplay mTestDisplay7; // blinks in and out of existence 5539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown private RemoteDisplay mTestDisplay8; // available but connecting attempt flakes out 5639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown private RemoteDisplay mTestDisplay9; // available but connection flakes out 5739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown private RemoteDisplay mTestDisplay10; // available and reconnects periodically 5869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 5969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private final Handler mHandler; 6069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private boolean mBlinking; 6169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 6269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public Provider() { 6369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown super(RemoteDisplayProviderService.this); 6469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mHandler = new Handler(getMainLooper()); 6569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 6669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 6769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 6869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void onDiscoveryModeChanged(int mode) { 6969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "onDiscoveryModeChanged: mode=" + mode); 7069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 7169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mode != DISCOVERY_MODE_NONE) { 7269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // When discovery begins, go find all of the routes. 7369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay1 == null) { 7469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1 = new RemoteDisplay("testDisplay1", 7569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 1 (variable)"); 7669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1.setDescription("Variable volume"); 7769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1.setStatus(RemoteDisplay.STATUS_AVAILABLE); 7869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1.setVolume(10); 7969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1.setVolumeHandling(RemoteDisplay.PLAYBACK_VOLUME_VARIABLE); 8069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay1.setVolumeMax(15); 8169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay1); 8269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 8369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay2 == null) { 8469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay2 = new RemoteDisplay("testDisplay2", 8569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 2 (fixed)"); 8669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay2.setDescription("Fixed volume"); 8769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay2.setStatus(RemoteDisplay.STATUS_AVAILABLE); 8869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay2); 8969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 9069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay3 == null) { 9169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay3 = new RemoteDisplay("testDisplay3", 9269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 3 (unavailable)"); 9369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay3.setDescription("Always unavailable"); 9469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay3.setStatus(RemoteDisplay.STATUS_NOT_AVAILABLE); 9569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay3); 9669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 9769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay4 == null) { 9869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay4 = new RemoteDisplay("testDisplay4", 9969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 4 (in-use)"); 10069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay4.setDescription("Always in-use"); 10169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay4.setStatus(RemoteDisplay.STATUS_IN_USE); 10269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay4); 10369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 10469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay5 == null) { 10569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay5 = new RemoteDisplay("testDisplay5", 10669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 5 (connect ignored)"); 10769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay5.setDescription("Ignores connect"); 10869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay5.setStatus(RemoteDisplay.STATUS_AVAILABLE); 10969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay5); 11069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 11169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay6 == null) { 11269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay6 = new RemoteDisplay("testDisplay6", 11369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 6 (connect hangs)"); 11469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay6.setDescription("Never finishes connecting"); 11569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay6.setStatus(RemoteDisplay.STATUS_AVAILABLE); 11669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay6); 11769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 11839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if (mTestDisplay8 == null) { 11939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay8 = new RemoteDisplay("testDisplay8", 12039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown "Test Display 8 (flaky when connecting)"); 12139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay8.setDescription("Aborts spontaneously while connecting"); 12239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay8.setStatus(RemoteDisplay.STATUS_AVAILABLE); 12339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown addDisplay(mTestDisplay8); 12439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 12539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if (mTestDisplay9 == null) { 12639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay9 = new RemoteDisplay("testDisplay9", 12739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown "Test Display 9 (flaky when connected)"); 12839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay9.setDescription("Aborts spontaneously while connected"); 12939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay9.setStatus(RemoteDisplay.STATUS_AVAILABLE); 13039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown addDisplay(mTestDisplay9); 13139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 13239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if (mTestDisplay10 == null) { 13339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay10 = new RemoteDisplay("testDisplay10", 13439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown "Test Display 10 (reconnects periodically)"); 13539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay10.setDescription("Reconnects spontaneously"); 13639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mTestDisplay10.setStatus(RemoteDisplay.STATUS_AVAILABLE); 13739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown addDisplay(mTestDisplay10); 13839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 13969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } else { 14069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // When discovery ends, go hide some of the routes we can't actually use. 14169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // This isn't something a normal route provider would do though. 14269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // The routes will usually stay published. 14369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay3 != null) { 14469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown removeDisplay(mTestDisplay3); 14569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay3 = null; 14669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 14769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay4 != null) { 14869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown removeDisplay(mTestDisplay4); 14969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay4 = null; 15069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 15169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 15269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 15369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // When active discovery is on, pretend there's a route that we can't quite 15469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // reach that blinks in and out of existence. 15569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mode == DISCOVERY_MODE_ACTIVE) { 15669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (!mBlinking) { 15769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mBlinking = true; 15869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mHandler.post(mBlink); 15969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 16069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } else { 16169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mBlinking = false; 16269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 16369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 16469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 16569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 16669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void onConnect(final RemoteDisplay display) { 16769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "onConnect: display.getId()=" + display.getId()); 16869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 16969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (display == mTestDisplay1 || display == mTestDisplay2) { 17069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 17139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 17269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mHandler.postDelayed(new Runnable() { 17369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 17469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void run() { 17569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if ((display == mTestDisplay1 || display == mTestDisplay2) 17669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown && display.getStatus() == RemoteDisplay.STATUS_CONNECTING) { 17769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTED); 17869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown updateDisplay(display); 17969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 18069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 18169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown }, 2000); 18239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } else if (display == mTestDisplay6 || display == mTestDisplay7) { 18369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown // never finishes connecting 18469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 18569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown updateDisplay(display); 18639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } else if (display == mTestDisplay8) { 18739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown // flakes out while connecting 18839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 18939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 19039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(new Runnable() { 19139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown @Override 19239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown public void run() { 19339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if ((display == mTestDisplay8) 19439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown && display.getStatus() == RemoteDisplay.STATUS_CONNECTING) { 19539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_AVAILABLE); 19639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 19739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 19839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 19939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown }, 2000); 20039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } else if (display == mTestDisplay9) { 20139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown // flakes out when connected 20239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 20339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 20439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(new Runnable() { 20539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown @Override 20639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown public void run() { 20739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if ((display == mTestDisplay9) 20839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown && display.getStatus() == RemoteDisplay.STATUS_CONNECTING) { 20939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTED); 21039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 21139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 21239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 21339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown }, 2000); 21439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(new Runnable() { 21539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown @Override 21639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown public void run() { 21739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if ((display == mTestDisplay9) 21839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown && display.getStatus() == RemoteDisplay.STATUS_CONNECTED) { 21939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_AVAILABLE); 22039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 22139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 22239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 22339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown }, 5000); 22439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } else if (display == mTestDisplay10) { 22539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 22639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 22739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(new Runnable() { 22839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown @Override 22939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown public void run() { 23039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if (display == mTestDisplay10) { 23139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown if (display.getStatus() == RemoteDisplay.STATUS_CONNECTING) { 23239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTED); 23339ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 23439ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(this, 7000); 23539ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } else if (display.getStatus() == RemoteDisplay.STATUS_CONNECTED) { 23639ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown display.setStatus(RemoteDisplay.STATUS_CONNECTING); 23739ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown updateDisplay(display); 23839ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown mHandler.postDelayed(this, 2000); 23939ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 24039ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 24139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown } 24239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown }, 2000); 24369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 24469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 24569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 24669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 24769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void onDisconnect(RemoteDisplay display) { 24869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "onDisconnect: display.getId()=" + display.getId()); 24969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 25069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (display == mTestDisplay1 || display == mTestDisplay2 25139ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown || display == mTestDisplay6 || display == mTestDisplay8 25239ad0e559896b45185429ea17cd12f18f7ae842cJeff Brown || display == mTestDisplay9 || display == mTestDisplay10) { 25369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setStatus(RemoteDisplay.STATUS_AVAILABLE); 25469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown updateDisplay(display); 25569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 25669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 25769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 25869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 25969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void onSetVolume(RemoteDisplay display, int volume) { 26069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "onSetVolume: display.getId()=" + display.getId() 26169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown + ", volume=" + volume); 26269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 26369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (display == mTestDisplay1) { 26469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setVolume(Math.max(0, Math.min(display.getVolumeMax(), volume))); 26569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown updateDisplay(display); 26669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 26769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 26869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 26969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 27069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void onAdjustVolume(RemoteDisplay display, int delta) { 27169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "onAdjustVolume: display.getId()=" + display.getId() 27269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown + ", delta=" + delta); 27369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 27469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (display == mTestDisplay1) { 27569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display.setVolume(Math.max(0, Math.min(display.getVolumeMax(), 27669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown display .getVolume() + delta))); 27769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown updateDisplay(display); 27869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 27969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 28069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 28169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 28269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void addDisplay(RemoteDisplay display) { 28369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "addDisplay: display=" + display); 28469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown super.addDisplay(display); 28569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 28669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 28769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 28869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void removeDisplay(RemoteDisplay display) { 28969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "removeDisplay: display=" + display); 29069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown super.removeDisplay(display); 29169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 29269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 29369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 29469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void updateDisplay(RemoteDisplay display) { 29569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown Log.d(TAG, "updateDisplay: display=" + display); 29669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown super.updateDisplay(display); 29769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 29869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown 29969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown private final Runnable mBlink = new Runnable() { 30069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown @Override 30169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown public void run() { 30269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mTestDisplay7 == null) { 30369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mBlinking) { 30469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay7 = new RemoteDisplay("testDisplay7", 30569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown "Test Display 7 (blinky)"); 30669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay7.setDescription("Comes and goes but can't connect"); 30769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay7.setStatus(RemoteDisplay.STATUS_AVAILABLE); 30869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown addDisplay(mTestDisplay7); 30969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mHandler.postDelayed(this, 7000); 31069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 31169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } else { 31269b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown removeDisplay(mTestDisplay7); 31369b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mTestDisplay7 = null; 31469b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown if (mBlinking) { 31569b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown mHandler.postDelayed(this, 4000); 31669b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 31769b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 31869b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 31969b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown }; 32069b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown } 32169b07161bebdb2c726e3a826c2268866f1a94517Jeff Brown} 322