summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java')
-rw-r--r--java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java b/java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java
new file mode 100644
index 000000000..085430ea2
--- /dev/null
+++ b/java/com/android/incallui/answer/impl/SmsBottomSheetFragment.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2016 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.answer.impl;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.design.widget.BottomSheetDialogFragment;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import com.android.dialer.common.DpUtil;
+import com.android.dialer.common.FragmentUtils;
+import com.android.dialer.common.LogUtil;
+import java.util.ArrayList;
+import java.util.List;
+
+/** Shows options for rejecting call with SMS */
+public class SmsBottomSheetFragment extends BottomSheetDialogFragment {
+
+ private static final String ARG_OPTIONS = "options";
+
+ public static SmsBottomSheetFragment newInstance(@Nullable ArrayList<CharSequence> options) {
+ SmsBottomSheetFragment fragment = new SmsBottomSheetFragment();
+ Bundle args = new Bundle();
+ args.putCharSequenceArrayList(ARG_OPTIONS, options);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(
+ LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) {
+ LinearLayout layout = new LinearLayout(getContext());
+ layout.setOrientation(LinearLayout.VERTICAL);
+ List<CharSequence> items = getArguments().getCharSequenceArrayList(ARG_OPTIONS);
+ if (items != null) {
+ for (CharSequence item : items) {
+ layout.addView(newTextViewItem(item));
+ }
+ }
+ layout.addView(newTextViewItem(null));
+ layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+ return layout;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ FragmentUtils.checkParent(this, SmsSheetHolder.class);
+ }
+
+ @Override
+ public Dialog onCreateDialog(final Bundle savedInstanceState) {
+ LogUtil.i("SmsBottomSheetFragment.onCreateDialog", null);
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+ dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+ return dialog;
+ }
+
+ private TextView newTextViewItem(@Nullable final CharSequence text) {
+ int[] attrs = new int[] {android.R.attr.selectableItemBackground};
+ Context context = new ContextThemeWrapper(getContext(), getTheme());
+ TypedArray typedArray = context.obtainStyledAttributes(attrs);
+ Drawable background = typedArray.getDrawable(0);
+ //noinspection ResourceType
+ typedArray.recycle();
+
+ TextView textView = new TextView(context);
+ textView.setText(text == null ? getString(R.string.call_incoming_message_custom) : text);
+ int padding = (int) DpUtil.dpToPx(context, 16);
+ textView.setPadding(padding, padding, padding, padding);
+ textView.setBackground(background);
+ textView.setTextColor(context.getColor(R.color.blue_grey_100));
+ textView.setTextAppearance(R.style.TextAppearance_AppCompat_Widget_PopupMenu_Large);
+
+ LayoutParams params =
+ new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+ textView.setLayoutParams(params);
+
+ textView.setOnClickListener(
+ new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FragmentUtils.getParentUnsafe(SmsBottomSheetFragment.this, SmsSheetHolder.class)
+ .smsSelected(text);
+ dismiss();
+ }
+ });
+ return textView;
+ }
+
+ @Override
+ public int getTheme() {
+ return R.style.Theme_Design_Light_BottomSheetDialog;
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialogInterface) {
+ super.onDismiss(dialogInterface);
+ FragmentUtils.getParentUnsafe(this, SmsSheetHolder.class).smsDismissed();
+ }
+
+ /** Callback interface for {@link SmsBottomSheetFragment} */
+ public interface SmsSheetHolder {
+
+ void smsSelected(@Nullable CharSequence text);
+
+ void smsDismissed();
+ }
+}