Loading services/core/java/com/android/server/media/quality/MediaQualityService.java +29 −17 Original line number Original line Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class MediaQualityService extends SystemService { // A global lock for ambient backlight objects. // A global lock for ambient backlight objects. private final Object mAmbientBacklightLock = new Object(); private final Object mAmbientBacklightLock = new Object(); private final Map<Long, PictureProfile> mHandleToPictureProfile = new HashMap<>(); private final Map<Long, Long> mOriginalToCurrent = new HashMap<>(); private final BiMap<Long, Long> mCurrentPictureHandleToOriginal = new BiMap<>(); private final BiMap<Long, Long> mCurrentPictureHandleToOriginal = new BiMap<>(); private final Set<Long> mPictureProfileForHal = new HashSet<>(); private final Set<Long> mPictureProfileForHal = new HashSet<>(); Loading Loading @@ -542,14 +542,16 @@ public class MediaQualityService extends SystemService { -1 -1 ); ); if (defaultPictureProfileId != -1) { if (defaultPictureProfileId != -1) { synchronized (mPictureProfileLock) { PictureProfile currentDefaultPictureProfile = PictureProfile currentDefaultPictureProfile = mHandleToPictureProfile.get(defaultPictureProfileId); getCurrentPictureProfile(defaultPictureProfileId); if (currentDefaultPictureProfile != null) { if (currentDefaultPictureProfile != null) { return currentDefaultPictureProfile; return currentDefaultPictureProfile; } else { } else { return mMqDatabaseUtils.getPictureProfile(defaultPictureProfileId, true); return mMqDatabaseUtils.getPictureProfile(defaultPictureProfileId, true); } } } } } return null; return null; } } Loading Loading @@ -725,7 +727,7 @@ public class MediaQualityService extends SystemService { PictureProfile p = MediaQualityUtils.convertCursorToPictureProfileWithTempId( PictureProfile p = MediaQualityUtils.convertCursorToPictureProfileWithTempId( cursor, mPictureProfileTempIdMap); cursor, mPictureProfileTempIdMap); handle = p.getHandle().getId(); handle = p.getHandle().getId(); PictureProfile current = mHandleToPictureProfile.get(handle); PictureProfile current = getCurrentPictureProfile(handle); if (current != null) { if (current != null) { long currentHandle = current.getHandle().getId(); long currentHandle = current.getHandle().getId(); mHalNotifier.notifyHalOnPictureProfileChange( mHalNotifier.notifyHalOnPictureProfileChange( Loading Loading @@ -1940,11 +1942,13 @@ public class MediaQualityService extends SystemService { if (mPpChangedListener != null) { if (mPpChangedListener != null) { try { try { Long idForHal = dbId; Long idForHal = dbId; synchronized (mPictureProfileLock) { Long originalHandle = mCurrentPictureHandleToOriginal.getValue(dbId); Long originalHandle = mCurrentPictureHandleToOriginal.getValue(dbId); if (originalHandle != null) { if (originalHandle != null) { // the original id is used in HAL because of status change // the original id is used in HAL because of status change idForHal = originalHandle; idForHal = originalHandle; } } } mPpChangedListener.onPictureProfileChanged(convertToHalPictureProfile(idForHal, mPpChangedListener.onPictureProfileChanged(convertToHalPictureProfile(idForHal, params)); params)); } catch (RemoteException e) { } catch (RemoteException e) { Loading Loading @@ -2056,7 +2060,7 @@ public class MediaQualityService extends SystemService { if (param.getTag() == PictureParameter.activeProfile if (param.getTag() == PictureParameter.activeProfile && !param.getActiveProfile()) { && !param.getActiveProfile()) { synchronized (mPictureProfileLock) { synchronized (mPictureProfileLock) { mHandleToPictureProfile.remove(dbId); mOriginalToCurrent.remove(dbId); mCurrentPictureHandleToOriginal.removeValue(dbId); mCurrentPictureHandleToOriginal.removeValue(dbId); } } break; break; Loading Loading @@ -2122,7 +2126,7 @@ public class MediaQualityService extends SystemService { mHandler.post(() -> { mHandler.post(() -> { synchronized (mPictureProfileLock) { synchronized (mPictureProfileLock) { // get from map if exists // get from map if exists PictureProfile previous = mHandleToPictureProfile.get(profileHandle); PictureProfile previous = getCurrentPictureProfile(profileHandle); if (previous == null) { if (previous == null) { Slog.d(TAG, "Previous profile not in the map"); Slog.d(TAG, "Previous profile not in the map"); // get from DB if not exists // get from DB if not exists Loading Loading @@ -2192,7 +2196,7 @@ public class MediaQualityService extends SystemService { // profile // profile PictureProfile currentCopy = PictureProfile.copyFrom(currentSdr); PictureProfile currentCopy = PictureProfile.copyFrom(currentSdr); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, currentSdr); mOriginalToCurrent.put(profileHandle, currentSdr.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( currentSdr.getHandle().getId(), profileHandle); currentSdr.getHandle().getId(), profileHandle); Loading @@ -2218,7 +2222,7 @@ public class MediaQualityService extends SystemService { // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile PictureProfile currentCopy = PictureProfile.copyFrom(current); PictureProfile currentCopy = PictureProfile.copyFrom(current); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, current); mOriginalToCurrent.put(profileHandle, current.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( current.getHandle().getId(), profileHandle); current.getHandle().getId(), profileHandle); Loading Loading @@ -2254,7 +2258,7 @@ public class MediaQualityService extends SystemService { // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile PictureProfile currentCopy = PictureProfile.copyFrom(current); PictureProfile currentCopy = PictureProfile.copyFrom(current); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, current); mOriginalToCurrent.put(profileHandle, current.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( current.getHandle().getId(), profileHandle); current.getHandle().getId(), profileHandle); Loading Loading @@ -2655,4 +2659,12 @@ public class MediaQualityService extends SystemService { } } return list.getFirst(); return list.getFirst(); } } private PictureProfile getCurrentPictureProfile(Long originalHandle) { Long currentHandle = mOriginalToCurrent.get(originalHandle); if (currentHandle == null) { return null; } return mMqDatabaseUtils.getPictureProfile(currentHandle, /* includeParams= */ true); } } } Loading
services/core/java/com/android/server/media/quality/MediaQualityService.java +29 −17 Original line number Original line Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class MediaQualityService extends SystemService { // A global lock for ambient backlight objects. // A global lock for ambient backlight objects. private final Object mAmbientBacklightLock = new Object(); private final Object mAmbientBacklightLock = new Object(); private final Map<Long, PictureProfile> mHandleToPictureProfile = new HashMap<>(); private final Map<Long, Long> mOriginalToCurrent = new HashMap<>(); private final BiMap<Long, Long> mCurrentPictureHandleToOriginal = new BiMap<>(); private final BiMap<Long, Long> mCurrentPictureHandleToOriginal = new BiMap<>(); private final Set<Long> mPictureProfileForHal = new HashSet<>(); private final Set<Long> mPictureProfileForHal = new HashSet<>(); Loading Loading @@ -542,14 +542,16 @@ public class MediaQualityService extends SystemService { -1 -1 ); ); if (defaultPictureProfileId != -1) { if (defaultPictureProfileId != -1) { synchronized (mPictureProfileLock) { PictureProfile currentDefaultPictureProfile = PictureProfile currentDefaultPictureProfile = mHandleToPictureProfile.get(defaultPictureProfileId); getCurrentPictureProfile(defaultPictureProfileId); if (currentDefaultPictureProfile != null) { if (currentDefaultPictureProfile != null) { return currentDefaultPictureProfile; return currentDefaultPictureProfile; } else { } else { return mMqDatabaseUtils.getPictureProfile(defaultPictureProfileId, true); return mMqDatabaseUtils.getPictureProfile(defaultPictureProfileId, true); } } } } } return null; return null; } } Loading Loading @@ -725,7 +727,7 @@ public class MediaQualityService extends SystemService { PictureProfile p = MediaQualityUtils.convertCursorToPictureProfileWithTempId( PictureProfile p = MediaQualityUtils.convertCursorToPictureProfileWithTempId( cursor, mPictureProfileTempIdMap); cursor, mPictureProfileTempIdMap); handle = p.getHandle().getId(); handle = p.getHandle().getId(); PictureProfile current = mHandleToPictureProfile.get(handle); PictureProfile current = getCurrentPictureProfile(handle); if (current != null) { if (current != null) { long currentHandle = current.getHandle().getId(); long currentHandle = current.getHandle().getId(); mHalNotifier.notifyHalOnPictureProfileChange( mHalNotifier.notifyHalOnPictureProfileChange( Loading Loading @@ -1940,11 +1942,13 @@ public class MediaQualityService extends SystemService { if (mPpChangedListener != null) { if (mPpChangedListener != null) { try { try { Long idForHal = dbId; Long idForHal = dbId; synchronized (mPictureProfileLock) { Long originalHandle = mCurrentPictureHandleToOriginal.getValue(dbId); Long originalHandle = mCurrentPictureHandleToOriginal.getValue(dbId); if (originalHandle != null) { if (originalHandle != null) { // the original id is used in HAL because of status change // the original id is used in HAL because of status change idForHal = originalHandle; idForHal = originalHandle; } } } mPpChangedListener.onPictureProfileChanged(convertToHalPictureProfile(idForHal, mPpChangedListener.onPictureProfileChanged(convertToHalPictureProfile(idForHal, params)); params)); } catch (RemoteException e) { } catch (RemoteException e) { Loading Loading @@ -2056,7 +2060,7 @@ public class MediaQualityService extends SystemService { if (param.getTag() == PictureParameter.activeProfile if (param.getTag() == PictureParameter.activeProfile && !param.getActiveProfile()) { && !param.getActiveProfile()) { synchronized (mPictureProfileLock) { synchronized (mPictureProfileLock) { mHandleToPictureProfile.remove(dbId); mOriginalToCurrent.remove(dbId); mCurrentPictureHandleToOriginal.removeValue(dbId); mCurrentPictureHandleToOriginal.removeValue(dbId); } } break; break; Loading Loading @@ -2122,7 +2126,7 @@ public class MediaQualityService extends SystemService { mHandler.post(() -> { mHandler.post(() -> { synchronized (mPictureProfileLock) { synchronized (mPictureProfileLock) { // get from map if exists // get from map if exists PictureProfile previous = mHandleToPictureProfile.get(profileHandle); PictureProfile previous = getCurrentPictureProfile(profileHandle); if (previous == null) { if (previous == null) { Slog.d(TAG, "Previous profile not in the map"); Slog.d(TAG, "Previous profile not in the map"); // get from DB if not exists // get from DB if not exists Loading Loading @@ -2192,7 +2196,7 @@ public class MediaQualityService extends SystemService { // profile // profile PictureProfile currentCopy = PictureProfile.copyFrom(currentSdr); PictureProfile currentCopy = PictureProfile.copyFrom(currentSdr); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, currentSdr); mOriginalToCurrent.put(profileHandle, currentSdr.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( currentSdr.getHandle().getId(), profileHandle); currentSdr.getHandle().getId(), profileHandle); Loading @@ -2218,7 +2222,7 @@ public class MediaQualityService extends SystemService { // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile PictureProfile currentCopy = PictureProfile.copyFrom(current); PictureProfile currentCopy = PictureProfile.copyFrom(current); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, current); mOriginalToCurrent.put(profileHandle, current.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( current.getHandle().getId(), profileHandle); current.getHandle().getId(), profileHandle); Loading Loading @@ -2254,7 +2258,7 @@ public class MediaQualityService extends SystemService { // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile // PREVIOUS_STREAM_STATUS is used for one time, so copy the current profile PictureProfile currentCopy = PictureProfile.copyFrom(current); PictureProfile currentCopy = PictureProfile.copyFrom(current); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); currentCopy.addStringParameter(PREVIOUS_STREAM_STATUS, profileStatus); mHandleToPictureProfile.put(profileHandle, current); mOriginalToCurrent.put(profileHandle, current.getHandle().getId()); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.removeValue(profileHandle); mCurrentPictureHandleToOriginal.put( mCurrentPictureHandleToOriginal.put( current.getHandle().getId(), profileHandle); current.getHandle().getId(), profileHandle); Loading Loading @@ -2655,4 +2659,12 @@ public class MediaQualityService extends SystemService { } } return list.getFirst(); return list.getFirst(); } } private PictureProfile getCurrentPictureProfile(Long originalHandle) { Long currentHandle = mOriginalToCurrent.get(originalHandle); if (currentHandle == null) { return null; } return mMqDatabaseUtils.getPictureProfile(currentHandle, /* includeParams= */ true); } } }