Commit Graph

127 Commits

Author SHA1 Message Date
Fred Quintana
5d1a0c3933 Make the AbstractAccountAuthenticator return an error to the AccountManagerService
if it detects a RuntimeException.

Bug: 4726899
Change-Id: I5c478464cd0d426722257b2c5c75f964cd839ea6
2011-06-23 17:03:44 -07:00
Brian Carlstrom
46703b0995 Tolerate missing AccountManager resource, not just missing resource name
In addition to the primary change in the subject, also some minor cleanup of javadoc, typos, CloseGuard warning, etc found while working on a new AbstractAccountAuthenticator.

Change-Id: I73f3408773a43a0021a15f8d051fd3dbbdf898a5
2011-04-07 11:58:37 -07:00
repo sync
9ab66ff42f resolved conflicts for merge of 17f95e92 to honeycomb-plus-aosp
Change-Id: Ic82ab20e216d810f6372c833ac49c3856449c09c
2011-03-22 11:47:39 -07:00
Fred Quintana
eedb4df195 remove the code that clears the passwords when the sim
is replaced with a different one.

DO NOT MERGE
patched from honeycomb-mr1

Bug: 3404577
Change-Id: If11fc6be817ca1fa3dd5c085ff9696a1c5ea3a03
2011-03-07 11:11:44 -08:00
Fred Quintana
f9f240e3ad Fix a deadlock in AccountManagerService cause by different
paths of code getting the mCacheLock and DB locks in different
orders.

The philosophy I followed for this was to ensure that the
DatabaseHelper is only ever accessed from within a
synchronized(mCacheLock) block. I also renamed a bunch of
methods to make it easier to know if a given method should
be called from within this synchronized block.

Bug: 3404506
Change-Id: Ia48f95e77b77647d0717f70f1d8364da3719cc13
2011-03-01 11:23:19 -08:00
Costin Manolache
ef419b2e14 DO NOT MERGE
Backport (with modifications ) some changes from Honeycomb, that would allow authenticators to control caching and permissions.

This is backward compatible - both new and old authenticators will work with old and new framework,
but the functionality will only be present if both sides support it.

Change-Id: Ib2838cc2159f45264b38c844cd4c1d6f315d8064
2011-03-01 11:20:06 -08:00
Fred Quintana
082aa9cdc4 Merge "Make the AccountManagerService clear old grants when the package that the grants refer to is no longer installed." 2011-02-28 18:09:58 -08:00
Fred Quintana
c1a4e5dc41 Make the AccountManagerService clear old grants when the package
that the grants refer to is no longer installed.

Bug: 3425856
Change-Id: I6ec057415c8f35be91c8434ff10e6cf5c1fc47bb
2011-02-28 16:36:14 -08:00
Fred Quintana
e3e5b0994e remove the code that clears the passwords when the sim
is replaced with a different one.

Bug: 3404577
Change-Id: I3149df7040dfc56e91544010ac56b5912964d925
2011-02-25 10:39:20 -08:00
Wink Saville
9d72be3318 Add TelephonyManager.getCurrentPhoneType
The new method getCurrentPhoneType has the old behavior of getPhoneType
and does not check for voice capable. This allows code to assume
the old behavior.

bug: 3198435
Change-Id: I0542838ceca2f757cceb6cd7f795e95fe886523e
2011-02-01 19:22:15 -08:00
Costin Manolache
b324911b47 Merge "If 'customTokens', let authenticator handle notification." into honeycomb 2011-01-25 16:13:12 -08:00
Costin Manolache
d606045070 If 'customTokens', let authenticator handle notification.
Bug: 3377952
Change-Id: Iffb0ed01c39b42838cf88fd1b332c4b41c3194ec
2011-01-25 15:28:44 -08:00
Adam Powell
c91466f56a Fix bug 3378333 - Holo-style layout for granting permissions
Change-Id: Ie1bb925db3ddd8343c9756e220a0d821f4d31c6d
2011-01-25 13:34:28 -08:00
Fabrice Di Meglio
795f135a08 Fix bug #3338957 (Account Picker and Account type picker need love)
- update UI to match design requirements

