I have written schedule that could be used for a basic Click To Dial Popup Window project. Once the plan below is finished, it should be easy to add many buttons to the popup window; there could be buttons for calling, texting, adding to a phone book, searching email for the phone number, calling with Signal, &c. An ambitious student could modify this proposal to include those things.

A pop-up window for tel: urls

The result of this project is that clicking a tel: link in GNOME can start a pop-up window with these components

Week 1: Write a dummy "tel:" handler

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

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

Modify the program so that it opens a pop-up window that displays the phone number.

Week 4: The "call" button

Add a "call" button to the pop-up window. When the "call" button is pressed, print "Call [phone_number]." to standard output.

Week 5: Place a phone call

Install and configure pjsua, and use it to place a phone call. Document the configuration file so that others may repeat my work.

Week 6: Learn to use execvp

Write a (very short) program that just launches pjsua with execvp.

Week 7: Place a phone call

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 8: Country

Use libphonenumber to get the country corresponding to a phone number. Display it in the pop-up window.

Week 9: User configuration

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

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

Finalize the manual page.

Write a script that installs the pop-up program and the manual page into directories under the PREFIX environment variable. Distribute it to at least three people other than my mentor for testing.

Week 12: Packaging

Write a Debian package of the program. Distribute the Debian package to at least three people other than my mentor for testing.

Extra: Country Flag

If I finish ahead of schedule, 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.