Merge "Unregister callback from binder when vibration is removed"

This commit is contained in:
Brad Fitzpatrick
2011-03-28 07:59:08 -07:00
committed by Android Code Review

View File

@ -243,6 +243,7 @@ public class VibratorService extends IVibratorService.Stub {
// Lock held on mVibrations // Lock held on mVibrations
private void startNextVibrationLocked() { private void startNextVibrationLocked() {
if (mVibrations.size() <= 0) { if (mVibrations.size() <= 0) {
mCurrentVibration = null;
return; return;
} }
mCurrentVibration = mVibrations.getFirst(); mCurrentVibration = mVibrations.getFirst();
@ -269,17 +270,27 @@ public class VibratorService extends IVibratorService.Stub {
Vibration vib = iter.next(); Vibration vib = iter.next();
if (vib.mToken == token) { if (vib.mToken == token) {
iter.remove(); iter.remove();
unlinkVibration(vib);
return vib; return vib;
} }
} }
// We might be looking for a simple vibration which is only stored in // We might be looking for a simple vibration which is only stored in
// mCurrentVibration. // mCurrentVibration.
if (mCurrentVibration != null && mCurrentVibration.mToken == token) { if (mCurrentVibration != null && mCurrentVibration.mToken == token) {
unlinkVibration(mCurrentVibration);
return mCurrentVibration; return mCurrentVibration;
} }
return null; return null;
} }
private void unlinkVibration(Vibration vib) {
if (vib.mPattern != null) {
// If Vibration object has a pattern,
// the Vibration object has also been linkedToDeath.
vib.mToken.unlinkToDeath(vib, 0);
}
}
private class VibrateThread extends Thread { private class VibrateThread extends Thread {
final Vibration mVibration; final Vibration mVibration;
boolean mDone; boolean mDone;
@ -356,6 +367,7 @@ public class VibratorService extends IVibratorService.Stub {
// If this vibration finished naturally, start the next // If this vibration finished naturally, start the next
// vibration. // vibration.
mVibrations.remove(mVibration); mVibrations.remove(mVibration);
unlinkVibration(mVibration);
startNextVibrationLocked(); startNextVibrationLocked();
} }
} }