diff options
Diffstat (limited to 'src/com/android/tv/dialog/InteractiveAppDialogFragment.java')
-rwxr-xr-x | src/com/android/tv/dialog/InteractiveAppDialogFragment.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/com/android/tv/dialog/InteractiveAppDialogFragment.java b/src/com/android/tv/dialog/InteractiveAppDialogFragment.java new file mode 100755 index 00000000..c5ffbaac --- /dev/null +++ b/src/com/android/tv/dialog/InteractiveAppDialogFragment.java @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2022 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.tv.dialog; + +import android.annotation.TargetApi; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.Button; +import android.widget.TextView; +import com.android.tv.R; +import com.android.tv.common.SoftPreconditions; + +import java.util.function.Function; + +import dagger.android.AndroidInjection; + +@TargetApi(Build.VERSION_CODES.TIRAMISU) +public class InteractiveAppDialogFragment extends SafeDismissDialogFragment { + private static final boolean DEBUG = false; + + public static final String DIALOG_TAG = InteractiveAppDialogFragment.class.getName(); + private static final String TRACKER_LABEL = "Interactive App Dialog"; + private static final String TV_IAPP_NAME = "tv_iapp_name"; + private boolean mIsChoseOK; + private String mIAppName; + private Function mUpdateAitInfo; + + public static InteractiveAppDialogFragment create(String iappName) { + InteractiveAppDialogFragment fragment = new InteractiveAppDialogFragment(); + Bundle args = new Bundle(); + args.putString(TV_IAPP_NAME, iappName); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onAttach(Context context) { + AndroidInjection.inject(this); + super.onAttach(context); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mIAppName = getArguments().getString(TV_IAPP_NAME); + setStyle(STYLE_NO_TITLE, 0); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + Dialog dlg = super.onCreateDialog(savedInstanceState); + dlg.getWindow().getAttributes().windowAnimations = R.style.pin_dialog_animation; + mIsChoseOK = false; + return dlg; + } + + @Override + public String getTrackerLabel() { + return TRACKER_LABEL; + } + + @Override + public void onStart() { + super.onStart(); + // Dialog size is determined by its windows size, not inflated view size. + // So apply view size to window after the DialogFragment.onStart() where dialog is shown. + Dialog dlg = getDialog(); + if (dlg != null) { + dlg.getWindow() + .setLayout( + getResources().getDimensionPixelSize(R.dimen.pin_dialog_width), + LayoutParams.WRAP_CONTENT); + } + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View v = inflater.inflate(R.layout.tv_app_dialog, container, false); + TextView mTitleView = (TextView) v.findViewById(R.id.title); + mTitleView.setText(getString(R.string.tv_app_dialog_title, mIAppName)); + Button okButton = v.findViewById(R.id.ok); + okButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + exit(true); + } + }); + Button cancelButton = v.findViewById(R.id.cancel); + cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + exit(false); + } + }); + return v; + } + + private void exit(boolean isokclick) { + mIsChoseOK = isokclick; + dismiss(); + } + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + SoftPreconditions.checkState(getActivity() instanceof OnInteractiveAppCheckedListener); + if (getActivity() instanceof OnInteractiveAppCheckedListener) { + ((OnInteractiveAppCheckedListener) getActivity()) + .onInteractiveAppChecked(mIsChoseOK); + } + } + + public interface OnInteractiveAppCheckedListener { + void onInteractiveAppChecked(boolean checked); + } +} |