protoncore_android/CHANGELOG.md

28 KiB

EventManager Version [1.19.2]

Nov 19, 2021

New Features

  • Added two new callbacks to EventListener:
    • onSuccess will be called when the modifications are executed with no issues.
    • onFailure will be called after the modifications failed too many times and resetAll has run.

EventManager Version [1.19.1]

Nov 18, 2021

Dependencies

  • Contact 1.19.1.
  • EventManager 1.19.1.
  • Mail Settings 1.19.1.
  • User 1.19.1.
  • User Settings 1.19.1.

New Features

  • Added EventManagerConfig parameter to all EventListener functions.

Breaking Changes

  • EventListener functions signature changed (userId removed, added config).

Plan Presentation [1.18.1]

17 Nov, 2021

Changes

  • Fixes base strings with replaceable placeholders for translations.

Binary incompatibility bump

16 Nov, 2021

Changes

  • fix binary incompatibility — bump version for all libraries that use presentation module

Dependencies

  • AccountManager 1.16.2
  • Country 1.16.2
  • EventManager 1.18.1
  • HumanVerification 1.16.3
  • Payment 1.17.3
  • Plan 1.18.1

Auth [1.18.3]

15 Nov, 2021

Changes

  • Added LoginTestHelper that can be used in instrumented tests to login, without the need to perform any UI actions

15 Nov, 2021

Auth Presentation [1.18.2]

Changes

  • Switch between External and Username when External account type is required by the client.

12 Nov, 2021

User Settings [1.18.2]

Changes

  • Refactor password management mailbox form to be in sync with the login form when presented to the user.

No Breaking changes, clients can just update to the latest versions.

Auth [1.18.1]

12 Nov, 2021

Changes

  • Refactored login process (split LoginViewModel into multiple classes) - no functionality change

Mail Message [1.15.1]

Changes

  • Incremented version for Mail Message module to fix a NoSuchMethodError crash

Test Android Instrumented [1.15.5]

Changes

  • Fix OnView.checkDoesNotExist()

Test Android Instrumented [1.15.4]

Changes

  • Add missing customAction API

Key [1.16.1]

08 Nov, 2021

Changes

Handle the case where the signed key list has a null signature. Modifies:

  • SignedKeyListEntity (embedded in PublicAddressEntity and AddressEntity)
  • PublicSignedKeyList
  • SignedKeyListResponse

Test Android Instrumented [1.15.3]

05 Nov, 2021

Changes

  • Updated plan robots

Plan [1.18.0]

04 Nov, 2021

Changes

  • Plans now support the latest UI design changes.

No Breaking changes, clients can just update to the latest versions.

Note: Clients should upgrade to Presentation v1.18.3

Auth [1.17.6]

03 Nov, 2021

Changes

  • Allow Login without keys for Product VPN with AccountType External.

Country [1.16.1], Human-Verification [1.16.2]

29 Oct, 2021

Bug fixes

  • Incorrect background in HV and country picker

Presentation [1.18.1]

28 Oct, 2021

Changes

  • Added Snackbar proton_notification_norm to color taxonomy.
  • Please use View extensions for Snackbar:
    • View.normSnack
    • View.warningSnack
    • View.errorSnack
    • View.successSnack

Auth [1.17.5]

28 Oct, 2021

Bug fixes

  • Screen with Recovery Method is not shown sometimes

User-Settings [1.16.1]

20 Oct, 2021

Bug fixes

  • Cannot change password for legacy users with 2fa enabled.

Version [1.18]

25 Oct, 2021

Dependencies

  • Contact 1.18.
  • Domain 1.18.
  • EventManager 1.18.
  • MailSettings 1.18.
  • Presentation 1.18.
  • User 1.18.
  • UserSettings 1.18.

New Migration

  • Please apply changes as follow to your AppDatabase:
    • Add EventMetadataEntity to your AppDatabase entities.
    • Add EventManagerConverters to your TypeConverters.
    • Extends EventMetadataDatabase.
    • Add a migration to your AppDatabase (addMigration):
val MIGRATION_X_Y = object : Migration(X, Y) {
    override fun migrate(database: SupportSQLiteDatabase) {
        EventMetadataDatabase.MIGRATION_0.migrate(database)
    }
}

New Dagger Module

  • To provide the various EventManager components:
@Module
@InstallIn(SingletonComponent::class)
object EventManagerModule {

