Perhaps I'll start again. It was a distant 2015, August, I was a 6th year student and began to think about my thesis work. After completing the course of developing mobile applications for the 4th year, I wanted to write something for Android. And at home, home theater was already installed for half a year (a projector, a screen and an audio panel connected to a desktop PC). And I managed all this good through AIORemote.
But there were a couple of moments that I really didn’t like in this scheme: although the control of the main video player controls that I use (MPC - HC) was present, I had to switch to the remote touchpad to start the video or delete it.
In general, it was already convenient to make life more comfortable for a long time, and then a goal, an incentive and an opportunity appeared.
It all started with the idea to create an application for remote control of a home theater. A search on Google Play revealed that there are analogues (a bunch of applications for remote control MPC - HC, as well as universal ones for remote control of a computer). The catch is that there were no strictly defined functions that I needed. So you need to invent your bike.
')
Step one
For a start I sketched a sketch as I see the main screen of the application - a screen with controls.
On the left - the initial sketch, on the right - what happened for the current dayIn parallel with this, I began searching for a library that would facilitate access to the video player API. I found MPC_API_LIB, written either by the Spaniard, or by the Italian (judging by the comments in the source code).
Just a mobile application can only interact with the player, and then through the WEB-interface (left it as a last resort), so you need a server part. But on what to write the server? It is planned to run on Windows, so .NET is suitable. Or Java? By this time, I had the same level of knowledge of .NET and Java, and I decided to write on .NET.
Step two
Manage the computer's audio outputs. My audio panel is connected to a computer, the computer also has speakers. And one of the most annoying things when you start watching a movie is sound switching. I found out that there are utilities that imitate a call to the system window with sound settings. But I also found an interesting utility
DefSound , which uses system libraries. Exactly what is needed. I start switching audio devices in the application to it.
Step Three
By December 15th I create the first version that switches audio, controls playback and other multimedia functions. In parallel with this, I am writing documentation (since I have the same diploma) and register a developer account with Google. At this point, the Hindu working code has been written.
The development was a little complicated by the fact that I do not have such an Android-smartphone. But there is a Blackberry Z30. And in it Android runtime 4.3 is sewn up. Therefore, tests in real conditions were on it.
Step Four
I think about monetization of the application. I choose, as it seems to me now, the most wrong option: paid and free versions. The server is a console application with settings via a config-file, everything must be specified manually. From the very beginning, it was decided to translate the application into English (having slightly exploited the translator's spouse).
Spent a lot of time thinking about how to make the ActionBar work equally on all devices. Finally, compiled a style based on the AppCompat library:
<resources> <style name="MyTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyActionBarStyle</item> <item name="actionBarStyle">@style/MyActionBarStyle</item> <item name="actionMenuTextColor">@color/textColor</item> </style> <style name="MyActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:logo">@mipmap/ic_launcher</item> <item name="logo">@mipmap/ic_launcher</item> <item name="android:displayOptions">showHome|useLogo</item> <item name="displayOptions">showHome|useLogo</item> </style> </resources>
Embedding advertising in an application requires some concessions. For example, I reconciled with the fact that the weight of the application has increased three times (at the moment from 2.4MB to 6.5MB), as well as with a set of permissions:
Without advertising:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
with advertising:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Work with Toast'ami during development also had to rethink, so as not to accumulate a bunch of toast'ov, not had time to seem:
public class SingleToast { private static Toast mToast; public static void show(Context context, String text) { show(context, text, Toast.LENGTH_SHORT); } public static void show(final Context context, final String text, final int duration) { Handler shower = new Handler(Looper.getMainLooper()); shower.post(new Runnable() { @Override public void run() { if (mToast != null) { mToast.cancel(); } mToast = Toast.makeText(context, text, duration); mToast.show(); } }); } public static void hide() { if (mToast != null) { mToast.cancel(); } } public static Toast getToast() { return mToast; } }
The response from the server comes in JSON format, but the parsing mechanism on the client has not yet been refactored and the classes from org.json are used. Although the library com.fasterxml.jackson is connected and competent work with JSON is planned.
Step five
At the beginning of the summer of the 16th, a month before passing the diploma, the application is presented in a more or less presentable form. Suddenly there was a question with an icon. On the Internet icons on a similar topic is complete, but copyrights and all kinds of licenses are alarming. I'm not an artist, but I sometimes use Photoshop. Therefore, at this stage I reinvent the wheel.

The mobile application requires a server running on a PC. And it must somehow spread. Well, you need a website.
Step Six
I create a static site for storing and distributing the server side. Naked HTML + CSS. I publish the application in Google play. And here with the first publication there was a hitch (which, by the way, is still not resolved). He first published the beta version and asked his friends to test. Then translated into release. And then a friend says that he can not leave a review and evaluate the application.

Correspondence in technical support did not bring fruit and I saw the only option - to publish again. Fortunately, the second publication successfully took root and it all worked. I managed to insert screenshots from the Google play page into my graduation presentation (as it turned out later - it had a weight on defense). Meanwhile, I'm going to take a diploma ...
Our days
After passing the diploma, the desire to develop the project did not diminish (although I expected that after the disappearance of the stimulus, it might get bored). The site has been translated to PHP for easy administration. I laid half of the development of the site on the shoulders of my wife, which is why work on the project turned out to be a family one. The application gradually added new features that were invented as they were used. For the year of development apache.http, which I originally used (and use to this day) managed to become legacy. Android N released. Android Studio 2 released.
At the moment, the server part has been reworked - rewritten to WPF, localized into English (initially there were only English explanations in the settings file).
Statistics
At the moment, downloads more than 2k:

Very few active, and the project can be considered a failure. But for some reason I do not think so. A lot of experience was gained at each step.
The project was invested $ 25 per account and a lot of personal time, but initially there was no goal to earn. Rather, I see it as a hobby, if only because I do it in my free time. And because it brings pleasure.