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

Unverified Commit 1f617089 authored by Chris Narkiewicz's avatar Chris Narkiewicz
Browse files

Add Parcelable interface to OwnCloudAccount and OwnCloudVersion



Parcelable interface is required to allow migration
of legacy code using raw platform Account passed
via Intent. To migrate those code paths, new User
model must be passed via Intent extras as well.

Since OwnCloudAccount and *Version are used (temporarily)
as implementation details of User, we need to make those
POJOs Parcelable as well.

Signed-off-by: default avatarChris Narkiewicz <hello@ezaquarii.com>
parent 842b066d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
160
 No newline at end of file
168
 No newline at end of file
+33 −0
Original line number Diff line number Diff line
package com.owncloud.android.lib.common;

import android.content.Intent;
import android.net.Uri;
import android.os.Parcel;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class OwnCloudAccountTest {

    @Test
    public void parcelableIsImplemented() {
        Uri uri = Uri.parse("https://nextcloud.localhost.localdomain");
        OwnCloudCredentials credentials = new OwnCloudBasicCredentials(
                "user",
                "pass",
                true
        );
        OwnCloudAccount original = new OwnCloudAccount(uri, credentials);
        Parcel parcel = Parcel.obtain();
        parcel.setDataPosition(0);
        parcel.writeParcelable(original, 0);
        parcel.setDataPosition(0);
        OwnCloudAccount retrieved = parcel.readParcelable(OwnCloudAccount.class.getClassLoader());
        Assert.assertNotSame(original, retrieved);
        Assert.assertEquals(original, retrieved);
    }
}
+79 −0
Original line number Diff line number Diff line
package com.owncloud.android.lib.common;

import android.content.Intent;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class OwnCloudBasicCredentialsTest {

    @Test
    public void notEquals() {

        OwnCloudBasicCredentials original = new OwnCloudBasicCredentials(
                "user",
                "pass",
                true
        );

        OwnCloudBasicCredentials[] differentCredentials = new OwnCloudBasicCredentials[] {
                new OwnCloudBasicCredentials(
                    "different user",
                    "pass",
                    true
                ),
                new OwnCloudBasicCredentials(
                        "user",
                        "different pass",
                        true
                ),
                new OwnCloudBasicCredentials(
                        "user",
                        "pass",
                        false
                ),
        };

        for (OwnCloudBasicCredentials modified : differentCredentials) {
            Assert.assertNotEquals(original, modified);
        }
    }

    @Test
    public void equals() {
        OwnCloudBasicCredentials original = new OwnCloudBasicCredentials(
                "user",
                "pass",
                true
        );

        OwnCloudBasicCredentials identical = new OwnCloudBasicCredentials(
                "user",
                "pass",
                true
        );

        Assert.assertEquals(original, identical);
    }

    @Test
    public void parcelableIsImplemented() {

        OwnCloudBasicCredentials original = new OwnCloudBasicCredentials(
                "username",
                "password",
                false
        );

        Intent intent = new Intent();
        intent.putExtra("credentials", original);

        OwnCloudBasicCredentials copy = intent.getParcelableExtra("credentials");

        Assert.assertEquals(original, copy);
    }
}
+28 −0
Original line number Diff line number Diff line
package com.owncloud.android.lib.resources.status;

import android.os.Parcel;

import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class OwnCloudVersionTest {

    @Test
    public void parcelableIsImplemented() {
        OwnCloudVersion original = new OwnCloudVersion(42);

        Parcel parcel = Parcel.obtain();
        parcel.setDataPosition(0);
        parcel.writeParcelable(original, 0);

        parcel.setDataPosition(0);
        OwnCloudVersion retrieved = parcel.readParcelable(OwnCloudVersion.class.getClassLoader());

        Assert.assertNotSame(original, retrieved);
        Assert.assertEquals(original, retrieved);
    }
}
+43 −1
Original line number Diff line number Diff line
@@ -31,12 +31,15 @@ import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;

import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;

import java.io.IOException;

import lombok.EqualsAndHashCode;
import lombok.Getter;

/**
@@ -44,7 +47,8 @@ import lombok.Getter;
 * 
 * @author David A. Velasco
 */
public class OwnCloudAccount {
@EqualsAndHashCode
public class OwnCloudAccount implements Parcelable {

    @Getter private Uri baseUri;
    @Getter private OwnCloudCredentials credentials;
@@ -135,4 +139,42 @@ public class OwnCloudAccount {
            return null;
        }
    }

    /*
     * Autogenerated Parcelable interface
     */

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(baseUri, flags);
        dest.writeParcelable(credentials, flags);
        dest.writeString(displayName);
        dest.writeString(name);
        dest.writeParcelable(savedAccount, flags);
    }

    protected OwnCloudAccount(Parcel in) {
        baseUri = in.readParcelable(Uri.class.getClassLoader());
        credentials = in.readParcelable(OwnCloudCredentials.class.getClassLoader());
        displayName = in.readString();
        name = in.readString();
        savedAccount = in.readParcelable(Account.class.getClassLoader());
    }

    public static final Creator<OwnCloudAccount> CREATOR = new Creator<OwnCloudAccount>() {
        @Override
        public OwnCloudAccount createFromParcel(Parcel source) {
            return new OwnCloudAccount(source);
        }

        @Override
        public OwnCloudAccount[] newArray(int size) {
            return new OwnCloudAccount[size];
        }
    };
}
Loading