summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/car/dialer/OngoingCallFragment.java1
-rw-r--r--src/com/android/car/dialer/ui/InCallFragment.java114
-rw-r--r--src/com/android/car/dialer/ui/OnGoingCallControllerBarFragment.java62
3 files changed, 159 insertions, 18 deletions
diff --git a/src/com/android/car/dialer/OngoingCallFragment.java b/src/com/android/car/dialer/OngoingCallFragment.java
index b5a59e2d..2f702448 100644
--- a/src/com/android/car/dialer/OngoingCallFragment.java
+++ b/src/com/android/car/dialer/OngoingCallFragment.java
@@ -53,6 +53,7 @@ import java.util.Objects;
/**
* A fragment that displays information about an on-going call with options to hang up.
*/
+@Deprecated
public class OngoingCallFragment extends Fragment implements CallListener {
private static final String TAG = "OngoingCall";
private static final SparseArray<Character> mDialpadButtonMap = new SparseArray<>();
diff --git a/src/com/android/car/dialer/ui/InCallFragment.java b/src/com/android/car/dialer/ui/InCallFragment.java
new file mode 100644
index 00000000..16854691
--- /dev/null
+++ b/src/com/android/car/dialer/ui/InCallFragment.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2018 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.car.dialer.ui;
+
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.telecom.Call;
+import android.text.format.DateUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.car.apps.common.CircleBitmapDrawable;
+import com.android.car.dialer.BitmapWorkerTask;
+import com.android.car.dialer.R;
+import com.android.car.dialer.DialerFragment;
+import com.android.car.dialer.telecom.TelecomUtils;
+import com.android.car.dialer.telecom.UiCall;
+import com.android.car.dialer.telecom.UiCallManager;
+
+/**
+ * A fragment that displays information about an on-going call with options to hang up.
+ */
+public class InCallFragment extends Fragment implements
+ OnGoingCallControllerBarFragment.OnGoingCallControllerBarCallback {
+
+ private Fragment mDialerFragment;
+ private View mUserProfileContainerView;
+ private View mDialerFragmentContainer;
+
+ public static InCallFragment newInstance() {
+ return new InCallFragment();
+ }
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ View fragmentView = inflater.inflate(R.layout.in_call_fragment, container, false);
+ mUserProfileContainerView = fragmentView.findViewById(R.id.user_profile_container);
+ mDialerFragmentContainer = fragmentView.findViewById(R.id.dialer_container);
+ mDialerFragment = new DialerFragment();
+
+ Fragment onGoingCallControllerBarFragment = OnGoingCallControllerBarFragment.newInstance();
+
+ getChildFragmentManager().beginTransaction()
+ .replace(R.id.controller_bar_container, onGoingCallControllerBarFragment)
+ .commit();
+ bindUserProfileView(fragmentView.findViewById(R.id.user_profile_container));
+ return fragmentView;
+ }
+
+ @Override
+ public void onOpenDialpad() {
+ mDialerFragment = new DialerFragment();
+ getChildFragmentManager().beginTransaction()
+ .replace(R.id.dialer_container, mDialerFragment)
+ .commit();
+ mDialerFragmentContainer.setVisibility(View.VISIBLE);
+ mUserProfileContainerView.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onCloseDialpad() {
+ getFragmentManager().beginTransaction()
+ .remove(mDialerFragment)
+ .commit();
+ mDialerFragmentContainer.setVisibility(View.GONE);
+ mUserProfileContainerView.setVisibility(View.VISIBLE);
+ }
+
+ private void bindUserProfileView(View container) {
+ UiCall primaryCall = UiCallManager.get().getPrimaryCall();
+ if (primaryCall == null) {
+ return;
+ }
+ String number = primaryCall.getNumber();
+ ImageView avatar = container.findViewById(R.id.avatar);
+ BitmapWorkerTask.BitmapRunnable runnable = new BitmapWorkerTask.BitmapRunnable() {
+ @Override
+ public void run() {
+ if (mBitmap != null) {
+ Resources r = getResources();
+ avatar.setImageDrawable(new CircleBitmapDrawable(r, mBitmap));
+ avatar.setImageBitmap(mBitmap);
+ avatar.clearColorFilter();
+ } else {
+ avatar.setImageResource(R.drawable.logo_avatar);
+ avatar.setImageResource(R.drawable.ic_avatar_bg);
+ }
+ }
+ };
+ BitmapWorkerTask.loadBitmap(getContext().getContentResolver(), avatar, number, runnable);
+ TextView nameView = container.findViewById(R.id.title);
+ nameView.setText(TelecomUtils.getDisplayName(getContext(), primaryCall));
+ }
+}
diff --git a/src/com/android/car/dialer/ui/OnGoingCallControllerBarFragment.java b/src/com/android/car/dialer/ui/OnGoingCallControllerBarFragment.java
index f34b936f..fc85b581 100644
--- a/src/com/android/car/dialer/ui/OnGoingCallControllerBarFragment.java
+++ b/src/com/android/car/dialer/ui/OnGoingCallControllerBarFragment.java
@@ -24,6 +24,8 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.car.dialer.R;
+import com.android.car.dialer.telecom.UiCall;
+import com.android.car.dialer.telecom.UiCallManager;
/**
* A Fragment of the bar which controls on going call. Its host or parent Fragment is expected to
@@ -39,21 +41,9 @@ public class OnGoingCallControllerBarFragment extends Fragment {
* Callback for control bar buttons.
*/
public interface OnGoingCallControllerBarCallback {
- void onEndCall();
-
void onOpenDialpad();
void onCloseDialpad();
-
- void onMuteMic();
-
- void onUnmuteMic();
-
- void onPauseCall();
-
- void onResumeCall();
-
- void onVoiceOutputChannelChanged(int channel);
}
private OnGoingCallControllerBarCallback mOnGoingCallControllerBarCallback;
@@ -81,9 +71,11 @@ public class OnGoingCallControllerBarFragment extends Fragment {
return;
}
if (v.isActivated()) {
- mOnGoingCallControllerBarCallback.onMuteMic();
+ v.setActivated(false);
+ onMuteMic();
} else {
- mOnGoingCallControllerBarCallback.onUnmuteMic();
+ v.setActivated(true);
+ onUnmuteMic();
}
});
@@ -92,8 +84,10 @@ public class OnGoingCallControllerBarFragment extends Fragment {
return;
}
if (v.isActivated()) {
+ v.setActivated(false);
mOnGoingCallControllerBarCallback.onCloseDialpad();
} else {
+ v.setActivated(true);
mOnGoingCallControllerBarCallback.onOpenDialpad();
}
});
@@ -102,7 +96,7 @@ public class OnGoingCallControllerBarFragment extends Fragment {
if (mOnGoingCallControllerBarCallback == null) {
return;
}
- mOnGoingCallControllerBarCallback.onEndCall();
+ onEndCall();
});
fragmentView.findViewById(R.id.voice_channel_button).setOnClickListener((v) -> {
@@ -113,11 +107,43 @@ public class OnGoingCallControllerBarFragment extends Fragment {
return;
}
if (v.isActivated()) {
- mOnGoingCallControllerBarCallback.onPauseCall();
+ v.setActivated(false);
+ onHoldCall();
} else {
- mOnGoingCallControllerBarCallback.onResumeCall();
+ v.setActivated(true);
+ onUnholdCall();
}
});
return fragmentView;
}
-}
+
+ private void onMuteMic() {
+ UiCallManager.get().setMuted(true);
+ }
+
+ private void onUnmuteMic() {
+ UiCallManager.get().setMuted(false);
+ }
+
+ private void onHoldCall() {
+ UiCallManager uiCallManager = UiCallManager.get();
+ UiCall primaryCall = UiCallManager.get().getPrimaryCall();
+ uiCallManager.holdCall(primaryCall);
+ }
+
+ private void onUnholdCall() {
+ UiCallManager uiCallManager = UiCallManager.get();
+ UiCall primaryCall = UiCallManager.get().getPrimaryCall();
+ uiCallManager.unholdCall(primaryCall);
+ }
+
+ private void onVoiceOutputChannelChanged(int channel) {
+ // TODO: implement this function.
+ }
+
+ private void onEndCall() {
+ UiCallManager uiCallManager = UiCallManager.get();
+ UiCall primaryCall = UiCallManager.get().getPrimaryCall();
+ uiCallManager.disconnectCall(primaryCall);
+ }
+} \ No newline at end of file