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

Commit ee26b7f5 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Add new ISatellite.aidl APIs.

The following two new APIs are added:
- updateSatelliteSubscription
- updateSystemSelectionChannels

Bug: 343345271
Test: make
Change-Id: I30e07960c546f8d94e007a7b19bfda496d0a5ecb
parent ec13f85e
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright 2024, 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.telephony.satellite;

 parcelable SystemSelectionSpecifier;
+175 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.telephony.satellite;

import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.IntArray;

import java.util.Objects;

/**
 * @hide
 */
public final class SystemSelectionSpecifier implements Parcelable {

    /** Network plmn associated with channel information. */
    @NonNull private String mMccMnc;

    /** The frequency bands to scan. Maximum length of the vector is 8. */
    @NonNull private IntArray mBands;

    /**
     * The radio channels to scan as defined in 3GPP TS 25.101 and 36.101.
     * Maximum length of the vector is 32.
     */
    @NonNull private IntArray mEarfcs;

    /**
     * @hide
     */
    public SystemSelectionSpecifier(@NonNull String mccmnc, @NonNull IntArray bands,
            @NonNull IntArray earfcs) {
        mMccMnc = mccmnc;
        mBands = bands;
        mEarfcs = earfcs;
    }

    private SystemSelectionSpecifier(Parcel in) {
        readFromParcel(in);
    }

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

    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        mMccMnc = TextUtils.emptyIfNull(mMccMnc);
        out.writeString8(mMccMnc);

        if (mBands != null && mBands.size() > 0) {
            out.writeInt(mBands.size());
            for (int i = 0; i < mBands.size(); i++) {
                out.writeInt(mBands.get(i));
            }
        } else {
            out.writeInt(0);
        }

        if (mEarfcs != null && mEarfcs.size() > 0) {
            out.writeInt(mEarfcs.size());
            for (int i = 0; i < mEarfcs.size(); i++) {
                out.writeInt(mEarfcs.get(i));
            }
        } else {
            out.writeInt(0);
        }
    }

    @NonNull public static final Parcelable.Creator<SystemSelectionSpecifier> CREATOR =
            new Creator<>() {
                @Override
                public SystemSelectionSpecifier createFromParcel(Parcel in) {
                    return new SystemSelectionSpecifier(in);
                }

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

    @Override
    @NonNull public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("mccmnc:");
        sb.append(mMccMnc);
        sb.append(",");

        sb.append("bands:");
        if (mBands != null && mBands.size() > 0) {
            for (int i = 0; i < mBands.size(); i++) {
                sb.append(mBands.get(i));
                sb.append(",");
            }
        } else {
            sb.append("none,");
        }

        sb.append("earfcs:");
        if (mEarfcs != null && mEarfcs.size() > 0) {
            for (int i = 0; i < mEarfcs.size(); i++) {
                sb.append(mEarfcs.get(i));
                sb.append(",");
            }
        } else {
            sb.append("none");
        }
        return sb.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SystemSelectionSpecifier that = (SystemSelectionSpecifier) o;
        return Objects.equals(mMccMnc, that.mMccMnc)
                && Objects.equals(mBands, that.mBands)
                && Objects.equals(mEarfcs, that.mEarfcs);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mMccMnc, mBands, mEarfcs);
    }

    @NonNull public String getMccMnc() {
        return mMccMnc;
    }

    @NonNull public IntArray getBands() {
        return mBands;
    }

    @NonNull public IntArray getEarfcs() {
        return mEarfcs;
    }

    private void readFromParcel(Parcel in) {
        mMccMnc = in.readString();

        mBands = new IntArray();
        int numBands = in.readInt();
        if (numBands > 0) {
            for (int i = 0; i < numBands; i++) {
                mBands.add(in.readInt());
            }
        }

        mEarfcs = new IntArray();
        int numEarfcs = in.readInt();
        if (numEarfcs > 0) {
            for (int i = 0; i < numEarfcs; i++) {
                mEarfcs.add(in.readInt());
            }
        }
    }
}
+18 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.telephony.satellite.stub.INtnSignalStrengthConsumer;
import android.telephony.satellite.stub.ISatelliteCapabilitiesConsumer;
import android.telephony.satellite.stub.ISatelliteListener;
import android.telephony.satellite.stub.SatelliteDatagram;
import android.telephony.satellite.stub.SystemSelectionSpecifier;

