diff --git a/src/com/android/dialer/calllog/PhoneAccountUtils.java b/src/com/android/dialer/calllog/PhoneAccountUtils.java
index 8c3985b..b3ce18b 100644
--- a/src/com/android/dialer/calllog/PhoneAccountUtils.java
+++ b/src/com/android/dialer/calllog/PhoneAccountUtils.java
@@ -59,6 +59,9 @@
             return null;
         }
         final ComponentName componentName = ComponentName.unflattenFromString(componentString);
+        if (componentName == null) {
+            return null;
+        }
         return new PhoneAccountHandle(componentName, accountId);
     }
 
diff --git a/tests/src/com/android/dialer/calllog/PhoneAccountUtilsTest.java b/tests/src/com/android/dialer/calllog/PhoneAccountUtilsTest.java
new file mode 100644
index 0000000..f2d0856
--- /dev/null
+++ b/tests/src/com/android/dialer/calllog/PhoneAccountUtilsTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.calllog;
+
+import android.content.ComponentName;
+import android.telecom.PhoneAccountHandle;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+public class PhoneAccountUtilsTest extends AndroidTestCase {
+
+    private static final String VALID_COMPONENT_NAME =
+            "com.android.dialer.calllog/com.android.dialer.calllog.PhoneAccountUtilsTest";
+    private static final String VALID_ACCOUNT_ID = "Account1";
+
+    @SmallTest
+    public void testGetAccount_CorrectParams() {
+        ComponentName correctComponentName =
+                ComponentName.unflattenFromString(VALID_COMPONENT_NAME);
+        PhoneAccountHandle correctPhoneAccountHandle = new PhoneAccountHandle(correctComponentName,
+                VALID_ACCOUNT_ID);
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(VALID_COMPONENT_NAME, VALID_ACCOUNT_ID);
+
+        assertTrue(correctPhoneAccountHandle.equals(testPhoneAccountHandle));
+    }
+
+    @SmallTest
+    public void testGetAccount_ComponentStringNoClassName() {
+        final String malformedComponentName = "com.android.dialer.calllog/";
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(malformedComponentName, VALID_ACCOUNT_ID);
+
+        assertNull(testPhoneAccountHandle);
+    }
+
+    @SmallTest
+    public void testGetAccount_ComponentStringInvalid() {
+        final String malformedComponentName = "com.android.dialer.calllog";
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(malformedComponentName, VALID_ACCOUNT_ID);
+
+        assertNull(testPhoneAccountHandle);
+    }
+
+    @SmallTest
+    public void testGetAccount_NoComponentName() {
+        final String blankComponentName = "";
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(blankComponentName, VALID_ACCOUNT_ID);
+
+        assertNull(testPhoneAccountHandle);
+    }
+
+    @SmallTest
+    public void testGetAccount_NoAccountId() {
+        final String blankAccountId = "";
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(VALID_COMPONENT_NAME, blankAccountId);
+
+        assertNull(testPhoneAccountHandle);
+    }
+
+    @SmallTest
+    public void testGetAccount_NoAccountIdOrComponentName() {
+        final String blankComponentName = "";
+        final String blankAccountId = "";
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(VALID_COMPONENT_NAME, blankAccountId);
+
+        assertNull(testPhoneAccountHandle);
+    }
+
+    @SmallTest
+    public void testGetAccount_NullAccountIdAndComponentName() {
+        final String blankComponentName = null;
+        final String blankAccountId = null;
+
+        PhoneAccountHandle testPhoneAccountHandle =
+                PhoneAccountUtils.getAccount(VALID_COMPONENT_NAME, blankAccountId);
+
+        assertNull(testPhoneAccountHandle);
+    }
+}
