|
@ -1,6 +1,15 @@
|
|||
Changelog
|
||||
---------
|
||||
|
||||
Version 1.1.0
|
||||
-------------
|
||||
- Replace Codec button with Context button on remote. Codec info is now available through a long click on Info button
|
||||
- Added now playing notification
|
||||
- Use hardware volume keys to control volume
|
||||
- Italian translation (by Enrico Strocchi)
|
||||
- Improved music library sync
|
||||
- Visual tweaks
|
||||
|
||||
Version 1.0.1
|
||||
-------------
|
||||
- Fixed bug with In-app purchase key that was crashing Settings screen
|
||||
|
|
|
@ -8,8 +8,8 @@ android {
|
|||
applicationId "com.syncedsynapse.kore2"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 21
|
||||
versionCode 6
|
||||
versionName "1.0.1"
|
||||
versionCode 7
|
||||
versionName "1.1.0"
|
||||
|
||||
buildConfigField("String", "IAP_KEY", "\"${rootProject.property("IAP_KEY")}\"")
|
||||
}
|
||||
|
|
|
@ -198,13 +198,13 @@ public class NotificationService extends Service
|
|||
break;
|
||||
case ListType.ItemsAll.TYPE_SONG:
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.displayartist + " - " + getItemResult.album;
|
||||
underTitle = getItemResult.displayartist + " | " + getItemResult.album;
|
||||
poster = getItemResult.thumbnail;
|
||||
smallIcon = R.drawable.ic_headset_white_24dp;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_MUSIC_VIDEO:
|
||||
title = getItemResult.title;
|
||||
underTitle = Utils.listStringConcat(getItemResult.artist, ", ") + " - " + getItemResult.album;
|
||||
underTitle = Utils.listStringConcat(getItemResult.artist, ", ") + " | " + getItemResult.album;
|
||||
poster = getItemResult.thumbnail;
|
||||
smallIcon = R.drawable.ic_headset_white_24dp;
|
||||
break;
|
||||
|
|
|
@ -600,78 +600,84 @@ public class NowPlayingFragment extends Fragment
|
|||
descriptionPlot, votes, maxRating;
|
||||
double rating;
|
||||
|
||||
if (getItemResult.type.equals(ListType.ItemsAll.TYPE_MOVIE)) {
|
||||
switchToPanel(R.id.media_panel);
|
||||
switch (getItemResult.type) {
|
||||
case ListType.ItemsAll.TYPE_MOVIE:
|
||||
switchToPanel(R.id.media_panel);
|
||||
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.tagline;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.tagline;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_video);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
} else if (getItemResult.type.equals(ListType.ItemsAll.TYPE_EPISODE)) {
|
||||
switchToPanel(R.id.media_panel);
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_video);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_EPISODE:
|
||||
switchToPanel(R.id.media_panel);
|
||||
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.showtitle;
|
||||
art = getItemResult.thumbnail;
|
||||
poster = getItemResult.art.poster;
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.showtitle;
|
||||
art = getItemResult.thumbnail;
|
||||
poster = getItemResult.art.poster;
|
||||
|
||||
genreSeason = String.format(getString(R.string.season_episode), getItemResult.season, getItemResult.episode);
|
||||
year = getItemResult.premiered;
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_video);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
} else if (getItemResult.type.equals(ListType.ItemsAll.TYPE_SONG)) {
|
||||
switchToPanel(R.id.media_panel);
|
||||
genreSeason = String.format(getString(R.string.season_episode), getItemResult.season, getItemResult.episode);
|
||||
year = getItemResult.premiered;
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_video);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_SONG:
|
||||
switchToPanel(R.id.media_panel);
|
||||
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.displayartist + " \n" + getItemResult.album;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
title = getItemResult.title;
|
||||
underTitle = getItemResult.displayartist + " | " + getItemResult.album;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.description;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_music);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
} else if (getItemResult.type.equals(ListType.ItemsAll.TYPE_MUSIC_VIDEO)) {
|
||||
switchToPanel(R.id.media_panel);
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.description;
|
||||
rating = getItemResult.rating;
|
||||
maxRating = getString(R.string.max_rating_music);
|
||||
votes = (TextUtils.isEmpty(getItemResult.votes)) ? "" : String.format(getString(R.string.votes), getItemResult.votes);
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_MUSIC_VIDEO:
|
||||
switchToPanel(R.id.media_panel);
|
||||
|
||||
title = getItemResult.title;
|
||||
underTitle = Utils.listStringConcat(getItemResult.artist, ", ")
|
||||
+ " \n" + getItemResult.album;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
title = getItemResult.title;
|
||||
underTitle = Utils.listStringConcat(getItemResult.artist, ", ")
|
||||
+ " | " + getItemResult.album;
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = 0;
|
||||
maxRating = null;
|
||||
votes = null;
|
||||
} else {
|
||||
// Other type, just present basic info
|
||||
switchToPanel(R.id.media_panel);
|
||||
genreSeason = Utils.listStringConcat(getItemResult.genre, ", ");
|
||||
year = String.format("%d", getItemResult.year);
|
||||
descriptionPlot = getItemResult.plot;
|
||||
rating = 0;
|
||||
maxRating = null;
|
||||
votes = null;
|
||||
break;
|
||||
default:
|
||||
// Other type, just present basic info
|
||||
switchToPanel(R.id.media_panel);
|
||||
|
||||
title = getItemResult.label;
|
||||
underTitle = "";
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
title = getItemResult.label;
|
||||
underTitle = "";
|
||||
art = getItemResult.fanart;
|
||||
poster = getItemResult.thumbnail;
|
||||
|
||||
genreSeason = null;
|
||||
year = null;
|
||||
descriptionPlot = null;
|
||||
rating = 0;
|
||||
maxRating = null;
|
||||
votes = null;
|
||||
genreSeason = null;
|
||||
year = null;
|
||||
descriptionPlot = null;
|
||||
rating = 0;
|
||||
maxRating = null;
|
||||
votes = null;
|
||||
break;
|
||||
}
|
||||
|
||||
mediaTitle.setText(title);
|
||||
|
@ -743,6 +749,17 @@ public class NowPlayingFragment extends Fragment
|
|||
mediaPoster.setVisibility(View.VISIBLE);
|
||||
int posterWidth = resources.getDimensionPixelOffset(R.dimen.now_playing_poster_width);
|
||||
int posterHeight = resources.getDimensionPixelOffset(R.dimen.now_playing_poster_height);
|
||||
|
||||
// If not video, change aspect ration of poster to a square
|
||||
boolean isVideo = (getItemResult.type.equals(ListType.ItemsAll.TYPE_MOVIE)) ||
|
||||
(getItemResult.type.equals(ListType.ItemsAll.TYPE_EPISODE));
|
||||
if (!isVideo) {
|
||||
ViewGroup.LayoutParams layoutParams = mediaPoster.getLayoutParams();
|
||||
layoutParams.height = layoutParams.width;
|
||||
mediaPoster.setLayoutParams(layoutParams);
|
||||
posterHeight = posterWidth;
|
||||
}
|
||||
|
||||
UIUtils.loadImageWithCharacterAvatar(getActivity(), hostManager,
|
||||
poster, title,
|
||||
mediaPoster, posterWidth, posterHeight);
|
||||
|
|
|
@ -614,33 +614,39 @@ public class PlaylistFragment extends Fragment
|
|||
// Differentiate between media
|
||||
String title, details, artUrl;
|
||||
int duration;
|
||||
if (item.type.equals(ListType.ItemsAll.TYPE_MOVIE)) {
|
||||
title = item.title;
|
||||
details = item.tagline;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
} else if (item.type.equals(ListType.ItemsAll.TYPE_EPISODE)) {
|
||||
title = item.title;
|
||||
String season = String.format(getString(R.string.season_episode_abbrev), item.season, item.episode);
|
||||
details = String.format("%s | %s", item.showtitle, season);
|
||||
artUrl = item.art.poster;
|
||||
duration = item.runtime;
|
||||
} else if (item.type.equals(ListType.ItemsAll.TYPE_SONG)) {
|
||||
title = item.title;
|
||||
details = item.displayartist + " | " + item.album;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.duration;
|
||||
} else if (item.type.equals(ListType.ItemsAll.TYPE_MUSIC_VIDEO)) {
|
||||
title = item.title;
|
||||
details = Utils.listStringConcat(item.artist, ", ") + " | " + item.album;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
} else {
|
||||
// Don't yet recognize this type
|
||||
title = item.label;
|
||||
details = item.type;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
switch (item.type) {
|
||||
case ListType.ItemsAll.TYPE_MOVIE:
|
||||
title = item.title;
|
||||
details = item.tagline;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_EPISODE:
|
||||
title = item.title;
|
||||
String season = String.format(getString(R.string.season_episode_abbrev), item.season, item.episode);
|
||||
details = String.format("%s | %s", item.showtitle, season);
|
||||
artUrl = item.art.poster;
|
||||
duration = item.runtime;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_SONG:
|
||||
title = item.title;
|
||||
details = item.displayartist + " | " + item.album;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.duration;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_MUSIC_VIDEO:
|
||||
title = item.title;
|
||||
details = Utils.listStringConcat(item.artist, ", ") + " | " + item.album;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
break;
|
||||
default:
|
||||
// Don't yet recognize this type
|
||||
title = item.label;
|
||||
details = item.type;
|
||||
artUrl = item.thumbnail;
|
||||
duration = item.runtime;
|
||||
break;
|
||||
}
|
||||
|
||||
viewHolder.title.setText(title);
|
||||
|
@ -649,10 +655,20 @@ public class PlaylistFragment extends Fragment
|
|||
viewHolder.position = position;
|
||||
|
||||
int artWidth = getResources().getDimensionPixelSize(R.dimen.playlist_art_width);
|
||||
int artHeigth = getResources().getDimensionPixelSize(R.dimen.playlist_art_heigth);
|
||||
int artHeight = getResources().getDimensionPixelSize(R.dimen.playlist_art_heigth);
|
||||
|
||||
// If not video, change aspect ration of poster to a square
|
||||
boolean isVideo = (item.type.equals(ListType.ItemsAll.TYPE_MOVIE)) ||
|
||||
(item.type.equals(ListType.ItemsAll.TYPE_EPISODE));
|
||||
if (!isVideo) {
|
||||
ViewGroup.LayoutParams layoutParams = viewHolder.art.getLayoutParams();
|
||||
layoutParams.width = layoutParams.height;
|
||||
viewHolder.art.setLayoutParams(layoutParams);
|
||||
artWidth = artHeight;
|
||||
}
|
||||
UIUtils.loadImageWithCharacterAvatar(getActivity(), hostManager,
|
||||
artUrl, title,
|
||||
viewHolder.art, artWidth, artHeigth);
|
||||
viewHolder.art, artWidth, artHeight);
|
||||
|
||||
// For the popupmenu
|
||||
viewHolder.contextMenu.setTag(position);
|
||||
|
|
|
@ -19,6 +19,7 @@ import android.os.Bundle;
|
|||
import android.os.Handler;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.Animation;
|
||||
|
@ -102,7 +103,7 @@ public class RemoteFragment extends Fragment
|
|||
@InjectView(R.id.down) ImageView downButton;
|
||||
@InjectView(R.id.back) ImageView backButton;
|
||||
@InjectView(R.id.info) ImageView infoButton;
|
||||
@InjectView(R.id.codec_info) ImageView codecInfoButton;
|
||||
@InjectView(R.id.context) ImageView contextButton;
|
||||
@InjectView(R.id.osd) ImageView osdButton;
|
||||
|
||||
@InjectView(R.id.art) ImageView thumbnail;
|
||||
|
@ -115,6 +116,8 @@ public class RemoteFragment extends Fragment
|
|||
|
||||
private Animation buttonInAnim;
|
||||
private Animation buttonOutAnim;
|
||||
// Touch listener that provides touch feedbacl
|
||||
private View.OnTouchListener feedbackTouckListener;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -124,6 +127,23 @@ public class RemoteFragment extends Fragment
|
|||
|
||||
buttonInAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.button_in);
|
||||
buttonOutAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.button_out);
|
||||
|
||||
feedbackTouckListener = new View.OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
buttonInAnim.setFillAfter(true);
|
||||
v.startAnimation(buttonInAnim);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
v.startAnimation(buttonOutAnim);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -137,12 +157,13 @@ public class RemoteFragment extends Fragment
|
|||
setupRepeatButton(upButton, new Input.Up());
|
||||
setupRepeatButton(downButton, new Input.Down());
|
||||
|
||||
setupNoRepeatButton(selectButton, new Input.Select());
|
||||
|
||||
setupNoRepeatButton(backButton, new Input.Back());
|
||||
setupNoRepeatButton(infoButton, new Input.ExecuteAction(Input.ExecuteAction.INFO));
|
||||
setupNoRepeatButton(osdButton, new Input.ExecuteAction(Input.ExecuteAction.OSD));
|
||||
setupNoRepeatButton(codecInfoButton, new Input.ExecuteAction(Input.ExecuteAction.CODECINFO));
|
||||
setupNoRepeatButton(selectButton, new Input.Select(), null);
|
||||
setupNoRepeatButton(backButton, new Input.Back(), null);
|
||||
setupNoRepeatButton(infoButton,
|
||||
new Input.ExecuteAction(Input.ExecuteAction.INFO),
|
||||
new Input.ExecuteAction(Input.ExecuteAction.CODECINFO));
|
||||
setupNoRepeatButton(osdButton, new Input.ExecuteAction(Input.ExecuteAction.OSD), null);
|
||||
setupNoRepeatButton(contextButton, new Input.ExecuteAction(Input.ExecuteAction.CONTEXTMENU), null);
|
||||
|
||||
// // Padd main content view to account for bottom system bar
|
||||
// UIUtils.setPaddingForSystemBars(getActivity(), root, false, false, true);
|
||||
|
@ -192,14 +213,28 @@ public class RemoteFragment extends Fragment
|
|||
}, buttonInAnim, buttonOutAnim));
|
||||
}
|
||||
|
||||
private void setupNoRepeatButton(View button, final ApiMethod<String> action) {
|
||||
button.setOnTouchListener(new RepeatListener(-1, -1,
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
action.execute(hostManager.getConnection(), defaultActionCallback, callbackHandler);
|
||||
}
|
||||
}, buttonInAnim, buttonOutAnim));
|
||||
private void setupNoRepeatButton(View button,
|
||||
final ApiMethod<String> clickAction,
|
||||
final ApiMethod<String> longClickAction) {
|
||||
// Set animation
|
||||
button.setOnTouchListener(feedbackTouckListener);
|
||||
if (clickAction != null) {
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
clickAction.execute(hostManager.getConnection(), defaultActionCallback, callbackHandler);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (longClickAction != null) {
|
||||
button.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
longClickAction.execute(hostManager.getConnection(), defaultActionCallback, callbackHandler);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -345,41 +380,56 @@ public class RemoteFragment extends Fragment
|
|||
private void setNowPlayingInfo(ListType.ItemsAll nowPlaying,
|
||||
PlayerType.PropertyValue properties) {
|
||||
String title, underTitle, thumbnailUrl;
|
||||
if (nowPlaying.type.equals(ListType.ItemsAll.TYPE_MOVIE)) {
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
switch (nowPlaying.type) {
|
||||
case ListType.ItemsAll.TYPE_MOVIE:
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
|
||||
title = nowPlaying.title;
|
||||
underTitle = nowPlaying.tagline;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
} else if (nowPlaying.type.equals(ListType.ItemsAll.TYPE_EPISODE)) {
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
title = nowPlaying.title;
|
||||
underTitle = nowPlaying.tagline;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_EPISODE:
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
|
||||
title = nowPlaying.title;
|
||||
String season = String.format(getString(R.string.season_episode_abbrev), nowPlaying.season, nowPlaying.episode);
|
||||
underTitle = String.format("%s | %s", nowPlaying.showtitle, season);
|
||||
thumbnailUrl = nowPlaying.art.poster;
|
||||
} else if (nowPlaying.type.equals(ListType.ItemsAll.TYPE_SONG)) {
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
title = nowPlaying.title;
|
||||
String season = String.format(getString(R.string.season_episode_abbrev), nowPlaying.season, nowPlaying.episode);
|
||||
underTitle = String.format("%s | %s", nowPlaying.showtitle, season);
|
||||
thumbnailUrl = nowPlaying.art.poster;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_SONG:
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
|
||||
title = nowPlaying.title;
|
||||
underTitle = nowPlaying.displayartist + " | " + nowPlaying.album;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
} else if (nowPlaying.type.equals(ListType.ItemsAll.TYPE_MUSIC_VIDEO)) {
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
title = nowPlaying.title;
|
||||
underTitle = nowPlaying.displayartist + " | " + nowPlaying.album;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
break;
|
||||
case ListType.ItemsAll.TYPE_MUSIC_VIDEO:
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
|
||||
title = nowPlaying.title;
|
||||
underTitle = Utils.listStringConcat(nowPlaying.artist, ", ") + " | " + nowPlaying.album;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
} else {
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
title = nowPlaying.label;
|
||||
underTitle = "";
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
title = nowPlaying.title;
|
||||
underTitle = Utils.listStringConcat(nowPlaying.artist, ", ") + " | " + nowPlaying.album;
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
break;
|
||||
default:
|
||||
switchToPanel(R.id.media_panel, true);
|
||||
title = nowPlaying.label;
|
||||
underTitle = "";
|
||||
thumbnailUrl = nowPlaying.thumbnail;
|
||||
break;
|
||||
}
|
||||
|
||||
nowPlayingTitle.setText(title);
|
||||
nowPlayingDetails.setText(underTitle);
|
||||
|
||||
// // If not video, change aspect ration of poster to a square
|
||||
// boolean isVideo = (nowPlaying.type.equals(ListType.ItemsAll.TYPE_MOVIE)) ||
|
||||
// (nowPlaying.type.equals(ListType.ItemsAll.TYPE_EPISODE));
|
||||
// if (!isVideo) {
|
||||
// ViewGroup.LayoutParams layoutParams = thumbnail.getLayoutParams();
|
||||
// layoutParams.width = layoutParams.height;
|
||||
// thumbnail.setLayoutParams(layoutParams);
|
||||
// }
|
||||
|
||||
UIUtils.loadImageWithCharacterAvatar(getActivity(), hostManager,
|
||||
thumbnailUrl, title,
|
||||
thumbnail, thumbnail.getWidth(), thumbnail.getHeight());
|
||||
|
|
|
@ -181,12 +181,24 @@ public class HostFragmentManualConfiguration extends Fragment {
|
|||
private void testConnection() {
|
||||
String xbmcName = xbmcNameEditText.getText().toString();
|
||||
String xbmcAddress = xbmcIpAddressEditText.getText().toString();
|
||||
|
||||
int xbmcHttpPort;
|
||||
String aux = xbmcHttpPortEditText.getText().toString();
|
||||
int xbmcHttpPort = TextUtils.isEmpty(aux) ? HostInfo.DEFAULT_HTTP_PORT : Integer.valueOf(aux);
|
||||
try {
|
||||
xbmcHttpPort = TextUtils.isEmpty(aux) ? HostInfo.DEFAULT_HTTP_PORT : Integer.valueOf(aux);
|
||||
} catch (NumberFormatException exc) {
|
||||
xbmcHttpPort = -1;
|
||||
}
|
||||
|
||||
String xbmcUsername = xbmcUsernameEditText.getText().toString();
|
||||
String xbmcPassword = xbmcPasswordEditText.getText().toString();
|
||||
aux = xbmcTcpPortEditText.getText().toString();
|
||||
int xbmcTcpPort = TextUtils.isEmpty(aux) ? HostInfo.DEFAULT_TCP_PORT : Integer.valueOf(aux);
|
||||
int xbmcTcpPort;
|
||||
try {
|
||||
xbmcTcpPort = TextUtils.isEmpty(aux) ? HostInfo.DEFAULT_TCP_PORT : Integer.valueOf(aux);
|
||||
} catch (NumberFormatException exc) {
|
||||
xbmcTcpPort = -1;
|
||||
}
|
||||
|
||||
String macAddress = xbmcMacAddressEditText.getText().toString();
|
||||
aux = xbmcWolPortEditText.getText().toString();
|
||||
|
|
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
|
@ -122,19 +122,19 @@
|
|||
android:gravity="center_horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/codec_info"
|
||||
android:id="@+id/context"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:src="?attr/iconCodec"
|
||||
android:src="?attr/iconContext"
|
||||
android:contentDescription="@string/codec_info"/>
|
||||
<ImageView
|
||||
android:id="@+id/up"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_toRightOf="@id/codec_info"
|
||||
android:layout_alignTop="@id/codec_info"
|
||||
android:layout_toRightOf="@id/context"
|
||||
android:layout_alignTop="@id/context"
|
||||
android:src="?attr/iconUp"
|
||||
android:contentDescription="@string/up"/>
|
||||
<ImageView
|
||||
|
@ -142,7 +142,7 @@
|
|||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_toRightOf="@id/up"
|
||||
android:layout_alignTop="@id/codec_info"
|
||||
android:layout_alignTop="@id/context"
|
||||
android:src="?attr/iconInfo"
|
||||
android:contentDescription="@string/info"/>
|
||||
|
||||
|
@ -150,7 +150,7 @@
|
|||
android:id="@+id/left"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_below="@id/codec_info"
|
||||
android:layout_below="@id/context"
|
||||
android:src="?attr/iconLeft"
|
||||
android:contentDescription="@string/left"/>
|
||||
<ImageView
|
||||
|
|
|
@ -153,19 +153,19 @@
|
|||
android:gravity="center_horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/codec_info"
|
||||
android:id="@+id/context"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:src="?attr/iconCodec"
|
||||
android:src="?attr/iconContext"
|
||||
android:contentDescription="@string/codec_info"/>
|
||||
<ImageView
|
||||
android:id="@+id/up"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_toRightOf="@id/codec_info"
|
||||
android:layout_alignTop="@id/codec_info"
|
||||
android:layout_toRightOf="@id/context"
|
||||
android:layout_alignTop="@id/context"
|
||||
android:src="?attr/iconUp"
|
||||
android:contentDescription="@string/up"/>
|
||||
<ImageView
|
||||
|
@ -173,7 +173,7 @@
|
|||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_toRightOf="@id/up"
|
||||
android:layout_alignTop="@id/codec_info"
|
||||
android:layout_alignTop="@id/context"
|
||||
android:src="?attr/iconInfo"
|
||||
android:contentDescription="@string/info"/>
|
||||
|
||||
|
@ -181,7 +181,7 @@
|
|||
android:id="@+id/left"
|
||||
android:layout_width="@dimen/remote_icon_size"
|
||||
android:layout_height="@dimen/remote_icon_size"
|
||||
android:layout_below="@id/codec_info"
|
||||
android:layout_below="@id/context"
|
||||
android:src="?attr/iconLeft"
|
||||
android:contentDescription="@string/left"/>
|
||||
<ImageView
|
||||
|
|
|
@ -142,8 +142,8 @@
|
|||
<string name="back">Zurück</string>
|
||||
|
||||
<string name="previous">Vorheriger</string>
|
||||
<string name="next">Nächster</string>
|
||||
<string name="finish">Beendet</string>
|
||||
<string name="next">Weiter</string>
|
||||
<string name="finish">Fertig</string>
|
||||
<string name="test_connection">Verbindungstest</string>
|
||||
<string name="search_again">Erneut Suchen</string>
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<attr name="iconInfo" format="reference" />
|
||||
<attr name="iconBack" format="reference" />
|
||||
<attr name="iconMenu" format="reference" />
|
||||
<attr name="iconCodec" format="reference" />
|
||||
<attr name="iconContext" format="reference" />
|
||||
|
||||
<attr name="iconLeft" format="reference" />
|
||||
<attr name="iconRight" format="reference" />
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
<dimen name="navigation_drawer_item_height">48dp</dimen>
|
||||
<dimen name="navigation_drawer_item_hosts_height">168dp</dimen>
|
||||
|
||||
<dimen name="remote_poster_width">88dp</dimen>
|
||||
<dimen name="remote_poster_width">98dp</dimen>
|
||||
<dimen name="remote_poster_height">140dp</dimen>
|
||||
|
||||
<dimen name="now_playing_poster_width">112dp</dimen>
|
||||
|
@ -120,10 +120,10 @@
|
|||
<dimen name="notification_expanded_height">128dp</dimen>
|
||||
<dimen name="notification_art_default_height">64dp</dimen>
|
||||
<dimen name="notification_art_default_width">64dp</dimen>
|
||||
<dimen name="notification_art_slim_width">42dp</dimen>
|
||||
<dimen name="notification_art_slim_width">44dp</dimen>
|
||||
<dimen name="notification_expanded_art_default_height">128dp</dimen>
|
||||
<dimen name="notification_expanded_art_default_width">128dp</dimen>
|
||||
<dimen name="notification_expanded_art_slim_width">84dp</dimen>
|
||||
<dimen name="notification_expanded_art_slim_width">88dp</dimen>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -138,6 +138,7 @@
|
|||
<string name="select">Select</string>
|
||||
<string name="info">Info</string>
|
||||
<string name="codec_info">Codec</string>
|
||||
<string name="context">Context</string>
|
||||
<string name="osd">Menu</string>
|
||||
<string name="back">Back</string>
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
<item name="iconInfo">@drawable/remote_info_white</item>
|
||||
<item name="iconBack">@drawable/remote_back_white</item>
|
||||
<item name="iconMenu">@drawable/remote_menu_white</item>
|
||||
<item name="iconCodec">@drawable/remote_codec_white</item>
|
||||
<item name="iconContext">@drawable/remote_context_white</item>
|
||||
|
||||
<item name="iconLeft">@drawable/remote_left_white</item>
|
||||
<item name="iconRight">@drawable/remote_right_white</item>
|
||||
|
@ -173,7 +173,7 @@
|
|||
<item name="iconInfo">@drawable/remote_info_black</item>
|
||||
<item name="iconBack">@drawable/remote_back_black</item>
|
||||
<item name="iconMenu">@drawable/remote_menu_black</item>
|
||||
<item name="iconCodec">@drawable/remote_codec_black</item>
|
||||
<item name="iconContext">@drawable/remote_context_black</item>
|
||||
|
||||
<item name="iconLeft">@drawable/remote_left_black</item>
|
||||
<item name="iconRight">@drawable/remote_right_black</item>
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="288"
|
||||
height="288"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="remote_codec.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 144 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="288 : 144 : 1"
|
||||
inkscape:persp3d-origin="144 : 96 : 1"
|
||||
id="perspective3804" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="12.564171"
|
||||
inkscape:cy="130.65863"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1150"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2985"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="6px"
|
||||
spacingy="6px" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-764.36218)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:39.99984741px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="-595.51642"
|
||||
y="783.80695"
|
||||
id="text2985"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="matrix(0.70710679,-0.70710677,0.70710679,0.70710677,0,0)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2987"
|
||||
x="-595.51642"
|
||||
y="783.80695"
|
||||
style="font-size:39.99984741px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;font-family:Roboto Condensed;-inkscape-font-specification:'Roboto Condensed, Bold'">CNTXT</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |