2 * Copyright (C) 2016 The Android Open Source Project
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
7 * http://www.apache.org/licenses/LICENSE-2.0
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.
15 package com.android.systemui.statusbar.phone;
17 import android.graphics.drawable.Drawable;
18 import android.view.View;
19 import android.widget.ImageView;
21 import com.android.systemui.statusbar.policy.KeyButtonView;
23 import java.util.ArrayList;
26 * Dispatches common view calls to multiple views. This is used to handle
27 * multiples of the same nav bar icon appearing.
29 public class ButtonDispatcher {
31 private final ArrayList<View> mViews = new ArrayList<>();
33 private final int mId;
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;
45 public ButtonDispatcher(int id) {
53 void addView(View view) {
55 view.setOnClickListener(mClickListener);
56 view.setOnTouchListener(mTouchListener);
57 view.setOnLongClickListener(mLongClickListener);
58 if (mLongClickable != null) {
59 view.setLongClickable(mLongClickable);
62 view.setAlpha(mAlpha);
64 if (mVisibility != null) {
65 view.setVisibility(mVisibility);
67 if (mImageResource > 0) {
68 ((ImageView) view).setImageResource(mImageResource);
69 } else if (mImageDrawable != null) {
70 ((ImageView) view).setImageDrawable(mImageDrawable);
78 public int getVisibility() {
79 return mVisibility != null ? mVisibility : View.VISIBLE;
82 public float getAlpha() {
83 return mAlpha != null ? mAlpha : 1;
86 public void setImageDrawable(Drawable drawable) {
87 mImageDrawable = drawable;
89 final int N = mViews.size();
90 for (int i = 0; i < N; i++) {
91 ((ImageView) mViews.get(i)).setImageDrawable(mImageDrawable);
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);
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);
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();
121 public void setAlpha(int alpha) {
123 final int N = mViews.size();
124 for (int i = 0; i < N; i++) {
125 mViews.get(i).setAlpha(alpha);
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);
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);
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);
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);
161 public View getCurrentView() {
165 public void setCurrentView(View currentView) {
166 mCurrentView = currentView.findViewById(mId);