Change-Id: Idb5dbea876eb7170a8c1f077a99cfe168d41f1e1
2011-01-21 14:58:02 -08:00
Costin Manolache
f5ffe89e73 Token cache was not reset on password change
Bug: 3365443
Change-Id: I3e85c56810c0d71ddc82d3c6a1dcbba640444564
2011-01-19 12:00:32 -08:00
Costin Manolache
9ec17366c1 Add back NEW_TASK flag.
b/2510486 suggests we remove it, but this breaks services who can't call the intent without the flag. A different solution is needed to notify when the activity is done.

Change-Id: I0b32ead69cf816e105899fdd74e99cc1e8bf5ce3
2011-01-17 15:12:57 -08:00
Costin Manolache
c6684f9e97 Fix previous quick fix, LoginOptions is final.
Change-Id: I5f262458239378697a67cbd8e83175bf3ffc7f5b
2011-01-14 11:26:25 -08:00
Costin Manolache
75b8fc7e0c Fix NPE, caller may not pass loginOptions.
Change-Id: Ifb6a8bf876d30a9726f535a90ba8c0719a9a04aa
2011-01-14 10:50:38 -08:00
Brett Chabot
3b4fcbc9f1 Add ActivityManager#isRunningInTestHarness() public API.
Replaces use of ro.monkey system property. This new API is controlled by
ro.test_harness.

Bug 3329873

Change-Id: Idb5bbbd9ca691976ef842eec681be34c29915976
2011-01-09 16:31:11 -08:00
Fred Quintana
afd2f549bb remove the hack to delay the accounts changed intent for the first account
Change-Id: I09ed0b31517c1545b81b480833fef3cd38c8f807
2010-12-17 15:45:56 -08:00
Costin Manolache
a40c6304de Add a new attribute to auth descriptors to indicate custom handling of permission and token caching
Change-Id: Icf6bd0e7bf265db9ef8bf368e8f3d8e91182f834
2010-12-17 11:26:34 -08:00
Costin Manolache
5d275bba42 Fix bug in permission grant system.
Change-Id: Ic7d712e5a672c3eded16fee83235db01ab3c74fa
2010-12-09 16:53:33 -08:00
Costin Manolache
5f383ad969 Fix bug in permission grant system.
Change-Id: Ieae1a576fdcba30b24e0430f322843369de2a697
2010-12-07 12:27:54 -08:00
Fred Quintana
56285a60e8 add caching to the AccountManagerService
- cache the accounts, userdata and authtokens
 - make the AccountManagerServiceTest work again
 - add a log statement for every binder call

http://b/issue?id=3188457

Change-Id: I96b94b9b690cf391fe4341e2a72893a6d823777b
2010-12-03 15:35:48 -08:00
Costin Manolache
ec0c4f4183 Remove notifications for account when account is removed.
Change-Id: I21b5d757231401c10c922443cecd04b68f922c0b
2010-11-16 16:08:22 -08:00
Dan Egnor
1ddf340bfc am 6f50a956: am 799f2bb0: am b37bca9e: Merge "COMMENT ONLY change to fix some formatting glitches and (more importantly) clarify issues surrounding removed accounts." into froyo
Merge commit '6f50a956803c6ccedaec71f11ecd72f8fa7efe52'

* commit '6f50a956803c6ccedaec71f11ecd72f8fa7efe52':
  COMMENT ONLY change to fix some formatting glitches and
2010-08-06 19:07:24 -07:00
Dan Egnor
799f2bb041 am b37bca9e: Merge "COMMENT ONLY change to fix some formatting glitches and (more importantly) clarify issues surrounding removed accounts." into froyo
Merge commit 'b37bca9e79489a1abd848ce762bb7d87203b3414' into gingerbread

* commit 'b37bca9e79489a1abd848ce762bb7d87203b3414':
  COMMENT ONLY change to fix some formatting glitches and
