Merge "IMS: Do not mute the Mic during add call" into atel.lnx.2.0-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 70493df..b87e31f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -61,6 +61,8 @@
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
<!-- This tells the activity manager to not delay any of our activity
start requests, even if they happen immediately after the user
presses home. -->
diff --git a/InCallUI/src/com/android/incallui/InCallMessageController.java b/InCallUI/src/com/android/incallui/InCallMessageController.java
index d019f6b..aa5a57e 100644
--- a/InCallUI/src/com/android/incallui/InCallMessageController.java
+++ b/InCallUI/src/com/android/incallui/InCallMessageController.java
@@ -30,7 +30,16 @@
import android.content.Context;
import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.IConnectivityManager;
+import android.net.INetworkStatsService;
+import android.net.LinkProperties;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.NetworkState;
import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
import com.android.incallui.InCallVideoCallCallbackNotifier.VideoEventListener;
@@ -51,6 +60,11 @@
CallList.Listener, SessionModificationListener, InCallSessionModificationCauseListener,
InCallDetailsListener {
+ private INetworkStatsService mStatsService;
+ private IConnectivityManager mConnManager;
+ private long previousLteUsage;
+ private long previousWlanUsage;
+
private static InCallMessageController sInCallMessageController;
private PrimaryCallTracker mPrimaryCallTracker;
@@ -78,6 +92,10 @@
InCallPresenter.getInstance().addListener(mPrimaryCallTracker);
InCallVideoCallCallbackNotifier.getInstance().addSessionModificationListener(this);
InCallPresenter.getInstance().addDetailsListener(this);
+ mStatsService = INetworkStatsService.Stub.asInterface(
+ ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
+ mConnManager = IConnectivityManager.Stub.asInterface(
+ ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
}
/**
@@ -95,6 +113,10 @@
InCallVideoCallCallbackNotifier.getInstance().removeSessionModificationListener(this);
InCallPresenter.getInstance().removeDetailsListener(this);
mPrimaryCallTracker = null;
+ mStatsService = null;
+ mConnManager = null;
+ previousLteUsage = 0;
+ previousWlanUsage = 0;
}
/**
@@ -223,6 +245,12 @@
Log.i(this, "onDetailsChanged LTE data value = " + lteUsage + " WiFi data value = " +
wlanUsage);
+ if (mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_video_call_datausage_enable)) {
+ recordDataUsage(lteUsage, wlanUsage);
+ }
+
+
if (QtiImsExtUtils.isCarrierConfigEnabled(mContext,
QtiCarrierConfigs.SHOW_DATA_USAGE_TOAST)) {
final String dataUsageChangedText = mContext.getResources().getString(
@@ -397,4 +425,97 @@
break;
}
}
+
+ /**
+ * This method is used to ignore the repeatly calling onDetailsChanged
+ */
+ private boolean hasDataUsageChanged(long lteUsage, long wlanUsage) {
+ boolean hasChanged = false;
+ if (previousLteUsage != lteUsage) {
+ hasChanged = true;
+ previousLteUsage = lteUsage;
+ }
+ if (previousWlanUsage != wlanUsage) {
+ hasChanged = true;
+ previousWlanUsage = wlanUsage;
+ }
+ return hasChanged;
+ }
+
+ private void recordDataUsage(long lteUsage, long wlanUsage) {
+ String wifiIface;
+ String imsIface;
+ if(!hasDataUsageChanged(lteUsage, wlanUsage)) {
+ return;
+ }
+
+ if (wlanUsage != 0) {
+ wifiIface = getWifiIface();
+ if (wifiIface != null)
+ recordUsage(wifiIface, ConnectivityManager.TYPE_WIFI, wlanUsage, 0);
+ }
+
+ if (lteUsage != 0 ) {
+ imsIface = getImsIface();
+ if (imsIface != null)
+ recordUsage(imsIface, ConnectivityManager.TYPE_MOBILE, lteUsage, 0);
+ }
+ }
+
+ private void recordUsage(String ifaces, int ifaceType, long rx, long tx) {
+ if (ifaces == null) {
+ Log.d(this, "recordDataUseage ifaces is null");
+ return;
+ }
+ Log.d(this,"recordDataUseage ifaces ="+ ifaces + " ifaceType=" + ifaceType +
+ "rx = " + rx + " tx =" + tx);
+
+ try {
+ mStatsService.recordVideoCallData(ifaces, ifaceType, rx, tx);
+ } catch (RuntimeException e) {
+ Log.e(this, "recordDataUseage RuntimeException" + e);
+ } catch (RemoteException e) {
+ Log.e(this, "recordDataUseage RemoteException" + e);
+ }
+ }
+
+ private String getImsIface() {
+ final NetworkState[] states;
+ try {
+ states = mConnManager.getAllNetworkState();
+ } catch (RemoteException e) {
+ Log.e(this, "getVoiceCallIfaces RemoteException" + e);
+ return null;
+ }
+
+ if (states != null) {
+ for (NetworkState state : states) {
+ if (state.networkInfo.isConnected() && state.networkCapabilities.hasCapability(
+ NetworkCapabilities.NET_CAPABILITY_IMS)) {
+ final boolean isMobile = ConnectivityManager.isNetworkTypeMobile(
+ state.networkInfo.getType());
+ final String baseIface = state.linkProperties.getInterfaceName();
+ if (isMobile)
+ return baseIface;
+ }
+ }
+ }
+ return null;
+ }
+
+ private String getWifiIface() {
+ final LinkProperties wifiLinkProperties;
+ try {
+ wifiLinkProperties =
+ mConnManager.getLinkPropertiesForType(ConnectivityManager.TYPE_WIFI);
+ if (wifiLinkProperties != null) {
+ return wifiLinkProperties.getInterfaceName();
+ }
+ } catch (RemoteException e) {
+ Log.e(this, "get wifi Iface RemoteException" + e);
+ }
+ return null;
+ }
+
+
}
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 48d49af..98d9dc6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1160,7 +1160,8 @@
<string name="call_data_info_description">Voice call usage time and data usage time</string>
<string name="alert_call_over_wifi">Calls will be made over Wi-Fi.</string>
<string name="alert_call_no_cellular_coverage">No cellular network available. Connect to available Wi-Fi to make calls.</string>
- <string name="alert_user_connect_to_wifi_for_call">Connect to Wi-Fi to make calls.</string>
+ <string name="alert_user_connect_to_wifi_for_call">Connect to Wi-Fi to make calls</string>
+ <string name="alert_user_connect_to_wifi_for_call_text">Tap here to view available networks</string>
<string name="missing_account_type">(No type)</string>
<string name="missing_account_name">(No name)</string>
</resources>
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 0e89101..78e4760 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -2033,6 +2033,7 @@
} else {
if(WifiCallUtils.shallShowWifiCallDialog(getActivity())) {
WifiCallUtils.showWifiCallDialog(getActivity());
+ WifiCallUtils.showWifiCallNotification(getActivity());
} else {
getView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
handleDialButtonPressed();
diff --git a/src/com/android/dialer/settings/VideoCallingSettingsFragment.java b/src/com/android/dialer/settings/VideoCallingSettingsFragment.java
index fa73ab7..7a25901 100644
--- a/src/com/android/dialer/settings/VideoCallingSettingsFragment.java
+++ b/src/com/android/dialer/settings/VideoCallingSettingsFragment.java
@@ -35,6 +35,7 @@
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.SwitchPreference;
+import android.util.Log;
import java.lang.Object;
import java.lang.Override;
@@ -49,6 +50,7 @@
private final static String KEY_VIDEO_CALL = "video_calling_preference";
private SwitchPreference mVideoCallingPreference;
private Context mContext;
+ private static final String TAG = "VideoCallingSettingsFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -74,8 +76,8 @@
if (preference == mVideoCallingPreference) {
boolean isCheck = mVideoCallingPreference.isChecked();
CallUtil.createVideoCallingDialog(isCheck , mContext);
- Settings.System.putInt(mContext.getContentResolver(), CallUtil.CONFIG_VIDEO_CALLING,
- isCheck ? CallUtil.ENABLE_VIDEO_CALLING : CallUtil.DISABLE_VIDEO_CALLING);
+ boolean isSaved = CallUtil.saveVideoCallConfig(mContext,isCheck);
+ Log.d(TAG, "onPreferenceChange isSaved = " + isSaved);
}
return true;
}
diff --git a/src/com/android/dialer/util/WifiCallUtils.java b/src/com/android/dialer/util/WifiCallUtils.java
index 0aa9a43..5e789ed 100644
--- a/src/com/android/dialer/util/WifiCallUtils.java
+++ b/src/com/android/dialer/util/WifiCallUtils.java
@@ -149,16 +149,13 @@
public static void showWifiCallDialog(final Context context) {
String promptMessage = context.getString(com.android.dialer.R.string
- .alert_call_no_cellular_coverage) +"\n"+ context.getString(com.android.dialer.R
- .string.alert_user_connect_to_wifi_for_call);
+ .alert_call_no_cellular_coverage);
AlertDialog.Builder diaBuilder = new AlertDialog.Builder(context);
diaBuilder.setMessage(promptMessage);
diaBuilder.setPositiveButton(com.android.internal.R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setClassName("com.qualcomm.qti.extsettings",
- "com.qualcomm.qti.extsettings.wificall.WifiCallingEnhancedSettings");
+ Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
context.startActivity(intent);
}
});
@@ -211,16 +208,18 @@
builder.setAutoCancel(true);
builder.setSmallIcon(R.drawable.wifi_calling_on_notification);
builder.setContentTitle(
- context.getResources().getString(R.string.alert_user_connect_to_wifi_for_call));
+ context.getResources().getString(
+ R.string.alert_user_connect_to_wifi_for_call));
builder.setContentText(
- context.getResources().getString(R.string.alert_user_connect_to_wifi_for_call));
+ context.getResources().getString(
+ R.string.alert_user_connect_to_wifi_for_call_text));
notiManager.notify(NOTIFICATION_WIFI_CALL_ID, builder.build());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
notiManager.cancel(NOTIFICATION_WIFI_CALL_ID);
}
- }, 2000);
+ }, 5000);
}
}
}