[Settings] Enable WiFi calling toggle in search

WiFi calling toggle in search need to pass the toggle request to
receiver to make it work.

Bug: 206871758
Test: local
Change-Id: If23d1ae1eaeb5d505e584dec94e1980f6e329c65
(cherry picked from commit a6a35b8409)
This commit is contained in:
Bonian Chen
2021-12-16 18:06:54 +08:00
parent a582bb1092
commit a93796f7a3

View File

@@ -179,7 +179,8 @@ public class WifiCallingSliceHelper {
.setTitle(res.getText(R.string.wifi_calling_settings_title))
.addEndItem(
SliceAction.createToggle(
getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED),
getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED,
isWifiCallingEnabled),
null /* actionTitle */, isWifiCallingEnabled))
.setPrimaryAction(SliceAction.createDeeplink(
getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY),
@@ -316,7 +317,7 @@ public class WifiCallingSliceHelper {
final Resources res = getResourcesForSubId(subId);
return new RowBuilder()
.setTitle(res.getText(preferenceTitleResId))
.setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
.setTitleItem(SliceAction.createToggle(getBroadcastIntent(action, checked),
icon, res.getText(preferenceTitleResId), checked));
}
@@ -370,25 +371,31 @@ public class WifiCallingSliceHelper {
public void handleWifiCallingChanged(Intent intent) {
final int subId = getDefaultVoiceSubId();
if (SubscriptionManager.isValidSubscriptionId(subId)) {
if (SubscriptionManager.isValidSubscriptionId(subId)
&& intent.hasExtra(EXTRA_TOGGLE_STATE)) {
final WifiCallingQueryImsState queryState = queryImsState(subId);
if (queryState.isWifiCallingProvisioned()) {
final boolean currentValue = queryState.isEnabledByUser()
&& queryState.isAllowUserControl();
final boolean currentValue = isWifiCallingEnabled();
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
currentValue);
final Intent activationAppIntent =
getWifiCallingCarrierActivityIntent(subId);
if (!newValue || activationAppIntent == null) {
if ((newValue == currentValue) && activationAppIntent == null) {
// If either the action is to turn off wifi calling setting
// or there is no activation involved - Update the setting
if (newValue != currentValue) {
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
imsMmTelManager.setVoWiFiSettingEnabled(newValue);
}
final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
imsMmTelManager.setVoWiFiSettingEnabled(!newValue);
} else {
Log.w(TAG, "action not taken: subId " + subId
+ " from " + currentValue + " to " + newValue);
}
} else {
Log.w(TAG, "action not taken: subId " + subId + " needs provision");
}
} else {
Log.w(TAG, "action not taken: subId " + subId);
}
// notify change in slice in any case to get re-queried. This would result in displaying
// appropriate message with the updated setting.
mContext.getContentResolver().notifyChange(WIFI_CALLING_URI, null);
@@ -541,10 +548,20 @@ public class WifiCallingSliceHelper {
PendingIntent.FLAG_IMMUTABLE);
}
private PendingIntent getBroadcastIntent(String action) {
/**
* Create PendingIntent for Slice.
* Note: SliceAction#createDeeplink() didn't support toggle status so far,
* therefore, embedding toggle status within PendingIntent.
*
* @param action Slice action
* @param isChecked Status when Slice created.
* @return PendingIntent
*/
private PendingIntent getBroadcastIntent(String action, boolean isChecked) {
final Intent intent = new Intent(action);
intent.setClass(mContext, SliceBroadcastReceiver.class);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
intent.putExtra(EXTRA_TOGGLE_STATE, isChecked);
return PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
}