Skip to content

Commit 53c562c

Browse files
committed
Added display the message details while loading the message body. | Close #66.
1 parent bed27cb commit 53c562c

File tree

7 files changed

+172
-171
lines changed

7 files changed

+172
-171
lines changed

FlowCrypt/src/main/java/com/flowcrypt/email/api/email/model/GeneralMessageDetails.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public GeneralMessageDetails[] newArray(int size) {
3838

3939
private String email;
4040
private String label;
41-
private long uid;
41+
private int uid;
4242
private long receivedDateInMillisecond;
4343
private long sentDateInMillisecond;
4444
private String[] from;
@@ -54,7 +54,7 @@ public GeneralMessageDetails() {
5454
protected GeneralMessageDetails(Parcel in) {
5555
this.email = in.readString();
5656
this.label = in.readString();
57-
this.uid = in.readLong();
57+
this.uid = in.readInt();
5858
this.receivedDateInMillisecond = in.readLong();
5959
this.sentDateInMillisecond = in.readLong();
6060
this.from = in.createStringArray();
@@ -91,7 +91,7 @@ public int describeContents() {
9191
public void writeToParcel(Parcel dest, int flags) {
9292
dest.writeString(this.email);
9393
dest.writeString(this.label);
94-
dest.writeLong(this.uid);
94+
dest.writeInt(this.uid);
9595
dest.writeLong(this.receivedDateInMillisecond);
9696
dest.writeLong(this.sentDateInMillisecond);
9797
dest.writeStringArray(this.from);
@@ -118,11 +118,11 @@ public void setLabel(String label) {
118118
this.label = label;
119119
}
120120

121-
public long getUid() {
121+
public int getUid() {
122122
return uid;
123123
}
124124

125-
public void setUid(long uid) {
125+
public void setUid(int uid) {
126126
this.uid = uid;
127127
}
128128

FlowCrypt/src/main/java/com/flowcrypt/email/database/dao/source/imap/MessageDaoSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public GeneralMessageDetails getMessageInfo(Cursor cursor) {
196196

197197
generalMessageDetails.setEmail(cursor.getString(cursor.getColumnIndex(COL_EMAIL)));
198198
generalMessageDetails.setLabel(cursor.getString(cursor.getColumnIndex(COL_FOLDER)));
199-
generalMessageDetails.setUid(cursor.getLong(cursor.getColumnIndex(COL_UID)));
199+
generalMessageDetails.setUid(cursor.getInt(cursor.getColumnIndex(COL_UID)));
200200
generalMessageDetails.setReceivedDateInMillisecond(
201201
cursor.getLong(cursor.getColumnIndex(COL_RECEIVED_DATE)));
202202
generalMessageDetails.setSentDateInMillisecond(

FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MessageDetailsActivity.java

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,21 @@ public class MessageDetailsActivity extends BaseBackStackSyncActivity implements
4242
.LoaderCallbacks<Cursor>, MessageDetailsFragment.OnActionListener {
4343
public static final int RESULT_CODE_UPDATE_LIST = 100;
4444

45-
public static final String EXTRA_KEY_EMAIL =
46-
GeneralUtil.generateUniqueExtraKey("EXTRA_KEY_EMAIL", MessageDetailsActivity.class);
47-
public static final String EXTRA_KEY_FOLDER =
48-
GeneralUtil.generateUniqueExtraKey("EXTRA_KEY_FOLDER", MessageDetailsActivity.class);
49-
public static final String EXTRA_KEY_UID =
50-
GeneralUtil.generateUniqueExtraKey("EXTRA_KEY_UID", MessageDetailsActivity.class);
45+
public static final String EXTRA_KEY_FOLDER = GeneralUtil.generateUniqueExtraKey("EXTRA_KEY_FOLDER",
46+
MessageDetailsActivity.class);
47+
public static final String EXTRA_KEY_GENERAL_MESSAGE_DETAILS = GeneralUtil.generateUniqueExtraKey
48+
("EXTRA_KEY_GENERAL_MESSAGE_DETAILS", MessageDetailsActivity.class);
5149

5250
private GeneralMessageDetails generalMessageDetails;
53-
private String email;
5451
private Folder folder;
55-
private int uid;
56-
private boolean isNeedToReceiveMessageDetails;
52+
private boolean isNeedToReceiveMessageBody;
5753
private boolean isBackEnable = true;
54+
private boolean isRequestMessageDetailsStarted;
5855

59-
public static Intent getIntent(Context context, String email, Folder folder, int uid) {
56+
public static Intent getIntent(Context context, Folder folder, GeneralMessageDetails generalMessageDetails) {
6057
Intent intent = new Intent(context, MessageDetailsActivity.class);
61-
intent.putExtra(EXTRA_KEY_EMAIL, email);
6258
intent.putExtra(EXTRA_KEY_FOLDER, folder);
63-
intent.putExtra(EXTRA_KEY_UID, uid);
59+
intent.putExtra(EXTRA_KEY_GENERAL_MESSAGE_DETAILS, generalMessageDetails);
6460
return intent;
6561
}
6662

@@ -78,15 +74,15 @@ public int getContentViewResourceId() {
7874
public void onCreate(Bundle savedInstanceState) {
7975
super.onCreate(savedInstanceState);
8076
if (getIntent() != null) {
81-
this.email = getIntent().getStringExtra(EXTRA_KEY_EMAIL);
82-
this.folder = getIntent().getParcelableExtra((EXTRA_KEY_FOLDER));
83-
this.uid = getIntent().getIntExtra(EXTRA_KEY_UID, -1);
77+
this.folder = getIntent().getParcelableExtra(EXTRA_KEY_FOLDER);
78+
this.generalMessageDetails = getIntent().getParcelableExtra(EXTRA_KEY_GENERAL_MESSAGE_DETAILS);
8479
}
8580

8681
initViews();
8782

88-
getSupportLoaderManager().initLoader(
89-
R.id.loader_id_load_message_info_from_database, null, this);
83+
if (TextUtils.isEmpty(generalMessageDetails.getRawMessageWithoutAttachments())) {
84+
getSupportLoaderManager().initLoader(R.id.loader_id_load_message_info_from_database, null, this);
85+
}
9086
}
9187

9288
@Override
@@ -106,10 +102,10 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
106102
return new CursorLoader(this, new MessageDaoSource().
107103
getBaseContentUri(),
108104
null,
109-
MessageDaoSource.COL_EMAIL + "= ? AND "
110-
+ MessageDaoSource.COL_FOLDER + " = ? AND "
105+
MessageDaoSource.COL_EMAIL + "= ? AND " + MessageDaoSource.COL_FOLDER + " = ? AND "
111106
+ MessageDaoSource.COL_UID + " = ? ",
112-
new String[]{email, folder.getFolderAlias(), String.valueOf(uid)}, null);
107+
new String[]{generalMessageDetails.getEmail(), folder.getFolderAlias(),
108+
String.valueOf(generalMessageDetails.getUid())}, null);
113109

114110
default:
115111
return null;
@@ -120,30 +116,29 @@ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
120116
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
121117
switch (loader.getId()) {
122118
case R.id.loader_id_load_message_info_from_database:
123-
if (generalMessageDetails == null) {
119+
if (TextUtils.isEmpty(generalMessageDetails.getRawMessageWithoutAttachments())) {
124120
if (cursor != null && cursor.moveToFirst()) {
125121
if (TextUtils.isEmpty(cursor.getString(cursor.getColumnIndex
126-
(MessageDaoSource
127-
.COL_RAW_MESSAGE_WITHOUT_ATTACHMENTS)))) {
128-
if (isBound) {
122+
(MessageDaoSource.COL_RAW_MESSAGE_WITHOUT_ATTACHMENTS)))) {
123+
if (isBound && !isRequestMessageDetailsStarted) {
124+
this.isRequestMessageDetailsStarted = true;
129125
loadMessageDetails(R.id.syns_request_code_load_message_details,
130-
folder,
131-
uid);
126+
folder, generalMessageDetails.getUid());
132127
} else {
133-
isNeedToReceiveMessageDetails = true;
128+
isNeedToReceiveMessageBody = true;
134129
}
135130
} else {
136-
isNeedToReceiveMessageDetails = false;
131+
isNeedToReceiveMessageBody = false;
137132
MessageDaoSource messageDaoSource = new MessageDaoSource();
138-
messageDaoSource.setSeenStatusForLocalMessage(this, email, folder
139-
.getFolderAlias(), uid);
133+
messageDaoSource.setSeenStatusForLocalMessage(this, generalMessageDetails.getEmail(),
134+
folder.getFolderAlias(), generalMessageDetails.getUid());
140135
generalMessageDetails = messageDaoSource.getMessageInfo(cursor);
141-
showMessageDetails(generalMessageDetails, folder);
136+
showMessageBody(generalMessageDetails);
142137
setResult(MessageDetailsActivity.RESULT_CODE_UPDATE_LIST, null);
143138
}
144-
} else
145-
throw new IllegalArgumentException("The message not exists in the " +
146-
"database");
139+
} else {
140+
throw new IllegalArgumentException("The message not exists in the database");
141+
}
147142
}
148143
break;
149144
}
@@ -160,23 +155,22 @@ public void onLoaderReset(Loader<Cursor> loader) {
160155
@Override
161156
public void onServiceConnected(ComponentName name, IBinder service) {
162157
super.onServiceConnected(name, service);
163-
if (isNeedToReceiveMessageDetails && generalMessageDetails == null) {
164-
loadMessageDetails(R.id.syns_request_code_load_message_details, folder,
165-
uid);
158+
if (isNeedToReceiveMessageBody) {
159+
loadMessageDetails(R.id.syns_request_code_load_message_details, folder, generalMessageDetails.getUid());
166160
}
167161
}
168162

169163
@Override
170164
public void onReplyFromSyncServiceReceived(int requestCode, int resultCode, Object obj) {
171165
switch (requestCode) {
172166
case R.id.syns_request_code_load_message_details:
167+
isRequestMessageDetailsStarted = false;
173168
switch (resultCode) {
174169
case EmailSyncService.REPLY_RESULT_CODE_ACTION_OK:
175-
new MessageDaoSource().setSeenStatusForLocalMessage(this, email, folder
176-
.getFolderAlias(), uid);
170+
new MessageDaoSource().setSeenStatusForLocalMessage(this, generalMessageDetails.getEmail(),
171+
folder.getFolderAlias(), generalMessageDetails.getUid());
177172
setResult(MessageDetailsActivity.RESULT_CODE_UPDATE_LIST, null);
178-
getSupportLoaderManager().restartLoader(R.id
179-
.loader_id_load_message_info_from_database,
173+
getSupportLoaderManager().restartLoader(R.id.loader_id_load_message_info_from_database,
180174
null, this);
181175
break;
182176

@@ -210,8 +204,8 @@ public void onReplyFromSyncServiceReceived(int requestCode, int resultCode, Obje
210204

211205
Toast.makeText(this, toastMessageResourcesId, Toast.LENGTH_SHORT).show();
212206

213-
new MessageDaoSource().deleteMessageFromFolder(this, email,
214-
folder.getFolderAlias(), uid);
207+
new MessageDaoSource().deleteMessageFromFolder(this, generalMessageDetails.getEmail(),
208+
folder.getFolderAlias(), generalMessageDetails.getUid());
215209
setResult(MessageDetailsActivity.RESULT_CODE_UPDATE_LIST, null);
216210
finish();
217211
break;
@@ -227,6 +221,11 @@ public void onReplyFromSyncServiceReceived(int requestCode, int resultCode, Obje
227221
@Override
228222
public void onErrorFromSyncServiceReceived(int requestCode, int errorType, Exception e) {
229223
switch (requestCode) {
224+
case R.id.syns_request_code_load_message_details:
225+
isRequestMessageDetailsStarted = false;
226+
notifyMessageDetailsFragmentAboutError(requestCode, errorType);
227+
break;
228+
230229
default:
231230
notifyMessageDetailsFragmentAboutError(requestCode, errorType);
232231
break;
@@ -236,29 +235,25 @@ public void onErrorFromSyncServiceReceived(int requestCode, int errorType, Excep
236235
@Override
237236
public void onArchiveMessageClicked() {
238237
isBackEnable = false;
239-
FoldersManager foldersManager = FoldersManager.fromDatabase(this, email);
238+
FoldersManager foldersManager = FoldersManager.fromDatabase(this, generalMessageDetails.getEmail());
240239
moveMessage(R.id.syns_request_archive_message, folder,
241-
foldersManager.getFolderArchive(), uid);
240+
foldersManager.getFolderArchive(), generalMessageDetails.getUid());
242241
}
243242

244243
@Override
245244
public void onDeleteMessageClicked() {
246245
isBackEnable = false;
247-
FoldersManager foldersManager = FoldersManager.fromDatabase(this, email);
246+
FoldersManager foldersManager = FoldersManager.fromDatabase(this, generalMessageDetails.getEmail());
248247
moveMessage(R.id.syns_request_delete_message, folder,
249-
foldersManager.getFolderTrash(), uid);
248+
foldersManager.getFolderTrash(), generalMessageDetails.getUid());
250249
}
251250

252251
@Override
253252
public void onMoveMessageToInboxClicked() {
254253
isBackEnable = false;
255-
FoldersManager foldersManager = FoldersManager.fromDatabase(this, email);
254+
FoldersManager foldersManager = FoldersManager.fromDatabase(this, generalMessageDetails.getEmail());
256255
moveMessage(R.id.syns_request_move_message_to_inbox, folder,
257-
foldersManager.getFolderInbox(), uid);
258-
}
259-
260-
public String getEmail() {
261-
return email;
256+
foldersManager.getFolderInbox(), generalMessageDetails.getUid());
262257
}
263258

264259
private void notifyUserAboutError(int requestCode) {
@@ -286,13 +281,12 @@ private void notifyMessageDetailsFragmentAboutError(int requestCode, int errorTy
286281
}
287282
}
288283

289-
private void showMessageDetails(GeneralMessageDetails generalMessageDetails, Folder folder) {
290-
MessageDetailsFragment messageDetailsFragment = (MessageDetailsFragment)
291-
getSupportFragmentManager()
292-
.findFragmentById(R.id.messageDetailsFragment);
284+
private void showMessageBody(GeneralMessageDetails generalMessageDetails) {
285+
MessageDetailsFragment messageDetailsFragment = (MessageDetailsFragment) getSupportFragmentManager()
286+
.findFragmentById(R.id.messageDetailsFragment);
293287

294288
if (messageDetailsFragment != null) {
295-
messageDetailsFragment.showMessageDetails(generalMessageDetails, folder);
289+
messageDetailsFragment.showMessageBody(generalMessageDetails);
296290
}
297291
}
298292

FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/EmailListFragment.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import com.flowcrypt.email.R;
2828
import com.flowcrypt.email.api.email.Folder;
29+
import com.flowcrypt.email.api.email.model.GeneralMessageDetails;
2930
import com.flowcrypt.email.database.dao.source.imap.AttachmentDaoSource;
3031
import com.flowcrypt.email.database.dao.source.imap.MessageDaoSource;
3132
import com.flowcrypt.email.ui.activity.MessageDetailsActivity;
@@ -225,17 +226,13 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
225226
Cursor cursor = (Cursor) parent.getAdapter().getItem(position);
226227
cursor.moveToPosition(position);
227228

228-
startActivityForResult(
229-
MessageDetailsActivity.getIntent(
230-
getContext(),
231-
cursor.getString(cursor.getColumnIndex(MessageDaoSource.COL_EMAIL)),
232-
onManageEmailsListener.getCurrentFolder(),
233-
cursor.getInt(cursor.getColumnIndex(MessageDaoSource.COL_UID))),
229+
GeneralMessageDetails generalMessageDetails = new MessageDaoSource().getMessageInfo(cursor);
230+
231+
startActivityForResult(MessageDetailsActivity.getIntent(getContext(),
232+
onManageEmailsListener.getCurrentFolder(), generalMessageDetails),
234233
REQUEST_CODE_SHOW_MESSAGE_DETAILS);
235234
} else {
236-
showInfoSnackbar(getView(),
237-
getString(R.string.internet_connection_is_not_available), Snackbar
238-
.LENGTH_LONG);
235+
showInfoSnackbar(getView(), getString(R.string.internet_connection_is_not_available), Snackbar.LENGTH_LONG);
239236
}
240237
}
241238

0 commit comments

Comments
 (0)