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