1 min read

Choose icon

Choose icon SDK allows users to select the app icon on a configuration screen accessible via deeplink.

Without any customisation, Choose icon screen looks like this:

Choose icon screen
Choose icon screen

Start using Choose icon SDK

To start using it, you need to:

  • Add the module to your build.gradle
    implementation ("com.poqstudio:content.icon:$VERSION_NAME")
  • Add your new icons to your resource folder
  • Create an activity-alias cloning the default icon in your AndroidManifest.xml
  • Create activity-aliases for each icon variant in your AndroidManifest.xml

(all the activity-aliases need to have the same intent-filter as the original Activity)

<application
<!-- android:icon="@mipmap/ic_launcher" remove from here -->
... >
<activity
android:name="com.poqstudio.app.platform.presentation.splash.view.SplashActivity"
android:enabled="true" <!-- enabled by default -->
android:exported="true"
android:icon="@mipmap/ic_launcher"
... >
<intent-filter>
...
</intent-filter>
</activity>
<activity-alias
android:name="com.poqstudio.app.platform.presentation.splash.view.DefaultCloneAlias"
android:enabled="false" <!-- disabled by default -->
android:exported="true"
android:icon="@mipmap/ic_launcher"
android:targetActivity="com.poqstudio.app.platform.presentation.splash.view.SplashActivity"
... >
<intent-filter>
...
</intent-filter>
</activity-alias>
<activity-alias
android:name="com.poqstudio.app.platform.presentation.splash.view.VariantAlias1"
android:enabled="false" <!-- disabled by default -->
android:exported="true"
android:icon="@mipmap/ic_launcher_variant_1"
android:targetActivity="com.poqstudio.app.platform.presentation.splash.view.SplashActivity"
... >
<intent-filter>
...
</intent-filter>
</activity-alias>
<activity-alias
android:name="com.poqstudio.app.platform.presentation.splash.view.VariantAlias2"
android:enabled="false" <!-- disabled by default -->
android:exported="true"
android:icon="@mipmap/ic_launcher_variant_2"
android:targetActivity="com.poqstudio.app.platform.presentation.splash.view.SplashActivity"
... >
<intent-filter>
...
</intent-filter>
</activity-alias>
</application>

  • Add your icons to ChooseIconSettings:
    chooseIconSettings = {
    ChooseIconSettings(
    defaultAppIcon = AppIcon.Default(
    iconId = R.mipmap.ic_launcher,
    name = "Default",
    alias = "com.poqstudio.app.platform.presentation.splash.view.SplashActivity",
    cloneAlias = "com.poqstudio.app.platform.presentation.splash.view.DefaultCloneAlias",
    ),
    variantAppIconList = listOf(
    AppIcon.Variant(
    iconId = R.mipmap.ic_launcher_variant_1,
    name = "Variant 1",
    alias = "com.poqstudio.app.platform.presentation.splash.view.VariantAlias1",
    ),
    AppIcon.Variant(
    iconId = R.mipmap.ic_launcher_variant_2,
    name = "Variant 2",
    alias = "com.poqstudio.app.platform.presentation.splash.view.VariantAlias2",
    ),
    ),
    )
    }

Choose icon SDK is composed of this module:

How to remove an icon

Once an activity alias is enabled by a user, you cannot delete it or those users will loose the icon to the app. To remove an icon, you need to:

  • In your AndroidManifest.xml, on the activity alias to be hidden, replace the icon with the default one. User's icon with that activity alias enabled will be replaced by the default one.
  • On the AppIcon.Variant to be hidden, set isVisible = false when you provided via ChooseIconSettings
  • Delete the icon resource

Even when you cannot delete an activity alias, you can reuse it for similar campaings (i.e.: Halloween activity alias can be reused year after year). To do so, you need to add the new icon to the activity alias and set isVisible = true.

Koin modules

Choose icon dependencies are injected using Koin. When you include the module to your build.gradle, the Koin modules are included automatically. This is the Koin module included:

  • chooseIconModule

Choose icon SDK provides this deep link:

  • ChooseIcon(/app-icon): it opens ChooseIconActivity