18 декабря 2010

Git svn & Mac OS X

The world's most advanced operating system под названием Snow Leopard она же Mac OS 10.6, выпущенная в 2009 году, сегодня преподнесла мне сюрприз. Сюрприз был в виде стоического отказа git svn делать rebase, под предлогом того, что "The following untracked working tree files would be overwritten by checkout..." и далее путь к некоему файлу в репозитории, над которым работал коллега. Некоторое гугление и эксперименты показали, что коллега файл просто переименовал, обозвав в другом регистре, самая продвинутая операционная система макось в 21 веке имеет нечувствительную к регистру файловую систему по умолчанию, выполняя checkout на которой git видит странное - он этот файл и так, и этак, а он никак... Пришлось его немного сломать:
sed -i '' 's/checkout/checkout -f/g' /usr/local/Cellar/git/1.7.3.1/libexec/git-core/git-rebase
Аналогичный приём может применяться и к другим ситуациям с такими же симптомами. Просто нужно знать, где ударить и, главное, где забрать свои 100 рублей.

05 декабря 2010

Android tricks

Не так давно возникла потребность узнать, запущено ли приложение в прямом смысле этого слова, а не в том, как его понимает андроид. То есть был ли это запуск из лончера, иконки на рабочем столе, нотификации после установки или же просто приложение было показано при переходе к нему по стеку истории. Определяет это вот такой код, помещённый в onCreate() главной Activity:

protected boolean isLaunch()
{
Intent i = getIntent();
return i != null &&
((i.getCategories()!= null && i.getCategories().contains(Intent.CATEGORY_LAUNCHER)) || // from launcher
Intent.ACTION_MAIN.equalsIgnoreCase(i.getAction())) && // or first launch from notification panel
getLastNonConfigurationInstance() == null; // orientation change
}


Другой небольшой трюк - как дать возможность послать что-то в Gmail, SMS, Twitter и пр. Пользователи Андроида знают это меню "Отправить". А отправить вот как:
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "title");
sendIntent.putExtra(Intent.EXTRA_TEXT, "description");
Intent intent = Intent.createChooser(sendIntent,
getString(R.string.AndroidProgramItemActionShare));
startActivity(intent);

Все программы, которые могут принять текст, будут показаны в этом списке.