2010-08-06 18:55:05 -07:00
Dan Egnor
8e4378b3ae COMMENT ONLY change to fix some formatting glitches and
(more importantly) clarify issues surrounding removed accounts.

Change-Id: I19e6c0e536e46b6d219c808bb86e88edd7e6f378
2010-08-02 18:22:09 -07:00
Fred Quintana
743dfad2a5 fix a bug where some accounts changed listeners don't see the new
version of the accounts because the accounts changed broadcast is
sent from within the transaction try block, thus before db.endTransaction()
is called.

bug: 2839034
Change-Id: I814c7de9998ba52b85256dd2f3f19104fba3049c
2010-07-15 11:41:20 -07:00
Wink Saville
4d8ae85b5d Add needsOtaServiceProvisioning to Phone.
By having needsOtaServiceProvisioning supported on all phones we
eliminate the need to use an if statement to discriminate phone type.
Types of phones that don't support OTASP will return false in the
default implementation in PhoneBase.

Change-Id: I8fb15a18553e314c1f8f2a00ec7f8cffd79eeb7f
2010-05-24 17:50:32 -07:00
Fred Quintana
cb3f6e9f9f am 2aa2f78e: am e8b1971c: Merge "allow null authtokens to invalidateAuthToken" into froyo
Merge commit '2aa2f78ec553993de4cc7a30529e4fd9ce3b9cbc' into kraken

* commit '2aa2f78ec553993de4cc7a30529e4fd9ce3b9cbc':
  allow null authtokens to invalidateAuthToken
2010-04-01 14:37:34 -07:00
Fred Quintana
f35b68f2b9 allow null authtokens to invalidateAuthToken
Change-Id: I78e91ef2f43503e13386894851f0d781583a4943
http://b/issue?id=2561519
2010-04-01 14:26:32 -07:00
Oscar Montemayor
1f4df90bfa DO NOT MERGE
Removing unused features from source tree.
Please refer to Bug#2502219.

Change-Id: I879c29bfd5ffe933f64bb1082aaae7c956450a5a
2010-03-29 18:12:24 -07:00
Fred Quintana
382601fc8b check for nulls
Change-Id: Ie02749db1dceb4288a70e5b28040459d669904c1
http://b/issue?id=2527346
2010-03-25 13:55:02 -07:00
Fred Quintana
c2e4691d78 - make the SyncManager add periodic syncs when it upgrades from a
version of the accounts.xml file that pre-dated periodic syncs,
  e.g. eclair or early froyo. http://b/2515823
- make the AccountManagerService dump() use a getAccounts call that
  doesn't check the GET_ACCOUNTS permission to make it useful
  in "adb bugreport"
- add some logging to SyncManager to help track down a problem

Change-Id: Icb646909074e2d327d71f6bb39cf06b6fac29e77
2010-03-16 10:01:54 -07:00
Kenny Root
15a4d2ffd0 Add correct copyright headers to multiple files
Format for the list of changes shows the origin commit reference followed
by the file name.

