• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.keyguard;
18 
19 import static java.util.Collections.emptySet;
20 
21 import android.content.Context;
22 import android.os.Trace;
23 import android.util.AttributeSet;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.GridLayout;
27 
28 import com.android.systemui.R;
29 import com.android.systemui.statusbar.CrossFadeHelper;
30 
31 import java.io.PrintWriter;
32 import java.util.Set;
33 
34 /**
35  * View consisting of:
36  * - keyguard clock
37  * - media player (split shade mode only)
38  */
39 public class KeyguardStatusView extends GridLayout {
40     private static final boolean DEBUG = KeyguardConstants.DEBUG;
41     private static final String TAG = "KeyguardStatusView";
42 
43     private ViewGroup mStatusViewContainer;
44     private KeyguardClockSwitch mClockView;
45     private KeyguardSliceView mKeyguardSlice;
46     private View mMediaHostContainer;
47 
48     private float mDarkAmount = 0;
49 
KeyguardStatusView(Context context)50     public KeyguardStatusView(Context context) {
51         this(context, null, 0);
52     }
53 
KeyguardStatusView(Context context, AttributeSet attrs)54     public KeyguardStatusView(Context context, AttributeSet attrs) {
55         this(context, attrs, 0);
56     }
57 
KeyguardStatusView(Context context, AttributeSet attrs, int defStyle)58     public KeyguardStatusView(Context context, AttributeSet attrs, int defStyle) {
59         super(context, attrs, defStyle);
60     }
61 
62     @Override
onFinishInflate()63     protected void onFinishInflate() {
64         super.onFinishInflate();
65         mStatusViewContainer = findViewById(R.id.status_view_container);
66 
67         mClockView = findViewById(R.id.keyguard_clock_container);
68         if (KeyguardClockAccessibilityDelegate.isNeeded(mContext)) {
69             mClockView.setAccessibilityDelegate(new KeyguardClockAccessibilityDelegate(mContext));
70         }
71 
72         mKeyguardSlice = findViewById(R.id.keyguard_slice_view);
73 
74         mMediaHostContainer = findViewById(R.id.status_view_media_container);
75 
76         updateDark();
77     }
78 
setDarkAmount(float darkAmount)79     void setDarkAmount(float darkAmount) {
80         if (mDarkAmount == darkAmount) {
81             return;
82         }
83         mDarkAmount = darkAmount;
84         CrossFadeHelper.fadeOut(mMediaHostContainer, darkAmount);
85         updateDark();
86     }
87 
updateDark()88     void updateDark() {
89         mKeyguardSlice.setDarkAmount(mDarkAmount);
90     }
91 
92     /** Sets a translationY value on every child view except for the media view. */
setChildrenTranslationY(float translationY, boolean excludeMedia)93     public void setChildrenTranslationY(float translationY, boolean excludeMedia) {
94         setChildrenTranslationYExcluding(translationY,
95                 excludeMedia ? Set.of(mMediaHostContainer) : emptySet());
96     }
97 
98     /** Sets a translationY value on every view except for the views in the provided set. */
setChildrenTranslationYExcluding(float translationY, Set<View> excludedViews)99     private void setChildrenTranslationYExcluding(float translationY, Set<View> excludedViews) {
100         for (int i = 0; i < mStatusViewContainer.getChildCount(); i++) {
101             final View child = mStatusViewContainer.getChildAt(i);
102 
103             if (!excludedViews.contains(child)) {
104                 child.setTranslationY(translationY);
105             }
106         }
107     }
108 
dump(PrintWriter pw, String[] args)109     public void dump(PrintWriter pw, String[] args) {
110         pw.println("KeyguardStatusView:");
111         pw.println("  mDarkAmount: " + mDarkAmount);
112         if (mClockView != null) {
113             mClockView.dump(pw, args);
114         }
115         if (mKeyguardSlice != null) {
116             mKeyguardSlice.dump(pw, args);
117         }
118     }
119 
120     @Override
onMeasure(int widthMeasureSpec, int heightMeasureSpec)121     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
122         Trace.beginSection("KeyguardStatusView#onMeasure");
123         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
124         Trace.endSection();
125     }
126 }
127