    @Provides
    @Singleton
    @EventManagerCoroutineScope
    fun provideEventManagerCoroutineScope(): CoroutineScope =
        CoroutineScope(Dispatchers.Default + SupervisorJob())

    @Provides
    @Singleton
    @JvmSuppressWildcards
    fun provideEventManagerProvider(
        eventManagerFactory: EventManagerFactory,
        eventListeners: Set<EventListener<*, *>>
    ): EventManagerProvider =
        EventManagerProviderImpl(eventManagerFactory, eventListeners)

    @Provides
    @Singleton
    fun provideEventMetadataRepository(
        db: EventMetadataDatabase,
        provider: ApiProvider
    ): EventMetadataRepository = EventMetadataRepositoryImpl(db, provider)

    @Provides
    @Singleton
    fun provideEventWorkManager(
        workManager: WorkManager,
        appLifecycleProvider: AppLifecycleProvider
    ): EventWorkManager = EventWorkManagerImpl(workManager, appLifecycleProvider)

    @Provides
    @Singleton
    @ElementsIntoSet
    @JvmSuppressWildcards
    fun provideEventListenerSet(
        userEventListener: UserEventListener,
        userAddressEventListener: UserAddressEventListener,
        userSettingsEventListener: UserSettingsEventListener,
        mailSettingsEventListener: MailSettingsEventListener,
        contactEventListener: ContactEventListener,
        contactEmailEventListener: ContactEmailEventListener,
    ): Set<EventListener<*, *>> = setOf(
        userEventListener,
        userAddressEventListener,
        userSettingsEventListener,
        mailSettingsEventListener,
        contactEventListener,
        contactEmailEventListener,
    )
}
  • To provide AppLifecycleObserver, AppLifecycleProvider and WorkManager (needed by EventManager):
@Module
@InstallIn(SingletonComponent::class)
object ApplicationModule {
    ...
    @Provides
    @Singleton
    fun provideAppLifecycleObserver(): AppLifecycleObserver =
        AppLifecycleObserver()

    @Provides
    @Singleton
    fun provideWorkManager(@ApplicationContext context: Context): WorkManager =
        WorkManager.getInstance(context)
    ...
}

@Module
@InstallIn(SingletonComponent::class)
abstract class ApplicationBindsModule {
    @Binds
    abstract fun provideAppLifecycleStateProvider(observer: AppLifecycleObserver): AppLifecycleProvider
}

WorkManager

Initialization of WorkManager is up to the client.

EventManager/EventWorker assume the client support injecting:

@HiltWorker
open class EventWorker @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted params: WorkerParameters,
...

Please refer to:

Changes

  • Added EventManager Domain/Data and EventListeners.
  • Added EventManager LogTags.
  • Added EventManagerConfig and EventManagerConfigProvider.
  • Added EventWorkManager and EventManagerWorker.
  • Added UserEventListener.
  • Added UserAddressEventListener.
  • Added MailSettingsEventListener.
  • Added UserSettingsEventListener.
  • Added ContactEventListener.
  • Added ContactEmailsEventListener.
  • Added AppLifecycleObserver and AppLifecycleProvider.

Presentation [1.17.0]

Changes

  • ProtonInput password field (inputType TextPassword) is now cleared when returning from background if more than 3 min have passed.

Auth [1.17.3], Human Verification [1.16.1], User settings [1.16.1], Presentation [1.16.1]

22 Oct, 2021

Changes

  • Add missing versions for Auth and User settings modules.
  • Added ScreenContentsProtector with shared logic for both activities and fragments: it can be added to any component, inheritance is no longer mandatory but is encouraged.
  • Moved most of ProtonSecureActivity's logic to ScreenContentsProtector added a ProtonSecureFragment counterpart to apply security measures to fragments automatically.
  • Fix a bug when several protected fragments were shown on screen.
  • Added a by protectScreen(ProtectScreenConfiguration) delegate to automatically protect and unprotect activities and fragments based on their lifecycles. You can either use this delegate, the ProtonSecure superclasses or use ScreenContentsProtector manually and carefully checking that all secure components are protected and then unprotected when no longer needed.

Auth [1.17.1], User [1.16.2].

19 Oct, 2021

Bug fixes

  • Force Change password via Web only for private sub-user.

Auth [1.16.1], User [1.16.1].

15 Oct, 2021

Bug fixes

  • Fixed Login for AccountType Username (VPN).
  • Allow Login without full/keys scopes, without fetching addresses if not needed.
  • Return Success for UnlockUserPrimaryKey without keys.