33931-p9 awt/org/apache/harmony/awt/gl/font/AndroidGlyphVector.java
33931-p9 awt/org/apache/harmony/awt/gl/image/PngDecoderJava.java
133776-p9 core/java/android/app/IntentService.java
127013-p9 core/java/android/appwidget/AppWidgetHost.java
27863-p9 core/java/android/bluetooth/BluetoothAudioGateway.java
60765-p9 core/java/android/content/SyncResult.java
43920-p9 core/java/android/content/pm/ActivityInfo.java
43920-p9 core/java/android/content/pm/ApplicationInfo.java
43920-p9 core/java/android/content/pm/InstrumentationInfo.java
43920-p9 core/java/android/content/pm/PackageInfo.java
44103-p9 core/java/android/content/pm/PackageItemInfo.java
68960-p9 core/java/android/content/pm/PackageStats.java
43920-p9 core/java/android/content/pm/ResolveInfo.java
43920-p9 core/java/android/content/pm/ServiceInfo.java
60641-p9 core/java/android/content/res/Configuration.java
60734-p9 core/java/android/content/res/TypedArray.java
137672-p9 core/java/android/inputmethodservice/ExtractButton.java
123112-p9 core/java/android/inputmethodservice/ExtractEditText.java
119291-p9 core/java/android/inputmethodservice/IInputMethodSessionWrapper.java
112946-p9 core/java/android/inputmethodservice/IInputMethodWrapper.java
115078-p9 core/java/android/os/BatteryStats.java
124790-p9 core/java/android/text/style/UpdateAppearance.java
45083-p9 core/java/android/view/RawInputEvent.java
101491-p9 core/java/android/view/inputmethod/EditorInfo.java
114701-p9 core/java/android/view/inputmethod/ExtractedText.java
123112-p9 core/java/android/view/inputmethod/ExtractedTextRequest.java
119291-p9 core/java/com/android/internal/os/HandlerCaller.java
129279-p9 core/java/com/android/internal/os/PkgUsageStats.java
114701-p9 core/java/com/android/internal/view/IInputConnectionWrapper.java
114701-p9 core/java/com/android/internal/view/InputConnectionWrapper.java
84364-p9 opengl/java/android/opengl/EGLLogWrapper.java
11355-p9 opengl/tools/glgen/src/CFunc.java
11355-p9 opengl/tools/glgen/src/CType.java
11355-p9 opengl/tools/glgen/src/CodeEmitter.java
11355-p9 opengl/tools/glgen/src/GenerateGL.java
11355-p9 opengl/tools/glgen/src/JFunc.java
11355-p9 opengl/tools/glgen/src/JType.java
11355-p9 opengl/tools/glgen/src/JniCodeEmitter.java
11355-p9 opengl/tools/glgen/src/ParameterChecker.java
57236-p9 services/java/com/android/server/status/AnimatedImageView.java
66754-p9 services/java/com/android/server/status/CloseDragHandle.java
57188-p9 services/java/com/android/server/status/DateView.java
46928-p9 services/java/com/android/server/status/ExpandedView.java
70590-p9 services/java/com/android/server/status/FixedSizeDrawable.java
45968-p9 services/java/com/android/server/status/IconData.java
57470-p9 services/java/com/android/server/status/IconMerger.java
82719-p9 services/java/com/android/server/status/LatestItemView.java
45968-p9 services/java/com/android/server/status/NotificationData.java
66754-p9 services/java/com/android/server/status/NotificationLinearLayout.java
57458-p9 services/java/com/android/server/status/NotificationViewList.java
45968-p9 services/java/com/android/server/status/StatusBarException.java
45968-p9 services/java/com/android/server/status/StatusBarIcon.java
46130-p9 services/java/com/android/server/status/StatusBarNotification.java
45968-p9 services/java/com/android/server/status/StatusBarView.java
46199-p9 services/java/com/android/server/status/Ticker.java
62286-p9 services/java/com/android/server/status/TickerView.java
57188-p9 services/java/com/android/server/status/TrackingView.java
86041-p9 telephony/java/android/telephony/PhoneStateListener.java
87020-p9 telephony/java/com/android/internal/telephony/TelephonyIntents.java
136269-p9 telephony/java/com/android/internal/telephony/gsm/SpnOverride.java
34409-p9 tests/FrameworkTest/src/com/android/frameworktest/FrameworkTestApplication.java
55717-p9 tests/FrameworkTest/src/com/android/frameworktest/performance/InvalidateCycle.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityLandscape.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityPortrait.java
129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScan.java
129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResize.java
129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScan.java
129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollableResize.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityPanScan.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityResize.java
127341-p9 tests/ImfTest/src/com/android/imftest/samples/ButtonActivity.java
129347-p9 tests/ImfTest/src/com/android/imftest/samples/DialogActivity.java
129372-p9 tests/ImfTest/src/com/android/imftest/samples/EditTextActivityDialog.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityNoScrollPanScan.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollPanScan.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollResize.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivityNotSelected.java
128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivitySelected.java
25959-p9 tests/framework-tests/src/android/test/FrameworkTests.java
46162-p9 tests/framework-tests/src/com/android/internal/http/multipart/MultipartTest.java
77101-p9 tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
9788976b14 core/java/android/accounts/AuthenticatorDescription.java
5333288354 core/java/android/app/UiModeManager.java
93e7e22ec9 core/java/android/app/FullBackupAgent.java
328c0e7986 core/java/android/content/CursorEntityIterator.java
307da1a46b core/java/android/content/SyncQueue.java
307da1a46b core/java/android/content/SyncOperation.java
eb034652c2 core/java/android/content/pm/LabeledIntent.java
49237345d8 core/java/android/content/pm/FeatureInfo.java
a2b6c3775e core/java/android/content/pm/PackageInfoLite.java
3ecd5f4375 core/java/android/content/pm/RegisteredServicesCacheListener.java
5ebbb4a6b3 core/java/android/content/pm/XmlSerializerAndParser.java
c4516a7b62 core/java/android/database/sqlite/SQLiteTransactionListener.java
9bbc21a773 core/java/com/android/internal/backup/LocalTransport.java
21f1bd17b2 core/java/com/android/internal/content/PackageMonitor.java
4c62fc0e1e core/java/com/android/internal/view/BaseSurfaceHolder.java
4c62fc0e1e core/java/com/android/internal/view/BaseIWindow.java
e540833fdf core/java/com/android/internal/os/SamplingProfilerIntegration.java
192ab90388 core/tests/coretests/src/android/widget/expandablelistview/PositionTesterContextMenuListener.java
1619367ab8 media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
27f8002e59 opengl/tools/glgen/stubs/gles11/glGetString.java
560814f6b1 opengl/tools/glgen/stubs/gles11/glGetProgramInfoLog.java
560814f6b1 opengl/tools/glgen/stubs/gles11/glGetShaderInfoLog.java
560814f6b1 opengl/tools/glgen/stubs/gles11/glShaderSource.java
1c4907ee77 opengl/tools/glgen/src/GenerateGLES.java
1c4907ee77 opengl/tools/glgen/src/Jsr239CodeEmitter.java
1c4907ee77 opengl/tools/glgen/src/GLESCodeEmitter.java
69e21f5f6e opengl/tests/gldual/src/com/android/gldual/TriangleRenderer.java
c028be4f3b packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
7c6efa13f1 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java
7c6efa13f1 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestActivity.java
7c6efa13f1 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestRunner.java
df8a3f31d8 tests/BrowserTestPlugin/src/com/android/testplugin/TestPlugin.java
cfaef699e1 tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
cfaef699e1 tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
cfaef699e1 tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java

