X Tutup
The Wayback Machine - https://web.archive.org/web/20201218150256/https://github.com/android/architecture-samples/pull/388
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

Initial conversion of todo-mvvm-live to kotlin. #388

Conversation

@DougSig
Copy link
Contributor

@DougSig DougSig commented Aug 22, 2017

No description provided.

InstrumentationRegistry.getInstrumentation().runOnMainSync {
val resumedActivities = ActivityLifecycleMonitorRegistry.getInstance()
.getActivitiesInStage(Stage.RESUMED)
if (resumedActivities.iterator().hasNext()) {

This comment has been minimized.

@piotrek1543

piotrek1543 Aug 23, 2017

what about extracting resumedActivities.iterator() to local variable? Actually, you're calling function iterator twice. I don't think it's necessary

hamcrestVersion = '1.3'
runnerVersion = '0.5'
rulesVersion = '0.5'
espressoVersion = '2.2.2'

This comment has been minimized.

This comment has been minimized.

@florina-muntenescu

florina-muntenescu Aug 23, 2017
Collaborator

Increasing the version of the Android Testing Library is not a mandatory requirement in order to use Architecture Components with Kotlin. We prefer to keep the changes to a minimum to ease the branch comparison.

Copy link

@piotrek1543 piotrek1543 left a comment

Really awesome work :-)

@florina-muntenescu florina-muntenescu merged commit de055a1 into android:dev-todo-mvvm-live-kotlin Aug 23, 2017
2 checks passed
2 checks passed
cla/google All necessary CLAs are signed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
k3ithctk added a commit to k3ithctk/android-architecture that referenced this pull request Jan 7, 2020
* Adds Doug and Ben to the contributors list

In both chronological and alphabetical order. How cool is that.

* Fixed Firebase Test Lab script

* Update versions for ATSL 1.0.0 release

* Deprecates loaders, CPs and todo-databinding

* fix typo in androidTest

* Correction in build.gradle

* Fix Markdown for links in CONTRIBUTING.md (android#385)

Fix Markdown for links to show properly in Github Markdown.

* Initial conversion of todo-mvvm-live to kotlin.

* Fix supportLibraryVersion

* Initial conversion of todo-mvvm-live to kotlin. (android#388)

* Fixing gcloud test command.

* Fixing gcloud test command.

* Adding todo-mvvm-live-kotlin sample to README.

* Capitalized Kotlin in README.

* Fixes circle and race condition in UI tests

* Fixing travis, again...

* Upgrade to Espresso 3 and fix race condition.

* Minor formatting.

* Removes ViewModelItem and small fixes

* Removes ViewModelItem and dependent files.

* Corrected title in readme.

* Remove ViewModelItem and fix title in readme. (android#410)

* Removes ViewModelItem and dependent files.

* Corrected title in readme.

* Fix typo (android#415)

- Change "compliment" to "complement"

* Updates README Rx -> Rx2

* Updates contributors list

* Fixed the typo (android#425)

* Fixed Firebase Test Lab script (android#440)

* Updates and bumps versions on the dev-todo-mvvm-live branch (android#438)

* Update todo-mvp README.md

Refactored the content around a new structure, with new standard titles used for each sample
Fixed various grammar issues
Applied formatting
Additional explanations and links where appropriate
Introduced pre-requisite topics

* Update README.md

Removed a redundant sentence.

* copies Firebase Test Lab results to CIRCLE_TEST_REPORTS

* Replaced deprecated attribute

* Bumps versions and fixes annotation imports

* Fixes toolbar title not being persisted after rotation

* Fixes navigation issue android#287

* Bumps circle CI Android dependencies

* Fixes comment in test

* Bumps versions in travis.yml

* Moving the setting of the AddEditTaskPresenter in the constructor.
Tests added to check that the presenter is set to the view.

* Removing the `_id` column and making `entryid` primary key.
Moved the `TasksLocalDataSourceTest` to correct package.

* Fixed Firebase Test Lab script

* Tries to fix circle adding google repo

* Buildtools 26 is mandatory now, apparently

* More CI fixes

* CI caught some merge errors + circle fix

* Bumps versions to RC1, etc

* Updates room branch to API 26, Espresso, Arch Components

* Adds google m2 repository

* Adding google() to repositories

* Reverts to todo-mvp's README

* Added syntax format to first snippet inside README (android#451)

* Removes Room branch (It was added to todo-mvp)

* Updating travis, circle, gradle files, and stats.

* Fix nullability for viewmodels.

* Add room to todo-mvvm-live-kotlin.

* Upgrade arch components to 1.0.0.

* Fixed prod TasksRepo injection.

* Remove references to deprecated LifecycleACA and LifecycleFragment.

* Addressed kotlin styling issues.

* Fixed more kotlin styling issues.

* Made constant for new task in test.

* Fixed runtime Kotlin errors.

- Added kapt plugin instead of using annotationProcessor.
- Added arch components classes to proguard.
- Added default for param in data class.

* Adds Room to todo-mvvm-live and updates versions (android#459)

* Update todo-mvp README.md

Refactored the content around a new structure, with new standard titles used for each sample
Fixed various grammar issues
Applied formatting
Additional explanations and links where appropriate
Introduced pre-requisite topics

* Update README.md

Removed a redundant sentence.

* copies Firebase Test Lab results to CIRCLE_TEST_REPORTS

* Replaced deprecated attribute

* Bumps versions and fixes annotation imports

* Fixes toolbar title not being persisted after rotation

* Fixes navigation issue android#287

* Bumps circle CI Android dependencies

* Fixes comment in test

* Bumps versions in travis.yml

* Moving the setting of the AddEditTaskPresenter in the constructor.
Tests added to check that the presenter is set to the view.

* Removing the `_id` column and making `entryid` primary key.
Moved the `TasksLocalDataSourceTest` to correct package.

* First commit: MPV with Room

* Readme updated

* Readme updated

* Fixing CI

* Fixing tests for local repository

* Using Idling resources for tests, for commands that are executed on the background thread

* comments updated

* Fixed Firebase Test Lab script

* fix typo in androidTest

* Fix typo (android#415)

- Change "compliment" to "complement"

* Fixed the typo (android#425)

* Tries to fix circle adding google repo

* Buildtools 26 is mandatory now, apparently

* More CI fixes

* CI caught some merge errors + circle fix

* Updates todo-mvvm-databinding with changes from todo-mvp (android#437)

* Update todo-mvp README.md

Refactored the content around a new structure, with new standard titles used for each sample
Fixed various grammar issues
Applied formatting
Additional explanations and links where appropriate
Introduced pre-requisite topics

* Update README.md

Removed a redundant sentence.

* copies Firebase Test Lab results to CIRCLE_TEST_REPORTS

* Replaced deprecated attribute

* Bumps versions and fixes annotation imports

* Fixes toolbar title not being persisted after rotation

* Fixes navigation issue android#287

* Bumps circle CI Android dependencies

* Fixes comment in test

* Bumps versions in travis.yml

* Moving the setting of the AddEditTaskPresenter in the constructor.
Tests added to check that the presenter is set to the view.

* Removing the `_id` column and making `entryid` primary key.
Moved the `TasksLocalDataSourceTest` to correct package.

* Fixed Firebase Test Lab script

* Tries to fix circle adding google repo

* Buildtools 26 is mandatory now, apparently

* More CI fixes

* CI caught some merge errors + circle fix

* Fixed Firebase Test Lab script (android#440)

* Updates room branch to API 26, Espresso, Arch Components

* Adds google m2 repository

* Adding google() to repositories

* Reverts to todo-mvp's README

* No need for LicecycleActivities now

* Promotes todo-mvvm-live to stable

* Adds todo-mvi-rxjava to External samples

* As per the Gradle recommendation speed up the build

* Add flavor dimension

* Remove transitive dep cleaning

We no longer need to remove AAR deps from test APK as version issue was fixed with gradle version 2.0 and up

* Upgrade the code lab to use the latest version of ATSL and Gradle

runnerVersion = '1.0.1'
rulesVersion = '1.0.1'
espressoVersion = '3.0.1'

Gradle Plugin = '3.0.1'
Gradle = '4.1'

* Adds todo mvp-kotlin-coroutines sample (android#527)

* Adds todo-mvp-coroutines to external samples

* Update ISSUE_TEMPLATE.md

* Update LICENSE

* Adds coroutines sample, promotes kotlin branches to stable

* Update versions for ATSL/Gradle/Plugin

* Bumps versions (SDK 28)

* Migrates to androidx and to the new androidx.test classes

* Trying to fix proguard, currently crashing

* Updates circle CI to 2.0

* Removes configuration debugging from proguard which was causing a crash

* Reformatting circleCI, no idea why it's not being picked up

* Adds a cd

* Fixes a bad import

* Adds missing gradle task to build test apk

* Moves back to stable libraries and fixes hardcoded versions

* Formatting, consistent quotes, cleaning up gradle files

* Bumps versions to 28 before jetifier

* Jetifier applied

* Fixes SingleLiveEvent error

* Fixes UI tests

* Fixes race condition in UI tests

* WIP: Migrated to LiveData and Event

TODO: Unit tests are going to be fun
Remove SingleLiveEvent and Snackbar files

* More LiveData migration and encapsulation

* Done with unit tests

* Adds SingleLiveEvent note and removes SnackbarMessage class

* Showcases a simple LiveData Transformation

* Code style nit

* Androidx migration WIP

* New Kotlin conversions from todo-mvvm-live. UI tests pass

* Fixes UI tests and bugs that the UI tests caught. VICTORY.

* Deletes temp files and fixes bad R import

* Addressed comments in android#630

* Moves contributors to wiki, adds license

* Adds copyright header and minor null check change

* Forces FTL to use walleye

* Fixes circle syntax

* Fixes missing description value when task is added

* Kotlin branch - Fixing config change bug android#574 - no more AndroidViewModels

* Forces device on FTL

* Adds IR to the snackbar and sets flagNoExtractUi to the edittexts

* Removes empty line

* Update unit test.

Verify that both the title and the description of a task are correctly passed to the repository when saved by ViewModel.

* Replaces codelab code with todo-mvvm-live-kotlin

Change-Id: I0517a7c3ca87c8c4a04cad05267998a2f83f2787

* Refactors TasksRepository and unit tests

Change-Id: I79d763812b21b6d4d246cdfcf51713447eb2837f

* Replaces Injection class with Service Locator + some format improvements

Change-Id: I01909e34055899f73e2a223a90191e013d51b595

* move androidTestMock tests to Robolectric

Change-Id: I87c9962f9a1c1146f1ad7c97db83dff8e4d51799

* ActivityTestRule -> ActivityScenario

Change-Id: Ife300863a3e6baeba57c8f447b64cd0c2fdf4d23

* Migrated to AAC Navigation.

Change-Id: If16d43253901e15d664a77a60111909ea9030068

* Address code review comments

Change-Id: I23d6abbaa97823357dd504f69759116ef4524481

* Adds unit tests to viewmodels with coroutines

Change-Id: Ia52946a31f0c6ddc7a97e817689c2c517c3265e0

* move to use robolectric snapshots

Change-Id: Ifca11272193a7b36b73b14a33631ee9a83aeffc0

* Removes BaseViewModel

Change-Id: I841d09bcf60389847050a90864e1686357df9964

* Switch TasksDaoTest to JVM (Robolectric) test.

In general we prefer to run unit tests on the JVM for scalability.

Must explicitly request .allowMainThreadQueries() since JVM tests run
on the main thread. Instrumentation tests run on the Instrumentation
thread.

Change-Id: I0bfd366b08f71c13931f2e477c4ea23ec65b2b93

* 1) FakeTasksRemoteDataSource.addTasks ->
ServiceLocator.provideTasksRepository + TasksRepository.saveTask
2) Add isCompleted to Task constructor instead of apply{}ing everywhere

Change-Id: I49fc04b0ab99460bcbecce9a49771dee548a143e

* 1) use Navigation to handle toolbar instead of casting to
AppCompatActivity
2) update AppNavigationTest

Change-Id: I6e2fa9a0afd38454b50e1ca821b8af6f34183905

* Updated the "Delete Task" menu item with a trash icon on the task detail
page.

Change-Id: I3657b49c9a8bf06644033b2a364d1514a2d75db2

* Used Open Sans as the default font family for the entire app.

Change-Id: I0d1f9b447e3fcd977817c0e49e619a7ff6709d4c

* clean up tests and pick out the ones for the codelab

Change-Id: I73f9e6d6d45f55f51e6d959421715e84e9543d64

* Included a few style changes. Major ones:
1) Updated color of icons to be green;
2) Removed the "Add a TODO item +" link on the first screen.

Screenshots:
1) First screen with no TO-DO notes: https://screenshot.googleplex.com/UbRRKxOJCzs.png
2) First screen with TO-DOs: https://screenshot.googleplex.com/eV34Ndfd6Kt.png
3) Add a new TO-DO: https://screenshot.googleplex.com/9eJtFYmNbg4.png
4) TO-DO details page:
https://screenshot.googleplex.com/gdw0D2XXpOq.png.

Change-Id: I6417a72b91b632bd6bec694cbd3ad966c90bca64

* Fixes StatisticcsViewModelTest

Change-Id: I6f19950b7a57eacffcf6ff18a2097e39aab39fff

* Bumps AGP and Kotlin versions

Change-Id: I3673b25019f0381856f1dcd680fa565daf92b73c

* 1) Fixing "Error loading tasks" on startup
2) Handling scenario found in emulator testing where a snackbar's
onDismiss callback would be fired without the onShown callback ever
being fired
3) Updating androidx.test and espresso versions to match robolectric
dependencies

Change-Id: I559ad446ef50cab28c66dcf636c747e014955328

* Rename tests + cleanup.

Rename TasksScreenTest -> TasksActivityTest
This is out end-to-end test, annotated @LargeTest

Rename:
  TasksSingleScreenTest -> TasksFragmentTest
  AddEditTaskScreenTest -> AddEditTaskFragmentTest
  StatisticsScreenTest -> StatisticsFragmentTest
  TaskDetailScreenTest -> TaskDetailFragmentTest

These are our integration tests, annotated @MediumTest

Cleaned up Javadoc to reflect this.
Removed unnecessary onFragment() calls wrapping Espresso.

Change-Id: I5eae2c721f60ddd1380927eb6c65565c2e13c9f7

* Updated the app with the new logo.

Screenshots:
Logo: https://screenshot.googleplex.com/MyhPhfqqeV3.png
Navigation page: https://screenshot.googleplex.com/EyTAsBzdQTG.png
TODO list: https://screenshot.googleplex.com/cq8W63WeTTf.png

Change-Id: I801333b8e0bd3f62080ac4e9f1bea115af89f720

* Move fragment tests to sharedTests where possible.

StatisticsFragmentTest + TaskDetailFragmentTest run on both Robolectric
and Instrumentation.

Change-Id: I0670ada9d02ec2970be56d9addb129829c76d8d8

* Cleanup TasksFragmentTest

1) Remove @ignore since this bug is now fixed
2) Remove custom ViewMatcher - we don't want to promote these
3) Fix failing tests by using doesNotExist() for items that are not
present.
4) Inline all the String constants, makes text entry read more clearly.
5) Inline helper methods to make tests read more clear

