Snap for 4829593 from e655d4f8e730346c7f424bd9ddbb7c2a6fd90648 to pi-release

Change-Id: I3faf3936bb38b5f84d189bc69fc301384213f0ba
diff --git a/jni/com_android_bluetooth_avrcp_target.cpp b/jni/com_android_bluetooth_avrcp_target.cpp
index d57d7b4..2532be2 100644
--- a/jni/com_android_bluetooth_avrcp_target.cpp
+++ b/jni/com_android_bluetooth_avrcp_target.cpp
@@ -307,6 +307,8 @@
 static SongInfo getSongInfoFromJavaObj(JNIEnv* env, jobject metadata) {
   SongInfo info;
 
+  if (metadata == nullptr) return info;
+
   jclass class_metadata = env->GetObjectClass(metadata);
   jfieldID field_mediaId =
       env->GetFieldID(class_metadata, "mediaId", "Ljava/lang/String;");
@@ -326,7 +328,7 @@
       env->GetFieldID(class_metadata, "duration", "Ljava/lang/String;");
 
   jstring jstr = (jstring)env->GetObjectField(metadata, field_mediaId);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.media_id = std::string(value);
     env->ReleaseStringUTFChars(jstr, value);
@@ -334,7 +336,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_title);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::TITLE, std::string(value)));
@@ -343,7 +345,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_artist);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::ARTIST_NAME, std::string(value)));
@@ -352,7 +354,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_album);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::ALBUM_NAME, std::string(value)));
@@ -361,7 +363,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_trackNum);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::TRACK_NUMBER, std::string(value)));
@@ -370,7 +372,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_numTracks);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::TOTAL_NUMBER_OF_TRACKS, std::string(value)));
@@ -379,7 +381,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_genre);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::GENRE, std::string(value)));
@@ -388,7 +390,7 @@
   }
 
   jstr = (jstring)env->GetObjectField(metadata, field_playingTime);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.attributes.insert(
         AttributeEntry(Attribute::PLAYING_TIME, std::string(value)));
@@ -410,7 +412,7 @@
       env->GetFieldID(class_folder, "title", "Ljava/lang/String;");
 
   jstring jstr = (jstring)env->GetObjectField(folder, field_mediaId);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.media_id = std::string(value);
     env->ReleaseStringUTFChars(jstr, value);
@@ -419,7 +421,7 @@
   info.is_playable = env->GetBooleanField(folder, field_isPlayable) == JNI_TRUE;
 
   jstr = (jstring)env->GetObjectField(folder, field_name);
-  if (jstr != NULL) {
+  if (jstr != nullptr) {
     const char* value = env->GetStringUTFChars(jstr, nullptr);
     info.name = std::string(value);
     env->ReleaseStringUTFChars(jstr, value);
@@ -448,6 +450,12 @@
   PlayStatus status;
   jobject playStatus =
       sCallbackEnv->CallObjectMethod(mJavaInterface, method_getPlaybackStatus);
+
+  if (playStatus == nullptr) {
+    ALOGE("%s: Got a null play status", __func__);
+    return status;
+  }
+
   jclass class_playStatus = sCallbackEnv->GetObjectClass(playStatus);
   jfieldID field_position =
       sCallbackEnv->GetFieldID(class_playStatus, "position", "J");
@@ -471,7 +479,10 @@
 
   jstring media_id = (jstring)sCallbackEnv->CallObjectMethod(
       mJavaInterface, method_getCurrentMediaId);
-  if (media_id == NULL) return "";
+  if (media_id == nullptr) {
+    ALOGE("%s: Got a null media ID", __func__);
+    return "";
+  }
 
   const char* value = sCallbackEnv->GetStringUTFChars(media_id, nullptr);
   std::string ret(value);
@@ -487,7 +498,7 @@
 
   jobject song_list =
       sCallbackEnv->CallObjectMethod(mJavaInterface, method_getNowPlayingList);
-  if (song_list == NULL) {
+  if (song_list == nullptr) {
     ALOGE("%s: Got a null now playing list", __func__);
     return std::vector<SongInfo>();
   }
@@ -531,6 +542,11 @@
   jobject player_list = (jobject)sCallbackEnv->CallObjectMethod(
       mJavaInterface, method_getMediaPlayerList);
 
+  if (player_list == nullptr) {
+    ALOGE("%s: Got a null media player list", __func__);
+    return std::vector<MediaPlayerInfo>();
+  }
+
   jclass class_list = sCallbackEnv->GetObjectClass(player_list);
   jmethodID method_get =
       sCallbackEnv->GetMethodID(class_list, "get", "(I)Ljava/lang/Object;");
@@ -558,7 +574,7 @@
     temp.id = sCallbackEnv->GetIntField(player, field_playerId);
 
     jstring jstr = (jstring)sCallbackEnv->GetObjectField(player, field_name);
-    if (jstr != NULL) {
+    if (jstr != nullptr) {
       const char* value = sCallbackEnv->GetStringUTFChars(jstr, nullptr);
       temp.name = std::string(value);
       sCallbackEnv->ReleaseStringUTFChars(jstr, value);
@@ -598,7 +614,7 @@
   ALOGD("%s", __func__);
 
   std::string root;
-  if (root_id != NULL) {
+  if (root_id != nullptr) {
     const char* value = env->GetStringUTFChars(root_id, nullptr);
     root = std::string(value);
     env->ReleaseStringUTFChars(root_id, value);
@@ -615,7 +631,7 @@
   ALOGD("%s", __func__);
 
   std::string id;
-  if (parent_id != NULL) {
+  if (parent_id != nullptr) {
     const char* value = env->GetStringUTFChars(parent_id, nullptr);
     id = std::string(value);
     env->ReleaseStringUTFChars(parent_id, value);
@@ -634,6 +650,12 @@
   auto callback = get_folder_items_cb_map.find(id)->second;
   get_folder_items_cb_map.erase(id);
 
+  if (list == nullptr) {
+    ALOGE("%s: Got a null get folder items response list", __func__);
+    callback.Run(std::vector<ListItem>());
+    return;
+  }
+
   jclass class_list = env->GetObjectClass(list);
   jmethodID method_get =
       env->GetMethodID(class_list, "get", "(I)Ljava/lang/Object;");