Added support for handling multiple playlists in the Mock TCP server.
Refactored SlideUpPanelTests to support the new playlist handler.
Some code cleanup and enhancements
- Removed throw exception declarations from methods that never throw the exception.
- Changed deleting the test database on the test device to delete all databases.
The former method of only deleting the test database resulted in many old databases
that were not removed when the test run crashed.
- Enhanced robustness of testing async code by explicitly waiting for a view
to reach a certain state.
After a library clean operation on Kodi, if a TV Show that was previously present is absent it is still returned in a call to `VideoLibrary.GetTVShows` with 0 episodes. Kore shouldn't consider these TV Shows, as they have no episodes.
* Removed redundant configureHostInfo
It was only used to set the Kodi backend version which is also
set using setKodiMajorVersion.
* Removed unused annotations and throwables
* Improved robustness of SlideUpPanelTests
Replaced explicit sleeps with the waitForView action.
Fixed issue in waitForView action as it required the UI
to be idle which is mostly not the case for the bottom
panel with the progress indicator.
* Improved robustness of eventserver
When eventserver handles a wrong payload this should not crash
but simply show a log message and let the actual test fail.
Some ANRs are reported on Google Play. This is an atempt to remove them, by making sure that `startForeground` is always called when the service starts.
Implemented showing a music/video/picture playlist in PlaylistFragment even
when playback has stopped but the playlist is still available on Kodi.
The playlist is now only cleared if the Playlist.OnClear event is received
from Kodi.
As the pictures playlist does not support moving/removing items this has
been disabled for the pictures playlist only.
Added a new package org.xbmc.kore.host.actions to hold all Callable's that
we use to handle complex interactions with Kodi that use multiple JSON RPC
calls.
Fixed issue in HostConnectionObserver in method notifySomethingIsPlaying
where hostState.lastGetItemResult.label might not be set.
Reduced calling (force)refreshPlaylist considerably as it should now be
handled by the playlist observer.
Registering observers would cause the runnables to be
posted multiple times to the checkerHandler. This resulted
in callbacks being called more than once when a result was
received.
When the title is longer than fits on screen, it wil first be ellipsized
and when user clicks on the title it will start scrolling to make it
fully readable.
* This gives the user a choice of their hosts to share a url to.
* Sadly the youtube app doesn't appear to support this. It wants to
use some sort of crappy "Message on Youtube" thing rather than using
standard android stuff (go figure). It does, however, work from a
chrome browser of the youtube video, or likely any other supported
share.
* Fixed Espresso not waiting on ViewPager switching
* Removed BaseMediaActivityTests abstract class.
Unfortunately the click action on list items now requires
a unique item to be able to select the item to click.
Therefore the tests from BaseMediaActivityTests have been
moved to the specific test classes. This made the
BaseMediaActivityTests class obsolete.
* Removed dependency on Context class in AddonsHandler and inlined
the json data to allow the AddonsHandler to be initialized before
the test activity is started. This was needed to have the
AddonsActivityTests directly start the AddonsActivity, instead of
first starting MoviesActivity and from there start the AddonsActivity.
Hitting the back button in the remote activity was being ignored, thus preventing exiting the app. This issue was inadvertidely introduced in d11dbe6853
The onDestroyView method is used to unregister the application observer
from the dialog. However the parent got called first which destroys the
view of the dialog. This could lead to Null Pointer Exceptions when
the listener tries to update the UI of the dialog right after it was
destroyed.
The VolumeControllerDialogFragmentListener was created twice as creation
was triggered on both the down and up event of the volume keys. This has
been changed to only trigger on down events.
The applicationObserver was never unregistered resulting in a memory leak
and even worse, crashes when destroyed dialogs still got called through
the applicationOnVolumeChanged callback.
Also changed the view resource identifiers used by the controller dialog
as it used the same resource identifiers as the now playing panel.
Somewhere along the line, the edits made in b0f2adb876 where lost because the `AddonsActivity` was instantiating `AddonListFragment` instead of `AddonListContainerFragment`.
This PR reinstates the ability to bookmark and access addons, and refactors the way those settings were being stored in the Shared Preferences to use the default Shared Preferences and take into account the specific host we're connected to.
During tests, activities were not closed properly causing increasing
memory usage, which resulted in failing tests because of
out of memory errors.
This has been fixed by using the test orchestrator which runs
each test in its own instrumentation instance.
Removed the instrumentationTest flavor and replaced it by using the
default debug build type. The flavor was used to keep the required
permissions during testing separate from release versions. This can
also be accomplished using the debug build type.
The PagerSlidingTabStrip from astuetz doesn't work with the new
android build tools. As the project seems dead, I replaced it with
PagerTabStrip from the support library.
* Fixed tests to determine which Kodi version Kore is connected too.
This caused the long press tests to fail as Kore didn't see v17 as
the version that should use the new JSON RPC call.
* Refactored setting the Kodi version during testing to also set the
correct version in the database, instead of only setting it in the HostInfo
instance.
As we now use a nested scroll view the tests for TV shows all
failed because the scroll action was performed on a normal scroll
view only. This has simply been fixed by implementing a custom action
that also accepts a nested scroll view.
Refactored MusicListFragment and PVRListFragment to use AbstractTabsFragment
Fixed scrolling in a nested scroll view using espresso
Fixed issue with setting and checking Kodi major version
When a silent sync is running the refresh animation shouldn't appear and this wasn't being repected in some situations. For instance, when not connected to Kodi, starting from a TV Show details, selecting one episode or season and hitting back, the animation would appear. This PR makes sure that it is only shown if it isn't silent.
As detailed in https://github.com/xbmc/xbmc/pull/13051, Kodi v18 changes the way album genres are handled, as the genre (by which i mean `genreId`) ceases to be available at the album level, being only available at the songs level.
This impacts Kore because `GetAlbums` and `GetAlbumDetails` won't return the `genreId` tag, from which the local AlbumGenres table was populated.
This PR changes the source of the local AlbumGenres table to be the `genreId` returned at the song level (by `GetSongs`), to make it somewhat more consistent with the way Kodi will handle things from now on.
* Implemented a new widget "fabspeeddial"
* Provides user with two options to play the media item. One
option to play the item on Kodi, one to play it on the remote.
* Replaced deprecated FAB button from
com.melnykov:floatingactionbutton:1.3.0 with the FAB button from
the design library
* Implemented a busy indicator (pulsate) when fab button is clicked
and JSON API method is still pending
* Added a setting to allow the user to disable local playback and
revert back to the old behaviour
* Refactored AbstractFragmentInfo
* Replaced RelativeLayout by CoordinatorLayout to support
hiding/showing the FAB button when scrolling
* Replaced the tree view observer to fade out art view when scrolling
with a behavior for the CoordinaterLayout
* Removed empty theme file for v19
* Refactored HostConnection to allow new activities to attach its
callbacks to any pending ApiMethod. This is required to support device
configuration changes.
There's no need to have so many classes to handle the hardware volume keys. This PR simplifies it, without duplicating any more code than was already duplicated.
ControlPad now uses AppCompatImageView to support theme colors.
Instead of applying the colors programmatically they are now defined
in the layout file.
- added method to HostConnection that returns a Future object instead of
taking a callback.
- added logic for handling null Handlers in HostConnection methods
- added method to HostManager to run a function that takes a HostConnection
in a background thread where the Future API results above can be
synchronously composed.
- replaced chain of callbacks in RemoteActivity with a sequence of
future gets in OpenSharedUrl.
* It seems tinting is applied on pre-Lollipop devices using
a color filter. HighlightButton used clearColorFilter to remove
the highlight color and revert back to the original color. This
caused an issue on < v21 devices as the View would loose its tint.