Skip to content

Latest commit

 

History

History
330 lines (239 loc) · 19.1 KB

CONTRIBUTING.md

File metadata and controls

330 lines (239 loc) · 19.1 KB

Introduction

Requirements

In case you wanna contribute to Delta you need:

  • basic knowledge of git
  • a fork of this repo
  • an SVG icon
  • an 192x192px PNG icon
  • ComponentInfo(s) of the target app (?)

Info

We have two methods of adding icons:

  • Auto method is a new method of adding icons. You only need to add PNG and SVG to a specific folder and append the icon name with ComponentInfo(s) to a specific YAML file. These files will be automatically handled by our CI/CD every release. Go to full instruction.
  • Manual method implies editing four XML files and adding icons to two specific folders. Go to full instruction.

We also have such a thing as alternative icons — we mainly use it to move an existing icon to an alternative one after rebranding, but there's nothing stopping you to make alternative icons for any app in different shapes as you wish. You can select an alternative icon for the target app via your icon launcher if it supports that feature.

Description of categories and what they are for:

  • New: for new icons obviously (new icons always must be duplicated there)
  • Alts: for alternative icons
  • Calendar: for calendar icons
  • Folders: for folder icons
  • Google: for Google apps (Chrome, YouTube, etc.)
  • System: for system icons (Camera, Settings, etc.)
  • #: icons whose name starts with a number (or, to be more clear, with an underscore followed by a number, e.g. _2048)
  • A-Z: icons which don't fit in previous categories must be placed in a category based on the first letter of its name

