Merge "Unregister callback from binder when vibration is removed"
This commit is contained in:
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user