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

Commit e0616ffb authored by Fred Quintana's avatar Fred Quintana
Browse files

add a supportsUploading flag in the SyncAdapter description and honor it in the SyncManager

parent 9e61acd9
Loading
Loading
Loading
Loading
+36 −1
Original line number Diff line number Diff line
@@ -7489,6 +7489,17 @@
 visibility="public"
>
</field>
<field name="supportsUploading"
 type="int"
 transient="false"
 volatile="false"
 value="16843410"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="syncable"
 type="int"
 transient="false"
@@ -36124,6 +36135,8 @@
</parameter>
<parameter name="userVisible" type="boolean">
</parameter>
<parameter name="supportsUploading" type="boolean">
</parameter>
</constructor>
<constructor name="SyncAdapterType"
 type="android.content.SyncAdapterType"
@@ -36146,6 +36159,17 @@
 visibility="public"
>
</method>
<method name="isUserVisible"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="newKey"
 return="android.content.SyncAdapterType"
 abstract="false"
@@ -36161,6 +36185,17 @@
<parameter name="accountType" type="java.lang.String">
</parameter>
</method>
<method name="supportsUploading"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="writeToParcel"
 return="void"
 abstract="false"
@@ -36206,7 +36241,7 @@
 visibility="public"
>
</field>
<field name="userVisible"
<field name="isKey"
 type="boolean"
 transient="false"
 volatile="false"
+61 −8
Original line number Diff line number Diff line
@@ -27,9 +27,12 @@ import android.os.Parcel;
public class SyncAdapterType implements Parcelable {
    public final String authority;
    public final String accountType;
    public final boolean userVisible;
    public final boolean isKey;
    private final boolean userVisible;
    private final boolean supportsUploading;

    public SyncAdapterType(String authority, String accountType, boolean userVisible) {
    public SyncAdapterType(String authority, String accountType, boolean userVisible, 
            boolean supportsUploading) {
        if (TextUtils.isEmpty(authority)) {
            throw new IllegalArgumentException("the authority must not be empty: " + authority);
        }
@@ -39,17 +42,49 @@ public class SyncAdapterType implements Parcelable {
        this.authority = authority;
        this.accountType = accountType;
        this.userVisible = userVisible;
        this.supportsUploading = supportsUploading;
        this.isKey = false;
    }

    private SyncAdapterType(String authority, String accountType) {
        if (TextUtils.isEmpty(authority)) {
            throw new IllegalArgumentException("the authority must not be empty: " + authority);
        }
        if (TextUtils.isEmpty(accountType)) {
            throw new IllegalArgumentException("the accountType must not be empty: " + accountType);
        }
        this.authority = authority;
        this.accountType = accountType;
        this.userVisible = true;
        this.supportsUploading = true;
        this.isKey = true;
    }

    public boolean supportsUploading() {
        if (isKey) {
            throw new IllegalStateException(
                    "this method is not allowed to be called when this is a key");
        }
        return supportsUploading;
    }

    public boolean isUserVisible() {
        if (isKey) {
            throw new IllegalStateException(
                    "this method is not allowed to be called when this is a key");
        }
        return userVisible;
    }

    public static SyncAdapterType newKey(String authority, String accountType) {
        return new SyncAdapterType(authority, accountType, true);
        return new SyncAdapterType(authority, accountType);
    }

    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof SyncAdapterType)) return false;
        final SyncAdapterType other = (SyncAdapterType)o;
        // don't include userVisible in the equality check
        // don't include userVisible or supportsUploading in the equality check
        return authority.equals(other.authority) && accountType.equals(other.accountType);
    }

