summaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/audiofx/audiofx/activity/StateCallbacks.java
blob: 0aa73799ccbe5836725a3372e49fffe71215db68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154

package com.cyngn.audiofx.activity;

import android.media.AudioDeviceInfo;

import java.util.ArrayList;
import java.util.List;

public class StateCallbacks {

    private static final String TAG = "StateCallbacks";

    private final MasterConfigControl mConfig;

    private final List<EqUpdatedCallback> mEqUpdateCallbacks = new ArrayList<EqUpdatedCallback>();

    private final List<DeviceChangedCallback> mDeviceChangedCallbacks = new ArrayList<DeviceChangedCallback>();

    private final List<EqControlStateCallback> mEqControlStateCallbacks = new ArrayList<EqControlStateCallback>();

    StateCallbacks(MasterConfigControl config) {
        mConfig = config;
    }

    /**
     * Implement this callback to receive any changes called to the
     * MasterConfigControl instance
     */
    public interface EqUpdatedCallback {
        /**
         * A band level has been changed
         *
         * @param band the band index which changed
         * @param dB the new decibel value
         * @param fromSystem whether the event was from the system or from the
         *            user
         */
        public void onBandLevelChange(int band, float dB, boolean fromSystem);

        /**
         * The preset has been set
         *
         * @param newPresetIndex the new preset index.
         */
        public void onPresetChanged(int newPresetIndex);

        public void onPresetsChanged();
    }

    public void addEqUpdatedCallback(EqUpdatedCallback callback) {
        synchronized (mEqUpdateCallbacks) {
            mEqUpdateCallbacks.add(callback);
        }
    }

    public void removeEqUpdatedCallback(EqUpdatedCallback callback) {
        synchronized (mEqUpdateCallbacks) {
            mEqUpdateCallbacks.remove(callback);
        }
    }

    void notifyPresetsChanged() {
        synchronized (mEqUpdateCallbacks) {
            for (final EqUpdatedCallback callback : mEqUpdateCallbacks) {
                callback.onPresetsChanged();
            }
        }
    }

    void notifyPresetChanged(final int index) {
        synchronized (mEqUpdateCallbacks) {
            for (final EqUpdatedCallback callback : mEqUpdateCallbacks) {
                callback.onPresetChanged(index);
            }
        }
    }

    void notifyBandLevelChangeChanged(final int band, final float dB, final boolean fromSystem) {
        synchronized (mEqUpdateCallbacks) {
            for (final EqUpdatedCallback callback : mEqUpdateCallbacks) {
                callback.onBandLevelChange(band, dB, fromSystem);
            }
        }
    }

    /**
     * Callback for changes to visibility and state of the EQ
     */
    public interface EqControlStateCallback {
        public void updateEqState(boolean saveVisible, boolean removeVisible,
                boolean renameVisible, boolean unlockVisible);
    }

    public void addEqControlStateCallback(EqControlStateCallback callback) {
        synchronized (mEqControlStateCallbacks) {
            mEqControlStateCallbacks.add(callback);
        }
    }

    public synchronized void removeEqControlStateCallback(EqControlStateCallback callback) {
        synchronized (mEqControlStateCallbacks) {
            mEqControlStateCallbacks.remove(callback);
        }
    }

    void notifyEqControlStateChanged(boolean saveVisible, boolean removeVisible,
            boolean renameVisible, boolean unlockVisible) {
        synchronized (mEqControlStateCallbacks) {
            for (final EqControlStateCallback callback : mEqControlStateCallbacks) {
                callback.updateEqState(saveVisible, removeVisible, renameVisible, unlockVisible);
            }
        }
    }

    /**
     * Register this callback to receive notification when the output device
     * changes.
     */
    public interface DeviceChangedCallback {
        public void onDeviceChanged(AudioDeviceInfo device, boolean userChange);
        public void onGlobalDeviceToggle(boolean on);

    }

    public void addDeviceChangedCallback(DeviceChangedCallback callback) {
        synchronized (mDeviceChangedCallbacks) {
            mDeviceChangedCallbacks.add(callback);
            callback.onDeviceChanged(mConfig.getCurrentDevice(), false);
        }
    }

    public synchronized void removeDeviceChangedCallback(DeviceChangedCallback callback) {
        synchronized (mDeviceChangedCallbacks) {
            mDeviceChangedCallbacks.remove(callback);
        }
    }

    void notifyGlobalToggle(boolean on) {
        synchronized (mDeviceChangedCallbacks) {
            for (DeviceChangedCallback callback : mDeviceChangedCallbacks) {
                callback.onGlobalDeviceToggle(on);
            }

        }
    }

    void notifyDeviceChanged(final AudioDeviceInfo newDevice, final boolean fromUser) {
        synchronized (mDeviceChangedCallbacks) {
            for (final DeviceChangedCallback callback : mDeviceChangedCallbacks) {
                callback.onDeviceChanged(newDevice, fromUser);
            }
        }
    }
}