Copyright header moved to top in following file:

core/tests/coretests/src/android/widget/ListViewTest.java

Change-Id: I3c3198be5a0ba36e18679ed834170432bf0b8418
2010-03-11 18:22:10 -08:00
Fred Quintana
29e94b81c7 check if the binding to the authenticator has been disconnected
during the GetAccuintsByTypeAndFeature operation and abort
if it has been, thus avoiding an NPE

Change-Id: I7f707c7b0a1bdf80c0de9dfa7a3ae32323d623de
http://b/2497196
2010-03-10 13:45:05 -08:00
Fred Quintana
f0fd8436b3 - add verbose logging to the authenticator
- fix a bug in AccountManager.getAuthTokenByFeatures() where getAuthToken()
  isn't called after adding the account when necessary
2010-03-09 09:45:16 -08:00
Fred Quintana
bcfcafe18c Merge "Defend against an unexpected null bundle that causes blockingGetAuthToken() to throw an NPE." 2010-03-04 17:12:39 -08:00
Fred Quintana
96580e0065 Defend against an unexpected null bundle that causes blockingGetAuthToken() to throw an NPE.
http://b/issue?id=2420608
2010-03-04 13:42:42 -08:00
Dianne Hackborn
20cb56e26e Fix some bugs.
Bug #2376231: Apps lose window focus (and back key causes ANR) if the
lock screen is dismissed while the phone is in landscape mode

