diff options
| author | 2021-12-14 12:19:39 +0000 | |
|---|---|---|
| committer | 2021-12-14 12:19:39 +0000 | |
| commit | 6049f433873a2b7e4d950fa7a2bc2394693c292d (patch) | |
| tree | de0dafe5ff2436db4ede7071a7b07c801bc4729e | |
| parent | ff4d15c1e5567dace46710daba9b6dd10bd850fe (diff) | |
| parent | 1704b9efa150366a4df5eab62ec1b0499d680625 (diff) | |
Merge "Adding audio commands for hostSide CTS tests"
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioManagerShellCommand.java | 165 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 14 |
2 files changed, 179 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/audio/AudioManagerShellCommand.java b/services/core/java/com/android/server/audio/AudioManagerShellCommand.java new file mode 100644 index 000000000000..241abafe6179 --- /dev/null +++ b/services/core/java/com/android/server/audio/AudioManagerShellCommand.java @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2021 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 com.android.server.audio; + +import android.content.Context; +import android.media.AudioManager; +import android.os.ShellCommand; + +import java.io.PrintWriter; + + +class AudioManagerShellCommand extends ShellCommand { + private static final String TAG = "AudioManagerShellCommand"; + + private final AudioService mService; + + AudioManagerShellCommand(AudioService service) { + mService = service; + } + + @Override + public int onCommand(String cmd) { + if (cmd == null) { + return handleDefaultCommands(cmd); + } + final PrintWriter pw = getOutPrintWriter(); + switch(cmd) { + case "set-surround-format-enabled": + return setSurroundFormatEnabled(); + case "get-is-surround-format-enabled": + return getIsSurroundFormatEnabled(); + case "set-encoded-surround-mode": + return setEncodedSurroundMode(); + case "get-encoded-surround-mode": + return getEncodedSurroundMode(); + } + return 0; + } + + @Override + public void onHelp() { + final PrintWriter pw = getOutPrintWriter(); + pw.println("Audio manager commands:"); + pw.println(" help"); + pw.println(" Print this help text."); + pw.println(); + pw.println(" set-surround-format-enabled SURROUND_FORMAT IS_ENABLED"); + pw.println(" Enables/disabled the SURROUND_FORMAT based on IS_ENABLED"); + pw.println(" get-is-surround-format-enabled SURROUND_FORMAT"); + pw.println(" Returns if the SURROUND_FORMAT is enabled"); + pw.println(" set-encoded-surround-mode SURROUND_SOUND_MODE"); + pw.println(" Sets the encoded surround sound mode to SURROUND_SOUND_MODE"); + pw.println(" get-encoded-surround-mode"); + pw.println(" Returns the encoded surround sound mode"); + } + + private int setSurroundFormatEnabled() { + String surroundFormatText = getNextArg(); + String isSurroundFormatEnabledText = getNextArg(); + + if (surroundFormatText == null) { + getErrPrintWriter().println("Error: no surroundFormat specified"); + return 1; + } + + if (isSurroundFormatEnabledText == null) { + getErrPrintWriter().println("Error: no enabled value for surroundFormat specified"); + return 1; + } + + int surroundFormat = -1; + boolean isSurroundFormatEnabled = false; + try { + surroundFormat = Integer.parseInt(surroundFormatText); + isSurroundFormatEnabled = Boolean.parseBoolean(isSurroundFormatEnabledText); + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: wrong format specified for surroundFormat"); + return 1; + } + if (surroundFormat < 0) { + getErrPrintWriter().println("Error: invalid value of surroundFormat"); + return 1; + } + + final Context context = mService.mContext; + final AudioManager am = context.getSystemService(AudioManager.class); + am.setSurroundFormatEnabled(surroundFormat, isSurroundFormatEnabled); + return 0; + } + + private int getIsSurroundFormatEnabled() { + String surroundFormatText = getNextArg(); + + if (surroundFormatText == null) { + getErrPrintWriter().println("Error: no surroundFormat specified"); + return 1; + } + + int surroundFormat = -1; + try { + surroundFormat = Integer.parseInt(surroundFormatText); + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: wrong format specified for surroundFormat"); + return 1; + } + + if (surroundFormat < 0) { + getErrPrintWriter().println("Error: invalid value of surroundFormat"); + return 1; + } + final Context context = mService.mContext; + final AudioManager am = context.getSystemService(AudioManager.class); + getOutPrintWriter().println("Value of enabled for " + surroundFormat + " is: " + + am.isSurroundFormatEnabled(surroundFormat)); + return 0; + } + + private int setEncodedSurroundMode() { + String encodedSurroundModeText = getNextArg(); + + if (encodedSurroundModeText == null) { + getErrPrintWriter().println("Error: no encodedSurroundMode specified"); + return 1; + } + + int encodedSurroundMode = -1; + try { + encodedSurroundMode = Integer.parseInt(encodedSurroundModeText); + } catch (NumberFormatException e) { + getErrPrintWriter().println("Error: wrong format specified for encoded surround mode"); + return 1; + } + + if (encodedSurroundMode < 0) { + getErrPrintWriter().println("Error: invalid value of encodedSurroundMode"); + return 1; + } + + final Context context = mService.mContext; + final AudioManager am = context.getSystemService(AudioManager.class); + am.setEncodedSurroundMode(encodedSurroundMode); + return 0; + } + + private int getEncodedSurroundMode() { + final Context context = mService.mContext; + final AudioManager am = context.getSystemService(AudioManager.class); + getOutPrintWriter().println("Encoded surround mode: " + am.getEncodedSurroundMode()); + return 0; + } +} diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index f857064a065a..8615393dbfec 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -130,7 +130,9 @@ import android.os.PowerManager; import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; +import android.os.ResultReceiver; import android.os.ServiceManager; +import android.os.ShellCallback; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; @@ -1996,6 +1998,18 @@ public class AudioService extends IAudioService.Stub } } + @Override // Binder call + public void onShellCommand(FileDescriptor in, FileDescriptor out, + FileDescriptor err, String[] args, ShellCallback callback, + ResultReceiver resultReceiver) { + if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_AUDIO_POLICY) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Missing MANAGE_AUDIO_POLICY permission"); + } + new AudioManagerShellCommand(AudioService.this).exec(this, in, out, err, + args, callback, resultReceiver); + } + /** @see AudioManager#getSurroundFormats() */ @Override public Map<Integer, Boolean> getSurroundFormats() { |