Не включать / выключать активность. Сделайте псевдонимы действий. Каждому псевдониму можно присвоить разные метки (которые отображаются как имя приложения) и значок. Вы должны дать разные имена (используемые для справки) для каждого псевдонима.
<activity android:name=".MainActivity">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter
</activity>
<activity-alias
android:label="Red app"
android:icon="@mipmap/icon_red"
android:name=".RED"
android:enabled="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:label="Blue app"
android:icon="@mipmap/icon_blue"
android:name=".BLUE"
android:enabled="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:label="Green app"
android:icon="@mipmap/icon_green"
android:name=".GREEN"
android:enabled="true"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
Переключите значок, включив / отключив эти псевдонимы. Было бы лучше, если бы вы сделали enum, чтобы прояснить ситуацию. Используйте этот код для переключения между различными псевдонимами действий:
KOTLIN
enum class ICON_COLOUR { RED, BLUE, GREEN }
private fun setIcon(targetColour: ICON_COLOUR) {
for (value in ICON_COLOUR.values()) {
val action = if (value == targetColour) {
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
} else {
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
}
packageManager.setComponentEnabledSetting(
ComponentName(BuildConfig.APPLICATION_ID, "${BuildConfig.APPLICATION_ID}.${value.name}"),
action, PackageManager.DONT_KILL_APP
)
}
}
JAVA (версия перечисления)
private enum ICON_COLOUR {
RED("RED"),
GREEN("GREEN"),
BLUE("BLUE"),
private String color;
Environment(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
private void setIcon(ICON_COLOUR targetColour) {
int action;
for (ICON_COLOUR value : ICON_COLOUR.values()) {
if (value == targetColour)
action = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
else
action = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
packageManager.setComponentEnabledSetting(
new ComponentName(BuildConfig.APPLICATION_ID, value.getColor()),
action, PackageManager.DONT_KILL_APP);
}
}
JAVA (String- версия массива)
private String []iconColour = {"RED", "GREEN", "BLUE"};
private void setIcon(String targetColour) {
int action;
for (String value : iconColour) {
if (value.equals(targetColour))
action = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
else
action = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
packageManager.setComponentEnabledSetting(
new ComponentName(BuildConfig.APPLICATION_ID, value),
action, PackageManager.DONT_KILL_APP);
}
}