@@ -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
0 commit comments