From afd3d7928f5cf69b719096fc12df7d060e69c27b Mon Sep 17 00:00:00 2001 From: Edwin Wong Date: Wed, 1 Jun 2016 13:05:20 -0700 Subject: [PATCH] Fix FATAL EXCEPTION when Widevine Classic libraries are not found on device. On device that does not support Widevince Classic playback, display a Toast pop up to inform users. This prevents a FATAL EXCEPTION from occuring when acquireDrmInfo() returns a null response in the absence of Widevine Classic libs. To test this mode, rename libwvdrm_L?.so in system/vendor/lib and reboot. bug: 28964035 Change-Id: Ib47d4b3419a6395d402c1b78f3cdc8472b0d6946 --- .../samplePlayer/res/values/strings.xml | 1 + .../src/com/widevine/demo/AssetActivity.java | 13 ++++++++++-- .../src/com/widevine/demo/WidevineDrm.java | 21 +++++++++++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/proprietary/samplePlayer/res/values/strings.xml b/proprietary/samplePlayer/res/values/strings.xml index df73a499..ab4affc8 100644 --- a/proprietary/samplePlayer/res/values/strings.xml +++ b/proprietary/samplePlayer/res/values/strings.xml @@ -19,4 +19,5 @@ Drm Server Portal Name Update Button + This device does not support Widevine classic playback." diff --git a/proprietary/samplePlayer/src/com/widevine/demo/AssetActivity.java b/proprietary/samplePlayer/src/com/widevine/demo/AssetActivity.java index abecf9f1..ec62864b 100644 --- a/proprietary/samplePlayer/src/com/widevine/demo/AssetActivity.java +++ b/proprietary/samplePlayer/src/com/widevine/demo/AssetActivity.java @@ -19,10 +19,11 @@ import android.view.Gravity; import android.view.View; import android.util.Log; +import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.Button; +import android.widget.Toast; public abstract class AssetActivity extends Activity { @@ -219,8 +220,16 @@ public abstract class AssetActivity extends Activity { Log.d(TAG, "Click Asset path: " + assetPath); Intent intent = new Intent(context, VideoPlayerView.class); intent.putExtra("com.widevine.demo.Path", assetPath); - context.startActivity(intent); + WidevineDrm drm = new WidevineDrm(context); + if (drm.canPlayClassicWidevine()) { + context.startActivity(intent); + } else { + Toast toast = Toast.makeText( + context, R.string.no_classic, Toast.LENGTH_SHORT); + toast.setGravity(Gravity.CENTER, 0, 0); + toast.show(); + } } }); diff --git a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java index 7efbdc29..8416ca3e 100644 --- a/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java +++ b/proprietary/samplePlayer/src/com/widevine/demo/WidevineDrm.java @@ -162,19 +162,28 @@ public class WidevineDrm { logMessage("plugin: " + mPluginVersion + "\n"); } - public void registerPortal(String portal) { + public boolean canPlayClassicWidevine() { + return registerPortal(WidevineDrm.Settings.PORTAL_NAME); + } + + public boolean registerPortal(String portal) { DrmInfoRequest request = new DrmInfoRequest(DrmInfoRequest.TYPE_REGISTRATION_INFO, Settings.WIDEVINE_MIME_TYPE); request.put("WVPortalKey", portal); DrmInfo response = mDrmManager.acquireDrmInfo(request); - String drmInfoRequestStatusKey = (String)response.get("WVDrmInfoRequestStatusKey"); - if (null != drmInfoRequestStatusKey && !drmInfoRequestStatusKey.equals("")) { - mWVDrmInfoRequestStatusKey = Long.parseLong(drmInfoRequestStatusKey); + boolean canPlayClassicWidevine = true; + try { + String drmInfoRequestStatusKey = (String)response.get("WVDrmInfoRequestStatusKey"); + if (null != drmInfoRequestStatusKey && !drmInfoRequestStatusKey.equals("")) { + mWVDrmInfoRequestStatusKey = Long.parseLong(drmInfoRequestStatusKey); + } + mPluginVersion = (String)response.get("WVDrmInfoRequestVersionKey"); + } catch (NullPointerException e) { + canPlayClassicWidevine = false; } - - mPluginVersion = (String)response.get("WVDrmInfoRequestVersionKey"); + return canPlayClassicWidevine; } public int acquireRights(String assetUri) {