diff --git a/README.md b/README.md index 3a9eb00..1dcdcf4 100644 --- a/README.md +++ b/README.md @@ -1,44 +1 @@ -# A Stylish Music Player - -[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/ryanhoo/StylishMusicPlayer#license) -[![platform](https://img.shields.io/badge/platform-Android-yellow.svg)](https://www.android.com) -[![API](https://img.shields.io/badge/API-16%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=16) -[![gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/stylist-music-player/bug-report) -[![PRs Welcome](https://img.shields.io/badge/prs-welcome-brightgreen.svg)](http://makeapullrequest.com) - -![Artboard](materials/Artboard.png) - -## TODO - -- Lyric Support -- Settings - -## Acknowledgements - -Thanks to these projects and libraries: - -**Libraries** - -- [RxJava](https://github.com/ReactiveX/RxJava) -- [RxAndroid](https://github.com/ReactiveX/RxAndroid) -- [Retrofit](https://github.com/square/retrofit) -- [Butter Knife](https://github.com/JakeWharton/butterknife) -- [Calligraphy](https://github.com/chrisjenx/Calligraphy) -- [LiteOrm](https://github.com/litesuits/android-lite-orm) - -**Design** - -- [Material icons](https://design.google.com/icons/) - - -## License - -> The MIT License (MIT) - -> Copyright (c) 2016 Ryan Hoo - -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +fork from stylish music player \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 137cde5..a1395dc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,16 +1,15 @@ import java.text.SimpleDateFormat apply plugin: 'com.android.application' -apply plugin: 'android-apt' android { - compileSdkVersion 24 - buildToolsVersion '24.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId 'io.github.ryanhoo.music' - minSdkVersion 16 - targetSdkVersion 22 + minSdkVersion 22 + targetSdkVersion 26 versionCode getVersionCode("$BUILD") versionName "$VERSION" vectorDrawables.useSupportLibrary = true @@ -24,18 +23,18 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:24.2.0' - compile 'com.android.support:design:24.2.0' - compile 'com.android.support:recyclerview-v7:24.2.0' - - compile 'io.reactivex:rxjava:1.1.9' - compile 'io.reactivex:rxandroid:1.2.1' - compile 'com.jakewharton:butterknife:8.4.0' - apt 'com.jakewharton:butterknife-compiler:8.4.0' - - compile 'uk.co.chrisjenx:calligraphy:2.2.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:recyclerview-v7:27.1.1' + + implementation 'io.reactivex.rxjava2:rxjava:2.1.1' + implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' + + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + + implementation 'uk.co.chrisjenx:calligraphy:2.2.0' } def getVersionCode(build) { diff --git a/app/src/main/java/io/github/ryanhoo/music/RxBus.java b/app/src/main/java/io/github/ryanhoo/music/RxBus.java index 8f8c704..91c8be6 100644 --- a/app/src/main/java/io/github/ryanhoo/music/RxBus.java +++ b/app/src/main/java/io/github/ryanhoo/music/RxBus.java @@ -1,9 +1,14 @@ package io.github.ryanhoo.music; import android.util.Log; -import rx.Observable; -import rx.Subscriber; -import rx.subjects.PublishSubject; + +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; + +import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.subjects.PublishSubject; /** * Created with Android Studio. @@ -59,16 +64,21 @@ public Observable toObservable() { * A simple logger for RxBus which can also prevent * potential crash(OnErrorNotImplementedException) caused by error in the workflow. */ - public static Subscriber defaultSubscriber() { - return new Subscriber() { + public static DisposableObserver defaultSubscriber() { + return new DisposableObserver() { @Override - public void onCompleted() { + public void onError(Throwable e) { + Log.e(TAG, "What is this? Please solve this as soon as possible!", e); + } + + @Override + public void onComplete() { Log.d(TAG, "Duty off!!!"); } @Override - public void onError(Throwable e) { - Log.e(TAG, "What is this? Please solve this as soon as possible!", e); + protected void onStart() { + super.onStart(); } @Override diff --git a/app/src/main/java/io/github/ryanhoo/music/data/source/AppContract.java b/app/src/main/java/io/github/ryanhoo/music/data/source/AppContract.java index b5fee93..b568472 100644 --- a/app/src/main/java/io/github/ryanhoo/music/data/source/AppContract.java +++ b/app/src/main/java/io/github/ryanhoo/music/data/source/AppContract.java @@ -1,11 +1,11 @@ package io.github.ryanhoo.music.data.source; +import java.util.List; + import io.github.ryanhoo.music.data.model.Folder; import io.github.ryanhoo.music.data.model.PlayList; import io.github.ryanhoo.music.data.model.Song; -import rx.Observable; - -import java.util.List; +import io.reactivex.Observable; /** * Created with Android Studio. diff --git a/app/src/main/java/io/github/ryanhoo/music/data/source/AppLocalDataSource.java b/app/src/main/java/io/github/ryanhoo/music/data/source/AppLocalDataSource.java index 49846d3..8c17428 100644 --- a/app/src/main/java/io/github/ryanhoo/music/data/source/AppLocalDataSource.java +++ b/app/src/main/java/io/github/ryanhoo/music/data/source/AppLocalDataSource.java @@ -1,22 +1,26 @@ package io.github.ryanhoo.music.data.source; import android.content.Context; +import android.support.annotation.NonNull; import android.util.Log; + import com.litesuits.orm.LiteOrm; import com.litesuits.orm.db.assit.QueryBuilder; import com.litesuits.orm.db.model.ConflictAlgorithm; -import io.github.ryanhoo.music.data.model.Folder; -import io.github.ryanhoo.music.data.model.PlayList; -import io.github.ryanhoo.music.data.model.Song; -import io.github.ryanhoo.music.utils.DBUtils; -import rx.Observable; -import rx.Subscriber; import java.io.File; import java.util.Date; import java.util.Iterator; import java.util.List; +import io.github.ryanhoo.music.data.model.Folder; +import io.github.ryanhoo.music.data.model.PlayList; +import io.github.ryanhoo.music.data.model.Song; +import io.github.ryanhoo.music.utils.DBUtils; +import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; + /** * Created with Android Studio. * User: ryan.hoo.j@gmail.com @@ -40,9 +44,9 @@ public AppLocalDataSource(Context context, LiteOrm orm) { @Override public Observable> playLists() { - return Observable.create(new Observable.OnSubscribe>() { + return Observable.create(new ObservableOnSubscribe>() { @Override - public void call(Subscriber> subscriber) { + public void subscribe(@NonNull ObservableEmitter> e) { List playLists = mLiteOrm.query(PlayList.class); if (playLists.isEmpty()) { // First query, create the default play list @@ -51,8 +55,8 @@ public void call(Subscriber> subscriber) { Log.d(TAG, "Create default playlist(Favorite) with " + (result == 1 ? "success" : "failure")); playLists.add(playList); } - subscriber.onNext(playLists); - subscriber.onCompleted(); + e.onNext(playLists); + e.onComplete(); } }); } @@ -64,54 +68,55 @@ public List cachedPlayLists() { @Override public Observable create(final PlayList playList) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { Date now = new Date(); playList.setCreatedAt(now); playList.setUpdatedAt(now); long result = mLiteOrm.save(playList); if (result > 0) { - subscriber.onNext(playList); + e.onNext(playList); } else { - subscriber.onError(new Exception("Create play list failed")); + e.onError(new Exception("Create play list failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); + } @Override public Observable update(final PlayList playList) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { playList.setUpdatedAt(new Date()); long result = mLiteOrm.update(playList); if (result > 0) { - subscriber.onNext(playList); + e.onNext(playList); } else { - subscriber.onError(new Exception("Update play list failed")); + e.onError(new Exception("Update play list failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable delete(final PlayList playList) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { long result = mLiteOrm.delete(playList); if (result > 0) { - subscriber.onNext(playList); + e.onNext(playList); } else { - subscriber.onError(new Exception("Delete play list failed")); + e.onError(new Exception("Delete play list failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @@ -120,9 +125,9 @@ public void call(Subscriber subscriber) { @Override public Observable> folders() { - return Observable.create(new Observable.OnSubscribe>() { + return Observable.create(new ObservableOnSubscribe>() { @Override - public void call(Subscriber> subscriber) { + public void subscribe(@NonNull ObservableEmitter> e) { if (PreferenceManager.isFirstQueryFolders(mContext)) { List defaultFolders = DBUtils.generateDefaultFolders(); long result = mLiteOrm.save(defaultFolders); @@ -132,35 +137,35 @@ public void call(Subscriber> subscriber) { List folders = mLiteOrm.query( QueryBuilder.create(Folder.class).appendOrderAscBy(Folder.COLUMN_NAME) ); - subscriber.onNext(folders); - subscriber.onCompleted(); + e.onNext(folders); + e.onComplete(); } }); } @Override public Observable create(final Folder folder) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { folder.setCreatedAt(new Date()); long result = mLiteOrm.save(folder); if (result > 0) { - subscriber.onNext(folder); + e.onNext(folder); } else { - subscriber.onError(new Exception("Create folder failed")); + e.onError(new Exception("Create folder failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable> create(final List folders) { - return Observable.create(new Observable.OnSubscribe>() { + return Observable.create(new ObservableOnSubscribe>() { @Override - public void call(Subscriber> subscriber) { + public void subscribe(@NonNull ObservableEmitter> e) { Date now = new Date(); for (Folder folder : folders) { folder.setCreatedAt(now); @@ -171,53 +176,53 @@ public void call(Subscriber> subscriber) { List allNewFolders = mLiteOrm.query( QueryBuilder.create(Folder.class).appendOrderAscBy(Folder.COLUMN_NAME) ); - subscriber.onNext(allNewFolders); + e.onNext(allNewFolders); } else { - subscriber.onError(new Exception("Create folders failed")); + e.onError(new Exception("Create folders failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable update(final Folder folder) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { mLiteOrm.delete(folder); long result = mLiteOrm.save(folder); if (result > 0) { - subscriber.onNext(folder); + e.onNext(folder); } else { - subscriber.onError(new Exception("Update folder failed")); + e.onError(new Exception("Update folder failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable delete(final Folder folder) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { long result = mLiteOrm.delete(folder); if (result > 0) { - subscriber.onNext(folder); + e.onNext(folder); } else { - subscriber.onError(new Exception("Delete folder failed")); + e.onError(new Exception("Delete folder failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable> insert(final List songs) { - return Observable.create(new Observable.OnSubscribe>() { + return Observable.create(new ObservableOnSubscribe>() { @Override - public void call(Subscriber> subscriber) { + public void subscribe(@NonNull ObservableEmitter> e) { for (Song song : songs) { mLiteOrm.insert(song, ConflictAlgorithm.Abort); } @@ -232,33 +237,33 @@ public void call(Subscriber> subscriber) { mLiteOrm.delete(song); } } - subscriber.onNext(allSongs); - subscriber.onCompleted(); + e.onNext(allSongs); + e.onComplete(); } }); } @Override public Observable update(final Song song) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { int result = mLiteOrm.update(song); if (result > 0) { - subscriber.onNext(song); + e.onNext(song); } else { - subscriber.onError(new Exception("Update song failed")); + e.onError(new Exception("Update song failed")); } - subscriber.onCompleted(); + e.onComplete(); } }); } @Override public Observable setSongAsFavorite(final Song song, final boolean isFavorite) { - return Observable.create(new Observable.OnSubscribe() { + return Observable.create(new ObservableOnSubscribe() { @Override - public void call(Subscriber subscriber) { + public void subscribe(@NonNull ObservableEmitter e) { List playLists = mLiteOrm.query( QueryBuilder.create(PlayList.class).whereEquals(PlayList.COLUMN_FAVORITE, String.valueOf(true)) ); @@ -278,15 +283,15 @@ public void call(Subscriber subscriber) { mLiteOrm.insert(song, ConflictAlgorithm.Replace); long result = mLiteOrm.insert(favorite, ConflictAlgorithm.Replace); if (result > 0) { - subscriber.onNext(song); + e.onNext(song); } else { if (isFavorite) { - subscriber.onError(new Exception("Set song as favorite failed")); + e.onError(new Exception("Set song as favorite failed")); } else { - subscriber.onError(new Exception("Set song as unfavorite failed")); + e.onError(new Exception("Set song as unfavorite failed")); } } - subscriber.onCompleted(); + e.onComplete(); } }); } diff --git a/app/src/main/java/io/github/ryanhoo/music/data/source/AppRepository.java b/app/src/main/java/io/github/ryanhoo/music/data/source/AppRepository.java index b6fb8ec..ade4ddd 100644 --- a/app/src/main/java/io/github/ryanhoo/music/data/source/AppRepository.java +++ b/app/src/main/java/io/github/ryanhoo/music/data/source/AppRepository.java @@ -1,15 +1,15 @@ package io.github.ryanhoo.music.data.source; +import java.util.ArrayList; +import java.util.List; + import io.github.ryanhoo.music.Injection; import io.github.ryanhoo.music.data.model.Folder; import io.github.ryanhoo.music.data.model.PlayList; import io.github.ryanhoo.music.data.model.Song; import io.github.ryanhoo.music.data.source.db.LiteOrmHelper; -import rx.Observable; -import rx.functions.Action1; - -import java.util.ArrayList; -import java.util.List; +import io.reactivex.Observable; +import io.reactivex.functions.Consumer; /** * Created with Android Studio. @@ -46,9 +46,9 @@ public static AppRepository getInstance() { @Override public Observable> playLists() { return mLocalDataSource.playLists() - .doOnNext(new Action1>() { + .doOnNext(new Consumer>() { @Override - public void call(List playLists) { + public void accept(List playLists) { mCachedPlayLists = playLists; } }); diff --git a/app/src/main/java/io/github/ryanhoo/music/player/PlaybackService.java b/app/src/main/java/io/github/ryanhoo/music/player/PlaybackService.java index f9586ed..3de23a1 100644 --- a/app/src/main/java/io/github/ryanhoo/music/player/PlaybackService.java +++ b/app/src/main/java/io/github/ryanhoo/music/player/PlaybackService.java @@ -8,7 +8,7 @@ import android.os.Binder; import android.os.IBinder; import android.support.annotation.Nullable; -import android.support.v7.app.NotificationCompat; +import android.support.v4.app.NotificationCompat; import android.widget.RemoteViews; import io.github.ryanhoo.music.R; import io.github.ryanhoo.music.data.model.PlayList; diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseActivity.java b/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseActivity.java index 749a12b..692f7bc 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseActivity.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseActivity.java @@ -12,10 +12,11 @@ import android.util.DisplayMetrics; import android.view.MenuItem; import android.view.Window; + import io.github.ryanhoo.music.R; import io.github.ryanhoo.music.utils.GradientUtils; -import rx.Subscription; -import rx.subscriptions.CompositeSubscription; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.disposables.Disposable; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; /** @@ -27,7 +28,7 @@ */ public abstract class BaseActivity extends AppCompatActivity { - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; @Override protected void attachBaseContext(Context newBase) { @@ -58,14 +59,14 @@ public void onAttachedToWindow() { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addSubscription(subscribeEvents()); + addDisposable(subscribeEvents()); } @Override protected void onDestroy() { super.onDestroy(); - if (mSubscriptions != null) { - mSubscriptions.clear(); + if (mDisposables != null) { + mDisposables.clear(); } } @@ -95,15 +96,15 @@ protected ActionBar supportActionBar(Toolbar toolbar) { return actionBar; } - protected void addSubscription(Subscription subscription) { - if (subscription == null) return; - if (mSubscriptions == null) { - mSubscriptions = new CompositeSubscription(); + protected void addDisposable(Disposable disposable) { + if (disposable == null) return; + if (mDisposables == null) { + mDisposables = new CompositeDisposable(); } - mSubscriptions.add(subscription); + mDisposables.add(disposable); } - protected Subscription subscribeEvents() { + protected Disposable subscribeEvents() { return null; } } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseFragment.java index fa87010..3b765b8 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/base/BaseFragment.java @@ -5,8 +5,9 @@ import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.View; -import rx.Subscription; -import rx.subscriptions.CompositeSubscription; + +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.disposables.Disposable; /** * Created with Android Studio. @@ -17,7 +18,7 @@ */ public abstract class BaseFragment extends Fragment { - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; @Override public void onAttach(Context context) { @@ -27,26 +28,26 @@ public void onAttach(Context context) { @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - addSubscription(subscribeEvents()); + addDisposable(subscribeEvents()); } @Override public void onDestroyView() { super.onDestroyView(); - if (mSubscriptions != null) { - mSubscriptions.clear(); + if (mDisposables != null) { + mDisposables.clear(); } } - protected Subscription subscribeEvents() { - return null; + protected void addDisposable(Disposable disposable) { + if (disposable == null) return; + if (mDisposables == null) { + mDisposables = new CompositeDisposable(); + } + mDisposables.add(disposable); } - protected void addSubscription(Subscription subscription) { - if (subscription == null) return; - if (mSubscriptions == null) { - mSubscriptions = new CompositeSubscription(); - } - mSubscriptions.add(subscription); + protected Disposable subscribeEvents() { + return null; } } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/details/PlayListDetailsPresenter.java b/app/src/main/java/io/github/ryanhoo/music/ui/details/PlayListDetailsPresenter.java index b962b2a..c67b185 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/details/PlayListDetailsPresenter.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/details/PlayListDetailsPresenter.java @@ -5,11 +5,10 @@ import io.github.ryanhoo.music.data.model.Song; import io.github.ryanhoo.music.data.source.AppRepository; import io.github.ryanhoo.music.event.PlayListUpdatedEvent; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; /** * Created with Android Studio. @@ -22,12 +21,12 @@ public class PlayListDetailsPresenter implements PlayListDetailsContract.Present private PlayListDetailsContract.View mView; private AppRepository mRepository; - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; public PlayListDetailsPresenter(AppRepository repository, PlayListDetailsContract.View view) { mView = view; mRepository = repository; - mSubscriptions = new CompositeSubscription(); + mDisposables = new CompositeDisposable(); mView.setPresenter(this); } @@ -39,72 +38,70 @@ public void subscribe() { @Override public void unsubscribe() { mView = null; - mSubscriptions.clear(); + mDisposables.clear(); } @Override - public void addSongToPlayList(Song song, PlayList playList) { + public void addSongToPlayList(Song song, final PlayList playList) { if (playList.isFavorite()) { song.setFavorite(true); } playList.addSong(song, 0); - Subscription subscription = mRepository.update(playList) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } - @Override - public void onCompleted() { - mView.hideLoading(); - } + @Override + public void onNext(Object o) { + RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); + } - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } - @Override - public void onNext(PlayList playList) { - RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); - } - }); - mSubscriptions.add(subscription); + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mRepository.update(playList) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override - public void delete(final Song song, PlayList playList) { + public void delete(final Song song, final PlayList playList) { playList.removeSong(song); - Subscription subscription = mRepository.update(playList) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } - @Override - public void onCompleted() { - mView.hideLoading(); - } + @Override + public void onNext(Object o) { + mView.onSongDeleted(song); + RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); + } - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } - @Override - public void onNext(PlayList playList) { - mView.onSongDeleted(song); - RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); - } - }); - mSubscriptions.add(subscription); + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mDisposables.add(disposableObserver); } } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/local/all/AllLocalMusicFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/local/all/AllLocalMusicFragment.java index 929f43f..7504b64 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/local/all/AllLocalMusicFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/local/all/AllLocalMusicFragment.java @@ -8,6 +8,9 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.Toast; + +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import io.github.ryanhoo.music.R; @@ -20,11 +23,9 @@ import io.github.ryanhoo.music.ui.base.adapter.OnItemClickListener; import io.github.ryanhoo.music.ui.common.DefaultDividerDecoration; import io.github.ryanhoo.music.ui.widget.RecyclerViewFastScroller; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; - -import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; /** * Created with Android Studio. @@ -77,12 +78,12 @@ public void onItemClick(int position) { // RxBus Events @Override - protected Subscription subscribeEvents() { + protected Disposable subscribeEvents() { return RxBus.getInstance().toObservable() .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(new Action1() { + .doOnNext(new Consumer() { @Override - public void call(Object o) { + public void accept(Object o) throws Exception { if (o instanceof PlayListUpdatedEvent) { mPresenter.loadLocalMusic(); } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/local/all/LocalMusicPresenter.java b/app/src/main/java/io/github/ryanhoo/music/ui/local/all/LocalMusicPresenter.java index 5251f3a..94ba3cf 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/local/all/LocalMusicPresenter.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/local/all/LocalMusicPresenter.java @@ -8,17 +8,6 @@ import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.util.Log; -import io.github.ryanhoo.music.data.model.Song; -import io.github.ryanhoo.music.data.source.AppRepository; -import io.github.ryanhoo.music.utils.FileUtils; -import rx.Observable; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; -import rx.functions.Func1; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; import java.io.File; import java.util.ArrayList; @@ -26,6 +15,17 @@ import java.util.Comparator; import java.util.List; +import io.github.ryanhoo.music.data.model.Song; +import io.github.ryanhoo.music.data.source.AppRepository; +import io.github.ryanhoo.music.utils.FileUtils; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.functions.Consumer; +import io.reactivex.functions.Function; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; + /** * Created with Android Studio. * User: ryan.hoo.j@gmail.com @@ -35,7 +35,7 @@ */ public class LocalMusicPresenter implements LocalMusicContract.Presenter, LoaderManager.LoaderCallbacks { - private static final String TAG = "LocalMusicPresenter"; + public static final String TAG = "LocalMusicPresenter"; private static final int URL_LOAD_LOCAL_MUSIC = 0; private static final Uri MEDIA_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; @@ -58,12 +58,12 @@ public class LocalMusicPresenter implements LocalMusicContract.Presenter, Loader private LocalMusicContract.View mView; private AppRepository mRepository; - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; public LocalMusicPresenter(AppRepository repository, LocalMusicContract.View view) { mView = view; mRepository = repository; - mSubscriptions = new CompositeSubscription(); + mDisposables = new CompositeDisposable(); mView.setPresenter(this); } @@ -75,7 +75,7 @@ public void subscribe() { @Override public void unsubscribe() { mView = null; - mSubscriptions.clear(); + mDisposables.clear(); } @Override @@ -100,10 +100,33 @@ public Loader onCreateLoader(int id, Bundle args) { @Override public void onLoadFinished(Loader loader, Cursor cursor) { - Subscription subscription = Observable.just(cursor) - .flatMap(new Func1>>() { + DisposableObserver disposableObserver = new DisposableObserver>() { + @Override + protected void onStart() { + mView.showProgress(); + } + + @Override + public void onNext(List songs) { + mView.onLocalMusicLoaded(songs); + mView.emptyView(songs.isEmpty()); + } + + @Override + public void onError(Throwable e) { + mView.hideProgress(); + Log.e(TAG, "onError: ", e); + } + + @Override + public void onComplete() { + mView.hideProgress(); + } + }; + Observable.just(cursor) + .flatMap(new Function>>() { @Override - public Observable> call(Cursor cursor) { + public Observable> apply(Cursor cursor) { List songs = new ArrayList<>(); if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); @@ -115,9 +138,9 @@ public Observable> call(Cursor cursor) { return mRepository.insert(songs); } }) - .doOnNext(new Action1>() { + .doOnNext(new Consumer>() { @Override - public void call(List songs) { + public void accept(List songs) throws Exception { Log.d(TAG, "onLoadFinished: " + songs.size()); Collections.sort(songs, new Comparator() { @Override @@ -125,35 +148,12 @@ public int compare(Song left, Song right) { return left.getDisplayName().compareTo(right.getDisplayName()); } }); - } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber>() { - @Override - public void onStart() { - mView.showProgress(); - } - - @Override - public void onCompleted() { - mView.hideProgress(); - } - - @Override - public void onError(Throwable throwable) { - mView.hideProgress(); - Log.e(TAG, "onError: ", throwable); - } - - @Override - public void onNext(List songs) { - mView.onLocalMusicLoaded(songs); - mView.emptyView(songs.isEmpty()); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/local/filesystem/FileSystemActivity.java b/app/src/main/java/io/github/ryanhoo/music/ui/local/filesystem/FileSystemActivity.java index ddd6feb..a313046 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/local/filesystem/FileSystemActivity.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/local/filesystem/FileSystemActivity.java @@ -9,6 +9,15 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; + +import java.io.File; +import java.util.ArrayList; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import io.github.ryanhoo.music.R; @@ -18,15 +27,11 @@ import io.github.ryanhoo.music.ui.base.adapter.OnItemClickListener; import io.github.ryanhoo.music.ui.base.adapter.OnItemLongClickListener; import io.github.ryanhoo.music.ui.common.DefaultDividerDecoration; -import rx.Observable; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Func1; -import rx.schedulers.Schedulers; - -import java.io.File; -import java.util.*; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Function; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; /** * Created with Android Studio. @@ -166,10 +171,26 @@ private String getToolbarTitle(File parent) { // Load files private void loadFiles(final File parent) { - Subscription subscription = Observable.just(parent) - .flatMap(new Func1>>() { + DisposableObserver disposableObserver = new DisposableObserver>() { + @Override + public void onNext(List files) { + onFilesLoaded(parent, files); + } + + @Override + public void onError(Throwable e) { + Log.e(TAG, "onError: ", e); + } + + @Override + public void onComplete() { + toggleEmptyViewVisibility(); + } + }; + Observable.just(parent) + .flatMap(new Function>>() { @Override - public Observable> call(File parent) { + public Observable> apply(File parent) { List files = Arrays.asList(parent.listFiles(SystemFileFilter.DEFAULT_INSTANCE)); Collections.sort(files, new Comparator() { @Override @@ -193,23 +214,8 @@ public int compare(File f1, File f2) { }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber>() { - @Override - public void onCompleted() { - toggleEmptyViewVisibility(); - } - - @Override - public void onError(Throwable throwable) { - Log.e(TAG, "onError: ", throwable); - } - - @Override - public void onNext(List files) { - onFilesLoaded(parent, files); - } - }); - addSubscription(subscription); + .subscribe(disposableObserver); + addDisposable(disposableObserver); } private void onFilesLoaded(File parent, List files) { diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderFragment.java index 2e6d7a2..31d0ab2 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderFragment.java @@ -5,9 +5,17 @@ import android.support.annotation.Nullable; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; -import android.view.*; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.Toast; + +import java.io.File; +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import io.github.ryanhoo.music.R; @@ -24,12 +32,10 @@ import io.github.ryanhoo.music.ui.local.filesystem.FileSystemActivity; import io.github.ryanhoo.music.ui.playlist.AddToPlayListDialogFragment; import io.github.ryanhoo.music.ui.playlist.EditPlayListDialogFragment; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; - -import java.io.File; -import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; +import io.reactivex.observers.DisposableObserver; /** * Created with Android Studio. @@ -87,18 +93,20 @@ public void onDestroyView() { // RxBus Events @Override - protected Subscription subscribeEvents() { - return RxBus.getInstance().toObservable() + protected Disposable subscribeEvents() { + DisposableObserver disposableObserver = RxBus.defaultSubscriber(); + RxBus.getInstance().toObservable() .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(new Action1() { + .doOnNext(new Consumer() { @Override - public void call(Object o) { + public void accept(Object o) { if (o instanceof AddFolderEvent) { onAddFolders((AddFolderEvent) o); } } }) - .subscribe(RxBus.defaultSubscriber()); + .subscribe(disposableObserver); + return disposableObserver; } private void onAddFolders(AddFolderEvent event) { diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderPresenter.java b/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderPresenter.java index ebe9cd3..5e914d1 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderPresenter.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/local/folder/FolderPresenter.java @@ -1,5 +1,10 @@ package io.github.ryanhoo.music.ui.local.folder; +import java.io.File; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + import io.github.ryanhoo.music.RxBus; import io.github.ryanhoo.music.data.model.Folder; import io.github.ryanhoo.music.data.model.PlayList; @@ -7,19 +12,14 @@ import io.github.ryanhoo.music.data.source.AppRepository; import io.github.ryanhoo.music.event.PlayListUpdatedEvent; import io.github.ryanhoo.music.utils.FileUtils; -import rx.Observable; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; -import rx.functions.Func1; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -import java.io.File; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.functions.Consumer; +import io.reactivex.functions.Function; +import io.reactivex.functions.Predicate; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; /** * Created with Android Studio. @@ -32,12 +32,12 @@ public class FolderPresenter implements FolderContract.Presenter { private FolderContract.View mView; private AppRepository mRepository; - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; public FolderPresenter(AppRepository repository, FolderContract.View view) { mView = view; mRepository = repository; - mSubscriptions = new CompositeSubscription(); + mDisposables = new CompositeDisposable(); mView.setPresenter(this); } @@ -49,16 +49,38 @@ public void subscribe() { @Override public void unsubscribe() { mView = null; - mSubscriptions.clear(); + mDisposables.clear(); } @Override public void loadFolders() { - Subscription subscription = mRepository.folders() + DisposableObserver disposableObserver = new DisposableObserver>() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(List folders) { + mView.onFoldersLoaded(folders); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mRepository.folders() .subscribeOn(Schedulers.io()) - .doOnNext(new Action1>() { + .doOnNext(new Consumer>() { @Override - public void call(List folders) { + public void accept(List folders) { Collections.sort(folders, new Comparator() { @Override public int compare(Folder f1, Folder f2) { @@ -68,37 +90,38 @@ public int compare(Folder f1, Folder f2) { } }) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber>() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(List folders) { - mView.onFoldersLoaded(folders); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void addFolders(List folders, final List existedFolders) { - Subscription subscription = Observable.from(folders) - .filter(new Func1() { + DisposableObserver disposableObserver = new DisposableObserver>() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(List allNewFolders) { + mView.onFoldersAdded(allNewFolders); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + Observable.fromIterable(folders) + .filter(new Predicate() { @Override - public Boolean call(File file) { + public boolean test(File file) throws Exception { for (Folder folder : existedFolders) { if (file.getAbsolutePath().equals(folder.getPath())) { return false; @@ -107,9 +130,9 @@ public Boolean call(File file) { return true; } }) - .flatMap(new Func1>() { + .flatMap(new Function>() { @Override - public Observable call(File file) { + public Observable apply(File file) { Folder folder = new Folder(); folder.setName(file.getName()); folder.setPath(file.getAbsolutePath()); @@ -120,15 +143,16 @@ public Observable call(File file) { } }) .toList() - .flatMap(new Func1, Observable>>() { + .toObservable() + .flatMap(new Function, Observable>>() { @Override - public Observable> call(List folders) { + public Observable> apply(List folders) { return mRepository.create(folders); } }) - .doOnNext(new Action1>() { + .doOnNext(new Consumer>() { @Override - public void call(List folders) { + public void accept(List folders) { Collections.sort(folders, new Comparator() { @Override public int compare(Folder f1, Folder f2) { @@ -139,37 +163,38 @@ public int compare(Folder f1, Folder f2) { }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber>() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(List allNewFolders) { - mView.onFoldersAdded(allNewFolders); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void refreshFolder(final Folder folder) { - Subscription subscription = Observable.just(FileUtils.musicFiles(new File(folder.getPath()))) - .flatMap(new Func1, Observable>() { + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(Folder folder) { + mView.onFolderUpdated(folder); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + Observable.just(FileUtils.musicFiles(new File(folder.getPath()))) + .flatMap(new Function, Observable>() { @Override - public Observable call(List songs) { + public Observable apply(List songs) { folder.setSongs(songs); folder.setNumOfSongs(songs.size()); return mRepository.update(folder); @@ -177,90 +202,73 @@ public Observable call(List songs) { }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(Folder folder) { - mView.onFolderUpdated(folder); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void deleteFolder(Folder folder) { - Subscription subscription = mRepository.delete(folder) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } - @Override - public void onCompleted() { - mView.hideLoading(); - } + @Override + public void onNext(Folder folder) { + mView.onFolderDeleted(folder); + } - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } - @Override - public void onNext(Folder folder) { - mView.onFolderDeleted(folder); - } - }); - mSubscriptions.add(subscription); + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + + mRepository.delete(folder) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void createPlayList(PlayList playList) { - Subscription subscription = mRepository - .create(playList) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } - @Override - public void onCompleted() { - mView.hideLoading(); - } + @Override + public void onNext(PlayList playList) { + mView.onPlayListCreated(playList); + } - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } - @Override - public void onNext(PlayList playList) { - mView.onPlayListCreated(playList); - } - }); - mSubscriptions.add(subscription); + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + + mRepository + .create(playList) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override @@ -273,31 +281,33 @@ public void addFolderToPlayList(final Folder folder, PlayList playList) { } } playList.addSong(folder.getSongs(), 0); - Subscription subscription = mRepository.update(playList) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } - @Override - public void onCompleted() { - mView.hideLoading(); - } + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } + @Override + public void onNext(PlayList playList) { + RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); + } - @Override - public void onNext(PlayList playList) { - RxBus.getInstance().post(new PlayListUpdatedEvent(playList)); - } - }); - mSubscriptions.add(subscription); + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mRepository.update(playList) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerFragment.java index 228ced1..3fc627c 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerFragment.java @@ -13,6 +13,7 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -31,9 +32,10 @@ import io.github.ryanhoo.music.ui.widget.ShadowImageView; import io.github.ryanhoo.music.utils.AlbumUtils; import io.github.ryanhoo.music.utils.TimeUtils; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; +import io.reactivex.observers.DisposableObserver; /** * Created with Android Studio. @@ -207,12 +209,13 @@ public void onFavoriteToggleAction(View view) { // RXBus Events @Override - protected Subscription subscribeEvents() { - return RxBus.getInstance().toObservable() + protected Disposable subscribeEvents() { + DisposableObserver disposableObserver = RxBus.defaultSubscriber(); + RxBus.getInstance().toObservable() .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(new Action1() { + .doOnNext(new Consumer() { @Override - public void call(Object o) { + public void accept(Object o) { if (o instanceof PlaySongEvent) { onPlaySongEvent((PlaySongEvent) o); } else if (o instanceof PlayListNowEvent) { @@ -220,7 +223,8 @@ public void call(Object o) { } } }) - .subscribe(RxBus.defaultSubscriber()); + .subscribe(disposableObserver); + return disposableObserver; } private void onPlaySongEvent(PlaySongEvent event) { diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerPresenter.java b/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerPresenter.java index 312056e..d3f6093 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerPresenter.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/music/MusicPlayerPresenter.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; + import io.github.ryanhoo.music.RxBus; import io.github.ryanhoo.music.data.model.Song; import io.github.ryanhoo.music.data.source.AppRepository; @@ -12,11 +13,10 @@ import io.github.ryanhoo.music.event.FavoriteChangeEvent; import io.github.ryanhoo.music.player.PlayMode; import io.github.ryanhoo.music.player.PlaybackService; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; /** * Created with Android Studio. @@ -30,7 +30,7 @@ public class MusicPlayerPresenter implements MusicPlayerContract.Presenter { private Context mContext; private MusicPlayerContract.View mView; private AppRepository mRepository; - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; private PlaybackService mPlaybackService; private boolean mIsServiceBound; @@ -61,7 +61,7 @@ public MusicPlayerPresenter(Context context, AppRepository repository, MusicPlay mContext = context; mView = view; mRepository = repository; - mSubscriptions = new CompositeSubscription(); + mDisposables = new CompositeDisposable(); mView.setPresenter(this); } @@ -85,7 +85,7 @@ public void unsubscribe() { // Release context reference mContext = null; mView = null; - mSubscriptions.clear(); + mDisposables.clear(); } @Override @@ -96,27 +96,28 @@ public void retrieveLastPlayMode() { @Override public void setSongAsFavorite(Song song, boolean favorite) { - Subscription subscription = mRepository.setSongAsFavorite(song, favorite) + DisposableObserver disposableObserver = new DisposableObserver() { + + @Override + public void onNext(Song song) { + mView.onSongSetAsFavorite(song); + RxBus.getInstance().post(new FavoriteChangeEvent(song)); + } + + @Override + public void onError(Throwable e) { + mView.handleError(e); + } + + @Override + public void onComplete() { + } + }; + mRepository.setSongAsFavorite(song, favorite) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - // Empty - } - - @Override - public void onError(Throwable e) { - mView.handleError(e); - } - - @Override - public void onNext(Song song) { - mView.onSongSetAsFavorite(song); - RxBus.getInstance().post(new FavoriteChangeEvent(song)); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/AddToPlayListDialogFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/AddToPlayListDialogFragment.java index a09259e..4d8647b 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/AddToPlayListDialogFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/AddToPlayListDialogFragment.java @@ -10,6 +10,9 @@ import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; + +import java.util.List; + import io.github.ryanhoo.music.R; import io.github.ryanhoo.music.data.model.PlayList; import io.github.ryanhoo.music.data.source.AppRepository; @@ -17,9 +20,7 @@ import io.github.ryanhoo.music.ui.base.adapter.ListAdapter; import io.github.ryanhoo.music.ui.base.adapter.OnItemClickListener; import io.github.ryanhoo.music.ui.common.DefaultDividerDecoration; -import rx.subscriptions.CompositeSubscription; - -import java.util.List; +import io.reactivex.disposables.CompositeDisposable; /** * Created with Android Studio. @@ -32,7 +33,7 @@ public class AddToPlayListDialogFragment extends BaseDialogFragment implements O RecyclerView recyclerView; - CompositeSubscription mSubscriptions = new CompositeSubscription(); + CompositeDisposable mDisposables = new CompositeDisposable(); AddPlayListAdapter mAdapter; Callback mCallback; @@ -58,7 +59,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { @Override public void onDestroyView() { - mSubscriptions.clear(); + mDisposables.clear(); super.onDestroyView(); } diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListFragment.java b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListFragment.java index 5ad3778..bf82746 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListFragment.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListFragment.java @@ -4,9 +4,16 @@ import android.support.annotation.Nullable; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; -import android.view.*; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.Toast; + +import java.util.List; + import butterknife.BindView; import butterknife.ButterKnife; import io.github.ryanhoo.music.R; @@ -17,15 +24,15 @@ import io.github.ryanhoo.music.event.PlayListCreatedEvent; import io.github.ryanhoo.music.event.PlayListNowEvent; import io.github.ryanhoo.music.event.PlayListUpdatedEvent; +import io.github.ryanhoo.music.event.PlaySongEvent; import io.github.ryanhoo.music.ui.base.BaseFragment; import io.github.ryanhoo.music.ui.base.adapter.OnItemClickListener; import io.github.ryanhoo.music.ui.common.DefaultDividerDecoration; import io.github.ryanhoo.music.ui.details.PlayListDetailsActivity; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; - -import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; +import io.reactivex.observers.DisposableObserver; /** * Created with Android Studio. @@ -82,12 +89,13 @@ public void onDestroyView() { // RxBus Events @Override - protected Subscription subscribeEvents() { - return RxBus.getInstance().toObservable() + protected Disposable subscribeEvents() { + DisposableObserver disposableObserver = RxBus.defaultSubscriber(); + RxBus.getInstance().toObservable() .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(new Action1() { + .doOnNext(new Consumer() { @Override - public void call(Object o) { + public void accept(Object o) { if (o instanceof PlayListCreatedEvent) { onPlayListCreatedEvent((PlayListCreatedEvent) o); } else if (o instanceof FavoriteChangeEvent) { @@ -97,7 +105,8 @@ public void call(Object o) { } } }) - .subscribe(RxBus.defaultSubscriber()); + .subscribe(disposableObserver); + return disposableObserver; } private void onPlayListCreatedEvent(PlayListCreatedEvent event) { diff --git a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListPresenter.java b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListPresenter.java index 0b89aff..3175cb8 100644 --- a/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListPresenter.java +++ b/app/src/main/java/io/github/ryanhoo/music/ui/playlist/PlayListPresenter.java @@ -1,14 +1,13 @@ package io.github.ryanhoo.music.ui.playlist; +import java.util.List; + import io.github.ryanhoo.music.data.model.PlayList; import io.github.ryanhoo.music.data.source.AppRepository; -import rx.Subscriber; -import rx.Subscription; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; -import rx.subscriptions.CompositeSubscription; - -import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.observers.DisposableObserver; +import io.reactivex.schedulers.Schedulers; /** * Created with Android Studio. @@ -21,12 +20,12 @@ public class PlayListPresenter implements PlayListContract.Presenter { private PlayListContract.View mView; private AppRepository mRepository; - private CompositeSubscription mSubscriptions; + private CompositeDisposable mDisposables; public PlayListPresenter(AppRepository repository, PlayListContract.View view) { mView = view; mRepository = repository; - mSubscriptions = new CompositeSubscription(); + mDisposables = new CompositeDisposable(); mView.setPresenter(this); } @@ -38,128 +37,127 @@ public void subscribe() { @Override public void unsubscribe() { mView = null; - mSubscriptions.clear(); + mDisposables.clear(); } @Override public void loadPlayLists() { - Subscription subscription = mRepository.playLists() + DisposableObserver disposableObserver = new DisposableObserver>() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(List playLists) { + mView.onPlayListsLoaded(playLists); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mRepository.playLists() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber>() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(List playLists) { - mView.onPlayListsLoaded(playLists); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void createPlayList(PlayList playList) { - Subscription subscription = mRepository - .create(playList) + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(PlayList result) { + mView.onPlayListCreated(result); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mRepository.create(playList) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(PlayList result) { - mView.onPlayListCreated(result); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override public void editPlayList(PlayList playList) { - Subscription subscription = mRepository - .update(playList) + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(PlayList result) { + mView.onPlayListEdited(result); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + + mRepository.update(playList) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(PlayList result) { - mView.onPlayListEdited(result); - } - }); - mSubscriptions.add(subscription); + .subscribe(disposableObserver); + mDisposables.add(disposableObserver); } @Override - public void deletePlayList(PlayList playList) { - Subscription subscription = mRepository.delete(playList) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onStart() { - mView.showLoading(); - } - - @Override - public void onCompleted() { - mView.hideLoading(); - } - - @Override - public void onError(Throwable e) { - mView.hideLoading(); - mView.handleError(e); - } - - @Override - public void onNext(PlayList playList) { - mView.onPlayListDeleted(playList); - } - }); - mSubscriptions.add(subscription); + public void deletePlayList(final PlayList playList) { + DisposableObserver disposableObserver = new DisposableObserver() { + @Override + protected void onStart() { + mView.showLoading(); + } + + @Override + public void onNext(Object o) { + mView.onPlayListDeleted(playList); + } + + @Override + public void onError(Throwable e) { + mView.hideLoading(); + mView.handleError(e); + } + + @Override + public void onComplete() { + mView.hideLoading(); + } + }; + mDisposables.add(disposableObserver); } } diff --git a/app/src/main/java/io/github/ryanhoo/music/utils/FileUtils.java b/app/src/main/java/io/github/ryanhoo/music/utils/FileUtils.java index fd42e3d..4c4a765 100644 --- a/app/src/main/java/io/github/ryanhoo/music/utils/FileUtils.java +++ b/app/src/main/java/io/github/ryanhoo/music/utils/FileUtils.java @@ -2,8 +2,11 @@ import android.media.MediaMetadataRetriever; import android.text.TextUtils; +import android.util.Log; + import io.github.ryanhoo.music.data.model.Folder; import io.github.ryanhoo.music.data.model.Song; +import io.github.ryanhoo.music.ui.local.all.LocalMusicPresenter; import java.io.File; import java.io.FileFilter; @@ -77,8 +80,13 @@ public static Song fileToMusic(File file) { if (file.length() == 0) return null; MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever(); - metadataRetriever.setDataSource(file.getAbsolutePath()); - + try {//add s + metadataRetriever.setDataSource(file.getAbsolutePath()); + } catch (Exception e) { + metadataRetriever.release(); + Log.d(LocalMusicPresenter.TAG, "metadataRetriever--Exception--" + e); + return null; + }//add end final int duration; String keyDuration = metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); @@ -99,6 +107,8 @@ public static Song fileToMusic(File file) { song.setAlbum(album); song.setDuration(duration); song.setSize((int) file.length()); + + metadataRetriever.release(); return song; } diff --git a/build.gradle b/build.gradle index b0898ac..2ceea80 100644 --- a/build.gradle +++ b/build.gradle @@ -1,24 +1,41 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + repositories { + maven { + url "https://maven.google.com" + } + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } jcenter() + mavenCentral() + google() + } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' - + classpath 'com.android.tools.build:gradle:3.1.3' +// classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } allprojects { repositories { + maven { + url "https://maven.google.com" + } + + mavenCentral() jcenter() + google() + flatDir { + dirs 'libs' + } + maven { url "https://jitpack.io" } } } task clean(type: Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 13372ae..f6b961f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7194a24..d58e3f3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Aug 24 17:00:21 CST 2016 +#Wed Jun 05 09:12:21 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/gradlew b/gradlew index 9d82f78..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec9973..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line