Loading services/core/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ java_library_static { "securebox", "apache-commons-math", "battery_saver_flag_lib", "guava", "notification_flags_lib", "power_hint_flags_lib", "biometrics_flags_lib", Loading services/core/java/com/android/server/media/quality/MediaQualityService.java +54 −19 Original line number Diff line number Diff line Loading @@ -35,6 +35,9 @@ import android.util.Log; import com.android.server.SystemService; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import org.json.JSONException; import org.json.JSONObject; Loading @@ -43,6 +46,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.UUID; /** * This service manage picture profile and sound profile for TV setting. Also communicates with the Loading @@ -54,10 +58,12 @@ public class MediaQualityService extends SystemService { private static final String TAG = "MediaQualityService"; private final Context mContext; private final MediaQualityDbHelper mMediaQualityDbHelper; private final BiMap<Long, String> mTempIdMap; public MediaQualityService(Context context) { super(context); mContext = context; mTempIdMap = HashBiMap.create(); mMediaQualityDbHelper = new MediaQualityDbHelper(mContext); mMediaQualityDbHelper.setWriteAheadLoggingEnabled(true); mMediaQualityDbHelper.setIdleConnectionTimeout(30); Loading @@ -83,8 +89,21 @@ public class MediaQualityService extends SystemService { values.put(mMediaQualityDbHelper.SETTINGS, bundleToJson(pp.getParameters())); // id is auto-generated by SQLite upon successful insertion of row long id = db.insert(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, null, values); return new PictureProfile.Builder(pp).setProfileId(Long.toString(id)).build(); Long id = db.insert(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, null, values); populateTempIdMap(id); pp.setProfileId(mTempIdMap.get(id)); return pp; } private void populateTempIdMap(Long id) { if (id != null && mTempIdMap.get(id) == null) { String uuid = UUID.randomUUID().toString(); while (mTempIdMap.inverse().containsKey(uuid)) { uuid = UUID.randomUUID().toString(); } mTempIdMap.put(id, uuid); } } @Override Loading @@ -94,7 +113,15 @@ public class MediaQualityService extends SystemService { @Override public void removePictureProfile(String id, int userId) { // TODO: implement Long intId = mTempIdMap.inverse().get(id); if (intId != null) { SQLiteDatabase db = mMediaQualityDbHelper.getWritableDatabase(); String selection = BaseParameters.PARAMETER_ID + " = ?"; String[] selectionArgs = {Long.toString(intId)}; db.delete(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, selection, selectionArgs); mTempIdMap.remove(intId); } } @Override Loading Loading @@ -126,7 +153,7 @@ public class MediaQualityService extends SystemService { return null; } cursor.moveToFirst(); return getPictureProfileFromCursor(cursor); return getPictureProfileWithTempIdFromCursor(cursor); } } Loading Loading @@ -187,20 +214,28 @@ public class MediaQualityService extends SystemService { }; } private PictureProfile getPictureProfileFromCursor(Cursor cursor) { String returnId = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_ID)); int type = cursor.getInt(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_TYPE)); String name = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_NAME)); String inputId = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_INPUT_ID)); String packageName = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_PACKAGE)); String settings = cursor.getString( cursor.getColumnIndexOrThrow(mMediaQualityDbHelper.SETTINGS)); return new PictureProfile(returnId, type, name, inputId, private PictureProfile getPictureProfileWithTempIdFromCursor(Cursor cursor) { int colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_ID); Long dbId = colIndex != -1 ? cursor.getLong(colIndex) : null; populateTempIdMap(dbId); String tempId = mTempIdMap.get(dbId); colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_TYPE); int type = colIndex != -1 ? cursor.getInt(colIndex) : 0; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_NAME); String name = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_INPUT_ID); String inputId = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_PACKAGE); String packageName = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(mMediaQualityDbHelper.SETTINGS); String settings = colIndex != -1 ? cursor.getString(colIndex) : null; return new PictureProfile(tempId, type, name, inputId, packageName, jsonToBundle(settings)); } Loading Loading @@ -243,7 +278,7 @@ public class MediaQualityService extends SystemService { ) { List<PictureProfile> pictureProfiles = new ArrayList<>(); while (cursor.moveToNext()) { pictureProfiles.add(getPictureProfileFromCursor(cursor)); pictureProfiles.add(getPictureProfileWithTempIdFromCursor(cursor)); } return pictureProfiles; } Loading Loading
services/core/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ java_library_static { "securebox", "apache-commons-math", "battery_saver_flag_lib", "guava", "notification_flags_lib", "power_hint_flags_lib", "biometrics_flags_lib", Loading
services/core/java/com/android/server/media/quality/MediaQualityService.java +54 −19 Original line number Diff line number Diff line Loading @@ -35,6 +35,9 @@ import android.util.Log; import com.android.server.SystemService; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import org.json.JSONException; import org.json.JSONObject; Loading @@ -43,6 +46,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import java.util.UUID; /** * This service manage picture profile and sound profile for TV setting. Also communicates with the Loading @@ -54,10 +58,12 @@ public class MediaQualityService extends SystemService { private static final String TAG = "MediaQualityService"; private final Context mContext; private final MediaQualityDbHelper mMediaQualityDbHelper; private final BiMap<Long, String> mTempIdMap; public MediaQualityService(Context context) { super(context); mContext = context; mTempIdMap = HashBiMap.create(); mMediaQualityDbHelper = new MediaQualityDbHelper(mContext); mMediaQualityDbHelper.setWriteAheadLoggingEnabled(true); mMediaQualityDbHelper.setIdleConnectionTimeout(30); Loading @@ -83,8 +89,21 @@ public class MediaQualityService extends SystemService { values.put(mMediaQualityDbHelper.SETTINGS, bundleToJson(pp.getParameters())); // id is auto-generated by SQLite upon successful insertion of row long id = db.insert(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, null, values); return new PictureProfile.Builder(pp).setProfileId(Long.toString(id)).build(); Long id = db.insert(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, null, values); populateTempIdMap(id); pp.setProfileId(mTempIdMap.get(id)); return pp; } private void populateTempIdMap(Long id) { if (id != null && mTempIdMap.get(id) == null) { String uuid = UUID.randomUUID().toString(); while (mTempIdMap.inverse().containsKey(uuid)) { uuid = UUID.randomUUID().toString(); } mTempIdMap.put(id, uuid); } } @Override Loading @@ -94,7 +113,15 @@ public class MediaQualityService extends SystemService { @Override public void removePictureProfile(String id, int userId) { // TODO: implement Long intId = mTempIdMap.inverse().get(id); if (intId != null) { SQLiteDatabase db = mMediaQualityDbHelper.getWritableDatabase(); String selection = BaseParameters.PARAMETER_ID + " = ?"; String[] selectionArgs = {Long.toString(intId)}; db.delete(mMediaQualityDbHelper.PICTURE_QUALITY_TABLE_NAME, selection, selectionArgs); mTempIdMap.remove(intId); } } @Override Loading Loading @@ -126,7 +153,7 @@ public class MediaQualityService extends SystemService { return null; } cursor.moveToFirst(); return getPictureProfileFromCursor(cursor); return getPictureProfileWithTempIdFromCursor(cursor); } } Loading Loading @@ -187,20 +214,28 @@ public class MediaQualityService extends SystemService { }; } private PictureProfile getPictureProfileFromCursor(Cursor cursor) { String returnId = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_ID)); int type = cursor.getInt(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_TYPE)); String name = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_NAME)); String inputId = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_INPUT_ID)); String packageName = cursor.getString(cursor.getColumnIndexOrThrow( BaseParameters.PARAMETER_PACKAGE)); String settings = cursor.getString( cursor.getColumnIndexOrThrow(mMediaQualityDbHelper.SETTINGS)); return new PictureProfile(returnId, type, name, inputId, private PictureProfile getPictureProfileWithTempIdFromCursor(Cursor cursor) { int colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_ID); Long dbId = colIndex != -1 ? cursor.getLong(colIndex) : null; populateTempIdMap(dbId); String tempId = mTempIdMap.get(dbId); colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_TYPE); int type = colIndex != -1 ? cursor.getInt(colIndex) : 0; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_NAME); String name = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_INPUT_ID); String inputId = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_PACKAGE); String packageName = colIndex != -1 ? cursor.getString(colIndex) : null; colIndex = cursor.getColumnIndex(mMediaQualityDbHelper.SETTINGS); String settings = colIndex != -1 ? cursor.getString(colIndex) : null; return new PictureProfile(tempId, type, name, inputId, packageName, jsonToBundle(settings)); } Loading Loading @@ -243,7 +278,7 @@ public class MediaQualityService extends SystemService { ) { List<PictureProfile> pictureProfiles = new ArrayList<>(); while (cursor.moveToNext()) { pictureProfiles.add(getPictureProfileFromCursor(cursor)); pictureProfiles.add(getPictureProfileWithTempIdFromCursor(cursor)); } return pictureProfiles; } Loading