blob: 03041857c56bf6ddaaf6437b5951f7d9af08f08b [file] [log] [blame]
/*
* 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);
}
}
}