Dicio assistant app for Android

Overview

Dicio assistant

Dicio is a free and open source voice assistant running on Android. It supports many different skills and input/output methods, and it provides both speech and graphical feedback to a question. It uses Vosk for speech to text. It has multilanguage support, and is currently available in these languages: English, German, Italian and Russian. Open to contributions :-D

Skills

Currently Dicio answers questions about:

  • search: looks up information on DuckDuckGo (and in the future more engines) - Search for Dicio
  • weather: collects weather information from OpenWeatherMap - What's the weather like?
  • lyrics: shows Genius lyrics for songs - What's the song that goes we will we will rock you?
  • open: opens an app on your device - Open NewPipe
  • calculator: evaluates basic calculations - What is four thousand and two times three minus a million divided by three hundred?

Speech to text

Dicio uses Vosk as its speech to text (STT) engine. In order to be able to run on every phone small models are employed, weighing ~50MB. The download from here starts automatically whenever needed, so the app language can be changed seamlessly.

Contributing

Dicio's code is not only here! The repository with the compiler for sentences language files is at dicio-sentences-compiler, the code taking care of input matching and skill interfaces is at dicio-skill and the number parser and formatter is at dicio-numbers.

When contributing keep in mind that other people may have needs and views different than yours, so please respect them. For any question feel free to contact the project team at @Stypox.

Translating

If you want to translate Dicio to a new language you have to follow these steps:

  • Translate the sentences used by Dicio to identify a user's request and to feed it to the correct skill. To do this open the repository root and navigate to app/src/main/sentences/. Copy-paste the en folder (i.e. the one containing English translations) and call the new folder with the 2- or 3-letter name of your language (in particular, any ISO-639-compliant language ID is supported). Then open the newly created folder: inside there should be some files with the .dslf extension and in English language. Open each one of them and translate the English content; feel free to add/remove sentences if their translation does not fit into your language and remember those sentences need to identify as better as possible what the user said. Do NOT edit the name of the copied files or the first line in them (i.e. the ID: SPECIFICITY line, like weather: high): they should remain English. To learn about the Dicio sentences language syntax, please refer to the documentation and the example in dicio-sentences-compiler. Hopefully in the future a custom translation system will be used for sentences.

  • Once both the Weblate and the sentences translations are ready, add the new language to the app's language selector. You can do so by editing this file:

    1. Add the language code in the language code array pref_language_entry_values. You must respect the alphabetic order. You can find the language code with Weblate: click on a language to translate, and the language code is in the last part of the URL. For example, English is https://hosted.weblate.org/projects/newpipe/strings/en, and English language code is en.
    2. Add the language name in the language name array pref_language_entries. It must be placed at the same index as language code. For instance, if en is the 3rd on the language code array, then it's the 3rd on the language name array, too.
  • Then update the app descriptions so that people know that the language you are adding is supported. The files you should edit are README.md (i.e. the file you are currently viewing) and fastlane/metadata/android/en-US/full_description.txt (the English description for F-Droid).

  • Open a pull request containing both the translated sentences files, the language selector addition and the app descriptions updates. You may want to take a look at the pull request that added German, #19, and if you need help don't hesitate to ask :-)

Adding skills

A skill is a component that enables the assistant to understand some specific queries and act accordingly. While reading the instructions, keep in mind the skill structure description on the dicio-skill repo, the javadocs of the methods being implemented and the code of the already implemented skills. In order to add a skill to Dicio you have to follow the steps below, where SKILL_ID is the computer readable name of the skill (e.g. weather).

1. Sentences

Create a file named SKILL_ID.dslf (e.g. weather.dslf) under app/src/main/sentences/en/: it will contain the sentences the skill should recognize.

  1. Add a section to the file by putting SKILL_ID: SPECIFICITY (e.g. weather: high) on the first line, where SPECIFICITY can be high, medium or low. Choose the specificity wisely: for example, a section that matches queries about phone calls is very specific, while one that matches every question about famous people has a lower specificity.
  2. Fill the rest of the file with sentences according to the dicio-sentences-language's syntax.
  3. [Optional] If you need to, you can add other sections by adding another SECTION_NAME: SPECIFICITY to the same file (check out the calculator skill for why that could be useful). For style reasons, always prefix the section name with SKILL_ID_ (e.g. calculator_operators).
  4. [Optional] Note that you may choose not to use the standard recognizer; in that case create a class in the skill package overriding InputRecognizer. If you do so, replace any reference to StandardRecognizer with your recognizer and any reference to StandardResult with the result type of your recognizer, while reading the steps below.
  5. Try to build the app: if it succeeds you did everything right, otherwise you will get errors pointing to syntax errors in the .dslf file.

2. Subpackage

Create a subpackage that will contain all of the classes you are about to add: org.dicio.dicio_android.skills.SKILLID (e.g. org.dicio.dicio_android.skills.weather).

3. Output generator

Create a class named SKILL_IDOutput (e.g. WeatherOutput): it will contain the code that talks, displays information or does actions. It will not contain code that fetches data from the internet or does calculations.

  1. Create a subclass named Data and add to that class some public fields representing the input to the output generator, i.e. all of the data needed to provide an output.
  2. Have the class implement OutputGenerator (e.g. WeatherOutput implements OutputGenerator )
  3. Override the generate() method and implement the output behaviour of the skill. In particular, use SpeechOutputDevice for speech output and GraphicalOutputDevice for graphical output.

4. Intermediate processor

Create a class named PROCESSOR_NAMEProcessor (e.g. OpenWeatherMapProcessor): it will contain the code needed to turn the recognized data into data ready to be outputted. Note that the name of the class is not based on the skill id but on what is actually being done.

  1. Have the class implement IntermediateProcessor (e.g. OpenWeatherMapProcessor implements IntermediateProcessor ). StandardResult is the input data for the processor, generated by StandardRecognizer after having understood a user's sentence; SKILL_IDOutput.Data, from 3.2, is the output data from the processor to feed to the OutputGenerator.
  2. Override the process() method and put there any code making network requests or calculations, then return data ready to be outputted. For example, the weather skill gets the weather information for the city you asked for.
  3. [Optional] There could be more than one processor for the same skill: you can chain them or use different ones based on some conditions (see 3.3). The search skill, for example, allows the user to choose the search engine, and has a different processor for each engine.

5. Skill info

