diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82a7369..0fe16d9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + @@ -21,6 +22,7 @@ + @@ -67,6 +69,12 @@ + + + + + + diff --git a/app/src/main/java/org/xbmc/kore/service/LibrarySyncService.java b/app/src/main/java/org/xbmc/kore/service/LibrarySyncService.java index 2d42cab..d2d1d2b 100644 --- a/app/src/main/java/org/xbmc/kore/service/LibrarySyncService.java +++ b/app/src/main/java/org/xbmc/kore/service/LibrarySyncService.java @@ -63,7 +63,7 @@ public class LibrarySyncService extends Service { public static final String TAG = LogUtils.makeLogTag(LibrarySyncService.class); private static final int LIMIT_SYNC_MOVIES = 300; - private static final int LIMIT_SYNC_TVSHOWS = 300; + private static final int LIMIT_SYNC_TVSHOWS = 200; private static final int LIMIT_SYNC_ARTISTS = 300; private static final int LIMIT_SYNC_ALBUMS = 300; private static final int LIMIT_SYNC_SONGS = 600; @@ -702,7 +702,7 @@ public class LibrarySyncService extends Service { startIdx + LIMIT_SYNC_TVSHOWS, allResults); } else { // Ok, we have all the shows, insert them - LogUtils.LOGD(TAG, "syncAllTVShows: Got all tv shows"); + LogUtils.LOGD(TAG, "syncAllTVShows: Got all tv shows. Total: " + allResults.size()); deleteTVShows(contentResolver, hostId, -1); insertTVShowsAndGetDetails(orchestrator, hostConnection, callbackHandler, contentResolver, allResults); @@ -720,6 +720,7 @@ public class LibrarySyncService extends Service { private void deleteTVShows(final ContentResolver contentResolver, int hostId, int tvshowId) { if (tvshowId == -1) { + LogUtils.LOGD(TAG, "Deleting all existing tv shows: "); // Delete all tvshows String where = MediaContract.TVShowsColumns.HOST_ID + "=?"; contentResolver.delete(MediaContract.Episodes.CONTENT_URI, @@ -759,6 +760,7 @@ public class LibrarySyncService extends Service { } // Insert the tvshows contentResolver.bulkInsert(MediaContract.TVShows.CONTENT_URI, tvshowsValuesBatch); + LogUtils.LOGD(TAG, "Inserted " + tvShows.size() + " tv shows."); ContentValues tvshowsCastValuesBatch[] = new ContentValues[castCount]; int count = 0; @@ -923,6 +925,7 @@ public class LibrarySyncService extends Service { }, callbackHandler); } else { // We're finished + LogUtils.LOGD(TAG, "Sync tv shows finished successfully"); orchestrator.syncItemFinished(); } } diff --git a/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java b/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java index 2d9e3e8..c9659cb 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java @@ -55,7 +55,7 @@ import org.xbmc.kore.provider.MediaContract; import org.xbmc.kore.provider.MediaDatabase; import org.xbmc.kore.service.LibrarySyncService; import org.xbmc.kore.utils.LogUtils; -import org.xbmc.kore.utils.MediaManager; +import org.xbmc.kore.utils.MediaPlayerUtils; import org.xbmc.kore.utils.UIUtils; import butterknife.ButterKnife; @@ -303,10 +303,10 @@ public class AlbumListFragment extends AbstractMusicListFragment { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_play: - MediaManager.play(AlbumListFragment.this, playListItem); + MediaPlayerUtils.play(AlbumListFragment.this, playListItem); return true; case R.id.action_queue: - MediaManager.queueAudio(AlbumListFragment.this, playListItem); + MediaPlayerUtils.queueAudio(AlbumListFragment.this, playListItem); return true; } return false; diff --git a/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java b/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java index 8df627a..f23a4c6 100644 --- a/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java @@ -44,7 +44,7 @@ import org.xbmc.kore.jsonrpc.type.PlaylistType; import org.xbmc.kore.provider.MediaContract; import org.xbmc.kore.provider.MediaDatabase; import org.xbmc.kore.utils.LogUtils; -import org.xbmc.kore.utils.MediaManager; +import org.xbmc.kore.utils.MediaPlayerUtils; import org.xbmc.kore.utils.UIUtils; /** @@ -226,10 +226,10 @@ public class ArtistListFragment extends AbstractMusicListFragment { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_play: - MediaManager.play(ArtistListFragment.this, playListItem); + MediaPlayerUtils.play(ArtistListFragment.this, playListItem); return true; case R.id.action_queue: - MediaManager.queueAudio(ArtistListFragment.this, playListItem); + MediaPlayerUtils.queueAudio(ArtistListFragment.this, playListItem); return true; } return false; diff --git a/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java b/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java index 11ee0f7..266fe57 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java @@ -54,7 +54,7 @@ import org.xbmc.kore.jsonrpc.type.PlaylistType; import org.xbmc.kore.provider.MediaContract; import org.xbmc.kore.service.LibrarySyncService; import org.xbmc.kore.utils.LogUtils; -import org.xbmc.kore.utils.MediaManager; +import org.xbmc.kore.utils.MediaPlayerUtils; import org.xbmc.kore.utils.UIUtils; import butterknife.ButterKnife; @@ -235,10 +235,10 @@ public class AudioGenresListFragment extends AbstractMusicListFragment { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_play: - MediaManager.play(AudioGenresListFragment.this, playListItem); + MediaPlayerUtils.play(AudioGenresListFragment.this, playListItem); return true; case R.id.action_queue: - MediaManager.queueAudio(AudioGenresListFragment.this, playListItem); + MediaPlayerUtils.queueAudio(AudioGenresListFragment.this, playListItem); return true; } return false; diff --git a/app/src/main/java/org/xbmc/kore/ui/RemoteFragment.java b/app/src/main/java/org/xbmc/kore/ui/RemoteFragment.java index 718d3d4..b5c893f 100644 --- a/app/src/main/java/org/xbmc/kore/ui/RemoteFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/RemoteFragment.java @@ -232,8 +232,9 @@ public class RemoteFragment extends Fragment R.attr.remoteButtonColorFilter, R.attr.contentBackgroundColor}); // R.attr.remoteBackgroundColorFilter}); - int remoteButtonsColor = styledAttributes.getColor(0, R.color.white), - remoteBackgroundColor = styledAttributes.getColor(1, R.color.dark_content_background_dim_70pct); + Resources resources = getResources(); + int remoteButtonsColor = styledAttributes.getColor(0, resources.getColor(R.color.white)), + remoteBackgroundColor = styledAttributes.getColor(1, resources.getColor(R.color.dark_content_background_dim_70pct)); styledAttributes.recycle(); leftButton.setColorFilter(remoteButtonsColor); @@ -344,7 +345,8 @@ public class RemoteFragment extends Fragment new View.OnClickListener() { @Override public void onClick(View v) { - eventServerConnection.sendPacket(packet); + if (eventServerConnection != null) + eventServerConnection.sendPacket(packet); } }, buttonInAnim, buttonOutAnim, getActivity().getApplicationContext())); } diff --git a/app/src/main/java/org/xbmc/kore/ui/TVShowEpisodeDetailsFragment.java b/app/src/main/java/org/xbmc/kore/ui/TVShowEpisodeDetailsFragment.java index 120f098..d293820 100644 --- a/app/src/main/java/org/xbmc/kore/ui/TVShowEpisodeDetailsFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/TVShowEpisodeDetailsFragment.java @@ -396,7 +396,6 @@ public class TVShowEpisodeDetailsFragment extends Fragment } }, callbackHandler); } else { - if (!isAdded()) return; Toast.makeText(getActivity(), R.string.no_suitable_playlist, Toast.LENGTH_SHORT) .show(); } @@ -404,6 +403,7 @@ public class TVShowEpisodeDetailsFragment extends Fragment @Override public void onError(int errorCode, String description) { + if (!isAdded()) return; // Got an error, show toast Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT) .show(); diff --git a/app/src/main/java/org/xbmc/kore/ui/hosts/AddHostFragmentZeroconf.java b/app/src/main/java/org/xbmc/kore/ui/hosts/AddHostFragmentZeroconf.java index bf43d1f..1271e9d 100644 --- a/app/src/main/java/org/xbmc/kore/ui/hosts/AddHostFragmentZeroconf.java +++ b/app/src/main/java/org/xbmc/kore/ui/hosts/AddHostFragmentZeroconf.java @@ -17,6 +17,8 @@ package org.xbmc.kore.ui.hosts; import android.app.Activity; import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; @@ -118,6 +120,11 @@ public class AddHostFragmentZeroconf extends Fragment { * Starts the service discovery, setting up the UI accordingly */ public void startSearching() { + if( ! isNetworkConnected() ) { + noNetworkConnection(); + return; + } + LogUtils.LOGD(TAG, "Starting service discovery..."); searchCancelled = false; final Handler handler = new Handler(); @@ -125,6 +132,7 @@ public class AddHostFragmentZeroconf extends Fragment { @Override public void run() { WifiManager wifiManager = (WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); + WifiManager.MulticastLock multicastLock = null; try { // Get wifi ip address @@ -279,6 +287,37 @@ public class AddHostFragmentZeroconf extends Fragment { } + private void noNetworkConnection() { + titleTextView.setText(R.string.no_network_connection); + messageTextView.setText(Html.fromHtml(getString(R.string.wizard_search_no_network_connection))); + messageTextView.setMovementMethod(LinkMovementMethod.getInstance()); + + progressBar.setVisibility(View.GONE); + hostListGridView.setVisibility(View.GONE); + + nextButton.setVisibility(View.GONE); + + previousButton.setVisibility(View.VISIBLE); + previousButton.setText(R.string.search_again); + previousButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startSearching(); + } + }); + } + + private boolean isNetworkConnected() { + ConnectivityManager cm = + (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); + + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + boolean isConnected = activeNetwork != null && + activeNetwork.isConnectedOrConnecting(); + + return isConnected; + } + /** * Adapter used to show the hosts in the {@link GridView} */ diff --git a/app/src/main/java/org/xbmc/kore/utils/MediaManager.java b/app/src/main/java/org/xbmc/kore/utils/MediaPlayerUtils.java similarity index 99% rename from app/src/main/java/org/xbmc/kore/utils/MediaManager.java rename to app/src/main/java/org/xbmc/kore/utils/MediaPlayerUtils.java index 03531f3..0db2bbc 100644 --- a/app/src/main/java/org/xbmc/kore/utils/MediaManager.java +++ b/app/src/main/java/org/xbmc/kore/utils/MediaPlayerUtils.java @@ -35,7 +35,7 @@ import org.xbmc.kore.ui.RemoteActivity; import java.util.ArrayList; -public class MediaManager { +public class MediaPlayerUtils { /** * Clears current playlist and starts playing item diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0daddb1..81efb96 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -276,6 +276,45 @@ Si vous avez besoin d\'aide, consultez le forum ]]> + Aucune connexion réseau + Redémarrer + Afficher les notifications pendant la lecture + Par date d\'ajout + Par nom + Trier + Source vide + Synchroniser les sous-titres + Controller le volume avec les boutons de l\'appareil + Vidéo + Vibrer au touché + Veuillez renseigner un port EventServer valide pour ce média. + ]]> + ES Port (9777) + Utiliser EventServer + Utiliser TCP + Connexion à ce centre multimédia impossible car l\'adresse est introuvable. + Récupération de l\'adresse impossible! + %d plus + File d\'attente + Jouer + Jouer à partir d\'ici + Kodi + Fichiers + Fichiers + Ajout du média impossible.\nErreur: %1$s. + Lecture du média impossible.\nErreur: %1$s. + Navigation dans les fichiers impossible.\nErreur: %1$s. + Récupération du lecteur actif impossible.\nErreur: %1$s. + Contexte + Etes-vous sûre de vouloir télécharger cet album?\nCelui-ci sera téléchargé en arrière-plan, mais + prendra du temps. + Etes-vous sûre de vouloir télécharger cet épisode?\nCelui-ci sera téléchargé en arrière-plan, + mais prendra du temps. + Etes-vous sûre de vouloir télécharger cet album?\nCelui-ci sera téléchargé en arrière-plan, mais + prendra du temps. + Synchronisation audio + Ignorer les préfixes + Aucun acteur à afficher diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d02b20c..a9cb81b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -247,6 +247,9 @@ Se necessitar de ajuda, visite o nosso Vídeo Porto ES (9777) Usar EventServer + Nenhuma conexão de rede activa + Por favor especifique um porto válido para o EventServer. + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c2f8dab..cb24bc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,9 +80,13 @@ I couldn\'t find any media center on your network.
If you need help configuring it, check
+ ]]>
Select one to add or press Next to manually add a new one. ]]>
+ No network connection Searching… No media center found Media center found diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 541e3ad..c30cf2a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -24,22 +24,22 @@ android:entryValues="@array/themes_values_array" android:defaultValue="0"/> - - - -