Merge "Allow CDM version v19 or later" into main

This commit is contained in:
Kyle Zhang
2024-04-02 17:58:25 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 5 deletions

View File

@@ -23,6 +23,8 @@ import android.util.Log;
import androidx.preference.Preference; import androidx.preference.Preference;
import java.util.UUID;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
@@ -34,6 +36,8 @@ import com.android.settings.media_drm.Flags;
*/ */
public class ForceSwSecureCryptoFallbackPreferenceController extends TogglePreferenceController { public class ForceSwSecureCryptoFallbackPreferenceController extends TogglePreferenceController {
private static final String TAG = "ForceSwSecureCryptoFallbackPreferenceController"; private static final String TAG = "ForceSwSecureCryptoFallbackPreferenceController";
private static final UUID WIDEVINE_UUID =
new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL);
public ForceSwSecureCryptoFallbackPreferenceController(Context context, String preferenceKey) { public ForceSwSecureCryptoFallbackPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
@@ -52,15 +56,24 @@ public class ForceSwSecureCryptoFallbackPreferenceController extends TogglePrefe
@Override @Override
public void updateState(Preference preference) { public void updateState(Preference preference) {
boolean isEnable = false;
if (Flags.forceL3Enabled()) { if (Flags.forceL3Enabled()) {
preference.setEnabled(true); try (MediaDrm drm = new MediaDrm(WIDEVINE_UUID)) {
Log.i(TAG, "forceL3Enabled is on"); String version = drm.getPropertyString(MediaDrm.PROPERTY_VERSION);
} else { if (Integer.parseInt(version.split("\\.", 2)[0]) >= 19) {
preference.setEnabled(false); 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. // In case of flag rollback, the controller should be unchecked.
WidevineProperties.forcel3_enabled(false); WidevineProperties.forcel3_enabled(false);
Log.i(TAG, "forceL3Enabled is off");
} }
Log.i(TAG, "Force software crypto is " + isEnable);
super.updateState(preference); super.updateState(preference);
} }

View File

@@ -137,4 +137,22 @@ public class ForceSwSecureCryptoFallbackPreferenceControllerTest {
assumeNoException(ex); 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);
}
}
} }