• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.plugins;
16 
17 import android.annotation.IntegerRes;
18 import android.content.ComponentName;
19 import android.media.AudioManager;
20 import android.media.AudioSystem;
21 import android.os.Handler;
22 import android.os.VibrationEffect;
23 import android.util.SparseArray;
24 
25 import com.android.systemui.plugins.VolumeDialogController.Callbacks;
26 import com.android.systemui.plugins.VolumeDialogController.State;
27 import com.android.systemui.plugins.VolumeDialogController.StreamState;
28 import com.android.systemui.plugins.annotations.DependsOn;
29 import com.android.systemui.plugins.annotations.ProvidesInterface;
30 
31 /**
32  * Manages the VolumeDialog.
33  *
34  * Accessible through {@link PluginDependency}
35  */
36 @ProvidesInterface(version = VolumeDialogController.VERSION)
37 @DependsOn(target = StreamState.class)
38 @DependsOn(target = State.class)
39 @DependsOn(target = Callbacks.class)
40 public interface VolumeDialogController {
41     int VERSION = 1;
42 
setActiveStream(int stream)43     void setActiveStream(int stream);
setStreamVolume(int stream, int userLevel)44     void setStreamVolume(int stream, int userLevel);
setRingerMode(int ringerModeNormal, boolean external)45     void setRingerMode(int ringerModeNormal, boolean external);
46 
hasVibrator()47     boolean hasVibrator();
vibrate(VibrationEffect effect)48     void vibrate(VibrationEffect effect);
scheduleTouchFeedback()49     void scheduleTouchFeedback();
50 
getAudioManager()51     AudioManager getAudioManager();
52 
notifyVisible(boolean visible)53     void notifyVisible(boolean visible);
54 
addCallback(Callbacks callbacks, Handler handler)55     void addCallback(Callbacks callbacks, Handler handler);
removeCallback(Callbacks callbacks)56     void removeCallback(Callbacks callbacks);
57 
userActivity()58     void userActivity();
getState()59     void getState();
60 
areCaptionsEnabled()61     boolean areCaptionsEnabled();
setCaptionsEnabled(boolean isEnabled)62     void setCaptionsEnabled(boolean isEnabled);
63 
getCaptionsComponentState(boolean fromTooltip)64     void getCaptionsComponentState(boolean fromTooltip);
65 
66     @ProvidesInterface(version = StreamState.VERSION)
67     public static final class StreamState {
68         public static final int VERSION = 1;
69 
70         public boolean dynamic;
71         public int level;
72         public int levelMin;
73         public int levelMax;
74         public boolean muted;
75         public boolean muteSupported;
76         public @IntegerRes int name;
77         public String remoteLabel;
78         public boolean routedToBluetooth;
79 
copy()80         public StreamState copy() {
81             final StreamState rt = new StreamState();
82             rt.dynamic = dynamic;
83             rt.level = level;
84             rt.levelMin = levelMin;
85             rt.levelMax = levelMax;
86             rt.muted = muted;
87             rt.muteSupported = muteSupported;
88             rt.name = name;
89             rt.remoteLabel = remoteLabel;
90             rt.routedToBluetooth = routedToBluetooth;
91             return rt;
92         }
93     }
94 
95     @ProvidesInterface(version = State.VERSION)
96     public static final class State {
97         public static final int VERSION = 1;
98 
99         public static int NO_ACTIVE_STREAM = -1;
100 
101         public final SparseArray<StreamState> states = new SparseArray<>();
102 
103         public int ringerModeInternal;
104         public int ringerModeExternal;
105         public int zenMode;
106         public ComponentName effectsSuppressor;
107         public String effectsSuppressorName;
108         public int activeStream = NO_ACTIVE_STREAM;
109         public boolean disallowAlarms;
110         public boolean disallowMedia;
111         public boolean disallowSystem;
112         public boolean disallowRinger;
113 
copy()114         public State copy() {
115             final State rt = new State();
116             for (int i = 0; i < states.size(); i++) {
117                 rt.states.put(states.keyAt(i), states.valueAt(i).copy());
118             }
119             rt.ringerModeExternal = ringerModeExternal;
120             rt.ringerModeInternal = ringerModeInternal;
121             rt.zenMode = zenMode;
122             if (effectsSuppressor != null) {
123                 rt.effectsSuppressor = effectsSuppressor.clone();
124             }
125             rt.effectsSuppressorName = effectsSuppressorName;
126             rt.activeStream = activeStream;
127             rt.disallowAlarms = disallowAlarms;
128             rt.disallowMedia = disallowMedia;
129             rt.disallowSystem = disallowSystem;
130             rt.disallowRinger = disallowRinger;
131             return rt;
132         }
133 
134         @Override
toString()135         public String toString() {
136             return toString(0);
137         }
138 
toString(int indent)139         public String toString(int indent) {
140             final StringBuilder sb = new StringBuilder("{");
141             if (indent > 0) sep(sb, indent);
142             for (int i = 0; i < states.size(); i++) {
143                 if (i > 0) {
144                     sep(sb, indent);
145                 }
146                 final int stream = states.keyAt(i);
147                 final StreamState ss = states.valueAt(i);
148                 sb.append(AudioSystem.streamToString(stream)).append(":").append(ss.level)
149                         .append('[').append(ss.levelMin).append("..").append(ss.levelMax)
150                         .append(']');
151                 if (ss.muted) sb.append(" [MUTED]");
152                 if (ss.dynamic) sb.append(" [DYNAMIC]");
153             }
154             sep(sb, indent); sb.append("ringerModeExternal:").append(ringerModeExternal);
155             sep(sb, indent); sb.append("ringerModeInternal:").append(ringerModeInternal);
156             sep(sb, indent); sb.append("zenMode:").append(zenMode);
157             sep(sb, indent); sb.append("effectsSuppressor:").append(effectsSuppressor);
158             sep(sb, indent); sb.append("effectsSuppressorName:").append(effectsSuppressorName);
159             sep(sb, indent); sb.append("activeStream:").append(activeStream);
160             sep(sb, indent); sb.append("disallowAlarms:").append(disallowAlarms);
161             sep(sb, indent); sb.append("disallowMedia:").append(disallowMedia);
162             sep(sb, indent); sb.append("disallowSystem:").append(disallowSystem);
163             sep(sb, indent); sb.append("disallowRinger:").append(disallowRinger);
164             if (indent > 0) sep(sb, indent);
165             return sb.append('}').toString();
166         }
167 
sep(StringBuilder sb, int indent)168         private static void sep(StringBuilder sb, int indent) {
169             if (indent > 0) {
170                 sb.append('\n');
171                 for (int i = 0; i < indent; i++) {
172                     sb.append(' ');
173                 }
174             } else {
175                 sb.append(',');
176             }
177         }
178     }
179 
180     @ProvidesInterface(version = Callbacks.VERSION)
181     public interface Callbacks {
182         int VERSION = 1;
183 
onShowRequested(int reason, boolean keyguardLocked, int lockTaskModeState)184         void onShowRequested(int reason, boolean keyguardLocked, int lockTaskModeState);
onDismissRequested(int reason)185         void onDismissRequested(int reason);
onStateChanged(State state)186         void onStateChanged(State state);
onLayoutDirectionChanged(int layoutDirection)187         void onLayoutDirectionChanged(int layoutDirection);
onConfigurationChanged()188         void onConfigurationChanged();
onShowVibrateHint()189         void onShowVibrateHint();
onShowSilentHint()190         void onShowSilentHint();
onScreenOff()191         void onScreenOff();
onShowSafetyWarning(int flags)192         void onShowSafetyWarning(int flags);
onAccessibilityModeChanged(Boolean showA11yStream)193         void onAccessibilityModeChanged(Boolean showA11yStream);
onCaptionComponentStateChanged(Boolean isComponentEnabled, Boolean fromTooltip)194         void onCaptionComponentStateChanged(Boolean isComponentEnabled, Boolean fromTooltip);
195     }
196 }
197