Merge "Fix ViLTE is not available when WiFi Calling is disabled"

This commit is contained in:
Josh Hou
2019-10-25 05:40:08 +00:00
committed by Android (Google) Code Review
7 changed files with 56 additions and 21 deletions

View File

@@ -145,7 +145,8 @@
<PreferenceCategory
android:key="calling_category"
android:title="@string/call_category">
android:title="@string/call_category"
settings:controller="com.android.settings.network.telephony.CallingPreferenceCategoryController">
<PreferenceScreen
android:key="wifi_calling"

View File

@@ -0,0 +1,31 @@
/*
* Copyright (C) 2019 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.telephony;
import android.content.Context;
import com.android.settings.widget.PreferenceCategoryController;
/**
* Preference controller for "Calling" category
*/
public class CallingPreferenceCategoryController extends PreferenceCategoryController {
public CallingPreferenceCategoryController(Context context, String key) {
super(context, key);
}
}

View File

@@ -154,6 +154,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
if (!FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2)) {
use(EuiccPreferenceController.class).init(mSubId);
}
final WifiCallingPreferenceController wifiCallingPreferenceController =
use(WifiCallingPreferenceController.class).init(mSubId);
final OpenNetworkSelectPagePreferenceController openNetworkSelectPagePreferenceController =
@@ -172,6 +173,8 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
final VideoCallingPreferenceController videoCallingPreferenceController =
use(VideoCallingPreferenceController.class).init(mSubId);
use(CallingPreferenceCategoryController.class).setChildren(
Arrays.asList(wifiCallingPreferenceController, videoCallingPreferenceController));
use(Enhanced4gLtePreferenceController.class).init(mSubId)
.addListener(videoCallingPreferenceController);
use(Enhanced4gCallingPreferenceController.class).init(mSubId)

View File

@@ -63,7 +63,6 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
@Override
public int getAvailabilityStatus(int subId) {
return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
&& MobileNetworkUtils.isWifiCallingEnabled(mContext, subId)
&& isVideoCallEnabled(subId)
? AVAILABLE
: CONDITIONALLY_UNAVAILABLE;

View File

@@ -49,9 +49,6 @@ import java.util.List;
public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
LifecycleObserver, OnStart, OnStop {
@VisibleForTesting
static final String KEY_PREFERENCE_CATEGORY = "calling_category";
private TelephonyManager mTelephonyManager;
@VisibleForTesting
CarrierConfigManager mCarrierConfigManager;
@@ -95,13 +92,6 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
if (intent != null) {
intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
}
if (!isAvailable()) {
// Set category as invisible
final Preference preferenceCateogry = screen.findPreference(KEY_PREFERENCE_CATEGORY);
if (preferenceCateogry != null) {
preferenceCateogry.setVisible(false);
}
}
}
@Override
@@ -158,12 +148,14 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE);
}
public void init(int subId) {
public WifiCallingPreferenceController init(int subId) {
mSubId = subId;
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
mSimCallManager = mContext.getSystemService(TelecomManager.class)
.getSimCallManagerForSubscription(mSubId);
return this;
}
private class PhoneCallStateListener extends PhoneStateListener {

View File

@@ -27,6 +27,7 @@ import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.feature.ImsFeature;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.ims.ImsManager;
@@ -49,6 +50,8 @@ public class VideoCallingPreferenceControllerTest {
private ImsManager mImsManager;
@Mock
private CarrierConfigManager mCarrierConfigManager;
@Mock
private PreferenceScreen mPreferenceScreen;
private VideoCallingPreferenceController mController;
private PersistableBundle mCarrierConfig;
@@ -125,4 +128,15 @@ public class VideoCallingPreferenceControllerTest {
assertThat(mPreference.isEnabled()).isTrue();
assertThat(mPreference.isChecked()).isTrue();
}
@Test
public void displayPreference_notAvailable_setPreferenceInvisible() {
doReturn(false).when(mImsManager).isVtEnabledByPlatform();
mController.displayPreference(mPreferenceScreen);
assertThat(mPreferenceScreen.isVisible()).isFalse();
}
}

View File

@@ -64,7 +64,6 @@ public class WifiCallingPreferenceControllerTest {
private WifiCallingPreferenceController mController;
private Preference mPreference;
private PreferenceCategory mPreferenceCategory;
private Context mContext;
private PersistableBundle mCarrierConfig;
@@ -87,10 +86,6 @@ public class WifiCallingPreferenceControllerTest {
mCarrierConfig = new PersistableBundle();
when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
mPreferenceCategory = new PreferenceCategory(mContext);
when(mPreferenceScreen.findPreference(
WifiCallingPreferenceController.KEY_PREFERENCE_CATEGORY)).thenReturn(
mPreferenceCategory);
when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
mPreference);
}
@@ -164,12 +159,12 @@ public class WifiCallingPreferenceControllerTest {
}
@Test
public void displayPreference_notAvailable_setCategoryInvisible() {
public void displayPreference_notAvailable_setPreferenceInvisible() {
mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
mController.displayPreference(mPreferenceScreen);
assertThat(mPreferenceCategory.isVisible()).isFalse();
assertThat(mPreferenceScreen.isVisible()).isFalse();
}
@Test