curioustechizen / android-ago

An Android TextView that always displays an auto refreshing relative time span with respect to a reference time

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

in 0 mins

broakenmedia opened this issue · comments

commented

Seems to happen basically the moment a new item is added with timestamp = now, shortly after that, the value changes to "Just now" as expected

As a temporary solution I find that if I offset now by about -300ms it behaves as expected.

commented

@janakagamini No such luck here! I've gone up to 3 seconds so far from the reference time and it's still happening

commented

OK, just found a way to sort thing, well, at least to make sure it's Just Now instead of 0 minutes.

My app is a client/server of sorts, with the client sending it's timestamp to the server, thus showing how long ago the last "ping" was sent thus:

The issue seems to happen when there are discrepancies between the two devices and the currentTimeMillis being reported. To be expected, to that end, all i need to do is:

long reportedTimeStamp = getDevice_status_timestamp();
long difBetween = System.currentTimeMillis() - reportedTimeStamp;
if(difBetween < 0){ 
        i.e. If NOW is somehow less than the one being reported, just make it NOW
        reportedTimeStamp = System.currentTimeMillis();
}

@xbroak Thanks, will try it out!

Great solution @xbroak , works like a bomb.

Where to place this code ?

long reportedTimeStamp = getDevice_status_timestamp();
long difBetween = System.currentTimeMillis() - reportedTimeStamp;
if(difBetween < 0){
i.e. If NOW is somehow less than the one being reported, just make it NOW
reportedTimeStamp = System.currentTimeMillis();
}

@khitdhikhun you can apply this code like so...

private void setTime(final long timeStamp){
try{

            long reportedTimeStamp = timeStamp;
            long difBetween = System.currentTimeMillis() - reportedTimeStamp;
            if(difBetween < 0){
                reportedTimeStamp = System.currentTimeMillis();
            }
            //RelativeTimeTextView timestamp
            timestamp.setReferenceTime(reportedTimeStamp);

        } catch (Exception e){
        }
    }

Here is a method to read time that the post was posted from firebase, i pass the time stamp and apply the piece of code by @xbroak. the results are good.

@Mpendxlo Thanks, I think they just fixed it. It always show"Just now" instead of In 0 min.
Sorry for bad english.

One of our testers was still encountering this on the latest version, I don't think it's fixed.

@ovitrif Any repro steps would be helpful. And of course I'm accepting PRs for this one.

The current logic for displaying the "Just now" string is as follows. Both the following conditions have to be satisfied

  • The current time is later than reference time
  • The difference between current time and reference time is one minute or less.

It is possible that you see the "In 0 mins" text if your reference time is in the future, and less than a minute into the future.

Note that the "In 0 mins" text comes directly from Android'sDateUtils class, and not from android-ago.
Also note that this is not necessarily a bug - if your reference time is in the very near future, you probably want to show it as "In 0 mins" (although a nicer string would be good - like "Soon").

tried @Mpendxlo solution , but still facing this issue , please fix it

As a work around i kept

          if (difBetween < 0) {
                refDate = System.currentTimeMillis() - 3000;
            }

v1.4.0 of this library has been released. It allows you to customize the display text before it is displayed. You can use it if you want to prevent in 0 mins. I'm closing this issue for now.