User [1.15.6], Key [1.15.6], Account-Manager [1.15.6]

15 Oct, 2021

Changes

  • AddressEntity and PublicAddressEntity now store the signed key list of the address.
  • PublicAddressDatabase migration 1 and AddressDatabase migration 2 to reflect the model changes.
  • Updated db schema of coreexample to version 10 to reflect the model changes.
  • Updated db schema of account-manager to version 10 to reflect the model changes.
  • Removed PrivateKey.signedKeyList() to replace it with UserAddress.signKeyList()

Plan and Payments [1.16.0]

15 Oct, 2021

Changes

  • Plan and Payments now rely on the newest V4 API, including changes in the API response, requests and entities.

Breaking changes: Instead on plan id, now clients should rely and provide plan names for the paid plans they support.

Auth [1.15.5]

15 Oct, 2021

Changes

  • Fixed: For some set of languages (e.g. Polish, Czech), app would crash during signup when choosing recovery method.

Presentation [1.15.7]

13 Oct, 2021

Changes

  • Add new colors to the taxonomy for the sidebar component.

Human Verification [1.15.5], Presentation [1.15.6]

13 Oct, 2021

Changes

  • Protect screens with visible password fields using WindowManager's FLAG_SECURE.
  • Add ProtonSecureActivity that can be extended to apply security measures to any activity. At the moment, it's being extended by AuthActivity.

Crypto and Key [1.15.5]

11 Oct, 2021

New features

  • Add support to generate and verify encrypted signatures, example:
  // Key holder 1 signs the message and encrypts the signature for Key Holder 2
  val encryptedSignature = keyHolder1.useKeys(context) {
      signDataEncrypted(data, keyHolder2PublicAddress.publicKeyRing())
  }
  // Key holder 2 decrypts the signature and verifies it with Key Holder 1's public keys.
  val verified = keyHolder2.useKeys(context) {
      verifyDataEncrypted(data, encryptedSignature, keyHolder1PublicAddress.publicKeyRing())
  }

Crypto and Key [1.15.4]

8 Oct, 2021

Changes

  • Replaced Signature Verification validAtUtc (Long) by VerificationTime (Ignore, Now, Utc).

Crypto [1.15.3]

Changes

  • Removed internal implementations PasswordVerifier and BigIntegerCalculator and use go-srp to compute the password verifier instead.

Network [1.15.6], Android Test [1.15.1]

Changes

  • Use mockk-android instead of mockk for android tests.
  • Fix network dependency declaration causing compilation of library module to fail.

Human-Verification [1.15.4]

Changes

  • Removed HumanVerificationActivity — use HumanVerificationOrchestrator instead
  • Fix: In signup activity, the view-model's state is preserved if the activity is temporarily destroyed
  • Updated nullability of HumanVerificationOrchestrator.setOnHumanVerificationResult callback: HumanVerificationResult parameter is never null; check token property to see if human verification was successful or not

Dependencies

  • Auth [1.15.4]
  • Presentation [1.15.5]
  • User-Settings [1.15.3]

Human Verification [1.15.3], Network [1.15.5]

Oct 6, 2021

Changes

  • Add ExtraHeaderProvider to pass arbitrary headers to all API requests.
  • Allow captcha WebView to use ExtraHeaderProvider's headers.

Network [1.15.4]

5 Oct, 2021

Changes

  • Add log in ServerTimeInterceptor on Date parse failure.

Key [1.15.3], Network [1.15.3]

Oct 4, 2021

Changes

  • Add CacheOverride OkHttp tag and CacheOverrideInterceptor to modify cache behavior per-request.

Presentation [1.15.4]

Sep 30, 2021

Changes

  • Add a work around for MIUI Dark Mode breaking theming.

Presentation [1.15.3], Auth [1.15.3]

Sep 27, 2021

Changes

  • Add styling for dialogs created with MaterialAlertDialogBuilder.
  • Use MaterialAlertDialogBuilder for all dialogs.
  • Add styling for action menu text.

Crypto Version [1.15.2]

Sep 20, 2021

Dependencies

  • Auth 1.15.2.
  • Account 1.15.2.
  • Crypto 1.15.2.
  • Human-Verification 1.15.2.
  • Key 1.15.2.
  • Network 1.15.2.
  • Util Kotlin 1.15.2.
  • User 1.15.2.
  • User-Settings 1.15.2.