/**
 * {@hide}
@@ -500,4 +501,21 @@ oneway interface ISatellite {
      *   SatelliteResult:SATELLITE_RESULT_REQUEST_NOT_SUPPORTED
      */
     void abortSendingSatelliteDatagrams(in IIntegerConsumer resultCallback);

     /**
      * Request to update the satellite subscription to be used for Non-Terrestrial network.
      *
      * @param iccId The ICCID of the subscription
      * @param resultCallback The callback to receive the error code result of the operation.
      */
     void updateSatelliteSubscription(in String iccId, in IIntegerConsumer resultCallback);

     /**
      * Request to update system selection channels
      *
      * @param systemSelectionSpecifiers list of system selection specifiers
      * @param resultCallback The callback to receive the error code result of the operation.
      */
     void updateSystemSelectionChannels(in List<SystemSelectionSpecifier> systemSelectionSpecifiers,
            in IIntegerConsumer resultCallback);
}
+39 −0
Original line number Diff line number Diff line
@@ -262,6 +262,22 @@ public class SatelliteImplBase extends SatelliteService {
                    "abortSendingSatelliteDatagrams");
        }

        @Override
        public void updateSatelliteSubscription(String iccId, IIntegerConsumer resultCallback)
                throws RemoteException {
            executeMethodAsync(() -> SatelliteImplBase.this.updateSatelliteSubscription(
                    iccId, resultCallback), "updateSatelliteSubscription");
        }

        @Override
        public void updateSystemSelectionChannels(
                List<SystemSelectionSpecifier> systemSelectionSpecifiers,
                IIntegerConsumer resultCallback) throws RemoteException {
            executeMethodAsync(() -> SatelliteImplBase.this.updateSystemSelectionChannels(
                    systemSelectionSpecifiers, resultCallback),
                    "updateSystemSelectionChannels");
        }

        // Call the methods with a clean calling identity on the executor and wait indefinitely for
        // the future to return.
        private void executeMethodAsync(Runnable r, String errorLogName) throws RemoteException {
@@ -768,4 +784,27 @@ public class SatelliteImplBase extends SatelliteService {
    public void abortSendingSatelliteDatagrams(@NonNull IIntegerConsumer resultCallback){
        // stub implementation
    }

    /**
     * Request to update the satellite subscription to be used for Non-Terrestrial network.
     *
     * @param iccId The ICCID of the subscription
     * @param resultCallback The callback to receive the error code result of the operation.
     */
    public void updateSatelliteSubscription(String iccId,
            @NonNull IIntegerConsumer resultCallback) {
        // stub implementation
    }

    /**
     * Request to update system selection channels
     *
     * @param systemSelectionSpecifiers list of system selection specifiers
     * @param resultCallback The callback to receive the error code result of the operation.
     */
    public void updateSystemSelectionChannels(
            @NonNull List<SystemSelectionSpecifier> systemSelectionSpecifiers,
            @NonNull IIntegerConsumer resultCallback) {
        // stub implementation
    }
}
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.telephony.satellite.stub;

/**
 * {@hide}
 */
parcelable SystemSelectionSpecifier {
    /** Network plmn associated with channel information. */
    String mMccMnc;

    /**
     * The frequency bands to scan. Bands and earfcns won't overlap.
     * Bands will be filled only if the whole band is needed.
     * Maximum length of the vector is 8.
     */
    int[] mBands;

    /**
     * The radio channels to scan as defined in 3GPP TS 25.101 and 36.101.
     * Maximum length of the vector is 32.
     */
    int[] mEarfcs;
}