inline attachment handling
Allow the provider to specify the real base url that should
be used for relative urls.
Also allow the provider to specify a cookie that should be used.
Bug: 6951268
Change-Id: I6f5ecf69b262b6c877eecbd1944aa03c46c85382
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index 87b6826..d656d08 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -29,6 +29,7 @@
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Browser;
@@ -40,6 +41,8 @@
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ConsoleMessage;
+import android.webkit.CookieManager;
+import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
@@ -240,6 +243,13 @@
mWebView.setOnCreateContextMenuListener(new WebViewContextMenu(activity));
showConversation();
+
+ if (mConversation.conversationBaseUri != null &&
+ !TextUtils.isEmpty(mConversation.conversationCookie)) {
+ // Set the cookie for this base url
+ new SetCookieTask(mConversation.conversationBaseUri.toString(),
+ mConversation.conversationCookie).execute();
+ }
}
@Override
@@ -251,10 +261,9 @@
mAccount = args.getParcelable(ARG_ACCOUNT);
mConversation = args.getParcelable(ARG_CONVERSATION);
mFolder = args.getParcelable(ARG_FOLDER);
- // If the provider has specified a base uri to be used, use that one.
- mBaseUri = mConversation.conversationBaseUri != null ?
- mConversation.conversationBaseUri.toString() :
- "x-thread://" + mAccount.name + "/" + mConversation.id;
+ // Since the uri specified in the conversation base uri may not be unique, we specify a
+ // base uri that us guaranteed to be unique for this conversation.
+ mBaseUri = "x-thread://" + mAccount.name + "/" + mConversation.id;
// Not really, we just want to get a crack to store a reference to the change_folder item
setHasOptionsMenu(true);
@@ -600,7 +609,11 @@
mWebView.getSettings().setBlockNetworkImage(!allowNetworkImages);
- return mTemplates.endConversation(mBaseUri, 320, mWebView.getViewportWidth());
+ // If the conversation has specified a base uri, use it here, use mBaseUri
+ final String conversationBaseUri = mConversation.conversationBaseUri != null ?
+ mConversation.conversationBaseUri.toString() : mBaseUri;
+ return mTemplates.endConversation(mBaseUri, conversationBaseUri, 320,
+ mWebView.getViewportWidth());
}
private void renderSuperCollapsedBlock(int start, int end) {
@@ -1172,4 +1185,22 @@
return mAccount.settings;
}
+ private class SetCookieTask extends AsyncTask<Void, Void, Void> {
+ final String mUri;
+ final String mCookie;
+
+ SetCookieTask(String uri, String cookie) {
+ mUri = uri;
+ mCookie = cookie;
+ }
+
+ @Override
+ public Void doInBackground(Void... args) {
+ final CookieSyncManager csm =
+ CookieSyncManager.createInstance(mContext);
+ CookieManager.getInstance().setCookie(mUri, mCookie);
+ csm.sync();
+ return null;
+ }
+ }
}