commit
b3ac85d833
|
@ -1,7 +1,4 @@
|
||||||
ext.versions = [
|
ext.versions = [
|
||||||
versionCode : 67,
|
|
||||||
versionName : "2.4.0",
|
|
||||||
|
|
||||||
minSdk : 14,
|
minSdk : 14,
|
||||||
targetSdk : 22,
|
targetSdk : 22,
|
||||||
compileSdk : 27,
|
compileSdk : 27,
|
||||||
|
@ -19,7 +16,7 @@ ext.versions = [
|
||||||
kotlin : "1.2.31",
|
kotlin : "1.2.31",
|
||||||
|
|
||||||
retrofit : "2.4.0",
|
retrofit : "2.4.0",
|
||||||
jackson : "2.9.0",
|
jackson : "2.9.5",
|
||||||
okhttp : "3.10.0",
|
okhttp : "3.10.0",
|
||||||
semver : "1.0.0",
|
semver : "1.0.0",
|
||||||
twitterSerial : "0.1.6",
|
twitterSerial : "0.1.6",
|
||||||
|
|
|
@ -44,6 +44,16 @@ class VersionInterceptorTest : BaseInterceptorTest() {
|
||||||
.protocolVersion `should equal` SubsonicAPIVersions.V1_13_0
|
.protocolVersion `should equal` SubsonicAPIVersions.V1_13_0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Should update version from response with utf-8 bom`() {
|
||||||
|
mockWebServerRule.enqueueResponse("ping_ok_utf8_bom.json")
|
||||||
|
|
||||||
|
client.newCall(createRequest {}).execute()
|
||||||
|
|
||||||
|
(interceptor as VersionInterceptor)
|
||||||
|
.protocolVersion `should equal` SubsonicAPIVersions.V1_16_0
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Should not update version if response json doesn't contain version`() {
|
fun `Should not update version if response json doesn't contain version`() {
|
||||||
mockWebServerRule.enqueueResponse("non_subsonic_response.json")
|
mockWebServerRule.enqueueResponse("non_subsonic_response.json")
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{"subsonic-response":{
|
||||||
|
"status": "ok",
|
||||||
|
"version": "1.16.0"
|
||||||
|
}}
|
|
@ -48,8 +48,7 @@ internal class VersionInterceptor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryUpdateProtocolVersion(response: Response) {
|
private fun tryUpdateProtocolVersion(response: Response) {
|
||||||
val content = response.peekBody(DEFAULT_PEEK_BYTE_COUNT)
|
val content = response.peekBody(DEFAULT_PEEK_BYTE_COUNT).byteStream()
|
||||||
.byteStream().bufferedReader().readText()
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val jsonReader = jsonFactory.createParser(content)
|
val jsonReader = jsonFactory.createParser(content)
|
||||||
|
|
|
@ -8,8 +8,8 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.moire.ultrasonic"
|
applicationId "org.moire.ultrasonic"
|
||||||
versionCode versions.versionCode
|
versionCode 68
|
||||||
versionName versions.versionName
|
versionName "2.5.0"
|
||||||
|
|
||||||
minSdkVersion versions.minSdk
|
minSdkVersion versions.minSdk
|
||||||
targetSdkVersion versions.targetSdk
|
targetSdkVersion versions.targetSdk
|
||||||
|
|
|
@ -193,20 +193,20 @@ public class ServerSettingsFragment extends PreferenceFragment
|
||||||
|
|
||||||
private void updatePassword() {
|
private void updatePassword() {
|
||||||
serverPasswordPref.setText(sharedPreferences
|
serverPasswordPref.setText(sharedPreferences
|
||||||
.getString(Constants.PREFERENCES_KEY_PASSWORD + serverId, "***"));
|
.getString(Constants.PREFERENCES_KEY_PASSWORD + serverId,
|
||||||
serverPasswordPref.setSummary("***");
|
""));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUsername() {
|
private void updateUsername() {
|
||||||
serverUsernamePref.setText(sharedPreferences
|
serverUsernamePref.setText(sharedPreferences
|
||||||
.getString(Constants.PREFERENCES_KEY_USERNAME + serverId,
|
.getString(Constants.PREFERENCES_KEY_USERNAME + serverId,
|
||||||
getString(R.string.settings_server_username)));
|
""));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUrl() {
|
private void updateUrl() {
|
||||||
final String serverUrl = sharedPreferences
|
final String serverUrl = sharedPreferences
|
||||||
.getString(Constants.PREFERENCES_KEY_SERVER_URL + serverId,
|
.getString(Constants.PREFERENCES_KEY_SERVER_URL + serverId,
|
||||||
getString(R.string.settings_server_address_unset));
|
"http://");
|
||||||
serverUrlPref.setText(serverUrl);
|
serverUrlPref.setText(serverUrl);
|
||||||
serverUrlPref.setSummary(serverUrl);
|
serverUrlPref.setSummary(serverUrl);
|
||||||
}
|
}
|
||||||
|
@ -214,7 +214,7 @@ public class ServerSettingsFragment extends PreferenceFragment
|
||||||
private void updateName() {
|
private void updateName() {
|
||||||
final String serverName = sharedPreferences
|
final String serverName = sharedPreferences
|
||||||
.getString(Constants.PREFERENCES_KEY_SERVER_NAME + serverId,
|
.getString(Constants.PREFERENCES_KEY_SERVER_NAME + serverId,
|
||||||
getString(R.string.settings_server_unused));
|
"");
|
||||||
serverNamePref.setText(serverName);
|
serverNamePref.setText(serverName);
|
||||||
serverNamePref.setSummary(serverName);
|
serverNamePref.setSummary(serverName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,7 @@ package org.moire.ultrasonic.util;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.ComponentName;
|
import android.content.*;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
@ -49,33 +45,19 @@ import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.moire.ultrasonic.R;
|
import org.moire.ultrasonic.R;
|
||||||
import org.moire.ultrasonic.activity.DownloadActivity;
|
import org.moire.ultrasonic.activity.DownloadActivity;
|
||||||
import org.moire.ultrasonic.activity.MainActivity;
|
import org.moire.ultrasonic.activity.MainActivity;
|
||||||
import org.moire.ultrasonic.activity.SettingsActivity;
|
import org.moire.ultrasonic.activity.SettingsActivity;
|
||||||
import org.moire.ultrasonic.domain.Bookmark;
|
import org.moire.ultrasonic.domain.*;
|
||||||
import org.moire.ultrasonic.domain.MusicDirectory;
|
|
||||||
import org.moire.ultrasonic.domain.MusicDirectory.Entry;
|
import org.moire.ultrasonic.domain.MusicDirectory.Entry;
|
||||||
import org.moire.ultrasonic.domain.PlayerState;
|
|
||||||
import org.moire.ultrasonic.domain.RepeatMode;
|
|
||||||
import org.moire.ultrasonic.domain.SearchResult;
|
|
||||||
import org.moire.ultrasonic.domain.Version;
|
|
||||||
import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver;
|
import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver;
|
||||||
import org.moire.ultrasonic.service.DownloadFile;
|
import org.moire.ultrasonic.service.DownloadFile;
|
||||||
import org.moire.ultrasonic.service.DownloadService;
|
import org.moire.ultrasonic.service.DownloadService;
|
||||||
import org.moire.ultrasonic.service.DownloadServiceImpl;
|
import org.moire.ultrasonic.service.DownloadServiceImpl;
|
||||||
import org.moire.ultrasonic.service.MusicServiceFactory;
|
import org.moire.ultrasonic.service.MusicServiceFactory;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.Closeable;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
|
@ -928,17 +910,18 @@ public class Util extends DownloadActivity
|
||||||
return musicDirectory;
|
return musicDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MusicDirectory getSongsFromBookmarks(Iterable<Bookmark> bookmarks)
|
public static MusicDirectory getSongsFromBookmarks(Iterable<Bookmark> bookmarks) {
|
||||||
{
|
MusicDirectory musicDirectory = new MusicDirectory();
|
||||||
MusicDirectory musicDirectory = new MusicDirectory();
|
|
||||||
|
|
||||||
for (Bookmark bookmark : bookmarks)
|
MusicDirectory.Entry song;
|
||||||
{
|
for (Bookmark bookmark : bookmarks) {
|
||||||
musicDirectory.addChild(bookmark.getEntry());
|
song = bookmark.getEntry();
|
||||||
}
|
song.setBookmarkPosition(bookmark.getPosition());
|
||||||
|
musicDirectory.addChild(song);
|
||||||
|
}
|
||||||
|
|
||||||
return musicDirectory;
|
return musicDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Broadcasts the given song info as the new song being played.</p>
|
* <p>Broadcasts the given song info as the new song being played.</p>
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
android:key="@string/settings.server_password"
|
android:key="@string/settings.server_password"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:inputType="textPassword"
|
android:inputType="textPassword"
|
||||||
android:summary="***"
|
|
||||||
android:title="@string/settings.server_password"
|
android:title="@string/settings.server_password"
|
||||||
/>
|
/>
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
|
|
Loading…
Reference in New Issue