Files
MoGoEagleEye/libraries/map-usbcamera/src/main/java/com/serenegiant/dialog/MessageDialogFragmentV4.java
donghongyu 353e8492b9 [Change]
修改速度取值,更新行车记录仪代码。
DEMO必须依附于预览获取YUV数据,不符合需求,这里先接入直播,后续需要按照源码抽离直接通过USB获取YUV的服务

Signed-off-by: donghongyu <donghongyu@zhidaoauto.com>
2022-02-24 17:47:33 +08:00

214 lines
7.0 KiB
Java

package com.serenegiant.dialog;
/*
* libcommon
* utility/helper classes for myself
*
* Copyright (c) 2014-2018 saki t_saki@serenegiant.com
*
* 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.
*/
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.serenegiant.utils.BuildCheck;
public class MessageDialogFragmentV4 extends DialogFragmentEx {
// private static final boolean DEBUG = false; // FIXME 実働時はfalseにすること
private static final String TAG = MessageDialogFragmentV4.class.getSimpleName();
private static final String ARGS_KEY_PERMISSIONS = "permissions";
/**
* ダイアログの表示結果を受け取るためのコールバックリスナー
*/
public static interface MessageDialogListener {
public void onMessageDialogResult(
@NonNull final MessageDialogFragmentV4 dialog, final int requestCode,
@NonNull final String[] permissions, final boolean result);
}
/**
* ダイアログ表示のためのヘルパーメソッド
* @param parent
* @param requestCode
* @param id_title
* @param id_message
* @param permissions
* @return
* @throws IllegalStateException
*/
public static MessageDialogFragmentV4 showDialog(
@NonNull final FragmentActivity parent, final int requestCode,
@StringRes final int id_title, @StringRes final int id_message,
@NonNull final String[] permissions) throws IllegalStateException {
final MessageDialogFragmentV4 dialog
= newInstance(requestCode, id_title, id_message, permissions);
dialog.show(parent.getSupportFragmentManager(), TAG);
return dialog;
}
/**
* ダイアログ表示のためのヘルパーメソッド
* @param parent
* @param requestCode
* @param id_title
* @param id_message
* @param permissions
* @return
* @throws IllegalStateException
*/
public static MessageDialogFragmentV4 showDialog(
@NonNull final Fragment parent, final int requestCode,
@StringRes final int id_title, @StringRes final int id_message,
@NonNull final String[] permissions) throws IllegalStateException {
final MessageDialogFragmentV4 dialog
= newInstance(requestCode, id_title, id_message, permissions);
dialog.setTargetFragment(parent, parent.getId());
dialog.show(parent.requireFragmentManager(), TAG);
return dialog;
}
/**
* ダイアログ生成のためのヘルパーメソッド
* ダイアログ自体を直接生成せずにこのメソッドを呼び出すこと
* @param requestCode
* @param id_title
* @param id_message
* @param permissions
* @return
*/
public static MessageDialogFragmentV4 newInstance(
final int requestCode,
@StringRes final int id_title, @StringRes final int id_message,
@NonNull final String[] permissions) {
final MessageDialogFragmentV4 fragment = new MessageDialogFragmentV4();
final Bundle args = new Bundle();
// ここでパラメータをセットする
args.putInt(ARGS_KEY_REQUEST_CODE, requestCode);
args.putInt(ARGS_KEY_ID_TITLE, id_title);
args.putInt(ARGS_KEY_ID_MESSAGE, id_message);
args.putStringArray(ARGS_KEY_PERMISSIONS, permissions);
fragment.setArguments(args);
return fragment;
}
private MessageDialogListener mDialogListener;
/**
* コンストラクタ, 直接生成せずに#newInstanceを使うこと
*/
public MessageDialogFragmentV4() {
super();
// デフォルトコンストラクタが必要
}
@Override
public void onAttach(final Context context) {
super.onAttach(context);
// コールバックインターフェースを取得
if (context instanceof MessageDialogListener) {
mDialogListener = (MessageDialogListener)context;
}
if (mDialogListener == null) {
final Fragment fragment = getTargetFragment();
if (fragment instanceof MessageDialogListener) {
mDialogListener = (MessageDialogListener)fragment;
}
}
if (mDialogListener == null) {
if (BuildCheck.isAndroid4_2()) {
final Fragment target = getParentFragment();
if (target instanceof MessageDialogListener) {
mDialogListener = (MessageDialogListener)target;
}
}
}
if (mDialogListener == null) {
// Log.w(TAG, "caller activity/fragment must implement PermissionDetailDialogFragmentListener");
throw new ClassCastException(context.toString());
}
}
// @Override
// public void onCreate(final Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// final Bundle args = savedInstanceState != null ? savedInstanceState : getArguments();
// }
@NonNull
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final Bundle args = savedInstanceState != null ? savedInstanceState : requireArguments();
final int id_title = args.getInt(ARGS_KEY_ID_TITLE);
final int id_message = args.getInt(ARGS_KEY_ID_MESSAGE);
final Activity activity = requireActivity();
return new AlertDialog.Builder(activity)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(id_title)
.setMessage(id_message)
.setPositiveButton(android.R.string.ok, mOnClickListener)
.setNegativeButton(android.R.string.cancel, mOnClickListener)
.create();
}
private final DialogInterface.OnClickListener mOnClickListener
= new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
// 本当はここでパーミッション要求をしたいだけどこのダイアログがdismissしてしまって結果を受け取れないので
// 呼び出し側へ返してそこでパーミッション要求する。なのでこのダイアログは単にメッセージを表示するだけ
callOnMessageDialogResult(which == DialogInterface.BUTTON_POSITIVE);
}
};
@Override
public void onCancel(final DialogInterface dialog) {
super.onCancel(dialog);
callOnMessageDialogResult(false);
}
/**
* コールバックリスナー呼び出しのためのヘルパーメソッド
* @param result
*/
private void callOnMessageDialogResult(final boolean result)
throws IllegalStateException {
final Bundle args = requireArguments();
final int requestCode = args.getInt(ARGS_KEY_REQUEST_CODE);
final String[] permissions = args.getStringArray(ARGS_KEY_PERMISSIONS);
try {
mDialogListener.onMessageDialogResult(
MessageDialogFragmentV4.this,
requestCode, permissions, result);
} catch (final Exception e) {
Log.w(TAG, e);
}
}
}