1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.testing.testinput; 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.ComponentName; 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.ServiceConnection; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.IBinder; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.RemoteException; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.SystemClock; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.Log; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.testing.ChannelInfo; 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/** 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Connection for controlling the Test TV Input Service. 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * <p>Wrapped methods for calling {@link ITestInputControl} that waits for a binding and rethrows 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * {@link RemoteException} as {@link RuntimeException } are also included. 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class TestInputControlConnection implements ServiceConnection { 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final String TAG = "TestInputControlConn"; 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private static final int BOUND_CHECK_INTERVAL_MS = 10; 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private ITestInputControl mControl; 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onServiceConnected(ComponentName name, IBinder service) { 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mControl = ITestInputControl.Stub.asInterface(service); 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void onServiceDisconnected(ComponentName name) { 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Log.w(TAG, "TestInputControl service disconnected unexpectedly."); 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mControl = null; 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko /** 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Is the service currently connected. 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public boolean isBound() { 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return mControl != null; 55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko /** 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Update the state of the channel. 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * @param channel the channel to update. 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * @param data the new state for the channel. 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void updateChannelState(ChannelInfo channel, ChannelStateData data) { 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko waitUntilBound(); 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko try { 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mControl.updateChannelState(channel.originalNetworkId, data); 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } catch (RemoteException e) { 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko throw new RuntimeException(e); 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko /** 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Sleep until {@link #isBound()} is true; 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public void waitUntilBound() { 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko while (!isBound()) { 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko SystemClock.sleep(BOUND_CHECK_INTERVAL_MS); 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 81