GSoC Proposal for "Click To Dial Popup Window For Linux Desktop"
Debian Wiki: NamanTiwari
IRC: namantw (OFTC/freenode)
Timezone: GMT +5:30 (IST)
I am a first-year student at the Indian Institute of Information Technology, Allahabad, India. I am currently pursuing a Bachelor of Technology in Information Technology (Graduation year: 2021).
I fell in love with the idea behind free and open source software the moment I was introduced to it in school. I always wanted to get a chance to contribute and become a part of this wonderful community. I had a course in Python programming in my first semester. I have a good knowledge of Python programming and I am also proficient in C++, Java and Go. I have some experience with pyQt framework (I have used pyQt on Python 3 but I am also comfortable with Python 2).
I plan to give around 7 to 8 hours a day, five days a week but I can be flexible with work hours since I have no other commitments during the google summer of code period. I would also love to continue contributing to Debian after the end of google summer of code.
Co-mentor : Name: Pranjal Paliwal Email: <firstname.lastname@example.org>
Location : Allahabad, Uttar Pradesh, India. I plan to work from home. I can also work from my college which is a 15 minutes drive away from my home.
Operating System : My laptop is dual booted with Ubuntu 16.04 LTS and Windows 10 running Debian 9 stretch on VirtualBox.
Development Tools : I use Sublime Text 3 as my go-to text editor and Pycharm IDE (Professional Student edition) and Jupyter Notebooks. I have been using git for a year now.
Internet Connection :I have a stable 15 - 20Mbps internet connection available at home. My college has a high speed broadband with a speed of 75Mbps.
Application Tasks : I made a sample python script which shows a prototype of the dial popup here gist. It can be run using python dial.py <phone number>. It pops up a GUI dialer made with pyQt5.
Click To Dial Popup Window For Linux Desktop
Project link : ClickToDialPopupWindowForLinuxDesktop
This project is aimed at adding a pop-up GUI phone which appears whenever a tel: link is clicked on inside any application in Debian. The pop-up will have basic features like adding contact to phone book, details about the country in which the phone number is registered and another button to save the number to an address book. The application is to be developed as a standalone Python script which will be invoked as a MIME handler. The script will not need to understand how to dial the phone calls: when somebody clicks the "Call" button, the script can run another script such as sipdial in reSIProcate (Page link) or pjsua (Page link) so that in the future more features like sending messages can be implemented.
Deliverables: The result of this project is that clicking a tel: link in GNOME can start a pop-up window. I plan to add the following components in the GUI:
- Text display of the phone number to be called
- A "call" button that places a phone call, 0-9 digit buttons and a clear button
- Display country’s name and flag in which the phone number is registered
- A phone book which shows details of contacts
The user will have the freedom to use the program of their choice for calling if the “TELEPHONE” environment variable is set. The phone book would have a search feature.
I also plan to write weekly/fortnightly blog posts about my progress and keep the mentors updated on IRC or any other communication platform about the progress.
Week 0: Community bonding period
April 23rd to May 14th
- I get completely familiar with the tools to be used during development.
- I learn about the coding conventions followed by Debian.
Week 1: Write a dummy "tel:" handler
May 14th to May 21st
- Write a program that receives a tel: link as argument 1 and prints the telephone number (with "tel:" removed) to standard output. That is, it should be run like this.
$ place-phone-call tel:+36849123456 36849123456
- Write documentation on how to run the program from the command-line.
Week 2: Configure the dummy "tel:" handler
May 21st to May 28th
- Configure the program as the handler for tel: URLs with xdg-mime.
- Write documentation on how to configure a program as a handler for tel: URLs, so that other people can repeat my configuration.
Week 3: Make a popup window
May 28th to June 4th
- Modify the program so that it opens a pop-up window that displays the phone number.
- Discuss the design of the dialer pop-up with the mentors. I made a sample python script which shows a prototype of the dial popup here
link, which can be used as a starting point.
- Add a "call" button to the pop-up window. When the "call" button is pressed, print "Call [phone_number]." to standard output.
Week 4: Place a phone call
June 4th to June 11th
Install and configure pjsua (Page link), and use it to place a phone call.
- Document the configuration file so that others may repeat my work.
Week 5: Learn to use execvp
June 11th to June 18th
- Write a (very short) program that just launches pjsua with execvp.
Week 6: Place a phone call
June 18th to June 25th
- Modify the pop-up window program to place calls; when the "call" button is pressed, start pjsua with execvp in order to place the call. Hard-code the program to use pjsua.
Week 7: Add phone book feature
June 25th to July 2nd
- Add a simple phone book feature, which would store the details of a contact in a JSON or CSV file.
- Make a GUI for the phone book.
- Add a “Search” button and write a simple script to implement it.
- Add a “Add to Contacts” button in the dialer pop-up.
- Add documentation.
Week 8: Country
July 2nd to July 9th
- I plan to use ‘python-phonenumbers’
- I will add a country flag to the pop-up window. Use libphonenumber to get the country code corresponding to a phone number. Display it in the pop-up window. Look up the country flag corresponding to the country code, and display that instead of the country name. I plan to use ‘emoji-flags’
(Page link) for this.
Week 9: User configuration
July 9th to July 16th
- Modify the pop-up window program so that phone calls are placed with a user-configurable command specified by the environment variable "TELEPHONE".
- Begin writing a manual page for the pop-up window program, by converting my existing documentation into mdoc format.
Week 10: User configuration
July 16th to July 23rd
- The user will have the freedom to use the program of their choice. If the "TELEPHONE" environment variable is specified, display the name of the program that will be used to place the call. If the "TELEPHONE" variable is not specified, put a button in the pop-up window that says "Choose application". When you click that button, you get another pop-up window where you can choose the application.
- Revise the manual page.
Week 11: Documentation and installation script
July 23rd to July 30th
- Finalize the manual page.
- Write a script that installs the pop-up program and the manual page into d directories under the PREFIX environment variable.
- Distribute it to at least three people other than my mentor for testing.
Week 12: Packaging
July 30th to August 6th
- Learn about Debian packaging.
- Write a Debian package of the program.
- Distribute the this package to at least three people other than my mentor for testing.
If I finish ahead of schedule, I will take up the following goals during the summer period itself. However, I plan to do it anyways, after the end of the summer of code if I have enough time. I wish to continue contributing to Debian.
Extra : Google Contacts Integration
I plan to implement a “sync with google contacts” contacts feature using Google Contacts API.
Extra : Sending messages to a number
I also plan to add an option to send text messages. This would require discussion with the mentors.
Exams and other commitments
I will have my university's end semester examinations from 29th April to 7th May, so I will be less active during this time. I do not have any other commitments or examinations in the Google Summer of Code period.
Other summer plans
I have no other plans for summers. I plan to spend the entire summer at home coding.
I am a fan of free and open source software. I love the fact that Debian provides such a functional and light-weight operating system for free. I had installed Debian on my old laptop and Debian gave it a new life. I currently have a Debian 9 stretch installed on a Virtual box on my main laptop, which I use for playing around with python scripts.
My previous Debian contributions
This will be my first time contributing to Debian. I am relatively new to the open source community in general but the following are some contributions I have made to other projects: Made a command-line calculator in Utlyz-CLI (Page link) Implemented a command line interface application to use Historic Price API to give price of a bitcoin at a certain time in the past in Go language (Page link) A text editor made in Electron I coded from scratch (Page link)
Are you applying for other projects in SoC?