Merge "Querying capability of haptic playback."

gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit 45d34272df

@ -1315,6 +1315,13 @@ status_t AudioSystem::setA11yServicesUids(const std::vector<uid_t>& uids)
return aps->setA11yServicesUids(uids);
}
bool AudioSystem::isHapticPlaybackSupported()
{
const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
if (aps == 0) return false;
return aps->isHapticPlaybackSupported();
}
// ---------------------------------------------------------------------------

@ -89,6 +89,7 @@ enum {
REMOVE_SOURCE_DEFAULT_EFFECT,
SET_ASSISTANT_UID,
SET_A11Y_SERVICES_UIDS,
IS_HAPTIC_PLAYBACK_SUPPORTED,
};
#define MAX_ITEMS_PER_LIST 1024
@ -978,6 +979,17 @@ public:
return static_cast <status_t> (reply.readInt32());
}
virtual bool isHapticPlaybackSupported()
{
Parcel data, reply;
data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
status_t status = remote()->transact(IS_HAPTIC_PLAYBACK_SUPPORTED, data, &reply);
if (status != NO_ERROR) {
return false;
}
return reply.readBool();
}
};
IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService");
@ -1795,6 +1807,13 @@ status_t BnAudioPolicyService::onTransact(
return NO_ERROR;
}
case IS_HAPTIC_PLAYBACK_SUPPORTED: {
CHECK_INTERFACE(IAudioPolicyService, data, reply);
bool isSupported = isHapticPlaybackSupported();
reply->writeBool(isSupported);
return NO_ERROR;
}
default:
return BBinder::onTransact(code, data, reply, flags);
}

@ -345,6 +345,8 @@ public:
static status_t setAssistantUid(uid_t uid);
static status_t setA11yServicesUids(const std::vector<uid_t>& uids);
static bool isHapticPlaybackSupported();
// ----------------------------------------------------------------------------
class AudioPortCallback : public RefBase

@ -185,6 +185,8 @@ public:
virtual status_t setAssistantUid(uid_t uid) = 0;
virtual status_t setA11yServicesUids(const std::vector<uid_t>& uids) = 0;
virtual bool isHapticPlaybackSupported() = 0;
};

@ -228,6 +228,8 @@ public:
bool reported) = 0;
virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0;
virtual bool isHapticPlaybackSupported() = 0;
virtual void setAppState(uid_t uid, app_state_t state);
};

@ -3655,6 +3655,23 @@ void AudioPolicyManager::setAppState(uid_t uid, app_state_t state)
}
}
bool AudioPolicyManager::isHapticPlaybackSupported()
{
for (const auto& hwModule : mHwModules) {
const OutputProfileCollection &outputProfiles = hwModule->getOutputProfiles();
for (const auto &outProfile : outputProfiles) {
struct audio_port audioPort;
outProfile->toAudioPort(&audioPort);
for (size_t i = 0; i < audioPort.num_channel_masks; i++) {
if (audioPort.channel_masks[i] & AUDIO_CHANNEL_HAPTIC_ALL) {
return true;
}
}
}
}
return false;
}
status_t AudioPolicyManager::disconnectAudioSource(const sp<SourceClientDescriptor>& sourceDesc)
{
ALOGV("%s port Id %d", __FUNCTION__, sourceDesc->portId());

@ -247,6 +247,8 @@ public:
virtual void setAppState(uid_t uid, app_state_t state);
virtual bool isHapticPlaybackSupported();
protected:
// A constructor that allows more fine-grained control over initialization process,
// used in automatic tests.

@ -1133,4 +1133,15 @@ status_t AudioPolicyService::setA11yServicesUids(const std::vector<uid_t>& uids)
return NO_ERROR;
}
bool AudioPolicyService::isHapticPlaybackSupported()
{
if (mAudioPolicyManager == NULL) {
ALOGW("%s, mAudioPolicyManager == NULL", __func__);
return false;
}
Mutex::Autolock _l(mLock);
AutoCallerClear acc;
return mAudioPolicyManager->isHapticPlaybackSupported();
}
} // namespace android

@ -218,6 +218,8 @@ public:
virtual status_t setAssistantUid(uid_t uid);
virtual status_t setA11yServicesUids(const std::vector<uid_t>& uids);
virtual bool isHapticPlaybackSupported();
status_t doStopOutput(audio_port_handle_t portId);
void doReleaseOutput(audio_port_handle_t portId);

Loading…
Cancel
Save