diff --git a/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java b/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java
index 9f12286..ab3ea37 100644
--- a/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java
+++ b/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java
@@ -24,6 +24,7 @@
 import android.media.MediaPlayer.OnInfoListener;
 import android.media.MediaPlayer.OnPreparedListener;
 import android.net.Uri;
+import android.support.annotation.VisibleForTesting;
 import android.util.AttributeSet;
 import android.view.Surface;
 import android.view.TextureView;
@@ -73,7 +74,11 @@
                     mTextureToDestroy.release();
                     mTextureToDestroy = null;
                 }
-                mMediaPlayer = MediaPlayer.create(mContext, videoUri);
+                mMediaPlayer = createMediaPlayer(mContext, videoUri);
+                if (mMediaPlayer == null) {
+                    // MediaPlayer.create() method can return null
+                    return;
+                }
                 mMediaPlayer.setSurface(new Surface(surfaceTexture));
                 mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                     @Override
@@ -113,6 +118,11 @@
         });
     }
 
+    @VisibleForTesting
+    MediaPlayer createMediaPlayer(Context context, Uri videoUri) {
+        return MediaPlayer.create(mContext, videoUri);
+    }
+
     protected static Uri resourceEntryToUri (Context context, int id) {
         Resources res = context.getResources();
         return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
diff --git a/tests/robotests/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoViewTest.java b/tests/robotests/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoViewTest.java
new file mode 100644
index 0000000..e8dc2b5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoViewTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2017 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.settings.fingerprint;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.view.TextureView.SurfaceTextureListener;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class FingerprintLocationAnimationVideoViewTest {
+
+    private Context mContext;
+    private FingerprintLocationAnimationVideoView mView;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = ShadowApplication.getInstance().getApplicationContext();
+        mView = spy(new FingerprintLocationAnimationVideoView(mContext, null));
+    }
+
+    @Test
+    public void onSurfaceTextureAvailable_nullMediaPlayer_shouldNotCrash() {
+        mView.onFinishInflate();
+        final SurfaceTextureListener listener = mView.getSurfaceTextureListener();
+        when(mView.createMediaPlayer(any(Context.class), any(Uri.class))).thenReturn(null);
+
+        listener.onSurfaceTextureAvailable(mock(SurfaceTexture.class), 48, 48);
+        // should not crash
+    }
+}
\ No newline at end of file
