Browse Source

Use coroutines for background tasks

4.0-glrenderer
Geoffrey Métais 8 years ago
parent
commit
c3129d05cb
  1. 7
      vlc-android/src/org/videolan/vlc/PlaybackService.java
  2. 3
      vlc-android/src/org/videolan/vlc/RecommendationsService.java
  3. 38
      vlc-android/src/org/videolan/vlc/VLCApplication.java
  4. 5
      vlc-android/src/org/videolan/vlc/gui/AboutFragment.java
  5. 7
      vlc-android/src/org/videolan/vlc/gui/InfoActivity.java
  6. 11
      vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java
  7. 5
      vlc-android/src/org/videolan/vlc/gui/SearchActivity.java
  8. 3
      vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java
  9. 3
      vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java
  10. 5
      vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java
  11. 6
      vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java
  12. 3
      vlc-android/src/org/videolan/vlc/gui/dialogs/SavePlaylistDialog.java
  13. 5
      vlc-android/src/org/videolan/vlc/gui/helpers/AsyncImageLoader.java
  14. 3
      vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.java
  15. 7
      vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.java
  16. 5
      vlc-android/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java
  17. 5
      vlc-android/src/org/videolan/vlc/gui/tv/SearchFragment.java
  18. 6
      vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
  19. 4
      vlc-android/src/org/videolan/vlc/gui/tv/browser/SongsBrowserFragment.java
  20. 3
      vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
  21. 6
      vlc-android/src/org/videolan/vlc/gui/view/AudioMediaSwitcher.java
  22. 2
      vlc-android/src/org/videolan/vlc/util/FileUtils.java
  23. 10
      vlc-android/src/org/videolan/vlc/util/SubtitlesDownloader.java
  24. 2
      vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.java
  25. 2
      vlc-android/src/org/videolan/vlc/util/VLCInstance.java
  26. 17
      vlc-android/src/org/videolan/vlc/util/Workers.kt
  27. 5
      vlc-android/src/org/videolan/vlc/widget/VLCAppWidgetProvider.java

7
vlc-android/src/org/videolan/vlc/PlaybackService.java

