Как Android-Разработчик Заинтересовался Тайм-Менеджментом И Что Из Этого Вышло

Привет, Хабр.

Я хочу признаться тебе.

Мне лень.

Эта темная тайна тщательно скрывается от других.

Поэтому никому ни слова не говорите.

Чтобы никто из окружающих об этом не догадался, придется постоянно работать.

Но часто во время работы меня отвлекают всякие посторонние вещи.

Читайте новости, просматривайте почту, историю сообщений.

В результате отвлекающие действия отнимают слишком много времени и страдает ваш имидж.

Иногда я близок к тому, чтобы быть разоблаченным.

Но однажды я нашел технику управления своим рабочим временем под названием «Помодоро».

И я написал приложение «Таймер рабочего человека».

Потому что я Android-разработчик!

Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Итак, под катом я расскажу о творческих метаниях, головоломках и прочих прелестях, сопровождающих творческий процесс.



Часть первая (вдумчивая)

Коротко о системе Помидор.

Мы разделим все наше рабочее время на определенные сегменты работы и отдыха, называемые «Помодоро» (название происходит от формы кухонного таймера, который использовал изобретатель метода Франческо Чирилло).

Общепринятое соотношение – 25 минут на работу и 5 на отдых.

Основная идея в том, что в рабочее время (25 минут) вы работаете/учитесь по-настоящему, ни на что не отвлекаясь (это абсолютно ничего).

Дальше делаешь что хочешь 5 минут (в рамках УК и общественной морали).

Прежде чем начать, вы составляете список того, сколько помидоров вы хотите потратить на каждую задачу.

Например: подготовка к экзамену – 3 штуки, изучение нового материала – 4 и т.д. По своему опыту могу сказать, что эта методика очень эффективна (естественно, я бы не советовала, не испытав ее на себе).

Изобретатель техники использовал кухонный таймер в форме помидора, отсюда и название.

Но использовать его в офисе и пугать коллег странным тиканием и неожиданными звонками – это не комильфо.

Поэтому я использовал секундомер на телефоне и блокнот. Но это тоже оказалось неудобно.

В Android Market имеется множество таймеров, использующих технику томата.

Хотелось чего-то своего, теплого и лампового, без дополнительных функций (по выражению моего бывшего начальника - «Свистульки, фокусы и фантики»), без рекламы и прочих сомнительных прелестей.

Кроме того, я хотел установить свои собственные периоды времени.

И что, захотелось написать свое приложение, как это делают взрослые.



Часть вторая (экспериментальная)

Первая версия выглядела просто и примитивно.

Таймер, кнопка, меню настроек.

Начальное состояние:

Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

В ходе выполнения:

Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

В меню настроек вы можете выбрать цвета шкалы и продолжительность этапов работы/отдыха.



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Таймер был отображен на Canvas. Но избавившись от таймера, я не избавился от листов расписания.

Поэтому я решил сделать полный ремонт.

Часть третья (перестройка)

Итак, в оригинальной системе тайм-менеджмента Pomodoro основная идея заключается в том, что вы заранее планируете, сколько времени потратите на ту или иную задачу.

Поэтому я решил дополнить список задач.

Но людям уже понравилась возможность работать без перерыва.

Поэтому старый функционал пришлось сохранить.

Вот как сейчас выглядит главное меню:

Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Для тех, кто хочет работать с обычным таймером, без заморочек с планированием, я оставил классическую версию, доступную по нажатию кнопки «Работа без списка задач» (на главном экране).

Вы сразу выбираете время работы/отдыха и работаете, как в первой версии.



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Также под ножом была возможность выбирать цвета по временной шкале.

Вместо этого было создано несколько гармоничных цветовых схем и возможность выбрать одну из них.

Со схемами у меня случился дикий танец с бубнами, который успешно разрешился (подробнее об этом ниже).



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Итак, если вы хотите создать новое расписание задач на день, то нажав на кнопку «Создать/загрузить список задач» , вы можете планировать свой рабочий день.

Кнопка «Добавить рабочий цикл» — добавляет задачу, разделенную на несколько этапов.

При этом каждый этап включает время для работы и небольшой перерыв.



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Каждые четыре помидора рекомендуется делать длительный перерыв от получаса до часа.

Именно поэтому была добавлена кнопка «Добавь перерыв» .



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Создав список задач, вы можете настроить его и сохранить.



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Таким образом, вы можете создать для себя несколько графиков сразу на неделю.



Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Длительное нажатие на элемент списка позволяет либо отредактировать список задач, либо начать с ним работать.

Рабочий экран выглядит так:

Как Android-разработчик заинтересовался тайм-менеджментом и что из этого вышло

Когда вы начинаете работать со списком, вверху вы видите название текущего этапа, его номер и количество этапов для данной задачи.

Ниже приведен список всех циклов (в скобках указано время работы и отдыха).

