Added settings options for allowed network types
This allows the user to select other network connection types, besides WiFi, for downloading media files.
This commit is contained in:
parent
e9cfd1339f
commit
879f941151
|
@ -15,12 +15,24 @@
|
|||
*/
|
||||
package org.xbmc.kore;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import org.xbmc.kore.utils.LogUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Class that contains various constants and the keys for settings stored in shared preferences
|
||||
*/
|
||||
public class Settings {
|
||||
private static final String TAG = LogUtils.makeLogTag(Settings.class);
|
||||
|
||||
/**
|
||||
* The update interval for the records in the DB. If the last update is older than this value
|
||||
* a refresh will be triggered. Applicable to TV Shows and Movies.
|
||||
|
@ -106,4 +118,31 @@ public class Settings {
|
|||
public static String getNavDrawerItemsPrefKey(int hostId) {
|
||||
return Settings.KEY_PREF_NAV_DRAWER_ITEMS + hostId;
|
||||
}
|
||||
|
||||
public static final String KEY_PREF_DOWNLOAD_TYPES = "pref_download_conn_types";
|
||||
|
||||
/**
|
||||
* Determines the bit flags used by {@link DownloadManager.Request} to correspond to the enabled network connections
|
||||
* from the settings screen.
|
||||
* @return {@link DownloadManager.Request} network types bit flags that are enabled or 0 if none are enabled
|
||||
*/
|
||||
public static int allowedDownloadNetworkTypes(Context context) {
|
||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
Set<String> connPrefs = sharedPref.getStringSet(Settings.KEY_PREF_DOWNLOAD_TYPES,
|
||||
new HashSet<>(Arrays.asList(new String[]{"0"})));
|
||||
int result = 0; // default none
|
||||
for(String pref : connPrefs) {
|
||||
switch( Integer.parseInt(pref) ) {
|
||||
case 0:
|
||||
result |= DownloadManager.Request.NETWORK_WIFI;
|
||||
break;
|
||||
case 1:
|
||||
result |= DownloadManager.Request.NETWORK_MOBILE;
|
||||
break;
|
||||
case 2: // currently -1 means all network types in DownloadManager
|
||||
result |= ~0;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import android.view.ViewGroup;
|
|||
import android.widget.Toast;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.host.HostInfo;
|
||||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.ApiException;
|
||||
|
@ -40,6 +41,8 @@ import org.xbmc.kore.service.SyncUtils;
|
|||
import org.xbmc.kore.utils.LogUtils;
|
||||
import org.xbmc.kore.utils.UIUtils;
|
||||
|
||||
import butterknife.OnClick;
|
||||
import butterknife.Optional;
|
||||
import de.greenrobot.event.EventBus;
|
||||
|
||||
abstract public class AbstractDetailsFragment extends Fragment
|
||||
|
@ -89,6 +92,12 @@ abstract public class AbstractDetailsFragment extends Fragment
|
|||
*/
|
||||
abstract protected SwipeRefreshLayout getSwipeRefreshLayout();
|
||||
|
||||
/**
|
||||
* When the view created in {@link #createView(LayoutInflater, ViewGroup)} contains a button
|
||||
* with resource identifier R.id.download this will be called to initiate the download
|
||||
*/
|
||||
abstract protected void onDownload();
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -162,6 +171,16 @@ abstract public class AbstractDetailsFragment extends Fragment
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Optional
|
||||
@OnClick(R.id.download)
|
||||
public void onDownloadClicked(View v) {
|
||||
if (Settings.allowedDownloadNetworkTypes(getActivity()) != 0) {
|
||||
onDownload();
|
||||
} else {
|
||||
Toast.makeText(getActivity(), R.string.no_connection_type_selected, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
protected void startSync(boolean silentRefresh) {
|
||||
this.silentRefresh = silentRefresh;
|
||||
LogUtils.LOGD(TAG, "Starting syc. Silent? " + silentRefresh);
|
||||
|
|
|
@ -27,10 +27,10 @@ import android.os.Bundle;
|
|||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.BaseColumns;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -55,6 +55,7 @@ import org.xbmc.kore.host.HostInfo;
|
|||
import org.xbmc.kore.host.HostManager;
|
||||
import org.xbmc.kore.jsonrpc.ApiCallback;
|
||||
import org.xbmc.kore.jsonrpc.ApiMethod;
|
||||
import org.xbmc.kore.jsonrpc.event.MediaSyncEvent;
|
||||
import org.xbmc.kore.jsonrpc.method.Player;
|
||||
import org.xbmc.kore.jsonrpc.method.Playlist;
|
||||
import org.xbmc.kore.jsonrpc.type.PlaylistType;
|
||||
|
@ -75,7 +76,7 @@ import butterknife.OnClick;
|
|||
/**
|
||||
* Presents movie details
|
||||
*/
|
||||
public class AlbumDetailsFragment extends Fragment
|
||||
public class AlbumDetailsFragment extends AbstractDetailsFragment
|
||||
implements LoaderManager.LoaderCallbacks<Cursor> {
|
||||
private static final String TAG = LogUtils.makeLogTag(AlbumDetailsFragment.class);
|
||||
|
||||
|
@ -155,14 +156,9 @@ public class AlbumDetailsFragment extends Fragment
|
|||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
@TargetApi(21)
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
@Override
|
||||
protected View createView(LayoutInflater inflater, ViewGroup container) {
|
||||
albumId = getArguments().getInt(BUNDLE_KEY_ALBUMID, -1);
|
||||
|
||||
if ((container == null) || (albumId == -1)) {
|
||||
|
@ -209,6 +205,31 @@ public class AlbumDetailsFragment extends Fragment
|
|||
return root;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getSyncType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getSyncID() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSyncItemID() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SwipeRefreshLayout getSwipeRefreshLayout() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated (Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
@ -315,8 +336,8 @@ public class AlbumDetailsFragment extends Fragment
|
|||
addToPlaylist(TYPE_ALBUM, albumId);
|
||||
}
|
||||
|
||||
@OnClick(R.id.download)
|
||||
public void onDownloadClicked(View v) {
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
if ((albumTitle == null) || (albumDisplayArtist == null) ||
|
||||
(songInfoList == null) || (songInfoList.size() == 0)) {
|
||||
// Nothing to download
|
||||
|
@ -374,6 +395,11 @@ public class AlbumDetailsFragment extends Fragment
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSyncProcessEnded(MediaSyncEvent event) {
|
||||
|
||||
}
|
||||
|
||||
private boolean isDescriptionExpanded = false;
|
||||
/**
|
||||
* Display the album details
|
||||
|
|
|
@ -425,8 +425,8 @@ public class MovieDetailsFragment extends AbstractDetailsFragment
|
|||
setupSeenButton(newPlaycount);
|
||||
}
|
||||
|
||||
@OnClick(R.id.download)
|
||||
public void onDownloadClicked(View v) {
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
if (movieDownloadInfo == null) {
|
||||
// Nothing to download
|
||||
Toast.makeText(getActivity(), R.string.no_files_to_download, Toast.LENGTH_SHORT).show();
|
||||
|
|
|
@ -44,6 +44,7 @@ import android.widget.Toast;
|
|||
|
||||
import com.melnykov.fab.FloatingActionButton;
|
||||
import com.melnykov.fab.ObservableScrollView;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.jsonrpc.ApiCallback;
|
||||
|
@ -358,8 +359,8 @@ public class MusicVideoDetailsFragment extends AbstractDetailsFragment
|
|||
}, callbackHandler);
|
||||
}
|
||||
|
||||
@OnClick(R.id.download)
|
||||
public void onDownloadClicked(View v) {
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
if (musicVideoDownloadInfo == null) {
|
||||
// Nothing to download
|
||||
Toast.makeText(getActivity(), R.string.no_files_to_download, Toast.LENGTH_SHORT).show();
|
||||
|
|
|
@ -42,6 +42,7 @@ import android.widget.Toast;
|
|||
|
||||
import com.melnykov.fab.FloatingActionButton;
|
||||
import com.melnykov.fab.ObservableScrollView;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.jsonrpc.ApiCallback;
|
||||
|
@ -366,8 +367,8 @@ public class TVShowEpisodeDetailsFragment extends AbstractDetailsFragment
|
|||
setupSeenButton(newPlaycount);
|
||||
}
|
||||
|
||||
@OnClick(R.id.download)
|
||||
public void onDownloadClicked(View v) {
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
if (tvshowDownloadInfo == null) {
|
||||
// Nothing to download
|
||||
Toast.makeText(getActivity(), R.string.no_files_to_download, Toast.LENGTH_SHORT).show();
|
||||
|
|
|
@ -133,6 +133,11 @@ public class TVShowEpisodeListFragment extends AbstractDetailsFragment
|
|||
return swipeRefreshLayout;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated (Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
|
|
@ -173,6 +173,11 @@ public class TVShowOverviewFragment extends AbstractDetailsFragment
|
|||
return swipeRefreshLayout;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDownload() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated (Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
|
|
@ -25,6 +25,7 @@ import android.util.Base64;
|
|||
import android.widget.Toast;
|
||||
|
||||
import org.xbmc.kore.R;
|
||||
import org.xbmc.kore.Settings;
|
||||
import org.xbmc.kore.host.HostInfo;
|
||||
import org.xbmc.kore.jsonrpc.ApiCallback;
|
||||
import org.xbmc.kore.jsonrpc.HostConnection;
|
||||
|
@ -375,7 +376,7 @@ public class FileDownloadHelper {
|
|||
request.addRequestHeader("Authorization", "Basic " + token);
|
||||
}
|
||||
request.allowScanningByMediaScanner();
|
||||
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
|
||||
request.setAllowedNetworkTypes(Settings.allowedDownloadNetworkTypes(context));
|
||||
request.setTitle(mediaInfo.getDownloadTitle(context));
|
||||
request.setDescription(mediaInfo.getDownloadDescrition(context));
|
||||
|
||||
|
|
|
@ -51,6 +51,23 @@
|
|||
<item>@string/addons</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Download connection types -->
|
||||
<string-array name="entries_download_media_items">
|
||||
<item>WiFi</item>
|
||||
<item>Mobile</item>
|
||||
<item>Any</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="entry_values_download_media_items">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="default_values_download_media_items">
|
||||
<item>0</item>
|
||||
</string-array>
|
||||
|
||||
<!-- CAUTION: Keep this synced with the entries ids in NavigationDrawerFragment.java -->
|
||||
<string-array translatable="false" name="entry_values_nav_drawer_items">
|
||||
<item>2</item>
|
||||
|
|
|
@ -364,5 +364,6 @@
|
|||
<string name="pvr_epg">Guide</string>
|
||||
<string name="unable_to_move_item">Unable to move item</string>
|
||||
<string name="cannot_move_playing_item">Cannot move currently playing/paused item</string>
|
||||
<string name="no_connection_type_selected">No connection type selected in settings</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -51,6 +51,14 @@
|
|||
android:entryValues="@array/entry_values_nav_drawer_items"
|
||||
android:defaultValue="@array/entry_values_nav_drawer_items"/>
|
||||
|
||||
<MultiSelectListPreference
|
||||
android:key="pref_download_conn_types"
|
||||
android:title="Download network types"
|
||||
android:summary="Allowed network types for media downloads"
|
||||
android:entries="@array/entries_download_media_items"
|
||||
android:entryValues="@array/entry_values_download_media_items"
|
||||
android:defaultValue="@array/default_values_download_media_items"/>
|
||||
|
||||
<Preference
|
||||
android:key="pref_about"
|
||||
android:title="@string/about"/>
|
||||
|
|
Loading…
Reference in New Issue