/* WarningDialogFragment.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.observer.fragment; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.ResultReceiver; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import org.deviceconnect.android.manager.R; import org.deviceconnect.android.observer.DConnectObservationService; import org.deviceconnect.android.observer.receiver.ObserverReceiver; import java.util.List; /** * 警告ダイアログフラグメント. * * * @author NTT DOCOMO, INC. */ public class WarningDialogFragment extends DialogFragment { /** * 再監視停止フラグ. */ private boolean mDisableFlg; @SuppressLint("InflateParams") @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { String packageName = getActivity().getIntent().getStringExtra(DConnectObservationService.PARAM_PACKAGE_NAME); int port = getActivity().getIntent().getIntExtra(DConnectObservationService.PARAM_PORT, -1); LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View view = inflater.inflate(R.layout.activity_warning_dialog, null); final TextView appNameView = (TextView) view.findViewById(R.id.alert_message); final ImageView appIconView = (ImageView) view.findViewById(R.id.alert_icon); String appName = getAppName(packageName); Drawable icon = null; try { icon = getActivity().getPackageManager().getApplicationIcon(packageName); } catch (NameNotFoundException e) { icon = getActivity().getResources().getDrawable(R.drawable.icon); } appNameView.setText(appName); appIconView.setImageDrawable(icon); String tempMessage = String.format(getString(R.string.activity_warning_mess), port); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); Dialog dialog = builder.setTitle(getString(R.string.activity_warning)).setMessage(tempMessage).setView(view) .setPositiveButton(R.string.activity_warning_ok, new OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { CheckBox box = (CheckBox) view.findViewById(R.id.disable_observer); mDisableFlg = box.isChecked(); dismiss(); } }).create(); dialog.setCanceledOnTouchOutside(false); return dialog; } /** * アプリケーション名を取得する. * * @param packageName アプリケーションのパッケージ名 * @return アプリケーション名 */ private String getAppName(final String packageName) { PackageManager pm = getActivity().getPackageManager(); final List<ApplicationInfo> appInfoList = pm.getInstalledApplications(Context.BIND_AUTO_CREATE); for (ApplicationInfo ai : appInfoList) { String appName = ai.loadLabel(pm).toString(); if (appName != null) { if (ai.packageName.equals(packageName)) { return appName; } } } return "NoName"; } @Override public void onStop() { super.onStop(); if (!mDisableFlg) { Intent i = new Intent(); i.setAction(DConnectObservationService.ACTION_START); i.setClass(getActivity(), ObserverReceiver.class); i.putExtra(DConnectObservationService.PARAM_RESULT_RECEIVER, new ResultReceiver(new Handler()) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { } }); getActivity().sendBroadcast(i); } getActivity().finish(); } }