All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.android.os.vibrator.VibratorFrequencyProfile Maven / Gradle / Ivy

/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.os.vibrator;

import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.VibratorInfo;

import com.android.internal.util.Preconditions;

/**
 * Describes the output of a {@link android.os.Vibrator} for different vibration frequencies.
 *
 * 

The profile contains the minimum and maximum supported vibration frequencies, if the device * supports independent frequency control. * *

It also describes the relative output acceleration of a vibration at different supported * frequencies. The acceleration is defined by a relative amplitude value between 0 and 1, * inclusive, where 0 represents the vibrator off state and 1 represents the maximum output * acceleration that the vibrator can reach across all supported frequencies. * *

The measurements are returned as an array of uniformly distributed amplitude values for * frequencies between the minimum and maximum supported ones. The measurement interval is the * frequency increment between each pair of amplitude values. * *

Vibrators without independent frequency control do not have a frequency profile. * @hide */ @TestApi public final class VibratorFrequencyProfile { private final VibratorInfo.FrequencyProfile mFrequencyProfile; /** @hide */ public VibratorFrequencyProfile(@NonNull VibratorInfo.FrequencyProfile frequencyProfile) { Preconditions.checkArgument(!frequencyProfile.isEmpty(), "Frequency profile must have a non-empty frequency range"); mFrequencyProfile = frequencyProfile; } /** * Measurements of the maximum relative amplitude the vibrator can achieve for each supported * frequency. * *

The frequency of a measurement is determined as: * * {@code getMinFrequency() + measurementIndex * getMaxAmplitudeMeasurementInterval()} * *

The returned list will not be empty, and will have entries representing frequencies from * {@link #getMinFrequency()} to {@link #getMaxFrequency()}, inclusive. * * @return Array of maximum relative amplitude measurements. */ @NonNull @FloatRange(from = 0, to = 1) public float[] getMaxAmplitudeMeasurements() { // VibratorInfo getters always return a copy or clone of the data objects. return mFrequencyProfile.getMaxAmplitudes(); } /** * Gets the frequency interval used to measure the maximum relative amplitudes. * * @return the frequency interval used for the measurement, in hertz. */ public float getMaxAmplitudeMeasurementInterval() { return mFrequencyProfile.getFrequencyResolutionHz(); } /** * Gets the minimum frequency supported by the vibrator. * * @return the minimum frequency supported by the vibrator, in hertz. */ public float getMinFrequency() { return mFrequencyProfile.getFrequencyRangeHz().getLower(); } /** * Gets the maximum frequency supported by the vibrator. * * @return the maximum frequency supported by the vibrator, in hertz. */ public float getMaxFrequency() { return mFrequencyProfile.getFrequencyRangeHz().getUpper(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy