 Hi. So first of all, I would like to know how many of you are developing apps that are targeted at Indian audience? That's a good number. So how many of you support up to Android, really old version of Android, maybe 2.3? How many languages do you support? Three. So what here I'm going to talk about is how, so there are two things I am going to talk about. One, how you can accept input in the local language. And another is that how can you develop an app which you can support, really old version, and not just three, you can support all official languages in India. So this is an old version of Android. And this is Canada Wikipedia. If you go to Canada Wikipedia, this is how you see. So this is one of the real problems you might face if you try to develop an app. And then you will say that, OK, I can embed font and I can overcome this issue in my app. So if you try to embed, this is how it will look. If you can read Malayalam, you can see that the rendering is not proper. Even if you embed a font, the characters are not rendering properly. And if you want to see how many languages your font supports, you can go to this URL. I have a set of languages and they're like in the local character. You can see how many your fonts are supporting. I can show you some samples. So this is Moto G1 and Android 5.1 version. You can see that some of the languages are supported. Gujarati is missing, Oriya is missing, Punjabi is missing, and a few more languages are missing. At the same time, this is Sony. So they're supporting Gujarati, but Gujarati and Punjabi are supporting. But Oriya is missing and Santali is missing. This is Galaxy Note 5. They have almost all except Santali. So you can see more screenshots in this URL. It's a good job. We are trying to collect as much screenshots as we can. And OK, so then you would ask, why do I need to support all the versions of Android? So this is from an app which is targeted in the Indian audience. You can see that Android 4.4 and 4.2 are still the most popular OS which is right now in India. And the screenshots I showed is in Android 5.1. So if Android 5.1 support is bad, then you can expect how worse it is in 4.4 and 4.2. And also, if you try to make a map by supporting newer versions, you will get comments like this. No Malayalam support, no Oriya language is not available, Gujarati is not supporting, or some will be specific to the phone itself or manufacturer itself. Here, this app is getting a lot of reviews on Huawei devices saying that it's not working in them. And also, people are really emotional about this. And so let's go to history of Android and how Indic support came in Android. So Hindi support was there in Android for a long time. But Hindi is not the only language in India. There are 22 official languages. And one of the main problem was a lot of languages are complex, and they are using complex script. And the rendering engine, which was in the Android, was not supporting it. Because of that, even if you embed phone with your app, it won't render properly for every single device that is up there. And the new rendering engine, half-bus-ng, was introduced in 4.2, which fixed a lot of these rendering issues. And Google also came up with a set of fonts called Autostans. If you can read, I don't think you can read. So the screenshot above is from 4.4. The number of fonts supported in fonts that is for Indian and other non-Latin languages were very less. And when you come to 5.0, which is below, you can see that the improvement they did in 5.0. Mostly because of the number of fonts they added in Autostans. And if you develop Android app for Indian languages, these are the main challenges you will face. Lack of fonts, even if the official Android supports it, some manufacturer will choose not to support it. The same version of Android will be having two different ways. And also, input method support. So recently, we started seeing a lot of new input methods coming for non-Hindi languages. And also, as I said, rendering issues. Rendering is the most important issue you will face. And also, application size, a lot of applications that are targeted in India cannot go more than maximum 10 MB. Because the memory which manufacturers are giving for these low end fonts are very low. And you can install only maybe a couple of apps. After that, it will be over. And here, we have a project called Indic Project. We are trying to solve a lot of these issues, not just for Android. This is overall Android and desktop and all other mobile. So we have keyboard for Android. It's called Indic Keyboard. Then, Warnum is another input method. It's for desktop and it's C-based transliteration library. Then there is a keyboard for Firefox OS. Then we have other projects, Journey and iBus, which are helping in accessibility. And we have another project called Grandum, which is for bibliography. And for developers, we have two projects called LibIndic and LibIndic SDK. LibIndic is a Python-based library, which will act as a REST library in web. And you can use that to support Indian languages in your desktop apps. And it's called Indic Keyboard. So Indic Keyboard is a keyboard project, which we started almost two years back. Now we have about 300,000 downloads. It was one of the most popular Indian language input method till a few days back when Google changed their Google Hindi input method to the same name. And now they're ranking first. And so this was something which was not there when I submitted this talk. And now I have to show this. Because of that, I added one more slide, just comparing the difference between Google's Indic Keyboard and our Indic Keyboard. Google's is proprietary, and it supports 11 Indian languages and English 12 languages. And also it has 23 layouts. We have 23 languages and 55 layouts. And these are the languages we support, Assamese Bengali, Gujarati, Hindi. And along with all these, since this app became really popular, we got requests from other parts of the world to add their language. One came from Burma saying that we want Mon and Burmese. And we added that. Then Arabian countries, people say that we want to type in both Indian language and Arabic. So we added Arabic support. Tamil people came. We want Singhalese. So we added Singhalese like that. Not all of them are Indian languages because of this. Like people wanted to type in India. People who are abroad, and they want to type in Indian language and their language. So then, yeah, like the app, we were facing the issue lack of phones and all these rendering issues. The initial reviews which are short is for our input method. People are really emotional about it. And the solution we made was we extended Android's ASP keyboard. And we added 20 plus languages, 50 plus layout, and made it free and open source. Also, a lot of people complained that we can't trust you. So we then removed internet permission just to get there. Then dictionary was another issue. So a lot of these languages didn't have dictionary which we can use it for the keyboard. So we need dictionary to show suggestions when I use a type. These are some of the layouts. If you install the app, you can go to language set, and you can see this. And this is the layouts which we have. We have in four categories, oneness, transliteration. It is pretty straightforward. If you type an English word which sounds to a local language, it will convert into that language. Here, I am typing wiki, and it is converting to wiki, and it is suggesting other words which are related to wiki. And another layout is called compact, which where we try to fit all the characters in one layer so that if you see English keyboard layout, there are two layers, one capital letter layer and small letter layer. In compact layout, in Indian languages, it is difficult to fit everything in one layer. The compact layouts are trying to overcome that issue. What we are trying to do is in long press, we show more characters. If it is ka, then the characters which are related to ka will be in long press. Another is phonetic, which is, phonetic is pretty much straightforward. We place similar sounding character in the place of that English character. For example, in place of a, there will be a character which sounds same in that particular language. And another one is in script. We didn't have it initially because it is not optimized for mobile. This is the, in script is a standard introduced by government of India for desktop layouts. And we had to stop support because a lot of people who are coming from desktop, they wanted to type in the same format they are used to in the desktop. And for transliteration, what we did is there's a popular library called jQuery. I mean, this is for web. We had a Java port, and we then later converted it into Android port, which we integrated into Android ASP keyboard. Then we were able to introduce transliteration. And also for dictionary, we didn't have dictionary. And also for suggestion, what we needed was we needed priority. So if you type a word, the words which are showing are based on priority. So for that, what we did is we wrote a custom script, which will take dump of Wikipedia database in that particular language. For example, Hindi Wikipedia dump is taken. And then this script, which will create priority based on the frequency a particular word is appearing in that language. And this app is available in both Google Play and Android. And so for developers, if you are interested in contributing, you can contribute by adding layouts. You can add more languages. Also, you can help in documenting. And for end users, you can contribute us by helping in testing all these layouts. So one of the problems which we are facing is a lot of these layouts are generated by people who doesn't speak that language. So there might be some issues that came just because of that. So for that, what we did is we used Unicode character details every single character. We had to look at the Unicode database and understand the key. So in that process, we might have missed some characters or some parts. So you can let us know by testing it. And also, if you are a developer, you can go to our GitHub or GitLab website and look at the issues tab. You can see the issues which are there. So right now, there are some layouts which we want to add. And there are some issues that are reported by users. So if you are interested, you can go out there and fix it. We tagged it based on difficulty. So if you are a beginner, you can look at any of the issues which is tagged as beginners. And if you are interested in compiling, I would suggest to clone the repo and then go to Java folder inside that. We use Gradle for compiling. It's a pretty good way if you are using command line. Straightforward, like if you're comfortable with Gradle, you can use the keyboard, compile the keyboard. Second part is that libindic.stga. This is something which is targeted at developers who are facing the problem of supporting all the Indian languages. So also another problem is that there aren't many free and open source libraries available. There are some companies working on a similar project, but it is proprietary and closed source. And the solution we have is we have 15 plus language computing algorithms which are targeted at Indian languages. And some of them are language detection, cross-language search, script rendering. And you can see all the libraries. If you go to this URL, all the libraries are open source. And this is one of the library, which is called script renderer. Here I am opening our demo app which we created. So here I am opening it in the same mobile, which I showed initially, where Canada was not rendering properly. If you look at the table on the right side, it is a default rendering from the OS. And the middle part is the rendering if you use the rendering library in Indiclib. And we have a demo app. And these are the current libraries which we have. And use cases of this is like, if you want to support all the version, you can use the library. Or if you want to input, if you want user to input on your app and doesn't want user to install a custom keyboard, then you can do this. The language input, we have a transliteration library. So if user types in English, it will, in the text box itself, it will convert automatically. Then rendering, if you want to show a content, if you use a particular view from the library, it will auto render, all languages will be supported. And if you want to use this in app, you can add directly add in Gradle. It's like this. So here I am trying to add transliteration library. SDK common and SDK render are the dependency for transliteration. So I can show you demo of, this is a SDK demo app which we created. So if you type, so the transliteration input can be taken in two ways. One is an like normal edit text view where you can take the input and on button press it will convert into whatever language you selected. You can select all these languages. Or you can have something like auto translation. If you look at the bottom text view, whatever I type, it will automatically translate. You don't need to, so this is a phone which doesn't have the Malalam or any Indian language in it. It doesn't have phone, it phone doesn't support proper rendering. And here, this text view, it auto converts whenever you type something. And it's not just, you can also edit a text. So whatever I type, you can press back, press, and edit it. And the library is Fortune where, like Fortune cookie, you will get Fortune messages in local language. Here we have for Tamil and Malayalam. And this is the demo app for Renderer. Here is a rendering. And these are the languages in text box. It is working. I can edit. And also you can, if you have a custom word, you can enter it here and output to whatever size you want. Suppose if you want to use transliteration in your app, you can import it in dependencies of your build out graded file. And then in layout, instead of a normal edit text view, you can add a libindic edit text view and add these two extra keys, transliteration, target language, and text output to. So if you are interested in contributing, because all these SDKs which we created are still in somewhat beta stage, because we are still waiting for developers to adopt it and make use in their app. So you can use it in your app and give us feedback. You can also use it and find bugs and let us know. And also you can contribute additional algorithms, like we have 15 algorithms right now. You can contribute additional algorithms. And if you want to build it on your machine, you can clone the libindic SDK Git repo and do normal gradle. You can do assemble debug over to assemble build. So if you do assemble build in SDK repo, you will get an output in demo app, demo folder. You will get an APK. So these are the things which we did. Now we would like Google to use a few things in Naio's P, so that all the manufacturers will support, the language support in all devices will be same for a particular Android version. So whenever if you want to introduce Google Apps in your device, manufacturers have to do a CTS test. So Google can, it's an easy task. They can add a language test in it. It can be, in that case, all the manufacturers with a particular version will have consistent support, which is not there. Maybe I'm wrong, but I looked at the CTS code. It was not there. And also the support libraries like we created, the render library, we would like to see similar libraries from Google and ASP. Yeah, that's all. If you have any questions, you can ask. Explain a little more about how the script renderer works. So what we did is we cross-compiled half-busNG. And we compiled it along with the SDK. And we wrote the JNIL error so that all the Java code rendering call will go to half-bus. And we generate image and give it back as output. Can we use it for offline? Yeah, yeah. All this is running in offline. And did you even check out how many devices it actually supports? It should support up to 2.0 of Android, 2.2 of Android. But we didn't test it much. And you guys actually can do one thing. Like in ASP, you can provide your lib. And you can submit your code to ASP. I'm sure Google can now take power from there. I know pushing something there is actually a big headache. And I have gone through. I can understand your pain as well. For the libindig SDK, since you're supporting so many languages, is it possible for me to get a fork for only a set of languages, like if I only want to support Hindi and Tamil? Because you'll keep adding languages in that increase, maybe increase the size of the library. One thing is that all these SDKs, for example, if you want to use only renderer, you can use only renderer. You don't need to use all the libraries. So from there, you can do a stripped-down version of it. So you don't need to use everything from Maven Central. You can clone the code and remove whatever you don't want. And when you build, add it as a dependency project, and then you can build. Is there a chance that you will add it in your own Maven repo for these folks? Where? Is there a chance? Are you planning to add these folks in your own Maven repo so that it's not that loud? Yeah. It's a good idea. We'll think about it. I had a question. Thanks for your talk. This is really quite impressive. You mentioned that still edit the Indian text, even if the platform didn't support it. So you had that custom class for edit text. Could you give a bit more detail on how you achieve that, how you can still edit it and do backspaces, even if the platform doesn't support it? Some details would be really valuable. Like deleting it from the middle is still a little bit tricky. But if you can go to the end of the word or starting of the word, but middle of the word, now it is tricky. It's not supported. What else are you asking? Do you render directly into the? So we have our own custom text edit view. That is doing all this thing in the background. I'll go directly onto the rectangles. So is your library completely text-based or is there any voice support? Like voice support for regional dialects, sir? No, no voice support. It's a really different problem. You need a lot of data inputs and all this. It's a complex problem. We have plenty time for more questions. So whatever the factors you have taken care of, since definitely we are going to use as a library or as an AR file. So definitely you have taken some factors or considered so that there is no lagging of performance issue or something like that. So we are not in a stage where we can benchmark and improve performance because we are still waiting for developers to adopt it. We are not seeing many developers using it in their app. So it's not the right time to go and improve the performance. So what is the size like? So this SDK, the demo app is 9MB. It has all the 15 libraries. It is 9MB. We do have time for more questions. OK. So thank you, Dishnu, for the talk. And so you just got feedback farms. We really value what the audience thinks every year about our editions of DroidCon. Please fill out the feedback farms. And there's a lot of questions.