OSDN Git Service

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.
[android-x86/frameworks-base.git] / packages / SystemUI / src / com / android / systemui / statusbar / phone / ButtonDispatcher.java
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14
15 package com.android.systemui.statusbar.phone;
16
17 import android.graphics.drawable.Drawable;
18 import android.view.View;
19 import android.widget.ImageView;
20
21 import com.android.systemui.statusbar.policy.KeyButtonView;
22
23 import java.util.ArrayList;
24
25 /**
26  * Dispatches common view calls to multiple views.  This is used to handle
27  * multiples of the same nav bar icon appearing.
28  */
29 public class ButtonDispatcher {
30
31     private final ArrayList<View> mViews = new ArrayList<>();
32
33     private final int mId;
34
35     private View.OnClickListener mClickListener;
36     private View.OnTouchListener mTouchListener;
37     private View.OnLongClickListener mLongClickListener;
38     private Boolean mLongClickable;
39     private Integer mAlpha;
40     private Integer mVisibility = -1;
41     private int mImageResource = -1;
42     private Drawable mImageDrawable;
43     private View mCurrentView;
44
45     public ButtonDispatcher(int id) {
46         mId = id;
47     }
48
49     void clear() {
50         mViews.clear();
51     }
52
53     void addView(View view) {
54         mViews.add(view);
55         view.setOnClickListener(mClickListener);
56         view.setOnTouchListener(mTouchListener);
57         view.setOnLongClickListener(mLongClickListener);
58         if (mLongClickable != null) {
59             view.setLongClickable(mLongClickable);
60         }
61         if (mAlpha != null) {
62             view.setAlpha(mAlpha);
63         }
64         if (mVisibility != null) {
65             view.setVisibility(mVisibility);
66         }
67         if (mImageResource > 0) {
68             ((ImageView) view).setImageResource(mImageResource);
69         } else if (mImageDrawable != null) {
70             ((ImageView) view).setImageDrawable(mImageDrawable);
71         }
72     }
73
74     public int getId() {
75         return mId;
76     }
77
78     public int getVisibility() {
79         return mVisibility != null ? mVisibility : View.VISIBLE;
80     }
81
82     public float getAlpha() {
83         return mAlpha != null ? mAlpha : 1;
84     }
85
86     public void setImageDrawable(Drawable drawable) {
87         mImageDrawable = drawable;
88         mImageResource = -1;
89         final int N = mViews.size();
90         for (int i = 0; i < N; i++) {
91             ((ImageView) mViews.get(i)).setImageDrawable(mImageDrawable);
92         }
93     }
94
95     public void setImageResource(int resource) {
96         mImageResource = resource;
97         mImageDrawable = null;
98         final int N = mViews.size();
99         for (int i = 0; i < N; i++) {
100             ((ImageView) mViews.get(i)).setImageResource(mImageResource);
101         }
102     }
103
104     public void setVisibility(int visibility) {
105         if (mVisibility == visibility) return;
106         mVisibility = visibility;
107         final int N = mViews.size();
108         for (int i = 0; i < N; i++) {
109             mViews.get(i).setVisibility(mVisibility);
110         }
111     }
112
113     public void abortCurrentGesture() {
114         // This seems to be an instantaneous thing, so not going to persist it.
115         final int N = mViews.size();
116         for (int i = 0; i < N; i++) {
117             ((KeyButtonView) mViews.get(i)).abortCurrentGesture();
118         }
119     }
120
121     public void setAlpha(int alpha) {
122         mAlpha = alpha;
123         final int N = mViews.size();
124         for (int i = 0; i < N; i++) {
125             mViews.get(i).setAlpha(alpha);
126         }
127     }
128
129     public void setOnClickListener(View.OnClickListener clickListener) {
130         mClickListener = clickListener;
131         final int N = mViews.size();
132         for (int i = 0; i < N; i++) {
133             mViews.get(i).setOnClickListener(mClickListener);
134         }
135     }
136
137     public void setOnTouchListener(View.OnTouchListener touchListener) {
138         mTouchListener = touchListener;
139         final int N = mViews.size();
140         for (int i = 0; i < N; i++) {
141             mViews.get(i).setOnTouchListener(mTouchListener);
142         }
143     }
144
145     public void setLongClickable(boolean isLongClickable) {
146         mLongClickable = isLongClickable;
147         final int N = mViews.size();
148         for (int i = 0; i < N; i++) {
149             mViews.get(i).setLongClickable(mLongClickable);
150         }
151     }
152
153     public void setOnLongClickListener(View.OnLongClickListener longClickListener) {
154         mLongClickListener = longClickListener;
155         final int N = mViews.size();
156         for (int i = 0; i < N; i++) {
157             mViews.get(i).setOnLongClickListener(mLongClickListener);
158         }
159     }
160
161     public View getCurrentView() {
162         return mCurrentView;
163     }
164
165     public void setCurrentView(View currentView) {
166         mCurrentView = currentView.findViewById(mId);
167     }
168 }