Merge branch 'master' into librarysyncservicebounded
Conflicts: app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java
This commit is contained in:
commit
bee35c216d
|
@ -41,6 +41,7 @@ import android.widget.AdapterView;
|
|||
import android.widget.CursorAdapter;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -49,10 +50,12 @@ import org.xbmc.kore.host.HostInfo;
|
|||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.ApiException;
|
||||
import org.xbmc.kore.jsonrpc.event.MediaSyncEvent;
|
||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||
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.UIUtils;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
@ -209,7 +212,7 @@ public class AlbumListFragment extends AbstractMusicListFragment {
|
|||
final int YEAR = 6;
|
||||
}
|
||||
|
||||
private static class AlbumsAdapter extends CursorAdapter {
|
||||
private class AlbumsAdapter extends CursorAdapter {
|
||||
|
||||
private HostManager hostManager;
|
||||
private int artWidth, artHeight;
|
||||
|
@ -264,6 +267,11 @@ public class AlbumListFragment extends AbstractMusicListFragment {
|
|||
UIUtils.loadImageWithCharacterAvatar(context, hostManager,
|
||||
thumbnail, viewHolder.albumTitle,
|
||||
viewHolder.artView, artWidth, artHeight);
|
||||
|
||||
// For the popupmenu
|
||||
ImageView contextMenu = (ImageView)view.findViewById(R.id.list_context_menu);
|
||||
contextMenu.setTag(viewHolder);
|
||||
contextMenu.setOnClickListener(albumlistItemMenuClickListener);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,4 +287,32 @@ public class AlbumListFragment extends AbstractMusicListFragment {
|
|||
int albumId;
|
||||
String albumTitle;
|
||||
}
|
||||
|
||||
private View.OnClickListener albumlistItemMenuClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
final ViewHolder viewHolder = (ViewHolder)v.getTag();
|
||||
|
||||
final PlaylistType.Item playListItem = new PlaylistType.Item();
|
||||
playListItem.albumid = viewHolder.albumId;
|
||||
|
||||
final PopupMenu popupMenu = new PopupMenu(getActivity(), v);
|
||||
popupMenu.getMenuInflater().inflate(R.menu.musiclist_item, popupMenu.getMenu());
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MediaManager.play(AlbumListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaManager.queueAudio(AlbumListFragment.this, playListItem);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -34,14 +34,17 @@ import android.view.ViewGroup;
|
|||
import android.widget.AdapterView;
|
||||
import android.widget.CursorAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.host.HostInfo;
|
||||
import org.xbmc.kore.host.HostManager;
|
||||
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.UIUtils;
|
||||
|
||||
/**
|
||||
|
@ -139,7 +142,7 @@ public class ArtistListFragment extends AbstractMusicListFragment {
|
|||
final int THUMBNAIL = 4;
|
||||
}
|
||||
|
||||
private static class ArtistsAdapter extends CursorAdapter {
|
||||
private class ArtistsAdapter extends CursorAdapter {
|
||||
|
||||
private HostManager hostManager;
|
||||
private int artWidth, artHeight;
|
||||
|
@ -188,6 +191,11 @@ public class ArtistListFragment extends AbstractMusicListFragment {
|
|||
UIUtils.loadImageWithCharacterAvatar(context, hostManager,
|
||||
thumbnail, viewHolder.artistName,
|
||||
viewHolder.artView, artWidth, artHeight);
|
||||
|
||||
// For the popupmenu
|
||||
ImageView contextMenu = (ImageView)view.findViewById(R.id.list_context_menu);
|
||||
contextMenu.setTag(viewHolder);
|
||||
contextMenu.setOnClickListener(artistlistItemMenuClickListener);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,4 +210,32 @@ public class ArtistListFragment extends AbstractMusicListFragment {
|
|||
int artistId;
|
||||
String artistName;
|
||||
}
|
||||
|
||||
private View.OnClickListener artistlistItemMenuClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
final ViewHolder viewHolder = (ViewHolder)v.getTag();
|
||||
|
||||
final PlaylistType.Item playListItem = new PlaylistType.Item();
|
||||
playListItem.artistid = viewHolder.artistId;
|
||||
|
||||
final PopupMenu popupMenu = new PopupMenu(getActivity(), v);
|
||||
popupMenu.getMenuInflater().inflate(R.menu.musiclist_item, popupMenu.getMenu());
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MediaManager.play(ArtistListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaManager.queueAudio(ArtistListFragment.this, playListItem);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ import android.widget.AdapterView;
|
|||
import android.widget.CursorAdapter;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -49,9 +50,11 @@ import org.xbmc.kore.host.HostInfo;
|
|||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.ApiException;
|
||||
import org.xbmc.kore.jsonrpc.event.MediaSyncEvent;
|
||||
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.UIUtils;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
|
@ -152,7 +155,7 @@ public class AudioGenresListFragment extends AbstractMusicListFragment {
|
|||
final int THUMBNAIL = 3;
|
||||
}
|
||||
|
||||
private static class AudioGenresAdapter extends CursorAdapter {
|
||||
private class AudioGenresAdapter extends CursorAdapter {
|
||||
|
||||
private HostManager hostManager;
|
||||
private int artWidth, artHeight;
|
||||
|
@ -198,6 +201,11 @@ public class AudioGenresListFragment extends AbstractMusicListFragment {
|
|||
UIUtils.loadImageWithCharacterAvatar(context, hostManager,
|
||||
thumbnail, viewHolder.genreTitle,
|
||||
viewHolder.artView, artWidth, artHeight);
|
||||
|
||||
// For the popupmenu
|
||||
ImageView contextMenu = (ImageView)view.findViewById(R.id.list_context_menu);
|
||||
contextMenu.setTag(viewHolder);
|
||||
contextMenu.setOnClickListener(genrelistItemMenuClickListener);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,4 +219,32 @@ public class AudioGenresListFragment extends AbstractMusicListFragment {
|
|||
int genreId;
|
||||
String genreTitle;
|
||||
}
|
||||
|
||||
private View.OnClickListener genrelistItemMenuClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
final ViewHolder viewHolder = (ViewHolder)v.getTag();
|
||||
|
||||
final PlaylistType.Item playListItem = new PlaylistType.Item();
|
||||
playListItem.genreid = viewHolder.genreId;
|
||||
|
||||
final PopupMenu popupMenu = new PopupMenu(getActivity(), v);
|
||||
popupMenu.getMenuInflater().inflate(R.menu.musiclist_item, popupMenu.getMenu());
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_play:
|
||||
MediaManager.play(AudioGenresListFragment.this, playListItem);
|
||||
return true;
|
||||
case R.id.action_queue:
|
||||
MediaManager.queueAudio(AudioGenresListFragment.this, playListItem);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
popupMenu.show();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -137,14 +137,22 @@ public class SendTextDialogFragment extends DialogFragment {
|
|||
textToSend.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEND) {
|
||||
mListener.onSendTextFinished(
|
||||
textToSend.getText().toString(),
|
||||
finishAfterSend.isChecked());
|
||||
if (actionId == EditorInfo.IME_ACTION_SEND ) {
|
||||
onSendTextFinished();
|
||||
} // handles enter key on external keyboard, issue #99
|
||||
else if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED &&
|
||||
(event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
|
||||
onSendTextFinished();
|
||||
}
|
||||
dialog.dismiss();
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onSendTextFinished() {
|
||||
mListener.onSendTextFinished(
|
||||
textToSend.getText().toString(),
|
||||
finishAfterSend.isChecked());
|
||||
}
|
||||
});
|
||||
return dialog;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* Copyright 2015 Synced Synapse. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.xbmc.kore.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.ApiCallback;
|
||||
import org.xbmc.kore.jsonrpc.method.Player;
|
||||
import org.xbmc.kore.jsonrpc.method.Playlist;
|
||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||
import org.xbmc.kore.ui.RemoteActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class MediaManager {
|
||||
|
||||
/**
|
||||
* Clears current playlist and starts playing item
|
||||
* @param fragment Fragment instance from which this method is called
|
||||
* @param item PlaylistType.Item that needs to be played
|
||||
*/
|
||||
public static void play(final Fragment fragment, final PlaylistType.Item item) {
|
||||
HostManager hostManager = HostManager.getInstance(fragment.getActivity());
|
||||
|
||||
final Handler callbackHandler = new Handler();
|
||||
|
||||
final Context context = fragment.getActivity();
|
||||
|
||||
Player.Open action = new Player.Open(item);
|
||||
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
|
||||
@Override
|
||||
public void onSuccess(String result) {
|
||||
if (!fragment.isAdded()) return;
|
||||
boolean switchToRemote = PreferenceManager
|
||||
.getDefaultSharedPreferences(context)
|
||||
.getBoolean(Settings.KEY_PREF_SWITCH_TO_REMOTE_AFTER_MEDIA_START,
|
||||
Settings.DEFAULT_PREF_SWITCH_TO_REMOTE_AFTER_MEDIA_START);
|
||||
if (switchToRemote) {
|
||||
Intent launchIntent = new Intent(context, RemoteActivity.class);
|
||||
context.startActivity(launchIntent);
|
||||
} else {
|
||||
Toast.makeText(context, R.string.now_playing, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int errorCode, String description) {
|
||||
if (!fragment.isAdded()) return;
|
||||
// Got an error, show toast
|
||||
String errorMessage = context.getString(R.string.error_play_media_file, description);
|
||||
Toast.makeText(context, errorMessage, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
}, callbackHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears current playlist and starts playing item
|
||||
* @param fragment Fragment instance from which this method is called
|
||||
* @param item PlaylistType.Item that needs to be added to the current audio playlist
|
||||
*/
|
||||
public static void queueAudio(final Fragment fragment, final PlaylistType.Item item) {
|
||||
Playlist.GetPlaylists getPlaylists = new Playlist.GetPlaylists();
|
||||
|
||||
final Handler callbackHandler = new Handler();
|
||||
|
||||
final Context context = fragment.getActivity();
|
||||
|
||||
final HostManager hostManager = HostManager.getInstance(fragment.getActivity());
|
||||
|
||||
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
|
||||
@Override
|
||||
public void onSuccess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
|
||||
if (!fragment.isAdded()) return;
|
||||
// Ok, loop through the playlists, looking for the audio one
|
||||
int audioPlaylistId = -1;
|
||||
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
|
||||
if (playlist.type.equals(PlaylistType.GetPlaylistsReturnType.AUDIO)) {
|
||||
audioPlaylistId = playlist.playlistid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// If found, add to playlist
|
||||
if (audioPlaylistId != -1) {
|
||||
Playlist.Add action = new Playlist.Add(audioPlaylistId, item);
|
||||
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
|
||||
@Override
|
||||
public void onSuccess(String result) {
|
||||
if (!fragment.isAdded()) return;
|
||||
Toast.makeText(context, R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int errorCode, String description) {
|
||||
if (!fragment.isAdded()) return;
|
||||
// Got an error, show toast
|
||||
String errorMessage = context.getString(R.string.error_queue_media_file, description);
|
||||
Toast.makeText(context, errorMessage, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
}, callbackHandler);
|
||||
} else {
|
||||
Toast.makeText(context, R.string.no_suitable_playlist, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int errorCode, String description) {
|
||||
if (!fragment.isAdded()) return;
|
||||
// Got an error, show toast
|
||||
Toast.makeText(context, R.string.error_getting_playlist, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
}, callbackHandler);
|
||||
}
|
||||
}
|
|
@ -35,28 +35,43 @@
|
|||
android:layout_alignParentLeft="true"
|
||||
android:contentDescription="@string/poster"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/art"
|
||||
<ImageView
|
||||
android:id="@+id/list_context_menu"
|
||||
android:layout_width="@dimen/default_icon_size"
|
||||
android:layout_height="@dimen/default_icon_size"
|
||||
android:padding="@dimen/default_icon_padding"
|
||||
android:layout_alignTop="@id/art"
|
||||
style="@style/TextAppearance.Medialist.Title"/>
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@id/title"
|
||||
android:layout_below="@id/title"
|
||||
style="@style/TextAppearance.Medialist.Details"/>
|
||||
android:layout_alignParentRight="true"
|
||||
style="@style/Widget.Button.Borderless"
|
||||
android:src="?attr/iconOverflow"
|
||||
android:contentDescription="@string/action_options"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/genres"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/name"
|
||||
android:layout_alignLeft="@id/title"
|
||||
android:layout_alignParentBottom="true"
|
||||
style="@style/TextAppearance.Medialist.OtherInfo"/>
|
||||
android:orientation="vertical"
|
||||
android:layout_toLeftOf="@+id/list_context_menu"
|
||||
android:layout_toRightOf="@id/art"
|
||||
android:layout_alignTop="@id/art">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/TextAppearance.Medialist.Title"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/TextAppearance.Medialist.Details"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/genres"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/TextAppearance.Medialist.OtherInfo"/>
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
|
@ -35,9 +35,10 @@
|
|||
android:contentDescription="@string/poster"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical">
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
|
@ -53,5 +54,14 @@
|
|||
android:paddingBottom="0dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/list_context_menu"
|
||||
android:layout_width="@dimen/default_icon_size"
|
||||
android:layout_height="@dimen/default_icon_size"
|
||||
android:padding="@dimen/default_icon_padding"
|
||||
style="@style/Widget.Button.Borderless"
|
||||
android:src="?attr/iconOverflow"
|
||||
android:contentDescription="@string/action_options"/>
|
||||
</LinearLayout>
|
||||
</android.support.v7.widget.CardView>
|
|
@ -34,11 +34,21 @@
|
|||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
style="@style/TextAppearance.Medialist.Title"
|
||||
android:paddingTop="0dp"
|
||||
android:paddingBottom="0dp"
|
||||
android:gravity="center_vertical"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/list_context_menu"
|
||||
android:layout_width="@dimen/default_icon_size"
|
||||
android:layout_height="@dimen/default_icon_size"
|
||||
android:padding="@dimen/default_icon_padding"
|
||||
style="@style/Widget.Button.Borderless"
|
||||
android:src="?attr/iconOverflow"
|
||||
android:contentDescription="@string/action_options"/>
|
||||
</LinearLayout>
|
||||
</android.support.v7.widget.CardView>
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2015 Synced Synapse. All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item android:id="@+id/action_play"
|
||||
android:title="@string/play"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="never" />
|
||||
<item android:id="@+id/action_queue"
|
||||
android:title="@string/add_to_playlist"
|
||||
android:orderInCategory="2"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
|
@ -23,17 +23,19 @@
|
|||
<string name="loading">Зареждане…</string>
|
||||
|
||||
<!-- Navigation drawer tips -->
|
||||
<string name="navigation_drawer_open">Open navigation drawer</string>
|
||||
<string name="navigation_drawer_close">Close navigation drawer</string>
|
||||
<string name="navigation_drawer_open">Open navigation drawer</string>
|
||||
<string name="navigation_drawer_close">Close navigation drawer</string>
|
||||
|
||||
<string name="xbmc_media_center">Медиен център</string>
|
||||
<string name="home">Начален екран</string>
|
||||
<string name="movies">Филми</string>
|
||||
<string name="tv_shows">ТВ Сериали</string>
|
||||
<string name="music">Музика</string>
|
||||
<string name="pictures">Снимки</string>
|
||||
<string name="xbmc_media_center">Медиен център</string>
|
||||
<string name="home">Начален екран</string>
|
||||
<string name="movies">Филми</string>
|
||||
<string name="tv_shows">ТВ Сериали</string>
|
||||
<string name="music">Музика</string>
|
||||
<string name="pictures">Снимки</string>
|
||||
<string name="addons">Добавки</string>
|
||||
|
||||
<string name="files">Файлове</string>
|
||||
<string name="video">Видео</string>
|
||||
<string name="file_browser">Диспечер на файлове</string>
|
||||
<string name="no_xbmc_configured">Няма настроен медиен център</string>
|
||||
<string name="add_xbmc">Добавяне на медиен център</string>
|
||||
|
||||
|
@ -43,6 +45,7 @@
|
|||
<string name="power">Изключи...</string>
|
||||
<string name="quit">Изход</string>
|
||||
<string name="suspend">Суспендиране</string>
|
||||
<string name="reboot">Рестартиране</string>
|
||||
<string name="shutdown">Изключване</string>
|
||||
|
||||
<string name="send">Изпрати</string>
|
||||
|
@ -77,7 +80,7 @@
|
|||
Докоснете <i>Повторно търсене</i> за втори опит или <i>Напред</i> за ръчно настройване.
|
||||
]]></string>
|
||||
<string name="wizard_search_host_found"><![CDATA[
|
||||
В локалната мрежа са открити следните медийни центрове.<br/><br/>Изберет кой да бъде добавен или докоснете <i>Напред</i> за ръчно добавяне.
|
||||
В локалната мрежа са открити следните медийни центрове.<br/><br/>Изберете кой да бъде добавен или докоснете <i>Напред</i> за ръчно добавяне.
|
||||
]]></string>
|
||||
<string name="searching">Търсене…</string>
|
||||
<string name="no_xbmc_found">Няма открити медийни центрове</string>
|
||||
|
@ -93,11 +96,15 @@
|
|||
<string name="wizard_xbmc_tcp_port">TCP порт (9090)</string>
|
||||
<string name="wizard_xbmc_mac_address">MAC адрес</string>
|
||||
<string name="wizard_xbmc_wol_port">WoL порт (9)</string>
|
||||
<string name="wizard_xbmc_use_tcp">Ползвай TCP</string>
|
||||
<string name="wizard_xbmc_event_server_port">СС порт (9777)</string>
|
||||
<string name="wizard_xbmc_use_event_server">Ползвай Сървър за Събития</string>
|
||||
|
||||
<string name="wizard_no_name_specified">Моля, въведете име за медийния център, с което ще го отличавате по-късно.</string>
|
||||
<string name="wizard_no_address_specified">Моля, въведете адреса на медийния център, за да бъде открит.</string>
|
||||
<string name="wizard_invalid_http_port_specified">Моля, въведете HTTP порт за медийния център, за да бъде открит.</string>
|
||||
<string name="wizard_invalid_tcp_port_specified">Моля, въведете TCP порт за медийния център, за да бъде открит.</string>
|
||||
<string name="wizard_invalid_http_port_specified">Моля, въведете HTTP порт за медийния център.</string>
|
||||
<string name="wizard_invalid_tcp_port_specified">Моля, въведете TCP порт за медийния център.</string>
|
||||
<string name="wizard_invalid_es_port_specified">Моля, въведете порта на Сървъра за Събития за медийния център.</string>
|
||||
|
||||
<string name="wizard_connecting_to_xbmc_title">Свързване към %1$s…</string>
|
||||
<string name="wizard_connecting_to_xbmc_message">Моля, изчакайте докато връзката се тества…</string>
|
||||
|
@ -114,6 +121,9 @@
|
|||
Докоснете <b><i>Завършено</i></b> за да започнете да ползвате дистанционното.
|
||||
]]></string>
|
||||
|
||||
<string name="wizard_zeroconf_no_host_address">Адресът на медийният център не може да бъде открит!</string>
|
||||
<string name="wizard_zeroconf_cant_connect_no_host_address">Свързването с медийния център не е възможно, защото адреса му не може да бъде открит.</string>
|
||||
|
||||
<string name="play">Възпроизведи</string>
|
||||
<string name="pause">Пауза</string>
|
||||
<string name="stop">Стоп</string>
|
||||
|
@ -130,6 +140,8 @@
|
|||
<string name="no_audiostream">Няма налични аудио потоци</string>
|
||||
<string name="download_subtitle">Сваляне на субтитри</string>
|
||||
<string name="none">Няма</string>
|
||||
<string name="audio_sync">Sync audio</string>
|
||||
<string name="subtitle_sync">Sync subtitles</string>
|
||||
|
||||
<string name="left">Наляво</string>
|
||||
<string name="right">Надясно</string>
|
||||
|
@ -138,7 +150,7 @@
|
|||
<string name="select">Избор</string>
|
||||
<string name="info">Информация</string>
|
||||
<string name="codec_info">Кодек</string>
|
||||
<string name="context">Контекст</string>
|
||||
<string name="context">Контекстно меню</string>
|
||||
<string name="osd">Меню</string>
|
||||
<string name="back">Назад</string>
|
||||
|
||||
|
@ -153,7 +165,10 @@
|
|||
<string name="wake_up">Събуждане</string>
|
||||
<string name="edit_xbmc">Редактиране на медиен център</string>
|
||||
<string name="delete_xbmc">Изтриване на медиен център</string>
|
||||
<string name="delete_xbmc_confirm">Желаете медийният център да бъде изтрит?</string>
|
||||
<string name="delete_xbmc_confirm">Желаете ли медийният център да бъде изтрит?</string>
|
||||
<string name="queue_file">На опашката</string>
|
||||
<string name="play_file">Възпроизведи</string>
|
||||
<string name="play_from_here">Възпроизведи от тук</string>
|
||||
|
||||
<string name="connecting_to_xbmc">Свързване…</string>
|
||||
<string name="unable_to_connect_to_xbmc">Свързването с медийния център не е възможно</string>
|
||||
|
@ -178,7 +193,7 @@
|
|||
<string name="max_rating_music">/5</string>
|
||||
|
||||
<string name="fanart">Фен-арт</string>
|
||||
<string name="poster">Постер</string>
|
||||
<string name="poster">Плакат</string>
|
||||
<string name="thumbnail">Миниатюра</string>
|
||||
|
||||
<string name="error_getting_properties">Свойствата на Kodi/XBMC не са достъпни.\nГрешка:
|
||||
|
@ -186,40 +201,52 @@
|
|||
<string name="error_executing_subtitles">Добавката за субтитри не може да бъде стартирана.\nГрешка: %1$s.</string>
|
||||
<string name="error_getting_addon_info">Информацията за добавката не е достъпна.\nГрешка:
|
||||
%1$s.</string>
|
||||
<string name="error_getting_source_info">Списъкът на файлове не е достъпен.\nГрешка:
|
||||
%1$s.</string>
|
||||
<string name="error_play_media_file">Файлът не може да бъде възпроизведен.\nГрешка:
|
||||
%1$s.</string>
|
||||
<string name="error_queue_media_file">Файлът не може да бъде добавен към опашката.\nГрешка:
|
||||
%1$s.</string>
|
||||
<string name="error_get_active_player">Couldn\'t get active player.\nГрешка:
|
||||
%1$s.</string>
|
||||
|
||||
<string name="directors">Режисьор:</string>
|
||||
<string name="studio">Студио:</string>
|
||||
<string name="cast">Участници</string>
|
||||
<string name="additional_cast">Други участници</string>
|
||||
<string name="cast_list_text">%1$s като %2$s</string>
|
||||
<!-- String to be used as the text on the cast grid view, when there is more actors than are shown -->
|
||||
<string name="remaining_cast_count">Още %d</string>
|
||||
|
||||
<string name="general_error_executing_action">Грешка при изпълнение на действие: %1$s</string>
|
||||
<string name="error_getting_playlist">Грешка при изтеглянето на плейлист</string>
|
||||
<string name="error_message">Грешка: %1$s</string>
|
||||
<string name="playlist_empty">Празен плейлист</string>
|
||||
<string name="clear_playlist">Изчисти плейлиста</string>
|
||||
<string name="source_empty">Източникът на медия е празен</string>
|
||||
|
||||
<string name="no_movies_found_refresh">Няма открити филми\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_tvshows_found_refresh">Няма открити ТВ Сериали\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_episodes_found">Няма открити епизоди</string>
|
||||
<string name="no_artists_found_refresh">No artists found\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_artists_found_refresh">Няма открити артисти\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_albums_found_refresh">Няма открити албуми\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_genres_found_refresh">Няма открити жанрове\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_addons_found_refresh">Няма открити добавки или няма връзка\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="no_music_videos_found_refresh">Няма открити клипове\n\nПлъзнете надолу за обновяване</string>
|
||||
<string name="pull_to_refresh">Плъзнете за обновяване</string>
|
||||
<string name="no_cast_info">Няма информация за участниците</string>
|
||||
|
||||
<string name="minutes_abbrev">%1$s мин</string>
|
||||
<string name="sync_successful">Успешно синхронизиране</string>
|
||||
<string name="error_while_syncing">Възникна грешка при синхронизирането: %1$s</string>
|
||||
|
||||
<string name="action_search">Търсене</string>
|
||||
<string name="action_search_movies">Търси филм</string>
|
||||
<string name="action_search_tvshows">Търси ТВ Сериал</string>
|
||||
<string name="action_search_albums">Търси албум</string>
|
||||
<string name="action_search_artists">Търси артист</string>
|
||||
<string name="action_search_genres">Търси жанр</string>
|
||||
<string name="action_search_music_videos">Търси клип</string>
|
||||
<string name="action_search_movies">Търсене за филм</string>
|
||||
<string name="action_search_tvshows">Търсене за ТВ Сериал</string>
|
||||
<string name="action_search_albums">Търсене за албум</string>
|
||||
<string name="action_search_artists">Търсене за артист</string>
|
||||
<string name="action_search_genres">Търсене за жанр</string>
|
||||
<string name="action_search_music_videos">Търсене за клип</string>
|
||||
|
||||
<string name="add_to_playlist">Добави към плейлист</string>
|
||||
<string name="item_added_to_playlist">Добавен към плейлист</string>
|
||||
|
@ -229,6 +256,10 @@
|
|||
<string name="seen">Гледан</string>
|
||||
<string name="download">Сваляне</string>
|
||||
|
||||
<string name="confirm_movie_download">Желаете ли да свалите филма?\nСвалянето ще започне на заден фон и най-вероятно ще отнеме известно време.</string>
|
||||
<string name="confirm_episode_download">Желаете ли да свалите епизода?\nСвалянето ще започне на заден фон и най-вероятно ще отнеме известно време.</string>
|
||||
<string name="confirm_album_download">Желаете ли да свалите албума?\nСвалянето ще започне на заден фон и най-вероятно ще отнеме известно време.</string>
|
||||
|
||||
<string name="download_file_exists">Файлът съществува.\nДа бъде презаписан или свален с ново име?</string>
|
||||
<string name="download_dir_exists">Директорията вече съществува.\nАко съществуват и файлове със същото име да бъдат презаписани или свалени с ново име?</string>
|
||||
<string name="overwrite">Презаписване</string>
|
||||
|
@ -251,13 +282,13 @@
|
|||
|
||||
<string name="author">Автор:</string>
|
||||
<string name="version">Версия:</string>
|
||||
<string name="enable_disable">Вкл./Изкл. на добавка</string>
|
||||
<string name="enable_disable">Вкл./Изкл. на добавката</string>
|
||||
<string name="addon_enabled">Добавката е включена</string>
|
||||
<string name="addon_disabled">Добавката е изключена</string>
|
||||
|
||||
<!-- Filters on list menus -->
|
||||
<string name="hide_watched">Без гледаните</string>
|
||||
<string name="sort_order">Сортирай по</string>
|
||||
<string name="sort_order">Сортирай по…</string>
|
||||
<string name="sort_by_name">име</string>
|
||||
<string name="sort_by_date_added">дата на добавяне</string>
|
||||
<string name="ignore_prefixes">Игнорирай представките</string>
|
||||
|
@ -273,13 +304,14 @@
|
|||
<string name="switch_to_remote">Към дистанционното след стартиране</string>
|
||||
<string name="show_notification">Показвай известия и при възпроизвеждане</string>
|
||||
<string name="use_hardware_volume_keys">Контрол на звука с клавишите за сила за звука</string>
|
||||
<string name="vibrate_on_remote">Вибриране при натискане на бутон</string>
|
||||
|
||||
<string name="about">За приложението</string>
|
||||
<string name="about_desc"><![CDATA[
|
||||
\u00A9 2015 XBMC Foundation.<br><br>
|
||||
Моля, оценете ни в <b><a href="market://details?id=org.xbmc.kore">Google Play</a></b><br><br>
|
||||
|
||||
If you need help, check our <b><a href="http://forum.kodi.tv/forumdisplay.php?fid=129">forum</a></b>
|
||||
Ако се нуждаете от помощ посетете форума: <b><a href="http://forum.kodi.tv/forumdisplay.php?fid=129">forum</a></b>
|
||||
]]></string>
|
||||
|
||||
<!--<!– String for coffee –>-->
|
||||
|
@ -294,4 +326,6 @@
|
|||
<!--<string name="error_during_purchased">Възникна грешка по време на закупуването.</string>-->
|
||||
<!--<string name="purchase_thanks">Благодаря за подкрепата!</string>-->
|
||||
|
||||
<string name="play_on_kodi">Kodi</string>
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue