aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2013-12-29 13:28:15 -0800
committerScott Jackson <daneren2005@gmail.com>2013-12-29 13:28:15 -0800
commit409376369ce1e66c1e408c8e6f3f7aa051daed62 (patch)
tree27ccfbed7760a383f045680ab3fe40b9b2879f9c
parent3f27964f47a7aed7afddf4e4d3542ffecb23afc1 (diff)
downloaddsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.tar.gz
dsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.tar.bz2
dsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.zip
#173 Rename url for non-subsonic.org, add ability to create/publish shares
-rw-r--r--res/layout/select_album_header.xml13
-rw-r--r--res/menu/select_album_context.xml6
-rw-r--r--res/menu/select_share_context.xml4
-rw-r--r--res/menu/select_song_context.xml6
-rw-r--r--res/values/attrs.xml1
-rw-r--r--res/values/strings.xml6
-rw-r--r--res/values/themes.xml3
-rw-r--r--res/xml/settings.xml12
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java16
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectShareFragment.java3
-rw-r--r--src/github/daneren2005/dsub/fragments/SubsonicFragment.java54
-rw-r--r--src/github/daneren2005/dsub/service/parser/ShareParser.java14
-rw-r--r--src/github/daneren2005/dsub/util/Constants.java1
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";