18b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer/* 28b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * Copyright (c) 2017, The Android Open Source Project 38b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * 48b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * Licensed under the Apache License, Version 2.0 (the "License"); 58b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * you may not use this file except in compliance with the License. 68b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * You may obtain a copy of the License at 78b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * 88b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * http://www.apache.org/licenses/LICENSE-2.0 98b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * 108b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * Unless required by applicable law or agreed to in writing, software 118b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * distributed under the License is distributed on an "AS IS" BASIS, 128b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * See the License for the specific language governing permissions and 148b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * limitations under the License. 158b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer */ 168b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerpackage com.android.car.hvac.ui; 178b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 188b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerimport android.content.Context; 198b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerimport android.util.AttributeSet; 208b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerimport android.util.DisplayMetrics; 218b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerimport android.view.WindowManager; 228b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerimport android.widget.FrameLayout; 238b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 248b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer/** 258b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * Mostly a hack. The system ui change methods on View or even the listeners don't get 268b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * called reliably, it seems like the framework is caching drawn views for performance 278b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * reasons. Instead we make this class which is a framelayout that must be match_parent 288b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * along both dimensions. This way we have this view that gets asked to be laid out 298b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * every time the screen size changes, which we can then use to compute whether the 308b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer * system ui is visible or not. 318b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer */ 328b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyerpublic class SystemUiObserver extends FrameLayout { 338b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer private Listener mListener; 348b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer private final DisplayMetrics mDisplayMetrics = new DisplayMetrics(); 358b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer // Assuming that android always starts up with systemui visible. 368b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer private boolean mVisible = true; 378b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 388b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer { 398b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 408b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer wm.getDefaultDisplay().getRealMetrics(mDisplayMetrics); 418b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 428b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 438b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public SystemUiObserver(Context context) { 448b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer super(context); 458b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 468b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 478b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public SystemUiObserver(Context context, AttributeSet attrs) { 488b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer super(context, attrs); 498b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 508b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 518b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public SystemUiObserver(Context context, AttributeSet attrs, int defStyleAttr) { 528b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer super(context, attrs, defStyleAttr); 538b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 548b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 558b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer @Override 568b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public void onLayout(boolean changed, int left, int top, int right, int bottom) { 578b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer boolean visible = !(bottom == mDisplayMetrics.heightPixels); 588b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer if (visible != mVisible && mListener != null) { 598b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer mListener.onSystemUiVisibilityChange(visible); 608b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 618b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer mVisible = visible; 628b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer super.onLayout(changed, left, top, right, bottom); 638b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 648b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 658b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public void setListener(Listener listener) { 668b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer mListener = listener; 678b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 688b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer 698b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer public interface Listener { 708b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer void onSystemUiVisibilityChange(boolean visible); 718b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer } 728b34c31cff85f2f4678817595ab33f274d2d76bfRakesh Iyer} 73