diff options
Diffstat (limited to 'src')
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 |