diff options
author | 2025-01-09 15:10:30 -0800 | |
---|---|---|
committer | 2025-01-16 10:33:39 -0800 | |
commit | dd2b3348ed317f890e6714af342ed6d2a160b035 (patch) | |
tree | b19e06e17f227d40f328dd61f84bba28a2a69143 | |
parent | 2b7d92aa6ac8724660e8584e383334b02a21d9fe (diff) |
[MediaQuality] Add API implementation for get/set PictureProfile/SoundProfile Allowlist
Test: m
Fix: 388912026
Fix: 388912004
Fix: 388911800
Fix: 388912061
Flag: android.media.tv.flags.media_quality_fw
Change-Id: Icb2d993a8857d8ce71bb1d17ae9da14a5f11d519
-rw-r--r-- | data/etc/privapp-permissions-platform.xml | 4 | ||||
-rw-r--r-- | packages/Shell/AndroidManifest.xml | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/media/quality/MediaQualityService.java | 38 |
3 files changed, 47 insertions, 0 deletions
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index a30570a4cce5..b8059d08756a 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -613,6 +613,10 @@ applications that come with the platform <permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" /> <!-- Permission required for CTS test - CtsContentProviderMultiUserTest --> <permission name="android.permission.RESOLVE_COMPONENT_FOR_UID"/> + <!-- Permission required for CTS test - MediaQualityTest --> + <permission name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE"/> + <permission name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE"/> + <permission name="android.permission.READ_COLOR_ZONES"/> </privapp-permissions> <privapp-permissions package="com.android.statementservice"> diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 4448000324d8..a044738d2e91 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -998,6 +998,11 @@ <!-- Permission required for CTS test - CtsContentProviderMultiUserTest --> <uses-permission android:name="android.permission.RESOLVE_COMPONENT_FOR_UID" /> + <!-- Permissions required for CTS test - MediaQualityTest --> + <uses-permission android:name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE" /> + <uses-permission android:name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE" /> + <uses-permission android:name="android.permission.READ_COLOR_ZONES" /> + <application android:label="@string/app_label" android:theme="@android:style/Theme.DeviceDefault.DayNight" diff --git a/services/core/java/com/android/server/media/quality/MediaQualityService.java b/services/core/java/com/android/server/media/quality/MediaQualityService.java index e47cbdc3546f..e51289b6990a 100644 --- a/services/core/java/com/android/server/media/quality/MediaQualityService.java +++ b/services/core/java/com/android/server/media/quality/MediaQualityService.java @@ -24,6 +24,7 @@ import static android.media.quality.AmbientBacklightEvent.AMBIENT_BACKLIGHT_EVEN import android.annotation.NonNull; import android.content.ContentValues; import android.content.Context; +import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -51,6 +52,7 @@ import android.media.quality.SoundProfile; import android.media.quality.SoundProfileHandle; import android.os.Binder; import android.os.Bundle; +import android.os.Environment; import android.os.IBinder; import android.os.PersistableBundle; import android.os.RemoteCallbackList; @@ -69,6 +71,7 @@ import com.android.server.utils.Slogf; import org.json.JSONException; import org.json.JSONObject; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -88,6 +91,10 @@ public class MediaQualityService extends SystemService { private static final boolean DEBUG = false; private static final String TAG = "MediaQualityService"; + private static final String ALLOWLIST = "allowlist"; + private static final String PICTURE_PROFILE_PREFERENCE = "picture_profile_preference"; + private static final String SOUND_PROFILE_PREFERENCE = "sound_profile_preference"; + private static final String COMMA_DELIMITER = ","; private static final int MAX_UUID_GENERATION_ATTEMPTS = 10; private final Context mContext; private final MediaQualityDbHelper mMediaQualityDbHelper; @@ -98,6 +105,8 @@ public class MediaQualityService extends SystemService { private final Map<String, AmbientBacklightCallbackRecord> mCallbackRecords = new HashMap<>(); private final PackageManager mPackageManager; private final SparseArray<UserState> mUserStates = new SparseArray<>(); + private SharedPreferences mPictureProfileSharedPreference; + private SharedPreferences mSoundProfileSharedPreference; public MediaQualityService(Context context) { super(context); @@ -109,6 +118,19 @@ public class MediaQualityService extends SystemService { mMediaQualityDbHelper = new MediaQualityDbHelper(mContext); mMediaQualityDbHelper.setWriteAheadLoggingEnabled(true); mMediaQualityDbHelper.setIdleConnectionTimeout(30); + + // The package info in the context isn't initialized in the way it is for normal apps, + // so the standard, name-based context.getSharedPreferences doesn't work. Instead, we + // build the path manually below using the same policy that appears in ContextImpl. + final Context deviceContext = mContext.createDeviceProtectedStorageContext(); + final File pictureProfilePrefs = new File(Environment.getDataSystemDirectory(), + PICTURE_PROFILE_PREFERENCE); + mPictureProfileSharedPreference = deviceContext.getSharedPreferences( + pictureProfilePrefs, Context.MODE_PRIVATE); + final File soundProfilePrefs = new File(Environment.getDataSystemDirectory(), + SOUND_PROFILE_PREFERENCE); + mSoundProfileSharedPreference = deviceContext.getSharedPreferences( + soundProfilePrefs, Context.MODE_PRIVATE); } @Override @@ -1291,6 +1313,11 @@ public class MediaQualityService extends SystemService { notifyOnPictureProfileError(null, PictureProfile.ERROR_NO_PERMISSION, Binder.getCallingUid(), Binder.getCallingPid()); } + String allowlist = mPictureProfileSharedPreference.getString(ALLOWLIST, null); + if (allowlist != null) { + String[] stringArray = allowlist.split(COMMA_DELIMITER); + return new ArrayList<>(Arrays.asList(stringArray)); + } return new ArrayList<>(); } @@ -1300,6 +1327,9 @@ public class MediaQualityService extends SystemService { notifyOnPictureProfileError(null, PictureProfile.ERROR_NO_PERMISSION, Binder.getCallingUid(), Binder.getCallingPid()); } + SharedPreferences.Editor editor = mPictureProfileSharedPreference.edit(); + editor.putString(ALLOWLIST, String.join(COMMA_DELIMITER, packages)); + editor.commit(); } @Override @@ -1308,6 +1338,11 @@ public class MediaQualityService extends SystemService { notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION, Binder.getCallingUid(), Binder.getCallingPid()); } + String allowlist = mSoundProfileSharedPreference.getString(ALLOWLIST, null); + if (allowlist != null) { + String[] stringArray = allowlist.split(COMMA_DELIMITER); + return new ArrayList<>(Arrays.asList(stringArray)); + } return new ArrayList<>(); } @@ -1317,6 +1352,9 @@ public class MediaQualityService extends SystemService { notifyOnSoundProfileError(null, SoundProfile.ERROR_NO_PERMISSION, Binder.getCallingUid(), Binder.getCallingPid()); } + SharedPreferences.Editor editor = mSoundProfileSharedPreference.edit(); + editor.putString(ALLOWLIST, String.join(COMMA_DELIMITER, packages)); + editor.commit(); } @Override |