79152820

Date: 2024-11-03 13:40:46
Score: 1.5
Natty:
Report link

Thanks to Mike M.

I found a workaround to change an icon without closing the app. All you need to create another config activity and set main activity's launch mode to single instance.

<activity
        android:name=".config.ConfigActivity"
        android:exported="true"
        android:enabled="true"
        android:icon="@mipmap/ic_light"
        android:screenOrientation="sensorPortrait"
        tools:ignore="DiscouragedApi,LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:enabled="false"
        android:icon="@mipmap/ic_light_round"
        android:launchMode="singleInstance"
        android:screenOrientation="sensorPortrait"
        tools:ignore="DiscouragedApi,LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity-alias
        android:name=".MainActivityDark"
        android:exported="true"
        android:enabled="false"
        android:icon="@mipmap/ic_dark_round"
        android:targetActivity=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

After this you have to do some manipulations:

· Enable main activity in onCreate() and start it with some extra - Boolean:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    this.enableMainActivity()
    startActivity(
        Intent(this, MainActivity::class.java).apply {
            putExtra("is_config", true)
        }
    )
}

· Disable config activity in onCreate():

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val isConfigNeeded = intent.getBooleanExtra("is_config", false)
    if (isConfigNeeded) {
        disableConfigActivity()
    }

    // UI
}

App will start closing, but don't worry. The only one step is ahead:

· Start main activity in config activity's onDestroy():

override fun onDestroy() {
    super.onDestroy()
    startActivity(Intent(this, MainActivity::class.java))
}

Thank you for the attention! Github repo: xo-tymoshenko/iconchange

Reasons:
  • Blacklisted phrase (0.5): Thank you
  • Blacklisted phrase (0.5): Thanks
  • Contains signature (1):
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: xo-tymoshenko