Основное место занимает основной таймер, как и из первой версии программы.

Если вы выполнили задание досрочно, то можете нажать на кнопку «Выполни задачу раньше срока» и тем самым удалить его из списка.

Если вы не уложились в график, то кнопка «Добавить цикл» , добавит к задаче еще один цикл.



Часть четвёртая (околотехническая)

Одной из загадок для меня было создание согласованных цветовых схем для приложения.

Я хотел сделать все в стиле Material. Но при тестировании на разных устройствах появились баги.

То, что выглядело прилично на Android 5.x, на 4.x выглядело ужасно.

В конце концов я пришел к такому решению.

Созданы наборы цветов Материала: файл цветов.

xml

  
  
  
   

<Эxml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#64B5F6</color> <color name="colorPrimaryDark">#2196F3</color> <color name="colorAccent">#0D47A1</color> <color name="colorPrimaryTeal">#4DB6AC</color> <color name="colorPrimaryDarkTeal">#009688</color> <color name="colorAccentTeal">#004D40</color> <color name="colorPrimaryGreen">#8BC34A</color> <color name="colorPrimaryDarkGreen">#689F38</color> <color name="colorAccentGreen">#33691E</color> <color name="colorPrimaryRed">#e57373</color> <color name="colorPrimaryDarkRed">#f44336</color> <color name="colorAccentRed">#b71c1c</color> <color name="colorPrimaryOrange">#FF5722</color> <color name="colorPrimaryDarkOrange">#E64A19</color> <color name="colorAccentOrange">#BF360C</color> <color name="colorPrimaryAmber">#FFD54F</color> <color name="colorPrimaryDarkAmber">#FFC107</color> <color name="colorAccentAmber">#FF6F00</color> <color name="colorPrimaryAutumn">#FF5722</color> <color name="colorPrimaryDarkAutumn">#4CAF50</color> <color name="colorAccentAutumn">#E64A19</color> <color name="colorPrimaryIndigo">#7986CB</color> <color name="colorPrimaryDarkIndigo">#3F51B5</color> <color name="colorAccentIndigo">#1A237E</color> <color name="colorPrimaryBlack">#9E9E9E</color> <color name="colorPrimaryDarkBlack">#616161</color> <color name="colorAccentBlack">#212121</color> <color name="colorText">#ffffff</color> <color name="colorTextHint">#c8ffffff</color> </resources>

И файл стиля: файл стилей.

xml

<resources> <style name="MyDialogStyle" parent="Theme.AppCompat.Dialog.Alert"> <item name="android:windowFrame">@null</item> <item name="android:textColor">@color/colorText</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">true</item> <item name="android:textSize">30sp</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowTitleStyle">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:background">@android:color/transparent</item> </style> <style name="BlueButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape</item> </style> <style name="GreenButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_green</item> </style> <style name="TealButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_teal</item> </style> <style name="AmberButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_amber</item> </style> <style name="BlackButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_black</item> </style> <style name="IndigoButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_indigo</item> </style> <style name="LightBlueButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_autumn</item> </style> <style name="OrangeButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_orange</item> </style> <style name="RedButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/button_shape_red</item> </style> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowBackground">@color/colorPrimaryDark</item> <item name="android:itemBackground">@color/colorPrimaryDark</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/BlueButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="AppTheme.Launcher"> <item name="android:windowBackground">@color/colorPrimaryDarkBlack</item> </style> <style name="TealTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryTeal</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkTeal</item> <item name="colorAccent">@color/colorAccentTeal</item> <item name="android:windowBackground">@color/colorPrimaryDarkTeal</item> <item name="android:itemBackground">@color/colorPrimaryDarkTeal</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/TealButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="GreenTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryGreen</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkGreen</item> <item name="colorAccent">@color/colorAccentGreen</item> <item name="android:windowBackground">@color/colorPrimaryDarkGreen</item> <item name="android:itemBackground">@color/colorPrimaryDarkGreen</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/GreenButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="AmberTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryAmber</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkAmber</item> <item name="colorAccent">@color/colorAccentAmber</item> <item name="android:windowBackground">@color/colorPrimaryDarkAmber</item> <item name="android:itemBackground">@color/colorPrimaryDarkAmber</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/AmberButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="BlackTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryBlack</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkBlack</item> <item name="colorAccent">@color/colorAccentBlack</item> <item name="android:windowBackground">@color/colorPrimaryDarkBlack</item> <item name="android:itemBackground">@color/colorPrimaryDarkBlack</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/BlackButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="IndigoTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryIndigo</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkIndigo</item> <item name="colorAccent">@color/colorAccentIndigo</item> <item name="android:windowBackground">@color/colorPrimaryDarkIndigo</item> <item name="android:itemBackground">@color/colorPrimaryDarkIndigo</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/IndigoButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="AutumnTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryAutumn</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkAutumn</item> <item name="colorAccent">@color/colorAccentAutumn</item> <item name="android:windowBackground">@color/colorPrimaryDarkAutumn</item> <item name="android:itemBackground">@color/colorPrimaryDarkAutumn</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/LightBlueButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="OrangeTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryOrange</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkOrange</item> <item name="colorAccent">@color/colorAccentOrange</item> <item name="android:windowBackground">@color/colorPrimaryDarkOrange</item> <item name="android:itemBackground">@color/colorPrimaryDarkOrange</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/OrangeButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="RedTheme" parent="AppTheme"> <item name="colorPrimary">@color/colorPrimaryRed</item> <item name="colorPrimaryDark">@color/colorPrimaryDarkRed</item> <item name="colorAccent">@color/colorAccentRed</item> <item name="android:windowBackground">@color/colorPrimaryDarkRed</item> <item name="android:itemBackground">@color/colorPrimaryDarkRed</item> <item name="android:itemTextAppearance">@android:style/TextAppearance.Large</item> <item name="android:textColor">@color/colorText</item> <item name="android:textColorHint">@color/colorTextHint</item> <item name="buttonStyle">@style/RedButtonStyle</item> <item name="dialogTheme">@style/MyDialogStyle</item> <item name="alertDialogTheme">@style/MyDialogStyle</item> </style> </resources>

