1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-24 02:12:15 -05:00

Fix accessing the unread count using MessageProvider

Thanks to teslacoil for diagnosing the problem and coming up with a fix.
This commit is contained in:
cketti 2013-02-02 04:13:26 +01:00
parent 1ab04587a9
commit 58919c2912

View File

@ -13,6 +13,7 @@ import android.database.CursorWindow;
import android.database.DataSetObserver; import android.database.DataSetObserver;
import android.database.MatrixCursor; import android.database.MatrixCursor;
import android.net.Uri; import android.net.Uri;
import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
import android.provider.BaseColumns; import android.provider.BaseColumns;
import android.util.Log; import android.util.Log;
@ -460,10 +461,22 @@ public class MessageProvider extends ContentProvider {
int accountId = -1; int accountId = -1;
segments = uri.getPathSegments(); segments = uri.getPathSegments();
accountId = Integer.parseInt(segments.get(1)); accountId = Integer.parseInt(segments.get(1));
/*
* This method below calls Account.getStats() which uses EmailProvider to do its work.
* For this to work we need to clear the calling identity. Otherwise accessing
* EmailProvider will fail because it's not exported so third-party apps can't access it
* directly.
*/
long identityToken = Binder.clearCallingIdentity();
try {
return getAccountUnread(accountId); return getAccountUnread(accountId);
} finally {
Binder.restoreCallingIdentity(identityToken);
}
} }
public Cursor getAccountUnread(int accountNumber) { private Cursor getAccountUnread(int accountNumber) {
String[] projection = new String[] { "accountName", "unread" }; String[] projection = new String[] { "accountName", "unread" };
MatrixCursor ret = new MatrixCursor(projection); MatrixCursor ret = new MatrixCursor(projection);