Create a class named SKILL_IDInfo (e.g. WeatherInfo) overriding SkillInfo: it will contain all of the information needed to manage your skill.

  1. Create a constructor taking no arguments and initialize super with the skill id (e.g. "weather"), a human readable name, a description, an icon (add Android resources for these last three) and finally whether the skill will have some tunable settings (more on this at point 5.4)
  2. Override the isAvailable() method and return whether the skill can be used under the circumstances the user is in (e.g. check whether the recognizer sentences are translated into the user language with isSectionAvailable(SECTION_NAME) (see 1.1) or check whether context.getNumberParserFormatter() != null, if your skill uses number parsing and formatting).
  3. Override the build() method. This is the core method of SkillInfo, as it actually builds a skill. You shall use ChainSkill.Builder() to achieve that: it will create a skill that recognizes input, then passes the recognized input to the intermediate processor(s) which in turn provides the output generator with something to output.
    1. Add .recognize(new StandardRecognizer(getSection(SectionsGenerated.SECTION_NAME))) as the first function. SECTION_NAME is SKILL_ID, if you followed the naming scheme from 1.1, e.g. SectionsGenerated.weather.
    2. Add .process(new PROCESSOR_NAMEProcessor()): add the processor you built at step 4, e.g. new OpenWeatherMapProcessor().
    3. [Optional] Implement here any condition on processors: for example, query settings to choose the service the user wants, etc. If you wish, you can chain multiple processors together; just make sure the output/input types of consecutive processors match. For an example of this check out the search skill, that uses the search engine chosen by the user.
    4. At the end add `.output
  4. [Optional] If your skill wants to present some preferences to the user, it has to do so by overriding getPreferenceFragment() (return null otherwise). Create a subclass of SKILL_IDInfo named Preferences extending PreferenceFragmentCompat (Android requires you not to use anonymous classes) and override the onCreatePreferences() as you would do normally. getPreferenceFragment() should then return new Preferences(). Make sure the hasPreferences parameter you use in the constructor (see 5.1) reflects whether there are preferences or not.

Notes

  • skillContext is provided in many places and can be used to access resources and services, similarly to Andorid's context.
  • If your input recognizer, processor or output generator use some resources that need to be cleaned up in order not to create memory leaks, make sure to override the cleanup() method.
  • If the skill doesn't do any processing (e.g. it may just answer with random quotes from famous people after a request for quotes by the user) you may skip step 4 above. Also skip 3.1 in that case, and have SKILL_IDOutput implement OutputGenerator .
  • The names used for things (files, classes, packages, sections, etc.) are not mandatory, but they help avoiding confusion, so try to stick to them.
  • When committing changes about a skill, prefix the commit message with "[SKILL_ID]", e.g. "[Weather] Fix crash".
  • Add your skill with a short description and an example in the README under Skills and in the fastlane's long description.
  • If you have any question, don't hesitate to ask. 😃
Comments
  • Icon Dicio

    Icon Dicio

    I think Dicio's icon is way too simplistic (no offense to whoever made it), Dicio is a voice assistant, so its icon should inspire usability. I tried to make an icon that would better fit the project, I started with the idea that when people see the icon, they should know right away that it's a voice assistant, or at least that it has something to do with voice. Please tell me what you think about it and if it fits, you can use it as you want.

    enhancement discussion 
    opened by MXC48 17
  • Not able to download VOSK model

    Not able to download VOSK model

    When clicking the microphone icon, I get a toast that downloading VOSK model, but then it keeps on going round and round. And nothing ever happens. Tried it multiple times. Help Please

    opened by Tombstone2K 14
  • Downloading vosk model failed

    Downloading vosk model failed

    Had downloaded this app recently, and while i press middle download button i get following message: Failed downloading vosk model

    device language: english App version: 0.5

    bug 
    opened by Jrchintu 10
  • Use Dicio as system STT / voice recognition service

    Use Dicio as system STT / voice recognition service

    It is not an urgent thing, but I think it would be very nice to be able to set the system STT in the Dicio's input mode as well. There are many PoC projects to create FOSS STTs, some based on vosk, some on Mozilla Deepspeech or other. At present none are really functional, but when they will be ready, I find it useless to download and save in two separate places the same vosk models for example. I repeat that there is no hurry, but I think it should be done sooner or later.

    enhancement 
    opened by paolo-caroni 10
  • Ends of words

    Ends of words

    Does the dicio sentence syntax allow to use different ends for word? I've found two issues with it and I can avoid first of them dut cannot second.

    1. Example of 'open' skill in Russin. It's possible to say "запусти" (do run) or "запустите" (kind form of "run") or "запустить" (to run). I found that I can use line like запусти|заустите|запустить .what. But more convenient would be to use something like 'запусти(те|ть)?' Is it possible?
    2. More hard to avoid. Word ends in capture groups. Example with 'weather' skill. I try to ask weather in Moscow (Москва): какая погода в Москве? And openweathermap does not know a city 'Москве' it knows only 'Москва'. So, is it possible to setup word forms in capture groups?

    I suppose the second issue will cause worst troubles in Unit converter skill, because all of units have different forms in singular and plural forms.

    opened by Shura0 9
  • [Calculator]

    [Calculator] "into" misinterpreted as "plus"

    I am not sure if this is universal or not, but in the context of calculations, we interpret "into" as multiplication. For instance, 5*5 is read as "five into five".

    into misinterpreted as plus

    Please ignore if this is unusual.

    opened by jcperil 6
  • Implementing Speech-To-Text Service for other Apps

    Implementing Speech-To-Text Service for other Apps

    Implemented export of Speech-To-Text functionality for other Apps, which can call this by "startActivityForResult" with an "Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)"

    Extra "RecognizerIntent.EXTRA_PROMPT" is implemented

    opened by nebkrid 5
  • French language support

    French language support

    Hello,

    So I have done my best to translate the sentences to French, but my English is not perfect, so you can add your own improvements. However, I have these two issues:

    • For the grammar, in particular the declensions, I saw your issue Stypox/dicio-sentences-compiler#5, but it is still open, so I have translated the verbs to the 3 possibly declensions. I will open a new pr if it is fixed for a better maintainability and readability of the code.
    • Some words in French need a dash or an apostrophe. You said here that Dicio will consider the apostrophe as a word separator. So, is it the same for dashes (as in French, there are dashes for words separators like Est-ce-que and compound words like cerf-volant) ?

    Also, thank you for the app :)

    opened by BrightDV 4
  • I translated the .dslf files into Spanish

    I translated the .dslf files into Spanish

    Hello everyone, I have translated lyrics, search, open, calculator and weather into Spanish, my English is basic, but with my basic knowledge and a translator I was able to translate it. I wanted to upload it and it won't let me, how could I contribute this translation? . Screenshot_20211202-142438 Screenshot_20211202-142429

    opened by Cristian19194848 4
  • [Bug] Unable to find difference between

    [Bug] Unable to find difference between "to" and "two"

    I dont know if this is an issue you can really fix but when trying to use the calculator, it is unable to tell the difference between "to" and "two" by voice in English.

    Maybe, not sure though, for now have all calculations that need numbers have to start with the phrase "calculate". After that numbers and operation phrases like "divided" or "by" will be accepted. This way "two" will be prioitised when needed.

    Love the project, hope it continues!

    opened by eocow 4
  • Publish on F-Droid

    Publish on F-Droid

    ~~Publishing on F-Droid requires alphacep/vosk-api#558 to be solved, since the repository maven { url 'https://alphacephei.com/maven/' } is not allowed in F-Droid.~~ alphacep/vosk-api#558 was solved, waiting for approval by F-Droid: https://gitlab.com/fdroid/fdroiddata/-/merge_requests/9657

    opened by Stypox 4
  • Project roadmap

    Project roadmap

    What Status Linked issues Description
    System integration WIP #126 #79 Dicio should appear as an assistant app in all places possible. It should also implement STT APIs for keyboards and other apps.
    Kotlin, Jetpack Compose, Material 3 #124 #96 #95 Kotlin is more convenient than Java in many cases, and it is becoming the standard for Android development. Jetpack Compose allows building UIs based on state, and has also many more advantages and shorthands, such as not needing separate XML layout files. Both Kotlin and Compose would save development time in the future and probably also help avoid bugs. While migrating to Compose, the Material 3 design should be used.
    Natural language processing overhaul #107 #62 #30 The current natural language processing based on dicio-sentences-compiler and dicio-skill has some limitations. Sometimes it does not capture the user intent so well and it is clunky to work with (especially when used alongside dicio-numbers). Sentences files should be allowed to define and use custom matchers (e.g. one that matches all articles, another that matches only dates and times). Matchers might even be defined from outside of sentences files (e.g. all methods from dicio-numbers will be available as matchers), so this would require to develop an API. Capturing group handling should also be improved, making it possible to e.g. specify the allowed and not allowed words, the minimum and maximum length, ... Repetition like regex's + and * should also be taken into consideration.
    Documentation #78 #74 #24 Documentation is heavily needed to make contributing easier and more welcoming. We should setup a wiki of some sort, add more javadocs to code (especially in dicio-sentences-compiler, dicio-skill and dicio-numbers), and add an About section inside the app with useful information.
    Wakeword recognition #48
    Sentences files on Weblate #46 Weblate does not support skill translations in the current setup of Dicio. Maybe arranging sentences files in a specific way and maybe creating a different Weblate component for each skill would allow skills to be translated. This might require a CI workflow.

    I created this table to be able to track the most important topics that require work in Dicio at the moment. I also added some basic descriptions to explain what I thought of so far. I will work through these topics one bit at a time.

    Since these are quite big topics that require structural changes, if anybody wants to help out, please write a comment here so that we can agree on how to proceed. Thanks!

    help wanted discussion 
    opened by Stypox 0
  • download vosk module not doing anything

    download vosk module not doing anything

    Latest today from fdroid 0.8

    Touch the arrow down button to download vosk And nothing happens.(button changes from arrow down to arrow in circle) on wifi No attempt shown in firewall logs Nothing in notification area No info No nothing Pixel 6 Android 12 Is there a manual install link for the vosk module?

    opened by nutpantz 2
  • Start Dicio with wired headphones

    Start Dicio with wired headphones

    Hi! I have begun using Dicio and while Dicio itself works really well for my purposes, when I long press on my wired headset, Android tells me to set Google assistant as my default assistant instead of letting me use my current default (Dicio). Is this misconfiguration on my part or is it something that can be fixed in Dicio?

    enhancement 
    opened by Bu156 1
  • No follow up conversation in French?

    No follow up conversation in French?

    Hi,

    I am trying to get Dicio to call a specific contact in my address book, but cannot get it to do so.

    First, it is not picking the correct contact (seems it is matching by last name, while I would expect it to look by first name, since these are more probably spelled correctly by the STT). Additionally, the contact I'm trying to call has a "star" in my addressbook and therefore looks like a better candidate than anyone else.

    My conversation with Dicio looks like (in French, I made translations in parenthesis) :

    • appeler morgan ("call morgan")
    • Dois-je appeler XXX Morgan ? (Should I call XXX Morgan ?) => Provided contact has Morgan as last name, not first name, it is not the one I'm trying to reach.
    • non ("no")
    • Je n'ai pas compris, pouvez-vous répéter ? ("I did not understand, can you repeat?")

    Saying "no" with Dicio in English does work and it then says "ok, i'm not calling anyone". It does not work in French.

    Additionally, I did not find how to go on with a different conversation to try calling the next best match in addressbook.

    Thanks,

    bug skill 
    opened by Phyks 3
Releases(v0.8)
  • v0.8(Dec 20, 2022)

    Discussion about a new logo is happening over at #74, you may want to take a look ;-)

    New

    • Add Speech To Text service: press the microphone button in various applications to trigger Dicio's on-device Speech To Text (powered by Vosk), or just use it for dictation #100 #109 #111 (thank you @nebkrid!)
    • [Current time] Add current time skill #91 #94 (thank you @drew-sinha!)
    • [Telephone] Add French and Russian translations #88 #71 (thank you @ioctl-user, @MXC48, @BrightDV!)
    • [Timer] Add French and Russian translations, but they do not show up because dicio-numbers does not support them yet

    Fixed

    • [Vosk] Fix crashes when starting the model download on older Android devices due to missing external storage permission #110

    Development

    • Improve the README section explaining how to create a skill #90 (thank you @drew-sinha!)
    • Use the same theme in the whole app and deduplicate some code
    Source code(tar.gz)
    Source code(zip)
    Dicio_0.8.apk(17.96 MB)
  • v0.7(May 3, 2022)

    Matrix/IRC channel announcement

    The Dicio project now has a channel on Libera Chat, #dicio!

    • The IRC address is ircs://irc.libera.chat:6697/dicio, click here for webchat
    • You can also use a Matrix account to join the Dicio channel at #dicio:libera.chat. Some convenient clients, available both for phone and desktop, are listed at that link.

    Improved

    • [Vosk] Now multiple possible interpretations are provided for what the user said, and the app uses the first one it can understand #28 (thank you @MidnightNerd!)
    • [Telephone] Translate the skill into Spanish #76 (thank you @AlanSanchezP!)
    • Add an error reporting activity, similar to NewPipe's, so that (skill) errors can be reported

    Fixed

    • Fix input editing view remaining focused after input is sent
    • [Timer] Fix Timer not hidden for languages without a number parser/formatter

    Development

    • Skills now have a SkillContext they can access at any time, and it contains these objects: Android Context, shared preferences, NumberParserFormatter for the current locale, current Locale, GraphicalOutputDevice onto which to display outputs, SpeechOutputDevice with which to speak #60
    • The Krita project for Dicio's logo has been uploaded in the meta/ folder. Also check out the issue about creating a new logo: #74
    • Add Checkstyle to enforce code style
    • Add view binding to the project
    Source code(tar.gz)
    Source code(zip)
    Dicio_0.7.apk(17.90 MB)
  • v0.6(Mar 7, 2022)

    New

    • [Telephone] Add telephone skill: search and call contacts #29 (thank you @MidnightNerd!)
    • [Timer] Add timer skill: set, query and cancel timers (still not polished) #53
    • View and grant the permissions a skill requires in skill settings #52
    • Add a notice in skill settings when the user is using a language for which dicio-numbers is unavailable #58

    Improved

    • [Vosk] Update French and Spanish models #50 #56 (thank you @nshmyrev!)
    • Improve small UI details in skill settings

    Fixed

    • Fix skills that continue the conversation: now the user is requested to answer only after the device has finished talking
    • Fix crash when initializing Android TTS on some devices

    Development

    • Allow skills to require Android permissions #52 Stypox/dicio-skill#5
    • dicio-numbers now also supports durations (though is still only available in English and Italian, help is wanted for translations)
    • Add util_yes_no sentences file to be used across skills
    • Introduce desugaring to allow using new Java features on old devices
    Source code(tar.gz)
    Source code(zip)
    dicio_0.6.apk(17.98 MB)
  • v0.5(Jan 23, 2022)

    New

    • Add French language #36 (thank you @BrightDV!)
    • Add Greek language #35 (thank you @pklampros!)
    • Add Spanish language #43 #17 #14 (thank you @Cristian19194848!)

    Improved

    • Add "English (India)" (en-in) to language selector for more accurate speech recognition in for Indian English speakers
    • [Open] Improve the string distance method used to find the app that best matches what the user said #41
    • [Calculator] Improve English operators
    • [Weather] Improve Italian sentences

    Fixed

    • [Vosk] Fix checking whether the model is already downloaded
    • [Vosk] Keep showing the download icon when no model is available for the current user locale

    Development

    • Now dicio-sentences-compiler accepts word variations, such as <e|g?>mail, which matches "mail", "email" and "gmail". This reduces the amount of words that need to be written in .dslf files for some languages. Stypox/dicio-sentences-compiler#7 Stypox/dicio-skill#4
    • Fix app icon not being shown on F-Droid
    Source code(tar.gz)
    Source code(zip)
    dicio_0.5.apk(16.39 MB)
  • v0.4(Dec 31, 2021)

    New

    • Add German language #19 (thank you @MidnightNerd!)
    • Add Russian language #26 (thank you @Shura0!)

    Improved

    • Show skills that can't be enabled, too, in the skill settings
    • [Weather] Improve English sentences
    • [Search] Ask the user again if there were no results

    Fixed

    • Fix initial screen title alignment
    • [Search] Fix clicking on results
    • [Search] Fix DuckDuckGo locale
    Source code(tar.gz)
    Source code(zip)
    dicio_0.4.apk(16.37 MB)
  • v0.3(Dec 21, 2021)

    Improved

    • Remove unused permissions READ_PHONE_STATE, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE (fixed in dicio-skill)
    • [Vosk] Do not start downloading the model right away, but show a download icon

    Fixed

    • [Vosk] Heavily improve model downloading strategy, fixing many unexpected behaviors #12 #16
    • [Vosk] Now the download or loading icons are preserved when resuming the app, instead of wrongfully replacing them with the microphone off icon
    Source code(tar.gz)
    Source code(zip)
    dicio_0.3.apk(16.24 MB)
  • v0.2(Nov 10, 2021)

  • v0.1(Nov 7, 2021)

    5 skills

    • search: looks up information on DuckDuckGo (and in the future more engines) - Search for Dicio
    • weather: collects weather information from OpenWeatherMap - What's the weather like?
    • lyrics: shows Genius lyrics for songs - What's the song that goes we will we will rock you?
    • open: opens an app on your device - Open NewPipe
    • calculator: evaluates basic calculations - What is four thousand and two times three minus a million divided by three hundred?

    Settings

    • 2 input methods: speech to text with Vosk, text box
    • 4 output methods: Android speech synthesis, toast, snackbar, nothing
    • 2 languages: English and Italian
    • 2 themes: light and dark

    Development

    • Sentence recognition is done with dicio-sentences-compiler and dicio-skill
    • Skills can extract or say numbers using dicio-numbers
    • Translatable on Fastlane
    Source code(tar.gz)
    Source code(zip)
    dicio_0.1.apk(16.23 MB)
Owner
Stypox
I started coding in 2017 and I use C++, Python, Java, JavaScript, OpenGL. Interests: Competitive Programming, Computer Science, AI, Android, free & open-source
Stypox
FFmpeg compiled for Android. Execute FFmpeg commands with ease in your Android app.

FFMPEG video operations FFmpeg compiled for Android. Execute FFmpeg commands with ease in your Android app. Getting Started This project is provide in

Simform Solutions 277 Jan 2, 2023
Android podcast app made with Jetpack Compose and ExoPlayer.

Podcast App Android podcast app made with Jetpack Compose and ExoPlayer. Podcast information provided by Listen Notes API. Features Jetpack Compose UI

Fabian 302 Jan 2, 2023
Transistor - Simple Radio App for Android

Transistor is an app with a minimalistic approach for listening to radio programs over the internet, which may not be to everyone's liking

y20k 421 Dec 29, 2022
Fire TV Sample App Android - Touch and D-Pad

Fire TV Sample App Android - Touch and D-Pad This sample Android project demonstrates how to build the main UI of a Fire TV application in order to su

Amazon 10 Nov 11, 2022
Convert your YouTube channel into a native Android app using YouTube Data API v3.

Convert your YouTube channel into an app. Screenshots • Description • Features • Configuration • Documentation Screenshots Description Channelify is a

Aculix Technologies LLP 121 Dec 26, 2022
Noice is an android app that allows you to create your own set of background sounds by mixing clips from environmental sources.

A native Android app to relax, improve focus and boost productivity with minimal background noise.

Ashutosh Gangwar 666 Jan 3, 2023
An offline music player android app, with modern UI and powerful features

Pulse Music An offline music player android app, with modern UI and powerful features If you liked this repo, fork it and leave a STAR. Your support m

Sharath 7 Apr 11, 2022
SocyMusic is an open-source Android music player written in Java with the aim of creating an easy-to-use app for exchanging and listening to top-quality music. Help us create it!

SocyMusic SocyMusic is an open-source Android music player written entirely in Java. It's objectives are to provide top-quality music to everyone for

Benji 23 Dec 26, 2022
Android app that uses Spotify API to recommend new music based on your listening history

Android app that uses Spotify API to recommend new music based on your listening history. Written in Kotlin and uses Spotify Web API and Android SDK. New music is presented in swipe cards where a left swipe plays the next song and a right swipe can add the app to your liked songs in Spotify.

null 3 Jun 5, 2022
Proof of concept app for Android permanent denial-of-service vulnerability CVE-2020-0443

CVE-2020-0443 This is a proof of concept app that exploits CVE-2020-0443 to brick any Android device. After running the app and rebooting, the device

Sithija 11 Dec 21, 2022
Android app for streaming and downloading Movies, TV-Series and Anime.

CloudStream ⚠️ Warning: By default this app doesn't provide any video sources, you have to install extensions in order to add functionality to the app

null 309 Aug 21, 2022
Android app for streaming and downloading Movies, TV-Series and Anime.

CloudStream-3 DOWNLOAD: https://github.com/KillerDogeEmpire/Cloudstream/releases Features: AdFree, No ads whatsoever No tracking/analytics Bookmarks D

Sushil Great 3 Aug 15, 2022
Android app for streaming and downloading Movies, TV-Series and Anime.

CloudStream ⚠️ Warning: By default this app doesn't provide any video sources, you have to install extensions in order to add functionality to the app

Obaida AlBitar 2 Sep 22, 2022
A simple app showing how to make a YouTube Shorts/TikTok style video pager

It's pretty straightforward to get started using ExoPlayer by following the library's Hello world! documentation. Once you throw Android's lifecycles

Nick 83 Jan 4, 2023
TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback service

TunePlayer TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback

Abdulmalik 6 Nov 18, 2022
Data analytics app for mining

Vision Vision is a data analytics app developed to visualise and interact with m

Riaz 0 Dec 26, 2021
Toedoe - A To-do app that made using Kotlin

Toedoe Android Study Jam It is a To-do app that I made using Kotlin in this app

Abhishek Kumar Yadav 0 Jan 7, 2022
LNSocial is a social media app dedicated to short-form videos created for and consumed by users.

LNSocial is a social media app dedicated to short-form videos created for and consumed by users. The length of videos is between 15-30 second

null 10 Jan 5, 2023
An app showing how to make an Instagram/YouTube Shorts/TikTok style video pager

It's pretty straightforward to get started using ExoPlayer by following the library's Hello world! documentation. Once you throw Android's lifecycles

Nick 84 Dec 21, 2022