И для каждой схемы мне пришлось создавать свою форму для кнопки.

Например, для схемы «Индиго»: Файл button_shape_indigo.xml

<Эxml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android " android:shape="rectangle "> <corners android:radius="15dp"/ > <solid android:color="@color/colorPrimaryIndigo"/ > <stroke android:width="2dp " android:color="@color/colorPrimaryDarkIndigo"/ > <padding android:left="40dp " android:right="40dp " android:bottom="10dp " android:top="10dp"/ > </shape>

Во фрагменте настроек указывалось имя схемы и при старте любого действия (в onCreate) выполнялся следующий код: Функция выбора темы

public static void setNewTheme(Context mContext){ SharedPreferences sp; sp = PreferenceManager.getDefaultSharedPreferences(mContext); String colorScheme = sp.getString("colorScheme", "blue"); if(colorScheme.equals("blue")) mContext.setTheme(R.style.AppTheme); else if (colorScheme.equals("green")) mContext.setTheme(R.style.GreenTheme); else if (colorScheme.equals("teal")) mContext.setTheme(R.style.TealTheme); else if (colorScheme.equals("amber")) mContext.setTheme(R.style.AmberTheme); else if (colorScheme.equals("black")) mContext.setTheme(R.style.BlackTheme); else if (colorScheme.equals("indigo")) mContext.setTheme(R.style.IndigoTheme); else if (colorScheme.equals("autumn")) mContext.setTheme(R.style.AutumnTheme); else if (colorScheme.equals("orange")) mContext.setTheme(R.style.OrangeTheme); else if (colorScheme.equals("red")) mContext.setTheme(R.style.RedTheme); }



Часть пятая (рекламная и немного скандальная)

Приложение изначально писалось для себя.

И поэтому я не видел смысла вкладывать какие-либо средства в рекламную кампанию.

На всякий случай я перевел приложение на английский язык.

И посидев в векторном редакторе, я минут за 15 создал иконку и основное изображение (то, что вверху поста).

Выложил приложение на 4pda. Всего было около 150 загрузок.

Также я пишу истории из своей жизни на Пикабу.

Людям нравится, есть подписчики.

Поэтому я разместил два поста (про первую и вторую версии соответственно, последовательно по мере выхода версий).

Но к сожалению, парочка троллей решила «пошутить» и набросилась на модератора с жалобой, что «мол это реклама приложения, а правилами это запрещено».

Модератор, не разобравшись в теме про первую версию, удалил ее и наложил бан на две недели.

Но письмо в поддержку решило эту проблему, и админы разблокировали статью.

Правда, тролль не успокоился и потребовал «Забанить его за неграмотность русского языка и пунктуации!» », но, ухватившись за минусы, успешно слился.

Второй пост, про новую версию троллить уже не пытались.

В целом аудитория приняла заявку положительно, было указано (исправлено) несколько ошибок.

Вот собственно и вся моя история написания приложения.

Естественно, приложение доступно бесплатно и без рекламы.

Автор не получает никакой материальной выгоды, кроме морального удовлетворения (и немного для удовлетворения мании величия) и желания поделиться с сообществом полезным инструментом.

Тогда позвольте мне уйти.

Надеюсь, это будет кому-то полезно.

Если у кого-то есть какие-либо комментарии или советы, я буду очень рад их услышать.

Теги: #Android #pomodoro #тайм-менеджмент #Разработка мобильных приложений #Разработка Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.