Merge "eUICC API error code cleanup." into oc-dr1-dev
diff --git a/Android.mk b/Android.mk
index 66c5987..933ac62 100644
--- a/Android.mk
+++ b/Android.mk
@@ -773,14 +773,9 @@
 	frameworks/base/core/java/android/view/textservice/SuggestionsInfo.aidl \
 	frameworks/base/core/java/android/service/carrier/CarrierIdentifier.aidl \
 	frameworks/base/core/java/android/service/carrier/MessagePdu.aidl \
-	frameworks/base/core/java/android/service/euicc/DeleteResult.aidl \
-	frameworks/base/core/java/android/service/euicc/DownloadResult.aidl \
-	frameworks/base/core/java/android/service/euicc/EraseResult.aidl \
 	frameworks/base/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.aidl \
 	frameworks/base/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.aidl \
 	frameworks/base/core/java/android/service/euicc/GetEuiccProfileInfoListResult.aidl \
-	frameworks/base/core/java/android/service/euicc/SwitchResult.aidl \
-	frameworks/base/core/java/android/service/euicc/UpdateNicknameResult.aidl \
 	frameworks/base/core/java/android/service/notification/Adjustment.aidl \
 	frameworks/base/core/java/android/service/notification/Condition.aidl \
 	frameworks/base/core/java/android/service/notification/SnoozeCriterion.aidl \
