If you have to inject / create a React Native module into your Android Activity (that does not extend the default React Native Activity), please beware that the Activity lifecycle is not tied to the React Context lifecycle used to create the RN module.
So you have to be careful to retrieve it at the right moment, bearing in mind that a developer can hot reload (pressing double R on the simulator), causing the creation of a new React Context.
Also, the framework gives you a way to listen to the lifecycle of the topmost React Native Acitivity, so that you don’t need to hold a reference to it.
To show how to solve these things, I wrote a short example that you can find here.
Here is what the running app look like:
You can change the locale programmatically in an Espresso test too.
Here you can find a quick example I wrote.
The key part is to restart the Activity after you have set the new Locale.
Of course you can also set the flag of ActivityTestRule to manually re-launch the Activity so that you launch it after you set the new Locale.
Just ensure you have a new Activity after you change Locale.
Bear in mind that to change the locale taking into account all the deprecations and sdk versions is more complex than the code I wrote in my example. Read more here.
I wrote an IdlingResource for Espresso that works with thread pools.
You can find a repository in my github with an example application and test.
The IdlingResource is in the androidTest folder, the file is named ThreadIdlingResourceMonitor.java.
Just a quick note about the
Normally the widget has the magnifying on the left side if expanded. So if you do something like this:
SearchView searchView =
We will end up with something like this:
If we need to manipulate the magnifying icon, we need a reference to that View:
ImageView searchViewIcon =
After that just retrieve the parent ViewGroup. It is, at least today, a LinearLayout, so just remove the View and add it again to have it at the end / right side of the SearchView.
ViewGroup linearLayoutSearchView =
So we have something like this:
Of course, it is a standard View, so if we need to remove it altogether, just set its properties accordingly (from here):
searchViewIcon.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
After several days of hard work, I have just published an Android app of mine: Screenstash!
As I wrote in the previous post, I made a plugin for the Muzei Live Wallpaper of Roman Nurik, containing the portraits of Hans Christian Andersen, made by illustrators who will held an exhibition at the Andersen Festival.
You can find the plugin in the Play Store; it is an open source project (licensed under Apache v2) and you can find the source code in my github repository.
Please note that I don’t own the portraits, so you won’t find the assets (the images) with those illustrations in the repository: it won’t compile at first but I wrote a readme in the
assets folder with a list of the missing files.
In this post I will explain some aspects about writing a plugin for Muzei.
For the Andersen Festival, 14 illustrators will held an exhibit where they will show their drawings depicting 14 fables of Hans Christian Andersen.
In these days preceding the festival, they have drawn portraits of Andersen himself, to delight us during the waiting.
I liked them so much that, with the artists’ blessing, I have gathered all these portraits in a plugin for Muzei, you can find it here: https://play.google.com/store/apps/details?id=com.luongbui.andersenfestival.muzei
Please remember that you have to install Muzei first: https://play.google.com/store/apps/details?id=net.nurik.roman.muzei
This is an initial release and not all the artists are present, yet.
I will release the source code under an open source license: if interested, check this blog for updates.
Update: read the next post for the source code!