Loading drm/java/android/drm/DrmManagerClient.java +9 −27 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ public class DrmManagerClient { private final CloseGuard mCloseGuard = CloseGuard.get(); private static final String EXTENDED_INFO_DATA = "extended_info_data"; static { // Load the respective library System.loadLibrary("drmframework_jni"); Loading Loading @@ -186,22 +184,8 @@ public class DrmManagerClient { DrmManagerClient instance = (DrmManagerClient)((WeakReference)thisReference).get(); if (null != instance && null != instance.mInfoHandler) { DrmInfoEvent event = new DrmInfoEvent(uniqueId, infoType, message); Message m = instance.mInfoHandler.obtainMessage( InfoHandler.INFO_EVENT_TYPE, event); instance.mInfoHandler.sendMessage(m); } } private static void notify( Object thisReference, int uniqueId, int infoType, String message, HashMap<String, Object> attributes) { DrmManagerClient instance = (DrmManagerClient)((WeakReference)thisReference).get(); if (null != instance && null != instance.mInfoHandler) { DrmInfoEvent event = new DrmInfoEvent(uniqueId, infoType, message, attributes); Message m = instance.mInfoHandler.obtainMessage( InfoHandler.INFO_EVENT_TYPE, event); InfoHandler.INFO_EVENT_TYPE, uniqueId, infoType, message); instance.mInfoHandler.sendMessage(m); } } Loading @@ -214,25 +198,23 @@ public class DrmManagerClient { } public void handleMessage(Message msg) { DrmInfoEvent info = (DrmInfoEvent) msg.obj; DrmInfoEvent info = null; DrmErrorEvent error = null; int uniqueId; int eventType; String message; switch (msg.what) { case InfoHandler.INFO_EVENT_TYPE: uniqueId = info.getUniqueId(); eventType = info.getType(); message = info.getMessage(); int uniqueId = msg.arg1; int infoType = msg.arg2; String message = msg.obj.toString(); switch (eventType) { switch (infoType) { case DrmInfoEvent.TYPE_REMOVE_RIGHTS: { try { DrmUtils.removeFile(message); } catch (IOException e) { e.printStackTrace(); } info = new DrmInfoEvent(uniqueId, infoType, message); break; } case DrmInfoEvent.TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT: Loading @@ -240,11 +222,11 @@ public class DrmManagerClient { case DrmInfoEvent.TYPE_WAIT_FOR_RIGHTS: case DrmInfoEvent.TYPE_ACCOUNT_ALREADY_REGISTERED: case DrmInfoEvent.TYPE_RIGHTS_REMOVED: { info = new DrmInfoEvent(uniqueId, infoType, message); break; } default: info = null; error = new DrmErrorEvent(uniqueId, eventType, message); error = new DrmErrorEvent(uniqueId, infoType, message); break; } Loading drm/jni/android_drm_DrmManagerClient.cpp +5 −43 Original line number Diff line number Diff line Loading @@ -169,50 +169,12 @@ void JNIOnInfoListener::onInfo(const DrmInfoEvent& event) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jstring message = env->NewStringUTF(event.getMessage().string()); ALOGV("JNIOnInfoListener::onInfo => %d | %d | %s", uniqueId, type, event.getMessage().string()); const DrmBuffer& drmBuffer = event.getData(); if (event.getCount() > 0 || drmBuffer.length > 0) { jclass hashMapClazz = env->FindClass("java/util/HashMap"); jmethodID hashMapInitId = env->GetMethodID(hashMapClazz, "<init>", "()V"); jmethodID hashMapPutId = env->GetMethodID(hashMapClazz, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); jobject hashMapObject = env->NewObject(hashMapClazz, hashMapInitId); env->DeleteLocalRef(hashMapClazz); if (0 < drmBuffer.length) { jfieldID fid = env->GetStaticFieldID( mClass, "EXTENDED_INFO_DATA", "Ljava/lang/String;"); jstring key = (jstring) env->GetStaticObjectField(mClass, fid); jbyteArray valueByte = env->NewByteArray(drmBuffer.length); env->SetByteArrayRegion(valueByte, 0, drmBuffer.length, (jbyte*) drmBuffer.data); env->CallObjectMethod(hashMapObject, hashMapPutId, key, valueByte); env->DeleteLocalRef(valueByte); env->DeleteLocalRef(key); } DrmInfoEvent::KeyIterator keyIt = event.keyIterator(); while (keyIt.hasNext()) { String8 mapKey = keyIt.next(); jstring key = env->NewStringUTF(mapKey.string()); jstring value = env->NewStringUTF(event.get(mapKey).string()); env->CallObjectMethod(hashMapObject, hashMapPutId, key, value); env->DeleteLocalRef(value); env->DeleteLocalRef(key); } env->CallStaticVoidMethod( mClass, env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;Ljava/util/HashMap;)V"), mObject, uniqueId, type, message, hashMapObject); env->DeleteLocalRef(hashMapObject); } else { env->CallStaticVoidMethod( mClass, env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;)V"), env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;)V"), mObject, uniqueId, type, message); } env->DeleteLocalRef(message); } static Mutex sLock; Loading Loading
drm/java/android/drm/DrmManagerClient.java +9 −27 Original line number Diff line number Diff line Loading @@ -63,8 +63,6 @@ public class DrmManagerClient { private final CloseGuard mCloseGuard = CloseGuard.get(); private static final String EXTENDED_INFO_DATA = "extended_info_data"; static { // Load the respective library System.loadLibrary("drmframework_jni"); Loading Loading @@ -186,22 +184,8 @@ public class DrmManagerClient { DrmManagerClient instance = (DrmManagerClient)((WeakReference)thisReference).get(); if (null != instance && null != instance.mInfoHandler) { DrmInfoEvent event = new DrmInfoEvent(uniqueId, infoType, message); Message m = instance.mInfoHandler.obtainMessage( InfoHandler.INFO_EVENT_TYPE, event); instance.mInfoHandler.sendMessage(m); } } private static void notify( Object thisReference, int uniqueId, int infoType, String message, HashMap<String, Object> attributes) { DrmManagerClient instance = (DrmManagerClient)((WeakReference)thisReference).get(); if (null != instance && null != instance.mInfoHandler) { DrmInfoEvent event = new DrmInfoEvent(uniqueId, infoType, message, attributes); Message m = instance.mInfoHandler.obtainMessage( InfoHandler.INFO_EVENT_TYPE, event); InfoHandler.INFO_EVENT_TYPE, uniqueId, infoType, message); instance.mInfoHandler.sendMessage(m); } } Loading @@ -214,25 +198,23 @@ public class DrmManagerClient { } public void handleMessage(Message msg) { DrmInfoEvent info = (DrmInfoEvent) msg.obj; DrmInfoEvent info = null; DrmErrorEvent error = null; int uniqueId; int eventType; String message; switch (msg.what) { case InfoHandler.INFO_EVENT_TYPE: uniqueId = info.getUniqueId(); eventType = info.getType(); message = info.getMessage(); int uniqueId = msg.arg1; int infoType = msg.arg2; String message = msg.obj.toString(); switch (eventType) { switch (infoType) { case DrmInfoEvent.TYPE_REMOVE_RIGHTS: { try { DrmUtils.removeFile(message); } catch (IOException e) { e.printStackTrace(); } info = new DrmInfoEvent(uniqueId, infoType, message); break; } case DrmInfoEvent.TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT: Loading @@ -240,11 +222,11 @@ public class DrmManagerClient { case DrmInfoEvent.TYPE_WAIT_FOR_RIGHTS: case DrmInfoEvent.TYPE_ACCOUNT_ALREADY_REGISTERED: case DrmInfoEvent.TYPE_RIGHTS_REMOVED: { info = new DrmInfoEvent(uniqueId, infoType, message); break; } default: info = null; error = new DrmErrorEvent(uniqueId, eventType, message); error = new DrmErrorEvent(uniqueId, infoType, message); break; } Loading
drm/jni/android_drm_DrmManagerClient.cpp +5 −43 Original line number Diff line number Diff line Loading @@ -169,50 +169,12 @@ void JNIOnInfoListener::onInfo(const DrmInfoEvent& event) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jstring message = env->NewStringUTF(event.getMessage().string()); ALOGV("JNIOnInfoListener::onInfo => %d | %d | %s", uniqueId, type, event.getMessage().string()); const DrmBuffer& drmBuffer = event.getData(); if (event.getCount() > 0 || drmBuffer.length > 0) { jclass hashMapClazz = env->FindClass("java/util/HashMap"); jmethodID hashMapInitId = env->GetMethodID(hashMapClazz, "<init>", "()V"); jmethodID hashMapPutId = env->GetMethodID(hashMapClazz, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); jobject hashMapObject = env->NewObject(hashMapClazz, hashMapInitId); env->DeleteLocalRef(hashMapClazz); if (0 < drmBuffer.length) { jfieldID fid = env->GetStaticFieldID( mClass, "EXTENDED_INFO_DATA", "Ljava/lang/String;"); jstring key = (jstring) env->GetStaticObjectField(mClass, fid); jbyteArray valueByte = env->NewByteArray(drmBuffer.length); env->SetByteArrayRegion(valueByte, 0, drmBuffer.length, (jbyte*) drmBuffer.data); env->CallObjectMethod(hashMapObject, hashMapPutId, key, valueByte); env->DeleteLocalRef(valueByte); env->DeleteLocalRef(key); } DrmInfoEvent::KeyIterator keyIt = event.keyIterator(); while (keyIt.hasNext()) { String8 mapKey = keyIt.next(); jstring key = env->NewStringUTF(mapKey.string()); jstring value = env->NewStringUTF(event.get(mapKey).string()); env->CallObjectMethod(hashMapObject, hashMapPutId, key, value); env->DeleteLocalRef(value); env->DeleteLocalRef(key); } env->CallStaticVoidMethod( mClass, env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;Ljava/util/HashMap;)V"), mObject, uniqueId, type, message, hashMapObject); env->DeleteLocalRef(hashMapObject); } else { env->CallStaticVoidMethod( mClass, env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;)V"), env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;)V"), mObject, uniqueId, type, message); } env->DeleteLocalRef(message); } static Mutex sLock; Loading