Change-Id: I0ee742b2f7620adfde510243622c35a689a4a636

* move over all TasksFragment related tests affected by robolectric/4862 to TasksFragmentTest

Change-Id: Id238b46da928401f82e25c4b999efdd396a9d968

* Enable TaskLocalDataSourceTest

Moved to Java Tests source root (can be moved to sharedTests in future)
Fixed bug in LocalDataSource
Inlined SingleExecutors class

Change-Id: Iee80640f95bd6e8d45ff53f3f7ec3c45a9da2f46

* Migrate tests/ folder to Truth

Change-Id: Ib28bd89eff8a0ce1131e04bdc96c5214aa63355c

* Remove now obsolete ActivityTestExt

Change-Id: I183d62074c47cb5c12e82e254ba050a05c035940

* Use DrawerActions on AppNavigationTest.

Change-Id: I456369558df49453a5a1d0f31ba0c82d4254b083

* Roll back to build tools 3.3.2

Due to: https://issuetracker.google.com/122936785 (Fixed in 3.4.1 that
is not stable yet)

Change-Id: I7f4064f62f1203b80ce4de33d449a4e65880327f

* Remove workaround for databinding in tests.

Its no longer required.

Change-Id: I28ab36b47412047d428b9ba182e2389053464f9e

* Addressing coroutines review

