Commit Graph

15 Commits

Author SHA1 Message Date
DoomMortal ebae33755c AndroidX migration
Migration to AndroidX
- Update to API level 29
- Update Java sourcecode and xml import statements
- Upgrade Butterknife Version 10 AndroidX support
- Set Java 8 compile options due Butterknife needs it
2020-04-26 19:13:07 +02:00
Synced Synapse 5d0969c66e Fix preferences saving of nav drawer and bottom bar shortcuts
Preferences for the Nav Drawer and Bottom Bar shortcuts weren't being properly saved. This fixes that and also fixes the order or the Navigation Drawer items, after the addition of the Local Files option.
2019-12-08 20:12:08 +01:00
Francesco Bonazzi b14524963f Stream local files with NanoHTTPD server (#681)
Added local file browser. NanoHTTPD is used to create a local HTTP server to allow to stream files stored on in Android device to Kodi. Added support for multiple local files streaming.
2019-12-03 18:17:19 +00:00
Synced Synapse 7dfd982643 Tweak connection threads
This PR fixes some issues with connections and threading. Specifically, the  change in #618 introduced threading in `HostConnection`, which had some issues. To fix them, the following changes were made:
- A specific TCP listener thread is used and manually started, instead of using one of the threads in the pool. The TCP listener thread is a long lived thread that should always be running (as long as the connection is through TCP), blocked listening on the TCP socket, so it shouldn't be managed in a pool, where, theoretically, it can be paused and reused. 
- Changed the number of threads to 5. We shouldn't need more than this, otherwise we can overwhelm some Kodi hardware.
- Had to sprinkle some `synchronized` to avoid race conditions. For instance, through a TCP connection, as soon as Kore is opened (on the remote screen) it will call at least `GetActivePlayers`, `GetProperties`, `Ping`. If the TCP socket isn't set up yet, each of these calls would create a socket (and a TCP listener thread), so we would open 3 or more sockets when we should just open 1. A `synchronized` in `executeThroughTcp` prevents this. The others prevent similar issues.

Aditionally:
- Tweaked the playlist fetching code, so that it happens exclusively in `HostConnectionObserver` and when PlaylistFragment is notified of changes, it already gets the playlist data. This somewhat simplifies the code, and makes it more consistent with the Player Observer code;
- Change `EventServerConnection` to accept a Handler on which to post the result of the connection, so that the caller can control on which thread the result is called;
- Calls to the various `RegisterObserver` loose the reply immediately parameter, as it was always true.
2019-09-28 22:10:04 +02:00
Synced Synapse c68235fcfc Tweak Themes
Use more consistent color Schemes
2019-05-21 20:51:21 +02:00
Synced Synapse 94693cb5a5 Fix NPE on volume change by not unbinding the controls in the Volume Level Indicator too soon 2018-07-04 20:54:12 +02:00
Martijn Brekhof d11dbe6853 Fixes a possible race condition and starting multiple instances (#559)
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.
2018-06-22 11:05:38 +01:00
Martijn Brekhof e0f99c93c4 Fixed NPE in the VolumeControllerDialog (#553)
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.
2018-06-09 18:47:09 +01:00
Martijn Brekhof 2ed968456a Upgraded butterknife to 8.8.1 (#524)
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
2018-04-05 18:22:20 +01:00
Synced Synapse db81d44e62 Simplify hardware volume key handling
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.
2018-02-06 11:45:12 +01:00
Martijn Brekhof 9e65350b5a Bug/androidtests (#466)
* Fixed issue with selecting tabs

* Fixed issue with switching host on other thread than UI thread

* Fixed concurrent modification exception in JSONConnectionHandlerManager

* Fixed issue with drawer not closing

* Fixes issue with running method only supported on API 21 and higher
2017-10-10 11:06:10 +01:00
Ahmed I. Khalil b6822fd0ad Support getting favourites in Kore (#81) (#384)
* Support getting favourites in Kore (#81)
2017-05-09 18:35:21 +01:00
Martijn Brekhof 412931b8db Refactored AbstractDetailsFragment
This introduces the MVC model to details fragments. It moves as much
view and control code out of the concrete fragments into the abstract
classes.

   * Added UML class and sequence diagrams under doc/diagrams to clarify
     the new setup

   * Introduces new abstract classes
      * AbstractFragment class to hold the DataHolder
      * AbstractInfoFragment class to display media information
      * AbstractAddtionalInfoFragment class to allow *InfoFragments
        to add additional UI elements and propagate refresh requests.
        See for an example TVShowInfoFragment which adds
        TVShowProgressFragment to display next episodes and season
        progression.

   * Introduces new RefreshItem class to encapsulate all refresh
     functionality from AbstractDetailsFragment

   * Introduces new SharedElementTransition utility class to encapsulate
     all shared element transition code

   * Introduces new CastFragment class to encapsulate all code for
     displaying casts reducing code duplication

   * Introduces DataHolder class to replace passing the ViewHolder from
     the *ListFragment to the *DetailsFragment or *InfoFragment

   * Refactored AbstractDetailsFragment into two classes:

     o AbstractDetailsFragment: for fragments requiring a tab bar
     o AbstractInfoFragment:    for fragments showing media information

     We used to use <NAME>DetailsFragments for both fragments that show
     generic
     info about some media item and fragments that hold all details for
     some media item.
     For example, artist details showed artist info and used tabs to
     show artist albums and songs as well. Now Details fragments are
     used to show all details, Info fragments only show media item
     information like description, title, rating, etc.

   * Moved swiperefreshlayout code from AbstractCursorListFragment to
     AbstractListFragment
2017-03-02 11:55:19 +01:00
Mon Zafra 6e347b6b36 Materialized dialogs and preferences (#330)
* Changed platform AlertDialogs and preference.* to support lib counterparts
- added dependencies: support/preference-v7 for PreferenceFragmentCompat
  and Preference subclasses, support/preference-v14 for the
  MultiSelectListPreference
- simplified some AlertDialog.Builder calls and added non-null annotations
  to DialogFragment#onCreateDialog(Bundle) overrides to shut the IDE up
- UIUtils: changed static member avatarColorsIdx to local var because it's
  only used in one place and the value isn't cached
- layout/dialog_send_text: removed view vertical margins as they take
  way too much space for nothing.
- strings: shortened english preference titles
- themes: added PrefTheme and changed preference title font size to medium
  from large
- preferences: changed CheckBoxPreference to SwitchPreferenceCompat. these
  don't have the same issue described in #233 (tested in kitkat).

* Changed platform PreferenceManager in RemoteActivity to support pref

* Fixed M permissions

* Split prefs into 2 groups as per material design guidelines

* Changed prefs theme to v14.material

* Moved container padding to individual prefs; removed pref-v7 dependency
- this makes the item dividers touch the screen edges which i think looks
  better
- don't need to require preference-v7 because preference-v14 already
  does

* Moved PrefTheme attributes *{Start,End} to v17 override

* Fixed crash caused by rotating twice while a dialog is active

* Changed wording as suggested
2017-01-04 08:37:13 +00:00
Martijn Brekhof b8fbf4e190 Refactored org.xbmc.kore.ui package into separate packages 2016-12-29 18:27:40 +00:00