Sunday, September 21, 2014

[Android] A simple trick to watch unsupport video format directly from Sandisk Wireless Flash

I just got a Sandisk Wireless Flash and mainly for storing up videos that I can watch on my mobile device (mine one is Samsung S3 and Tab 3) anytime.

However, when I tried to watch rmvb and mkv, a message pop up and it said  'your Android device cannot view this type of file.'

Even I did try the Realplayer Cloud that the Sandisk recommends this approach, I cannot see my Sandisk device under the Realplayer Cloud with following steps:

http://kb.sandisk.com/app/answers/detail/a_id/10539/~/playing-videos-that-are-not-natively-supported-by-your-mobile-device

When I almost gave up, an idea came into my mind. How about if I rename the file type into avi that Android native support?

Then, it is just that simple. Rename the file type!

example 1:
rename video1.rmvb  to video.avi

example 2:
rename video2.mkv to video.avi

(mp4 also works)

Yes, that's it. Now, we can click on the video file you renamed and Android now allows you to pick what video player in your device to play it.

Lastly, of course, you need to install a video player, that is able to play the particular video format, into your device beforehand.

I am using MX player if you want know what works for me.


Thursday, February 6, 2014

Angularjs - number only input directives

app.js:
app.directive('numberOnly', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            ngModel: '='
        },
        link: function (scope) {          
            scope.$watch('ngModel', function(newValue,oldValue) {        
                var arr = String(newValue).split("");
                if (arr.length === 0) return;
                if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.' )) return;
                if (arr.length === 2 && newValue === '-.') return;
                if (isNaN(newValue)) {
                    scope.ngModel = oldValue;
                }
            });
        }
    };
});

app.controller('MainCtrl', function($scope) {
  $scope.name = 0;
});

html:
<body ng-controller="MainCtrl">
    <input type="text" ng-model="name" number-only/>
</body>


That's it and simple.
demo here

Wednesday, February 5, 2014

Angularjs ng-grid : rowItem.rowIndex not map to the index of data array after sorting. (with solution)

I found that the rowIndex will no longer map to the index of the data array if sorting is applied.
Lastly, I found a way to locate the index of data array even after sorting is applied by using rowMap and the syntax like this:
$scope.gridOptions.ngGrid.rowMap.indexOf(rowItem.rowIndex);

instead of just using rowItem.rowIndex.


however, this is not officially documented. 
So, beware that there is any changes in the future updates/patches of the ng-grid. 
updated on 05 Feb 2014

With further studies, I found that selectedItems may serves the same purpose only when the multiSelect equals to false. So, it won't work exactly the same if you require the grid with multiSelect:true.