47
47
import android .content .res .AssetFileDescriptor ;
48
48
import android .content .res .Configuration ;
49
49
import android .content .res .Resources ;
50
+ import android .database .ContentObserver ;
50
51
import android .media .AudioManager ;
51
52
import android .media .MediaPlayer ;
52
53
import android .media .MediaPlayer .OnCompletionListener ;
57
58
import android .os .Message ;
58
59
import android .os .Vibrator ;
59
60
import android .preference .PreferenceManager ;
61
+ import android .provider .Settings ;
60
62
import android .util .Log ;
61
63
62
64
import com .nullwire .trace .ExceptionHandler ;
@@ -118,10 +120,36 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
118
120
119
121
public boolean hardKeyboardHidden ;
120
122
123
+ private SettingsObserver settingsObserver ;
124
+
125
+ public class SettingsObserver extends ContentObserver {
126
+ public SettingsObserver (Handler handler ) {
127
+ super (handler );
128
+ }
129
+
130
+ public void observe () {
131
+ getContentResolver ().registerContentObserver (
132
+ Settings .System .getUriFor (Settings .System .HAPTIC_FEEDBACK_ENABLED ),
133
+ false , this );
134
+ }
135
+
136
+ public void stop () {
137
+ getContentResolver ().unregisterContentObserver (this );
138
+ }
139
+
140
+ @ Override
141
+ public void onChange (boolean selfChange ) {
142
+ onSharedPreferenceChanged (prefs , Settings .System .HAPTIC_FEEDBACK_ENABLED );
143
+ }
144
+ }
145
+
121
146
@ Override
122
147
public void onCreate () {
123
148
Log .i (TAG , "Starting background service" );
124
149
150
+ settingsObserver = new SettingsObserver (new Handler ());
151
+ settingsObserver .observe ();
152
+
125
153
ExceptionHandler .register (this );
126
154
127
155
prefs = PreferenceManager .getDefaultSharedPreferences (this );
@@ -151,9 +179,16 @@ public void onCreate() {
151
179
}
152
180
153
181
vibrator = (Vibrator ) getSystemService (Context .VIBRATOR_SERVICE );
154
- wantKeyVibration = prefs .getBoolean (PreferenceConstants .BUMPY_ARROWS , true );
155
182
156
- wantBellVibration = prefs .getBoolean (PreferenceConstants .BELL_VIBRATE , true );
183
+ boolean allowVibration = !prefs .getBoolean (PreferenceConstants .OBEY_HAPTIC , false )
184
+ || (Settings .System .getInt (getContentResolver (),
185
+ Settings .System .HAPTIC_FEEDBACK_ENABLED , 1 ) == 1 );
186
+
187
+ wantKeyVibration = allowVibration && prefs .getBoolean (
188
+ PreferenceConstants .BUMPY_ARROWS , true );
189
+ wantBellVibration = allowVibration && prefs .getBoolean (
190
+ PreferenceConstants .BELL_VIBRATE , true );
191
+
157
192
enableMediaPlayer ();
158
193
159
194
hardKeyboardHidden = (res .getConfiguration ().hardKeyboardHidden ==
@@ -175,6 +210,11 @@ public void onDestroy() {
175
210
176
211
disconnectAll (true );
177
212
213
+ if (settingsObserver != null ) {
214
+ settingsObserver .stop ();
215
+ settingsObserver = null ;
216
+ }
217
+
178
218
if (hostdb != null ) {
179
219
hostdb .close ();
180
220
hostdb = null ;
@@ -622,11 +662,16 @@ else if (!wantAudible && mediaPlayer != null)
622
662
PreferenceConstants .DEFAULT_BELL_VOLUME );
623
663
mediaPlayer .setVolume (volume , volume );
624
664
}
625
- } else if (PreferenceConstants .BELL_VIBRATE .equals (key )) {
626
- wantBellVibration = sharedPreferences .getBoolean (
665
+ } else if (PreferenceConstants .BELL_VIBRATE .equals (key )
666
+ || PreferenceConstants .BUMPY_ARROWS .equals (key )
667
+ || PreferenceConstants .OBEY_HAPTIC .equals (key )
668
+ || Settings .System .HAPTIC_FEEDBACK_ENABLED .equals (key )) {
669
+ boolean allowVibration = !prefs .getBoolean (PreferenceConstants .OBEY_HAPTIC , false )
670
+ || (Settings .System .getInt (getContentResolver (),
671
+ Settings .System .HAPTIC_FEEDBACK_ENABLED , 1 ) == 1 );
672
+ wantBellVibration = allowVibration && sharedPreferences .getBoolean (
627
673
PreferenceConstants .BELL_VIBRATE , true );
628
- } else if (PreferenceConstants .BUMPY_ARROWS .equals (key )) {
629
- wantKeyVibration = sharedPreferences .getBoolean (
674
+ wantKeyVibration = allowVibration && sharedPreferences .getBoolean (
630
675
PreferenceConstants .BUMPY_ARROWS , true );
631
676
} else if (PreferenceConstants .WIFI_LOCK .equals (key )) {
632
677
final boolean lockingWifi = prefs .getBoolean (PreferenceConstants .WIFI_LOCK , true );
0 commit comments