Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigate second/millisecond conversion check for greeting timestamp #3842

Closed
BenHenning opened this issue Sep 25, 2021 · 8 comments · Fixed by #5536
Closed

Investigate second/millisecond conversion check for greeting timestamp #3842

BenHenning opened this issue Sep 25, 2021 · 8 comments · Fixed by #5536
Labels
bug End user-perceivable behaviors which are not desirable. good first issue This item is good for new contributors to make their pull request. Impact: Low Low perceived user impact (e.g. edge cases). Work: Low Solution is clear and broken into good-first-issue-sized chunks. Z-ibt Temporary label for Ben to keep track of issues he's triaged.

Comments

@BenHenning
Copy link
Sponsor Member

After #3795, TextViewBindingAdapters performs a check on whether the last visited timestamp is in milliseconds or seconds. We ought to just use milliseconds & never need this conversion, but investigation is needed to better understand where this check came from & if it could ever be triggered.

@rishidyno
Copy link
Contributor

rishidyno commented Feb 11, 2022

@BenHenning fun ensureTimestampIsInMilliseconds convert the given time into ms only if lastVisitedTimestamp < 1000000000000L. While working on #3846 I realized that the time which we are passing is the function setProfileLastVisitedText is already taken in ms/s in all the test cases written for TextViewBindingAdapters and we are using FakeOppiaClock and setting fake time mode as fixed withTIMESTAMP = 1556094120000 → Time: Wed Apr 24 2019 08:22:00 which is always going to be greater than 1000000000000L even if we subtract some days/months/years in ms to get last active time of user.

image

See conversion if user was last active 18 years ago then this condition will be satisfied and user will get wrong output.

image

The argument which ensureTimestampIsInMilliseconds takes is always in ms, even if it is < 1000000000000L, but if this condition is satisfied then we are basically changing the input time to 1000*inputTime which is not correct instead we should remove this check.

So, my verdict is that this function is not correct and if input time is ensured to be in ms whenever we are using fun setProfileLastVisitedText because ensureTimestampIsInMilliseconds will alter the input even if we don't want to. Also, this is not a correct way to check if the input time is in ms.

I hope this makes some sense.

But If we look for real life scenarios we would never encounter these conditions.

@BenHenning
Copy link
Sponsor Member Author

I think you're right that it isn't needed @rishidyno, however before we remove it could you first look through the blame history for it to see if there's any context on why this is needed? You may need to go all the way back to the PR that introduced it and that PR's description and/or conversation threads to get this context.

@rishidyno
Copy link
Contributor

rishidyno commented Feb 26, 2022

@BenHenning this fun was introduced of one of your PR #3795. I tried to find any context on why this fun was introduced, but could not find any. Either way, as I explained earlier, this fun will just mess up things if we wrote a hypothetical test for time 18 years ago, which I did try and as expected it failed. I recommend removing it as it's unnecessary as the argument of this function is already in Milliseconds.

@rishidyno
Copy link
Contributor

I have just created a pr.
If the final verdict is to remove the fun, we can just simply merge this pr. Thanks!

@BenHenning
Copy link
Sponsor Member Author

@rishidyno it actually wasn't introduced in that PR, the utility was just moved (original file: https://github.com/oppia/oppia-android/blob/713584ae1d7d5a9edce6c9838f9c0301c96febbd/utility/src/main/java/org/oppia/android/util/system/OppiaDateTimeFormatter.kt). That was originally located at https://github.com/oppia/oppia-android/blob/44cf7871feeaeb16cbec4584caaa0f74fb17af12/utility/src/main/java/org/oppia/util/system/OppiaDateTimeFormatter.kt before we moved everything. The utility was introduced in #958, but it interestingly moved this logic out of the adapters class (so it's come full loop).

It seems like the origin of the code is #580. You should look through that PR and its conversations to see if you can figure out the origin of that constant.

@rishidyno rishidyno removed their assignment May 26, 2022
@BenHenning BenHenning added this to the Beta MR2 milestone Jun 11, 2022
@Broppia Broppia added issue_type_infrastructure Impact: Low Low perceived user impact (e.g. edge cases). labels Jul 7, 2022
@BenHenning BenHenning added Z-ibt Temporary label for Ben to keep track of issues he's triaged. issue_user_developer labels Sep 15, 2022
@BenHenning BenHenning removed this from the Beta MR2 milestone Sep 16, 2022
@seanlip seanlip added bug End user-perceivable behaviors which are not desirable. and removed issue_type_infrastructure labels Mar 28, 2023
@adhiamboperes adhiamboperes added Work: Low Solution is clear and broken into good-first-issue-sized chunks. good first issue This item is good for new contributors to make their pull request. labels Feb 26, 2024
@BenHenning BenHenning added this to the 1.0 Global availability milestone Aug 29, 2024
@adhiamboperes
Copy link
Collaborator

@dattasneha, you may be interested in this issue. PTAL.

@dattasneha
Copy link
Contributor

@dattasneha, you may be interested in this issue. PTAL.

Sure @adhiamboperes, I would like to work on this. After going through the issue thread, I believe simply removing the function ensureTimestampIsInMilliseconds would resolve the issue.

@adhiamboperes
Copy link
Collaborator

@rishidyno it actually wasn't introduced in that PR, the utility was just moved (original file: https://github.com/oppia/oppia-android/blob/713584ae1d7d5a9edce6c9838f9c0301c96febbd/utility/src/main/java/org/oppia/android/util/system/OppiaDateTimeFormatter.kt). That was originally located at https://github.com/oppia/oppia-android/blob/44cf7871feeaeb16cbec4584caaa0f74fb17af12/utility/src/main/java/org/oppia/util/system/OppiaDateTimeFormatter.kt before we moved everything. The utility was introduced in #958, but it interestingly moved this logic out of the adapters class (so it's come full loop).

It seems like the origin of the code is #580. You should look through that PR and its conversations to see if you can figure out the origin of that constant.

This is a redundant check. The timestamp that is bound from the adapter comes from the profile proto, and is set to ms in the ProfileManagementController. It is safe to remove the check.

adhiamboperes pushed a commit that referenced this issue Sep 17, 2024
…mestamp (#5536)

<!-- READ ME FIRST: Please fill in the explanation section below and
check off every point from the Essential Checklist! -->
## Explanation
<!--
- Explain what your PR does. If this PR fixes an existing bug, please
include
- "Fixes #bugnum:" in the explanation so that GitHub can auto-close the
issue
  - when this PR is merged.
  -->
Fixes #3842 

This PR removes the `ensureTimestampIsInMilliseconds` function from
`TextViewBindingAdapters`, eliminating the need for the
second-to-millisecond conversion check for greeting timestamps.

### Sreenshots
|Before|After|
|--|--|
|![WhatsApp Image 2024-09-17 at 11 36 52
AM](https://github.com/user-attachments/assets/0978ffe5-9457-4071-8828-a2791e7e4664)|![WhatsApp
Image 2024-09-17 at 11 39 41
AM](https://github.com/user-attachments/assets/5c41cdc1-5287-4979-8969-4057362434c9)|
## Essential Checklist
<!-- Please tick the relevant boxes by putting an "x" in them. -->
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).

## For UI-specific PRs only
<!-- Delete these section if this PR does not include UI-related
changes. -->
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug End user-perceivable behaviors which are not desirable. good first issue This item is good for new contributors to make their pull request. Impact: Low Low perceived user impact (e.g. edge cases). Work: Low Solution is clear and broken into good-first-issue-sized chunks. Z-ibt Temporary label for Ben to keep track of issues he's triaged.
6 participants