void Vibration::vibrate(const VibrationPattern& pattern) { int length = pattern.size(); // Cancel the pre-existing instance of vibration patterns, if the pattern is 0 or an empty list. if (!length || (length == 1 && !pattern[0])) { cancelVibration(); return; } if (m_isVibrating) cancelVibration(); if (m_timerStart.isActive()) m_timerStart.stop(); m_pattern = pattern; m_timerStart.startOneShot(0); }
bool NavigatorVibration::vibrate(const VibrationPattern& pattern) { VibrationPattern sanitized = pattern; size_t length = sanitized.size(); // If the pattern is too long then truncate it. if (length > kVibrationPatternLengthMax) { sanitized.shrink(kVibrationPatternLengthMax); length = kVibrationPatternLengthMax; } // If any pattern entry is too long then truncate it. for (size_t i = 0; i < length; ++i) { if (sanitized[i] > blink::kVibrationDurationMax) sanitized[i] = blink::kVibrationDurationMax; } // If the last item in the pattern is a pause then discard it. if (length && !(length % 2)) sanitized.removeLast(); // Cancelling clears the stored pattern so do it before setting the new one. if (m_isVibrating) cancelVibration(); m_pattern = sanitized; if (m_timerStart.isActive()) m_timerStart.stop(); if (!m_pattern.size()) return true; if (m_pattern.size() == 1 && !m_pattern[0]) { m_pattern.clear(); return true; } m_timerStart.startOneShot(0, FROM_HERE); m_isVibrating = true; return true; }
bool NavigatorVibration::vibrate(const VibrationPattern& pattern) { size_t length = pattern.size(); // If the pattern is too long then abort. if (length > kVibrationPatternLengthMax) return false; // If any pattern entry is too long then abort. for (size_t i = 0; i < length; ++i) { if (pattern[i] > kVibrationDurationMax) return false; } // Cancelling clears the pattern so do this before setting the new pattern. if (m_isVibrating) cancelVibration(); // If the last item in the pattern is a pause then discard it. if (length && !(length % 2)) { VibrationPattern tempPattern = pattern; tempPattern.removeLast(); m_pattern = tempPattern; } else { m_pattern = pattern; } if (m_timerStart.isActive()) m_timerStart.stop(); if (!m_pattern.size()) return true; if (m_pattern.size() == 1 && !m_pattern[0]) { m_pattern.clear(); return true; } m_timerStart.startOneShot(0); return true; }