diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp
index 4eaa034..9202e8a 100644
--- a/src/codec/SkPngCodec.cpp
+++ b/src/codec/SkPngCodec.cpp
@@ -934,22 +934,39 @@
             }
         }
 
-        if (encodedColorType == PNG_COLOR_TYPE_GRAY_ALPHA) {
-            png_color_8p sigBits;
-            if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) {
-                if (8 == sigBits->alpha && kGraySigBit_GrayAlphaIsJustAlpha == sigBits->gray) {
-                    color = SkEncodedInfo::kXAlpha_Color;
+        switch (encodedColorType) {
+            case PNG_COLOR_TYPE_GRAY_ALPHA:{
+                png_color_8p sigBits;
+                if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) {
+                    if (8 == sigBits->alpha && kGraySigBit_GrayAlphaIsJustAlpha == sigBits->gray) {
+                        color = SkEncodedInfo::kXAlpha_Color;
+                    }
                 }
+                break;
             }
-        } else if (SkEncodedInfo::kOpaque_Alpha == alpha) {
+            case PNG_COLOR_TYPE_RGB:{
+                png_color_8p sigBits;
+                if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) {
+                    if (5 == sigBits->red && 6 == sigBits->green && 5 == sigBits->blue) {
+                        // Recommend a decode to 565 if the sBIT indicates 565.
+                        color = SkEncodedInfo::k565_Color;
+                    }
+                }
+                break;
+            }
+        }
+
+#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
+        if (encodedColorType != PNG_COLOR_TYPE_GRAY_ALPHA
+            && SkEncodedInfo::kOpaque_Alpha == alpha) {
             png_color_8p sigBits;
             if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) {
                 if (5 == sigBits->red && 6 == sigBits->green && 5 == sigBits->blue) {
-                    // Recommend a decode to 565 if the sBIT indicates 565.
-                    color = SkEncodedInfo::k565_Color;
+                    SkAndroidFrameworkUtils::SafetyNetLog("190188264");
                 }
             }
         }
+#endif // SK_BUILD_FOR_ANDROID_FRAMEWORK
 
         SkEncodedInfo encodedInfo = SkEncodedInfo::Make(origWidth, origHeight, color, alpha,
                                                         bitDepth, std::move(profile));
