All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.android.telephony.ThermalMitigationRequest Maven / Gradle / Ivy

/*
 * Copyright (C) 2020 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.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;


/**
 * Class stores information related to the type of data throttling request to be sent to {@link
 * TelephonyManager#sendThermalMitigationRequest(ThermalMitigationResult)}.
 * @hide
 */
@SystemApi
public final class ThermalMitigationRequest implements Parcelable {
    /**
     * Sent as a thermal mititgation action to {@link
     * TelephonyManager#sendThermalMitigationRequest(ThermalMitigationResult)} to start data
     * throttling. {@link TelephonyManager#InvalidThermalMitigationRequestException} will be thrown
     * if dataThrottlingRequest is {@code null} or if completion duration is < 0.
     *
     * @hide
     */
    @SystemApi
    public static final int THERMAL_MITIGATION_ACTION_DATA_THROTTLING = 0;

    /**
     * Sent as a thermal mititgation action to {@link
     * TelephonyManager#sendThermalMitigationRequest(ThermalMitigationResult)} to allow only voice
     * calls and internet data will not be available. This attempts to enable radio if currently
     * disabled for thermal mitigation with no guarantee of it actually turning on.
     * dataThrottlingRequest must be {@code null} or {@link
     * TelephonyManager#InvalidThermalMitigationRequestException} will be thrown.
     *
     * @hide
     */
    @SystemApi
    public static final int THERMAL_MITIGATION_ACTION_VOICE_ONLY = 1;

    /**
     * Sent as a thermal mititgation action to {@link'
     * TelephonyManager#sendThermalMitigationRequest(ThermalMitigationResult)} to turn radio off. If
     * radio is not able to be powered off because of an ongoing voice call, pending emergency call,
     * or any other state that wouldn't allow radio off, {@link
     * TelephonyManager#THERMAL_MITIGATION_RESULT_INVALID_STATE}.
     * dataThrottlingRequest must be {@code null} or
     * {@link TelephonyManager#InvalidThermalMitigationRequestException} will be returned.
     *
     * @hide
     */
    @SystemApi
    public static final int THERMAL_MITIGATION_ACTION_RADIO_OFF = 2;

    /**
     * Type of thermal mitigation action.
     * @hide
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "THERMAL_MITIGATION_ACTION_" }, value = {
        THERMAL_MITIGATION_ACTION_DATA_THROTTLING,
        THERMAL_MITIGATION_ACTION_VOICE_ONLY,
        THERMAL_MITIGATION_ACTION_RADIO_OFF})
    public @interface ThermalMitigationAction {}

    private @ThermalMitigationAction int mThermalMitigationAction;
    private DataThrottlingRequest mDataThrottlingRequest;

    /**
     * @param thermalMitigationAction thermal mitigation action.
     * @param dataThrottlingRequest is the parameters for more fine-controlled data throttling. This
     * is only applicable if thermalMitigationAction is
     * {@link #THERMAL_MITIGATION_ACTION_DATA_THROTTLING}. Otherwise, it must be set to
     * {@code null}. See {@link DataThrottlingRequest} for more details.
     */
    private ThermalMitigationRequest(@ThermalMitigationAction int thermalMitigationAction,
            @Nullable DataThrottlingRequest dataThrottlingRequest) {
        mThermalMitigationAction = thermalMitigationAction;
        mDataThrottlingRequest = dataThrottlingRequest;
    }

    private ThermalMitigationRequest(Parcel in) {
        mThermalMitigationAction = in.readInt();
        mDataThrottlingRequest = in.readParcelable(DataThrottlingRequest.class.getClassLoader(), android.telephony.DataThrottlingRequest.class);
    }