- Switching dispatcher in data source, not repository.
- Using launch instead of async
- Removes app executors class
- DAO methods now suspend
- Uses Fake repository from medium tests
- Reset ServiceProvider between tests.

Change-Id: Ief842aa1c2c812695d8da8a6fa74117f84999839

* Cleanup TasksFragmentTest

- Removed local variable shadowing field
- Removed redundant ActivityScenario vars.

Change-Id: I40d7326f30737f5c812da699d0d0575778d73c7e

* Migrate more tests to truth

Also remove unused Kotlin extension file.

Change-Id: I4df5f1007866459df53962dbc1c622ef482f0644

* Add missing resetForTests() to prod.

* cleanups

Also removing google truths from androidTest for now due to diamond
dependency concerns

Change-Id: I367d679efed711b8f805429a2a29f502dd4eb2b8

* Splits Add/Edit fragment test tests

Change-Id: I825006f6139ce563d96445c092f7fb3c4a97a56a

* Adds pure unit tests to a Stats utils class

Change-Id: I9f75a2f8247e711be9d1003f42f8a9fa6afcae92

* Bump build tools to latest version.

com.android.tools.build:gradle:3.4.0

Change-Id: I2830deeb5538cb4dd1b588a1df115446ea76df95

* Addresses codelab content comments

