summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/incallui/AudioModeProvider.java14
-rw-r--r--src/com/android/incallui/CallButtonFragment.java2
-rw-r--r--src/com/android/incallui/CallButtonPresenter.java44
-rw-r--r--src/com/android/incallui/CallCardFragment.java2
-rw-r--r--src/com/android/incallui/CallCardPresenter.java22
-rw-r--r--src/com/android/incallui/CallHandlerService.java12
-rw-r--r--src/com/android/incallui/CallList.java6
-rw-r--r--src/com/android/incallui/InCallActivity.java5
-rw-r--r--src/com/android/incallui/InCallPresenter.java63
9 files changed, 110 insertions, 60 deletions
diff --git a/src/com/android/incallui/AudioModeProvider.java b/src/com/android/incallui/AudioModeProvider.java
index abbbfb6e..6ac8e23c 100644
--- a/src/com/android/incallui/AudioModeProvider.java
+++ b/src/com/android/incallui/AudioModeProvider.java
@@ -33,17 +33,7 @@ import java.util.List;
private int mSupportedModes = AudioMode.ALL_MODES;
private final List<AudioModeListener> mListeners = Lists.newArrayList();
- public static synchronized AudioModeProvider getInstance() {
- if (sAudioModeProvider == null) {
- sAudioModeProvider = new AudioModeProvider();
- }
- return sAudioModeProvider;
- }
-
- /**
- * Access only through getInstance()
- */
- private AudioModeProvider() {
+ public AudioModeProvider() {
}
public void onAudioModeChange(int newMode) {
@@ -65,6 +55,8 @@ import java.util.List;
public void addListener(AudioModeListener listener) {
if (!mListeners.contains(listener)) {
mListeners.add(listener);
+ listener.onSupportedAudioMode(mSupportedModes);
+ listener.onAudioMode(mAudioMode);
}
}
diff --git a/src/com/android/incallui/CallButtonFragment.java b/src/com/android/incallui/CallButtonFragment.java
index de2cb137..21bfb1cf 100644
--- a/src/com/android/incallui/CallButtonFragment.java
+++ b/src/com/android/incallui/CallButtonFragment.java
@@ -57,7 +57,7 @@ public class CallButtonFragment extends BaseFragment<CallButtonPresenter>
CallButtonPresenter createPresenter() {
// TODO: find a cleaner way to include audio mode provider than
// having a singleton instance.
- return new CallButtonPresenter(AudioModeProvider.getInstance());
+ return new CallButtonPresenter();
}
@Override
diff --git a/src/com/android/incallui/CallButtonPresenter.java b/src/com/android/incallui/CallButtonPresenter.java
index a307009f..3c1ada1f 100644
--- a/src/com/android/incallui/CallButtonPresenter.java
+++ b/src/com/android/incallui/CallButtonPresenter.java
@@ -32,25 +32,24 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
implements InCallStateListener, AudioModeListener {
private Call mCall;
- private final AudioModeProvider mAudioModeProvider;
+ private AudioModeProvider mAudioModeProvider;
- public CallButtonPresenter(AudioModeProvider audioModeProvider) {
-
- // AudioModeProvider works effectively as a pass through. However, if we
- // had this presenter listen for changes directly, it would have to live forever
- // or risk missing important updates.
- mAudioModeProvider = audioModeProvider;
- mAudioModeProvider.addListener(this);
+ public CallButtonPresenter() {
}
@Override
public void onUiReady(CallButtonUi ui) {
super.onUiReady(ui);
+ if (mAudioModeProvider != null) {
+ mAudioModeProvider.addListener(this);
+ }
}
@Override
public void onUiUnready(CallButtonUi ui) {
- mAudioModeProvider.removeListener(this);
+ if (mAudioModeProvider != null) {
+ mAudioModeProvider.removeListener(this);
+ }
}
@Override
@@ -78,11 +77,18 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
}
public int getAudioMode() {
- return mAudioModeProvider.getAudioMode();
+ if (mAudioModeProvider != null) {
+ return mAudioModeProvider.getAudioMode();
+ }
+ return AudioMode.EARPIECE;
}
public int getSupportedAudio() {
- return mAudioModeProvider.getSupportedModes();
+ if (mAudioModeProvider != null) {
+ return mAudioModeProvider.getSupportedModes();
+ }
+
+ return 0;
}
public void setAudioMode(int mode) {
@@ -100,18 +106,18 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
*/
public void toggleSpeakerphone() {
// this function should not be called if bluetooth is available
- if (0 != (AudioMode.BLUETOOTH & mAudioModeProvider.getSupportedModes())) {
+ if (0 != (AudioMode.BLUETOOTH & getSupportedAudio())) {
- // It's clear the UI is off, so update the supported mode once again.
+ // It's clear the UI is wrong, so update the supported mode once again.
Logger.e(this, "toggling speakerphone not allowed when bluetooth supported.");
- getUi().setSupportedAudio(mAudioModeProvider.getSupportedModes());
+ getUi().setSupportedAudio(getSupportedAudio());
return;
}
int newMode = AudioMode.SPEAKER;
// if speakerphone is already on, change to wired/earpiece
- if (mAudioModeProvider.getAudioMode() == AudioMode.SPEAKER) {
+ if (getAudioMode() == AudioMode.SPEAKER) {
newMode = AudioMode.WIRED_OR_EARPIECE;
}
@@ -191,6 +197,14 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
}
}
+ public void setAudioModeProvider(AudioModeProvider audioModeProvider) {
+ // AudioModeProvider works effectively as a pass through. However, if we
+ // had this presenter listen for changes directly, it would have to live forever
+ // or risk missing important updates.
+ mAudioModeProvider = audioModeProvider;
+ mAudioModeProvider.addListener(this);
+ }
+
public interface CallButtonUi extends Ui {
void setVisible(boolean on);
void setMute(boolean on);
diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java
index 0fd8e357..b4fc852c 100644
--- a/src/com/android/incallui/CallCardFragment.java
+++ b/src/com/android/incallui/CallCardFragment.java
@@ -52,7 +52,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter>
@Override
CallCardPresenter createPresenter() {
- return new CallCardPresenter(AudioModeProvider.getInstance());
+ return new CallCardPresenter();
}
@Override
diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java
index e5315118..d4a39eaa 100644
--- a/src/com/android/incallui/CallCardPresenter.java
+++ b/src/com/android/incallui/CallCardPresenter.java
@@ -54,23 +54,26 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> i
// Track the state for the photo.
private ContactsAsyncHelper.ImageTracker mPhotoTracker;
- public CallCardPresenter(AudioModeProvider audioModeProvider) {
+ public CallCardPresenter() {
mPhotoTracker = new ContactsAsyncHelper.ImageTracker();
- mAudioModeProvider = audioModeProvider;
}
@Override
public void onUiReady(CallCardUi ui) {
super.onUiReady(ui);
- mAudioModeProvider.addListener(this);
+ if (mAudioModeProvider != null) {
+ mAudioModeProvider.addListener(this);
+ }
}
@Override
public void onUiUnready(CallCardUi ui) {
super.onUiUnready(ui);
- mAudioModeProvider.removeListener(this);
+ if (mAudioModeProvider != null) {
+ mAudioModeProvider.removeListener(this);
+ }
mPrimary = null;
}
@@ -112,9 +115,11 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> i
updateDisplayByCallerInfo(primary, primaryCallInfo, primary.getNumberPresentation(),
true);
+ final boolean bluetoothOn = mAudioModeProvider != null &&
+ mAudioModeProvider.getAudioMode() == AudioMode.BLUETOOTH;
+
ui.setNumber(primary.getNumber());
- ui.setCallState(primary.getState(), primary.getDisconnectCause(),
- (mAudioModeProvider.getAudioMode() == AudioMode.BLUETOOTH));
+ ui.setCallState(primary.getState(), primary.getDisconnectCause(), bluetoothOn);
} else {
ui.setNumber("");
ui.setCallState(Call.State.INVALID, Call.DisconnectCause.UNKNOWN, false);
@@ -425,6 +430,11 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> i
ui.setNumberLabel(label);
}
+ public void setAudioModeProvider(AudioModeProvider audioModeProvider) {
+ mAudioModeProvider = audioModeProvider;
+ mAudioModeProvider.addListener(this);
+ }
+
public String getPresentationString(int presentation) {
String name = mContext.getString(R.string.unknown);
if (presentation == Call.PRESENTATION_RESTRICTED) {
diff --git a/src/com/android/incallui/CallHandlerService.java b/src/com/android/incallui/CallHandlerService.java
index 0b2be566..3b8631bc 100644
--- a/src/com/android/incallui/CallHandlerService.java
+++ b/src/com/android/incallui/CallHandlerService.java
@@ -54,14 +54,20 @@ public class CallHandlerService extends Service {
public void onCreate() {
super.onCreate();
- mCallList = CallList.getInstance();
+ mCallList = new CallList();
mMainHandler = new MainHandler();
- mInCallPresenter = InCallPresenter.init(this);
- mAudioModeProvider = AudioModeProvider.getInstance();
+ mAudioModeProvider = new AudioModeProvider();
+ mInCallPresenter = InCallPresenter.getInstance();
+ mInCallPresenter.setUp(getApplicationContext(), mCallList, mAudioModeProvider);
}
@Override
public void onDestroy() {
+ mInCallPresenter.tearDown();
+ mInCallPresenter = null;
+ mAudioModeProvider = null;
+ mMainHandler = null;
+ mCallList = null;
}
@Override
diff --git a/src/com/android/incallui/CallList.java b/src/com/android/incallui/CallList.java
index d788d51c..3041fa7f 100644
--- a/src/com/android/incallui/CallList.java
+++ b/src/com/android/incallui/CallList.java
@@ -56,17 +56,17 @@ public class CallList {
/**
* Static singleton accessor method.
*/
- public static synchronized CallList getInstance() {
+ /*public static synchronized CallList getInstance() {
if (sInstance == null) {
sInstance = new CallList();
}
return sInstance;
- }
+ }*/
/**
* Private constructor. Instance should only be acquired through getInstance().
*/
- private CallList() {
+ public CallList() {
}
/**
diff --git a/src/com/android/incallui/InCallActivity.java b/src/com/android/incallui/InCallActivity.java
index 8ff43d5a..8ae37bd2 100644
--- a/src/com/android/incallui/InCallActivity.java
+++ b/src/com/android/incallui/InCallActivity.java
@@ -269,6 +269,11 @@ public class InCallActivity extends Activity {
private void setUpPresenters() {
InCallPresenter mainPresenter = InCallPresenter.getInstance();
+ mCallButtonFragment.getPresenter().setAudioModeProvider(
+ mainPresenter.getAudioModeProvider());
+ mCallCardFragment.getPresenter().setAudioModeProvider(
+ mainPresenter.getAudioModeProvider());
+
mainPresenter.addListener(mCallButtonFragment.getPresenter());
mainPresenter.addListener(mCallCardFragment.getPresenter());
mainPresenter.addListener(mAnswerFragment.getPresenter());
diff --git a/src/com/android/incallui/InCallPresenter.java b/src/com/android/incallui/InCallPresenter.java
index a7954ede..17889d0e 100644
--- a/src/com/android/incallui/InCallPresenter.java
+++ b/src/com/android/incallui/InCallPresenter.java
@@ -39,22 +39,49 @@ public class InCallPresenter implements CallList.Listener {
private static InCallPresenter sInCallPresenter;
- private final StatusBarNotifier mStatusBarNotifier;
private final Set<InCallStateListener> mListeners = Sets.newHashSet();
- private final Context mContext;
- private InCallState mInCallState = InCallState.HIDDEN;
+ private AudioModeProvider mAudioModeProvider;
+ private StatusBarNotifier mStatusBarNotifier;
+ private Context mContext;
+ private CallList mCallList;
private InCallActivity mInCallActivity;
- public static InCallPresenter getInstance() {
- Preconditions.checkNotNull(sInCallPresenter);
+ private InCallState mInCallState = InCallState.HIDDEN;
+
+ public static synchronized InCallPresenter getInstance() {
+ if (sInCallPresenter == null) {
+ sInCallPresenter = new InCallPresenter();
+ }
return sInCallPresenter;
}
- public static synchronized InCallPresenter init(Context context) {
- Preconditions.checkState(sInCallPresenter == null);
- sInCallPresenter = new InCallPresenter(context);
- return sInCallPresenter;
+ public void setUp(Context context, CallList callList, AudioModeProvider audioModeProvider) {
+ Preconditions.checkNotNull(context);
+ mContext = context;
+
+ mCallList = callList;
+ mCallList.addListener(this);
+
+ mStatusBarNotifier = new StatusBarNotifier(context);
+ addListener(mStatusBarNotifier);
+
+ mAudioModeProvider = audioModeProvider;
+ }
+
+ public void tearDown() {
+ mAudioModeProvider = null;
+
+ removeListener(mStatusBarNotifier);
+ mStatusBarNotifier = null;
+
+ mCallList.removeListener(this);
+ mCallList = null;
+
+ mContext = null;
+ mInCallActivity = null;
+
+ mListeners.clear();
}
public void setActivity(InCallActivity inCallActivity) {
@@ -64,7 +91,7 @@ public class InCallPresenter implements CallList.Listener {
// Since the UI just came up, imitate an update from the call list
// to set the proper UI state.
- onCallListChange(CallList.getInstance());
+ onCallListChange(mCallList);
}
/**
@@ -91,7 +118,7 @@ public class InCallPresenter implements CallList.Listener {
/**
* Given the call list, return the state in which the in-call screen should be.
*/
- public InCallState getPotentialStateFromCallList(CallList callList) {
+ public static InCallState getPotentialStateFromCallList(CallList callList) {
InCallState newState = InCallState.HIDDEN;
if (callList.getIncomingCall() != null) {
@@ -117,6 +144,10 @@ public class InCallPresenter implements CallList.Listener {
mListeners.remove(listener);
}
+ public AudioModeProvider getAudioModeProvider() {
+ return mAudioModeProvider;
+ }
+
/**
* When the state of in-call changes, this is the first method to get called. It determines if
* the UI needs to be started or finished depending on the new state and does it.
@@ -206,15 +237,7 @@ public class InCallPresenter implements CallList.Listener {
/**
* Private constructor. Must use getInstance() to get this singleton.
*/
- private InCallPresenter(Context context) {
- Preconditions.checkNotNull(context);
-
- mContext = context;
-
- mStatusBarNotifier = new StatusBarNotifier(context);
- addListener(mStatusBarNotifier);
-
- CallList.getInstance().addListener(this);
+ private InCallPresenter() {
}
/**