Android: запуск дефолтного ланчера

Есть неочевидная ситуация: вы пишете лаунчер лончер или что-то его заменяющее, отдебажили, всё работало. Конечно же, вы поставили его как програму по умолчанию и теперь он стартует вместо дефолтого. И вдруг, вылезает некая бага, которая начинает крушить, бомбить ронять телефон, перезапуская приложение. Перезапустится, конечно же, то, что упало, а упал лончер. И он снова падает. Development mode в продакшене отключён. Ну вы поняли.

На самом деле бывают ситуации ещё хуже, например, для vendor lock-in приложений, которые вообще скрывают, что они работают под андроид.

Предвкушая первую мысль как вернуть дефолтный лончер: вызвать в приложении finish(). Чёрт, это же домашний экран %)



Intent intent = null;
final PackageManager packageManager = getPackageManager();
Intent launcherFilter = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME);
Collection launchers = packageManager.queryIntentActivities(launcherFilter, PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo resolveInfo: launchers) {
if (!getPackageName().equals(resolveInfo.activityInfo.packageName)){
// Select first "home" app but not self
intent = packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
break;
}
}
if (intent != null) {
startActivity(intent);
finish();
}

Теперь есть backdoor для выхода “в систему” :)