Change-Id: Iaf199e22e887143c6d4f27c03856767ebbd88a6d

* Move remaining Fragment tests to sharedTest.

Change-Id: I57b1d51453e296f3a3bf7134470bae6c3d7e6219

* Renamed the app to "Todo" and updated "TO-DO" to "task" in the app.

Also, adjusted the size of "finished" icons from 24dp -> 96dp.

https: //github.com/googlecodelabs/android-testing/issues/124

Change-Id: Ia55bee8e43cd5df271202f3470fab34a152efdb0

* 1) move AddEditTaskFragmentTest, TasksFragmentTest, and
TasksLocalDataSourceTest to sharedTest
2) move *FragmentTest to use FakeRepository
3) Adds data binding idling resource to make prod work

move more stuff to sharedTest

Change-Id: I452838557628bc512d077fe4a74b8eae3598c072

* Fixes comments in StatisticsUtilsTest

Change-Id: I26141e4d3c127d122f97a395019d47882aa8902f

* quick compile fix

Change-Id: Ie448d92cd580e4350058520c7d58325ad94ac180

* Enables snackbar again

Change-Id: I57b4291dbf7064d17b5b3a559d20fbb85003aa4d

* Updates circleci config

Change-Id: I6f4408d0bcefad083a5bf09b906dbab8ffcd7e5d

