Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04d88228 authored by Preethi Kandhalu's avatar Preethi Kandhalu
Browse files

[Media Quality] Implement Remove Picture Profile API & temp map functionality

Test: logs and CTS
Bug: 378705930
Flag: android.media.tv.flags.media_quality_fw

Change-Id: If095b33ceb24f13f07cf53bd1c919f8a7918b544
parent 3b80c8fc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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",
+54 −19
Original line number Diff line number Diff line
@@ -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;

@@ -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
@@ -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);
@@ -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
@@ -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
@@ -126,7 +153,7 @@ public class MediaQualityService extends SystemService {
                    return null;
                }
                cursor.moveToFirst();
                return getPictureProfileFromCursor(cursor);
                return getPictureProfileWithTempIdFromCursor(cursor);
            }
        }

@@ -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));
        }

@@ -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;
            }