diff --git a/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java b/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java new file mode 100644 index 00000000000..20e8c05009e --- /dev/null +++ b/src/com/android/settings/network/ims/ImsQueryVtUserSetting.java @@ -0,0 +1,46 @@ +/* + * 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.telephony.ims.ImsMmTelManager; + + +/** + * An {@code ImsQuery} for accessing IMS VT enabled settings from user + */ +public class ImsQueryVtUserSetting extends ImsDirectQueryImpl { + + /** + * Constructor + * @param subId subscription id + */ + public ImsQueryVtUserSetting(int subId) { + mSubId = subId; + } + + private volatile int mSubId; + + /** + * Query running within a {@code Callable} + * + * @return result of query + */ + public Boolean call() { + final ImsMmTelManager imsMmTelManager = ImsMmTelManager.createForSubscriptionId(mSubId); + return imsMmTelManager.isVtSettingEnabled(); + } +} diff --git a/src/com/android/settings/network/ims/VtQueryImsState.java b/src/com/android/settings/network/ims/VtQueryImsState.java index 38306cd4818..ca8deea8d2e 100644 --- a/src/com/android/settings/network/ims/VtQueryImsState.java +++ b/src/com/android/settings/network/ims/VtQueryImsState.java @@ -19,13 +19,12 @@ package com.android.settings.network.ims; import android.content.Context; import android.telephony.SubscriptionManager; -import com.android.ims.ImsManager; -import com.android.settings.network.SubscriptionUtil; +import androidx.annotation.VisibleForTesting; /** * Controller class for querying VT status */ -public class VtQueryImsState { +public class VtQueryImsState extends ImsQueryController { private Context mContext; private int mSubId; @@ -41,6 +40,27 @@ public class VtQueryImsState { mSubId = subId; } + /** + * Implementation of ImsQueryController#isEnabledByUser(int subId) + */ + @VisibleForTesting + ImsDirectQuery isEnabledByUser(int subId) { + return new ImsQueryVtUserSetting(subId); + } + + /** + * Get allowance status for user to alter configuration + * + * @return true when changing configuration by user is allowed. + */ + public boolean isAllowUserControl() { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } + return ((!isSystemTtyEnabled(mContext).directQuery()) + || (isTtyOnVolteEnabled(mSubId).directQuery())); + } + /** * Get user's configuration * @@ -50,8 +70,6 @@ public class VtQueryImsState { if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { return false; } - ImsManager imsManager = ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId( - mContext, mSubId)); - return imsManager.isVtEnabledByUser(); + return isEnabledByUser(mSubId).directQuery(); } } diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java index 297302023f8..6fba1612dd6 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java @@ -105,7 +105,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC switchPreference.setVisible(videoCallEnabled); if (videoCallEnabled) { final boolean videoCallEditable = queryVoLteState(mSubId).isEnabledByUser() - && mImsManager.isNonTtyOrTtyOnVolteEnabled(); + && queryImsState(mSubId).isAllowUserControl(); preference.setEnabled(videoCallEditable && mCallState == TelephonyManager.CALL_STATE_IDLE); switchPreference.setChecked(videoCallEditable && isChecked());