package com.usai.apex; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.ContactsContract; import android.support.constraint.ConstraintLayout; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.Html; import android.text.TextWatcher; import android.util.Log; import android.util.SparseIntArray; import android.view.GestureDetector; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.usai.apex.shipmap.ShipMap; import com.usai.apex.mainframe.NewDetailActivity; import com.usai.apex.pdf.PDFPreviewActivity; import com.usai.util.Network; import com.usai.util.RAUtil; import com.usai.util.commonUtil; import org.apache.http.util.EncodingUtils; import org.json.JSONException; import org.json.JSONObject; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.util.regex.Pattern; public class DetailFragment extends Fragment implements OnClickListener, ShipMap.ShipMapListener /* * , * OnGestureListener */ { private static final int People_Pick_Code = 1357; private String copiedKey; private String copiedVal; private View touchedView; @Override public void shipMapTryToZoomIn(ShipMap shipMap, boolean zoomIn) { if (zoomIn) { LinearLayout.LayoutParams lfLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0); mDetailContainer.setLayoutParams(lfLayoutParams); } else { LinearLayout.LayoutParams lfLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0,2.0f); mDetailContainer.setLayoutParams(lfLayoutParams); } mMapZoomIn = zoomIn; } private class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDoubleTapEvent(MotionEvent e) { if (e.getAction() == MotionEvent.ACTION_UP) { if (touchedView == null) { ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); cm.setText(copiedVal); Toast.makeText(mContext, "Copied " + copiedKey, Toast.LENGTH_LONG).show(); } else { String type = (String) touchedView.getTag(); if (type.equals("tracking")) { TextView tvgroup = (TextView) touchedView.findViewById(R.id.tv_group); if (tvgroup != null) { String val = tvgroup.getText().toString(); ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); cm.setText(val); Toast.makeText(mContext, "Copied " + val, Toast.LENGTH_LONG).show(); } } } } copiedKey = null; copiedVal = null; touchedView = null; return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { if (touchedView != null) { onClick(touchedView); } touchedView = null; return false; } } private static final int REQUEST_LOGINACTIVITY = 1; // DataFragment mdataFragment; Context mContext; ProgressDialog progressDialog; private GestureDetector detector; protected void showProgressDialog(final String title, final String msg) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { try { progressDialog.setTitle(title); progressDialog.setMessage(msg); progressDialog.show(); } catch (Exception e) { e.printStackTrace(); } } }); } /* private GestureDetector mGestureDetector; */ @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); if (progressDialog == null) { progressDialog = new ProgressDialog(mContext); progressDialog.setCancelable(false); } if (detector == null) { detector = new GestureDetector(mContext, new GestureListener()); } } // @Override // public void onActivityCreated(@Nullable Bundle savedInstanceState) { // super.onActivityCreated(savedInstanceState); // // progressDialog = new ProgressDialog(mContext); // progressDialog.setCancelable(false); // } @Override public void onAttach(Context context) { super.onAttach(context); mContext = context; } @Override public void onDestroyView() { Log.d("DetailFragment", "onDestroyView()"); super.onDestroyView(); } // public String get_content() // { // return fragment_content; // } LinearLayout ll_root; ScrollView sl_root; String mimeType = "text/html"; private SearchTask m_task = null; SparseIntArray control = new SparseIntArray(); // private TextView mStatusMessageView; private View mStatusView; String fragment_content = null; public void requestdata() { if (m_task != null) { return; } if (fragment_content != null) { LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication .get_instance().getSystemService( Context.LAYOUT_INFLATER_SERVICE); init(fragment_content, inflater); return; } // if (mdataFragment.get_result() != null) { // LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication // .get_instance().getSystemService( // Context.LAYOUT_INFLATER_SERVICE); // init(mdataFragment.get_result(), inflater); // } // if (fragment_content != null) // return; // mStatusMessageView.setText("Loading"); showProgress(true); m_task = new SearchTask(); m_task.execute(); } public void set_content(String content) { fragment_content = content; } private void showProgress(final boolean show) { // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow // for very easy animations. If available, use these APIs to fade-in // the progress spinner. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { int shortAnimTime = ApexTrackingApplication.get_instance() .getResources() .getInteger(android.R.integer.config_shortAnimTime); mStatusView.setVisibility(View.VISIBLE); mStatusView.animate().setDuration(shortAnimTime) .alpha(show ? 1 : 0) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mStatusView.setVisibility(show ? View.VISIBLE : View.INVISIBLE); } }); ll_root.setVisibility(View.VISIBLE); ll_root.animate().setDuration(shortAnimTime).alpha(show ? 0 : 1) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { ll_root.setVisibility(show ? View.INVISIBLE : View.VISIBLE); } }); } else { // The ViewPropertyAnimator APIs are not available, so simply show // and hide the relevant UI components. mStatusView.setVisibility(show ? View.VISIBLE : View.INVISIBLE); ll_root.setVisibility(show ? View.INVISIBLE : View.VISIBLE); } } // @Override // public void onActivityCreated(Bundle savedInstanceState) // { // FragmentManager fm = getFragmentManager(); // // // Check to see if we have retained the worker fragment. // mdataFragment = (DataFragment)fm.findFragmentByTag("work"); // // // If not retained (or first time running), we need to create it. // if (mdataFragment == null) { // mdataFragment = new DataFragment(); // // Tell it who it is working with. // mdataFragment.setTargetFragment(this, 0); // fm.beginTransaction().add(mdataFragment, "work").commit(); // } // super.onActivityCreated(savedInstanceState); // } private ShipMap mTrackingMap; @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mContent != null) { outState.putString("content",mContent.toString()); } outState.putInt("selectContactPosition",mSelectContactPosition); outState.putInt("selectTrackingPosition",mSelectTrackingPosition); outState.putInt("selectTrackingChild",mSelectTrackingChild); outState.putBoolean("mapZoomIn",mMapZoomIn); } private void configureMap(ShipMap map) { if (map == null) { return; } map.setShowCurrent(true); map.setShowDestination(true); map.setShowOrigin(true); map.setShowPor(true); map.setShowPoe(true); map.setShowPod(true); map.setShowPol(true); map.setShipMapListener(this); } private RelativeLayout mDetailContainer; private boolean mMapZoomIn = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getContext(); /* mGestureDetector = new GestureDetector(this); */ View view = null; if(this.getArguments().getString("action_type").equals("Tracing")||this.getArguments().getString("action_type").equals("Tracking")) { view = inflater.inflate(R.layout.detail_fragment_withmap, null); mTrackingMap = view.findViewById(R.id.tracking_map); configureMap(mTrackingMap); mDetailContainer = view.findViewById(R.id.detail_list_container); } else { view = inflater.inflate(R.layout.detail_fragment, null); mTrackingMap = null; } if (savedInstanceState != null) { fragment_content = savedInstanceState.getString("content"); mSelectContactPosition = savedInstanceState.getInt("selectContactPosition"); mSelectTrackingPosition = savedInstanceState.getInt("selectTrackingPosition"); mSelectTrackingChild = savedInstanceState.getInt("selectTrackingChild"); mMapZoomIn = savedInstanceState.getBoolean("mapZoomIn"); } if (mTrackingMap != null) { mTrackingMap.setZoomIn(mMapZoomIn); } // if(this.getArguments().getString("action_type").equals("Tracing")) // { // LinearLayout ll1 = view.findViewById(R.id.detail_linear); // // ShipMap shipMap = new ShipMap(context); //// mShipMap = shipMap; // // // LinearLayout.LayoutParams mapLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0,1.0f); // mapLayoutParams.setMargins(commonUtil.dp2px(context,5),commonUtil.dp2px(context,2),commonUtil.dp2px(context,5),commonUtil.dp2px(context,2)); // // ll1.addView(shipMap,mapLayoutParams); // // } sl_root = (ScrollView) view.findViewById(R.id.sl_root); /* * sl_root.setOnTouchListener(new View.OnTouchListener() { * * @Override public boolean onTouch(View v, MotionEvent event) { return * mGestureDetector.onTouchEvent(event); } }); */ ll_root = (LinearLayout) view.findViewById(R.id.ll_root); mStatusView = view.findViewById(R.id.status); LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll_refresh); Button btn_refresh = (Button) ll.findViewById(R.id.btn_refresh); btn_refresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LinearLayout ll = (LinearLayout) ll_root .findViewById(R.id.ll_refresh); ll.setVisibility(View.GONE); requestdata(); } }); // FragmentManager fm = getFragmentManager(); // List fragments = fm.getFragments(); // if (fragments != null) { // Log.e("DetailFragment", "fragments count=" + fragments.size()); // // for (int i = 0; i < fragments.size(); i++) // // Log.e("DetailFragment", "fragments name=" + fragments.size()); // // } // // this.getFragmentManager(); // String tag = getArguments().getString("module_name"); // // Check to see if we have retained the worker fragment. // mdataFragment = (DataFragment) fm.findFragmentById(12345); // // // If not retained (or first time running), we need to create it. // if (mdataFragment == null) { // Log.e("dataFragment creaded ", "tag=data_" + tag); // mdataFragment = new DataFragment(); // // Tell it who it is working with. // mdataFragment.setTargetFragment(this, 0); // fm.beginTransaction().add(12345,mdataFragment, "data+" + // tag).commit(); // } requestdata(); return view; } protected JSONObject loadfakecontent(int rawid) { String jstring = ""; try { InputStream in = getResources().openRawResource(rawid); // 获取文件的字节数 int lenght = in.available(); // 创建byte数组 byte[] buffer = new byte[lenght]; // 将文件中的数据读到byte数组中 in.read(buffer); jstring = EncodingUtils.getString(buffer, "UTF-8"); JSONObject jsobj = new JSONObject(jstring); return jsobj; // JSONObject objrecords = jsobj.getJSONObject("records"); } catch (Exception e) { e.printStackTrace(); } return null; } public JSONObject mContent; private int mSelectContactPosition = -1; private int mSelectTrackingPosition = -1; private int mSelectTrackingChild = -1; private View mSelectedTrackingCell = null; private void selectLocation(View view,int group,int child,JSONObject location) { if (mSelectedTrackingCell != null) { mSelectedTrackingCell.setBackgroundColor(Color.WHITE); } mSelectTrackingPosition = group; mSelectTrackingChild = child; mSelectedTrackingCell = view; if (mSelectedTrackingCell != null) { mSelectedTrackingCell.setBackgroundColor(Color.LTGRAY); } if (mTrackingMap != null && location != null) { String backup_port=this.mContent.optString("backup_port"); mTrackingMap.showShipAnnotation(location,backup_port); } } void init(String jstr, LayoutInflater inflater) { // LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication // .get_instance().getSystemService( // Context.LAYOUT_INFLATER_SERVICE); inflater=getActivity().getLayoutInflater(); String TAG = "init@DetailFragment"; Log.d(TAG, jstr); try { JSONObject jsonObj = new JSONObject(jstr); int group_count = jsonObj.getInt("count"); // if (getArguments().getString("action_type").equals("Detail")) { // JSONObject commObj = loadfakecontent(R.raw.fake_comm); // jsonObj.put("group" + group_count++,commObj); // jsonObj.put("count",group_count); // } mContent = jsonObj; if (group_count == 0) { TextView tv_empty = (TextView) ll_root .findViewById(R.id.tv_empty); tv_empty.setVisibility(View.VISIBLE); NewDetailActivity activity = (NewDetailActivity) getActivity(); int tabCount = activity.getTabCount(); if(tabCount==1) { new AlertDialog.Builder(getContext()) .setTitle("Warning") .setCancelable(false) .setMessage("No Search Result.") .setPositiveButton("Back", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { getActivity().finish(); // checkAllPermission(); // if (finalRequest) // checkAllPermission(); // else // finish(); } }) // .setNegativeButton("No", new DialogInterface.OnClickListener() { // @Override // public void onClick(DialogInterface dialog, int which) { // finish(); // } // }) .show(); } } for (int i = 0; i < group_count; i++) { // String key = (String) it.next(); // if (key.equals("result")) // continue; final JSONObject groupobj = jsonObj.getJSONObject("group" + i); View v = inflater.inflate(R.layout.group_tag, null); // v.setOnClickListener(this); TextView tvgroup = (TextView) v.findViewById(R.id.tv_group); String group_name = groupobj.getString("_name"); tvgroup.setText(group_name); v.setId(commonUtil.generateViewId()); ll_root.addView(v); String grouptype = groupobj.getString("_type"); v.setTag(grouptype); v.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { touchedView = view; detector.onTouchEvent(motionEvent); return true; } }); // groupobj.remove("_type"); if (grouptype.equals("mapping")) { LinearLayout mappingview = (LinearLayout) inflater.inflate( R.layout.key_mapping, null); mappingview.setId(commonUtil.generateViewId()); control.put(v.getId(), mappingview.getId()); ll_root.addView(mappingview); int map_count = groupobj.getInt("count"); for (int j = 0; j < map_count; j++) { // String keygroup = (String) itgroup.next(); JSONObject itemobj = groupobj.getJSONObject("item" + j); final String key = (String) itemobj.keys().next(); final String val = itemobj.getString(key); LinearLayout mappingitem = (LinearLayout) inflater .inflate(R.layout.keymapping_item, null); TextView tvkey = (TextView) mappingitem .findViewById(R.id.tv_key); tvkey.setText(key); // tvkey.setBackgroundResource(R.drawable.detail_item); TextView tvval = (TextView) mappingitem .findViewById(R.id.tv_value); tvval.setText(Html.fromHtml(val)); // tvval.setBackgroundResource(R.drawable.detail_item); tvval.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { copiedKey = key; copiedVal = val; detector.onTouchEvent(motionEvent); return true; } }); mappingview.addView(mappingitem); } // Iterator itgroup = groupobj.keys(); // while (itgroup.hasNext()) // { // // // } } else if (grouptype.equals("table")) { String content = groupobj.getString("content"); WebView wv; wv = (WebView) inflater.inflate(R.layout.web_content, null); wv.getSettings().setDefaultTextEncodingName("UTF-8"); wv.setId(commonUtil.generateViewId()); wv.setWebViewClient(new MyWebViewClient()); // wv.setDownloadListener(new DownloadListener() // { // // @Override // public void onDownloadStart(String url, // String userAgent, String contentDisposition, // String mimetype, long contentLength) // { // if(!commonUtil.localdirExist()) // { // // new AlertDialog.Builder(getActivity()) // .setIconAttribute(android.R.attr.alertDialogIcon) // .setTitle(R.string.str_localdir_error) // .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { // public void onClick(DialogInterface dialog, int whichButton) { // // /* User clicked OK so do some stuff */ // } // }) // .create().show(); // return; // } //// String filename = contentDisposition.replace("attachment;filename=\"", ""); //// filename = filename.replace("\"", ""); //// //// Log.d("WebView", "Download Action"); //// Log.d("tag", "url=" + url); //// // Log.i("tag", "userAgent="+userAgent); //// // Log.i("tag", //// // "contentDisposition="+contentDisposition); //// // Log.i("tag", "mimetype="+mimetype); //// // Log.i("tag", "contentLength="+contentLength); //// // Uri uri = Uri.parse(url); //// // Intent intent = new Intent(Intent.ACTION_VIEW, //// // uri); //// // startActivity(intent); //// //// final DownloadManager downloadManager = (DownloadManager) ApexTrackingApplication //// .get_instance().getSystemService( //// Context.DOWNLOAD_SERVICE); //// //// Uri uri = Uri.parse(url); //// final Request request = new Request(uri); //// //// // 设置允许使用的网络类型,这里是移动网络和wifi都可以 //// request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE //// | DownloadManager.Request.NETWORK_WIFI); //// //// //// //// request.setDestinationInExternalPublicDir("Apex Mobile",filename); //// //// // 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION //// // request.setShowRunningNotification(false); //// //// // 不显示下载界面 //// request.setVisibleInDownloadsUi(false); //// request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //// //// /* //// * 设置下载后文件存放的位置,如果sdcard不可用,那么设置这个将报错, //// * 因此最好不设置如果sdcard可用,下载后的文件 在/mnt/sdcard/Android/ //// * data/packageName/files目录下面 //// * ,如果sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面 //// */ //// // request.setDestinationInExternalFilesDir(this, //// // null, "tar.apk"); //// ////// getActivity(); //// AlertDialog.Builder builder = new Builder( //// getActivity()); //// builder.setMessage(getString(R.string.str_downloadmessage)); //// //// builder.setTitle(getString(R.string.str_confirmdownload)); //// //// builder.setPositiveButton( //// getString(R.string.str_download), //// new Dialog.OnClickListener() //// { //// //// @Override //// public void onClick( //// DialogInterface dialog, //// int which) //// { //// downloadManager.enqueue(request); //// dialog.dismiss(); //// //// } //// }); //// //// builder.setNegativeButton( //// getString(R.string.str_cancel), //// new Dialog.OnClickListener() //// { //// //// @Override //// public void onClick( //// DialogInterface dialog, //// int which) //// { //// dialog.dismiss(); //// } //// }); //// //// builder.create().show(); // // } // // }); wv.setTag(i); control.put(v.getId(), wv.getId()); wv.loadData(content, mimeType, null); // wv.setOnTouchListener(new OnTouchListener() // { // @Override // public boolean onTouch(View v, MotionEvent event) // { // // if (event.getAction() == MotionEvent.ACTION_UP) // sl_root.requestDisallowInterceptTouchEvent(false); // else // sl_root.requestDisallowInterceptTouchEvent(true); // // return false; // } // }); ll_root.addView(wv); Log.d("table content", content); } if (grouptype.equals("tracking")) { LinearLayout listview = (LinearLayout) inflater.inflate( R.layout.list_content, null); listview.setId(commonUtil.generateViewId()); ViewGroup.LayoutParams lp=listview.getLayoutParams(); control.put(v.getId(), listview.getId()); ll_root.addView(listview); long list_count = groupobj.getInt("count"); for (int j = 0; j < list_count; j++) { final JSONObject itemobj = groupobj.getJSONObject("item" + j); ConstraintLayout listitem = (ConstraintLayout) inflater .inflate(R.layout.detail_tracking_cell, null); ImageView icon = (ImageView) listitem .findViewById(R.id.iv_thumb); String iconname = itemobj.getString("icon"); int rid = commonUtil.iconName2Rid(getActivity(),iconname); icon.setImageResource(rid); if(j!=0) { icon.setColorFilter(Color.GRAY); // ColorMatrix matrix = new ColorMatrix(); // matrix.setSaturation(0); // ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); // icon..image.setColorFilter(filter); } TextView tvitem = (TextView) listitem .findViewById(R.id.tv_title); String val = itemobj.getString("msg"); tvitem.setText(val); // tvitem.setBackgroundResource(R.drawable.detail_item); // listitem.removeView(tvitem); int px=commonUtil.dp2px(getActivity(),56); listitem.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, px, 1)); listview.addView(listitem); // ViewGroup.LayoutParams lp1=listitem.getLayoutParams(); final int selectIndex = i; final int child = j; final JSONObject location = groupobj.optJSONObject("location"); listitem.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // if (mTrackingMap != null) { // JSONObject location = groupobj.optJSONObject("location"); // if (location != null) { // mTrackingMap.showShipAnnotation(location); // } // mSelectTrackingPosition = selectIndex; // } selectLocation(v,selectIndex,child,location); } }); if (mSelectTrackingPosition == -1) { mSelectTrackingPosition = selectIndex; } if (mSelectTrackingChild == -1) { mSelectTrackingChild = 0; } if (mSelectTrackingPosition == selectIndex && mSelectTrackingChild == child) { // if (mTrackingMap != null) { // JSONObject location = groupobj.optJSONObject("location"); // if (location != null) { // mTrackingMap.showShipAnnotation(location); // } // } selectLocation(listitem,selectIndex,child,location); } } } if (grouptype.equals("list")) { LinearLayout listview = (LinearLayout) inflater.inflate( R.layout.list_content, null); listview.setId(commonUtil.generateViewId()); control.put(v.getId(), listview.getId()); ll_root.addView(listview); long list_count = groupobj.getInt("count"); for (int j = 0; j < list_count; j++) { RelativeLayout listitem = (RelativeLayout) inflater .inflate(R.layout.list_item, null); TextView tvitem = (TextView) listitem .findViewById(R.id.tv_item); String val = groupobj.getString("line" + j); tvitem.setText(val); // tvitem.setBackgroundResource(R.drawable.detail_item); listitem.removeView(tvitem); listview.addView(tvitem); } // Iterator itgroup = groupobj.keys(); // while (itgroup.hasNext()) // { // String keygroup = (String) itgroup.next(); // // } } if (grouptype.equals("communication")) { LinearLayout listview = (LinearLayout) inflater.inflate( R.layout.list_content, null); listview.setId(commonUtil.generateViewId()); control.put(v.getId(), listview.getId()); ll_root.addView(listview); // 添加收件人和cc ConstraintLayout commu_header = (ConstraintLayout) inflater .inflate(R.layout.commu_item_header, null); TextView toTv = commu_header.findViewById(R.id.comm_to_tv); EditText ccTv = commu_header.findViewById(R.id.comm_cc_tv); ImageButton contactBtn = commu_header.findViewById(R.id.comm_contact_btn); ccTv.setTag("group_" + i + "_cc"); String to = groupobj.optString("receipt"); String cc = groupobj.optString("cc"); toTv.setText(to); ccTv.setText(cc); TextFieldTextWatcher ccWatcher = new TextFieldTextWatcher(getContext(),ccTv,i,0); ccTv.addTextChangedListener(ccWatcher); final int selectIndex = i; contactBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSelectContactPosition = selectIndex; Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, People_Pick_Code); } }); listview.addView(commu_header); long list_count = groupobj.getInt("count"); for (int j = 0; j < list_count; j++) { ConstraintLayout msgitem = (ConstraintLayout) inflater .inflate(R.layout.commu_item_msg, null); JSONObject msgObj = groupobj.getJSONObject("item" + j); String sender = msgObj.optString("Sender"); String msg = msgObj.optString("msg"); String time = msgObj.optString("mst_time"); final String email_url = msgObj.optString("email_url"); TextView senderTv = msgitem.findViewById(R.id.comm_sender_tv); TextView msgTv = msgitem.findViewById(R.id.comm_msg_tv); TextView timeTv = msgitem.findViewById(R.id.comm_time_tv); Button sendBtn = msgitem.findViewById(R.id.comm_send_msg_btn); senderTv.setText(sender); // msgTv.setText(msg); msgTv.setText(Html.fromHtml(msg)); timeTv.setText(time); sendBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Uri content_url = Uri.parse(email_url); Intent intent = new Intent(Intent.ACTION_VIEW,content_url); // Intent intent = new Intent(); // intent.setAction("android.intent.action.VIEW"); // intent.setData(content_url); startActivity(intent); } }); if (email_url == null || email_url.length() == 0) { sendBtn.setVisibility(View.INVISIBLE); } listview.addView(msgitem); } //添加 消息输入和发送 ConstraintLayout commu_footer = (ConstraintLayout) inflater .inflate(R.layout.commu_item_footer, null); EditText editTv = commu_footer.findViewById(R.id.comm_edit_tv); Button sendEmailBtn = commu_footer.findViewById(R.id.comm_send_email_btn); TextFieldTextWatcher editWatcher = new TextFieldTextWatcher(getContext(),editTv,i,1); editTv.addTextChangedListener(editWatcher); String edit_content = groupobj.optString("edit_content"); editTv.setText(edit_content); final int groupIndex = i; sendEmailBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { JSONObject commGroup = getGroup(groupIndex); final String cc = commGroup.optString("cc"); final String content = commGroup.optString("edit_content"); if (content == null || content.length() == 0) { new AlertDialog.Builder(mContext) .setTitle("Warning") .setMessage("The communication message that will be sent is blank") .setPositiveButton("Ok",null) .show(); return; } if (cc != null && cc.length() > 0) { // 校验邮箱地址 String[] ccArr = cc.split(";"); for (int k = 0; k < ccArr.length; k++) { String ccStr = ccArr[k]; if (ccStr.length() > 0) { boolean isEmail = validateEmail(ccStr); if (!isEmail) { new AlertDialog.Builder(mContext) .setTitle("Warning") .setMessage("The communication cc is not right") .setPositiveButton("Ok",null) .show(); return; } } } } // send final ProgressDialog pd = new ProgressDialog(mContext); pd.setTitle(null); pd.setMessage("send email"); pd.setCancelable(false); pd.show(); final String serialNo = commGroup.optString("serial_no"); new Thread(new Runnable() { @Override public void run() { final JSONObject response = Network.sendEmail(content,cc,serialNo); getActivity().runOnUiThread(new Runnable() { @Override public void run() { pd.dismiss(); boolean showAlert = false; String msg = null; if (response != null) { int result = response.optInt("result",Network.RESULT_FALSE); if (result != Network.RESULT_TRUE) { showAlert = true; msg = response.optString("err_msg"); } } else { showAlert = true; } if (msg == null) { msg = "Sorry,something wrong"; } if (showAlert) { new AlertDialog.Builder(mContext) .setTitle(null) .setMessage(msg) .setPositiveButton("Ok",null) .show(); } } }); } }).start(); } }); listview.addView(commu_footer); listview.forceLayout(); } // String value = obj.getString(key); // JSONArray array = obj.getJSONArray(key); // for(int i=0;i 0) { if (emailType != null && Integer.valueOf(emailType) == ContactsContract.CommonDataKinds.Email.TYPE_WORK) { appendContactEmail(email,mSelectContactPosition); return; } } } } } mSelectContactPosition = -1; } } @Override public void onDetach() { if (m_task != null) m_task.cancel(false); super.onDetach(); } class SearchTask extends AsyncTask { int errorcode; @Override protected Boolean doInBackground(Void... params) { Log.d("SearchTask", "doInBackground"); if (!Network.NetworkIsAvailable()) { errorcode = Network.RESULT_NET_NOTAVAILABLE; return false; } String jstr = Network.get_detail(getArguments()); if (jstr == null || jstr.length() <= 0) { // Log.d(TAG, "json is wrong"); errorcode = Network.RESULT_NET_ERROR; return false; } // mdataFragment.put_result(jstr); fragment_content = jstr; NewDetailActivity activity = (NewDetailActivity) getActivity(); activity.save_content(getArguments().getString("action_type"), jstr); errorcode = Network.RESULT_TRUE; return true; } @Override protected void onPostExecute(Boolean success) { Log.i("onPostExecute", "entry"); m_task = null; showProgress(false); // if (ApexTrackingApplication.get_authorization() == false) // { // if(((DetailActivity) getActivity()).showlogin == true) // return; // ((DetailActivity) getActivity()).showlogin = true; // LinearLayout ll = (LinearLayout) ll_root // .findViewById(R.id.ll_refresh); // ll.setVisibility(View.VISIBLE); // Toast toast = Toast.makeText( // ApexTrackingApplication.get_instance(), // getText(R.string.msg_net_passwordchangedremote) , Toast.LENGTH_LONG); // toast.setGravity(Gravity.CENTER, 0, 0); // toast.show(); // Intent i = new Intent(); // i.setClass(getActivity(), ApexActivity.class); // startActivityForResult(i, REQUEST_LOGINACTIVITY); // return; // } switch (errorcode) { case Network.RESULT_NET_NOTAVAILABLE: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_connection_none), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } case Network.RESULT_NET_ERROR: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_net_error), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } case Network.RESULT_ERROR: // case Network.RESULT_RESPONSE_NULL: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_net_resulterror) + ":" + errorcode, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } default: break; } if (success) { LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication .get_instance().getSystemService( Context.LAYOUT_INFLATER_SERVICE); init(fragment_content, inflater/* * getActivity(). * getLayoutInflater() */); } else { LinearLayout ll = (LinearLayout) ll_root .findViewById(R.id.ll_refresh); ll.setVisibility(View.VISIBLE); } super.onPostExecute(success); } @Override protected void onCancelled() { m_task = null; showProgress(false); } } private void showQuickLook(final String url) { showProgressDialog("Please wait","Downloading..."); new Thread(new Runnable() { @Override public void run() { String cacheDir = ApexTrackingApplication.getInstance().getExternalCacheDir().getAbsolutePath();//ApexTrackingApplication.getInstance().getDocumentDir(); final Bundle param = new Bundle(); // 下载文件 final File downloadFile = Network.downloadFile(param,url,cacheDir); getActivity().runOnUiThread(new Runnable() { @Override public void run() { progressDialog.dismiss(); if (downloadFile != null && downloadFile.exists()) { String email = null,email_subject = null,email_content = null; //此处需要新增保存文档的本地表 try { email = mContent.getString("email"); email_subject = mContent.getString("email_subject"); email_content = mContent.getString("email_content"); } catch (JSONException e) { e.printStackTrace(); } // email=param.getString("email"); // email_subject=param.getString("email_subject"); // email_content=param.getString("email_content"); previewPDF(downloadFile.getAbsolutePath(),email,email_subject,email_content); } else { showAlert("Sorry,there is a wrong."); } } }); } }).start(); } // public class DataFragment extends Fragment { // // String result = null; // // @Override // public void onCreate(Bundle savedInstanceState) { // setRetainInstance(true); // super.onCreate(savedInstanceState); // } // // public String get_result() { // return result; // // } // // public void put_result(String s) { // result = s; // } // // } public void showAlert(String msg) { if (msg == null || msg.isEmpty()) { return; } new android.support.v7.app.AlertDialog.Builder(mContext) .setMessage(msg) .show(); } protected void previewPDF(String file,String email,String subject,String content) { Intent myIntent = new Intent(); myIntent = new Intent(getActivity(), PDFPreviewActivity.class); myIntent.putExtra("file",file); myIntent.putExtra("iscache",true); try { JSONObject json = new JSONObject(); // email = "66666@qq.com"; // subject = "test subject"; // content = "test body"; if (email != null) { json.put("email",email); } if (subject != null) { json.put("subject",subject); } if (content != null) { json.put("content",content); } myIntent.putExtra("email",json.toString()); } catch (JSONException e) { e.printStackTrace(); } startActivity(myIntent); } public void download(String url) { final String download_url = url; showQuickLook(url); if(true) return; showProgressDialog("Please wait","Downloading..."); new Thread(new Runnable() { @Override public void run() { // String cacheDir = ApexTrackingApplication.getInstance().getDocumentDir(); // 下载文件 final File downloadFile = Network.downloadFile(null,download_url,null); getActivity().runOnUiThread(new Runnable() { @Override public void run() { progressDialog.dismiss(); RAUtil.openFile(getActivity(),downloadFile); } }); } }).start(); } public class MyWebViewClient extends WebViewClient { // 如果页面中链接,如果希望点击链接继续在当前browser中响应, // 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。 public boolean shouldOverviewUrlLoading(WebView view, String url) { Log.d("Web Client", "shouldOverviewUrlLoading: " + url); // L.i("shouldOverviewUrlLoading"); view.loadUrl(url); return true; } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { Log.d("Web Client", "shouldOverrideUrlLoading: " + request); return super.shouldOverrideUrlLoading(view, request); } public void onPageStarted(WebView view, String url, Bitmap favicon) { // L.i("onPageStarted"); // showProgress(); Log.d("Web Client", "onPageStarted: "); } public void onPageFinished(WebView view, String url) { // L.i("onPageFinished"); // closeProgress(); Log.d("Web Client", "onPageFinished: "); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // L.i("onReceivedError"); // closeProgress(); Log.d("Web Client", "onReceivedError: "); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { Log.d("Web Client", "shouldInterceptRequest: " + url); if (url.startsWith("http") && url.contains("action_type=download_doc")) { download(url); String content = contentOfWebView(view); WebResourceResponse response = new WebResourceResponse("text/html", "utf-8", new ByteArrayInputStream(content.getBytes())); return response; } else { return super.shouldInterceptRequest(view,url); } } String contentOfWebView(WebView webView) { int i = (int)webView.getTag(); try { JSONObject groupobj = mContent.getJSONObject("group" + i); String content = groupobj.getString("content"); return content; } catch (JSONException e) { e.printStackTrace(); } return null; } // @Override // public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { // Log.d("Web Client", "shouldInterceptRequest: " + request); // // if (request.getUrl().toString().contains("action_type=download_doc")) { // return null; // } else { // return super.shouldInterceptRequest(view,request); // } // // // } } private void appendContactEmail(String email,int group) { try { String groupKey = "group" + group; JSONObject groupObj = mContent.getJSONObject(groupKey); String groupType = groupObj.getString("_type"); if (groupType.equals("communication")) { String oldCC = groupObj.optString("cc"); if (oldCC == null || oldCC.length() == 0) { oldCC = email + ";"; } else { if (oldCC.substring(oldCC.length() - 1).equals(";")) { oldCC = oldCC + email + ";"; } else { oldCC = oldCC + ";" + email + ";"; } } commContentChange(oldCC,group,0); EditText ccTv = ll_root.findViewWithTag("group_" + group + "_cc"); if (ccTv != null) { ccTv.setText(oldCC); ccTv.requestFocus(); ccTv.setSelection(oldCC.length()); } } } catch (JSONException e) { e.printStackTrace(); } } private void commContentChange(String content,int group,int child) { try { String groupKey = "group" + group; JSONObject groupObj = mContent.getJSONObject(groupKey); String groupType = groupObj.getString("_type"); if (groupType.equals("communication")) { if (child == 0) { groupObj.put("cc",content); } else if (child == 1) { groupObj.put("edit_content",content); } mContent.put(groupKey,groupObj); } } catch (JSONException e) { e.printStackTrace(); } } public class TextFieldTextWatcher implements TextWatcher { Context mCtx; int group; int child; EditText textView; public TextFieldTextWatcher(Context ctx,EditText textView,int group,int child) { this.mCtx = ctx; this.textView = textView; this.group = group; this.child = child; } String origin_text; String string; int start_position; int change_length; // 修改原文长度 int new_string_length; /** * s 改变前的内容 * start 增加内容前光标位置,删除内容后光标位置 (起始位置) * count 选中s中的内容长度(发生改变的原内容长度),未选中为0 * after 新添加的内容长度,删除为0 * */ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // Log.d("TextChange", "before Text Changed: " + s + " Start: " + start + " Count: " + count + " After: " + after); origin_text = s.toString(); start_position = start; change_length = count; new_string_length = after; } /** * s 改变后的内容 * start 增加内容前光标位置,删除内容后光标位置 (起始位置) * before 选中s中的内容长度(发生改变的原内容长度),未选中为0 * count 增加内容长度,删除内容为0 * */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // Log.d("TextChange", "on Text Changed: " + s + " Start: " + start + " Before: " + before + " Count: " + count); } @Override public void afterTextChanged(Editable s) { commContentChange(s.toString(),group,child); } } }