| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * Copyright (C) 2023 The LineageOS 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.incallui.hold; |
| |
| import android.os.Bundle; |
| import android.telephony.PhoneNumberUtils; |
| import android.text.BidiFormatter; |
| import android.text.TextDirectionHeuristics; |
| import android.transition.TransitionManager; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.View.OnAttachStateChangeListener; |
| import android.view.ViewGroup; |
| import android.view.WindowInsets; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| |
| import androidx.annotation.NonNull; |
| import androidx.annotation.Nullable; |
| import androidx.fragment.app.Fragment; |
| |
| import com.android.dialer.R; |
| import com.android.dialer.common.Assert; |
| import com.android.incallui.incall.protocol.SecondaryInfo; |
| |
| /** Shows banner UI for background call */ |
| public class OnHoldFragment extends Fragment { |
| |
| private static final String ARG_INFO = "info"; |
| private boolean padTopInset = true; |
| private int topInset; |
| |
| public static OnHoldFragment newInstance(@NonNull SecondaryInfo info) { |
| OnHoldFragment fragment = new OnHoldFragment(); |
| Bundle args = new Bundle(); |
| args.putParcelable(ARG_INFO, info); |
| fragment.setArguments(args); |
| return fragment; |
| } |
| |
| @Nullable |
| @Override |
| public View onCreateView( |
| LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) { |
| final View view = layoutInflater.inflate(R.layout.incall_on_hold_banner, viewGroup, false); |
| |
| SecondaryInfo secondaryInfo = getArguments().getParcelable(ARG_INFO, SecondaryInfo.class); |
| secondaryInfo = Assert.isNotNull(secondaryInfo); |
| |
| ((TextView) view.findViewById(R.id.hold_contact_name)) |
| .setText( |
| secondaryInfo.nameIsNumber() |
| ? PhoneNumberUtils.createTtsSpannable( |
| BidiFormatter.getInstance() |
| .unicodeWrap(secondaryInfo.name(), TextDirectionHeuristics.LTR)) |
| : secondaryInfo.name()); |
| ((ImageView) view.findViewById(R.id.hold_phone_icon)) |
| .setImageResource( |
| secondaryInfo.isVideoCall() |
| ? R.drawable.quantum_ic_videocam_vd_white_24 |
| : R.drawable.quantum_ic_phone_paused_vd_theme_24); |
| view.addOnAttachStateChangeListener( |
| new OnAttachStateChangeListener() { |
| @Override |
| public void onViewAttachedToWindow(View v) { |
| topInset = v.getRootWindowInsets().getInsets(WindowInsets.Type.systemBars()).top; |
| applyInset(); |
| } |
| |
| @Override |
| public void onViewDetachedFromWindow(View v) {} |
| }); |
| return view; |
| } |
| |
| public void setPadTopInset(boolean padTopInset) { |
| this.padTopInset = padTopInset; |
| applyInset(); |
| } |
| |
| private void applyInset() { |
| if (getView() == null) { |
| return; |
| } |
| |
| int newPadding = padTopInset ? topInset : 0; |
| if (newPadding != getView().getPaddingTop()) { |
| TransitionManager.beginDelayedTransition(((ViewGroup) getView().getParent())); |
| getView().setPadding(0, newPadding, 0, 0); |
| } |
| } |
| } |