Api Changes

  • Logger is no more injected. Instead Core use a static CoreLogger. You now have to set the Logger instance, on Application create:
override fun onCreate() {
    super.onCreate()
    CoreLogger.set(CoreExampleLogger())
  • There is also a new KeyStoreCrypto LogTag object you must be aware:
object LogTag {
    /** Tag for KeyStore initialization check failure. */
    const val KEYSTORE_INIT = "core.crypto.common.keystore.init"

    /** Tag for KeyStore encrypt failure. */
    const val KEYSTORE_ENCRYPT = "core.crypto.common.keystore.encrypt"

    /** Tag for KeyStore decrypt failure. */
    const val KEYSTORE_DECRYPT = "core.crypto.common.keystore.decrypt"
}

New Features

  • KeyStoreCrypto fallback if Android KeyStore is not properly working.

Presentation [1.15.1]

Sep 21, 2021

Changes

  • Removed FragmentManager.showForceUpdate method; to present a "Forced Update" dialog, use ForceUpdateActivity instead

User Settings [1.15.1]

Sep 20, 2021

New Features

  • Added IntEnum support for UserSettings.

Test Android Instrumented [1.15.1]

Sep 12, 2021

New Features

  • Added PasswordManagementRobot

Version [1.15.0]

Sep 8, 2021.

Upgrade Kotlin to 1.5.

Dependencies

  • Core Modules 1.15.0.
  • Kotlin 1.5.30.
  • Kotlin Coroutines 1.5.2.
  • Kotlin Serialization 1.2.2.
  • Gradle 7.2.
  • Java 11.
  • Android Gradle Plugins 7.0.2.
  • Android Tools 30.0.2.
  • Android Annotation 1.2.0.
  • AndroidX Activity 1.3.1.
  • AndroidX AppCompat 1.3.1.
  • AndroidX Constraintlayout 2.1.0.
  • AndroidX Fragment 1.3.6.
  • AndroidX KTX 1.6.0.
  • AndroidX Lifecycle 2.4.0-alpha03.
  • AndroidX Paging 1.4.0.
  • AndroidX Work 2.6.0.
  • AndroidX Test 1.4.0.
  • Android Material Components 1.4.0.
  • Dagger 2.38.1
  • Hilt 2.38.1.
  • Timber 5.0.1.
  • Turbine 0.6.1.
  • OkHttp 4.9.1.
  • Trust Kit 1.1.5.
  • Store 4.0.2-KT15.
  • Lottie 4.1.0.
  • Falcon 2.2.0.
  • Apache Common Codec 1.15.
  • Gotev CookieStore 1.3.5.
  • Google Tink 1.6.1.
  • Espresso 3.4.0.
  • Robolectric 4.6.1.
  • Mockk 1.11.0.
  • Junit KTX 1.1.3.

User Settings Version [1.7.1]

Sep 10, 2021

Added features

  • Add better result callback for password management and recovery email change features.
  • Password management and recovery email change screens now auto-close themselves on success.

Dependencies

  • UserSettings 1.7.1

Crypto Version [1.6.3]

Sep 09, 2021

Dependencies

  • Crypto 1.6.3.
  • Key 1.6.3.
  • User 1.6.3.

New Features

  • Added encryptAndSign/decryptAndVerify PublicKeyRing parameter (default to KeyHolderContext.publicKeyRing).

Presentation [1.6.1]

Sep 09, 2021

Changes

  • Revert tab ripple effect to the default.

Auth Version [1.7.0]

Sep 03, 2021

Bug fixes

  • Fixed dialog fragments crash on orientation change, mainly this stands for ProtonCancellableDialogFragment and PasswordAnd2FADialogFragment
  • Note, breaking change, the API of these dialog fragments has changed a bit.

Dependencies

  • Auth 1.7.0
  • HumanVerification 1.6.0
  • Presentation 1.6.0
  • UserSettings 1.7.0

New Usage Example with fragment result pattern

private lateinit var requestNewCodeDialogResultLauncher: FragmentDialogResultLauncher<String>

requestNewCodeDialogResultLauncher =
            parentFragmentManager.registerRequestNewCodeDialogResultLauncher(this@HumanVerificationEnterCodeFragment) {
                // your code
            }

equestNewCodeDialogResultLauncher.show("string")

Crypto Version [1.6.2]

Aug 31, 2021

Dependencies

  • Crypto 1.6.2.
  • Key 1.6.2.

Bug Fixes

  • Fixed HashKey signature verification (do not throw IllegalArgumentException anymore on decryption).

Test Android Instrumented [0.6.7]

Aug 30, 2021

New Features

  • Added RecoveryEmail robot

Test Android Instrumented [0.6.6]

Aug 27, 2021

New Features

  • Added startsWith() matcher
  • Added user creation quark commands
  • Minor test data classes improvements

Presentation [1.5.5]

Aug 27, 2021

New Features

  • Added ?attr/proton_text_accent and ?attr/proton_icon_accent.

Style Changes

  • Linear progress bar styling has changed. The track is now 50% of the brand color so that it is lighter than the indicator in light mode and darker in dark mode.

Bug Fixes

  • ProtonRadioButton and ProtonCheckbox animations are fixed in Android 6.
  • ProtonRadioButton and ProtonCheckbox padding is fixed to avoid long labels overlapping the button.

Crypto Version [1.6.1]

Aug 25, 2021

Dependencies

  • Crypto 1.6.1.
  • Key 1.6.1.
  • Mail Message 1.6.1.
  • Util Kotlin 0.2.6.

New Features

  • Added Crypto encrypt/decrypt File with KeyPacket/SessionKey/HashKey support.

Auth Version [1.6.1]

Aug 25, 2021

Bug Fixes

  • Fixed SetupAccountCheck to always refresh User Addresses before proceeding.

User Settings Version [1.6.0]

Aug 17, 2021

New Features

  • Password Change: Single Pass mode password change, Two Pass mode login and mailbox password change.

New Migration

  • If you use Account Manager Data Db module, nothing to do, it's transparently applied.
  • If you use your own AppDatabase, please apply changes as follow:
    • Add OrganizationEntity to your AppDatabase entities.
    • Add OrganizationKeysEntity to your AppDatabase entities.
    • Add a migration to your AppDatabase (addMigration):
val MIGRATION_X_Y = object : Migration(X, Y) {
    override fun migrate(database: SupportSQLiteDatabase) {
        OrganizationDatabase.MIGRATION_0.migrate(database)
    }
}

Dependencies

  • Account Manager 1.6.
  • Auth 1.6.
  • Crypto 1.6.
  • Key 1.6.
  • User 1.6.
  • UserSettings 1.6.

Crypto Version [1.5.3]

Aug 18, 2021

Dependencies

  • Crypto 1.5.3.
  • Key 1.5.3.
  • User 1.5.3.

Behavior Changes

  • Set X25519 as default Key type for generation (removed RSA).
  • Changed Key identity as: email .

Presentation Version [1.5.4]

Aug 20, 2021

New Features

  • Added color ?attr/proton_blender_norm for greying out content behind dialogs.

Network Version [1.5.4]

Aug 18, 2021

New Features

  • Added optional OkHttp Cache (see ApiManagerFactory). This cache is shared across all user, session, api or call.

Breaking Changes

  • You'll have to instantiate/use ApiResult.Error.NoInternet() instead of the static object.

Behavior Changes

  • Removed isConnectedToNetwork check before trying a call (see ApiManagerImpl).
  • You'll now receive ApiResult.Error.NoInternet only on UnknownHostException.

Network Version [1.5.3]

Aug 18, 2021

Bug Fixes

  • Fixed Network error retryable conditions:
/**
 * Return true if [ApiResult] is retryable (e.g. connection issue or http error 5XX).
 */
fun <T> ApiResult<T>.isRetryable(): Boolean = when (this) {
    is ApiResult.Success,
    is ApiResult.Error.Parse,
    is ApiResult.Error.Certificate,
    is ApiResult.Error.TooManyRequest -> false
    is ApiResult.Error.Connection -> true
    is ApiResult.Error.Http -> httpCode in 500..599
}

Behavior Changes

  • As a result of the above fix, any HTTP Error 5XX will trigger backoff retry, see ApiClient:
/**
 * Retry count for exponential backoff.
 */
val backoffRetryCount: Int get() = 2

/**
 * Base value (in milliseconds) for exponential backoff logic. e.g. for value 500 first retry
 * will happen randomly after 500-1000ms, next one after 1000-2000ms ...
 */
val backoffBaseDelayMs: Int get() = 500

Presentation Version [1.5.3]

Aug 17, 2021

Bug Fixes

  • Fixed ProtonCheckbox and ProtonRadioButton not updating their button drawable in certain scenarios.

Version [1.5.2]

Aug 13, 2021

Various SignUp/SignIn fixes & improvements.

Dependencies

  • Account 1.5.2.
  • Auth 1.5.2.
  • Human Verification 1.5.2.
  • Network 1.5.2.
  • User 1.5.2.
  • Plan 1.5.2.
  • Presentation 1.5.2.

Bug Fixes

  • HumanVerification: Fixed concurrency issue while updating state/token.
  • Account: Fixed concurrency issue while updating account/session state.
  • Auth: Fixed error on login within SignUp process.
  • Auth: Fixed wrong initial Fragment shown if available HV methods equal ("sms", "email").
  • Auth: Fixed "Recovery Email" & "Recovery Phone number".
  • Auth: Fixed blank username error.
  • Auth: Fixed passwords do not match error.
  • Auth Presentation: Fixed Add Account Portrait Orientation.
  • Presentation: Fixed TextInputLayout Outline stroke (color/size).
  • Presentation: Fixed OnBackPressedCallback & and Fragments backstack flow.
  • Presentation: Fixed Fragment hideKeyboard.
  • Auth: Fixed missing state changes (e.g. no network).

New Features

  • Network: Added TooManyRequest error handling per Session.
  • HumanVerification: Added SMS/Email Token code validation.
  • User: Added default Domain fallback.

API Changes

  • UserVerificationRepositoryImpl do not depend anymore on clientIdProvider & humanVerificationRepository:
@Provides
@Singleton
fun provideUserVerificationRepository(
    apiProvider: ApiProvider
): UserVerificationRepository = UserVerificationRepositoryImpl(apiProvider)
  • You must now provide a Default Domain Host to DomainRepositoryImpl.
@Provides
@DefaultDomainHost
fun provideDefaultDomainHost() = Constants.HOST // "protonmail.com"
...
@Provides
@Singleton
fun provideDomainRepository(
    @DefaultDomainHost defaultDomain : Domain,
    provider: ApiProvider
): DomainRepository = DomainRepositoryImpl(defaultDomain, provider)

Test Android Instrumented [0.6.5]

Aug 12, 2021

New Features

  • CoreRobot.addText() and replaceText() are added as replacements for setText(). addText() behaves exactly the same as setText().

Deprecations

  • CoreRobot.setText() is deprecated for confusing behavior - it adds text instead of setting new text on a view.

Presentation Version [0.10.3]

Aug 11, 2021

Style Changes

  • @color/text_weak_selector is updated to use ?attr/proton_text_weak and ?attr/proton_text_disabled instead of directly using @color values.

Presentation Version [0.10.2]

Aug 5, 2021

New Features

  • Added View.snack extension that accepts a function block allowing for full customization of the created Snackbar.

Style Changes

  • Snackbar text styles have been updated to Proton.Text.* to match designs.
  • Snackbar text color has been forced to white also in dark theme.

Presentation Version [0.10.1]

Aug 3, 2021

API Changes

  • ProtonCheckbox and ProtonRadioButton are now open classes.
  • ProtonCheckbox and ProtonRadioButton don't use compound drawables to draw the button on the right. This means that setting a drawable with e.g. setCompoundDrawablesRelative(icon, null, null, null) doesn't unexpectedly break them.
  • Add Proton.Text.Hero style.
  • Add ProtonInput.clearTextAndOverwriteMemory() - the method overwrites and clears the input's text buffer. It should be used to limit the time passwords are kept in memory.

Translations Version [2021-07-30-140045]

Jul 30, 2021

Dependencies

  • Account Manager 1.5.1.
  • Auth 1.4.1.
  • Country 0.1.6.
  • Human Verification 1.3.4.
  • Payment 0.2.3.
  • Plan 0.1.2.
  • Presentation 0.10.1.

New Supported Languages

  • From Agency: en, de, fr.
  • From Community: cs, es-rMX, fr-rCA, pl.
  • You can filter them by using:
android {
    defaultConfig {
        resConfigs "de", "en", "fr"
    }
}

User Settings Version [1.5.1]

Jul 30, 2021

Bug Fixes

  • Fixed UserSettingsDatabase MIGRATION_0.

Version [1.5.0]

Jul 30, 2021

Add user settings, with initial update recovery email option.

Dependencies

  • Auth 1.5.0.
  • Account Manager 1.5.0.
  • User 1.5.0.
  • UserSettings 1.5.0.
  • Plan 0.2.0.
  • Presentation 0.10.0.

New Modules

  • User Settings: Get and update UserSettings.

New Migration

  • If you use Account Manager Data Db module, nothing to do, it's transparently applied.
  • If you use your own AppDatabase, please apply changes as follow:
    • Add UserSettingsEntity to your AppDatabase entities.
    • Add UserSettingsConverters to your AppDatabase TypeConverters.
    • Extends UserSettingsDatabase from your AppDatabase.
    • Add a migration to your AppDatabase (addMigration):
val MIGRATION_X_Y = object : Migration(X, Y) {
    override fun migrate(database: SupportSQLiteDatabase) {
        UserSettingsDatabase.MIGRATION_0.migrate(database)
    }
}

New Features

  • Added UserSettings module with Update Recovery Email feature.
  • Added FragmentActivity.addOnBackPressedCallback in presentation module.

Recommendations

  • Do not expect UserSettings properties to be stable, they could change in future.

Crypto Version [1.1.5], Key Version [1.3.2]

Jul 28, 2021

New Features

  • Added Crypto encryptAndSignFile & decryptAndVerifyFile.

Mail Settings Version [1.3.2]

Jul 28, 2021

New Features

  • Added MailSettingsRepository updateMailSettings & MailSettingsResponse.toMailSettings.

Account Manager Version [1.3.2]

Jul 27, 2021

Bug Fixes

  • Changed Account Initials Count to 1.

Presentation Version [0.9.9]

Jul 26, 2021

New Features

  • Added ProtonCheckbox and ProtonRadioButton that display their "button" (i.e. the checkbox or circle) to the right of the label.

User Version [1.3.2]

Jul 23, 2021

Bug Fixes

  • Fixed UserAddressRepositoryImpl issue when no address returned from fetcher.

Recommendations

  • You must update to this version because it prevent to properly sign in/up without address.

Version [1.3.1]

Jul 21, 2021

Refactor Core Database.

Dependencies

  • Account 1.3.1.
  • AccountManager 1.3.1.
  • Data 1.3.1.
  • DataRoom 1.3.1.
  • HumanVerification 1.3.1.
  • Key 1.3.1.
  • MailSettings 1.3.1.
  • User 1.3.1.

New Modules

  • Data Room: New module containing all Android Room specifics.
  • AccountManager Data Db: New module containing old AccountManagerDatabase, for backward compatibility purposes.

New Features

  • SupportSQLiteDatabase extensions: getTableColumns, recreateTable, addTableColumn, dropTableColumn, dropTableContent or dropTable.
  • UserRepository.updateUser: function for event handing.
  • UserAddressRepository.updateAddresses/deleteAddresses: functions for event handling.

Bug Fixes

  • Fixed UserAddressRepositoryImpl to fetch addresses if DB table if empty.

API Changes

  • Removed Dagger Provides for AccountManagerDatabase from AccountManager Dagger module.
  • Client need to provide all Database components:
@Module
@InstallIn(SingletonComponent::class)
object AppDatabaseModule {
    @Provides
    @Singleton
    fun provideDatabase(@ApplicationContext context: Context): AccountManagerDatabase =
        AccountManagerDatabase.buildDatabase(context)
}

@Module
@InstallIn(SingletonComponent::class)
abstract class DatabaseBindsModule {
    @Binds
    abstract fun provideAccountDatabase(db: AccountManagerDatabase): AccountDatabase

    @Binds
    abstract fun provideUserDatabase(db: AccountManagerDatabase): UserDatabase

    @Binds
    abstract fun provideAddressDatabase(db: AccountManagerDatabase): AddressDatabase

    @Binds
    abstract fun provideKeySaltDatabase(db: AccountManagerDatabase): KeySaltDatabase

    @Binds
    abstract fun providePublicAddressDatabase(db: AccountManagerDatabase): PublicAddressDatabase

    @Binds
    abstract fun provideHumanVerificationDatabase(db: AccountManagerDatabase): HumanVerificationDatabase

    @Binds
    abstract fun provideMailSettingsDatabase(db: AccountManagerDatabase): MailSettingsDatabase
}

Recommendations

  • You should not use AccountManagerDatabase anymore (could be deprecated in future).
  • You should define your own Database, see CoreExample AppDatabase, AppDatabaseMigrations and AppDatabaseBindsModule.