|
30 | 30 | import static com.salesforce.androidsdk.security.ScreenLockManager.SCREEN_LOCK; |
31 | 31 | import static com.salesforce.androidsdk.security.ScreenLockManager.SCREEN_LOCK_TIMEOUT; |
32 | 32 |
|
| 33 | +import android.accounts.Account; |
| 34 | +import android.accounts.AccountManager; |
33 | 35 | import android.content.Context; |
34 | 36 | import android.content.SharedPreferences; |
35 | 37 |
|
36 | 38 | import com.salesforce.androidsdk.accounts.UserAccount; |
| 39 | +import com.salesforce.androidsdk.accounts.UserAccountManager; |
37 | 40 | import com.salesforce.androidsdk.auth.HttpAccess; |
38 | 41 | import com.salesforce.androidsdk.auth.OAuth2; |
39 | 42 | import com.salesforce.androidsdk.config.AdminSettingsManager; |
|
46 | 49 | import java.util.Map; |
47 | 50 | import java.util.concurrent.Executors; |
48 | 51 |
|
49 | | - |
50 | 52 | /** |
51 | 53 | * This class handles upgrades from one version to another. |
52 | 54 | * |
@@ -130,6 +132,9 @@ else if (installedVersion.isGreaterThanOrEqualTo(new SdkVersion(9, 2, 0, false)) |
130 | 132 | if (installedVersion.isLessThan(new SdkVersion(12, 0, 0, false))) { |
131 | 133 | updateFromBefore12_0_0(); |
132 | 134 | } |
| 135 | + if (installedVersion.isLessThan(new SdkVersion(15, 0, 0, false))) { |
| 136 | + migrateAccountType(); |
| 137 | + } |
133 | 138 | } catch (Exception e) { |
134 | 139 | SalesforceSDKLogger.e( |
135 | 140 | TAG, |
@@ -306,4 +311,36 @@ private void updateFromBefore12_0_0() { |
306 | 311 | PushMessaging.setReRegistrationRequested(true); |
307 | 312 | } |
308 | 313 |
|
| 314 | + |
| 315 | + /* |
| 316 | + * Migrate any accounts with account_type "com.salesforce.androidsdk" to a unique value. |
| 317 | + * TODO: Remove this in Mobile SDK 15.0 |
| 318 | + */ |
| 319 | + private void migrateAccountType() { |
| 320 | + final String LEGACY_ACCOUNT_TYPE = "com.salesforce.androidsdk"; |
| 321 | + if (SalesforceSDKManager.getInstance().getAccountType().equals(LEGACY_ACCOUNT_TYPE)) { |
| 322 | + SalesforceSDKLogger.e(TAG, "No app specific account type found. To ensure users " + |
| 323 | + "can login override the account_type value in strings.xml."); |
| 324 | + return; |
| 325 | + } |
| 326 | + |
| 327 | + final AccountManager accountManager = SalesforceSDKManager.getInstance().getClientManager().getAccountManager(); |
| 328 | + final UserAccountManager userAccountManager = SalesforceSDKManager.getInstance().getUserAccountManager(); |
| 329 | + |
| 330 | + for (Account account : accountManager.getAccountsByType(LEGACY_ACCOUNT_TYPE)) { |
| 331 | + try { |
| 332 | + final UserAccount userAccount = userAccountManager.buildUserAccount(account); |
| 333 | + if (userAccount == null) { |
| 334 | + SalesforceSDKLogger.e(TAG, "Unable to build UserAccount from account: " + account.name); |
| 335 | + continue; |
| 336 | + } |
| 337 | + |
| 338 | + // Android OS accounts immutable so we have to remove the account and add a new one. |
| 339 | + accountManager.removeAccountExplicitly(account); |
| 340 | + userAccountManager.createAccount(userAccount); |
| 341 | + } catch (Exception e) { |
| 342 | + SalesforceSDKLogger.e(TAG, "Failed to migrate account: " + account.name, e); |
| 343 | + } |
| 344 | + } |
| 345 | + } |
309 | 346 | } |
0 commit comments