@@ -57,13 +92,22 @@ public class SyncAdapterType implements Parcelable {
        int result = 17;
        result = 31 * result + authority.hashCode();
        result = 31 * result + accountType.hashCode();
        // don't include userVisible in the hash
        // don't include userVisible or supportsUploading  the hash
        return result;
    }

    public String toString() {
        return "SyncAdapterType {name=" + authority + ", type=" + accountType
                + ", userVisible=" + userVisible + "}";
        if (isKey) {
            return "SyncAdapterType Key {name=" + authority
                    + ", type=" + accountType
                    + "}";
        } else {
            return "SyncAdapterType {name=" + authority
                    + ", type=" + accountType
                    + ", userVisible=" + userVisible
                    + ", supportsUploading=" + supportsUploading
                    + "}";
        }
    }

    public int describeContents() {
@@ -71,13 +115,22 @@ public class SyncAdapterType implements Parcelable {
    }

    public void writeToParcel(Parcel dest, int flags) {
        if (isKey) {
            throw new IllegalStateException("keys aren't parcelable");
        }

        dest.writeString(authority);
        dest.writeString(accountType);
        dest.writeInt(userVisible ? 1 : 0);
        dest.writeInt(supportsUploading ? 1 : 0);
    }

    public SyncAdapterType(Parcel source) {
        this(source.readString(), source.readString(), source.readInt() != 0);
        this(
                source.readString(),
                source.readString(),
                source.readInt() != 0,
                source.readInt() != 0);
    }

    public static final Creator<SyncAdapterType> CREATOR = new Creator<SyncAdapterType>() {
+4 −1
Original line number Diff line number Diff line
@@ -49,7 +49,10 @@ import android.util.AttributeSet;
            }
            final boolean userVisible =
                    sa.getBoolean(com.android.internal.R.styleable.SyncAdapter_userVisible, true);
            return new SyncAdapterType(authority, accountType, userVisible);
            final boolean supportsUploading =
                    sa.getBoolean(com.android.internal.R.styleable.SyncAdapter_supportsUploading,
                            true);
            return new SyncAdapterType(authority, accountType, userVisible, supportsUploading);
        } finally {
            sa.recycle();
        }
+17 −10
Original line number Diff line number Diff line
@@ -526,13 +526,6 @@ class SyncManager implements OnAccountsUpdatedListener {
    public void scheduleSync(Account requestedAccount, String requestedAuthority,
            Bundle extras, long delay, boolean onlyThoseWithUnkownSyncableState) {
        boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
        if (isLoggable) {
            Log.v(TAG, "scheduleSync:"
                    + " delay " + delay
                    + ", account " + requestedAccount
                    + ", authority " + requestedAuthority
                    + ", extras " + ((extras == null) ? "(null)" : extras));
        }

        if (!isSyncEnabled()) {
            if (isLoggable) {
@@ -617,13 +610,27 @@ class SyncManager implements OnAccountsUpdatedListener {
                if (onlyThoseWithUnkownSyncableState && isSyncable >= 0) {
                    continue;
                }
                if (mSyncAdapters.getServiceInfo(SyncAdapterType.newKey(authority, account.type))
                        != null) {
                final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo =
                        mSyncAdapters.getServiceInfo(
                                SyncAdapterType.newKey(authority, account.type));
                if (syncAdapterInfo != null) {
                    if (!syncAdapterInfo.type.supportsUploading() && uploadOnly) {
                        continue;
                    }
                    // make this an initialization sync if the isSyncable state is unknown
                    Bundle extrasCopy = new Bundle(extras);
                    Bundle extrasCopy = extras;
                    if (isSyncable < 0) {
                        extrasCopy = new Bundle(extras);
                        extrasCopy.putBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, true);
                    }
                    if (isLoggable) {
                        Log.v(TAG, "scheduleSync:"
                                + " delay " + delay
                                + ", source " + source
                                + ", account " + account
                                + ", authority " + authority
                                + ", extras " + extrasCopy);
                    }
                    scheduleSyncOperation(
                            new SyncOperation(account, source, authority, extrasCopy, delay));
                }
+6 −8
Original line number Diff line number Diff line
@@ -149,15 +149,13 @@ public class CheckBoxPreference extends Preference {
     * @param checked The checked state.
     */
    public void setChecked(boolean checked) {

        if (mChecked != checked) {
            mChecked = checked;

            persistBoolean(checked);

            notifyDependencyChange(shouldDisableDependents());
        
            notifyChanged();
        }
    }

    /**
     * Returns the checked state.
Loading