summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/RttRequestDialogFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/RttRequestDialogFragment.java')
-rw-r--r--java/com/android/incallui/RttRequestDialogFragment.java149
1 files changed, 149 insertions, 0 deletions
diff --git a/java/com/android/incallui/RttRequestDialogFragment.java b/java/com/android/incallui/RttRequestDialogFragment.java
new file mode 100644
index 000000000..fa9b0e5db
--- /dev/null
+++ b/java/com/android/incallui/RttRequestDialogFragment.java
@@ -0,0 +1,149 @@
+/*
+ * 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.incallui;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.telephony.PhoneNumberUtils;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+import com.android.contacts.common.util.ContactDisplayUtils;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.incallui.ContactInfoCache.ContactCacheEntry;
+import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
+import com.android.incallui.call.CallList;
+import com.android.incallui.call.DialerCall;
+import java.lang.ref.WeakReference;
+
+/** Dialog that shown to user when receiving RTT request mid call. */
+public class RttRequestDialogFragment extends DialogFragment {
+
+ /**
+ * Returns a new instance of {@link RttRequestDialogFragment} with the given callback.
+ *
+ * <p>Prefer this method over the default constructor.
+ */
+ public static RttRequestDialogFragment newInstance(String callId, int rttRequestId) {
+ RttRequestDialogFragment fragment = new RttRequestDialogFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_CALL_ID, Assert.isNotNull(callId));
+ args.putInt(ARG_RTT_REQUEST_ID, rttRequestId);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ /** Key in the arguments bundle for call id. */
+ private static final String ARG_CALL_ID = "call_id";
+
+ private static final String ARG_RTT_REQUEST_ID = "rtt_request_id";
+
+ private TextView detailsTextView;
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle bundle) {
+ super.onCreateDialog(bundle);
+ LogUtil.enterBlock("RttRequestDialogFragment.onCreateDialog");
+
+ View dialogView = View.inflate(getActivity(), R.layout.frag_rtt_request_dialog, null);
+ detailsTextView = dialogView.findViewById(R.id.details);
+
+ ContactInfoCache cache = ContactInfoCache.getInstance(getContext());
+ DialerCall dialerCall =
+ CallList.getInstance().getCallById(getArguments().getString(ARG_CALL_ID));
+ cache.findInfo(dialerCall, false, new ContactLookupCallback(this));
+
+ dialogView
+ .findViewById(R.id.rtt_button_decline_request)
+ .setOnClickListener(v -> onNegativeButtonClick());
+ dialogView
+ .findViewById(R.id.rtt_button_accept_request)
+ .setOnClickListener(v -> onPositiveButtonClick());
+
+ AlertDialog alertDialog =
+ new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme)
+ .setCancelable(false)
+ .setView(dialogView)
+ .setTitle(R.string.rtt_request_dialog_title)
+ .create();
+
+ alertDialog.setCanceledOnTouchOutside(false);
+ return alertDialog;
+ }
+
+ private void onPositiveButtonClick() {
+ LogUtil.enterBlock("RttRequestDialogFragment.onPositiveButtonClick");
+
+ DialerCall call = CallList.getInstance().getCallById(getArguments().getString(ARG_CALL_ID));
+ call.respondToRttRequest(true, getArguments().getInt(ARG_RTT_REQUEST_ID));
+ dismiss();
+ }
+
+ private void onNegativeButtonClick() {
+ LogUtil.enterBlock("RttRequestDialogFragment.onNegativeButtonClick");
+
+ DialerCall call = CallList.getInstance().getCallById(getArguments().getString(ARG_CALL_ID));
+ call.respondToRttRequest(false, getArguments().getInt(ARG_RTT_REQUEST_ID));
+ dismiss();
+ }
+
+ private void setNameOrNumber(CharSequence nameOrNumber) {
+ detailsTextView.setText(getString(R.string.rtt_request_dialog_details, nameOrNumber));
+ }
+
+ private static class ContactLookupCallback implements ContactInfoCacheCallback {
+ private final WeakReference<RttRequestDialogFragment> rttRequestDialogFragmentWeakReference;
+
+ private ContactLookupCallback(RttRequestDialogFragment rttRequestDialogFragment) {
+ rttRequestDialogFragmentWeakReference = new WeakReference<>(rttRequestDialogFragment);
+ }
+
+ @Override
+ public void onContactInfoComplete(String callId, ContactCacheEntry entry) {
+ RttRequestDialogFragment fragment = rttRequestDialogFragmentWeakReference.get();
+ if (fragment != null) {
+ fragment.setNameOrNumber(getNameOrNumber(entry, fragment.getContext()));
+ }
+ }
+
+ private CharSequence getNameOrNumber(ContactCacheEntry entry, Context context) {
+ String preferredName =
+ ContactDisplayUtils.getPreferredDisplayName(
+ entry.namePrimary,
+ entry.nameAlternative,
+ ContactsPreferencesFactory.newContactsPreferences(context));
+ if (TextUtils.isEmpty(preferredName)) {
+ return TextUtils.isEmpty(entry.number)
+ ? null
+ : PhoneNumberUtils.createTtsSpannable(
+ BidiFormatter.getInstance().unicodeWrap(entry.number, TextDirectionHeuristics.LTR));
+ }
+ return preferredName;
+ }
+
+ @Override
+ public void onImageLoadComplete(String callId, ContactCacheEntry entry) {}
+ }
+}