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

Commit 8821654a authored by Bonian Chen's avatar Bonian Chen Committed by Android (Google) Code Review
Browse files

Merge "[Settings] Apply ImsQueryProvisioningStat to VoLTE"

parents 02be0c65 19b232f7
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -39,9 +39,9 @@ abstract class ImsQueryController {
    /**
    /**
     * Constructor for query IMS status
     * Constructor for query IMS status
     *
     *
     * @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability}
     * @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability}
     * @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech}
     * @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech}
     * @param transportType {@code @AccessNetworkConstants.TransportType}
     * @param transportType {@link AccessNetworkConstants#TransportType}
     */
     */
    ImsQueryController(
    ImsQueryController(
            @MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
            @MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
+4 −4
Original line number Original line Diff line number Diff line
@@ -22,7 +22,7 @@ import android.telephony.ims.stub.ImsRegistrationImplBase;




/**
/**
 * An {@code ImsQuery} for accessing IMS provision stat
 * An {@link ImsQuery} for accessing IMS provision stat
 */
 */
public class ImsQueryProvisioningStat implements ImsQuery {
public class ImsQueryProvisioningStat implements ImsQuery {


@@ -33,8 +33,8 @@ public class ImsQueryProvisioningStat implements ImsQuery {
    /**
    /**
     * Constructor
     * Constructor
     * @param subId subscription id
     * @param subId subscription id
     * @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability}
     * @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability}
     * @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech}
     * @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech}
     */
     */
    public ImsQueryProvisioningStat(int subId,
    public ImsQueryProvisioningStat(int subId,
            @MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
            @MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
@@ -45,7 +45,7 @@ public class ImsQueryProvisioningStat implements ImsQuery {
    }
    }


    /**
    /**
     * Implementation of interface {@code ImsQuery}
     * Implementation of interface {@link ImsQuery}
     *
     *
     * @return result of query
     * @return result of query
     */
     */
+12 −39
Original line number Original line Diff line number Diff line
@@ -23,9 +23,6 @@ import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.util.Log;
import android.util.Log;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
@@ -33,8 +30,6 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import androidx.preference.SwitchPreference;


import com.android.ims.ImsManager;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.VolteQueryImsState;
import com.android.settings.network.ims.VolteQueryImsState;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -55,8 +50,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
    Preference mPreference;
    Preference mPreference;
    private CarrierConfigManager mCarrierConfigManager;
    private CarrierConfigManager mCarrierConfigManager;
    private PersistableBundle mCarrierConfig;
    private PersistableBundle mCarrierConfig;
    @VisibleForTesting
    ImsManager mImsManager;
    private PhoneCallStateListener mPhoneStateListener;
    private PhoneCallStateListener mPhoneStateListener;
    @VisibleForTesting
    @VisibleForTesting
    Integer mCallState;
    Integer mCallState;
@@ -81,10 +74,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
        }
        }
        mSubId = subId;
        mSubId = subId;
        mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
        mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
        if (SubscriptionManager.isValidSubscriptionId(mSubId)) {
            mImsManager = ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(
                    mContext, mSubId));
        }


        final boolean show4GForLTE = mCarrierConfig.getBoolean(
        final boolean show4GForLTE = mCarrierConfig.getBoolean(
                CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
                CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
@@ -96,29 +85,26 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
        return this;
        return this;
    }
    }


    @VisibleForTesting
    ProvisioningManager getProvisioningManager(int subId) {
        return ProvisioningManager.createForSubscriptionId(subId);
    }

    @Override
    @Override
    public int getAvailabilityStatus(int subId) {
    public int getAvailabilityStatus(int subId) {
        init(subId);
        init(subId);
        if (!isModeMatched()) {
        if (!isModeMatched()) {
            return CONDITIONALLY_UNAVAILABLE;
            return CONDITIONALLY_UNAVAILABLE;
        }
        }
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            return CONDITIONALLY_UNAVAILABLE;
        }
        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
        if ((carrierConfig == null)
                || carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) {
            return CONDITIONALLY_UNAVAILABLE;
        }
        final VolteQueryImsState queryState = queryImsState(subId);
        final VolteQueryImsState queryState = queryImsState(subId);
        final boolean isVisible = SubscriptionManager.isValidSubscriptionId(subId)
        if (!queryState.isReadyToVoLte()) {
                && mImsManager != null && carrierConfig != null
            return CONDITIONALLY_UNAVAILABLE;
                && mImsManager.isVolteEnabledByPlatform()
        }
                && isVolteProvisionedOnDevice(mSubId)
        return (isUserControlAllowed() && queryState.isAllowUserControl())
                && MobileNetworkUtils.isImsServiceStateReady(mImsManager)
                ? AVAILABLE : AVAILABLE_UNSEARCHABLE;
                && !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
        return isVisible
                ? (isUserControlAllowed() && queryState.isAllowUserControl()
                ? AVAILABLE : AVAILABLE_UNSEARCHABLE)
                : CONDITIONALLY_UNAVAILABLE;
    }
    }


    @Override
    @Override
@@ -200,19 +186,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
                CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
                CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
    }
    }


    private boolean isVolteProvisionedOnDevice(int subId) {
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            return true;
        }
        final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
        if (provisioningMgr == null) {
            return true;
        }
        return provisioningMgr.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
    }

    private class PhoneCallStateListener extends PhoneStateListener {
    private class PhoneCallStateListener extends PhoneStateListener {


        PhoneCallStateListener() {
        PhoneCallStateListener() {
+7 −35
Original line number Original line Diff line number Diff line
@@ -28,9 +28,6 @@ import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.util.Log;
import android.util.Log;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
@@ -40,10 +37,8 @@ import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction;
import androidx.slice.builders.SliceAction;


import com.android.ims.ImsManager;
import com.android.settings.R;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.Utils;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.VolteQueryImsState;
import com.android.settings.network.ims.VolteQueryImsState;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.SliceBroadcastReceiver;
import com.android.settings.slices.SliceBroadcastReceiver;
@@ -112,14 +107,6 @@ public class Enhanced4gLteSliceHelper {
            return null;
            return null;
        }
        }


        final ImsManager imsManager = getImsManager(subId);

        if (!imsManager.isVolteEnabledByPlatform()
                || !isVolteProvisionedOnDevice(subId)) {
            Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
            return null;
        }

        if (isCarrierConfigManagerKeyEnabled(
        if (isCarrierConfigManagerKeyEnabled(
                CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL, subId, false)
                CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL, subId, false)
                || !isCarrierConfigManagerKeyEnabled(
                || !isCarrierConfigManagerKeyEnabled(
@@ -130,6 +117,11 @@ public class Enhanced4gLteSliceHelper {
        }
        }


        final VolteQueryImsState queryState = queryImsState(subId);
        final VolteQueryImsState queryState = queryImsState(subId);
        if (!queryState.isVoLteProvisioned()) {
            Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
            return null;
        }

        try {
        try {
            return getEnhanced4gLteSlice(sliceUri,
            return getEnhanced4gLteSlice(sliceUri,
                    queryState.isEnabledByUser(), subId);
                    queryState.isEnabledByUser(), subId);
@@ -164,15 +156,6 @@ public class Enhanced4gLteSliceHelper {
                .build();
                .build();
    }
    }


    protected ImsManager getImsManager(int subId) {
        return ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(mContext, subId));
    }

    @VisibleForTesting
    ProvisioningManager getProvisioningManager(int subId) {
        return ProvisioningManager.createForSubscriptionId(subId);
    }

    /**
    /**
     * Handles Enhanced 4G LTE mode setting change from Enhanced 4G LTE slice and posts
     * Handles Enhanced 4G LTE mode setting change from Enhanced 4G LTE slice and posts
     * notification. Should be called when intent action is ACTION_ENHANCED_4G_LTE_CHANGED
     * notification. Should be called when intent action is ACTION_ENHANCED_4G_LTE_CHANGED
@@ -183,9 +166,8 @@ public class Enhanced4gLteSliceHelper {
        final int subId = getDefaultVoiceSubId();
        final int subId = getDefaultVoiceSubId();


        if (SubscriptionManager.isValidSubscriptionId(subId)) {
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            final ImsManager imsManager = getImsManager(subId);
            if (imsManager.isVolteEnabledByPlatform() && isVolteProvisionedOnDevice(subId)) {
            final VolteQueryImsState queryState = queryImsState(subId);
            final VolteQueryImsState queryState = queryImsState(subId);
            if (queryState.isVoLteProvisioned()) {
                final boolean currentValue = queryState.isEnabledByUser()
                final boolean currentValue = queryState.isEnabledByUser()
                        && queryState.isAllowUserControl();
                        && queryState.isAllowUserControl();
                final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
                final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
@@ -285,16 +267,6 @@ public class Enhanced4gLteSliceHelper {
        return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */);
        return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */);
    }
    }


    private boolean isVolteProvisionedOnDevice(int subId) {
        final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
        if (provisioningMgr == null) {
            return true;
        }
        return provisioningMgr.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
    }

    @VisibleForTesting
    @VisibleForTesting
    VolteQueryImsState queryImsState(int subId) {
    VolteQueryImsState queryImsState(int subId) {
        return new VolteQueryImsState(mContext, subId);
        return new VolteQueryImsState(mContext, subId);
+84 −0
Original line number Original line Diff line number Diff line
/*
 * 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 com.android.settings.network.ims;

import android.content.Context;

import com.android.ims.ImsManager;



/**
 * Controller class for mock VoLte status
 */
public class MockVolteQueryImsState extends VolteQueryImsState {

    private ImsQuery mIsTtyOnVolteEnabled;
    private ImsQuery mIsProvisionedOnDevice;
    private ImsQuery mIsEnabledByUser;

    /**
     * Constructor
     *
     * @param context {@link Context}
     * @param subId subscription's id
     */
    public MockVolteQueryImsState(Context context, int subId) {
        super(context, subId);
    }

    public ImsManager getImsManager(int subId) {
        return super.getImsManager(subId);
    }

    public void setIsTtyOnVolteEnabled(boolean enabled) {
        mIsTtyOnVolteEnabled = new MockImsQueryResult.BooleanResult(enabled);
    }

    @Override
    ImsQuery isTtyOnVolteEnabled(int subId) {
        if (mIsTtyOnVolteEnabled != null) {
            return mIsTtyOnVolteEnabled;
        }
        return super.isTtyOnVolteEnabled(subId);
    }

    public void setIsProvisionedOnDevice(boolean isProvisioned) {
        mIsProvisionedOnDevice = new MockImsQueryResult.BooleanResult(isProvisioned);
    }

    @Override
    ImsQuery isProvisionedOnDevice(int subId) {
        if (mIsProvisionedOnDevice != null) {
            return mIsProvisionedOnDevice;
        }
        return super.isProvisionedOnDevice(subId);
    }

    public void setIsEnabledByUser(boolean enabled) {
        mIsEnabledByUser = new MockImsQueryResult.BooleanResult(enabled);
    }

    @Override
    ImsQuery isEnabledByUser(int subId) {
        if (mIsEnabledByUser != null) {
            return mIsEnabledByUser;
        }
        return super.isEnabledByUser(subId);
    }

}
Loading