* Fixes lint error

Change-Id: I079bc40269096746dea6d0a55d5e3079cbb9efd5

* Updates README

Change-Id: Ief1eb7f367834ca02f0d6844b13b2b13d0c8836b

* Updates README

Change-Id: Ief1eb7f367834ca02f0d6844b13b2b13d0c8836b

* Modifies code for interactive sections

Change-Id: I4235bece8923f9310dbf5963a8cdbddf6c628c0c

* more codelab polishing

Change-Id: I4558582175cd2590152191fc51832cae4b858a09

* switching to beta versions of AndroidX Test and Robolectric

Change-Id: Ie38fcfe289154b976bebaa91f27e2b56da941992

* Modify the exception thrown on decrementing idling resource

* Fixes flaky tests and tests running in landscape

Change-Id: I0dfed8d97e58e35a570e8763754590d553dadefd

* Removes unused class

Change-Id: I3510d0299dbc68b8b57c3d33d1b4e03ed85a0455

* Migrates to coroutines-test

Change-Id: I383435b64edf8b3ee9bc16e3c00dfce58a16deac

* Fixes DAO tests that use runBlockingTest

Change-Id: I0878cfc77685eeb9b96eee6ee1bfda2096d98a2b

* Circle is OOM. Borrowing Gradle config from Tivi

Change-Id: I1986b331c8c56850d05a17df3e7549c5a9270a61

* Changes codelab exercise to use the new test dispatcher

Change-Id: I651bf8f66dbe7a63bbe727b3967ac8e3b7717a50