diff --git a/core/java/android/service/euicc/DeleteResult.aidl b/core/java/android/service/euicc/DeleteResult.aidl
deleted file mode 100644
index 3da8b49..0000000
--- a/core/java/android/service/euicc/DeleteResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.euicc;
-
-parcelable DeleteResult;
diff --git a/core/java/android/service/euicc/DeleteResult.java b/core/java/android/service/euicc/DeleteResult.java
deleted file mode 100644
index 8be9ac9..0000000
--- a/core/java/android/service/euicc/DeleteResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.service.euicc;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Result of a {@link EuiccService#onDeleteSubscription} operation.
- * @hide
- *
- * TODO(b/35851809): Make this a SystemApi.
- */
-public final class DeleteResult implements Parcelable {
-
-    public static final Creator<DeleteResult> CREATOR = new Creator<DeleteResult>() {
-        @Override
-        public DeleteResult createFromParcel(Parcel in) {
-            return new DeleteResult(in);
-        }
-
-        @Override
-        public DeleteResult[] newArray(int size) {
-            return new DeleteResult[size];
-        }
-    };
-
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private DeleteResult(int result, int detailedCode) {
-        this.result = result;
-        this.detailedCode = detailedCode;
-    }
-
-    private DeleteResult(Parcel in) {
-        this.result = in.readInt();
-        this.detailedCode = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(result);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the delete was successful. */
-    public static DeleteResult success() {
-        return new DeleteResult(RESULT_OK, 0);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implemenation-defined detailed error code for debugging purposes.
-     */
-    public static DeleteResult genericError(int detailedCode) {
-        return new DeleteResult(RESULT_GENERIC_ERROR, detailedCode);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/core/java/android/service/euicc/DownloadResult.aidl b/core/java/android/service/euicc/DownloadResult.aidl
deleted file mode 100644
index 66ec999..0000000
--- a/core/java/android/service/euicc/DownloadResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.euicc;
-
-parcelable DownloadResult;
diff --git a/core/java/android/service/euicc/DownloadResult.java b/core/java/android/service/euicc/DownloadResult.java
deleted file mode 100644
index ad75bff..0000000
--- a/core/java/android/service/euicc/DownloadResult.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.service.euicc;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Result of a {@link EuiccService#onDownloadSubscription} operation.
- * @hide
- *
- * TODO(b/35851809): Make this a SystemApi.
- */
-public final class DownloadResult implements Parcelable {
-
-    public static final Creator<DownloadResult> CREATOR = new Creator<DownloadResult>() {
-        @Override
-        public DownloadResult createFromParcel(Parcel in) {
-            return new DownloadResult(in);
-        }
-
-        @Override
-        public DownloadResult[] newArray(int size) {
-            return new DownloadResult[size];
-        }
-    };
-
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-            RESULT_MUST_DEACTIVATE_SIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-    public static final int RESULT_MUST_DEACTIVATE_SIM = 2;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private DownloadResult(int result, int detailedCode) {
-        this.result = result;
-        this.detailedCode = detailedCode;
-    }
-
-    private DownloadResult(Parcel in) {
-        this.result = in.readInt();
-        this.detailedCode = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(result);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the download was successful. */
-    public static DownloadResult success() {
-        return new DownloadResult(RESULT_OK, 0);
-    }
-
-    /**
-     * Return a result indicating that an active SIM must be deactivated to perform the operation.
-     */
-    public static DownloadResult mustDeactivateSim() {
-        return new DownloadResult(RESULT_MUST_DEACTIVATE_SIM, 0);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implemenation-defined detailed error code for debugging purposes.
-     */
-    public static DownloadResult genericError(int detailedCode) {
-        return new DownloadResult(RESULT_GENERIC_ERROR, detailedCode);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/core/java/android/service/euicc/EraseResult.aidl b/core/java/android/service/euicc/EraseResult.aidl
deleted file mode 100644
index e28a097..0000000
--- a/core/java/android/service/euicc/EraseResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.euicc;
-
-parcelable EraseResult;
diff --git a/core/java/android/service/euicc/EraseResult.java b/core/java/android/service/euicc/EraseResult.java
deleted file mode 100644
index 1cce5a9..0000000
--- a/core/java/android/service/euicc/EraseResult.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.service.euicc;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Result of a {@link EuiccService#onEraseSubscriptions} operation.
- * @hide
- *
- * TODO(b/35851809): Make this a SystemApi.
- */
-public final class EraseResult implements Parcelable {
-
-    public static final Creator<EraseResult> CREATOR = new Creator<EraseResult>() {
-        @Override
-        public EraseResult createFromParcel(Parcel in) {
-            return new EraseResult(in);
-        }
-
-        @Override
-        public EraseResult[] newArray(int size) {
-            return new EraseResult[size];
-        }
-    };
-
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private EraseResult(int result, int detailedCode) {
-        this.result = result;
-        this.detailedCode = detailedCode;
-    }
-
-    private EraseResult(Parcel in) {
-        this.result = in.readInt();
-        this.detailedCode = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(result);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the erase was successful. */
-    public static EraseResult success() {
-        return new EraseResult(RESULT_OK, 0);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implemenation-defined detailed error code for debugging purposes.
-     */
-    public static EraseResult genericError(int detailedCode) {
-        return new EraseResult(RESULT_GENERIC_ERROR, detailedCode);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/core/java/android/service/euicc/EuiccService.java b/core/java/android/service/euicc/EuiccService.java
index 3734904..8f61d96 100644
--- a/core/java/android/service/euicc/EuiccService.java
+++ b/core/java/android/service/euicc/EuiccService.java
@@ -90,6 +90,16 @@
      */
     public static final String ACTION_RESOLVE_NO_PRIVILEGES =
             "android.service.euicc.action.RESOLVE_NO_PRIVILEGES";
+
+    /** Result code for a successful operation. */
+    public static final int RESULT_OK = 0;
+    /** Result code indicating that an active SIM must be deactivated to perform the operation. */
+    public static final int RESULT_MUST_DEACTIVATE_SIM = -1;
+    // New predefined codes should have negative values.
+
+    /** Start of implementation-specific error results. */
+    public static final int RESULT_FIRST_USER = 1;
+
     /**
      * List of all valid resolution actions for validation purposes.
      * @hide
@@ -138,9 +148,8 @@
      *     but is here to future-proof the APIs.
      * @param subscription A subscription whose metadata needs to be populated.
      * @param forceDeactivateSim If true, and if an active SIM must be deactivated to access the
-     *     eUICC, perform this action automatically. Otherwise,
-     *     {@link GetDownloadableSubscriptionMetadataResult#mustDeactivateSim()} should be returned
-     *     to allow the user to consent to this operation first.
+     *     eUICC, perform this action automatically. Otherwise, {@link #RESULT_MUST_DEACTIVATE_SIM)}
+     *     should be returned to allow the user to consent to this operation first.
      * @return The result of the operation.
      * @see android.telephony.euicc.EuiccManager#getDownloadableSubscriptionMetadata
      */
@@ -153,9 +162,8 @@
      * @param slotId ID of the SIM slot to use for the operation. This is currently not populated
      *     but is here to future-proof the APIs.
      * @param forceDeactivateSim If true, and if an active SIM must be deactivated to access the
-     *     eUICC, perform this action automatically. Otherwise,
-     *     {@link GetDefaultDownloadableSubscriptionListResult#mustDeactivateSim()} should be
-     *     returned to allow the user to consent to this operation first.
+     *     eUICC, perform this action automatically. Otherwise, {@link #RESULT_MUST_DEACTIVATE_SIM)}
+     *     should be returned to allow the user to consent to this operation first.
      * @return The result of the list operation.
      * @see android.telephony.euicc.EuiccManager#getDefaultDownloadableSubscriptionList
      */
@@ -171,13 +179,13 @@
      * @param switchAfterDownload If true, the subscription should be enabled upon successful
      *     download.
      * @param forceDeactivateSim If true, and if an active SIM must be deactivated to access the
-     *     eUICC, perform this action automatically. Otherwise,
-     *     {@link DownloadResult#mustDeactivateSim()} should be returned to allow the user to
-     *     consent to this operation first.
-     * @return the result of the download operation.
+     *     eUICC, perform this action automatically. Otherwise, {@link #RESULT_MUST_DEACTIVATE_SIM}
+     *     should be returned to allow the user to consent to this operation first.
+     * @return the result of the download operation. May be one of the predefined {@code RESULT_}
+     *     constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}.
      * @see android.telephony.euicc.EuiccManager#downloadSubscription
      */
-    public abstract DownloadResult onDownloadSubscription(int slotId,
+    public abstract int onDownloadSubscription(int slotId,
             DownloadableSubscription subscription, boolean switchAfterDownload,
             boolean forceDeactivateSim);
 
@@ -211,10 +219,11 @@
      * @param slotId ID of the SIM slot to use for the operation. This is currently not populated
      *     but is here to future-proof the APIs.
      * @param iccid the ICCID of the subscription to delete.
-     * @return the result of the delete operation.
+     * @return the result of the delete operation. May be one of the predefined {@code RESULT_}
+     *     constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}.
      * @see android.telephony.euicc.EuiccManager#deleteSubscription
      */
-    public abstract DeleteResult onDeleteSubscription(int slotId, String iccid);
+    public abstract int onDeleteSubscription(int slotId, String iccid);
 
     /**
      * Switch to the given subscription.
@@ -225,13 +234,13 @@
      *     profile should be deactivated and no profile should be activated to replace it - this is
      *     equivalent to a physical SIM being ejected.
      * @param forceDeactivateSim If true, and if an active SIM must be deactivated to access the
-     *     eUICC, perform this action automatically. Otherwise,
-     *     {@link SwitchResult#mustDeactivateSim()} should be returned to allow the user to consent
-     *     to this operation first.
-     * @return the result of the switch operation.
+     *     eUICC, perform this action automatically. Otherwise, {@link #RESULT_MUST_DEACTIVATE_SIM}
+     *     should be returned to allow the user to consent to this operation first.
+     * @return the result of the switch operation. May be one of the predefined {@code RESULT_}
+     *     constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}.
      * @see android.telephony.euicc.EuiccManager#switchToSubscription
      */
-    public abstract SwitchResult onSwitchToSubscription(int slotId, @Nullable String iccid,
+    public abstract int onSwitchToSubscription(int slotId, @Nullable String iccid,
             boolean forceDeactivateSim);
 
     /**
@@ -241,10 +250,11 @@
      *     but is here to future-proof the APIs.
      * @param iccid the ICCID of the subscription to update.
      * @param nickname the new nickname to apply.
-     * @return the result of the update operation.
+     * @return the result of the update operation. May be one of the predefined {@code RESULT_}
+     *     constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}.
      * @see android.telephony.euicc.EuiccManager#updateSubscriptionNickname
      */
-    public abstract UpdateNicknameResult onUpdateSubscriptionNickname(int slotId, String iccid,
+    public abstract int onUpdateSubscriptionNickname(int slotId, String iccid,
             String nickname);
 
     /**
@@ -255,10 +265,11 @@
      *
      * @param slotId ID of the SIM slot to use for the operation. This is currently not populated
      *     but is here to future-proof the APIs.
-     * @return the result of the erase operation.
+     * @return the result of the erase operation. May be one of the predefined {@code RESULT_}
+     *     constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}.
      * @see android.telephony.euicc.EuiccManager#eraseSubscriptions
      */
-    public abstract EraseResult onEraseSubscriptions(int slotId);
+    public abstract int onEraseSubscriptions(int slotId);
 
     /**
      * Wrapper around IEuiccService that forwards calls to implementations of {@link EuiccService}.
@@ -268,7 +279,7 @@
         public void downloadSubscription(int slotId, DownloadableSubscription subscription,
                 boolean switchAfterDownload, boolean forceDeactivateSim,
                 IDownloadSubscriptionCallback callback) {
-            DownloadResult result = EuiccService.this.onDownloadSubscription(
+            int result = EuiccService.this.onDownloadSubscription(
                     slotId, subscription, switchAfterDownload, forceDeactivateSim);
             try {
                 callback.onComplete(result);
@@ -339,7 +350,7 @@
         @Override
         public void deleteSubscription(int slotId, String iccid,
                 IDeleteSubscriptionCallback callback) {
-            DeleteResult result = EuiccService.this.onDeleteSubscription(slotId, iccid);
+            int result = EuiccService.this.onDeleteSubscription(slotId, iccid);
             try {
                 callback.onComplete(result);
             } catch (RemoteException e) {
@@ -350,7 +361,7 @@
         @Override
         public void switchToSubscription(int slotId, String iccid, boolean forceDeactivateSim,
                 ISwitchToSubscriptionCallback callback) {
-            SwitchResult result =
+            int result =
                     EuiccService.this.onSwitchToSubscription(slotId, iccid, forceDeactivateSim);
             try {
                 callback.onComplete(result);
@@ -362,8 +373,7 @@
         @Override
         public void updateSubscriptionNickname(int slotId, String iccid, String nickname,
                 IUpdateSubscriptionNicknameCallback callback) {
-            UpdateNicknameResult result =
-                    EuiccService.this.onUpdateSubscriptionNickname(slotId, iccid, nickname);
+            int result = EuiccService.this.onUpdateSubscriptionNickname(slotId, iccid, nickname);
             try {
                 callback.onComplete(result);
             } catch (RemoteException e) {
@@ -373,7 +383,7 @@
 
         @Override
         public void eraseSubscriptions(int slotId, IEraseSubscriptionsCallback callback) {
-            EraseResult result = EuiccService.this.onEraseSubscriptions(slotId);
+            int result = EuiccService.this.onEraseSubscriptions(slotId);
             try {
                 callback.onComplete(result);
             } catch (RemoteException e) {
diff --git a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java
index 95569b2..5a24492 100644
--- a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java
+++ b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java
@@ -15,15 +15,11 @@
  */
 package android.service.euicc;
 
-import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.telephony.euicc.DownloadableSubscription;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Result of a {@link EuiccService#onGetDefaultDownloadableSubscriptionList} operation.
  * @hide
@@ -45,77 +41,54 @@
         }
     };
 
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-            RESULT_MUST_DEACTIVATE_SIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_MUST_DEACTIVATE_SIM = 1;
-    public static final int RESULT_GENERIC_ERROR = 2;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
+    /**
+     * Result of the operation.
+     *
+     * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any
+     * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}.
+     */
+    public final int result;
 
     /**
      * The available {@link DownloadableSubscription}s (with filled-in metadata).
      *
-     * <p>Only non-null if {@link #result} is {@link #RESULT_OK}.
+     * <p>Only non-null if {@link #result} is {@link EuiccService#RESULT_OK}.
      */
     @Nullable
     public final DownloadableSubscription[] subscriptions;
 
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private GetDefaultDownloadableSubscriptionListResult(int result,
-            @Nullable DownloadableSubscription[] subscriptions, int detailedCode) {
+    /**
+     * Construct a new {@link GetDefaultDownloadableSubscriptionListResult}.
+     *
+     * @param result Result of the operation. May be one of the predefined {@code RESULT_} constants
+     *     in EuiccService or any implementation-specific code starting with
+     *     {@link EuiccService#RESULT_FIRST_USER}.
+     * @param subscriptions The available subscriptions. Should only be provided if the result is
+     *     {@link EuiccService#RESULT_OK}.
+     */
+    public GetDefaultDownloadableSubscriptionListResult(int result,
+            @Nullable DownloadableSubscription[] subscriptions) {
         this.result = result;
-        this.subscriptions = subscriptions;
-        this.detailedCode = detailedCode;
+        if (this.result == EuiccService.RESULT_OK) {
+            this.subscriptions = subscriptions;
+        } else {
+            if (subscriptions != null) {
+                throw new IllegalArgumentException(
+                        "Error result with non-null subscriptions: " + result);
+            }
+            this.subscriptions = null;
+        }
     }
 
     private GetDefaultDownloadableSubscriptionListResult(Parcel in) {
         this.result = in.readInt();
         this.subscriptions = in.createTypedArray(DownloadableSubscription.CREATOR);
-        this.detailedCode = in.readInt();
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(result);
         dest.writeTypedArray(subscriptions, flags);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the list operation was successful. */
-    public static GetDefaultDownloadableSubscriptionListResult success(
-            DownloadableSubscription[] subscriptions) {
-        return new GetDefaultDownloadableSubscriptionListResult(RESULT_OK, subscriptions,
-                0 /* detailedCode */);
-    }
-
-    /**
-     * Return a result indicating that an active SIM must be deactivated to perform the operation.
-     */
-    public static GetDefaultDownloadableSubscriptionListResult mustDeactivateSim() {
-        return new GetDefaultDownloadableSubscriptionListResult(RESULT_MUST_DEACTIVATE_SIM,
-                null /* subscription */, 0 /* detailedCode */);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implementation-defined detailed error code for debugging purposes.
-     */
-    public static GetDefaultDownloadableSubscriptionListResult genericError(int detailedCode) {
-        return new GetDefaultDownloadableSubscriptionListResult(RESULT_GENERIC_ERROR,
-                null /* subscription */, detailedCode);
     }
 
     @Override
diff --git a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java
index 99e7614..de8a307 100644
--- a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java
+++ b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java
@@ -15,15 +15,11 @@
  */
 package android.service.euicc;
 
-import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.telephony.euicc.DownloadableSubscription;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Result of a {@link EuiccService#onGetDownloadableSubscriptionMetadata} operation.
  * @hide
@@ -45,77 +41,54 @@
         }
     };
 
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-            RESULT_MUST_DEACTIVATE_SIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_MUST_DEACTIVATE_SIM = 1;
-    public static final int RESULT_GENERIC_ERROR = 2;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
+    /**
+     * Result of the operation.
+     *
+     * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any
+     * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}.
+     */
+    public final int result;
 
     /**
      * The {@link DownloadableSubscription} with filled-in metadata.
      *
-     * <p>Only non-null if {@link #result} is {@link #RESULT_OK}.
+     * <p>Only non-null if {@link #result} is {@link EuiccService#RESULT_OK}.
      */
     @Nullable
     public final DownloadableSubscription subscription;
 
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private GetDownloadableSubscriptionMetadataResult(int result,
-            @Nullable DownloadableSubscription subscription, int detailedCode) {
+    /**
+     * Construct a new {@link GetDownloadableSubscriptionMetadataResult}.
+     *
+     * @param result Result of the operation. May be one of the predefined {@code RESULT_} constants
+     *     in EuiccService or any implementation-specific code starting with
+     *     {@link EuiccService#RESULT_FIRST_USER}.
+     * @param subscription The subscription with filled-in metadata. Should only be provided if the
+     *     result is {@link EuiccService#RESULT_OK}.
+     */
+    public GetDownloadableSubscriptionMetadataResult(int result,
+            @Nullable DownloadableSubscription subscription) {
         this.result = result;
-        this.subscription = subscription;
-        this.detailedCode = detailedCode;
+        if (this.result == EuiccService.RESULT_OK) {
+            this.subscription = subscription;
+        } else {
+            if (subscription != null) {
+                throw new IllegalArgumentException(
+                        "Error result with non-null subscription: " + result);
+            }
+            this.subscription = null;
+        }
     }
 
     private GetDownloadableSubscriptionMetadataResult(Parcel in) {
         this.result = in.readInt();
         this.subscription = in.readTypedObject(DownloadableSubscription.CREATOR);
-        this.detailedCode = in.readInt();
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(result);
         dest.writeTypedObject(this.subscription, flags);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the lookup was successful. */
-    public static GetDownloadableSubscriptionMetadataResult success(
-            DownloadableSubscription subscription) {
-        return new GetDownloadableSubscriptionMetadataResult(RESULT_OK, subscription,
-                0 /* detailedCode */);
-    }
-
-    /**
-     * Return a result indicating that an active SIM must be deactivated to perform the operation.
-     */
-    public static GetDownloadableSubscriptionMetadataResult mustDeactivateSim() {
-        return new GetDownloadableSubscriptionMetadataResult(RESULT_MUST_DEACTIVATE_SIM,
-                null /* subscription */, 0 /* detailedCode */);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implementation-defined detailed error code for debugging purposes.
-     */
-    public static GetDownloadableSubscriptionMetadataResult genericError(int detailedCode) {
-        return new GetDownloadableSubscriptionMetadataResult(RESULT_GENERIC_ERROR,
-                null /* subscription */, detailedCode);
     }
 
     @Override
diff --git a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java
index 5ac10fe..7ad8488 100644
--- a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java
+++ b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java
@@ -15,14 +15,10 @@
  */
 package android.service.euicc;
 
-import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Result of a {@link EuiccService#onGetEuiccProfileInfoList} operation.
  * @hide
@@ -33,33 +29,24 @@
 
     public static final Creator<GetEuiccProfileInfoListResult> CREATOR =
             new Creator<GetEuiccProfileInfoListResult>() {
-        @Override
-        public GetEuiccProfileInfoListResult createFromParcel(Parcel in) {
-            return new GetEuiccProfileInfoListResult(in);
-        }
+                @Override
+                public GetEuiccProfileInfoListResult createFromParcel(Parcel in) {
+                    return new GetEuiccProfileInfoListResult(in);
+                }
 
-        @Override
-        public GetEuiccProfileInfoListResult[] newArray(int size) {
-            return new GetEuiccProfileInfoListResult[size];
-        }
-    };
+                @Override
+                public GetEuiccProfileInfoListResult[] newArray(int size) {
+                    return new GetEuiccProfileInfoListResult[size];
+                }
+            };
 
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
+    /**
+     * Result of the operation.
+     *
+     * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any
+     * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}.
+     */
+    public final int result;
 
     /** The profile list (only upon success). */
     @Nullable
@@ -68,17 +55,37 @@
     /** Whether the eUICC is removable. */
     public final boolean isRemovable;
 
-    private GetEuiccProfileInfoListResult(int result, int detailedCode, EuiccProfileInfo[] profiles,
-            boolean isRemovable) {
+    /**
+     * Construct a new {@link GetEuiccProfileInfoListResult}.
+     *
+     * @param result Result of the operation. May be one of the predefined {@code RESULT_} constants
+     *     in EuiccService or any implementation-specific code starting with
+     *     {@link EuiccService#RESULT_FIRST_USER}.
+     * @param profiles the list of profiles. Should only be provided if the result is
+     *     {@link EuiccService#RESULT_OK}.
+     * @param isRemovable whether the eUICC in this slot is removable. If true, the profiles
+     *     returned here will only be considered accessible as long as this eUICC is present.
+     *     Otherwise, they will remain accessible until the next time a response with isRemovable
+     *     set to false is returned.
+     */
+    public GetEuiccProfileInfoListResult(
+            int result, @Nullable EuiccProfileInfo[] profiles, boolean isRemovable) {
         this.result = result;
-        this.detailedCode = detailedCode;
-        this.profiles = profiles;
         this.isRemovable = isRemovable;
+        if (this.result == EuiccService.RESULT_OK) {
+            this.profiles = profiles;
+        } else {
+            if (profiles != null) {
+                throw new IllegalArgumentException(
+                        "Error result with non-null profiles: " + result);
+            }
+            this.profiles = null;
+        }
+
     }
 
     private GetEuiccProfileInfoListResult(Parcel in) {
         this.result = in.readInt();
-        this.detailedCode = in.readInt();
         this.profiles = in.createTypedArray(EuiccProfileInfo.CREATOR);
         this.isRemovable = in.readBoolean();
     }
@@ -86,41 +93,10 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(result);
-        dest.writeInt(detailedCode);
         dest.writeTypedArray(profiles, flags);
         dest.writeBoolean(isRemovable);
     }
 
-    /**
-     * Return a result indicating that the listing was successful.
-     *
-     * @param profiles the list of profiles
-     * @param isRemovable whether the eUICC in this slot is removable. If true, the profiles
-     *     returned here will only be considered accessible as long as this eUICC is present.
-     *     Otherwise, they will remain accessible until the next time a response with isRemovable
-     *     set to false is returned.
-     */
-    public static GetEuiccProfileInfoListResult success(
-            EuiccProfileInfo[] profiles, boolean isRemovable) {
-        return new GetEuiccProfileInfoListResult(
-                RESULT_OK, 0 /* detailedCode */, profiles, isRemovable);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implementation-defined detailed error code for debugging purposes.
-     * @param isRemovable whether the eUICC in this slot is removable. If true, only removable
-     *     profiles will be made inaccessible. Otherwise, all embedded profiles will be
-     *     considered inaccessible.
-     */
-    public static GetEuiccProfileInfoListResult genericError(
-            int detailedCode, boolean isRemovable) {
-        return new GetEuiccProfileInfoListResult(
-                RESULT_GENERIC_ERROR, detailedCode, null /* profiles */, isRemovable);
-    }
-
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl
index 224cbd3..4667066 100644
--- a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl
+++ b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl
@@ -16,9 +16,7 @@
 
 package android.service.euicc;
 
-import android.service.euicc.DeleteResult;
-
 /** @hide */
 oneway interface IDeleteSubscriptionCallback {
-    void onComplete(in DeleteResult result);
+    void onComplete(int result);
 }
\ No newline at end of file
diff --git a/core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl b/core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl
index 0677cbe..6893c85 100644
--- a/core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl
+++ b/core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl
@@ -16,9 +16,7 @@
 
 package android.service.euicc;
 
-import android.service.euicc.DownloadResult;
-
 /** @hide */
 oneway interface IDownloadSubscriptionCallback {
-    void onComplete(in DownloadResult result);
+    void onComplete(int result);
 }
\ No newline at end of file
diff --git a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl
index aa70e76..c975f18 100644
--- a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl
+++ b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl
@@ -16,9 +16,7 @@
 
 package android.service.euicc;
 
-import android.service.euicc.EraseResult;
-
 /** @hide */
 oneway interface IEraseSubscriptionsCallback {
-    void onComplete(in EraseResult result);
+    void onComplete(int result);
 }
\ No newline at end of file
diff --git a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl
index 970adcd..0f91a6b 100644
--- a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl
+++ b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl
@@ -16,9 +16,7 @@
 
 package android.service.euicc;
 
-import android.service.euicc.SwitchResult;
-
 /** @hide */
 oneway interface ISwitchToSubscriptionCallback {
-    void onComplete(in SwitchResult result);
+    void onComplete(int result);
 }
\ No newline at end of file
diff --git a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl
index 439759d..6666933 100644
--- a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl
+++ b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl
@@ -16,9 +16,7 @@
 
 package android.service.euicc;
 
-import android.service.euicc.UpdateNicknameResult;
-
 /** @hide */
 oneway interface IUpdateSubscriptionNicknameCallback {
-    void onComplete(in UpdateNicknameResult result);
+    void onComplete(int result);
 }
\ No newline at end of file
diff --git a/core/java/android/service/euicc/SwitchResult.aidl b/core/java/android/service/euicc/SwitchResult.aidl
deleted file mode 100644
index eb706a5..0000000
--- a/core/java/android/service/euicc/SwitchResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.euicc;
-
-parcelable SwitchResult;
diff --git a/core/java/android/service/euicc/SwitchResult.java b/core/java/android/service/euicc/SwitchResult.java
deleted file mode 100644
index f5dc4d3..0000000
--- a/core/java/android/service/euicc/SwitchResult.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.service.euicc;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Result of a {@link EuiccService#onSwitchToSubscription} operation.
- * @hide
- *
- * TODO(b/35851809): Make this a SystemApi.
- */
-public final class SwitchResult implements Parcelable {
-
-    public static final Creator<SwitchResult> CREATOR = new Creator<SwitchResult>() {
-        @Override
-        public SwitchResult createFromParcel(Parcel in) {
-            return new SwitchResult(in);
-        }
-
-        @Override
-        public SwitchResult[] newArray(int size) {
-            return new SwitchResult[size];
-        }
-    };
-
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-            RESULT_MUST_DEACTIVATE_SIM,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-    public static final int RESULT_MUST_DEACTIVATE_SIM = 2;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private SwitchResult(int result, int detailedCode) {
-        this.result = result;
-        this.detailedCode = detailedCode;
-    }
-
-    private SwitchResult(Parcel in) {
-        this.result = in.readInt();
-        this.detailedCode = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(result);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the switch was successful. */
-    public static SwitchResult success() {
-        return new SwitchResult(RESULT_OK, 0);
-    }
-
-    /**
-     * Return a result indicating that an active SIM must be deactivated to perform the operation.
-     */
-    public static SwitchResult mustDeactivateSim() {
-        return new SwitchResult(RESULT_MUST_DEACTIVATE_SIM, 0);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implemenation-defined detailed error code for debugging purposes.
-     */
-    public static SwitchResult genericError(int detailedCode) {
-        return new SwitchResult(RESULT_GENERIC_ERROR, detailedCode);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/core/java/android/service/euicc/UpdateNicknameResult.aidl b/core/java/android/service/euicc/UpdateNicknameResult.aidl
deleted file mode 100644
index 08b8491..0000000
--- a/core/java/android/service/euicc/UpdateNicknameResult.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.service.euicc;
-
-parcelable UpdateNicknameResult;
diff --git a/core/java/android/service/euicc/UpdateNicknameResult.java b/core/java/android/service/euicc/UpdateNicknameResult.java
deleted file mode 100644
index d871fc8..0000000
--- a/core/java/android/service/euicc/UpdateNicknameResult.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.service.euicc;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Result of a {@link EuiccService#onUpdateSubscriptionNickname} operation.
- * @hide
- *
- * TODO(b/35851809): Make this a SystemApi.
- */
-public final class UpdateNicknameResult implements Parcelable {
-
-    public static final Creator<UpdateNicknameResult> CREATOR =
-            new Creator<UpdateNicknameResult>() {
-        @Override
-        public UpdateNicknameResult createFromParcel(Parcel in) {
-            return new UpdateNicknameResult(in);
-        }
-
-        @Override
-        public UpdateNicknameResult[] newArray(int size) {
-            return new UpdateNicknameResult[size];
-        }
-    };
-
-    /** @hide */
-    @IntDef({
-            RESULT_OK,
-            RESULT_GENERIC_ERROR,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ResultCode {}
-
-    public static final int RESULT_OK = 0;
-    public static final int RESULT_GENERIC_ERROR = 1;
-
-    /** Result of the operation - one of the RESULT_* constants. */
-    public final @ResultCode int result;
-
-    /** Implementation-defined detailed error code in case of a failure not covered here. */
-    public final int detailedCode;
-
-    private UpdateNicknameResult(int result, int detailedCode) {
-        this.result = result;
-        this.detailedCode = detailedCode;
-    }
-
-    private UpdateNicknameResult(Parcel in) {
-        this.result = in.readInt();
-        this.detailedCode = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(result);
-        dest.writeInt(detailedCode);
-    }
-
-    /** Return a result indicating that the update was successful. */
-    public static UpdateNicknameResult success() {
-        return new UpdateNicknameResult(RESULT_OK, 0);
-    }
-
-    /**
-     * Return a result indicating that an error occurred for which no other more specific error
-     * code has been defined.
-     *
-     * @param detailedCode an implemenation-defined detailed error code for debugging purposes.
-     */
-    public static UpdateNicknameResult genericError(int detailedCode) {
-        return new UpdateNicknameResult(RESULT_GENERIC_ERROR, detailedCode);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-}
diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java
index be32f72..6367772 100644
--- a/telephony/java/android/telephony/euicc/EuiccManager.java
+++ b/telephony/java/android/telephony/euicc/EuiccManager.java
@@ -92,15 +92,12 @@
     public static final int EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR = 1;
 
     /**
-     * Result code for an operation indicating that a generic error occurred.
+     * Result code for an operation indicating that an unresolvable error occurred.
      *
-     * <p>Note that in the future, other result codes may be returned indicating more specific
-     * errors. Thus, the caller should check for {@link #EMBEDDED_SUBSCRIPTION_RESULT_OK} or
-     * {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} to determine if the operation
-     * succeeded or failed with a user-resolvable error, and assume the operation failed for any
-     * other result, rather than checking for this specific value.
+     * {@link #EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE} will be populated with a detailed error
+     * code for logging/debugging purposes only.
      */
-    public static final int EMBEDDED_SUBSCRIPTION_RESULT_GENERIC_ERROR = 2;
+    public static final int EMBEDDED_SUBSCRIPTION_RESULT_ERROR = 2;
 
     /**
      * Key for an extra set on {@link PendingIntent} result callbacks providing a detailed result
@@ -472,7 +469,7 @@
 
     private static void sendUnavailableError(PendingIntent callbackIntent) {
         try {
-            callbackIntent.send(EMBEDDED_SUBSCRIPTION_RESULT_GENERIC_ERROR);
+            callbackIntent.send(EMBEDDED_SUBSCRIPTION_RESULT_ERROR);
         } catch (PendingIntent.CanceledException e) {
             // Caller canceled the callback; do nothing.
         }