@ -94,6 +94,7 @@ import org.videolan.vlc.util.VLCInstance;
import org.videolan.vlc.util.VLCOptions;
import org.videolan.vlc.util.VoiceSearchParams;
import org.videolan.vlc.util.WeakHandler;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.widget.VLCAppWidgetProvider;
import org.videolan.vlc.widget.VLCAppWidgetProviderBlack;
import org.videolan.vlc.widget.VLCAppWidgetProviderWhite;
@ -907,7 +908,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
return;
}
mMediaSession.setPlaybackState(new PlaybackStateCompat.Builder().setState(PlaybackStateCompat.STATE_CONNECTING, getTime(), 1.0f).build());
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final VoiceSearchParams vsp = new VoiceSearchParams(query, extras);
@ -1019,7 +1020,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
}
bob.putLong("shuffle", 1L);
bob.putLong("repeat", getRepeatType());
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (mMediaSession != null)
@ -1923,7 +1924,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
}
private void sendResults(@NonNull final MediaBrowserServiceCompat.Result result, @NonNull final String parentId) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
try {

3
vlc-android/src/org/videolan/vlc/RecommendationsService.java

@ -36,6 +36,7 @@ import org.videolan.vlc.gui.helpers.BitmapUtil;
import org.videolan.vlc.gui.video.VideoPlayerActivity;
import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.WorkersKt;
import java.util.Arrays;
import java.util.List;
@ -100,7 +101,7 @@ public class RecommendationsService extends IntentService {
private void doRecommendations() {
mNotificationManager.cancelAll();
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
int id = 0;

38
vlc-android/src/org/videolan/vlc/VLCApplication.java

@ -27,9 +27,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
import android.preference.PreferenceManager;
import android.support.v4.app.DialogFragment;
import android.support.v4.util.SimpleArrayMap;
@ -47,14 +44,11 @@ import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.Strings;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.VLCInstance;
import org.videolan.vlc.util.WorkersKt;
import java.lang.ref.WeakReference;
import java.util.Calendar;
import java.util.Locale;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class VLCApplication extends Application {
public final static String TAG = "VLC/VLCApplication";
@ -70,20 +64,6 @@ public class VLCApplication extends Application {
private static SimpleArrayMap<String, WeakReference<Object>> sDataMap = new SimpleArrayMap<>();
/* Up to 2 threads maximum, inactive threads are killed after 2 seconds */
private static final int maxThreads = Math.max(AndroidUtil.isJellyBeanMR1OrLater ? Runtime.getRuntime().availableProcessors() : 2, 1);
public static final ThreadFactory THREAD_FACTORY = new ThreadFactory() {
@Override
public Thread newThread(Runnable runnable) {
final Thread thread = new Thread(runnable);
thread.setPriority(Process.THREAD_PRIORITY_DEFAULT+Process.THREAD_PRIORITY_LESS_FAVORABLE);
return thread;
}
};
private static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(Math.min(2, maxThreads), maxThreads, 30, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(), THREAD_FACTORY);
private static final Handler handler = new Handler(Looper.getMainLooper());
private static int sDialogCounter = 0;
public VLCApplication() {
@ -102,7 +82,7 @@ public class VLCApplication extends Application {
setLocale();
runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
@ -164,20 +144,6 @@ public class VLCApplication extends Application {
return sTV || (sSettings != null && sSettings.getBoolean("tv_ui", false));
}
public static void runBackground(Runnable runnable) {
if (Looper.myLooper() != Looper.getMainLooper()) runnable.run();
else threadPool.execute(runnable);
}
public static void runOnMainThread(Runnable runnable) {
if (Looper.myLooper() == Looper.getMainLooper()) runnable.run();
else handler.post(runnable);
}
public static boolean removeTask(Runnable runnable) {
return threadPool.remove(runnable);
}
public static void storeData(String key, Object data) {
sDataMap.put(key, new WeakReference<>(data));
}

5
vlc-android/src/org/videolan/vlc/gui/AboutFragment.java

@ -38,6 +38,7 @@ import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.audio.AudioPagerAdapter;
import org.videolan.vlc.gui.helpers.UiTools;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.WorkersKt;
public class AboutFragment extends Fragment {
public final static String TAG = "VLC/AboutActivity";
@ -78,11 +79,11 @@ public class AboutFragment extends Fragment {
mTabLayout = v.findViewById(R.id.sliding_tabs);
mTabLayout.setupWithViewPager(mViewPager);
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final String asset = Util.readAsset("licence.htm", "").replace("!COMMITID!",revision);
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
UiTools.fillAboutView(v);

7
vlc-android/src/org/videolan/vlc/gui/InfoActivity.java

@ -38,6 +38,7 @@ import org.videolan.vlc.media.MediaUtils;
import org.videolan.vlc.util.Strings;
import org.videolan.vlc.util.VLCInstance;
import org.videolan.vlc.util.WeakHandler;
import org.videolan.vlc.util.WorkersKt;
import java.io.File;
import java.util.LinkedList;
@ -83,13 +84,13 @@ public class InfoActivity extends AudioPlayerContainerActivity implements View.O
? savedInstanceState.getInt(TAG_FAB_VISIBILITY) : -1;
if (!TextUtils.isEmpty(mItem.getArtworkMrl())) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mItem.getArtworkMrl()), 0);
if (cover != null) {
mBinding.setCover(new BitmapDrawable(InfoActivity.this.getResources(), cover));
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
ViewCompat.setNestedScrollingEnabled(mBinding.container, true);
@ -112,7 +113,7 @@ public class InfoActivity extends AudioPlayerContainerActivity implements View.O
mCheckFileTask = (CheckFileTask) new CheckFileTask().execute();
mParseTracksTask = (ParseTracksTask) new ParseTracksTask().execute();
}
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
updateMeta();

11
vlc-android/src/org/videolan/vlc/gui/PlaylistActivity.java

@ -68,6 +68,7 @@ import org.videolan.vlc.media.MediaUtils;
import org.videolan.vlc.media.PlaylistManager;
import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.viewmodels.audio.TracksProvider;
import java.util.ArrayList;
@ -118,13 +119,13 @@ public class PlaylistActivity extends AudioPlayerContainerActivity implements IE
final int fabVisibility = savedInstanceState != null ? savedInstanceState.getInt(TAG_FAB_VISIBILITY) : -1;
if (!TextUtils.isEmpty(mPlaylist.getArtworkMrl())) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mPlaylist.getArtworkMrl()), 0);
if (cover != null) {
mBinding.setCover(new BitmapDrawable(PlaylistActivity.this.getResources(), cover));
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
mBinding.appbar.setExpanded(true, true);
@ -132,7 +133,7 @@ public class PlaylistActivity extends AudioPlayerContainerActivity implements IE
mBinding.fab.setVisibility(fabVisibility);
}
});
} else VLCApplication.runOnMainThread(new Runnable() {
} else WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
fabFallback();
@ -398,7 +399,7 @@ public class PlaylistActivity extends AudioPlayerContainerActivity implements IE
}
protected void deleteMedia(final MediaLibraryItem mw, final Runnable cancel) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final LinkedList<String> foldersToReload = new LinkedList<>();
@ -414,7 +415,7 @@ public class PlaylistActivity extends AudioPlayerContainerActivity implements IE
for (String folder : foldersToReload)
mMediaLibrary.reload(folder);
if (PlaylistManager.Companion.hasMedia()) {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (mediaPaths.isEmpty()) cancel.run();

5
vlc-android/src/org/videolan/vlc/gui/SearchActivity.java

@ -32,6 +32,7 @@ import org.videolan.vlc.databinding.SearchActivityBinding;
import org.videolan.vlc.gui.helpers.UiTools;
import org.videolan.vlc.gui.view.ContextMenuRecyclerView;
import org.videolan.vlc.media.MediaUtils;
import org.videolan.vlc.util.WorkersKt;
public class SearchActivity extends AppCompatActivity implements TextWatcher, TextView.OnEditorActionListener {
@ -68,13 +69,13 @@ public class SearchActivity extends AppCompatActivity implements TextWatcher, Te
}
private void performSearh(final String query) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final SearchAggregate searchAggregate = mMedialibrary.search(query);
mBinding.setSearchAggregate(searchAggregate);
if (searchAggregate != null) {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
((SearchResultAdapter)mBinding.albumsResults.getAdapter()).add(searchAggregate.getAlbums());

3
vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java

@ -64,6 +64,7 @@ import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.WeakHandler;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.viewmodels.BaseModel;
import org.videolan.vlc.viewmodels.audio.AlbumProvider;
import org.videolan.vlc.viewmodels.audio.ArtistProvider;
@ -440,7 +441,7 @@ public class AudioBrowserFragment extends BaseAudioBrowser implements SwipeRefre
}
private void deletePlaylist(final Playlist playlist) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
playlist.delete();

3
vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserAdapter.java

@ -43,6 +43,7 @@ import org.videolan.vlc.gui.DiffUtilAdapter;
import org.videolan.vlc.gui.helpers.SelectorViewHolder;
import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.WorkersKt;
import java.util.ArrayList;
import java.util.List;
@ -228,7 +229,7 @@ public class BaseBrowserAdapter extends DiffUtilAdapter<MediaLibraryItem, BaseBr
}
void addItem(final MediaLibraryItem item, final boolean top, final int positionTo) {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
int position;

5
vlc-android/src/org/videolan/vlc/gui/browser/FileBrowserFragment.java

@ -51,6 +51,7 @@ import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.CustomDirectories;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.Strings;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.viewmodels.browser.FileBrowserProvider;
import java.io.File;
@ -108,7 +109,7 @@ public class FileBrowserFragment extends BaseBrowserFragment {
final String internalmemoryTitle = getString(R.string.internal_memory);
final String browserStorage = getString(R.string.browser_storages);
final String quickAccess = getString(R.string.browser_quick_access);
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final String storages[] = AndroidDevices.getMediaDirectories();
@ -162,7 +163,7 @@ public class FileBrowserFragment extends BaseBrowserFragment {
devices.add(whatsapp);
}
}
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
mAdapter.update(devices);

6
vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.java

@ -23,7 +23,6 @@
package org.videolan.vlc.gui.browser;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
@ -58,6 +57,7 @@ import org.videolan.vlc.interfaces.Filterable;
import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.Permissions;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.viewmodels.BaseModel;
import java.util.LinkedList;
@ -154,7 +154,7 @@ public abstract class MediaBrowserFragment<T extends BaseModel> extends Fragment
}
protected void deleteMedia(final MediaLibraryItem mw, final boolean refresh, final Runnable failCB) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final LinkedList<String> foldersToReload = new LinkedList<>();
@ -171,7 +171,7 @@ public abstract class MediaBrowserFragment<T extends BaseModel> extends Fragment
}
for (String folder : foldersToReload) mMediaLibrary.reload(folder);
if (getActivity() != null) {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (mediaPaths.isEmpty()) {

3
vlc-android/src/org/videolan/vlc/gui/dialogs/SavePlaylistDialog.java

@ -50,6 +50,7 @@ import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.audio.AudioBrowserAdapter;
import org.videolan.vlc.interfaces.IEventsHandler;
import org.videolan.vlc.util.WorkersKt;
import java.util.ArrayList;
import java.util.Arrays;
@ -144,7 +145,7 @@ public class SavePlaylistDialog extends DialogFragment implements View.OnClickLi
}
private void savePlaylist() {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
public void run() {
final String name = mEditText.getText().toString().trim();
final boolean addTracks = !Tools.isArrayEmpty(mNewTrack);

5
vlc-android/src/org/videolan/vlc/gui/helpers/AsyncImageLoader.java

@ -45,6 +45,7 @@ import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.util.HttpImageLoader;
import org.videolan.vlc.util.ThumbnailsProvider;
import org.videolan.vlc.util.WorkersKt;
public class AsyncImageLoader {
@ -105,7 +106,7 @@ public class AsyncImageLoader {
}
private static void loadImage(final Callbacks cbs, final View target){
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
cbs.updateImage(cbs.getImage(), target);
@ -159,7 +160,7 @@ public class AsyncImageLoader {
vdb.setVariable(BR.cover, new BitmapDrawable(target.getResources(), bitmap));
vdb.setVariable(BR.protocol, null);
} else {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (target instanceof ImageView) {

3
vlc-android/src/org/videolan/vlc/gui/helpers/MedialibraryUtils.java

@ -6,11 +6,12 @@ import android.content.Intent;
import org.videolan.vlc.MediaParsingService;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.WorkersKt;
public class MedialibraryUtils {
public static void removeDir(final String path) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
VLCApplication.getMLInstance().removeFolder(path);

7
vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesAdvanced.java

@ -48,6 +48,7 @@ import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.Permissions;
import org.videolan.vlc.util.VLCInstance;
import org.videolan.vlc.util.WorkersKt;
import java.io.File;
@ -124,7 +125,7 @@ public class PreferencesAdvanced extends BasePreferenceFragment implements Share
if (VLCApplication.getMLInstance().isWorking())
UiTools.snacker(getView(), getString(R.string.settings_ml_block_scan));
else {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Runnable dump = new Runnable() {
@ -133,13 +134,13 @@ public class PreferencesAdvanced extends BasePreferenceFragment implements Share
final File db = new File(VLCApplication.getAppContext().getDir("db", Context.MODE_PRIVATE)+ Medialibrary.VLC_MEDIA_DB_NAME);
if (FileUtils.copyFile(db, new File(AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY + Medialibrary.VLC_MEDIA_DB_NAME)))
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
Toast.makeText(VLCApplication.getAppContext(), "Database dumped on internal storage root", Toast.LENGTH_LONG).show();
}
});
else VLCApplication.runOnMainThread(new Runnable() {
else WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
Toast.makeText(VLCApplication.getAppContext(), "Failed to dumped database", Toast.LENGTH_LONG).show();

5
vlc-android/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java

@ -54,6 +54,7 @@ import org.videolan.vlc.media.MediaDatabase;
import org.videolan.vlc.media.MediaUtils;
import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.FileUtils;
import org.videolan.vlc.util.WorkersKt;
import java.util.List;
@ -187,12 +188,12 @@ public class MediaItemDetailsFragment extends DetailsFragment implements Playbac
selector.addClassPresenter(ListRow.class,
new ListRowPresenter());
mRowsAdapter = new ArrayObjectAdapter(selector);
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap cover = media.getType() == MediaWrapper.TYPE_AUDIO || media.getType() == MediaWrapper.TYPE_VIDEO
? AudioUtil.readCoverBitmap(mMedia.getArtworkUrl(), 512) : null;
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (isDetached())

5
vlc-android/src/org/videolan/vlc/gui/tv/SearchFragment.java

@ -50,6 +50,7 @@ import org.videolan.medialibrary.media.SearchAggregate;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.WorkersKt;
import java.util.Arrays;
@ -101,7 +102,7 @@ public class SearchFragment extends SearchSupportFragment implements SearchSuppo
if (!TextUtils.isEmpty(words) && words.length() > 2) {
mDelayedLoad.setSearchQuery(words);
if (VLCApplication.getMLInstance().isInitiated())
VLCApplication.runBackground(mDelayedLoad);
WorkersKt.runBackground(mDelayedLoad);
else
setupMediaLibraryReceiver();
}
@ -111,7 +112,7 @@ public class SearchFragment extends SearchSupportFragment implements SearchSuppo
@Override
public void onReceive(Context context, Intent intent) {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(this);
VLCApplication.runBackground(mDelayedLoad);
WorkersKt.runBackground(mDelayedLoad);
}
};
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(libraryReadyReceiver, new IntentFilter(VLCApplication.ACTION_MEDIALIBRARY_READY));

6
vlc-android/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java

@ -44,7 +44,6 @@ import org.videolan.medialibrary.Tools;
import org.videolan.medialibrary.media.MediaWrapper;
import org.videolan.vlc.PlaybackService;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.databinding.TvAudioPlayerBinding;
import org.videolan.vlc.gui.helpers.AudioUtil;
import org.videolan.vlc.gui.helpers.MediaComparators;
@ -53,6 +52,7 @@ import org.videolan.vlc.gui.preferences.PreferencesActivity;
import org.videolan.vlc.gui.tv.browser.BaseTvActivity;
import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.WorkersKt;
import java.util.ArrayList;
import java.util.Collections;
@ -150,12 +150,12 @@ public class AudioPlayerActivity extends BaseTvActivity implements PlaybackServi
}
private void updateBackground() {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(mCurrentCoverArt), mBinding.albumCover.getWidth());
final Bitmap blurredCover = cover != null ? UiTools.blurBitmap(cover) : null;
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (cover == null) {

4
vlc-android/src/org/videolan/vlc/gui/tv/browser/SongsBrowserFragment.java

@ -37,8 +37,8 @@ import android.text.TextUtils;
import org.jetbrains.annotations.Nullable;
import org.videolan.medialibrary.media.MediaLibraryItem;
import org.videolan.medialibrary.media.MediaWrapper;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.tv.TvUtil;
import org.videolan.vlc.util.WorkersKt;
import org.videolan.vlc.viewmodels.audio.TracksProvider;
import java.util.ArrayList;
@ -63,7 +63,7 @@ public class SongsBrowserFragment extends CategoriesFragment<TracksProvider> {
@Override
public void onItemClicked(Presenter.ViewHolder viewHolder, final Object item, RowPresenter.ViewHolder viewHolder1, Row row) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
int position = 0;

3
vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java

@ -141,6 +141,7 @@ import org.videolan.vlc.util.Strings;
import org.videolan.vlc.util.SubtitlesDownloader;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.VLCInstance;
import org.videolan.vlc.util.WorkersKt;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@ -910,7 +911,7 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
if(data.hasExtra(FilePickerFragment.EXTRA_MRL)) {
mService.addSubtitleTrack(Uri.parse(data.getStringExtra(FilePickerFragment.EXTRA_MRL)), true);
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
MediaDatabase.getInstance().saveSlave(mService.getCurrentMediaLocation(), Media.Slave.Type.Subtitle, 2, data.getStringExtra(FilePickerFragment.EXTRA_MRL));

6
vlc-android/src/org/videolan/vlc/gui/view/AudioMediaSwitcher.java

@ -27,8 +27,8 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import org.videolan.vlc.PlaybackService;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.helpers.AudioUtil;
import org.videolan.vlc.util.WorkersKt;
public abstract class AudioMediaSwitcher extends FlingViewGroup {
@ -48,13 +48,13 @@ public abstract class AudioMediaSwitcher extends FlingViewGroup {
final String artMrl = service.getCoverArt();
final String prevArtMrl = service.getPrevCoverArt();
final String nextArtMrl = service.getNextCoverArt();
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap coverCurrent = AudioUtil.readCoverBitmap(Uri.decode(artMrl), 512);
final Bitmap coverPrev = AudioUtil.readCoverBitmap(Uri.decode(prevArtMrl), 512);
final Bitmap coverNext = AudioUtil.readCoverBitmap(Uri.decode(nextArtMrl), 512);
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
removeAllViews();

2
vlc-android/src/org/videolan/vlc/util/FileUtils.java

@ -243,7 +243,7 @@ public class FileUtils {
}
private static void asyncRecursiveDelete(final File fileOrDirectory, final Callback callback) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
public void run() {
if (!fileOrDirectory.exists() || !fileOrDirectory.canWrite())
return;

10
vlc-android/src/org/videolan/vlc/util/SubtitlesDownloader.java

@ -111,7 +111,7 @@ public class SubtitlesDownloader {
return;
}
final List<String> finalLanguages = new ArrayList<>(languages);
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
SUBTITLES_DIRECTORY.mkdirs();
@ -304,7 +304,7 @@ public class SubtitlesDownloader {
}
}
if (mCallback != null)
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
mCallback.onRequestEnded(!success.isEmpty());
@ -393,7 +393,7 @@ public class SubtitlesDownloader {
private void showSumup(final String displayText) {
if (mContext == null) return;
VLCApplication.runOnMainThread(new Runnable(){
WorkersKt.runOnMainThread(new Runnable(){
public void run() {
mSumUpDialog = new AlertDialog.Builder(mContext).setTitle(R.string.dialog_subloader_sumup)
.setMessage(displayText)
@ -476,7 +476,7 @@ public class SubtitlesDownloader {
private void showSnackBar(final String text) {
if (mContext instanceof AppCompatActivity && !(mContext instanceof VideoPlayerActivity) && !mContext.isFinishing()) {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
View v = mContext.findViewById(R.id.fragment_placeholder);
@ -486,7 +486,7 @@ public class SubtitlesDownloader {
}
});
} else {
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
Toast.makeText(VLCApplication.getAppContext(), text, Toast.LENGTH_SHORT).show();

2
vlc-android/src/org/videolan/vlc/util/ThumbnailsProvider.java

@ -68,7 +68,7 @@ public class ThumbnailsProvider {
if (bitmap != null) {
BitmapCache.getInstance().addBitmapToMemCache(thumbPath, bitmap);
if (hasCache)
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
media.setThumbnail(thumbPath);

2
vlc-android/src/org/videolan/vlc/util/VLCInstance.java

@ -60,7 +60,7 @@ public class VLCInstance {
// TODO change LibVLC signature to accept a List instead of an ArrayList
sLibVLC = new LibVLC(context, VLCOptions.getLibOptions());
VLCApplication.runBackground(sCopyLua);
WorkersKt.runBackground(sCopyLua);
}
return sLibVLC;
}

17
vlc-android/src/org/videolan/vlc/util/Workers.kt

@ -0,0 +1,17 @@
package org.videolan.vlc.util
import android.os.Looper
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.launch
fun runBackground(runnable: Runnable) {
if (Looper.myLooper() != Looper.getMainLooper())
runnable.run()
else launch { runnable.run() }
}
fun runOnMainThread(runnable: Runnable) {
if (Looper.myLooper() == Looper.getMainLooper())
runnable.run()
else launch(UI) { runnable.run() }
}

5
vlc-android/src/org/videolan/vlc/widget/VLCAppWidgetProvider.java

@ -41,6 +41,7 @@ import org.videolan.vlc.StartActivity;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.helpers.AudioUtil;
import org.videolan.vlc.util.Strings;
import org.videolan.vlc.util.WorkersKt;
import java.util.Locale;
@ -118,11 +119,11 @@ abstract public class VLCAppWidgetProvider extends AppWidgetProvider {
} else if (ACTION_WIDGET_UPDATE_COVER.equals(action)) {
final String artworkMrl = intent.getStringExtra("artworkMrl");
if (!TextUtils.isEmpty(artworkMrl)) {
VLCApplication.runBackground(new Runnable() {
WorkersKt.runBackground(new Runnable() {
@Override
public void run() {
final Bitmap cover = AudioUtil.readCoverBitmap(Uri.decode(artworkMrl), 320);
VLCApplication.runOnMainThread(new Runnable() {
WorkersKt.runOnMainThread(new Runnable() {
@Override
public void run() {
if (cover != null)

Loading…
Cancel
Save