* Some small fixes and imports

Change-Id: I3f1a73ee480b9bbe3c67cdddd9fad3db4745a7f3

* Uses fragment-ktx to obtain VMs in fragments

* Removes codelab TODOs and solutions in tests

* Removes guava

* Removes old directory

* Adds wrapEspressoIdlingResource

* Fixes lifecycle and refresh layout issues

* Removed all initial calls to start() from fragments to viewmodels

* Moves to by navArgs and reverts unrelated change

* Updates docs and code style for ViewModelFactory

* Reverts changes in TasksFragment because navigating back from details was breaking tests

* ListView -> RecyclerView

* Moves TasksFragment to navArgs and small code refactorings

* Solves sync problem with Espresso using pressBack

* Removes ignore annotations from the testing codelab

* New Blueprints v2 README

* Removes obsolete javadoc

Change-Id: I11ccec845590d5a471dce46eecdde53aeaa2384f

* Fixes comments, some code style

Change-Id: I5c8d7ea2528f0b30d6994e2ea6e25a5e9dda8f6b

* Updates copyrights

Change-Id: Ib16006bb5ff315da2efd94c5999a95ad83a2b4db

* Removed unused listeners

Change-Id: If75d485a28c76c345332c481dc6e6711cf581047

* Changes applicationId in master

Change-Id: Idddb79107600ce6160deb62dd79955c240a13906

* Update README.md

* Fixes travis CI config

Change-Id: I4b0124762db9260ef3bcf705613c3075e0c2f545

* Bumps versions

Change-Id: Ibfb7d05a0beec1b85278076fe6952c87ea79e10c

* Fixes flaky test related to RecyclerView and animations

Change-Id: Icbf4f3a8de2cb68cd16fe5ce26b89498056601b0

* Auto-format run

Change-Id: I3ce50dc5e1ce51f1d3c73fbcee07e6f1f207c9be

* Another auto-format run

Change-Id: I9dddce3e997a1b8c60a5e58b08fa37b51777d886

* Update README.md

* Update README.md

Co-Authored-By: Ben Weiss <keyboardsurfer@users.noreply.github.com>

* Update README.md

* Update README.md

* Update README.md

* Changes style of completed tasks (strike-through)

* Reverts navigation graph unnecessary pops

* Fixes database creation and some minor unit test fixes

* Cleanup variable and function names

* Cleanup resource ids

* Update strings. Add content descriptions and dimensions

* Adds illustration credits

* Changes bucket in CircleCI config

* Removes all files in master branch in preparation for new master

* Adds "compare" links

* Address comments.

* Cleanup variable and function names

* Fixes some lint errors

* Moves TasksRemoteDataSource to the prod variant

Co-authored-by: Jose Alcérreca <JoseAlcerreca@users.noreply.github.com>
Co-authored-by: Stephan Linzner <slinzner@users.noreply.github.com>
Co-authored-by: Frank Kwok <ghlfrankkwok@gmail.com>
Co-authored-by: Mohit Ajwani <mohitajwani@users.noreply.github.com>
Co-authored-by: Florina Muntenescu <2998890+florina-muntenescu@users.noreply.github.com>
Co-authored-by: Trent <devtrentoh@gmail.com>
Co-authored-by: Nick K <nickkor@gmail.com>
Co-authored-by: Doug Sigelbaum <doug@lyft.com>
Co-authored-by: Maher Malaeb <m.n.malaeb@gmail.com>
Co-authored-by: Jan Hudzik <jahudzik@users.noreply.github.com>
Co-authored-by: Pablo Andrés Dorado Suárez <hola@pablodorado.com>
Co-authored-by: yankuu <47288897+yankuu@users.noreply.github.com>
Co-authored-by: dmeng <dennismeng90@gmail.com>
Co-authored-by: Jonathan Gerrish <jonathan@indiekid.org>
Co-authored-by: adazh <46544665+adazh@users.noreply.github.com>
Co-authored-by: Islam Salah <islamsalah007@gmail.com>
Co-authored-by: Lyla Fujiwara <lyla.fujiwara@gmail.com>
Co-authored-by: Ben Weiss <keyboardsurfer@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

3 participants
You can’t perform that action at this time.
X Tutup