diff --git a/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceController.java b/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceController.java index 59f5c51fac4..856b919f17b 100644 --- a/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceController.java +++ b/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceController.java @@ -23,6 +23,8 @@ import android.util.Log; import androidx.preference.Preference; +import java.util.UUID; + import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; @@ -34,6 +36,8 @@ import com.android.settings.media_drm.Flags; */ public class ForceSwSecureCryptoFallbackPreferenceController extends TogglePreferenceController { private static final String TAG = "ForceSwSecureCryptoFallbackPreferenceController"; + private static final UUID WIDEVINE_UUID = + new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL); public ForceSwSecureCryptoFallbackPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); @@ -52,15 +56,24 @@ public class ForceSwSecureCryptoFallbackPreferenceController extends TogglePrefe @Override public void updateState(Preference preference) { + boolean isEnable = false; if (Flags.forceL3Enabled()) { - preference.setEnabled(true); - Log.i(TAG, "forceL3Enabled is on"); - } else { - preference.setEnabled(false); + try (MediaDrm drm = new MediaDrm(WIDEVINE_UUID)) { + String version = drm.getPropertyString(MediaDrm.PROPERTY_VERSION); + if (Integer.parseInt(version.split("\\.", 2)[0]) >= 19) { + isEnable = true; + } + } catch (Exception ex) { + Log.e(TAG, "An exception occurred:", ex); + } + } + + preference.setEnabled(isEnable); + if (!isEnable) { // In case of flag rollback, the controller should be unchecked. WidevineProperties.forcel3_enabled(false); - Log.i(TAG, "forceL3Enabled is off"); } + Log.i(TAG, "Force software crypto is " + isEnable); super.updateState(preference); } diff --git a/tests/unit/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceControllerTest.java b/tests/unit/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceControllerTest.java index 8be3bc02124..2a0cd05811e 100644 --- a/tests/unit/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/development/mediadrm/ForceSwSecureCryptoFallbackPreferenceControllerTest.java @@ -137,4 +137,22 @@ public class ForceSwSecureCryptoFallbackPreferenceControllerTest { assumeNoException(ex); } } + + @Test + public void updateState_checkWhenWidevineReady() throws Exception { + try (MediaDrm drm = new MediaDrm(WIDEVINE_UUID)) { + if (drm.getPropertyString("securityLevel").equals("L1")) { + String version = drm.getPropertyString(MediaDrm.PROPERTY_VERSION); + mSetFlagsRule.enableFlags(Flags.FLAG_FORCE_L3_ENABLED); + mController.updateState(mPreference); + if (Integer.parseInt(version.split("\\.", 2)[0]) >= 19) { + assertThat(mPreference.isEnabled()).isTrue(); + } else { + assertThat(mPreference.isEnabled()).isFalse(); + } + } + } catch (UnsupportedSchemeException ex) { + assumeNoException(ex); + } + } }