Merge "Fix usage stats for outgoing calls." into klp-dev
diff --git a/res/values/config.xml b/res/values/config.xml
index adc54ee..5146b1f 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -120,11 +120,14 @@
<bool name="config_operator_selection_expand" translatable="false">true</bool>
<bool name="config_prefer_2g" translatable="false">true</bool>
- <!-- Package name for the default in-call UI Service [DO NOT TRANSLATE] -->
- <string name="incall_ui_default_package" translatable="false">com.android.dialer</string>
+ <!-- Package name for the default in-call UI and dialer [DO NOT TRANSLATE] -->
+ <string name="ui_default_package" translatable="false">com.android.dialer</string>
<!-- Class name for the default in-call UI Service [DO NOT TRANSLATE] -->
- <string name="incall_ui_default_class" translatable="false">com.android.incallui.CallHandlerService</string>
+ <string name="incall_default_class" translatable="false">com.android.incallui.CallHandlerService</string>
+
+ <!-- Class name for the default main Dialer activity [DO NOT TRANSLATE] -->
+ <string name="dialer_default_class" translatable="false">com.android.dialer.DialtactsActivity</string>
<!-- CDMA activation goes through HFA [DO NOT TRANSLATE] -->
<bool name="config_use_hfa_for_provisioning" translatable="false">false</bool>
diff --git a/src/com/android/phone/CallHandlerServiceProxy.java b/src/com/android/phone/CallHandlerServiceProxy.java
index 18b77ef..6670ae4 100644
--- a/src/com/android/phone/CallHandlerServiceProxy.java
+++ b/src/com/android/phone/CallHandlerServiceProxy.java
@@ -63,6 +63,7 @@
private CallCommandService mCallCommandService;
private CallModeler mCallModeler;
private Context mContext;
+ private boolean mFullUpdateOnConnect;
private ICallHandlerService mCallHandlerServiceGuarded; // Guarded by mServiceAndQueueLock
// Single queue to guarantee ordering
@@ -297,8 +298,7 @@
// always have an in call ui.
unbind();
- // We were disconnected from the UI. End all calls.
- PhoneUtils.hangupAllCalls(PhoneGlobals.getInstance().getCallManager());
+ reconnectOnRemainingCalls();
}
}
}
@@ -320,8 +320,8 @@
private static Intent getInCallServiceIntent(Context context) {
final Intent serviceIntent = new Intent(ICallHandlerService.class.getName());
final ComponentName component = new ComponentName(context.getResources().getString(
- R.string.incall_ui_default_package), context.getResources().getString(
- R.string.incall_ui_default_class));
+ R.string.ui_default_package), context.getResources().getString(
+ R.string.incall_default_class));
serviceIntent.setComponent(component);
return serviceIntent;
}
@@ -438,6 +438,21 @@
makeInitialServiceCalls();
processQueue();
+
+ if (mFullUpdateOnConnect) {
+ mFullUpdateOnConnect = false;
+ onUpdate(mCallModeler.getFullList());
+ }
+ }
+ }
+
+ /**
+ * Checks to see if there are any live calls left, and if so, try reconnecting the UI.
+ */
+ private void reconnectOnRemainingCalls() {
+ if (mCallModeler.hasLiveCall()) {
+ mFullUpdateOnConnect = true;
+ setupServiceConnection();
}
}
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index 51d3a37..9f4bb76 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -299,6 +299,7 @@
}
}
+ PhoneGlobals.getInstance().updateWakeState();
return call;
}
@@ -323,6 +324,9 @@
mCallMap.remove(conn);
}
+
+ mCallManager.clearDisconnected();
+ PhoneGlobals.getInstance().updateWakeState();
}
/**
@@ -338,6 +342,8 @@
mListeners.get(i).onUpdate(updatedCalls);
}
}
+
+ PhoneGlobals.getInstance().updateWakeState();
}
@@ -361,17 +367,24 @@
// We only send updates for live calls which are not incoming (ringing).
// Disconnected and incoming calls are handled by onDisconnect and
// onNewRingingConnection.
- boolean shouldUpdate =
+ final boolean shouldUpdate =
connection.getState() !=
com.android.internal.telephony.Call.State.DISCONNECTED &&
connection.getState() !=
com.android.internal.telephony.Call.State.IDLE &&
!connection.getState().isRinging();
+ final boolean isDisconnecting = connection.getState() ==
+ com.android.internal.telephony.Call.State.DISCONNECTING;
+
+ // For disconnecting calls, we still need to send the update to the UI but we do
+ // not create a new call if the call did not exist.
+ final boolean shouldCreate = shouldUpdate && !isDisconnecting;
+
// New connections return a Call with INVALID state, which does not translate to
// a state in the internal.telephony.Call object. This ensures that staleness
// check below fails and we always add the item to the update list if it is new.
- final Call call = getCallFromMap(mCallMap, connection, shouldUpdate /* create */);
+ final Call call = getCallFromMap(mCallMap, connection, shouldCreate /* create */);
if (call == null || !shouldUpdate) {
if (DBG) Log.d(TAG, "update skipped");
diff --git a/src/com/android/phone/HfaService.java b/src/com/android/phone/HfaService.java
index 3aeed4d..d5c92b8 100644
--- a/src/com/android/phone/HfaService.java
+++ b/src/com/android/phone/HfaService.java
@@ -28,6 +28,8 @@
public class HfaService extends Service {
private static final String TAG = HfaService.class.getSimpleName();
+ private HfaLogic mHfaLogic;
+
@Override
public void onCreate() {
Log.i(TAG, "service started");
@@ -38,7 +40,7 @@
final PendingIntent otaResponseIntent = intent.getParcelableExtra(
OtaUtils.EXTRA_OTASP_RESULT_CODE_PENDING_INTENT);
- new HfaLogic(this, new HfaLogic.HfaLogicCallback() {
+ mHfaLogic = new HfaLogic(this, new HfaLogic.HfaLogicCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "onSuccess");
@@ -52,7 +54,8 @@
// we do the same thing...finish.
onComplete();
}
- }, otaResponseIntent).start();
+ }, otaResponseIntent);
+ mHfaLogic.start();
return START_STICKY;
}
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 8ead0ce..3e30798 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -249,6 +249,7 @@
state |= StatusBarManager.DISABLE_HOME;
state |= StatusBarManager.DISABLE_RECENT;
state |= StatusBarManager.DISABLE_BACK;
+ state |= StatusBarManager.DISABLE_SEARCH;
}
if (DBG) log("updateStatusBar: state = 0x" + Integer.toHexString(state));
diff --git a/src/com/android/phone/OutgoingCallBroadcaster.java b/src/com/android/phone/OutgoingCallBroadcaster.java
index a4f7178..8939fdd 100644
--- a/src/com/android/phone/OutgoingCallBroadcaster.java
+++ b/src/com/android/phone/OutgoingCallBroadcaster.java
@@ -26,6 +26,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
@@ -520,11 +521,12 @@
// use the java resolver to find the dialer class (as
// opposed to a Context which look up known android
// packages only)
- invokeFrameworkDialer.setClassName("com.android.dialer",
- "com.android.dialer.DialtactsActivity");
+ final Resources resources = getResources();
+ invokeFrameworkDialer.setClassName(
+ resources.getString(R.string.ui_default_package),
+ resources.getString(R.string.dialer_default_class));
invokeFrameworkDialer.setAction(Intent.ACTION_DIAL);
invokeFrameworkDialer.setData(intent.getData());
-
if (DBG) Log.v(TAG, "onCreate(): calling startActivity for Dialer: "
+ invokeFrameworkDialer);
startActivity(invokeFrameworkDialer);