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

Commit 6a37f543 authored by Hunsuk Choi's avatar Hunsuk Choi
Browse files

Add APIs for the domain selection service

Bug: 243344927
Test: atest
Change-Id: I3ec9be06b1646df884c2915ac199f5845c1d49d0
parent f9daade4
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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;

parcelable DomainSelectionService.SelectionAttributes;
+857 −0

File added.

Preview size limit exceeded, changes collapsed.

+45 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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;

import android.annotation.NonNull;
import android.telephony.DomainSelectionService.SelectionAttributes;

/**
 * Implemented as part of the {@link DomainSelectionService} to implement domain selection
 * for a specific use case.
 * @hide
 */
public interface DomainSelector {
    /**
     * Cancel an ongoing selection operation. It is up to the DomainSelectionService
     * to clean up all ongoing operations with the framework.
     */
    void cancelSelection();

    /**
     * Reselect a domain due to the call not setting up properly.
     *
     * @param attr attributes required to select the domain.
     */
    void reselectDomain(@NonNull SelectionAttributes attr);

    /**
     * Finish the selection procedure and clean everything up.
     */
    void finishSelection();
}
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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;

parcelable EmergencyRegResult;
+318 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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;

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

import java.util.Objects;

/**
 * Contains attributes required to determine the domain for a telephony service
 * @hide
 */
public final class EmergencyRegResult implements Parcelable {

    /**
     * Indicates the cellular network type of the acquired system.
     */
    private @AccessNetworkConstants.RadioAccessNetworkType int mAccessNetworkType;

    /**
     * Registration state of the acquired system.
     */
    private @NetworkRegistrationInfo.RegistrationState int mRegState;

    /**
     * EMC domain indicates the current domain of the acquired system.
     */
    private @NetworkRegistrationInfo.Domain int mDomain;

    /**
     * Indicates whether the network supports voice over PS network.
     */
    private boolean mIsVopsSupported;

    /**
     * This indicates if camped network support VoLTE emergency bearers.
     * This should only be set if the UE is in LTE mode.
     */
    private boolean mIsEmcBearerSupported;

    /**
     * The value of the network provided EMC in 5G Registration ACCEPT.
     * This should be set only if the UE is in 5G mode.
     */
    private int mNwProvidedEmc;

    /**
     * The value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
     * This should be set only if the UE is in 5G mode.
     */
    private int mNwProvidedEmf;

    /** 3-digit Mobile Country Code, 000..999, empty string if unknown. */
    private @NonNull String mMcc;

    /** 2 or 3-digit Mobile Network Code, 00..999, empty string if unknown. */
    private @NonNull String mMnc;

    /**
     * The ISO-3166-1 alpha-2 country code equivalent for the network's country code,
     * empty string if unknown.
     */
    private @NonNull String mIso;

    /**
     * Constructor
     * @param accessNetwork Indicates the network type of the acquired system.
     * @param regState Indicates the registration state of the acquired system.
     * @param domain Indicates the current domain of the acquired system.
     * @param isVopsSupported Indicates whether the network supports voice over PS network.
     * @param isEmcBearerSupported  Indicates if camped network support VoLTE emergency bearers.
     * @param emc The value of the network provided EMC in 5G Registration ACCEPT.
     * @param emf The value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
     * @param mcc Mobile country code, empty string if unknown.
     * @param mnc Mobile network code, empty string if unknown.
     * @param iso The ISO-3166-1 alpha-2 country code equivalent, empty string if unknown.
     * @hide
     */
    public EmergencyRegResult(
            @AccessNetworkConstants.RadioAccessNetworkType int accessNetwork,
            @NetworkRegistrationInfo.RegistrationState int regState,
            @NetworkRegistrationInfo.Domain int domain,
            boolean isVopsSupported, boolean isEmcBearerSupported, int emc, int emf,
            @NonNull String mcc, @NonNull String mnc, @NonNull String iso) {
        mAccessNetworkType = accessNetwork;
        mRegState = regState;
        mDomain = domain;
        mIsVopsSupported = isVopsSupported;
        mIsEmcBearerSupported = isEmcBearerSupported;
        mNwProvidedEmc = emc;
        mNwProvidedEmf = emf;
        mMcc = mcc;
        mMnc = mnc;
        mIso = iso;
    }

    /**
     * Copy constructors
     *
     * @param s Source emergency scan result
     * @hide
     */
    public EmergencyRegResult(@NonNull EmergencyRegResult s) {
        mAccessNetworkType = s.mAccessNetworkType;
        mRegState = s.mRegState;
        mDomain = s.mDomain;
        mIsVopsSupported = s.mIsVopsSupported;
        mIsEmcBearerSupported = s.mIsEmcBearerSupported;
        mNwProvidedEmc = s.mNwProvidedEmc;
        mNwProvidedEmf = s.mNwProvidedEmf;
        mMcc = s.mMcc;
        mMnc = s.mMnc;
        mIso = s.mIso;
    }

