Merge pull request #3 from SyncedSynapse/master

Merge changes
This commit is contained in:
jonas2515 2015-02-22 11:09:09 +01:00
commit b81ae620a3
23 changed files with 350 additions and 158 deletions

View File

@ -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

View File

@ -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")}\"")
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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());

View File

@ -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();

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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" />

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB