Loading build.gradle +4 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } productFlavors { } } Loading src/main/java/com/nextcloud/android/sso/api/NextcloudAPI.java +33 −61 Original line number Diff line number Diff line Loading @@ -32,16 +32,12 @@ import android.util.Log; import com.google.gson.Gson; import com.nextcloud.android.sso.aidl.IInputStreamService; import com.nextcloud.android.sso.aidl.IThreadListener; import com.nextcloud.android.sso.aidl.NextcloudRequest; import com.nextcloud.android.sso.aidl.ParcelFileDescriptorUtil; import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException; import com.nextcloud.android.sso.helper.ExponentialBackoff; import com.nextcloud.android.sso.model.SingleSignOnAccount; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; Loading Loading @@ -112,12 +108,7 @@ public class NextcloudAPI { } private void connectApiWithBackoff() { new ExponentialBackoff(1000, 10000, 2, 5, Looper.getMainLooper(), new Runnable() { @Override public void run() { connect(); } }).start(); new ExponentialBackoff(1000, 10000, 2, 5, Looper.getMainLooper(), this::connect).start(); } private void connect() { Loading Loading @@ -213,35 +204,29 @@ public class NextcloudAPI { } public <T> Observable<T> performRequestObservable(final Type type, final NextcloudRequest request) { return Observable.fromPublisher(new Publisher<T>() { @Override public void subscribe(Subscriber<? super T> s) { return Observable.fromPublisher( s-> { try { s.onNext((T) performRequest(type, request)); s.onComplete(); } catch (Exception e) { s.onError(e); } } }); } public <T> T performRequest(final @NonNull Type type, NextcloudRequest request) throws Exception { Log.d(TAG, "performRequest() called with: type = [" + type + "], request = [" + request + "]"); InputStream os = performNetworkRequest(request); Reader targetReader = new InputStreamReader(os); T result = null; try (InputStream os = performNetworkRequest(request); Reader targetReader = new InputStreamReader(os)) { if (type != Void.class) { result = gson.fromJson(targetReader, type); if (result != null) { Log.d(TAG, result.toString()); } } targetReader.close(); os.close(); } return result; } Loading Loading @@ -317,30 +302,18 @@ public class NextcloudAPI { request.setAccountName(getAccountName()); request.setToken(getAccountToken()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos) ) { oos.writeObject(request); oos.close(); baos.close(); InputStream is = new ByteArrayInputStream(baos.toByteArray()); try (InputStream is = new ByteArrayInputStream(baos.toByteArray()); ParcelFileDescriptor input = ParcelFileDescriptorUtil.pipeFrom(is, new IThreadListener() { @Override public void onThreadFinished(Thread thread) { Log.d(TAG, "copy data from service finished"); } }); thread -> Log.d(TAG, "copy data from service finished"))) { ParcelFileDescriptor requestBodyParcelFileDescriptor = null; if (requestBodyInputStream != null) { requestBodyParcelFileDescriptor = ParcelFileDescriptorUtil.pipeFrom(requestBodyInputStream, new IThreadListener() { @Override public void onThreadFinished(Thread thread) { Log.d(TAG, "copy data from service finished"); } }); requestBodyParcelFileDescriptor = ParcelFileDescriptorUtil.pipeFrom( requestBodyInputStream, thread -> Log.d(TAG, "copy data from service finished")); } ParcelFileDescriptor output; Loading @@ -349,17 +322,16 @@ public class NextcloudAPI { } else { output = mService.performNextcloudRequest(input); } return output; } } } public static <T> T deserializeObjectAndCloseStream(InputStream is) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(is); T result = (T) ois.readObject(); is.close(); ois.close(); return result; try (ObjectInputStream ois = new ObjectInputStream(is)) { return (T) ois.readObject(); } } protected Gson getGson() { Loading src/main/java/com/nextcloud/android/sso/helper/ReactivexHelper.java +1 −7 Original line number Diff line number Diff line Loading @@ -4,7 +4,6 @@ import com.nextcloud.android.sso.aidl.NextcloudRequest; import com.nextcloud.android.sso.api.NextcloudAPI; import io.reactivex.Completable; import io.reactivex.functions.Action; /** * Nextcloud SingleSignOn Loading @@ -30,12 +29,7 @@ public final class ReactivexHelper { private ReactivexHelper() { } public static Completable wrapInCompletable(final NextcloudAPI nextcloudAPI, final NextcloudRequest request) { return Completable.fromAction(new Action() { @Override public void run() throws Exception { nextcloudAPI.performRequest(Void.class, request); } }); return Completable.fromAction(() -> nextcloudAPI.performRequest(Void.class, request)); } } Loading Loading
build.gradle +4 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } productFlavors { } } Loading
src/main/java/com/nextcloud/android/sso/api/NextcloudAPI.java +33 −61 Original line number Diff line number Diff line Loading @@ -32,16 +32,12 @@ import android.util.Log; import com.google.gson.Gson; import com.nextcloud.android.sso.aidl.IInputStreamService; import com.nextcloud.android.sso.aidl.IThreadListener; import com.nextcloud.android.sso.aidl.NextcloudRequest; import com.nextcloud.android.sso.aidl.ParcelFileDescriptorUtil; import com.nextcloud.android.sso.exceptions.NextcloudApiNotRespondingException; import com.nextcloud.android.sso.helper.ExponentialBackoff; import com.nextcloud.android.sso.model.SingleSignOnAccount; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; Loading Loading @@ -112,12 +108,7 @@ public class NextcloudAPI { } private void connectApiWithBackoff() { new ExponentialBackoff(1000, 10000, 2, 5, Looper.getMainLooper(), new Runnable() { @Override public void run() { connect(); } }).start(); new ExponentialBackoff(1000, 10000, 2, 5, Looper.getMainLooper(), this::connect).start(); } private void connect() { Loading Loading @@ -213,35 +204,29 @@ public class NextcloudAPI { } public <T> Observable<T> performRequestObservable(final Type type, final NextcloudRequest request) { return Observable.fromPublisher(new Publisher<T>() { @Override public void subscribe(Subscriber<? super T> s) { return Observable.fromPublisher( s-> { try { s.onNext((T) performRequest(type, request)); s.onComplete(); } catch (Exception e) { s.onError(e); } } }); } public <T> T performRequest(final @NonNull Type type, NextcloudRequest request) throws Exception { Log.d(TAG, "performRequest() called with: type = [" + type + "], request = [" + request + "]"); InputStream os = performNetworkRequest(request); Reader targetReader = new InputStreamReader(os); T result = null; try (InputStream os = performNetworkRequest(request); Reader targetReader = new InputStreamReader(os)) { if (type != Void.class) { result = gson.fromJson(targetReader, type); if (result != null) { Log.d(TAG, result.toString()); } } targetReader.close(); os.close(); } return result; } Loading Loading @@ -317,30 +302,18 @@ public class NextcloudAPI { request.setAccountName(getAccountName()); request.setToken(getAccountToken()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos) ) { oos.writeObject(request); oos.close(); baos.close(); InputStream is = new ByteArrayInputStream(baos.toByteArray()); try (InputStream is = new ByteArrayInputStream(baos.toByteArray()); ParcelFileDescriptor input = ParcelFileDescriptorUtil.pipeFrom(is, new IThreadListener() { @Override public void onThreadFinished(Thread thread) { Log.d(TAG, "copy data from service finished"); } }); thread -> Log.d(TAG, "copy data from service finished"))) { ParcelFileDescriptor requestBodyParcelFileDescriptor = null; if (requestBodyInputStream != null) { requestBodyParcelFileDescriptor = ParcelFileDescriptorUtil.pipeFrom(requestBodyInputStream, new IThreadListener() { @Override public void onThreadFinished(Thread thread) { Log.d(TAG, "copy data from service finished"); } }); requestBodyParcelFileDescriptor = ParcelFileDescriptorUtil.pipeFrom( requestBodyInputStream, thread -> Log.d(TAG, "copy data from service finished")); } ParcelFileDescriptor output; Loading @@ -349,17 +322,16 @@ public class NextcloudAPI { } else { output = mService.performNextcloudRequest(input); } return output; } } } public static <T> T deserializeObjectAndCloseStream(InputStream is) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(is); T result = (T) ois.readObject(); is.close(); ois.close(); return result; try (ObjectInputStream ois = new ObjectInputStream(is)) { return (T) ois.readObject(); } } protected Gson getGson() { Loading
src/main/java/com/nextcloud/android/sso/helper/ReactivexHelper.java +1 −7 Original line number Diff line number Diff line Loading @@ -4,7 +4,6 @@ import com.nextcloud.android.sso.aidl.NextcloudRequest; import com.nextcloud.android.sso.api.NextcloudAPI; import io.reactivex.Completable; import io.reactivex.functions.Action; /** * Nextcloud SingleSignOn Loading @@ -30,12 +29,7 @@ public final class ReactivexHelper { private ReactivexHelper() { } public static Completable wrapInCompletable(final NextcloudAPI nextcloudAPI, final NextcloudRequest request) { return Completable.fromAction(new Action() { @Override public void run() throws Exception { nextcloudAPI.performRequest(Void.class, request); } }); return Completable.fromAction(() -> nextcloudAPI.performRequest(Void.class, request)); } } Loading