    /**
     * Construct a EmergencyRegResult object from the given parcel.
     */
    private EmergencyRegResult(@NonNull Parcel in) {
        readFromParcel(in);
    }

    /**
     * Returns the cellular access network type of the acquired system.
     *
     * @return the cellular network type.
     */
    public @AccessNetworkConstants.RadioAccessNetworkType int getAccessNetwork() {
        return mAccessNetworkType;
    }

    /**
     * Returns the registration state of the acquired system.
     *
     * @return the registration state.
     */
    public @NetworkRegistrationInfo.RegistrationState int getRegState() {
        return mRegState;
    }

    /**
     * Returns the current domain of the acquired system.
     *
     * @return the current domain.
     */
    public @NetworkRegistrationInfo.Domain int getDomain() {
        return mDomain;
    }

    /**
     * Returns whether the network supports voice over PS network.
     *
     * @return {@code true} if the network supports voice over PS network.
     */
    public boolean isVopsSupported() {
        return mIsVopsSupported;
    }

    /**
     * Returns whether camped network support VoLTE emergency bearers.
     * This is not valid if the UE is not in LTE mode.
     *
     * @return {@code true} if the network supports VoLTE emergency bearers.
     */
    public boolean isEmcBearerSupported() {
        return mIsEmcBearerSupported;
    }

    /**
     * Returns the value of the network provided EMC in 5G Registration ACCEPT.
     * This is not valid if UE is not in 5G mode.
     *
     * @return the value of the network provided EMC.
     */
    public int getNwProvidedEmc() {
        return mNwProvidedEmc;
    }

    /**
     * Returns the value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
     * This is not valid if UE is not in 5G mode.
     *
     * @return the value of the network provided EMF.
     */
    public int getNwProvidedEmf() {
        return mNwProvidedEmf;
    }

    /**
     * Returns 3-digit Mobile Country Code.
     *
     * @return Mobile Country Code.
     */
    public @NonNull String getMcc() {
        return mMcc;
    }

    /**
     * Returns 2 or 3-digit Mobile Network Code.
     *
     * @return Mobile Network Code.
     */
    public @NonNull String getMnc() {
        return mMnc;
    }

    /**
     * Returns the ISO-3166-1 alpha-2 country code is provided in lowercase 2 character format.
     *
     * @return Country code.
     */
    public @NonNull String getIso() {
        return mIso;
    }

    @Override
    public @NonNull String toString() {
        return "{ accessNetwork="
                + AccessNetworkConstants.AccessNetworkType.toString(mAccessNetworkType)
                + ", regState=" + NetworkRegistrationInfo.registrationStateToString(mRegState)
                + ", domain=" + NetworkRegistrationInfo.domainToString(mDomain)
                + ", vops=" + mIsVopsSupported
                + ", emcBearer=" + mIsEmcBearerSupported
                + ", emc=" + mNwProvidedEmc
                + ", emf=" + mNwProvidedEmf
                + ", mcc=" + mMcc
                + ", mnc=" + mMnc
                + ", iso=" + mIso
                + " }";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        EmergencyRegResult that = (EmergencyRegResult) o;
        return mAccessNetworkType == that.mAccessNetworkType
                && mRegState == that.mRegState
                && mDomain == that.mDomain
                && mIsVopsSupported == that.mIsVopsSupported
                && mIsEmcBearerSupported == that.mIsEmcBearerSupported
                && mNwProvidedEmc == that.mNwProvidedEmc
                && mNwProvidedEmf == that.mNwProvidedEmf
                && TextUtils.equals(mMcc, that.mMcc)
                && TextUtils.equals(mMnc, that.mMnc)
                && TextUtils.equals(mIso, that.mIso);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mAccessNetworkType, mRegState, mDomain,
                mIsVopsSupported, mIsEmcBearerSupported,
                mNwProvidedEmc, mNwProvidedEmf,
                mMcc, mMnc, mIso);
    }

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

    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeInt(mAccessNetworkType);
        out.writeInt(mRegState);
        out.writeInt(mDomain);
        out.writeBoolean(mIsVopsSupported);
        out.writeBoolean(mIsEmcBearerSupported);
        out.writeInt(mNwProvidedEmc);
        out.writeInt(mNwProvidedEmf);
        out.writeString8(mMcc);
        out.writeString8(mMnc);
        out.writeString8(mIso);
    }

    private void readFromParcel(@NonNull Parcel in) {
        mAccessNetworkType = in.readInt();
        mRegState = in.readInt();
        mDomain = in.readInt();
        mIsVopsSupported = in.readBoolean();
        mIsEmcBearerSupported = in.readBoolean();
        mNwProvidedEmc = in.readInt();
        mNwProvidedEmf = in.readInt();
        mMcc = in.readString8();
        mMnc = in.readString8();
        mIso = in.readString8();
    }

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

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