diff options
-rw-r--r-- | res/layout/select_album_header.xml | 13 | ||||
-rw-r--r-- | res/menu/select_album_context.xml | 6 | ||||
-rw-r--r-- | res/menu/select_share_context.xml | 4 | ||||
-rw-r--r-- | res/menu/select_song_context.xml | 6 | ||||
-rw-r--r-- | res/values/attrs.xml | 1 | ||||
-rw-r--r-- | res/values/strings.xml | 6 | ||||
-rw-r--r-- | res/values/themes.xml | 3 | ||||
-rw-r--r-- | res/xml/settings.xml | 12 | ||||
-rw-r--r-- | src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java | 16 | ||||
-rw-r--r-- | src/github/daneren2005/dsub/fragments/SelectShareFragment.java | 3 | ||||
-rw-r--r-- | src/github/daneren2005/dsub/fragments/SubsonicFragment.java | 54 | ||||
-rw-r--r-- | src/github/daneren2005/dsub/service/parser/ShareParser.java | 14 | ||||
-rw-r--r-- | src/github/daneren2005/dsub/util/Constants.java | 1 |
13 files changed, 130 insertions, 9 deletions
diff --git a/res/layout/select_album_header.xml b/res/layout/select_album_header.xml index 33cbf93e..14bdf365 100644 --- a/res/layout/select_album_header.xml +++ b/res/layout/select_album_header.xml @@ -60,7 +60,18 @@ android:singleLine="true" android:ellipsize="none"/> - </LinearLayout> + </LinearLayout> + + <ImageView + android:id="@+id/select_album_share" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:scaleType="fitCenter" + android:src="?attr/share" + android:padding="10dip" + android:layout_alignParentBottom="true" + android:layout_alignParentRight="true" + android:background="@drawable/menubar_button"/> </RelativeLayout> diff --git a/res/menu/select_album_context.xml b/res/menu/select_album_context.xml index 6da0150b..b1e0e42c 100644 --- a/res/menu/select_album_context.xml +++ b/res/menu/select_album_context.xml @@ -52,4 +52,10 @@ android:id="@+id/album_menu_star" android:title="@string/common.star"/> </group> + + <group android:id="@+id/hide_share"> + <item + android:id="@+id/album_menu_share" + android:title="@string/menu.share"/> + </group> </menu> diff --git a/res/menu/select_share_context.xml b/res/menu/select_share_context.xml index 3ef2826f..3db445f6 100644 --- a/res/menu/select_share_context.xml +++ b/res/menu/select_share_context.xml @@ -7,6 +7,10 @@ android:title="@string/common.info"/>
<item
+ android:id="@+id/share_menu_share"
+ android:title="@string/menu.share"/>
+
+ <item
android:id="@+id/share_update_info"
android:title="@string/playlist.update_info"
/>
diff --git a/res/menu/select_song_context.xml b/res/menu/select_song_context.xml index 686ef308..8a37e0f8 100644 --- a/res/menu/select_song_context.xml +++ b/res/menu/select_song_context.xml @@ -51,4 +51,10 @@ android:id="@+id/song_menu_star" android:title="@string/common.star"/> </group> + + <group android:id="@+id/hide_share"> + <item + android:id="@+id/song_menu_share" + android:title="@string/menu.share"/> + </group> </menu> diff --git a/res/values/attrs.xml b/res/values/attrs.xml index ae0939f1..b557035c 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -19,5 +19,6 @@ <attr name="select_server" format="reference"/> <attr name="downloading" format="reference"/> <attr name="bookmark" format="reference"/> + <attr name="share" format="reference"/> <attr name="drawerItemsIcons" format="reference"/> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 2c0d2ff3..faa2922a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -82,6 +82,7 @@ <string name="menu.stop_sync">Stop syncing</string>
<string name="menu.show_all">Show all media</string>
<string name="menu.show_artist">Show Artist</string>
+ <string name="menu.share">Share</string>
<string name="playlist.label">Playlists</string>
<string name="playlist.update_info">Update Information</string>
@@ -377,12 +378,10 @@ <string name="settings.sync_notification">Show Sync Notification</string>
<string name="settings.sync_notification_summary">Show a notification after new media has been synced</string>
<string name="settings.menu_options.title">Optional Menu Options</string>
- <string name="settings.menu_options.play_next">Play Next</string>
<string name="settings.menu_options.play_next_summary">Show Play next in menus</string>
- <string name="settings.menu_options.play_last">Play Last</string>
<string name="settings.menu_options.play_last_summary">Show Play last in menus</string>
- <string name="settings.menu_options.star">Star</string>
<string name="settings.menu_options.star_summary">Show Star in menus</string>
+ <string name="settings.menu_options.shared_summary">Show Share in menus</string>
<string name="shuffle.title">Shuffle By</string>
<string name="shuffle.startYear">Start Year:</string>
@@ -407,6 +406,7 @@ <string name="share.expiration">Expires:</string>
<string name="share.updated_info">Updated share information for %s</string>
<string name="share.updated_info_error">Failed to update share information for %s</string>
+ <string name="share.via">Share via</string>
<string name="music_service.retry">A network error occurred. Retrying %1$d of %2$d.</string>
diff --git a/res/values/themes.xml b/res/values/themes.xml index ef7cd90e..9aa83d2a 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -22,6 +22,7 @@ <item name="select_server">@drawable/main_select_server_light</item> <item name="downloading">@drawable/downloading_light</item> <item name="bookmark">@drawable/ic_menu_bookmark_light</item> + <item name="share">@drawable/ic_menu_share_light</item> <item name="drawerItemsIcons">@array/drawerItemIconsLight</item> <item name="android:textViewStyle">@style/DSub.TextViewStyle</item> <item name="android:buttonStyle">@style/DSub.ButtonStyle</item> @@ -49,6 +50,7 @@ <item name="select_server">@drawable/main_select_server_dark</item> <item name="downloading">@drawable/downloading_dark</item> <item name="bookmark">@drawable/ic_menu_bookmark_dark</item> + <item name="share">@drawable/ic_menu_share_dark</item> <item name="drawerItemsIcons">@array/drawerItemIconsDark</item> <item name="android:textViewStyle">@style/DSub.TextViewStyle</item> <item name="android:buttonStyle">@style/DSub.ButtonStyle</item> @@ -79,6 +81,7 @@ <item name="select_server">@drawable/main_select_server_dark</item> <item name="downloading">@drawable/downloading_dark</item> <item name="bookmark">@drawable/ic_menu_bookmark_dark</item> + <item name="share">@drawable/ic_menu_share_dark</item> <item name="drawerItemsIcons">@array/drawerItemIconsDark</item> <item name="android:textViewStyle">@style/DSub.TextViewStyle</item> <item name="android:buttonStyle">@style/DSub.ButtonStyle</item> diff --git a/res/xml/settings.xml b/res/xml/settings.xml index 58549367..d9430282 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -61,23 +61,29 @@ android:title="@string/settings.menu_options.title"> <CheckBoxPreference - android:title="@string/settings.menu_options.play_next" + android:title="@string/common.play_next" android:summary="@string/settings.menu_options.play_next_summary" android:key="showPlayNext" android:defaultValue="true"/> <CheckBoxPreference - android:title="@string/settings.menu_options.play_last" + android:title="@string/common.play_last" android:summary="@string/settings.menu_options.play_last_summary" android:key="showPlayLast" android:defaultValue="true"/> <CheckBoxPreference - android:title="@string/settings.menu_options.star" + android:title="@string/common.star" android:summary="@string/settings.menu_options.star_summary" android:key="showStar" android:defaultValue="true"/> + <CheckBoxPreference + android:title="@string/menu.share" + android:summary="@string/settings.menu_options.shared_summary" + android:key="showShared" + android:defaultValue="true"/> + </PreferenceCategory> <PreferenceCategory diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index f16c197d..23857f91 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -940,6 +940,8 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter titleView.setPadding(0, 6, 4, 8);
} else if(name != null) {
titleView.setText(name);
+ } else if(share != null) {
+ titleView.setVisibility(View.GONE);
}
int songCount = 0;
@@ -983,6 +985,20 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter }
if(add) {
+ ImageView shareButton = (ImageView) header.findViewById(R.id.select_album_share);
+ if(share != null || podcastId != null || !Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_SHARED, true)) {
+ shareButton.setVisibility(View.GONE);
+ } else {
+ shareButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createShare(SelectDirectoryFragment.this.entries);
+ }
+ });
+ }
+ }
+
+ if(add) {
return header;
} else {
return null;
diff --git a/src/github/daneren2005/dsub/fragments/SelectShareFragment.java b/src/github/daneren2005/dsub/fragments/SelectShareFragment.java index 556fc8da..92d2d4b6 100644 --- a/src/github/daneren2005/dsub/fragments/SelectShareFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectShareFragment.java @@ -55,6 +55,9 @@ public class SelectShareFragment extends SelectListFragment<Share> { Share share = (Share) listView.getItemAtPosition(info.position);
switch (menuItem.getItemId()) {
+ case R.id.share_menu_share:
+ shareExternal(share);
+ break;
case R.id.share_menu_info:
displayShareInfo(share);
break;
diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 626d4259..e57f032f 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -214,6 +214,9 @@ public class SubsonicFragment extends Fragment { if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_STAR, true)) {
menu.setGroupVisible(R.id.hide_star, false);
}
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_SHARED, true)) {
+ menu.setGroupVisible(R.id.hide_share, false);
+ }
}
protected void recreateContextMenu(ContextMenu menu) {
@@ -234,7 +237,7 @@ public class SubsonicFragment extends Fragment { public boolean onContextItemSelected(MenuItem menuItem, Object selectedItem) {
Artist artist = selectedItem instanceof Artist ? (Artist) selectedItem : null;
MusicDirectory.Entry entry = selectedItem instanceof MusicDirectory.Entry ? (MusicDirectory.Entry) selectedItem : null;
- List<MusicDirectory.Entry> songs = new ArrayList<MusicDirectory.Entry>(10);
+ List<MusicDirectory.Entry> songs = new ArrayList<MusicDirectory.Entry>(1);
songs.add(entry);
switch (menuItem.getItemId()) {
@@ -292,6 +295,9 @@ public class SubsonicFragment extends Fragment { case R.id.album_menu_show_artist:
showArtist((MusicDirectory.Entry) selectedItem);
break;
+ case R.id.album_menu_share:
+ createShare(songs);
+ break;
case R.id.song_menu_play_now:
getDownloadService().clear();
getDownloadService().download(songs, false, true, true, false);
@@ -327,6 +333,9 @@ public class SubsonicFragment extends Fragment { case R.id.song_menu_stream_external:
streamExternalPlayer(entry);
break;
+ case R.id.song_menu_share:
+ createShare(songs);
+ break;
default:
return false;
}
@@ -1076,6 +1085,49 @@ public class SubsonicFragment extends Fragment { replaceFragment(fragment, getRootId(), true);
}
+
+ public void createShare(final List<MusicDirectory.Entry> entries) {
+ new LoadingTask<List<Share>>(context, true) {
+ @Override
+ protected List<Share> doInBackground() throws Throwable {
+ List<String> ids = new ArrayList<String>(entries.size());
+ for(MusicDirectory.Entry entry: entries) {
+ ids.add(entry.getId());
+ }
+
+ MusicService musicService = MusicServiceFactory.getMusicService(context);
+ return musicService.createShare(ids, null, 0L, context, this);
+ }
+
+ @Override
+ protected void done(final List<Share> shares) {
+ if(shares.size() > 0) {
+ Share share = shares.get(0);
+ shareExternal(share);
+ } else {
+ Util.toast(context, context.getResources().getString(R.string.playlist_error), false);
+ }
+ }
+
+ @Override
+ protected void error(Throwable error) {
+ String msg;
+ if (error instanceof OfflineException || error instanceof ServerTooOldException) {
+ msg = getErrorMessage(error);
+ } else {
+ msg = context.getResources().getString(R.string.playlist_error) + " " + getErrorMessage(error);
+ }
+
+ Util.toast(context, msg, false);
+ }
+ }.execute();
+ }
+ public void shareExternal(Share share) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, share.getUrl());
+ context.startActivity(Intent.createChooser(intent, context.getResources().getString(R.string.share_via)));
+ }
public GestureDetector getGestureDetector() {
return gestureScanner;
diff --git a/src/github/daneren2005/dsub/service/parser/ShareParser.java b/src/github/daneren2005/dsub/service/parser/ShareParser.java index 4688faf8..27a53d66 100644 --- a/src/github/daneren2005/dsub/service/parser/ShareParser.java +++ b/src/github/daneren2005/dsub/service/parser/ShareParser.java @@ -19,11 +19,15 @@ package github.daneren2005.dsub.service.parser;
import android.content.Context;
+import android.content.SharedPreferences;
import android.util.Log;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.Share;
+import github.daneren2005.dsub.util.Constants;
import github.daneren2005.dsub.util.ProgressListener;
+import github.daneren2005.dsub.util.Util;
+
import org.xmlpull.v1.XmlPullParser;
import java.io.Reader;
import java.util.ArrayList;
@@ -47,6 +51,14 @@ public class ShareParser extends MusicDirectoryEntryParser { List<Share> dir = new ArrayList<Share>();
Share share = null;
int eventType;
+
+ SharedPreferences prefs = Util.getPreferences(context);
+ int instance = prefs.getInt(Constants.PREFERENCES_KEY_SERVER_INSTANCE, 1);
+ String serverUrl = prefs.getString(Constants.PREFERENCES_KEY_SERVER_URL + instance, null);
+ if(serverUrl.charAt(serverUrl.length() - 1) != '/') {
+ serverUrl += '/';
+ }
+ serverUrl += "share/";
do {
eventType = nextParseEvent();
@@ -57,7 +69,7 @@ public class ShareParser extends MusicDirectoryEntryParser { if ("share".equals(name)) {
share = new Share();
share.setCreated(get("created"));
- share.setUrl(get("url"));
+ share.setUrl(get("url").replaceFirst(".*/([^/?]+).*", serverUrl + "$1"));
share.setDescription(get("description"));
share.setExpires(get("expires"));
share.setId(get("id"));
diff --git a/src/github/daneren2005/dsub/util/Constants.java b/src/github/daneren2005/dsub/util/Constants.java index c51e1ee1..6eb859a8 100644 --- a/src/github/daneren2005/dsub/util/Constants.java +++ b/src/github/daneren2005/dsub/util/Constants.java @@ -135,6 +135,7 @@ public final class Constants { public static final String PREFERENCES_KEY_MENU_PLAY_NEXT = "showPlayNext"; public static final String PREFERENCES_KEY_MENU_PLAY_LAST = "showPlayLast"; public static final String PREFERENCES_KEY_MENU_STAR = "showStar"; + public static final String PREFERENCES_KEY_MENU_SHARED = "showShared"; public static final String PREFERENCES_KEY_SHARED_ENABLED = "sharedEnabled"; public static final String OFFLINE_SCROBBLE_COUNT = "scrobbleCount"; |