LocalDisplayAdapter.java revision 64a55af0ac700baecb0877235eb42caac59a3560
164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown/*
264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Copyright (C) 2012 The Android Open Source Project
364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown *
464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * you may not use this file except in compliance with the License.
664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * You may obtain a copy of the License at
764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown *
864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown *
1064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Unless required by applicable law or agreed to in writing, software
1164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
1264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * See the License for the specific language governing permissions and
1464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * limitations under the License.
1564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown */
1664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
1764a55af0ac700baecb0877235eb42caac59a3560Jeff Brownpackage com.android.server.display;
1864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
1964a55af0ac700baecb0877235eb42caac59a3560Jeff Brownimport android.content.Context;
2064a55af0ac700baecb0877235eb42caac59a3560Jeff Brownimport android.os.IBinder;
2164a55af0ac700baecb0877235eb42caac59a3560Jeff Brownimport android.view.Surface;
2264a55af0ac700baecb0877235eb42caac59a3560Jeff Brownimport android.view.Surface.PhysicalDisplayInfo;
2364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
2464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown/**
2564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * A display adapter for the local displays managed by Surface Flinger.
2664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown */
2764a55af0ac700baecb0877235eb42caac59a3560Jeff Brownpublic final class LocalDisplayAdapter extends DisplayAdapter {
2864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    private final Context mContext;
2964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    private final LocalDisplayDevice mDefaultDisplayDevice;
3064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
3164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    public LocalDisplayAdapter(Context context) {
3264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        mContext = context;
3364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
3464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        IBinder token = Surface.getBuiltInDisplay(Surface.BUILT_IN_DISPLAY_ID_MAIN);
3564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        mDefaultDisplayDevice = new LocalDisplayDevice(token);
3664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    }
3764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
3864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    @Override
3964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    public String getName() {
4064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        return "LocalDisplayAdapter";
4164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    }
4264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
4364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    @Override
4464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    public void register(Listener listener) {
4564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        listener.onDisplayDeviceAdded(mDefaultDisplayDevice);
4664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    }
4764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
4864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    private final class LocalDisplayDevice extends DisplayDevice {
4964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        private final IBinder mDisplayToken;
5064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
5164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        public LocalDisplayDevice(IBinder token) {
5264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            mDisplayToken = token;
5364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        }
5464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
5564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        @Override
5664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        public DisplayAdapter getAdapter() {
5764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            return LocalDisplayAdapter.this;
5864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        }
5964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
6064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        @Override
6164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        public IBinder getDisplayToken() {
6264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            return mDisplayToken;
6364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        }
6464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
6564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        @Override
6664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        public void getInfo(DisplayDeviceInfo outInfo) {
6764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            PhysicalDisplayInfo phys = new PhysicalDisplayInfo();
6864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            Surface.getDisplayInfo(mDisplayToken, phys);
6964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown
7064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.name = mContext.getResources().getString(
7164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown                    com.android.internal.R.string.display_manager_built_in_display);
7264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.width = phys.width;
7364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.height = phys.height;
7464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.refreshRate = phys.refreshRate;
7564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.densityDpi = (int)(phys.density * 160 + 0.5f);
7664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.xDpi = phys.xDpi;
7764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown            outInfo.yDpi = phys.yDpi;
7864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown        }
7964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown    }
8064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown}
81