diff options
| -rw-r--r-- | core/java/android/backup/BackupManager.java | 49 | ||||
| -rw-r--r-- | core/java/android/provider/Settings.java | 6 | ||||
| -rwxr-xr-x | core/java/android/speech/tts/TextToSpeech.java | 83 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 9 | ||||
| -rw-r--r-- | core/res/res/drawable/rate_star_big_half.png | bin | 1224 -> 818 bytes | |||
| -rw-r--r-- | core/res/res/drawable/rate_star_big_off.png | bin | 482 -> 527 bytes | |||
| -rw-r--r-- | core/res/res/drawable/rate_star_big_on.png | bin | 2017 -> 992 bytes | |||
| -rw-r--r-- | libs/audioflinger/AudioBufferProvider.h | 2 | ||||
| -rwxr-xr-x | packages/TtsService/src/android/tts/TtsService.java | 10 | ||||
| -rw-r--r-- | services/java/com/android/server/BackupManagerService.java | 13 | ||||
| -rw-r--r-- | services/java/com/android/server/LocationManagerService.java | 16 | ||||
| -rw-r--r-- | services/java/com/android/server/PackageManagerBackupAgent.java | 7 | ||||
| -rw-r--r-- | services/java/com/android/server/WifiService.java | 6 | ||||
| -rw-r--r-- | tests/backup/src/com/android/backuptest/BackupTestActivity.java | 14 |
14 files changed, 137 insertions, 78 deletions
diff --git a/core/java/android/backup/BackupManager.java b/core/java/android/backup/BackupManager.java index 5b4ac0da305f..34a1a0c8f2f4 100644 --- a/core/java/android/backup/BackupManager.java +++ b/core/java/android/backup/BackupManager.java @@ -19,6 +19,7 @@ package android.backup; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.Log; /** * BackupManager is the interface to the system's backup service. @@ -39,14 +40,17 @@ import android.os.ServiceManager; * @hide pending API solidification */ public class BackupManager { + private static final String TAG = "BackupManager"; + private Context mContext; - private IBackupManager mService; + private static IBackupManager sService; - /** - * Defined backup transports understood by {@link IBackupManager.selectBackupTransport}. - */ - public static final int TRANSPORT_LOCAL = 1; - public static final int TRANSPORT_GOOGLE = 2; + private static void checkServiceBinder() { + if (sService == null) { + sService = IBackupManager.Stub.asInterface( + ServiceManager.getService(Context.BACKUP_SERVICE)); + } + } /** * Constructs a BackupManager object through which the application can @@ -58,8 +62,6 @@ public class BackupManager { */ public BackupManager(Context context) { mContext = context; - mService = IBackupManager.Stub.asInterface( - ServiceManager.getService(Context.BACKUP_SERVICE)); } /** @@ -68,10 +70,31 @@ public class BackupManager { * {@link android.app.BackupAgent} subclass will be scheduled when you call this method. */ public void dataChanged() { - if (mService != null) { + checkServiceBinder(); + if (sService != null) { + try { + sService.dataChanged(mContext.getPackageName()); + } catch (RemoteException e) { + Log.d(TAG, "dataChanged() couldn't connect"); + } + } + } + + /** + * Convenience method for callers who need to indicate that some other package + * needs a backup pass. This can be relevant in the case of groups of packages + * that share a uid, for example. + * + * This method requires that the application hold the "android.permission.BACKUP" + * permission if the package named in the argument is not the caller's own. + */ + public static void dataChanged(String packageName) { + checkServiceBinder(); + if (sService != null) { try { - mService.dataChanged(mContext.getPackageName()); + sService.dataChanged(packageName); } catch (RemoteException e) { + Log.d(TAG, "dataChanged(pkg) couldn't connect"); } } } @@ -85,10 +108,12 @@ public class BackupManager { */ public IRestoreSession beginRestoreSession(String transport) { IRestoreSession binder = null; - if (mService != null) { + checkServiceBinder(); + if (sService != null) { try { - binder = mService.beginRestoreSession(transport); + binder = sService.beginRestoreSession(transport); } catch (RemoteException e) { + Log.d(TAG, "beginRestoreSession() couldn't connect"); } } return binder; diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 7f63bff67da5..0d27e1ec1ec4 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2671,6 +2671,12 @@ public final class Settings { public static final String GMAIL_DISCARD_ERROR_UPHILL_OP = "gmail_discard_error_uphill_op"; /** + * Controls how many attempts Gmail will try to upload an uphill operations before it + * abandons the operation. Defaults to 20. + */ + public static final String GMAIL_NUM_RETRY_UPHILL_OP = "gmail_discard_error_uphill_op"; + + /** * the transcoder URL for mobile devices. */ public static final String TRANSCODER_URL = "mobile_transcoder_url"; diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java index 61e182a678fe..00667f4c1f0d 100755 --- a/core/java/android/speech/tts/TextToSpeech.java +++ b/core/java/android/speech/tts/TextToSpeech.java @@ -342,14 +342,14 @@ public class TextToSpeech { public int speak(String text, int queueMode, HashMap<String,String> params) { synchronized (mStartLock) { + int result = TTS_ERROR; Log.i("TTS received: ", text); if (!mStarted) { - return TTS_ERROR; + return result; } try { // TODO support extra parameters, passing cache of current parameters for the moment - mITts.speak(text, queueMode, mCachedParams); - return TTS_SUCCESS; + result = mITts.speak(text, queueMode, mCachedParams); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; @@ -362,8 +362,9 @@ public class TextToSpeech { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -383,13 +384,13 @@ public class TextToSpeech { public int playEarcon(String earcon, int queueMode, HashMap<String,String> params) { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_ERROR; + return result; } try { // TODO support extra parameters, passing null for the moment - mITts.playEarcon(earcon, queueMode, null); - return TTS_SUCCESS; + result = mITts.playEarcon(earcon, queueMode, null); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; @@ -402,8 +403,9 @@ public class TextToSpeech { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -420,13 +422,13 @@ public class TextToSpeech { */ public int playSilence(long durationInMs, int queueMode) { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_ERROR; + return result; } try { // TODO support extra parameters, passing cache of current parameters for the moment - mITts.playSilence(durationInMs, queueMode, mCachedParams); - return TTS_SUCCESS; + result = mITts.playSilence(durationInMs, queueMode, mCachedParams); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; @@ -439,8 +441,9 @@ public class TextToSpeech { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -482,12 +485,12 @@ public class TextToSpeech { */ public int stop() { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_ERROR; + return result; } try { - mITts.stop(); - return TTS_SUCCESS; + result = mITts.stop(); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; @@ -500,8 +503,9 @@ public class TextToSpeech { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -523,22 +527,23 @@ public class TextToSpeech { */ public int setSpeechRate(float speechRate) { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_SUCCESS; + return result; } try { if (speechRate > 0) { mCachedRate = (int)(speechRate*100); updateCachedParamArray(); - mITts.setSpeechRate(mCachedRate); - return TTS_SUCCESS; + result = mITts.setSpeechRate(mCachedRate); } } catch (RemoteException e) { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -560,20 +565,21 @@ public class TextToSpeech { */ public int setPitch(float pitch) { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_ERROR; + return result; } try { if (pitch > 0) { - mITts.setPitch((int)(pitch*100)); - return TTS_SUCCESS; + result = mITts.setPitch((int)(pitch*100)); } } catch (RemoteException e) { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -588,26 +594,27 @@ public class TextToSpeech { * @param loc * The locale describing the language to be used. * - * @return Code indicating success or failure. See TTS_ERROR and TTS_SUCCESS. + * @return Code indicating the support status for the locale. See the TTS_LANG_ codes. */ public int setLanguage(Locale loc) { synchronized (mStartLock) { + int result = TTS_LANG_NOT_SUPPORTED; if (!mStarted) { - return TTS_ERROR; + return result; } try { mCachedLang = loc.getISO3Language(); mCachedCountry = loc.getISO3Country(); mCachedVariant = loc.getVariant(); updateCachedParamArray(); - mITts.setLanguage(mCachedLang, mCachedCountry, mCachedVariant); - return TTS_SUCCESS; + result = mITts.setLanguage(mCachedLang, mCachedCountry, mCachedVariant); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } @@ -649,18 +656,20 @@ public class TextToSpeech { */ public int isLanguageAvailable(Locale loc) { synchronized (mStartLock) { + int result = TTS_LANG_NOT_SUPPORTED; if (!mStarted) { - return TTS_LANG_NOT_SUPPORTED; + return result; } try { - return mITts.isLanguageAvailable(loc.getISO3Language(), loc.getISO3Country(), - loc.getVariant()); + result = mITts.isLanguageAvailable(loc.getISO3Language(), + loc.getISO3Country(), loc.getVariant()); } catch (RemoteException e) { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_LANG_NOT_SUPPORTED; } } @@ -681,13 +690,14 @@ public class TextToSpeech { public int synthesizeToFile(String text, HashMap<String,String> params, String filename) { synchronized (mStartLock) { + int result = TTS_ERROR; if (!mStarted) { - return TTS_ERROR; + return result; } try { // TODO support extra parameters, passing null for the moment if (mITts.synthesizeToFile(text, null, filename)){ - return TTS_SUCCESS; + result = TTS_SUCCESS; } } catch (RemoteException e) { // TTS died; restart it. @@ -701,8 +711,9 @@ public class TextToSpeech { // TTS died; restart it. mStarted = false; initTts(); + } finally { + return result; } - return TTS_ERROR; } } diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 65457c5e9de8..6f6e22477d25 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -546,13 +546,16 @@ public final class ViewRoot extends Handler implements ViewParent, if (DEBUG_DRAW) Log.v(TAG, "Invalidate child: " + dirty); if (mCurScrollY != 0 || mTranslator != null) { mTempRect.set(dirty); + dirty = mTempRect; if (mCurScrollY != 0) { - mTempRect.offset(0, -mCurScrollY); + dirty.offset(0, -mCurScrollY); } if (mTranslator != null) { - mTranslator.translateRectInAppWindowToScreen(mTempRect); + mTranslator.translateRectInAppWindowToScreen(dirty); + } + if (mAttachInfo.mScalingRequired) { + dirty.inset(-1, -1); } - dirty = mTempRect; } mDirty.union(dirty); if (!mWillDrawSoon) { diff --git a/core/res/res/drawable/rate_star_big_half.png b/core/res/res/drawable/rate_star_big_half.png Binary files differindex e73ca799b398..9762292a40a6 100644 --- a/core/res/res/drawable/rate_star_big_half.png +++ b/core/res/res/drawable/rate_star_big_half.png diff --git a/core/res/res/drawable/rate_star_big_off.png b/core/res/res/drawable/rate_star_big_off.png Binary files differindex b4dfa9dd3ae1..6b5039fc73a4 100644 --- a/core/res/res/drawable/rate_star_big_off.png +++ b/core/res/res/drawable/rate_star_big_off.png diff --git a/core/res/res/drawable/rate_star_big_on.png b/core/res/res/drawable/rate_star_big_on.png Binary files differindex 7442c93c411c..a972db27486b 100644 --- a/core/res/res/drawable/rate_star_big_on.png +++ b/core/res/res/drawable/rate_star_big_on.png diff --git a/libs/audioflinger/AudioBufferProvider.h b/libs/audioflinger/AudioBufferProvider.h index 1a467c74429d..81c5c3959930 100644 --- a/libs/audioflinger/AudioBufferProvider.h +++ b/libs/audioflinger/AudioBufferProvider.h @@ -36,6 +36,8 @@ public: }; size_t frameCount; }; + + virtual ~AudioBufferProvider() {} virtual status_t getNextBuffer(Buffer* buffer) = 0; virtual void releaseBuffer(Buffer* buffer) = 0; diff --git a/packages/TtsService/src/android/tts/TtsService.java b/packages/TtsService/src/android/tts/TtsService.java index 0bed72bd7ba2..10f4d6ecfaca 100755 --- a/packages/TtsService/src/android/tts/TtsService.java +++ b/packages/TtsService/src/android/tts/TtsService.java @@ -36,6 +36,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.Locale; import java.util.concurrent.locks.ReentrantLock; /** @@ -183,7 +184,8 @@ public class TtsService extends Service implements OnCompletionListener { String defaultLang = android.provider.Settings.Secure.getString(mResolver, android.provider.Settings.Secure.TTS_DEFAULT_LANG); if (defaultLang == null) { - return TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_LANG; + // no setting found, use the current Locale to determine the default language + return Locale.getDefault().getISO3Language(); } else { return defaultLang; } @@ -194,7 +196,8 @@ public class TtsService extends Service implements OnCompletionListener { String defaultCountry = android.provider.Settings.Secure.getString(mResolver, android.provider.Settings.Secure.TTS_DEFAULT_COUNTRY); if (defaultCountry == null) { - return TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_COUNTRY; + // no setting found, use the current Locale to determine the default country + return Locale.getDefault().getISO3Country(); } else { return defaultCountry; } @@ -205,7 +208,8 @@ public class TtsService extends Service implements OnCompletionListener { String defaultVar = android.provider.Settings.Secure.getString(mResolver, android.provider.Settings.Secure.TTS_DEFAULT_VARIANT); if (defaultVar == null) { - return TextToSpeech.Engine.FALLBACK_TTS_DEFAULT_VARIANT; + // no setting found, use the current Locale to determine the default variant + return Locale.getDefault().getVariant(); } else { return defaultVar; } diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index 2ae9fc506c72..1fd36d28a6cc 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -985,8 +985,7 @@ class BackupManagerService extends IBackupManager.Stub { // Verify that the backup set includes metadata. If not, we can't do // signature/version verification etc, so we simply do not proceed with // the restore operation. - Metadata pmMeta = pmAgent.getRestoredMetadata(packageName); - if (pmMeta == null) { + if (!pmAgent.hasMetadata()) { Log.i(TAG, "No restore metadata available, so not restoring settings"); return; } @@ -1213,10 +1212,12 @@ class BackupManagerService extends IBackupManager.Stub { // Add the caller to the set of pending backups. If there is // one already there, then overwrite it, but no harm done. BackupRequest req = new BackupRequest(app, false); - mPendingBackups.put(app, req); - - // Journal this request in case of crash - writeToJournalLocked(packageName); + if (mPendingBackups.put(app, req) == null) { + // Journal this request in case of crash. The put() + // operation returned null when this package was not already + // in the set; we want to avoid touching the disk redundantly. + writeToJournalLocked(packageName); + } } } diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index 0f5b3fd77e81..fab97b1e1574 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -648,14 +648,14 @@ public class LocationManagerService extends ILocationManager.Stub implements Run private void checkPermissionsSafe(String provider) { if (LocationManager.GPS_PROVIDER.equals(provider) - && (mContext.checkCallingPermission(ACCESS_FINE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { throw new SecurityException("Requires ACCESS_FINE_LOCATION permission"); } if (LocationManager.NETWORK_PROVIDER.equals(provider) - && (mContext.checkCallingPermission(ACCESS_FINE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) - && (mContext.checkCallingPermission(ACCESS_COARSE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { throw new SecurityException( "Requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission"); @@ -664,14 +664,14 @@ public class LocationManagerService extends ILocationManager.Stub implements Run private boolean isAllowedProviderSafe(String provider) { if (LocationManager.GPS_PROVIDER.equals(provider) - && (mContext.checkCallingPermission(ACCESS_FINE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { return false; } if (LocationManager.NETWORK_PROVIDER.equals(provider) - && (mContext.checkCallingPermission(ACCESS_FINE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) - && (mContext.checkCallingPermission(ACCESS_COARSE_LOCATION) + && (mContext.checkCallingOrSelfPermission(ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { return false; } @@ -1075,7 +1075,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run if (mGpsStatusProvider == null) { return false; } - if (mContext.checkCallingPermission(ACCESS_FINE_LOCATION) != + if (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires ACCESS_FINE_LOCATION permission"); } @@ -1103,7 +1103,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run // first check for permission to the provider checkPermissionsSafe(provider); // and check for ACCESS_LOCATION_EXTRA_COMMANDS - if ((mContext.checkCallingPermission(ACCESS_LOCATION_EXTRA_COMMANDS) + if ((mContext.checkCallingOrSelfPermission(ACCESS_LOCATION_EXTRA_COMMANDS) != PackageManager.PERMISSION_GRANTED)) { throw new SecurityException("Requires ACCESS_LOCATION_EXTRA_COMMANDS permission"); } diff --git a/services/java/com/android/server/PackageManagerBackupAgent.java b/services/java/com/android/server/PackageManagerBackupAgent.java index a1b4c26833de..786f42305c96 100644 --- a/services/java/com/android/server/PackageManagerBackupAgent.java +++ b/services/java/com/android/server/PackageManagerBackupAgent.java @@ -67,6 +67,7 @@ public class PackageManagerBackupAgent extends BackupAgent { private final HashSet<String> mExisting = new HashSet<String>(); private int mStoredSdkVersion; private String mStoredIncrementalVersion; + private boolean mHasMetadata; public class Metadata { public int versionCode; @@ -84,6 +85,11 @@ public class PackageManagerBackupAgent extends BackupAgent { mPackageManager = packageMgr; mAllPackages = packages; mRestoredSignatures = null; + mHasMetadata = false; + } + + public boolean hasMetadata() { + return mHasMetadata; } public Metadata getRestoredMetadata(String packageName) { @@ -259,6 +265,7 @@ public class PackageManagerBackupAgent extends BackupAgent { } mStoredSdkVersion = storedSdkVersion; mStoredIncrementalVersion = in.readUTF(); + mHasMetadata = true; // !!! TODO: remove this debugging output if (DEBUG) { Log.i(TAG, "Restore set version " + storedSystemVersion diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index e2aee4217255..a940af385f29 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -38,6 +38,7 @@ import android.net.wifi.WifiNative; import android.net.wifi.WifiStateTracker; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; +import android.net.wifi.SupplicantState; import android.net.NetworkStateTracker; import android.net.DhcpInfo; import android.os.Binder; @@ -1569,8 +1570,9 @@ public class WifiService extends IWifiManager.Stub { * or plugged in to AC). */ if (!shouldWifiStayAwake(stayAwakeConditions, mPluggedType)) { - if (!mWifiStateTracker.hasIpAddress()) { - // do not keep Wifi awake when screen is off if Wifi is not fully active + WifiInfo info = mWifiStateTracker.requestConnectionInfo(); + if (info.getSupplicantState() != SupplicantState.COMPLETED) { + // do not keep Wifi awake when screen is off if Wifi is not associated mDeviceIdle = true; updateWifiState(); } else { diff --git a/tests/backup/src/com/android/backuptest/BackupTestActivity.java b/tests/backup/src/com/android/backuptest/BackupTestActivity.java index 7f30c916cec2..afbc70304ea4 100644 --- a/tests/backup/src/com/android/backuptest/BackupTestActivity.java +++ b/tests/backup/src/com/android/backuptest/BackupTestActivity.java @@ -52,6 +52,8 @@ public class BackupTestActivity extends ListActivity static final String PREF_KEY = "pref"; static final String FILE_NAME = "file.txt"; + BackupManager sBm = new BackupManager(this); + Test[] mTests = new Test[] { new Test("Show File") { void run() { @@ -85,8 +87,7 @@ public class BackupTestActivity extends ListActivity output.close(); } } - BackupManager bm = new BackupManager(BackupTestActivity.this); - bm.dataChanged(); + sBm.dataChanged(); } }, new Test("Clear File") { @@ -100,14 +101,12 @@ public class BackupTestActivity extends ListActivity output.close(); } } - BackupManager bm = new BackupManager(BackupTestActivity.this); - bm.dataChanged(); + sBm.dataChanged(); } }, new Test("Poke") { void run() { - BackupManager bm = new BackupManager(BackupTestActivity.this); - bm.dataChanged(); + sBm.dataChanged(); } }, new Test("Show Shared Pref") { @@ -126,8 +125,7 @@ public class BackupTestActivity extends ListActivity SharedPreferences.Editor editor = prefs.edit(); editor.putInt(PREF_KEY, val+1); editor.commit(); - BackupManager bm = new BackupManager(BackupTestActivity.this); - bm.dataChanged(); + sBm.dataChanged(); } }, new Test("Backup Helpers") { |