From 5b6fa200503a10341a96391e68b29c7057778496 Mon Sep 17 00:00:00 2001 From: tzugen Date: Sun, 9 May 2021 10:57:36 +0200 Subject: [PATCH] This was literally the result of removing one(!) dependency on context inside FileUtil 17 Classes with x function which don't need to pass around context anymore.. --- detekt-baseline-debug.xml | 2 +- detekt-baseline-release.xml | 2 +- .../ultrasonic/fragment/SettingsFragment.java | 22 +++---- .../service/CachedMusicService.java | 8 +-- .../ultrasonic/service/MusicService.java | 4 +- .../service/OfflineMusicService.java | 38 +++++------ .../moire/ultrasonic/util/CacheCleaner.java | 14 ++--- .../org/moire/ultrasonic/util/FileUtil.java | 63 ++++++++++--------- .../ultrasonic/util/LegacyImageLoader.java | 2 +- .../moire/ultrasonic/util/PermissionUtil.java | 12 ++-- .../java/org/moire/ultrasonic/util/Util.java | 7 +-- .../ultrasonic/activity/NavigationActivity.kt | 2 +- .../kotlin/org/moire/ultrasonic/app/UApp.kt | 2 +- .../moire/ultrasonic/di/MusicServiceModule.kt | 2 +- .../ultrasonic/fragment/ArtistListModel.kt | 6 +- .../ultrasonic/fragment/SelectAlbumModel.kt | 6 +- .../moire/ultrasonic/log/FileLoggerTree.kt | 27 ++++---- .../moire/ultrasonic/service/DownloadFile.kt | 2 +- .../ultrasonic/service/RESTMusicService.kt | 27 ++++---- .../ultrasonic/subsonic/DownloadHandler.kt | 6 +- .../util/SubsonicUncaughtExceptionHandler.kt | 2 +- 21 files changed, 125 insertions(+), 131 deletions(-) diff --git a/detekt-baseline-debug.xml b/detekt-baseline-debug.xml index 7432ebce..e0d48939 100644 --- a/detekt-baseline-debug.xml +++ b/detekt-baseline-debug.xml @@ -119,7 +119,7 @@ LongMethod:NavigationActivity.kt$NavigationActivity$private fun showNowPlaying() LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getAvatar( context: Context, username: String?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap? LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getCoverArt( context: Context, entry: MusicDirectory.Entry?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap? - LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(IOException::class) private fun savePlaylist( name: String?, context: Context, playlist: MusicDirectory ) + LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(IOException::class) private fun savePlaylist( name: String?, playlist: MusicDirectory ) LongMethod:RestErrorMapper.kt$ fun SubsonicRESTException.getLocalizedErrorMessage(context: Context): String LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?) diff --git a/detekt-baseline-release.xml b/detekt-baseline-release.xml index 7432ebce..e0d48939 100644 --- a/detekt-baseline-release.xml +++ b/detekt-baseline-release.xml @@ -119,7 +119,7 @@ LongMethod:NavigationActivity.kt$NavigationActivity$private fun showNowPlaying() LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getAvatar( context: Context, username: String?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap? LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(Exception::class) override fun getCoverArt( context: Context, entry: MusicDirectory.Entry?, size: Int, saveToFile: Boolean, highQuality: Boolean ): Bitmap? - LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(IOException::class) private fun savePlaylist( name: String?, context: Context, playlist: MusicDirectory ) + LongMethod:RESTMusicService.kt$RESTMusicService$@Throws(IOException::class) private fun savePlaylist( name: String?, playlist: MusicDirectory ) LongMethod:RestErrorMapper.kt$ fun SubsonicRESTException.getLocalizedErrorMessage(context: Context): String LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean LongMethod:SelectAlbumFragment.kt$SelectAlbumFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java index c4ed5d7b..240749ed 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java @@ -224,7 +224,7 @@ public class SettingsFragment extends PreferenceFragmentCompat private void setupCacheLocationPreference() { cacheLocation.setSummary(settings.getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, - FileUtil.getDefaultMusicDirectory(getActivity()).getPath())); + FileUtil.getDefaultMusicDirectory().getPath())); cacheLocation.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override @@ -235,7 +235,7 @@ public class SettingsFragment extends PreferenceFragmentCompat public void onPermissionRequestFinished(boolean hasPermission) { if (hasPermission) { FilePickerDialog filePickerDialog = FilePickerDialog.Companion.createFilePickerDialog(getContext()); - filePickerDialog.setDefaultDirectory(FileUtil.getDefaultMusicDirectory(getActivity()).getPath()); + filePickerDialog.setDefaultDirectory(FileUtil.getDefaultMusicDirectory().getPath()); filePickerDialog.setInitialDirectory(cacheLocation.getSummary().toString()); filePickerDialog.setOnFileSelectedListener(new OnFileSelectedListener() { @Override @@ -448,7 +448,7 @@ public class SettingsFragment extends PreferenceFragmentCompat sharingDefaultDescription.setSummary(sharingDefaultDescription.getText()); sharingDefaultGreeting.setSummary(sharingDefaultGreeting.getText()); cacheLocation.setSummary(settings.getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, - FileUtil.getDefaultMusicDirectory(getActivity()).getPath())); + FileUtil.getDefaultMusicDirectory().getPath())); if (!mediaButtonsEnabled.isChecked()) { lockScreenEnabled.setChecked(false); @@ -462,7 +462,7 @@ public class SettingsFragment extends PreferenceFragmentCompat if (debugLogToFile.isChecked()) { debugLogToFile.setSummary(getString(R.string.settings_debug_log_path, - FileUtil.getUltrasonicDirectory(getActivity()), FileLoggerTree.FILENAME)); + FileUtil.getUltrasonicDirectory(), FileLoggerTree.FILENAME)); } else { debugLogToFile.setSummary(""); } @@ -480,7 +480,7 @@ public class SettingsFragment extends PreferenceFragmentCompat } private void setHideMedia(boolean hide) { - File nomediaDir = new File(FileUtil.getUltrasonicDirectory(getActivity()), ".nomedia"); + File nomediaDir = new File(FileUtil.getUltrasonicDirectory(), ".nomedia"); if (hide && !nomediaDir.exists()) { if (!nomediaDir.mkdir()) { Timber.w("Failed to create %s", nomediaDir); @@ -510,7 +510,7 @@ public class SettingsFragment extends PreferenceFragmentCompat @Override public void onPermissionRequestFinished(boolean hasPermission) { String currentPath = settings.getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, - FileUtil.getDefaultMusicDirectory(getActivity()).getPath()); + FileUtil.getDefaultMusicDirectory().getPath()); cacheLocation.setSummary(currentPath); } }); @@ -525,18 +525,18 @@ public class SettingsFragment extends PreferenceFragmentCompat private void setDebugLogToFile(boolean writeLog) { if (writeLog) { - FileLoggerTree.Companion.plantToTimberForest(getActivity().getApplicationContext()); + FileLoggerTree.Companion.plantToTimberForest(); Timber.i("Enabled debug logging to file"); } else { FileLoggerTree.Companion.uprootFromTimberForest(); Timber.i("Disabled debug logging to file"); - int fileNum = FileLoggerTree.Companion.getLogFileNumber(getActivity()); - long fileSize = FileLoggerTree.Companion.getLogFileSizes(getActivity()); + int fileNum = FileLoggerTree.Companion.getLogFileNumber(); + long fileSize = FileLoggerTree.Companion.getLogFileSizes(); String message = getString(R.string.settings_debug_log_summary, String.valueOf(fileNum), String.valueOf(Math.ceil(fileSize / 1000000d)), - FileUtil.getUltrasonicDirectory(getActivity())); + FileUtil.getUltrasonicDirectory()); new AlertDialog.Builder(getActivity()) .setMessage(message) @@ -550,7 +550,7 @@ public class SettingsFragment extends PreferenceFragmentCompat .setPositiveButton(R.string.settings_debug_log_delete, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - FileLoggerTree.Companion.deleteLogFiles(getActivity()); + FileLoggerTree.Companion.deleteLogFiles(); Timber.i("Deleted debug log files"); dialogInterface.dismiss(); new AlertDialog.Builder(getActivity()).setMessage(R.string.settings_debug_log_deleted) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/CachedMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/CachedMusicService.java index 4c9d77dc..f003ed2b 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/CachedMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/CachedMusicService.java @@ -124,7 +124,7 @@ public class CachedMusicService implements MusicService } @Override - public Indexes getIndexes(String musicFolderId, boolean refresh, Context context) throws Exception + public Indexes getIndexes(String musicFolderId, boolean refresh) throws Exception { checkSettingsChanged(); if (refresh) @@ -136,7 +136,7 @@ public class CachedMusicService implements MusicService Indexes result = cachedIndexes.get(); if (result == null) { - result = musicService.getIndexes(musicFolderId, refresh, context); + result = musicService.getIndexes(musicFolderId, refresh); cachedIndexes.set(result); } return result; @@ -160,7 +160,7 @@ public class CachedMusicService implements MusicService } @Override - public MusicDirectory getMusicDirectory(String id, String name, boolean refresh, Context context) throws Exception + public MusicDirectory getMusicDirectory(String id, String name, boolean refresh) throws Exception { checkSettingsChanged(); TimeLimitedCache cache = refresh ? null : cachedMusicDirectories.get(id); @@ -169,7 +169,7 @@ public class CachedMusicService implements MusicService if (dir == null) { - dir = musicService.getMusicDirectory(id, name, refresh, context); + dir = musicService.getMusicDirectory(id, name, refresh); cache = new TimeLimitedCache<>(Util.getDirectoryCacheTime(), TimeUnit.SECONDS); cache.set(dir); cachedMusicDirectories.put(id, cache); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MusicService.java index 8ddfb50c..7a052b01 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MusicService.java @@ -61,11 +61,11 @@ public interface MusicService List getMusicFolders(boolean refresh) throws Exception; - Indexes getIndexes(String musicFolderId, boolean refresh, Context context) throws Exception; + Indexes getIndexes(String musicFolderId, boolean refresh) throws Exception; Indexes getArtists(boolean refresh) throws Exception; - MusicDirectory getMusicDirectory(String id, String name, boolean refresh, Context context) throws Exception; + MusicDirectory getMusicDirectory(String id, String name, boolean refresh) throws Exception; MusicDirectory getArtist(String id, String name, boolean refresh) throws Exception; diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/OfflineMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/OfflineMusicService.java index e9a9387e..ffc6e595 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/OfflineMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/OfflineMusicService.java @@ -77,10 +77,10 @@ public class OfflineMusicService implements MusicService private final Lazy activeServerProvider = inject(ActiveServerProvider.class); @Override - public Indexes getIndexes(String musicFolderId, boolean refresh, Context context) + public Indexes getIndexes(String musicFolderId, boolean refresh) { List artists = new ArrayList<>(); - File root = FileUtil.getMusicDirectory(context); + File root = FileUtil.getMusicDirectory(); for (File file : FileUtil.listFiles(root)) { if (file.isDirectory()) @@ -142,7 +142,7 @@ public class OfflineMusicService implements MusicService } @Override - public MusicDirectory getMusicDirectory(String id, String artistName, boolean refresh, Context context) + public MusicDirectory getMusicDirectory(String id, String artistName, boolean refresh) { File dir = new File(id); MusicDirectory result = new MusicDirectory(); @@ -156,7 +156,7 @@ public class OfflineMusicService implements MusicService if (name != null & !names.contains(name)) { names.add(name); - result.addChild(createEntry(context, file, name)); + result.addChild(createEntry(file, name)); } } @@ -181,14 +181,14 @@ public class OfflineMusicService implements MusicService return FileUtil.getBaseName(name); } - private static MusicDirectory.Entry createEntry(Context context, File file, String name) + private static MusicDirectory.Entry createEntry(File file, String name) { MusicDirectory.Entry entry = new MusicDirectory.Entry(); entry.setDirectory(file.isDirectory()); entry.setId(file.getPath()); entry.setParent(file.getParent()); entry.setSize(file.length()); - String root = FileUtil.getMusicDirectory(context).getPath(); + String root = FileUtil.getMusicDirectory().getPath(); entry.setPath(file.getPath().replaceFirst(String.format("^%s/", root), "")); entry.setTitle(name); @@ -322,7 +322,7 @@ public class OfflineMusicService implements MusicService entry.setSuffix(FileUtil.getExtension(file.getName().replace(".complete", ""))); - File albumArt = FileUtil.getAlbumArtFile(context, entry); + File albumArt = FileUtil.getAlbumArtFile(entry); if (albumArt.exists()) { @@ -337,7 +337,7 @@ public class OfflineMusicService implements MusicService { try { - Bitmap bitmap = FileUtil.getAvatarBitmap(context, username, size, highQuality); + Bitmap bitmap = FileUtil.getAvatarBitmap(username, size, highQuality); return Util.scaleBitmap(bitmap, size); } catch (Exception e) @@ -366,7 +366,7 @@ public class OfflineMusicService implements MusicService List artists = new ArrayList<>(); List albums = new ArrayList<>(); List songs = new ArrayList<>(); - File root = FileUtil.getMusicDirectory(context); + File root = FileUtil.getMusicDirectory(); int closeness; for (File artistFile : FileUtil.listFiles(root)) @@ -442,7 +442,7 @@ public class OfflineMusicService implements MusicService String albumName = getName(albumFile); if ((closeness = matchCriteria(criteria, albumName)) > 0) { - MusicDirectory.Entry album = createEntry(context, albumFile, albumName); + MusicDirectory.Entry album = createEntry(albumFile, albumName); album.setArtist(artistName); album.setCloseness(closeness); albums.add(album); @@ -458,7 +458,7 @@ public class OfflineMusicService implements MusicService } else if ((closeness = matchCriteria(criteria, songName)) > 0) { - MusicDirectory.Entry song = createEntry(context, albumFile, songName); + MusicDirectory.Entry song = createEntry(albumFile, songName); song.setArtist(artistName); song.setAlbum(albumName); song.setCloseness(closeness); @@ -472,7 +472,7 @@ public class OfflineMusicService implements MusicService if ((closeness = matchCriteria(criteria, songName)) > 0) { - MusicDirectory.Entry song = createEntry(context, albumFile, songName); + MusicDirectory.Entry song = createEntry(albumFile, songName); song.setArtist(artistName); song.setAlbum(songName); song.setCloseness(closeness); @@ -508,7 +508,7 @@ public class OfflineMusicService implements MusicService public List getPlaylists(boolean refresh, Context context) { List playlists = new ArrayList<>(); - File root = FileUtil.getPlaylistDirectory(context); + File root = FileUtil.getPlaylistDirectory(); String lastServer = null; boolean removeServer = true; for (File folder : FileUtil.listFiles(root)) @@ -577,7 +577,7 @@ public class OfflineMusicService implements MusicService name = name.substring(id.length() + 2); } - File playlistFile = FileUtil.getPlaylistFile(context, id, name); + File playlistFile = FileUtil.getPlaylistFile(id, name); reader = new FileReader(playlistFile); buffer = new BufferedReader(reader); @@ -592,7 +592,7 @@ public class OfflineMusicService implements MusicService if (entryFile.exists() && entryName != null) { - playlist.addChild(createEntry(context, entryFile, entryName)); + playlist.addChild(createEntry(entryFile, entryName)); } } @@ -608,7 +608,7 @@ public class OfflineMusicService implements MusicService @Override public void createPlaylist(String id, String name, List entries, Context context) throws Exception { - File playlistFile = FileUtil.getPlaylistFile(context, activeServerProvider.getValue().getActiveServer().getName(), name); + File playlistFile = FileUtil.getPlaylistFile(activeServerProvider.getValue().getActiveServer().getName(), name); FileWriter fw = new FileWriter(playlistFile); BufferedWriter bw = new BufferedWriter(fw); try @@ -616,7 +616,7 @@ public class OfflineMusicService implements MusicService fw.write("#EXTM3U\n"); for (MusicDirectory.Entry e : entries) { - String filePath = FileUtil.getSongFile(context, e).getAbsolutePath(); + String filePath = FileUtil.getSongFile(e).getAbsolutePath(); if (!new File(filePath).exists()) { String ext = FileUtil.getExtension(filePath); @@ -641,7 +641,7 @@ public class OfflineMusicService implements MusicService @Override public MusicDirectory getRandomSongs(int size, Context context) { - File root = FileUtil.getMusicDirectory(context); + File root = FileUtil.getMusicDirectory(); List children = new LinkedList<>(); listFilesRecursively(root, children); MusicDirectory result = new MusicDirectory(); @@ -655,7 +655,7 @@ public class OfflineMusicService implements MusicService for (int i = 0; i < size; i++) { File file = children.get(random.nextInt(children.size())); - result.addChild(createEntry(context, file, getName(file))); + result.addChild(createEntry(file, getName(file))); } return result; diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/CacheCleaner.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/CacheCleaner.java index a25f57b5..58059173 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/CacheCleaner.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/CacheCleaner.java @@ -98,9 +98,9 @@ public class CacheCleaner if (children != null) { // No songs left in the folder - if (children.length == 1 && children[0].getPath().equals(FileUtil.getAlbumArtFile(context, dir).getPath())) + if (children.length == 1 && children[0].getPath().equals(FileUtil.getAlbumArtFile(dir).getPath())) { - Util.delete(FileUtil.getAlbumArtFile(context, dir)); + Util.delete(FileUtil.getAlbumArtFile(dir)); children = dir.listFiles(); } @@ -232,7 +232,7 @@ public class CacheCleaner filesToNotDelete.add(downloadFile.getCompleteOrSaveFile()); } - filesToNotDelete.add(FileUtil.getMusicDirectory(context)); + filesToNotDelete.add(FileUtil.getMusicDirectory()); return filesToNotDelete; } @@ -247,7 +247,7 @@ public class CacheCleaner List files = new ArrayList(); List dirs = new ArrayList(); - findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, dirs); + findCandidatesForDeletion(FileUtil.getMusicDirectory(), files, dirs); sortByAscendingModificationTime(files); Set filesToNotDelete = findFilesToNotDelete(); @@ -274,7 +274,7 @@ public class CacheCleaner Thread.currentThread().setName("BackgroundSpaceCleanup"); List files = new ArrayList(); List dirs = new ArrayList(); - findCandidatesForDeletion(FileUtil.getMusicDirectory(context), files, dirs); + findCandidatesForDeletion(FileUtil.getMusicDirectory(), files, dirs); long bytesToDelete = getMinimumDelete(files); if (bytesToDelete > 0L) @@ -302,11 +302,11 @@ public class CacheCleaner { Thread.currentThread().setName("BackgroundPlaylistsCleanup"); String server = activeServerProvider.getValue().getActiveServer().getName(); - SortedSet playlistFiles = FileUtil.listFiles(FileUtil.getPlaylistDirectory(context, server)); + SortedSet playlistFiles = FileUtil.listFiles(FileUtil.getPlaylistDirectory(server)); List playlists = params[0]; for (Playlist playlist : playlists) { - playlistFiles.remove(FileUtil.getPlaylistFile(context, server, playlist.getName())); + playlistFiles.remove(FileUtil.getPlaylistFile(server, playlist.getName())); } for (File playlist : playlistFiles) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/FileUtil.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/FileUtil.java index 91b50a32..2b595016 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/FileUtil.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/FileUtil.java @@ -28,6 +28,7 @@ import android.text.TextUtils; import kotlin.Lazy; import timber.log.Timber; +import org.moire.ultrasonic.app.UApp; import org.moire.ultrasonic.domain.MusicDirectory; import org.moire.ultrasonic.subsonic.ImageLoaderProvider; @@ -62,9 +63,9 @@ public class FileUtil private static final Lazy imageLoaderProvider = inject(ImageLoaderProvider.class); private static final Lazy permissionUtil = inject(PermissionUtil.class); - public static File getSongFile(Context context, MusicDirectory.Entry song) + public static File getSongFile(MusicDirectory.Entry song) { - File dir = getAlbumDirectory(context, song); + File dir = getAlbumDirectory(song); // Do not generate new name for offline files. Offline files will have their Path as their Id. if (!TextUtils.isEmpty(song.getId())) @@ -97,35 +98,35 @@ public class FileUtil return new File(dir, fileName.toString()); } - public static File getPlaylistFile(Context context, String server, String name) + public static File getPlaylistFile(String server, String name) { - File playlistDir = getPlaylistDirectory(context, server); + File playlistDir = getPlaylistDirectory(server); return new File(playlistDir, String.format("%s.m3u", fileSystemSafe(name))); } - public static File getPlaylistDirectory(Context context) + public static File getPlaylistDirectory() { - File playlistDir = new File(getUltrasonicDirectory(context), "playlists"); + File playlistDir = new File(getUltrasonicDirectory(), "playlists"); ensureDirectoryExistsAndIsReadWritable(playlistDir); return playlistDir; } - public static File getPlaylistDirectory(Context context, String server) + public static File getPlaylistDirectory(String server) { - File playlistDir = new File(getPlaylistDirectory(context), server); + File playlistDir = new File(getPlaylistDirectory(), server); ensureDirectoryExistsAndIsReadWritable(playlistDir); return playlistDir; } - public static File getAlbumArtFile(Context context, MusicDirectory.Entry entry) + public static File getAlbumArtFile(MusicDirectory.Entry entry) { - File albumDir = getAlbumDirectory(context, entry); - return getAlbumArtFile(context, albumDir); + File albumDir = getAlbumDirectory(entry); + return getAlbumArtFile(albumDir); } - public static File getAvatarFile(Context context, String username) + public static File getAvatarFile(String username) { - File albumArtDir = getAlbumArtDirectory(context); + File albumArtDir = getAlbumArtDirectory(); if (albumArtDir == null || username == null) { @@ -136,9 +137,9 @@ public class FileUtil return new File(albumArtDir, String.format("%s.jpeg", md5Hex)); } - public static File getAlbumArtFile(Context context, File albumDir) + public static File getAlbumArtFile(File albumDir) { - File albumArtDir = getAlbumArtDirectory(context); + File albumArtDir = getAlbumArtDirectory(); if (albumArtDir == null || albumDir == null) { @@ -149,11 +150,11 @@ public class FileUtil return new File(albumArtDir, String.format("%s.jpeg", md5Hex)); } - public static Bitmap getAvatarBitmap(Context context, String username, int size, boolean highQuality) + public static Bitmap getAvatarBitmap(String username, int size, boolean highQuality) { if (username == null) return null; - File avatarFile = getAvatarFile(context, username); + File avatarFile = getAvatarFile(username); Bitmap bitmap = null; ImageLoader imageLoader = imageLoaderProvider.getValue().getImageLoader(); @@ -217,7 +218,7 @@ public class FileUtil { if (entry == null) return null; - File albumArtFile = getAlbumArtFile(context, entry); + File albumArtFile = getAlbumArtFile(entry); Bitmap bitmap = null; ImageLoader imageLoader = imageLoaderProvider.getValue().getImageLoader(); @@ -301,15 +302,15 @@ public class FileUtil return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opt); } - public static File getAlbumArtDirectory(Context context) + public static File getAlbumArtDirectory() { - File albumArtDir = new File(getUltrasonicDirectory(context), "artwork"); + File albumArtDir = new File(getUltrasonicDirectory(), "artwork"); ensureDirectoryExistsAndIsReadWritable(albumArtDir); ensureDirectoryExistsAndIsReadWritable(new File(albumArtDir, ".nomedia")); return albumArtDir; } - public static File getAlbumDirectory(Context context, MusicDirectory.Entry entry) + public static File getAlbumDirectory(MusicDirectory.Entry entry) { if (entry == null) { @@ -321,7 +322,7 @@ public class FileUtil if (!TextUtils.isEmpty(entry.getPath())) { File f = new File(fileSystemSafeDir(entry.getPath())); - dir = new File(String.format("%s/%s", getMusicDirectory(context).getPath(), entry.isDirectory() ? f.getPath() : f.getParent())); + dir = new File(String.format("%s/%s", getMusicDirectory().getPath(), entry.isDirectory() ? f.getPath() : f.getParent())); } else { @@ -333,7 +334,7 @@ public class FileUtil album = fileSystemSafe(entry.getTitle()); } - dir = new File(String.format("%s/%s/%s", getMusicDirectory(context).getPath(), artist, album)); + dir = new File(String.format("%s/%s/%s", getMusicDirectory().getPath(), artist, album)); } return dir; @@ -351,9 +352,9 @@ public class FileUtil } } - private static File getOrCreateDirectory(Context context, String name) + private static File getOrCreateDirectory(String name) { - File dir = new File(getUltrasonicDirectory(context), name); + File dir = new File(getUltrasonicDirectory(), name); if (!dir.exists() && !dir.mkdirs()) { @@ -363,23 +364,23 @@ public class FileUtil return dir; } - public static File getUltrasonicDirectory(Context context) + public static File getUltrasonicDirectory() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return new File(Environment.getExternalStorageDirectory(), "Android/data/org.moire.ultrasonic"); // After Android M, the location of the files must be queried differently. GetExternalFilesDir will always return a directory which Ultrasonic can access without any extra privileges. - return context.getExternalFilesDir(null); + return UApp.Companion.applicationContext().getExternalFilesDir(null); } - public static File getDefaultMusicDirectory(Context context) + public static File getDefaultMusicDirectory() { - return getOrCreateDirectory(context, "music"); + return getOrCreateDirectory("music"); } - public static File getMusicDirectory(Context context) + public static File getMusicDirectory() { - File defaultMusicDirectory = getDefaultMusicDirectory(context); + File defaultMusicDirectory = getDefaultMusicDirectory(); String path = Util.getPreferences().getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, defaultMusicDirectory.getPath()); File dir = new File(path); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java index 0956ad98..5e5d84cb 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/LegacyImageLoader.java @@ -416,7 +416,7 @@ public class LegacyImageLoader implements Runnable, ImageLoader { public void execute() { try { - MusicService musicService = MusicServiceFactory.getMusicService(view.getContext()); + MusicService musicService = MusicServiceFactory.getMusicService(); final boolean isAvatar = this.username != null && this.entry == null; final Bitmap bitmap = this.entry != null ? musicService.getCoverArt(view.getContext(), entry, size, saveToFile, highQuality) : diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/PermissionUtil.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/PermissionUtil.java index 1012dea7..2357c9cd 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/PermissionUtil.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/PermissionUtil.java @@ -60,8 +60,8 @@ public class PermissionUtil { * @param callback callback function to execute after the permission request is finished */ public void handlePermissionFailed(final PermissionRequestFinishedCallback callback) { - String currentCachePath = Util.getPreferences().getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, FileUtil.getDefaultMusicDirectory(applicationContext).getPath()); - String defaultCachePath = FileUtil.getDefaultMusicDirectory(applicationContext).getPath(); + String currentCachePath = Util.getPreferences().getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, FileUtil.getDefaultMusicDirectory().getPath()); + String defaultCachePath = FileUtil.getDefaultMusicDirectory().getPath(); // Ultrasonic can do nothing about this error when the Music Directory is already set to the default. if (currentCachePath.compareTo(defaultCachePath) == 0) return; @@ -69,12 +69,12 @@ public class PermissionUtil { if ((PermissionChecker.checkSelfPermission(applicationContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_DENIED) || (PermissionChecker.checkSelfPermission(applicationContext, Manifest.permission.READ_EXTERNAL_STORAGE) == PERMISSION_DENIED)) { // While we request permission, the Music Directory is temporarily reset to its default location - setCacheLocation(applicationContext, FileUtil.getDefaultMusicDirectory(applicationContext).getPath()); + setCacheLocation(applicationContext, FileUtil.getDefaultMusicDirectory().getPath()); // If the application is not running, we can't notify the user if (activityContext == null) return; requestFailedPermission(activityContext, currentCachePath, callback); } else { - setCacheLocation(applicationContext, FileUtil.getDefaultMusicDirectory(applicationContext).getPath()); + setCacheLocation(applicationContext, FileUtil.getDefaultMusicDirectory().getPath()); // If the application is not running, we can't notify the user if (activityContext != null) { new Handler(Looper.getMainLooper()).post(new Runnable() { @@ -164,7 +164,7 @@ public class PermissionUtil { } Timber.i("At least one permission is missing to use directory %s ", cacheLocation); - setCacheLocation(context, FileUtil.getDefaultMusicDirectory(context).getPath()); + setCacheLocation(context, FileUtil.getDefaultMusicDirectory().getPath()); showWarning(context, context.getString(R.string.permissions_message_box_title), context.getString(R.string.permissions_permission_missing), null); if (callback != null) callback.onPermissionRequestFinished(false); @@ -201,7 +201,7 @@ public class PermissionUtil { builder.setNegativeButton(context.getString(R.string.common_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - setCacheLocation(context, FileUtil.getDefaultMusicDirectory(context).getPath()); + setCacheLocation(context, FileUtil.getDefaultMusicDirectory().getPath()); dialog.cancel(); } }); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index e4ca100d..31c3d755 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -46,7 +46,6 @@ import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; -import androidx.annotation.ColorInt; import androidx.preference.PreferenceManager; import org.moire.ultrasonic.R; @@ -725,7 +724,7 @@ public class Util intent.putExtra("artist", song.getArtist()); intent.putExtra("album", song.getAlbum()); - File albumArtFile = FileUtil.getAlbumArtFile(context, song); + File albumArtFile = FileUtil.getAlbumArtFile(song); intent.putExtra("coverart", albumArtFile.getAbsolutePath()); } else @@ -797,7 +796,7 @@ public class Util if (Util.getShouldSendBluetoothAlbumArt()) { - File albumArtFile = FileUtil.getAlbumArtFile(context, song); + File albumArtFile = FileUtil.getAlbumArtFile(song); avrcpIntent.putExtra("coverart", albumArtFile.getAbsolutePath()); avrcpIntent.putExtra("cover", albumArtFile.getAbsolutePath()); } @@ -853,7 +852,7 @@ public class Util if (Util.getShouldSendBluetoothAlbumArt()) { - File albumArtFile = FileUtil.getAlbumArtFile(context, currentSong); + File albumArtFile = FileUtil.getAlbumArtFile(currentSong); avrcpIntent.putExtra("coverart", albumArtFile.getAbsolutePath()); avrcpIntent.putExtra("cover", albumArtFile.getAbsolutePath()); } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 964c25b4..5aa200a7 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -301,7 +301,7 @@ class NavigationActivity : AppCompatActivity() { val editor = preferences.edit() editor.putString( Constants.PREFERENCES_KEY_CACHE_LOCATION, - FileUtil.getDefaultMusicDirectory(this).path + FileUtil.getDefaultMusicDirectory().path ) editor.apply() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt index be61e3b4..78ddfe89 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt @@ -36,7 +36,7 @@ class UApp : MultiDexApplication() { Timber.plant(DebugTree()) } if (Util.getDebugLogToFile()) { - FileLoggerTree.plantToTimberForest(this) + FileLoggerTree.plantToTimberForest() } startKoin { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt index 1024a868..91ab71a6 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/MusicServiceModule.kt @@ -81,7 +81,7 @@ val musicServiceModule = module { single { SubsonicImageLoader(androidContext(), get()) } - viewModel { ArtistListModel(get(), androidContext()) } + viewModel { ArtistListModel(get()) } single { DownloadHandler(get(), get()) } single { NetworkAndStorageChecker(androidContext()) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt index ece73e14..ef6dcc5e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt @@ -18,7 +18,6 @@ */ package org.moire.ultrasonic.fragment -import android.content.Context import android.os.Handler import android.os.Looper import androidx.lifecycle.LiveData @@ -40,8 +39,7 @@ import org.moire.ultrasonic.util.Util * Provides ViewModel which contains the list of available Artists */ class ArtistListModel( - private val activeServerProvider: ActiveServerProvider, - private val context: Context + private val activeServerProvider: ActiveServerProvider ) : ViewModel() { private val musicFolders: MutableLiveData> = MutableLiveData() private val artists: MutableLiveData> = MutableLiveData() @@ -93,7 +91,7 @@ class ArtistListModel( val result = if (!isOffline && useId3Tags) musicService.getArtists(refresh) - else musicService.getIndexes(musicFolderId, refresh, context) + else musicService.getIndexes(musicFolderId, refresh) val retrievedArtists: MutableList = ArrayList(result.shortcuts.size + result.artists.size) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt index 5650c419..53eee9c2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SelectAlbumModel.kt @@ -61,7 +61,7 @@ class SelectAlbumModel(application: Application) : AndroidViewModel(application) if (allSongsId == id) { val musicDirectory = service.getMusicDirectory( - parentId, name, refresh, context + parentId, name, refresh ) val songs: MutableList = LinkedList() @@ -73,7 +73,7 @@ class SelectAlbumModel(application: Application) : AndroidViewModel(application) } } } else { - val musicDirectory = service.getMusicDirectory(id, name, refresh, context) + val musicDirectory = service.getMusicDirectory(id, name, refresh) if (Util.getShouldShowAllSongsByArtist() && musicDirectory.findChild(allSongsId) == null && @@ -117,7 +117,7 @@ class SelectAlbumModel(application: Application) : AndroidViewModel(application) var root: MusicDirectory if (allSongsId != id1) { - root = service.getMusicDirectory(id1, title, false, context) + root = service.getMusicDirectory(id1, title, false) getSongsRecursively(root, songs) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/FileLoggerTree.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/FileLoggerTree.kt index 88e8d868..0aa2362f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/FileLoggerTree.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/FileLoggerTree.kt @@ -1,6 +1,5 @@ package org.moire.ultrasonic.log -import android.content.Context import java.io.File import java.io.FileWriter import java.text.SimpleDateFormat @@ -14,7 +13,7 @@ import timber.log.Timber * A Timber Tree which can be used to log to a file * Subclass of the DebugTree so it inherits the Tag handling */ -class FileLoggerTree(val context: Context) : Timber.DebugTree() { +class FileLoggerTree : Timber.DebugTree() { private val dateFormat = SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()) /** @@ -81,7 +80,7 @@ class FileLoggerTree(val context: Context) : Timber.DebugTree() { */ private fun getNumberedFile(next: Boolean) { var fileNum = 1 - val fileList = getLogFileList(context) + val fileList = getLogFileList() if (!fileList.isNullOrEmpty()) { fileList.sortByDescending { t -> t.name } @@ -94,7 +93,7 @@ class FileLoggerTree(val context: Context) : Timber.DebugTree() { if (next) fileNum++ file = File( - FileUtil.getUltrasonicDirectory(context), + FileUtil.getUltrasonicDirectory(), FILENAME.replace("*", fileNum.toString()) ) } @@ -124,9 +123,9 @@ class FileLoggerTree(val context: Context) : Timber.DebugTree() { const val MAX_LOGFILE_LENGTH = 10000000 var callNum = 0 - fun plantToTimberForest(context: Context) { + fun plantToTimberForest() { if (!Timber.forest().any { t -> t is FileLoggerTree }) { - Timber.plant(FileLoggerTree(context)) + Timber.plant(FileLoggerTree()) } } @@ -137,15 +136,15 @@ class FileLoggerTree(val context: Context) : Timber.DebugTree() { file = null } - fun getLogFileNumber(context: Context): Int { - val fileList = getLogFileList(context) + fun getLogFileNumber(): Int { + val fileList = getLogFileList() if (!fileList.isNullOrEmpty()) return fileList.size return 0 } - fun getLogFileSizes(context: Context): Long { + fun getLogFileSizes(): Long { var sizeSum: Long = 0 - val fileList = getLogFileList(context) + val fileList = getLogFileList() if (fileList.isNullOrEmpty()) return sizeSum for (file in fileList) { sizeSum += file.length() @@ -153,16 +152,16 @@ class FileLoggerTree(val context: Context) : Timber.DebugTree() { return sizeSum } - fun deleteLogFiles(context: Context) { - val fileList = getLogFileList(context) + fun deleteLogFiles() { + val fileList = getLogFileList() if (fileList.isNullOrEmpty()) return for (file in fileList) { file.delete() } } - private fun getLogFileList(context: Context): Array { - val directory = FileUtil.getUltrasonicDirectory(context) + private fun getLogFileList(): Array { + val directory = FileUtil.getUltrasonicDirectory() return directory.listFiles { t -> t.name.matches(fileNameRegex) } } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt index 0454e755..4a848bc0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt @@ -41,7 +41,7 @@ class DownloadFile( ) { val partialFile: File val completeFile: File - private val saveFile: File = FileUtil.getSongFile(context, song) + private val saveFile: File = FileUtil.getSongFile(song) private var downloadTask: CancellableTask? = null var isFailed = false private var retryCount = MAX_RETRIES diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt index 5bb7885d..6fe541de 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt @@ -108,10 +108,9 @@ open class RESTMusicService( @Throws(Exception::class) override fun getIndexes( - musicFolderId: String?, - refresh: Boolean, - context: Context - ): Indexes { + musicFolderId: String, + refresh: Boolean + ): Indexes? { val indexName = INDEXES_STORAGE_NAME + (musicFolderId ?: "") val cachedIndexes = fileStorage.load(indexName, getIndexesSerializer()) @@ -171,10 +170,9 @@ open class RESTMusicService( @Throws(Exception::class) override fun getMusicDirectory( id: String, - name: String?, - refresh: Boolean, - context: Context - ): MusicDirectory { + name: String, + refresh: Boolean + ): MusicDirectory? { val response = responseChecker.callWithResponseCheck { api -> api.getMusicDirectory(id).execute() } @@ -280,7 +278,7 @@ open class RESTMusicService( } val playlist = response.body()!!.playlist.toMusicDirectoryDomainEntity() - savePlaylist(name, context, playlist) + savePlaylist(name, playlist) return playlist } @@ -288,11 +286,10 @@ open class RESTMusicService( @Throws(IOException::class) private fun savePlaylist( name: String?, - context: Context, playlist: MusicDirectory ) { val playlistFile = FileUtil.getPlaylistFile( - context, activeServerProvider.getActiveServer().name, name + activeServerProvider.getActiveServer().name, name ) val fw = FileWriter(playlistFile) @@ -301,7 +298,7 @@ open class RESTMusicService( try { fw.write("#EXTM3U\n") for (e in playlist.getChildren()) { - var filePath = FileUtil.getSongFile(context, e).absolutePath + var filePath = FileUtil.getSongFile(e).absolutePath if (!File(filePath).exists()) { val ext = FileUtil.getExtension(filePath) @@ -563,7 +560,7 @@ open class RESTMusicService( var outputStream: OutputStream? = null try { outputStream = FileOutputStream( - FileUtil.getAlbumArtFile(context, entry) + FileUtil.getAlbumArtFile(entry) ) outputStream.write(bytes) } finally { @@ -882,7 +879,7 @@ open class RESTMusicService( synchronized(username) { // Use cached file, if existing. - var bitmap = FileUtil.getAvatarBitmap(context, username, size, highQuality) + var bitmap = FileUtil.getAvatarBitmap(username, size, highQuality) if (bitmap == null) { var inputStream: InputStream? = null @@ -901,7 +898,7 @@ open class RESTMusicService( try { outputStream = FileOutputStream( - FileUtil.getAvatarFile(context, username) + FileUtil.getAvatarFile(username) ) outputStream.write(bytes) } finally { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index dd9e16f9..290a3c5d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -3,9 +3,9 @@ package org.moire.ultrasonic.subsonic import android.app.Activity import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController -import org.koin.core.component.KoinApiExtension import java.util.Collections import java.util.LinkedList +import org.koin.core.component.KoinApiExtension import org.moire.ultrasonic.R import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.MusicDirectory @@ -212,7 +212,7 @@ class DownloadHandler( root = if (!isOffline() && Util.getShouldUseId3Tags()) musicService.getAlbum(id, name, false) else - musicService.getMusicDirectory(id, name, false, activity) + musicService.getMusicDirectory(id, name, false) } else if (isShare) { root = MusicDirectory() val shares = musicService.getShares(true, activity) @@ -256,7 +256,7 @@ class DownloadHandler( !isOffline() && Util.getShouldUseId3Tags() ) musicService.getAlbum(id1, title, false) - else musicService.getMusicDirectory(id1, title, false, activity) + else musicService.getMusicDirectory(id1, title, false) getSongsRecursively(root, songs) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/SubsonicUncaughtExceptionHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/SubsonicUncaughtExceptionHandler.kt index 0aa95d9a..7e7fab3e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/SubsonicUncaughtExceptionHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/SubsonicUncaughtExceptionHandler.kt @@ -22,7 +22,7 @@ class SubsonicUncaughtExceptionHandler( var printWriter: PrintWriter? = null try { - file = File(FileUtil.getUltrasonicDirectory(context), filename) + file = File(FileUtil.getUltrasonicDirectory(), filename) printWriter = PrintWriter(file) val logMessage = String.format( "Android API level: %s\nUltrasonic version name: %s\n" +