HeadlessDisplayAdapter.java revision 77aebfdbae489c3712ae3f9bca29d01fb1f09dc2
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
19848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brownimport android.content.Context;
204ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownimport android.os.Handler;
21908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackbornimport android.util.DisplayMetrics;
22908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn
23fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown/**
24fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown * Provides a fake default display for headless systems.
25bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * <p>
264ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown * Display adapters are guarded by the {@link DisplayManagerService.SyncRoot} lock.
27bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown * </p>
28fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown */
294ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brownfinal class HeadlessDisplayAdapter extends DisplayAdapter {
30bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown    private static final String TAG = "HeadlessDisplayAdapter";
31848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown
324ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown    public HeadlessDisplayAdapter(DisplayManagerService.SyncRoot syncRoot,
334ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown            Context context, Handler handler, Listener listener) {
344ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown        super(syncRoot, context, handler, listener, TAG);
35848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown    }
36848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown
37848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown    @Override
384ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown    public void registerLocked() {
394ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown        super.registerLocked();
404ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown        sendDisplayDeviceEventLocked(new HeadlessDisplayDevice(), DISPLAY_DEVICE_EVENT_ADDED);
41848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown    }
42848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown
43848c2dc93b6795e171f3dd6f64ea0be65e2762caJeff Brown    private final class HeadlessDisplayDevice extends DisplayDevice {
444ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown        private DisplayDeviceInfo mInfo;
454ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown
46bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown        public HeadlessDisplayDevice() {
47bd6e1500aedc5461e832f69e76341bff0e55fa2bJeff Brown            super(HeadlessDisplayAdapter.this, null);
4864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        }
4964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
5064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        @Override
514ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown        public DisplayDeviceInfo getDisplayDeviceInfoLocked() {
524ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown            if (mInfo == null) {
534ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo = new DisplayDeviceInfo();
544ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.name = getContext().getResources().getString(
554ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                        com.android.internal.R.string.display_manager_built_in_display_name);
564ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.width = 640;
574ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.height = 480;
584ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.refreshRate = 60;
594ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.densityDpi = DisplayMetrics.DENSITY_DEFAULT;
604ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.xDpi = 160;
614ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.yDpi = 160;
624ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown                mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
6377aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown                        | DisplayDeviceInfo.FLAG_SECURE
6477aebfdbae489c3712ae3f9bca29d01fb1f09dc2Jeff Brown                        | DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS;
65d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown                mInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
664ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown            }
674ed8fe75e1dde1a2b9576f3862aecc5a572c56b5Jeff Brown            return mInfo;
68fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown        }
69fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown    }
70fa25bf5382467b1018bd9af7f1cb30a23d7d59f7Jeff Brown}
71