This is another case where we weren't recomputing the focused window
after changing the visibility policy.

bug #2479958: Investigate source of "Resources don't contain package
for resource number 0x7f0a0000"

Um, okay, so it turns out there were bugs all over the place where
we would load an XML resource from a another application, but not
use the Resources for that application to retrieve its resources...!
I think the only reason any of this stuff was working at all was
because it typically only cared about retrieving the resource
identifiers of the items (it would look up the values later).

Bug #2401082: Passion ERE26 monkey crash - InputMethodManagerService

Add some null checks.
2010-03-04 11:52:14 -08:00
Kenny Root
ec8f9b6481 Fix misspelling in JavaDoc tag
Minor misspelling in "@inheritDoc" tag

Change-Id: I1e6252b549c20e1871e4be0170d2d06256beec9f
2010-03-01 15:01:51 -08:00
Fred Quintana
262226137d fix a system crash that occurs when ChooseAccountActivity is
restarted from the icicle

http://b/issue?id=2352368
2010-03-01 14:39:00 -08:00
Fred Quintana
b38eb14dbf allow permission USE_CREDENTIALS for AccountManager.invalidateAuthToken as well as the previous MANAGE_ACCOUNTS 2010-02-24 14:50:30 -08:00
Fred Quintana
4855965a14 Merge "- return the accounts when getAccountByTypeAndFeatures is passed a null or empty features set, http://b/issue?id=2467165 - clear the authtokens when the password changes" 2010-02-24 13:15:14 -08:00
Fred Quintana
d4a9d6c42b - return the accounts when getAccountByTypeAndFeatures is
passed a null or empty features set, http://b/issue?id=2467165
- clear the authtokens when the password changes
2010-02-24 12:13:01 -08:00
Doug Zongker
ff592dc2fa fix some minor javadoc errors in AccountManager
Change-Id: Iafc9e5541e56b936a426999e0ae9f99e56dccd51
2010-02-23 12:26:33 -08:00
Dan Egnor
661f0130de Update AccountManager's javadoc.
Includes several potentially controversial major changes:

- Remove the amount of repeated boilerplate explanations of common
idioms.  I find them much more distracting than useful.  The same
things are explained, but in fewer places.

- Add more narrative/directive information instead of merely descriptive
commentary; I included a lot of "color" about who particular methods are
intended for and why you might use them.

- Add explicit guidance (in the class javadoc) about the common usage pattern.
Explicitly document the auth token invalidation dance, which is highly
nonobvious, had never been written down before, and which GMM got wrong,
creating a Latitude conops nightmare they're still digging out of.

- Explain and justify, as best I can, the overall model of account management:
saved credentials, pluggable authenticators, auth tokens, and so on.  Clarify
some things, like that setPassword() changes the locally cached credential
but does not set the user's password on the server.

- Clarify what the passed-in Activity parameter is used for.  (It seems silly,
but I was confused by this: is it supposed to be the Activity that actually
performs the password prompt or whatever?  No, it's just a Context for the
startActivity() to be launched from.)
2010-02-23 11:53:59 -08:00
Fred Quintana
8570f74407 - fix the AccountManager documentation. http://b/2401790
- only pass the authtoken through from the authenticator to the client
  for getAuthToken() and strip it out from the other calls, like
  addAccount(). http://b/2332762
- beef up the documentation to indicate what calls are allowed to be made
  from the main thread and which are not allowed. http://b/2384961
- wait a bit before retrying syncs that failed because one was already
  in progress. http://b/2414235
2010-02-18 17:34:33 -08:00
Fred Quintana
751fdc09bb only make AccountManager throw an exception on blocking calls in the UI thread if the application's SDK is froyo or later 2010-02-09 14:13:18 -08:00