1fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/* 2fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Copyright (C) 2012 The Android Open Source Project 3fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 4fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * you may not use this file except in compliance with the License. 6fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * You may obtain a copy of the License at 7fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 8fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * 10fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Unless required by applicable law or agreed to in writing, software 11fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * See the License for the specific language governing permissions and 14fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * limitations under the License. 15fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 16fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 17fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brownpackage com.android.server.display; 18fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 19bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport android.content.Context; 20bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport android.os.Handler; 21bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 22bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brownimport java.io.PrintWriter; 23bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 24fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/** 25848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * A display adapter makes zero or more display devices available to the system 26848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * and provides facilities for discovering when displays are connected or disconnected. 27fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * <p> 28fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * For now, all display adapters are registered in the system server but 29fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * in principle it could be done from other processes. 30bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * </p><p> 314ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Display adapters are guarded by the {@link DisplayManagerService.SyncRoot} lock. 32fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * </p> 33fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownabstract class DisplayAdapter { 354ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private final DisplayManagerService.SyncRoot mSyncRoot; 36bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final Context mContext; 37bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown private final Handler mHandler; 384ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private final Listener mListener; 394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown private final String mName; 40bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 41bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public static final int DISPLAY_DEVICE_EVENT_ADDED = 1; 42bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public static final int DISPLAY_DEVICE_EVENT_CHANGED = 2; 43bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public static final int DISPLAY_DEVICE_EVENT_REMOVED = 3; 44bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 4566692500344cab2f53cdb6ee1545c567fff7cb16Jeff Brown // Called with SyncRoot lock held. 464ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public DisplayAdapter(DisplayManagerService.SyncRoot syncRoot, 474ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown Context context, Handler handler, Listener listener, String name) { 484ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mSyncRoot = syncRoot; 49bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mContext = context; 504ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mHandler = handler; 514ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mListener = listener; 52bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mName = name; 53bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 54bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 564ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets the object that the display adapter should synchronize on when handling 574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * calls that come in from outside of the display manager service. 584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public final DisplayManagerService.SyncRoot getSyncRoot() { 604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown return mSyncRoot; 614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 624ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown 634ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 644ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets the display adapter's context. 654ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 66bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public final Context getContext() { 67bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mContext; 68bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 69bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 704ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown /** 714ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Gets a handler that the display adapter may use to post asynchronous messages. 724ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown */ 73bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public final Handler getHandler() { 74bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mHandler; 75bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 76bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 77fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown /** 78848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * Gets the display adapter name for debugging purposes. 79fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */ 80bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public final String getName() { 81bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown return mName; 82bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 83fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown 84848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown /** 85848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * Registers the display adapter with the display manager. 86848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown * 874ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The display adapter should register any built-in display devices as soon as possible. 884ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * The boot process will wait for the default display to be registered. 894ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Other display devices can be registered dynamically later. 90bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown */ 914ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void registerLocked() { 92bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 93bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 94bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown /** 95bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * Dumps the local state of the display adapter. 96bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown */ 974ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void dumpLocked(PrintWriter pw) { 98bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 99bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 100bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown /** 1014ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Sends a display device event to the display adapter listener asynchronously. 102848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown */ 1034ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown protected final void sendDisplayDeviceEventLocked( 1044ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown final DisplayDevice device, final int event) { 1054ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mHandler.post(new Runnable() { 1064ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown @Override 1074ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void run() { 1084ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mListener.onDisplayDeviceEvent(device, event); 1094ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown } 1104ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown }); 111bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 112bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown 113bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown /** 1144ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Sends a request to perform traversals. 115bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown */ 1164ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown protected final void sendTraversalRequestLocked() { 117bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown mHandler.post(new Runnable() { 118bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown @Override 119bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public void run() { 1204ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown mListener.onTraversalRequested(); 121bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 122bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown }); 123bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown } 124848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown 125848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown public interface Listener { 126bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown public void onDisplayDeviceEvent(DisplayDevice device, int event); 1274ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown public void onTraversalRequested(); 128848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown } 129fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown} 130