diff options
author | Jay Wang <jaywang@codeaurora.org> | 2016-10-18 11:10:14 -0700 |
---|---|---|
committer | Jay Wang <jaywang@codeaurora.org> | 2016-11-07 14:25:08 -0800 |
commit | e3e71661b5f063dbfe1314800da1da0b217e49f6 (patch) | |
tree | e392a7e976c1fd45cc01cfd1b6694715439ac52f | |
parent | cebd17a6fcf0868f9dfaff960f5e87e11d7e6d88 (diff) | |
download | android_packages_apps_Snap-e3e71661b5f063dbfe1314800da1da0b217e49f6.tar.gz android_packages_apps_Snap-e3e71661b5f063dbfe1314800da1da0b217e49f6.tar.bz2 android_packages_apps_Snap-e3e71661b5f063dbfe1314800da1da0b217e49f6.zip |
SnapdragonCamera: run-time updates the video encoder list
Update the supported video encoder list based on video
resolution. In addition, re-factor the run-time filtering
of HFR list to follow the same approach.
Finally, simplify the beautification dependency handling
logic by fixing the supported video resolution to 720x480.
CRs-Fixed: 1081552
Change-Id: I32b96f7ccf152ddf01400e9564e072e1bf1b68d1
-rw-r--r-- | assets/dependency.json | 3 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/ListPreference.java | 11 | ||||
-rw-r--r-- | src/com/android/camera/SettingsActivity.java | 16 | ||||
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 309 |
5 files changed, 166 insertions, 177 deletions
diff --git a/assets/dependency.json b/assets/dependency.json index ebb9c6a25..e415a1cec 100644 --- a/assets/dependency.json +++ b/assets/dependency.json @@ -69,6 +69,7 @@ { "0":{}, "default": - {"pref_camera2_facedetection_key":"on"} + {"pref_camera2_facedetection_key":"on", + "pref_camera2_video_quality_key":"720x480"} } } diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 7ca4d9c45..7dc788666 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -1041,7 +1041,7 @@ public class CameraSettings { return false; } - public static boolean filterUnsupportedOptions(PreferenceGroup group, + private static boolean filterUnsupportedOptions(PreferenceGroup group, ListPreference pref, List<String> supported) { // Remove the preference if the parameter is not supported or there is @@ -1061,7 +1061,7 @@ public class CameraSettings { return false; } - public static boolean filterSimilarPictureSize(PreferenceGroup group, + private static boolean filterSimilarPictureSize(PreferenceGroup group, ListPreference pref) { pref.filterDuplicated(); if (pref.getEntries().length <= 1) { diff --git a/src/com/android/camera/ListPreference.java b/src/com/android/camera/ListPreference.java index 722e958b2..ae37356e1 100644 --- a/src/com/android/camera/ListPreference.java +++ b/src/com/android/camera/ListPreference.java @@ -38,10 +38,12 @@ public class ListPreference extends CameraPreference { private static final String TAG = "ListPreference"; private final String mKey; private String mValue; - public final CharSequence[] mDefaultValues; + private final CharSequence[] mDefaultValues; private CharSequence[] mEntries; private CharSequence[] mEntryValues; + private CharSequence[] mInitialEntries; + private CharSequence[] mInitialEntryValues; private CharSequence[] mDependencyList; private CharSequence[] mLabels; private boolean mLoaded = false; @@ -72,6 +74,9 @@ public class ListPreference extends CameraPreference { setEntries(a.getTextArray(R.styleable.ListPreference_entries)); setEntryValues(a.getTextArray( R.styleable.ListPreference_entryValues)); + mInitialEntryValues = mEntryValues; + mInitialEntries = mEntries; + setLabels(a.getTextArray( R.styleable.ListPreference_labelList)); setDependencyList(a.getTextArray( @@ -222,6 +227,10 @@ public class ListPreference extends CameraPreference { mEntryValues = entryValues.toArray(new CharSequence[size]); } + public void reloadInitialEntriesAndEntryValues() { + mEntries = mInitialEntries; + mEntryValues = mInitialEntryValues; + } public void print() { Log.v(TAG, "Preference key=" + getKey() + ". value=" + getValue()); for (int i = 0; i < mEntryValues.length; i++) { diff --git a/src/com/android/camera/SettingsActivity.java b/src/com/android/camera/SettingsActivity.java index 32c6b5cad..08e513a88 100644 --- a/src/com/android/camera/SettingsActivity.java +++ b/src/com/android/camera/SettingsActivity.java @@ -73,6 +73,7 @@ public class SettingsActivity extends PreferenceActivity { } if (key.equals(SettingsManager.KEY_VIDEO_QUALITY)) { updatePreference(SettingsManager.KEY_VIDEO_HIGH_FRAME_RATE); + updatePreference(SettingsManager.KEY_VIDEO_ENCODER); } List<String> list = mSettingsManager.getDependentKeys(key); if (list != null) { @@ -151,6 +152,7 @@ public class SettingsActivity extends PreferenceActivity { updatePreference(SettingsManager.KEY_VIDEO_QUALITY); updatePreference(SettingsManager.KEY_EXPOSURE); updatePreference(SettingsManager.KEY_VIDEO_HIGH_FRAME_RATE); + updatePreference(SettingsManager.KEY_VIDEO_ENCODER); Map<String, SettingsManager.Values> map = mSettingsManager.getValuesMap(); Set<Map.Entry<String, SettingsManager.Values>> set = map.entrySet(); @@ -199,9 +201,15 @@ public class SettingsActivity extends PreferenceActivity { private void updatePreference(String key) { ListPreference pref = (ListPreference) findPreference(key); if (pref != null) { - pref.setEntries(mSettingsManager.getEntries(key)); - pref.setEntryValues(mSettingsManager.getEntryValues(key)); - pref.setValueIndex(mSettingsManager.getValueIndex(key)); + if (mSettingsManager.getEntries(key) != null) { + pref.setEntries(mSettingsManager.getEntries(key)); + pref.setEntryValues(mSettingsManager.getEntryValues(key)); + int idx = mSettingsManager.getValueIndex(key); + if (idx < 0 ) { + idx = 0; + } + pref.setValueIndex(idx); + } } } @@ -214,4 +222,4 @@ public class SettingsActivity extends PreferenceActivity { super.onStop(); mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener); } -}
\ No newline at end of file +} diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index e076b3824..d2de113ab 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -44,6 +44,8 @@ import android.util.Log; import android.util.Range; import android.util.Rational; import android.util.Size; +import android.media.EncoderCapabilities; +import android.media.EncoderCapabilities.VideoEncoderCap; import com.android.camera.imageprocessor.filter.BeautificationFilter; import com.android.camera.imageprocessor.filter.BestpictureFilter; @@ -140,8 +142,6 @@ public class SettingsManager implements ListMenu.SettingsListener { private JSONObject mDependency; private int mCameraId; private Set<String> mFilteredKeys; - private CharSequence[] mVideoQualityEntryValues; - private CharSequence[] mVideoQualityEntries; public Map<String, Values> getValuesMap() { return mValuesMap; @@ -225,8 +225,7 @@ public class SettingsManager implements ListMenu.SettingsListener { String key = pref.getKey(); List changed = checkDependencyAndUpdate(key); if (changed == null) return; - if (pref.getKey().equals(KEY_VIDEO_QUALITY)) buildHFR(); - if (pref.getKey().equals(KEY_MAKEUP)) checkVideoSizeDependency(); + runTimeUpdateDependencyOptions(pref); notifyListeners(changed); } @@ -253,34 +252,8 @@ public class SettingsManager implements ListMenu.SettingsListener { mDependendsOnMap = new HashMap<>(); mFilteredKeys = new HashSet<>(); filterPreferences(cameraId); - initDepedencyTable(); + initDependencyTable(); initializeValueMap(); - checkInitialDependency(cameraId); - } - - private void checkInitialDependency(int cameraId) { - ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); - if (videoQuality != null) { - String scene = getValue(SettingsManager.KEY_MAKEUP); - if (scene != null && !scene.equals("0")) { - updateVideoQualityMenu(cameraId, 720, 480); - } - } - } - - private void checkVideoSizeDependency() { - String makeup = getValue(SettingsManager.KEY_MAKEUP); - String video = getValue(SettingsManager.KEY_VIDEO_QUALITY); - Size videoSize = parseSize(video); - if (makeup != null && !makeup.equals("0")) { - if (videoSize.getWidth() > 720 || videoSize.getHeight() > 480) { - String size = getSupportedVideoSize(mCameraId, 720, 480).get(0); - setValue(KEY_VIDEO_QUALITY, size); - } - updateVideoQualityMenu(mCameraId, 720, 480); - } else { - updateVideoQualityMenu(mCameraId, -1, -1); - } } private Size parseSize(String value) { @@ -290,7 +263,7 @@ public class SettingsManager implements ListMenu.SettingsListener { return new Size(width, height); } - private void initDepedencyTable() { + private void initDependencyTable() { for (int i = 0; i < mPreferenceGroup.size(); i++) { ListPreference pref = (ListPreference) mPreferenceGroup.get(i); String baseKey = pref.getKey(); @@ -455,7 +428,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public int getValueIndex(String key) { ListPreference pref = mPreferenceGroup.findPreference(key); String value = getValue(key); - if (value == null) return -1; + if ((value == null) || (pref == null)) return -1; return pref.findIndexOfValue(value); } @@ -481,16 +454,17 @@ public class SettingsManager implements ListMenu.SettingsListener { public void setValueIndex(String key, int index) { ListPreference pref = mPreferenceGroup.findPreference(key); - pref.setValueIndex(index); - updateMapAndNotify(pref); + if (pref != null) { + pref.setValueIndex(index); + updateMapAndNotify(pref); + } } private void updateMapAndNotify(ListPreference pref) { String key = pref.getKey(); List changed = checkDependencyAndUpdate(key); if (changed == null) return; - if (pref.getKey().equals(KEY_VIDEO_QUALITY)) buildHFR(); - if (pref.getKey().equals(KEY_MAKEUP)) checkVideoSizeDependency(); + runTimeUpdateDependencyOptions(pref); notifyListeners(changed); } @@ -500,12 +474,18 @@ public class SettingsManager implements ListMenu.SettingsListener { public CharSequence[] getEntries(String key) { ListPreference pref = mPreferenceGroup.findPreference(key); - return pref.getEntries(); + if (pref != null) { + return pref.getEntries(); + } + return null; } public CharSequence[] getEntryValues(String key) { ListPreference pref = mPreferenceGroup.findPreference(key); - return pref.getEntryValues(); + if (pref != null) { + return pref.getEntryValues(); + } + return null; } public int[] getResource(String key, int type) { @@ -528,22 +508,6 @@ public class SettingsManager implements ListMenu.SettingsListener { else return CaptureModule.MONO_ID; } - public void updateVideoQualityMenu(int cameraId, int maxWidth, int maxHeight) { - ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); - videoQuality.setEntryValues(mVideoQualityEntryValues); - videoQuality.setEntries(mVideoQualityEntries); - if (videoQuality != null) { - List<String> sizes; - if(maxWidth < 0 && maxHeight < 0) { - sizes = getSupportedVideoSize(cameraId); - } else { - sizes = getSupportedVideoSize(cameraId, maxWidth, maxHeight); - } - CameraSettings.filterUnsupportedOptions(mPreferenceGroup, - videoQuality, sizes); - } - } - private void filterPreferences(int cameraId) { // filter unsupported preferences ListPreference whiteBalance = mPreferenceGroup.findPreference(KEY_WHITE_BALANCE); @@ -560,13 +524,10 @@ public class SettingsManager implements ListMenu.SettingsListener { ListPreference mpo = mPreferenceGroup.findPreference(KEY_MPO); ListPreference redeyeReduction = mPreferenceGroup.findPreference(KEY_REDEYE_REDUCTION); ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); - ListPreference videoEncoder = mPreferenceGroup.findPreference(KEY_VIDEO_ENCODER); ListPreference audioEncoder = mPreferenceGroup.findPreference(KEY_AUDIO_ENCODER); ListPreference noiseReduction = mPreferenceGroup.findPreference(KEY_NOISE_REDUCTION); ListPreference faceDetection = mPreferenceGroup.findPreference(KEY_FACE_DETECTION); - ListPreference makeup = mPreferenceGroup.findPreference(KEY_MAKEUP); ListPreference trackingfocus = mPreferenceGroup.findPreference(KEY_TRACKINGFOCUS); - ListPreference hfr = mPreferenceGroup.findPreference(KEY_VIDEO_HIGH_FRAME_RATE); if (whiteBalance != null) { if (filterUnsupportedOptions(whiteBalance, getSupportedWhiteBalanceModes(cameraId))) { @@ -599,7 +560,7 @@ public class SettingsManager implements ListMenu.SettingsListener { if (filterUnsupportedOptions(pictureSize, getSupportedPictureSize(cameraId))) { mFilteredKeys.add(pictureSize.getKey()); } else { - if (CameraSettings.filterSimilarPictureSize(mPreferenceGroup, pictureSize)) { + if (filterSimilarPictureSize(mPreferenceGroup, pictureSize)) { mFilteredKeys.add(pictureSize.getKey()); } } @@ -614,10 +575,10 @@ public class SettingsManager implements ListMenu.SettingsListener { } if (videoQuality != null) { - CameraSettings.filterUnsupportedOptions(mPreferenceGroup, - videoQuality, getSupportedVideoSize(cameraId)); - mVideoQualityEntryValues = videoQuality.getEntryValues(); - mVideoQualityEntries = videoQuality.getEntries(); + if (filterUnsupportedOptions(videoQuality, + getSupportedVideoSize(cameraId))) { + mFilteredKeys.add(videoQuality.getKey()); + } } if (!mIsMonoCameraPresent) { @@ -633,13 +594,6 @@ public class SettingsManager implements ListMenu.SettingsListener { } } - if (videoEncoder != null) { - if (filterUnsupportedOptions(videoEncoder, - getSupportedVideoEncoders(videoEncoder.getEntryValues()))) { - mFilteredKeys.add(videoEncoder.getKey()); - } - } - if (audioEncoder != null) { if (filterUnsupportedOptions(audioEncoder, getSupportedAudioEncoders(audioEncoder.getEntryValues()))) { @@ -665,9 +619,10 @@ public class SettingsManager implements ListMenu.SettingsListener { removePreference(mPreferenceGroup, KEY_TRACKINGFOCUS); } - if (hfr != null) { - buildHFR(); - } + // filter dynamic lists. + // These list can be changed run-time + filterHFROptions(); + filterVideoEncoderOptions(); if (!mIsFrontCameraPresent || !isFacingFront(mCameraId)) { removePreference(mPreferenceGroup, KEY_SELFIE_FLASH); @@ -675,6 +630,14 @@ public class SettingsManager implements ListMenu.SettingsListener { } } + private void runTimeUpdateDependencyOptions(ListPreference pref) { + // update the supported list + if (pref.getKey().equals(KEY_VIDEO_QUALITY)) { + filterHFROptions(); + filterVideoEncoderOptions(); + } + } + private void buildExposureCompensation(int cameraId) { Range<Integer> range = mCharacteristics.get(cameraId).get(CameraCharacteristics .CONTROL_AE_COMPENSATION_RANGE); @@ -747,86 +710,52 @@ public class SettingsManager implements ListMenu.SettingsListener { cameraIdPref.setEntries(entries); } - private void buildHFR() { - ListPreference hfrPref = mPreferenceGroup.findPreference(KEY_VIDEO_HIGH_FRAME_RATE); - Size[] highSpeedVideoSize = getSupportedHighSpeedVideoSize(mCameraId); - if (highSpeedVideoSize.length == 0) { - CharSequence[] entryValues = new CharSequence[1]; - CharSequence[] entries = new CharSequence[1]; - entryValues[0] = "off"; - entries[0] = "off"; - hfrPref.setEntryValues(entryValues); - hfrPref.setEntries(entries); - setValueIndex(KEY_VIDEO_HIGH_FRAME_RATE, 0); - return; - } + private void filterVideoEncoderOptions() { + ListPreference videoEncoder = mPreferenceGroup.findPreference(KEY_VIDEO_ENCODER); - ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); - String video = videoQuality.getValue(); - int x = video.indexOf('x'); - Size videoSize = new Size(Integer.parseInt(video.substring(0, x)), - Integer.parseInt(video.substring(x + 1))); - - boolean found = false; - for (Size s : highSpeedVideoSize) { - if (videoSize.equals(s)) { - found = true; - break; + if (videoEncoder != null) { + videoEncoder.reloadInitialEntriesAndEntryValues(); + if (filterUnsupportedOptions(videoEncoder, + getSupportedVideoEncoders())) { + mFilteredKeys.add(videoEncoder.getKey()); } } + } - if (!found) { - CharSequence[] entryValues = new CharSequence[1]; - CharSequence[] entries = new CharSequence[1]; - entryValues[0] = "off"; - entries[0] = "Off"; - hfrPref.setEntryValues(entryValues); - hfrPref.setEntries(entries); - setValueIndex(KEY_VIDEO_HIGH_FRAME_RATE, 0); - return; - } - - Range[] range = getSupportedHighSpeedVideoFPSRange(mCameraId, videoSize); - ArrayList<Range> list = new ArrayList<>(); - for (Range r : range) { - if (r.getLower() == r.getUpper()) { - list.add(r); + private void filterHFROptions() { + ListPreference hfrPref = mPreferenceGroup.findPreference(KEY_VIDEO_HIGH_FRAME_RATE); + if (hfrPref != null) { + hfrPref.reloadInitialEntriesAndEntryValues(); + if (filterUnsupportedOptions(hfrPref, + getSupportedHighFrameRate())) { + mFilteredKeys.add(hfrPref.getKey()); } } + } - if (list.size() == 0) { - CharSequence[] entryValues = new CharSequence[1]; - CharSequence[] entries = new CharSequence[1]; - entryValues[0] = "off"; - entries[0] = "Off"; - hfrPref.setEntryValues(entryValues); - hfrPref.setEntries(entries); - setValueIndex(KEY_VIDEO_HIGH_FRAME_RATE, 0); - return; - } + private List<String> getSupportedHighFrameRate() { + ArrayList<String> supported = new ArrayList<String>(); + supported.add("off"); - CharSequence[] entryValues = new CharSequence[list.size() * 2 + 1]; - CharSequence[] entries = new CharSequence[list.size() * 2 + 1]; - entryValues[0] = "off"; - entries[0] = "Off"; - int i = 1; - for (Range r : list) { - entries[i] = "HFR " + r.getLower(); - entryValues[i] = "hfr" + r.getLower(); - i++; - } - for (Range r : list) { - entries[i] = "HSR " + r.getLower(); - entryValues[i] = "hsr" + r.getLower(); - i++; - } - - hfrPref.setEntryValues(entryValues); - hfrPref.setEntries(entries); - int index = getValueIndex(KEY_VIDEO_HIGH_FRAME_RATE); - if (index == -1) { - setValueIndex(KEY_VIDEO_HIGH_FRAME_RATE, 0); + ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); + String videoSizeStr = videoQuality.getValue(); + if (videoSizeStr != null) { + Size videoSize = parseSize(videoSizeStr); + try { + Range[] range = getSupportedHighSpeedVideoFPSRange(mCameraId, videoSize); + for (Range r : range) { + // To support HFR for both preview and recording, + // minmal FPS needs to be equal to maximum FPS + if ((int) r.getUpper() == (int)r.getLower()) { + supported.add("hfr" + String.valueOf(r.getUpper())); + supported.add("hsr" + String.valueOf(r.getUpper())); + } + } + } catch (IllegalArgumentException ex) { + Log.w(TAG, "HFR is not supported for this resolution " + ex); + } } + return supported; } private boolean removePreference(PreferenceGroup group, String key) { @@ -991,24 +920,6 @@ public class SettingsManager implements ListMenu.SettingsListener { return res; } - public List<String> getSupportedVideoSize(int cameraId, int maxWidth, int maxHeight) { - StreamConfigurationMap map = mCharacteristics.get(cameraId).get( - CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); - Size[] sizes = map.getOutputSizes(MediaRecorder.class); - List<String> res = new ArrayList<>(); - for (int i = 0; i < sizes.length; i++) { - if(sizes[i].getWidth() <= maxWidth && sizes[i].getHeight() <= maxHeight) { - if (CameraSettings.VIDEO_QUALITY_TABLE.containsKey(sizes[i].toString())) { - int profile = CameraSettings.VIDEO_QUALITY_TABLE.get(sizes[i].toString()); - if (CamcorderProfile.hasProfile(cameraId, profile)) { - res.add(sizes[i].toString()); - } - } - } - } - return res; - } - public Size[] getSupportedHighSpeedVideoSize(int cameraId) { StreamConfigurationMap map = mCharacteristics.get(cameraId).get( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); @@ -1103,12 +1014,41 @@ public class SettingsManager implements ListMenu.SettingsListener { return supportedIso; } - private static List<String> getSupportedVideoEncoders(CharSequence[] strings) { - ArrayList<String> supported = new ArrayList<>(); - for (CharSequence cs: strings) { - String s = cs.toString(); - int value = SettingTranslation.getVideoEncoder(s.toString()); - if (value != SettingTranslation.NOT_FOUND) supported.add(s.toString()); + private boolean isCurrentVideoResolutionSupportedByEncoder(VideoEncoderCap encoderCap) { + boolean supported = false; + ListPreference videoQuality = mPreferenceGroup.findPreference(KEY_VIDEO_QUALITY); + String videoSizeStr = videoQuality.getValue(); + + if (videoSizeStr != null) { + Size videoSize = parseSize(videoSizeStr); + + if (videoSize.getWidth() > encoderCap.mMaxFrameWidth || + videoSize.getWidth() < encoderCap.mMinFrameWidth || + videoSize.getHeight() > encoderCap.mMaxFrameHeight || + videoSize.getHeight() < encoderCap.mMinFrameHeight) { + Log.e(TAG, "Codec = " + encoderCap.mCodec + ", capabilities: " + + "mMinFrameWidth = " + encoderCap.mMinFrameWidth + " , " + + "mMinFrameHeight = " + encoderCap.mMinFrameHeight + " , " + + "mMaxFrameWidth = " + encoderCap.mMaxFrameWidth + " , " + + "mMaxFrameHeight = " + encoderCap.mMaxFrameHeight); + } else { + supported = true; + } + } + return supported; + } + + private List<String> getSupportedVideoEncoders() { + ArrayList<String> supported = new ArrayList<String>(); + String str = null; + List<VideoEncoderCap> videoEncoders = EncoderCapabilities.getVideoEncoders(); + for (VideoEncoderCap videoEncoder: videoEncoders) { + str = SettingTranslation.getVideoEncoder(videoEncoder.mCodec); + if (str != null) { + if (isCurrentVideoResolutionSupportedByEncoder(videoEncoder)) { + supported.add(str); + } + } } return supported; } @@ -1134,8 +1074,39 @@ public class SettingsManager implements ListMenu.SettingsListener { return modes; } + private void resetIfInvalid(ListPreference pref) { + // Set the value to the first entry if it is invalid. + String value = pref.getValue(); + if (pref.findIndexOfValue(value) == -1) { + pref.setValueIndex(0); + } + } + + private boolean filterSimilarPictureSize(PreferenceGroup group, + ListPreference pref) { + pref.filterDuplicated(); + if (pref.getEntries().length <= 1) { + removePreference(group, pref.getKey()); + return true; + } + resetIfInvalid(pref); + return false; + } + private boolean filterUnsupportedOptions(ListPreference pref, List<String> supported) { - return CameraSettings.filterUnsupportedOptions(mPreferenceGroup, pref, supported); + // Remove the preference if the parameter is not supported + if (supported == null) { + removePreference(mPreferenceGroup, pref.getKey()); + return true; + } + pref.filterUnsupported(supported); + if (pref.getEntries().length <= 0) { + removePreference(mPreferenceGroup, pref.getKey()); + return true; + } + + resetIfInvalid(pref); + return false; } public interface Listener { |