Rules

  • Keep LF line endings in files (CLRF breaks our CI/CD)
  • SVG, PNG and drawable names must be the same
  • Keep filenames in alphanumeric lowercase with underscores
  • If the icon name starts with a number, it must have a leading underscore (e.g. _9gag) and be placed in # category
  • Keep the next naming format of alternative icons: new_icon_alt_x, where x is a number of current alternative version (yes, we have multiple of them, e.g. old_icon_alt_1, old_icon_alt_2, etc.

Contributing

new_icon will be used as the icon name
new_icon_alt_1 will be used as the alternative icon for new_icon
com.example/com.example.MainActivity will be used as the 1st ComponentInfo for new_icon
com.example/com.example.StartActivity will be used as the 2nd ComponentInfo for new_icon

Don't forget to give yourself an entry at the bottom of app/src/main/res/xml/contributors.xml if this is your first contribution!

Auto Method

This method is only for adding new icons or linking ComponentInfo(s) with existing icons!

  1. Add new_icon.svg and new_icon.png to resources/utilities/icons directory

  2. Append the icon name with ComponentInfo(s) to resources/new_icons.yaml with any of the next formats:

    2.1. The new icon with the ComponentInfo.

    Can be used for linking the ComponentInfo with the existing icon

    # lines omitted for example
    
    new_icon:
        - com.example/com.example.MainActivity

    2.2. The new icon with multiple ComponentInfos:

    Can be used for linking ComponentInfos with the existing icon

    # lines omitted for example
    
    new_icon:
        - com.example/com.example.MainActivity
        - com.example/com.example.StartActivity

    2.3. The icon without the ComponentInfo (the alternative icon):

    # lines omitted for example
    
    new_icon_alt_1: {}

And we're done! Repeat the process for adding new icons.

Manual Method

  1. Add new_icon.svg to resources/vectors directory

  2. Add new_icon.png to app/src/main/res/drawable-nodpi directory

  3. Append the line <item drawable="new_icon" /> in New and named categories (the named category is based on the first letter of the icon name; N in our case) to app/src/main/assets/drawable.xml and app/src/main/res/xml/drawable.xml. How it should look:

        <!-- lines omitted -->
        <category title="New" />
        <!-- lines omitted -->
        <item drawable="latest_entry">
        <item drawable="new_icon" />
        
        <category title="Alts" />
        <!-- lines omitted -->
    
        <category title="N" />
        <!-- lines omitted -->
        <item drawable="latest_entry">
        <item drawable="new_icon" />
        
        <category title="O" />
        <!-- lines omitted -->

    You can edit one file and overwrite another with it to keep them identical.

  4. Append the line <item component="ComponentInfo{com.example/com.example.MainActivity}" drawable="new_icon" /> to app/src/main/assets/appfilter.xml and app/src/main/res/xml/appfilter.xml. How it should look:

        <!-- lines omitted -->
        <item component="ComponentInfo{com.google/com.google.MainActivity}" drawable="latest_entry" />
        <item component="ComponentInfo{com.example/com.example.MainActivity}" drawable="new_icon" />
    </resources>

    You can edit one file and overwrite another with it to keep them identical.

The end. More complicated than Auto method, but it's a base method, you can modify/fix current icons by this method.

Other Cases

Alternative Icons

If the existing icon rebranded, don't overwrite it with a new one, do the following:

old_icon will be used as an existing icon name

old_icon_alt_1 will be used as an alternative icon name for the existing icon name

  1. Determine if alternative icons exist for the target app by checking Alts category in app/src/main/res/xml/drawable.xml. If no alternative icons then start numbering from 1 (e.g. old_icon_alt_1), otherwise continue numbering based on latest alternative icon number (e.g. old_icon_alt_2)

  2. Rename old_icon.svg to old_icon_alt_1.svg in resources/vectors directory (if SVG not found there just skip this step)

  3. Rename old_icon.png to old_icon_alt_1.png in app/src/main/res/drawable-nodpi directory

  4. Add old_icon_alt_1 to Alts category and old_icon to New category in app/src/main/assets/drawable.xml and app/src/main/res/xml/drawable.xml

  5. If the ComponentInfo also changed after rebranding, replace old_icon with old_icon_alt_1 in app/src/main/assets/appfilter.xml and app/src/main/res/xml/appfilter.xml (the alternative icon will be linked with the old ComponentInfos for back compability)

Resources

For saving templates/palettes locally do: Right-ClickSave As

Font

If the original icon consists of just one or two letters, you may trace that letter instead of using these fonts

  • Now (Sans-serif) — main font; use Now Alt from the same family for alternate lowercase 'a' letter
  • Aleo (Serif) — use it only when Serif is needed

Requests

If you wanna help close icon requests from users, you can take a look at resources/requests.txt where all requests are stored. The file updates periodically.

Gathering ComponentInfo

ComponentInfo is what your launcher uses to know which apps get which icons in our icon pack.

You may use these tools to find each app's СomponentInfo(s):

Icon Template

Rules

  • Canvas size must be 192x192px, the icon size according to the template below
  • If the original logo doesn't contain small details or doesn't make up most of the background layer (circle/square/etc.) as designed, keep the logo size between 73-80px

Colors

Rules

  • [ $\textcolor{#56595B}{\textsf{⬤}}$ #56595B Davy's grey ] as default Black

  • [ $\textcolor{#FF837D}{\textsf{⬤}}$ #FF837D Coral pink ] as default Red and [ $\textcolor{#BA6561}{\textsf{⬤}}$ #BA6561 Fuzzy Wuzzy ] as default Dark Red. Shades of Red are specifically for shading purposes

  • Transparencies — White (25%, 50%, 70%) and Black (15%, 25%) can be used as overlay for additional shading

Palette

Palette variants are hidden under spoilers below

Full
Simple
HTML
Greys Basic Reds Skintones

$\textcolor{#FFFFFF}{\textsf{⬤}}$ #FFFFFF White

$\textcolor{#ECECEC}{\textsf{⬤}}$ #ECECEC Isabelline

$\textcolor{#D8D8D8}{\textsf{⬤}}$ #D8D8D8 Timberwolf

$\textcolor{#D2D2D2}{\textsf{⬤}}$ #D2D2D2 Light gray

$\textcolor{#CCCCCC}{\textsf{⬤}}$ #CCCCCC Pastel gray

$\textcolor{#B1B5BD}{\textsf{⬤}}$ #B1B5BD Ash grey

$\textcolor{#A0A5AF}{\textsf{⬤}}$ #A0A5AF Dark gray

$\textcolor{#979797}{\textsf{⬤}}$ #979797 Manatee

$\textcolor{#83868C}{\textsf{⬤}}$ #83868C Taupe gray

$\textcolor{#56595B}{\textsf{⬤}}$ #56595B Davy's grey

$\textcolor{#4A4A4A}{\textsf{⬤}}$ #4A4A4A Quartz

$\textcolor{#000000}{\textsf{⬤}}$ #000000 Black

$\textcolor{#FFD6D4}{\textsf{⬤}}$ #FFD6D4 Pastel pink

$\textcolor{#FF837D}{\textsf{⬤}}$ #FF837D Coral pink

$\textcolor{#BA6561}{\textsf{⬤}}$ #BA6561 Fuzzy Wuzzy

$\textcolor{#D3B69A}{\textsf{⬤}}$ #D3B69A Tan

$\textcolor{#8E6F60}{\textsf{⬤}}$ #8E6F60 Shadow

$\textcolor{#FCECDC}{\textsf{⬤}}$ #FCECDC Antique white

$\textcolor{#F8C18C}{\textsf{⬤}}$ #F8C18C Pale gold

$\textcolor{#FDF5D9}{\textsf{⬤}}$ #FDF5D9 Cornsilk

$\textcolor{#F9DE81}{\textsf{⬤}}$ #F9DE81 Jasmine

$\textcolor{#C39A54}{\textsf{⬤}}$ #C39A54 Camel

$\textcolor{#E0F4E0}{\textsf{⬤}}$ #E0F4E0 Platinum

$\textcolor{#98DC9A}{\textsf{⬤}}$ #98DC9A Granny Smith Apple

$\textcolor{#71A372}{\textsf{⬤}}$ #71A372 Asparagus

$\textcolor{#96DFD3}{\textsf{⬤}}$ #96DFD3 Pale robin egg blue

$\textcolor{#73ADA4}{\textsf{⬤}}$ #73ADA4 Cadet blue

$\textcolor{#9ABEFF}{\textsf{⬤}}$ #9ABEFF Baby blue eyes

$\textcolor{#728DBE}{\textsf{⬤}}$ #728DBE Dark pastel blue

$\textcolor{#54688C}{\textsf{⬤}}$ #54688C UCLA Blue

$\textcolor{#ABABFF}{\textsf{⬤}}$ #ABABFF Baby blue eyes

$\textcolor{#BD9AFF}{\textsf{⬤}}$ #BD9AFF Bright lavender

$\textcolor{#8C72BD}{\textsf{⬤}}$ #8C72BD Ube

$\textcolor{#FFB0AC}{\textsf{⬤}}$ #FFB0AC Melon

$\textcolor{#F58F8A}{\textsf{⬤}}$ #F58F8A Light coral

$\textcolor{#F4806D}{\textsf{⬤}}$ #F4806D Coral pink

$\textcolor{#E85E5C}{\textsf{⬤}}$ #E85E5C Terra cotta

$\textcolor{#DC505E}{\textsf{⬤}}$ #DC505E Dark terra cotta

$\textcolor{#B02A3C}{\textsf{⬤}}$ #B02A3C Deep carmine

$\textcolor{#7A1B1C}{\textsf{⬤}}$ #7A1B1C Falu red

$\textcolor{#511119}{\textsf{⬤}}$ #511119 Dark scarlet

$\textcolor{#F1E9E0}{\textsf{⬤}}$ #F1E9E0 Eggshell

$\textcolor{#D6C8BA}{\textsf{⬤}}$ #D6C8BA Pastel gray

$\textcolor{#D4C6B8}{\textsf{⬤}}$ #D4C6B8 Pale silver

$\textcolor{#D7D0B8}{\textsf{⬤}}$ #D7D0B8 Pastel gray

$\textcolor{#E2C9B0}{\textsf{⬤}}$ #E2C9B0 Desert sand

$\textcolor{#D4B79A}{\textsf{⬤}}$ #D4B79A Tan

$\textcolor{#BF9E73}{\textsf{⬤}}$ #BF9E73 Camel

Graphic Editors

Building via GitHub Actions

Everything described here must be done in your fork

Creating Secrets

Go to Settings → Secrets and Variables and create the following repository secrets:

  • KEYSTORE_BASE64

    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
    
  • KEYSTORE_PASSWORD

    android
    
  • KEYSTORE_KEY_ALIAS

    android
    
  • KEYSTORE_KEY_PASSWORD

    android
    

You can generate a new keystore with keytool -genkeypair -alias android -keypass android -keystore android.keystore -storepass android -keyalg RSA -dname "CN=Android,O=Android,C=US" -validity 9999 and fill secrets with your values.

To encode the keystore, use cat android.keystore | base64 | tr -d '\n' > android.keystore.base64 or do it with any online tool.

Run Workflow

  1. Go to Actions
  2. Select Build FOSS
  3. Select Run workflow then click to green Run workflow button
  4. Wait for the build, it takes approximately 5 minutes

The zipped APK will be attached to the workflow run. Go to Actions, click on the latest workflow run and download it from Artifacts down below