/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.systemui.plugin.testoverlayplugin; import android.content.Context; import android.graphics.Rect; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver.InternalInsetsInfo; import android.view.ViewTreeObserver.OnComputeInternalInsetsListener; import com.android.systemui.plugins.OverlayPlugin; import com.android.systemui.plugins.annotations.Requires; @Requires(target = OverlayPlugin.class, version = OverlayPlugin.VERSION) public class SampleOverlayPlugin implements OverlayPlugin { private static final String TAG = "SampleOverlayPlugin"; private Context mPluginContext; private View mStatusBarView; private View mNavBarView; private boolean mInputSetup; private boolean mCollapseDesired; private float mStatusBarHeight; @Override public void onCreate(Context sysuiContext, Context pluginContext) { Log.d(TAG, "onCreate"); mPluginContext = pluginContext; } @Override public void onDestroy() { if (mInputSetup) { mStatusBarView.getViewTreeObserver().removeOnComputeInternalInsetsListener( onComputeInternalInsetsListener); } Log.d(TAG, "onDestroy"); if (mStatusBarView != null) { mStatusBarView.post( () -> ((ViewGroup) mStatusBarView.getParent()).removeView(mStatusBarView)); } if (mNavBarView != null) { mNavBarView.post(() -> ((ViewGroup) mNavBarView.getParent()).removeView(mNavBarView)); } } @Override public void setup(View statusBar, View navBar) { Log.d(TAG, "Setup"); int id = mPluginContext.getResources().getIdentifier("status_bar_height", "dimen", "android"); mStatusBarHeight = mPluginContext.getResources().getDimension(id); if (statusBar instanceof ViewGroup) { mStatusBarView = LayoutInflater.from(mPluginContext) .inflate(R.layout.colored_overlay, (ViewGroup) statusBar, false); ((ViewGroup) statusBar).addView(mStatusBarView); } if (navBar instanceof ViewGroup) { mNavBarView = LayoutInflater.from(mPluginContext) .inflate(R.layout.colored_overlay, (ViewGroup) navBar, false); ((ViewGroup) navBar).addView(mNavBarView); } } @Override public void setCollapseDesired(boolean collapseDesired) { mCollapseDesired = collapseDesired; } @Override public boolean holdStatusBarOpen() { if (!mInputSetup) { mInputSetup = true; mStatusBarView.getViewTreeObserver().addOnComputeInternalInsetsListener( onComputeInternalInsetsListener); } return true; } final OnComputeInternalInsetsListener onComputeInternalInsetsListener = inoutInfo -> { inoutInfo.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_REGION); if (mCollapseDesired) { inoutInfo.touchableRegion.set(new Rect(0, 0, 50000, (int) mStatusBarHeight)); } else { inoutInfo.touchableRegion.set(new Rect(0, 0, 50000, 50000)); } }; }