| /* |
| * Copyright (C) 2019 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.settings.gestures; |
| |
| import android.content.Context; |
| import android.content.res.TypedArray; |
| import android.graphics.PixelFormat; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.view.WindowManager; |
| import android.widget.ImageView; |
| import android.widget.LinearLayout; |
| |
| import com.android.settings.R; |
| |
| /** |
| * A linear layout containing the left and right location indicators. |
| */ |
| public class BackGestureIndicatorView extends LinearLayout { |
| private ViewGroup mLayout; |
| private ImageView mLeftIndicator; |
| private ImageView mRightIndicator; |
| private BackGestureIndicatorDrawable mLeftDrawable; |
| private BackGestureIndicatorDrawable mRightDrawable; |
| |
| public BackGestureIndicatorView(Context context) { |
| super(context); |
| |
| LayoutInflater factory = LayoutInflater.from(context); |
| mLayout = (ViewGroup) factory.inflate(R.layout.back_gesture_indicator_container, |
| this, false); |
| |
| if (mLayout == null) { |
| return; |
| } |
| |
| addView(mLayout); |
| |
| mLeftDrawable = new BackGestureIndicatorDrawable(context, false); |
| mRightDrawable = new BackGestureIndicatorDrawable(context, true); |
| |
| mLeftIndicator = mLayout.findViewById(R.id.indicator_left); |
| mRightIndicator = mLayout.findViewById(R.id.indicator_right); |
| |
| mLeftIndicator.setImageDrawable(mLeftDrawable); |
| mRightIndicator.setImageDrawable(mRightDrawable); |
| |
| int visibility = getSystemUiVisibility() |
| | View.SYSTEM_UI_FLAG_IMMERSIVE |
| | View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
| | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
| | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
| | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
| | View.SYSTEM_UI_FLAG_FULLSCREEN; |
| |
| TypedArray a = context.obtainStyledAttributes(new int[] { |
| android.R.attr.windowLightNavigationBar, |
| android.R.attr.windowLightStatusBar}); |
| if (a.getBoolean(0, false)) { |
| visibility |= View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; |
| } |
| if (a.getBoolean(1, false)) { |
| visibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; |
| } |
| a.recycle(); |
| |
| setSystemUiVisibility(visibility); |
| } |
| |
| public void setIndicatorWidth(int width, boolean leftIndicator) { |
| BackGestureIndicatorDrawable indicator = leftIndicator ? mLeftDrawable : mRightDrawable; |
| indicator.setWidth(width); |
| } |
| |
| public WindowManager.LayoutParams getLayoutParams( |
| WindowManager.LayoutParams parentWindowAttributes) { |
| int copiedFlags = (parentWindowAttributes.flags |
| & WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); |
| final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, |
| ViewGroup.LayoutParams.MATCH_PARENT, |
| WindowManager.LayoutParams.TYPE_APPLICATION, |
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED |
| | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
| | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
| | copiedFlags, |
| PixelFormat.TRANSLUCENT); |
| |
| lp.setTitle("BackGestureIndicatorView"); |
| lp.token = getContext().getActivityToken(); |
| return lp; |
| } |
| } |