     /**
     * Implement the Parcelable interface
     */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mThermalMitigationAction);
        dest.writeParcelable(mDataThrottlingRequest, 0);
    }

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

    @Override
    public String toString() {
        return "[ThermalMitigationRequest "
            + ", thermalMitigationAction=" + mThermalMitigationAction
            + ", dataThrottlingRequest=" + mDataThrottlingRequest
            + "]";
    }

    /**
     * @return the thermal mitigation action.
     */
    public @ThermalMitigationAction int getThermalMitigationAction() {
        return mThermalMitigationAction;
    }

    /**
     * @return the data throttling request.
     */
    @Nullable
    public DataThrottlingRequest getDataThrottlingRequest() {
        return mDataThrottlingRequest;
    }

    public static final @NonNull Parcelable.Creator CREATOR =
            new Parcelable.Creator() {

        @Override
        public ThermalMitigationRequest createFromParcel(Parcel in) {
            return new ThermalMitigationRequest(in);
        }

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

    /**
     * Provides a convenient way to set the fields of a {@link ThermalMitigationRequest} when
     * creating a new instance.
     *
     * 

The example below shows how you might create a new {@code ThermalMitigationRequest}: * *


     *
     * ThermalMitigationRequest dp = new ThermalMitigationRequest.Builder()
     *     .setThermalMitigationAction(
     *          ThermalMitigationRequest.THERMAL_MITIGATION_ACTION_DATA_THROTTLING)
     *     .setDataThrottlingRequest(new DataThrottlingRequest.Builder()
     *          .setDataThrottlingAction(
     *              DataThrottlingRequest.DATA_THROTTLING_ACTION_THROTTLE_SECONDARY_CARRIER)
     *          .setCompletionDurationMillis(10000L)
     *          .build())
     *     .build();
     * 
* * @hide */ @SystemApi public static final class Builder { private @ThermalMitigationAction int mThermalMitigationAction = -1; private DataThrottlingRequest mDataThrottlingRequest; /** * Default constructor for Builder. */ public Builder() {} /** * Set the thermal mitigation action. * * @param thermalMitigationAction thermal mitigation action. See {@link * #THERMAL_MITIGATION_ACTION_DATA_THROTTLING}, {@link * #THERMAL_MITIGATION_ACTION_VOICE_ONLY}, and {@link * #THERMAL_MITIGATION_ACTION_RADIO_OFF} for more details. * * @return The same instance of the builder. */ public @NonNull Builder setThermalMitigationAction( @ThermalMitigationAction int thermalMitigationAction) { mThermalMitigationAction = thermalMitigationAction; return this; } /** * Set the data throttling request. * * @param dataThrottlingRequest is the parameters for more fine-controlled data throttling. * This is only applicable if thermalMitigationAction is {@link * #THERMAL_MITIGATION_ACTION_DATA_THROTTLING}. Otherwise, it should not be set and * will throw an IllegalArgumentException if it is. See {@link DataThrottlingRequest} * for more details. * * @return The same instance of the builder. */ public @NonNull Builder setDataThrottlingRequest( @NonNull DataThrottlingRequest dataThrottlingRequest) { mDataThrottlingRequest = dataThrottlingRequest; return this; } /** * Build the ThermalMitigationRequest. * * @return the ThermalMitigationRequest object. */ public @NonNull ThermalMitigationRequest build() { if (mThermalMitigationAction < 0) { throw new IllegalArgumentException("thermalMitigationAction was " + " not set"); } if (mThermalMitigationAction == THERMAL_MITIGATION_ACTION_DATA_THROTTLING) { if (mDataThrottlingRequest == null) { throw new IllegalArgumentException("dataThrottlingRequest cannot be null for " + "THERMAL_MITIGATION_ACTION_DATA_THROTTLING"); } } else if (mDataThrottlingRequest != null) { throw new IllegalArgumentException("dataThrottlingRequest must be null for " + "THERMAL_MITIGATION_ACTION_VOICE_ONLY and " + "THERMAL_MITIGATION_ACTION_RADIO_OFF"); } return new ThermalMitigationRequest(mThermalMitigationAction, mDataThrottlingRequest); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy