Uploaded image for project: 'Titanium SDK/CLI'
  1. Titanium SDK/CLI
  2. TIMOB-18194

Android: blob does not recognize filenames with "@" as images including Retina

    Details

    • Type: Bug
    • Status: Open
    • Priority: None
    • Resolution: Unresolved
    • Affects Version/s: Release 3.4.0, Release 3.4.1
    • Fix Version/s: None
    • Component/s: Android
    • Environment:

      SDK 3.4.0.GA and older versions
      Ti Mobile SDK: Mobile SDK 3.4.1
      Android OS: Android 5.0
      Test Device: Nexus 5

      Description

      Problem Description

      If you read a Retina image (with filenames ending in @2x.png or @3x.png) into a blob, the blob does not recognize it as an image because the @ character somehow interferes with the getMimeTypeFromExtension call.

      Steps to reproduce

      1. Create a new mobile project (Classic Titanium)
      2. In your project, copy Resources/KS_nav_ui.png into Resources/KS_nav_ui@2x.png
      3. Paste this code into app.js:

      var picture1 = 'KS_nav_ui@2x.png';
      var file1 = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, picture1);
      var blob1 = file1.read();
      Ti.API.info('blob: ' + JSON.stringify(blob1, null, 2));
       
      var picture2 = 'KS_nav_ui.png';
      var file2 = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, picture2);
      var blob2 = file2.read();
      Ti.API.info('blob: ' + JSON.stringify(blob2, null, 2));
       

      4. Run it into a device
      5. Check the output in Ti Studio

      Expected results

      Since both files have the same content, should be reported as such.

      Actual Results

      Here are the specific results for the same file (KS_nav_ui.png which was copied to KS_nav_ui@2x.png) note that length is OK, and the data is OK, but height, width and mimeType are wrong:

      ARN] :   V8Object: (KrollRuntimeThread) [77,77] Runtime disposed, cannot set property 'userAgent'
      [WARN] :   TiBaseFile: (KrollRuntimeThread) [88,165] Method is not supported org.appcelerator.titanium.io.TiResourceFile : getParent
      [INFO] :   TiRootActivity: (main) [0,0] checkpoint, on root activity resume. activity = com.negoapps.arrobainfiles.ArrobainfilesActivity@294bd39a
      [INFO] :   I/Adreno-EGL: <qeglDrvAPI_eglInitialize:410>: QUALCOMM Build: 10/24/14, 167c270, I68fa98814b
      [INFO] :   OpenGLRenderer: Initialized EGL, version 1.4
      [INFO] :   blob: {
      [INFO] :   "file": {
      [INFO] :   "hidden": false,
      [INFO] :   "nativePath": "file:///android_asset/Resources/KS_nav_ui@2x.png",
      [INFO] :   "writable": false,
      [INFO] :   "executable": false,
      [INFO] :   "parent": null,
      [INFO] :   "readonly": true,
      [INFO] :   "directoryListing": [],
      [INFO] :   "size": 748,
      [INFO] :   "apiName": "Ti.Proxy",
      [INFO] :   "name": "KS_nav_ui@2x.png",
      [INFO] :   "symbolicLink": false,
      [INFO] :   "bubbleParent": true
      [INFO] :   },
      [INFO] :   "nativePath": "file:///android_asset/Resources/KS_nav_ui@2x.png",
      [INFO] :   "height": 0,
      [INFO] :   "length": 748,
      [INFO] :   "width": 0,
      [INFO] :   "mimeType": "application/octet-stream",
      [INFO] :   "apiName": "Ti.Blob",
      [INFO] :   "text": "�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000.\u0000\u0000\u0000+\b\u0004\u0000\u0000\u0000�}r\u000f\u0000\u0000\u0002�IDATx\u0001���K[w\u001c��wrbj4\u000f.Y�ώ�m0��VŶ^�����E��boZ)�B�@��\u0016Z(\u0005ױ��bc�bs �֋R��m�I��.>������41�$�s�\u0010\u0016�\f<�]5�/���Ë\u001f|?�c�L\u0011}�\"��Y���G�>��������e\u0014s����w�\u0006<wr�p�G6�{\u0014'\u0005eӉ\u0007��*�\u0005��\u0016����p�A��\nZ��;�$�nq�N�Pp[|2���z-\u0015�~r5\u0002\u001f��Z���\u000e@æ\r�ڗĪ�x���Y��=��dO�~a\\h�bH\u0012��Z\u0007@��!�5vb�J�]����\u0001�z�\u000b)�\u0006c\u00147���{_\r[�+G���N��<���@��.�O� ��\u0018\r.\u0007\u001d,�B6�sp\u0003���\u0018�!���3K\u001a\u000b2\u0011C�U\u001c\u0016U\f�{%pG��Б3d>�j��ؖ�sZ�p��<���\u001aV�\u0002M\u00183\u0017P\u0005��٨\u0002�S��Z�\u000b�$��mQ�\u0006.U��\u001e��B[\b\r\u0006�~�rM�\u001eG4��v�\u0018\u001ee��\u0004�L�Lf�q�*vf��wN\nޜ�\b#� \u0005��\u001c��OV)+�K�\u001dl\u0019���k]�Q?=���-��\"��\u001b�\u00161�]w�^��x����7�k7Vq}�Z\"����j@�RM\"Z\tƼ��lb�~}����>�=\u001a���k�ªh[�~{��\u0012'�\u0010���r�Xw\u0005z�\\�:�::��%�=Y\t44�-�Z����\u0005�V���EA�\u001a�$=:\u0016�\u001cN\u000e�=�<�I:�\b�Y<���~�0�\u0014S���Q\u001e�\u0013\u0012f�\u0012'j\u0016W����EܐW�HnP%\u0012�9\u0000\u0000\u0000\u0000IEND�B`�",
      [INFO] :   "type": 1,
      [INFO] :   "bubbleParent": true
      [INFO] :   }
      [WARN] :   TiBaseFile: (KrollRuntimeThread) [278,278] Method is not supported org.appcelerator.titanium.io.TiResourceFile : getParent
      [INFO] :   blob: {
      [INFO] :   "file": {
      [INFO] :   "hidden": false,
      [INFO] :   "nativePath": "file:///android_asset/Resources/KS_nav_ui.png",
      [INFO] :   "writable": false,
      [INFO] :   "executable": false,
      [INFO] :   "parent": null,
      [INFO] :   "readonly": true,
      [INFO] :   "directoryListing": [],
      [INFO] :   "size": 748,
      [INFO] :   "apiName": "Ti.Proxy",
      [INFO] :   "name": "KS_nav_ui.png",
      [INFO] :   "symbolicLink": false,
      [INFO] :   "bubbleParent": true
      [INFO] :   },
      [INFO] :   "nativePath": "file:///android_asset/Resources/KS_nav_ui.png",
      [INFO] :   "height": 43,
      [INFO] :   "length": 748,
      [INFO] :   "width": 46,
      [INFO] :   "mimeType": "image/png",
      [INFO] :   "apiName": "Ti.Blob",
      [INFO] :   "text": null,
      [INFO] :   "type": 1,
      [INFO] :   "bubbleParent": true
      [INFO] :   }
      

      Extra info

      This used to be a problem if you tried to open a Retina image in a webView but that has apparently been fixed so the mechanism a webView uses to determine mimeType seems to work.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              jfalcone Joe Falcone
            • Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:

                Backbone Issue Sync

                • Titanium SDK/CLI <> Titanium Mobile
                  Synced with:
                  TIMOB-19470
                  Sync status:
                  ERROR
                  Last received:
                  Last sent:

                  Git Source Code