/** * Odoo, Open Source Management Solution * Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http:www.gnu.org/licenses/> * * Created on 25/2/15 6:26 PM */ package com.odoo.base.addons.mail.widget; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.webkit.WebView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.odoo.R; import com.odoo.base.addons.ir.feature.OFileManager; import com.odoo.base.addons.mail.MailMessage; import com.odoo.core.orm.ODataRow; import com.odoo.core.orm.OModel; import com.odoo.core.orm.fields.OColumn; import com.odoo.core.support.OdooCompatActivity; import com.odoo.core.utils.BitmapUtils; import com.odoo.core.utils.IntentUtils; import com.odoo.core.utils.OControls; import com.odoo.core.utils.ODateUtils; import com.odoo.core.utils.OStringColorUtil; import java.io.File; import java.util.ArrayList; import java.util.List; public class MailDetailDialog extends OdooCompatActivity implements View.OnClickListener { public static final String TAG = MailDetailDialog.class.getSimpleName(); private Bundle extra; private MailMessage mailMessage; private OModel baseModel; private TextView recordName; private View parent; private List<ODataRow> attachments = new ArrayList<>(); private LoadAttachments loadAttachments = null; private LinearLayout horizontalScrollView; private OFileManager fileManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.base_mail_chatter_message_detail); getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); fileManager = new OFileManager(this); mailMessage = new MailMessage(this, null); extra = getIntent().getExtras(); findViewById(R.id.btnClose).setOnClickListener(this); findViewById(R.id.btnReply).setOnClickListener(this); init(); } private void init() { recordName = (TextView) findViewById(R.id.recordName); parent = (View) recordName.getParent(); ODataRow row = mailMessage.browse(extra.getInt(OColumn.ROW_ID)); attachments.addAll(row.getM2MRecord("attachment_ids").browseEach()); if (attachments.size() > 0) { loadAttachments = new LoadAttachments(); loadAttachments.execute(); } horizontalScrollView = (LinearLayout) findViewById(R.id.attachmentsList); baseModel = OModel.get(this, row.getString("model"), mailMessage.getUser().getAndroidName()); ODataRow record = baseModel.browse(baseModel.selectRowId(row.getInt("res_id"))); String name = record.getString(baseModel.getDefaultNameColumn()); recordName.setText(name); recordName.setBackgroundColor(OStringColorUtil.getStringColor(this, name)); if (!row.getString("subject").equals("false")) OControls.setText(parent, R.id.messageSubject, row.getString("subject")); else OControls.setGone(parent, R.id.messageSubject); WebView messageBody = (WebView) findViewById(R.id.messageBody); messageBody.setBackgroundColor(Color.TRANSPARENT); messageBody.loadData(row.getString("body"), "text/html; charset=UTF-8", "UTF-8"); Bitmap author_image = BitmapUtils.getAlphabetImage(this, row.getString("author_name")); String author_img = mailMessage.getAuthorImage(row.getInt(OColumn.ROW_ID)); if (!author_img.equals("false")) { author_image = BitmapUtils.getBitmapImage(this, author_img); } OControls.setImage(parent, R.id.author_image, author_image); OControls.setText(parent, R.id.authorName, row.getString("author_name")); String date = ODateUtils.convertToDefault(row.getString("date"), ODateUtils.DEFAULT_FORMAT, "MMM dd, yyyy hh:mm a"); OControls.setText(parent, R.id.messageDate, date); } private class LoadAttachments extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { runOnUiThread(new Runnable() { @Override public void run() { for (ODataRow row : attachments) { addAttachment(row); } } }); return null; } } private void addAttachment(ODataRow values) { View attachmentView = LayoutInflater.from(this) .inflate(R.layout.base_attachment_item, horizontalScrollView, false); String fileName = values.getString("name"); String type = values.getString("file_type"); ImageView imgPreview = (ImageView) attachmentView.findViewById(R.id.attachmentPreview); if (type.contains("image")) { if (!values.getString("file_uri").equals("false")) { Uri uri = Uri.parse(new File(values.getString("file_uri")).toString()); imgPreview.setImageBitmap(fileManager.getBitmapFromURI(uri)); } else imgPreview.setImageResource(R.drawable.image); } else if (type.contains("audio")) { imgPreview.setImageResource(R.drawable.audio); } else if (type.contains("video")) { imgPreview.setImageResource(R.drawable.video); } else { imgPreview.setImageResource(R.drawable.file); } OControls.setText(attachmentView, R.id.attachmentFileName, fileName); attachmentView.setTag(values); attachmentView.findViewById(R.id.btnRemoveAttachment).setVisibility(View.GONE); attachmentView.setOnClickListener(this); horizontalScrollView.addView(attachmentView); } @Override public void onClick(View v) { if (v.getTag() != null) { ODataRow attachment = (ODataRow) v.getTag(); fileManager.downloadAttachment(attachment.getInt(OColumn.ROW_ID)); } else { switch (v.getId()) { case R.id.btnClose: finish(); break; case R.id.btnReply: extra.putString("type", MailChatterCompose.MessageType.Message.toString()); IntentUtils.startActivity(this, MailChatterCompose.class, extra); finish(); break; } } } @Override protected void onPause() { super.onPause(); if (loadAttachments != null) { loadAttachments.cancel(true); } } }