4747import android .content .res .AssetFileDescriptor ;
4848import android .content .res .Configuration ;
4949import android .content .res .Resources ;
50+ import android .database .ContentObserver ;
5051import android .media .AudioManager ;
5152import android .media .MediaPlayer ;
5253import android .media .MediaPlayer .OnCompletionListener ;
5758import android .os .Message ;
5859import android .os .Vibrator ;
5960import android .preference .PreferenceManager ;
61+ import android .provider .Settings ;
6062import android .util .Log ;
6163
6264import com .nullwire .trace .ExceptionHandler ;
@@ -118,10 +120,36 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
118120
119121 public boolean hardKeyboardHidden ;
120122
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+
121146 @ Override
122147 public void onCreate () {
123148 Log .i (TAG , "Starting background service" );
124149
150+ settingsObserver = new SettingsObserver (new Handler ());
151+ settingsObserver .observe ();
152+
125153 ExceptionHandler .register (this );
126154
127155 prefs = PreferenceManager .getDefaultSharedPreferences (this );
@@ -151,9 +179,16 @@ public void onCreate() {
151179 }
152180
153181 vibrator = (Vibrator ) getSystemService (Context .VIBRATOR_SERVICE );
154- wantKeyVibration = prefs .getBoolean (PreferenceConstants .BUMPY_ARROWS , true );
155182
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+
157192 enableMediaPlayer ();
158193
159194 hardKeyboardHidden = (res .getConfiguration ().hardKeyboardHidden ==
@@ -175,6 +210,11 @@ public void onDestroy() {
175210
176211 disconnectAll (true );
177212
213+ if (settingsObserver != null ) {
214+ settingsObserver .stop ();
215+ settingsObserver = null ;
216+ }
217+
178218 if (hostdb != null ) {
179219 hostdb .close ();
180220 hostdb = null ;
@@ -622,11 +662,16 @@ else if (!wantAudible && mediaPlayer != null)
622662 PreferenceConstants .DEFAULT_BELL_VOLUME );
623663 mediaPlayer .setVolume (volume , volume );
624664 }
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 (
627673 PreferenceConstants .BELL_VIBRATE , true );
628- } else if (PreferenceConstants .BUMPY_ARROWS .equals (key )) {
629- wantKeyVibration = sharedPreferences .getBoolean (
674+ wantKeyVibration = allowVibration && sharedPreferences .getBoolean (
630675 PreferenceConstants .BUMPY_ARROWS , true );
631676 } else if (PreferenceConstants .WIFI_LOCK .equals (key )) {
632677 final boolean lockingWifi = prefs .getBoolean (PreferenceConstants .WIFI_LOCK , true );
0 commit comments