summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Cerqueira <ricardo@cyngn.com>2015-03-10 12:28:07 +0000
committerRicardo Cerqueira <ricardo@cyngn.com>2015-03-10 12:28:07 +0000
commit585a4391159315ba57e32aaeb9d39d8fb8142c27 (patch)
treed261e5db3bd168dc666fcd790f346da7b7cff7df
parent51fc3fae57d61209e965a382c6f2057298fc80c1 (diff)
parent96d67800c827efb5c08adaa32e221aaae53d02a4 (diff)
downloadandroid_packages_providers_CalendarProvider-585a4391159315ba57e32aaeb9d39d8fb8142c27.tar.gz
android_packages_providers_CalendarProvider-585a4391159315ba57e32aaeb9d39d8fb8142c27.tar.bz2
android_packages_providers_CalendarProvider-585a4391159315ba57e32aaeb9d39d8fb8142c27.zip
Merge tag 'android-5.1.0_r1' into HEADstaging/cm-12.1stable/cm-12.1-YOG3C
Android 5.1.0 release 1
-rw-r--r--res/values-hi/strings.xml4
-rw-r--r--res/values-iw/strings.xml2
-rw-r--r--res/values-nl/strings.xml4
-rw-r--r--res/values-pt/strings.xml2
-rw-r--r--src/com/android/providers/calendar/CalendarProvider2.java9
-rw-r--r--src/com/android/providers/calendar/SQLiteContentProvider.java75
6 files changed, 78 insertions, 18 deletions
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0077472..0ad2972 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calendar_storage" msgid="5387668002987562770">"कैलेंडर मेमोरी"</string>
+ <string name="calendar_storage" msgid="5387668002987562770">"कैलेंडर संग्रहण"</string>
<string name="upgrade_msg" msgid="2792831029435070926">"कैलेंडर डेटाबेस अपग्रेड हो रहा है."</string>
<string name="calendar_default_name" msgid="6924293766625167275">"सामान्य"</string>
<string name="calendar_info" msgid="6687678621418059281">"कैलेंडर जानकारी"</string>
@@ -27,7 +27,7 @@
<string name="provider_label" msgid="2306513350843464739">"कैलेंडर"</string>
<string name="debug_tool_delete_button" msgid="5052706251268452090">"अभी हटाएं"</string>
<string name="debug_tool_start_button" msgid="5384780896342913563">"प्रारंभ करें"</string>
- <string name="debug_tool_message" msgid="4862486669932821937">"अब आप 1) अपने कैलेंडर डेटाबेस की प्रति SD कार्ड/USB मेमोरी पर बनाने वाले हैं जो किसी भी ऐप्स द्वारा पढ़ी जा सकती है और 2) उसे ईमेल करने वाले हैं. जैसे ही आप डिवाइस से सफलतापूर्वक इसकी प्रति बना लेते हैं या ईमेल प्राप्त हो जाती है तो इस प्रति को अवश्य हटा दें."</string>
+ <string name="debug_tool_message" msgid="4862486669932821937">"अब आप 1) अपने कैलेंडर डेटाबेस की प्रति SD कार्ड/USB संग्रहण पर बनाने वाले हैं जो किसी भी ऐप्स द्वारा पढ़ी जा सकती है और 2) उसे ईमेल करने वाले हैं. जैसे ही आप डिवाइस से सफलतापूर्वक इसकी प्रति बना लेते हैं या ईमेल प्राप्त हो जाती है तो इस प्रति को अवश्य हटा दें."</string>
<string name="debug_tool_email_sender_picker" msgid="2000311987477419397">"अपनी फ़ाइल भेजने के लिए कोई प्रोग्राम चुनें"</string>
<string name="debug_tool_email_subject" msgid="2403590332256471194">"कैलेंडर डेटाबेस अटैचमेंट"</string>
<string name="debug_tool_email_body" msgid="4835949635324134017">"यह अटैचमेंट मेरा कैलेंडर डेटाबेस है जिसमें मेरे सभी अपॉइंटमेंट और व्यक्तिगत जानकारी है. सावधानी से कार्य करें."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index e59efdc..df82632 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -27,7 +27,7 @@
<string name="provider_label" msgid="2306513350843464739">"יומן"</string>
<string name="debug_tool_delete_button" msgid="5052706251268452090">"מחק כעת"</string>
<string name="debug_tool_start_button" msgid="5384780896342913563">"התחל"</string>
- <string name="debug_tool_message" msgid="4862486669932821937">"‏אתה עומד 1) ליצור עותק של מסד הנתונים של לוח השנה בכרטיס SD/התקן USB, הניתן לקריאה על ידי כל יישום ו-2) לשלוח אותו באימייל. זכור למחוק עותק זה מהמכשיר מיד לאחר שהעתקת אותו בהצלחה או לאחר שהאימייל התקבל."</string>
+ <string name="debug_tool_message" msgid="4862486669932821937">"‏אתה עומד 1) ליצור עותק של מסד הנתונים של לוח השנה בכרטיס SD/התקן USB, הניתן לקריאה על ידי כל יישום ו-2) לשלוח אותו בדוא\"ל. זכור למחוק עותק זה מהמכשיר מיד לאחר שהעתקת אותו בהצלחה או לאחר שהדוא\"ל התקבל."</string>
<string name="debug_tool_email_sender_picker" msgid="2000311987477419397">"בחר תכנית לשליחת הקובץ"</string>
<string name="debug_tool_email_subject" msgid="2403590332256471194">"מצורף מסד נתונים של יומן"</string>
<string name="debug_tool_email_body" msgid="4835949635324134017">"מצורף מסד הנתונים של לוח השנה שלי, עם כל הפגישות והמידע האישי שלי. שמור עליו היטב."</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 114ce7e..4b94e84 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -27,8 +27,8 @@
<string name="provider_label" msgid="2306513350843464739">"Agenda"</string>
<string name="debug_tool_delete_button" msgid="5052706251268452090">"Nu verwijderen"</string>
<string name="debug_tool_start_button" msgid="5384780896342913563">"Starten"</string>
- <string name="debug_tool_message" msgid="4862486669932821937">"Je staat op het punt 1) een kopie van je agenda-database te maken op de SD-kaart/USB-opslag die kan worden gelezen via een app en 2) deze te e-mailen. Verwijder de kopie zodra je deze van het apparaat hebt gekopieerd of de e-mail is ontvangen."</string>
- <string name="debug_tool_email_sender_picker" msgid="2000311987477419397">"Selecteer een programma om je bestand te verzenden"</string>
+ <string name="debug_tool_message" msgid="4862486669932821937">"U staat op het punt 1) een kopie van uw agenda-database te maken op de SD-kaart/USB-opslag die kan worden gelezen via een app en 2) deze te e-mailen. Verwijder de kopie zodra u deze van het apparaat heeft gekopieerd of de e-mail is ontvangen."</string>
+ <string name="debug_tool_email_sender_picker" msgid="2000311987477419397">"Selecteer een programma om uw bestand te verzenden"</string>
<string name="debug_tool_email_subject" msgid="2403590332256471194">"Database voor Agenda bijgevoegd"</string>
<string name="debug_tool_email_body" msgid="4835949635324134017">"Bijgevoegd vindt u mijn Agenda-database met al mijn afspraken en persoonlijke gegevens. Gelieve hier zorgvuldig mee om te gaan."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 5cf22d5..a615a31 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -27,7 +27,7 @@
<string name="provider_label" msgid="2306513350843464739">"Agenda"</string>
<string name="debug_tool_delete_button" msgid="5052706251268452090">"Excluir agora"</string>
<string name="debug_tool_start_button" msgid="5384780896342913563">"Início"</string>
- <string name="debug_tool_message" msgid="4862486669932821937">"Você está prestes a 1) fazer uma cópia de seu banco de dados da agenda para o cartão SD/armazenamento USB, que pode ser lido por qualquer app e 2) enviá-lo por e-mail. Lembre-se de excluir o banco de dados após tê-lo copiado ou ter recebido o e-mail."</string>
+ <string name="debug_tool_message" msgid="4862486669932821937">"Você está prestes a 1) fazer uma cópia de seu banco de dados da agenda para o cartão SD/armazenamento USB, que pode ser lido por qualquer aplicativo e 2) enviá-lo por e-mail. Lembre-se de excluir o banco de dados após tê-lo copiado ou ter recebido o e-mail."</string>
<string name="debug_tool_email_sender_picker" msgid="2000311987477419397">"Selecione um programa para enviar seu arquivo"</string>
<string name="debug_tool_email_subject" msgid="2403590332256471194">"O banco de dados da agenda foi anexado"</string>
<string name="debug_tool_email_body" msgid="4835949635324134017">"O banco de dados da minha agenda está anexado, contendo todos os meus compromissos e informações pessoais. Use-o com cuidado."</string>
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index 9af4c77..5002177 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -834,11 +834,11 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
return queryInternal(uri, projection, selection, selectionArgs, sortOrder);
} finally {
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
}
}
@@ -5074,6 +5074,11 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
}
private String getCallingPackageName() {
+ if (getCachedCallingPackage() != null) {
+ // If the calling package is null, use the best available as a fallback.
+ return getCachedCallingPackage();
+ }
+
final PackageManager pm = getContext().getPackageManager();
final int uid = Binder.getCallingUid();
final String[] packages = pm.getPackagesForUid(uid);
diff --git a/src/com/android/providers/calendar/SQLiteContentProvider.java b/src/com/android/providers/calendar/SQLiteContentProvider.java
index ad0e028..01afb23 100644
--- a/src/com/android/providers/calendar/SQLiteContentProvider.java
+++ b/src/com/android/providers/calendar/SQLiteContentProvider.java
@@ -27,6 +27,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteTransactionListener;
import android.net.Uri;
import android.os.Binder;
+import android.os.Process;
import android.provider.CalendarContract;
import java.util.ArrayList;
@@ -93,7 +94,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
if (!applyingBatch) {
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
result = insertInTransaction(uri, values, isCallerSyncAdapter);
if (result != null) {
@@ -101,7 +102,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
}
mDb.setTransactionSuccessful();
} finally {
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
mDb.endTransaction();
}
@@ -121,7 +122,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
boolean isCallerSyncAdapter = getIsCallerSyncAdapter(uri);
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
for (int i = 0; i < numValues; i++) {
Uri result = insertInTransaction(uri, values[i], isCallerSyncAdapter);
@@ -132,7 +133,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
}
mDb.setTransactionSuccessful();
} finally {
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
mDb.endTransaction();
}
@@ -148,7 +149,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
if (!applyingBatch) {
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
count = updateInTransaction(uri, values, selection, selectionArgs,
isCallerSyncAdapter);
@@ -157,7 +158,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
}
mDb.setTransactionSuccessful();
} finally {
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
mDb.endTransaction();
}
@@ -181,7 +182,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
if (!applyingBatch) {
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
count = deleteInTransaction(uri, selection, selectionArgs, isCallerSyncAdapter);
if (count > 0) {
@@ -189,7 +190,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
}
mDb.setTransactionSuccessful();
} finally {
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
mDb.endTransaction();
}
@@ -222,7 +223,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
final boolean isCallerSyncAdapter = getIsCallerSyncAdapter(operations.get(0).getUri());
- final long identity = Binder.clearCallingIdentity();
+ final long identity = clearCallingIdentityInternal();
try {
mApplyingBatch.set(true);
final ContentProviderResult[] results = new ContentProviderResult[numOperations];
@@ -239,7 +240,7 @@ public abstract class SQLiteContentProvider extends ContentProvider
mApplyingBatch.set(false);
mDb.endTransaction();
onEndTransaction(!isCallerSyncAdapter);
- Binder.restoreCallingIdentity(identity);
+ restoreCallingIdentityInternal(identity);
}
}
@@ -274,4 +275,58 @@ public abstract class SQLiteContentProvider extends ContentProvider
* Some URI's are maintained locally so we should not request a sync for them
*/
protected abstract boolean shouldSyncFor(Uri uri);
+
+ /** The package to most recently query(), not including further internally recursive calls. */
+ private final ThreadLocal<String> mCallingPackage = new ThreadLocal<String>();
+
+ /**
+ * The calling Uid when a calling package is cached, so we know when the stack of any
+ * recursive calls to clearCallingIdentity and restoreCallingIdentity is complete.
+ */
+ private final ThreadLocal<Integer> mOriginalCallingUid = new ThreadLocal<Integer>();
+
+
+ protected String getCachedCallingPackage() {
+ return mCallingPackage.get();
+ }
+
+ /**
+ * Call {@link android.os.Binder#clearCallingIdentity()}, while caching the calling package
+ * name, so that it can be saved if this is part of an event mutation.
+ */
+ protected long clearCallingIdentityInternal() {
+ // Only set the calling package if the calling UID is not our own.
+ int uid = Process.myUid();
+ int callingUid = Binder.getCallingUid();
+ if (uid != callingUid) {
+ try {
+ mOriginalCallingUid.set(callingUid);
+ String callingPackage = getCallingPackage();
+ mCallingPackage.set(callingPackage);
+ } catch (SecurityException e) {
+ // If this exception is thrown, clearCallingIdentity has already been called, and
+ // calling package is already available.
+ }
+ }
+
+ return Binder.clearCallingIdentity();
+ }
+
+ /**
+ * Call {@link Binder#restoreCallingIdentity(long)}.
+ * </p>
+ * If this is the last restore on the stack of calls to
+ * {@link android.os.Binder#clearCallingIdentity()}, then the cached calling package will also
+ * be cleared.
+ * @param identity
+ */
+ protected void restoreCallingIdentityInternal(long identity) {
+ Binder.restoreCallingIdentity(identity);
+
+ int callingUid = Binder.getCallingUid();
+ if (mOriginalCallingUid.get() != null && mOriginalCallingUid.get() == callingUid) {
+ mCallingPackage.set(null);
+ mOriginalCallingUid.set(null);
+ }
+ }
}