Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit aaaf9396 authored by David Luhmer's avatar David Luhmer Committed by GitHub
Browse files

Merge pull request #53 from Unpublished/master

Migrate to Java 8 / AndroidX / update dependencies
parents 6ea3223e aab1c303
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
buildscript {
    repositories {
        jcenter()
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
    }
}

@@ -34,12 +34,26 @@ android {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions{
        // translations are imported from transifex, so no need to check here
        disable 'MissingTranslation'
        disable 'ExtraTranslation'
        disable 'MissingQuantity'
        disable 'InconsistentArrays'
        disable 'TypographyEllipsis'
    }
    productFlavors {
    }
}

dependencies {
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.annotation:annotation:1.0.2'
    implementation 'androidx.core:core:1.0.1'
    implementation 'androidx.fragment:fragment:1.0.0'

    implementation 'com.google.code.gson:gson:2.8.5'

+2 −2
Original line number Diff line number Diff line
@@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
distributionSha256Sum=36bf7ff499223d5139f005822130ccca784c91591b514677fd376eed966c907e
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip
distributionSha256Sum=336b6898b491f6334502d8074a6b8c2d73ed83b92123106bd4bf837f04111043
+11 −29
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;

import androidx.core.util.ObjectsCompat;

public class NextcloudRequest implements Serializable {

    private static final long serialVersionUID = 215521212534240L; //assign a long value
@@ -162,37 +164,17 @@ public class NextcloudRequest implements Serializable {

        NextcloudRequest rq = (NextcloudRequest)obj;
        boolean equal;
        equal  = checkEqual("accountName", this.accountName, rq.accountName);
        equal &= checkEqual("header", this.header, rq.header);
        equal &= checkEqual("method", this.method, rq.method);
        equal &= checkEqual("packageName", this.packageName, rq.packageName);
        equal &= checkEqual("parameter", this.parameter, rq.parameter);
        equal &= checkEqual("requestBody", this.requestBody, rq.requestBody);
        equal &= checkEqual("token", this.token, rq.token);
        equal &= checkEqual("url", this.url, rq.url);
        equal &= checkEqual("followRedirects", this.followRedirects, rq.followRedirects);
        equal  = ObjectsCompat.equals(this.accountName, rq.accountName);
        equal &= ObjectsCompat.equals(this.header, rq.header);
        equal &= ObjectsCompat.equals(this.method, rq.method);
        equal &= ObjectsCompat.equals(this.packageName, rq.packageName);
        equal &= ObjectsCompat.equals(this.parameter, rq.parameter);
        equal &= ObjectsCompat.equals(this.requestBody, rq.requestBody);
        equal &= ObjectsCompat.equals(this.token, rq.token);
        equal &= ObjectsCompat.equals(this.url, rq.url);
        equal &= ObjectsCompat.equals(this.followRedirects, rq.followRedirects);

        return equal;

        //return super.equals(obj);
    }

    private boolean checkEqual(String name, Object o1, Object o2) {
        if(o1 == null && o2 == null) {
            return true;
    }

        if(o1 != null) {
            boolean eq = o1.equals(o2);
            if(!eq) {
                System.err.println("[" + name + "] Expected: " + o1 + " Was: " + o2);
            }
            return eq;
        } else {
            // o1 == null and o2 != null
            System.err.println("[" + name + "] Expected: " + o1 + " Was: " + o2);
        }

        return false;
    }
}
+33 −61
Original line number Diff line number Diff line
@@ -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;
@@ -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() {
@@ -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;
    }
@@ -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;
@@ -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() {
+1 −7
Original line number Diff line number Diff line
@@ -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
@@ -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));
    }

}