Reorganize folders of graphics sources
81
Graphics/android-icon-copier/.gitignore
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# Python
|
||||||
|
|
||||||
|
*.py[cod]
|
||||||
|
|
||||||
|
# Options
|
||||||
|
/options.json
|
||||||
|
|
||||||
|
# Packages
|
||||||
|
*.egg
|
||||||
|
*.egg-info
|
||||||
|
/dist
|
||||||
|
/build
|
||||||
|
/eggs
|
||||||
|
/parts
|
||||||
|
/bin
|
||||||
|
/var
|
||||||
|
/sdist
|
||||||
|
/develop-eggs
|
||||||
|
/lib
|
||||||
|
/lib64
|
||||||
|
.installed.cfg
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
.coverage
|
||||||
|
.tox
|
||||||
|
nosetests.xml
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
|
||||||
|
# Mr Developer
|
||||||
|
.mr.developer.cfg
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
|
||||||
|
### Generic
|
||||||
|
|
||||||
|
*.log
|
||||||
|
*.sqlite?
|
||||||
|
|
||||||
|
### Compiled binaries
|
||||||
|
|
||||||
|
*.class
|
||||||
|
*.jar
|
||||||
|
|
||||||
|
*.o
|
||||||
|
*.bin
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
*.so
|
||||||
|
*.out
|
||||||
|
|
||||||
|
*.obj
|
||||||
|
*.exe
|
||||||
|
*.dll
|
||||||
|
*.com
|
||||||
|
|
||||||
|
### *nix OS / apps
|
||||||
|
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
|
||||||
|
### Mac OS generated
|
||||||
|
|
||||||
|
__MACOSX
|
||||||
|
Icon?
|
||||||
|
*.DS_Store
|
||||||
|
*.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight*
|
||||||
|
.Trashes
|
||||||
|
|
||||||
|
### Windows generated
|
||||||
|
|
||||||
|
ehthumbs.db
|
||||||
|
thumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|
21
Graphics/android-icon-copier/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Lucas Tan
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
109
Graphics/android-icon-copier/README.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-android--icon--copier-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/1325)
|
||||||
|
|
||||||
|
What is this
|
||||||
|
============
|
||||||
|
A commandline tool to copy Android Material Design and FontAwesome icons to your
|
||||||
|
project folders: `drawable-ldpi`, `drawable-mdpi`, and etc.
|
||||||
|
|
||||||
|
How it works
|
||||||
|
============
|
||||||
|
It downloads from these repos:
|
||||||
|
- Material design: https://github.com/google/material-design-icons
|
||||||
|
- FontAwesome and "Classic" Android: https://github.com/svenkapudija/Android-Action-Bar-Icons
|
||||||
|
|
||||||
|
Resolution supported
|
||||||
|
====================
|
||||||
|
| l | m | h | xh | xxh | xxxh |
|
||||||
|
--------|---|---|---|----|-----|------|
|
||||||
|
FA | Y | Y | Y | Y | Y | - |
|
||||||
|
Classic | - | Y | Y | Y | Y | - |
|
||||||
|
Material| - | Y | Y | Y | Y | Y |
|
||||||
|
|
||||||
|
Sizes supported
|
||||||
|
===============
|
||||||
|
Material: 18, 24, 36, 48 dp.
|
||||||
|
FA and Classic: 32 dp only.
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
<pre>
|
||||||
|
Usage:
|
||||||
|
Material : ./copy {proj path} {category} {color} {icon name} [size]
|
||||||
|
Classic and FA: ./copy {proj path} {fa/classic} {color} {icon name}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
`[]` denotes optional args.
|
||||||
|
**Args are case sensitive!**
|
||||||
|
|
||||||
|
- `proj path`: Path to project folder relative to `base path`.
|
||||||
|
- `base path` can be defined in options file (see below).
|
||||||
|
- Auto-detects new or old project structure: `MyProject/src/main/res` or
|
||||||
|
`MyProject/res`.
|
||||||
|
- `category`: Either "classic", "fa", or Material category.
|
||||||
|
- `color`: Color of icon: Either "white", "grey" or "black".
|
||||||
|
- For Classic and FA, "white" refers to the Holo Dark theme (dark background).
|
||||||
|
"Grey" refers to the Holo Light theme.
|
||||||
|
- For Material, "grey" refers to grey600.
|
||||||
|
- `icon name`: Name of icon (must replace spaces and dashes with underscores).
|
||||||
|
- Without any prefix. Examples: FontAwesome "thumbs_up", Classic "search".
|
||||||
|
- `size` (integer): for Material only, Size in dp, defaults to 24 which is the
|
||||||
|
action bar icon size for material design.
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
- `./copy MyProject maps white place`
|
||||||
|
- Downloads to `BasePath/MyProject/{src/main}/res/drawable-{m,h,xh,xxh,xxh}dpi
|
||||||
|
- `./copy MyProject maps white place 48`
|
||||||
|
- `./copy Path/to/MyProject fa grey thumbs_up`
|
||||||
|
|
||||||
|
Windows users need to use `python copy` instead (I think).
|
||||||
|
|
||||||
|
Filename mapping
|
||||||
|
================
|
||||||
|
The tool also supports filename mapping of destination png files. (see options)
|
||||||
|
Mapping vars:
|
||||||
|
|
||||||
|
- `cat`: category
|
||||||
|
- `name`: name as specified in commandline.
|
||||||
|
- `color`: color as specified: white, black, grey.
|
||||||
|
- `size`: integer only.
|
||||||
|
- `bg`: derived from color. black => bright, white => dark, grey => light.
|
||||||
|
- `bgSuffix`: "_dark" if bg is dark else empty string.
|
||||||
|
|
||||||
|
Options file
|
||||||
|
============
|
||||||
|
Named `options.json` in same dir. Sample:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"basePath": "~/Documents",
|
||||||
|
"filenameMap": {
|
||||||
|
"classic": "ic_action_{name}{bgSuffix}.png",
|
||||||
|
"fa": "ic_action_fa_{name}{bgSuffix}.png",
|
||||||
|
"material": "ic_{name}_{color}_{size}dp.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
~ is expanded to the user home dir.
|
||||||
|
|
||||||
|
`./copy Path/to/MyProject fa white thumbs_up` results in the
|
||||||
|
target filename of `ic_action_fa_thumbs_up_dark.png`.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
- Python >= 2.7 (older or newer ver might work, you may try.)
|
||||||
|
- Python Requests package: `pip install requests`
|
||||||
|
- Git clone this repo or download the script.
|
||||||
|
|
||||||
|
Icon cheatsheet
|
||||||
|
===============
|
||||||
|
- Material: http://google.github.io/material-design-icons/
|
||||||
|
- FA: http://fortawesome.github.io/Font-Awesome/icons/ (icons in 4.2 not supported)
|
||||||
|
- Classic: coming soon.
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
This project is under the MIT License. (see LICENSE)
|
||||||
|
|
||||||
|
Please refer to the respective icon library for its licensing info.
|
146
Graphics/android-icon-copier/classic.py
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
# Maps icon name to the dir name.
|
||||||
|
CLASSIC_MAP = {
|
||||||
|
'about': '13_extra_actions_about',
|
||||||
|
'accept': '01_core_accept',
|
||||||
|
'accounts': '10_device_access_accounts',
|
||||||
|
'add_alarm': '10_device_access_add_alarm',
|
||||||
|
'add_group': '06_social_add_group',
|
||||||
|
'add_person': '06_social_add_person',
|
||||||
|
'add_to_queue': '09_media_add_to_queue',
|
||||||
|
'airplane_mode_off': '10_device_access_airplane_mode_off',
|
||||||
|
'airplane_mode_on': '10_device_access_airplane_mode_on',
|
||||||
|
'alarms': '10_device_access_alarms',
|
||||||
|
'attachment': '05_content_attachment',
|
||||||
|
'back': '02_navigation_back',
|
||||||
|
'backspace': '05_content_backspace',
|
||||||
|
'bad': '03_rating_bad',
|
||||||
|
'battery': '10_device_access_battery',
|
||||||
|
'bightness_low': '10_device_access_bightness_low',
|
||||||
|
'bluetooth': '10_device_access_bluetooth',
|
||||||
|
'bluetooth_connected': '10_device_access_bluetooth_connected',
|
||||||
|
'bluetooth_searching': '10_device_access_bluetooth_searching',
|
||||||
|
'brightness_auto': '10_device_access_brightness_auto',
|
||||||
|
'brightness_high': '10_device_access_brightness_high',
|
||||||
|
'brightness_medium': '10_device_access_brightness_medium',
|
||||||
|
'call': '01_core_call',
|
||||||
|
'camera': '08_camera_camera',
|
||||||
|
'cancel': '01_core_cancel',
|
||||||
|
'cast': '09_media_cast',
|
||||||
|
'cc_bcc': '06_social_cc_bcc',
|
||||||
|
'chat': '06_social_chat',
|
||||||
|
'cloud': '04_collections_cloud',
|
||||||
|
'collapse': '02_navigation_collapse',
|
||||||
|
'collection': '04_collections_collection',
|
||||||
|
'computer': '11_hardware_computer',
|
||||||
|
'copy': '01_core_copy',
|
||||||
|
'crop': '08_camera_crop',
|
||||||
|
'cut': '01_core_cut',
|
||||||
|
'data_usage': '10_device_access_data_usage',
|
||||||
|
'dial_pad': '10_device_access_dial_pad',
|
||||||
|
'directions': '07_location_directions',
|
||||||
|
'discard': '01_core_discard',
|
||||||
|
'dock': '11_hardware_dock',
|
||||||
|
'download': '09_media_download',
|
||||||
|
'edit': '01_core_edit',
|
||||||
|
'email': '05_content_email',
|
||||||
|
'end_call': '10_device_access_end_call',
|
||||||
|
'error': '12_alerts_and_states_error',
|
||||||
|
'event': '05_content_event',
|
||||||
|
'expand': '02_navigation_expand',
|
||||||
|
'fast_forward': '09_media_fast_forward',
|
||||||
|
'favorite': '03_rating_favorite',
|
||||||
|
'flash_automatic': '08_camera_flash_automatic',
|
||||||
|
'flash_off': '08_camera_flash_off',
|
||||||
|
'flash_on': '08_camera_flash_on',
|
||||||
|
'forward': '06_social_forward',
|
||||||
|
'full_screen': '09_media_full_screen',
|
||||||
|
'gamepad': '11_hardware_gamepad',
|
||||||
|
'go_to_today': '04_collections_go_to_today',
|
||||||
|
'good': '03_rating_good',
|
||||||
|
'group': '06_social_group',
|
||||||
|
'half_important': '03_rating_half_important',
|
||||||
|
'headphones': '11_hardware_headphones',
|
||||||
|
'headset': '11_hardware_headset',
|
||||||
|
'help': '13_extra_actions_help',
|
||||||
|
'import_export': '05_content_import_export',
|
||||||
|
'important': '03_rating_important',
|
||||||
|
'keyboard': '11_hardware_keyboard',
|
||||||
|
'labels': '04_collections_labels',
|
||||||
|
'location_found': '07_location_location_found',
|
||||||
|
'location_off': '07_location_location_off',
|
||||||
|
'location_searching': '07_location_location_searching',
|
||||||
|
'make_available_offline': '09_media_make_available_offline',
|
||||||
|
'map': '07_location_map',
|
||||||
|
'merge': '05_content_merge',
|
||||||
|
'mic': '08_camera_mic',
|
||||||
|
'mic_muted': '08_camera_mic_muted',
|
||||||
|
'mouse': '11_hardware_mouse',
|
||||||
|
'network_cell': '10_device_access_network_cell',
|
||||||
|
'network_wifi': '10_device_access_network_wifi',
|
||||||
|
'new': '01_core_new',
|
||||||
|
'new_account': '10_device_access_new_account',
|
||||||
|
'new_attachment': '05_content_new_attachment',
|
||||||
|
'new_email': '05_content_new_email',
|
||||||
|
'new_event': '05_content_new_event',
|
||||||
|
'new_label': '04_collections_new_label',
|
||||||
|
'new_picture': '05_content_new_picture',
|
||||||
|
'next': '09_media_next',
|
||||||
|
'next_item': '02_navigation_next_item',
|
||||||
|
'not_important': '03_rating_not_important',
|
||||||
|
'not_secure': '10_device_access_not_secure',
|
||||||
|
'overflow': '01_core_overflow',
|
||||||
|
'paste': '01_core_paste',
|
||||||
|
'pause': '09_media_pause',
|
||||||
|
'pause_over_video': '09_media_pause_over_video',
|
||||||
|
'person': '06_social_person',
|
||||||
|
'phone': '11_hardware_phone',
|
||||||
|
'picture': '05_content_picture',
|
||||||
|
'place': '07_location_place',
|
||||||
|
'play': '09_media_play',
|
||||||
|
'play_over_video': '09_media_play_over_video',
|
||||||
|
'previous': '09_media_previous',
|
||||||
|
'previous_item': '02_navigation_previous_item',
|
||||||
|
'read': '05_content_read',
|
||||||
|
'refresh': '01_core_refresh',
|
||||||
|
'remove': '01_core_remove',
|
||||||
|
'repeat': '09_media_repeat',
|
||||||
|
'replay': '09_media_replay',
|
||||||
|
'reply': '06_social_reply',
|
||||||
|
'reply_all': '06_social_reply_all',
|
||||||
|
'return_from_full_screen': '09_media_return_from_full_screen',
|
||||||
|
'rewind': '09_media_rewind',
|
||||||
|
'ring_volume': '10_device_access_ring_volume',
|
||||||
|
'rotate_left': '08_camera_rotate_left',
|
||||||
|
'rotate_right': '08_camera_rotate_right',
|
||||||
|
'save': '05_content_save',
|
||||||
|
'screen_locked_to_landscape': '10_device_access_screen_locked_to_landscape',
|
||||||
|
'screen_locked_to_portrait': '10_device_access_screen_locked_to_portrait',
|
||||||
|
'screen_rotation': '10_device_access_screen_rotation',
|
||||||
|
'sd_storage': '10_device_access_sd_storage',
|
||||||
|
'search': '01_core_search',
|
||||||
|
'secure': '10_device_access_secure',
|
||||||
|
'select_all': '01_core_select_all',
|
||||||
|
'send_now': '06_social_send_now',
|
||||||
|
'settings': '13_extra_actions_settings',
|
||||||
|
'share': '01_core_share',
|
||||||
|
'shuffle': '09_media_shuffle',
|
||||||
|
'slideshow': '09_media_slideshow',
|
||||||
|
'sort_by_size': '04_collections_sort_by_size',
|
||||||
|
'split': '05_content_split',
|
||||||
|
'stop': '09_media_stop',
|
||||||
|
'storage': '10_device_access_storage',
|
||||||
|
'switch_camera': '08_camera_switch_camera',
|
||||||
|
'switch_video': '08_camera_switch_video',
|
||||||
|
'time': '10_device_access_time',
|
||||||
|
'undo': '01_core_undo',
|
||||||
|
'unread': '05_content_unread',
|
||||||
|
'upload': '09_media_upload',
|
||||||
|
'usb': '10_device_access_usb',
|
||||||
|
'video': '08_camera_video',
|
||||||
|
'view_as_grid': '04_collections_view_as_grid',
|
||||||
|
'view_as_list': '04_collections_view_as_list',
|
||||||
|
'volume_muted': '09_media_volume_muted',
|
||||||
|
'volume_on': '09_media_volume_on',
|
||||||
|
'warning': '12_alerts_and_states_warning',
|
||||||
|
'web_site': '07_location_web_site',
|
||||||
|
}
|
162
Graphics/android-icon-copier/copy
Executable file
@ -0,0 +1,162 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import requests
|
||||||
|
from os.path import expanduser
|
||||||
|
import classic
|
||||||
|
|
||||||
|
resolutions = {
|
||||||
|
'material': ("m", "h", "xh", "xxh", "xxxh"),
|
||||||
|
'fa': ("l", "m", "h", "xh", "xxh"),
|
||||||
|
'classic': ("m", "h", "xh", "xxh"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class AppError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def make_filename(filename_format, cat, name, color, size):
|
||||||
|
args = {
|
||||||
|
'cat': cat or '',
|
||||||
|
'name': name,
|
||||||
|
'color': color,
|
||||||
|
'size': size,
|
||||||
|
}
|
||||||
|
bg = {'white': 'dark', 'grey': 'light', 'black': 'bright'}.get(color) or ''
|
||||||
|
bg_suffix = '_dark' if bg == 'dark' else ''
|
||||||
|
args['bgSuffix'] = bg_suffix
|
||||||
|
args['bg'] = bg
|
||||||
|
return filename_format.format(**args)
|
||||||
|
|
||||||
|
|
||||||
|
def download_url(url, target_path):
|
||||||
|
print("Downloading {} to {} ...".format(url, target_path))
|
||||||
|
print("")
|
||||||
|
#r = requests.get(url, stream=True)
|
||||||
|
r = requests.get(url)
|
||||||
|
if r.status_code != 200:
|
||||||
|
raise AppError("url not found, perhaps invalid name, size or color")
|
||||||
|
with open(target_path, 'wb') as fd:
|
||||||
|
for chunk in r.iter_content(4096):
|
||||||
|
fd.write(chunk)
|
||||||
|
|
||||||
|
|
||||||
|
def make_material_icon_url(cat, res, name, color, size):
|
||||||
|
if color == 'grey':
|
||||||
|
color = 'grey600'
|
||||||
|
elif color not in ('white', 'black'):
|
||||||
|
raise AppError('invalid color')
|
||||||
|
return ('https://raw.githubusercontent.com/google/material-design-icons/master/' +
|
||||||
|
'{}/drawable-{}dpi/ic_{}_{}_{}dp.png').format(cat, res, name, color, size)
|
||||||
|
|
||||||
|
|
||||||
|
def make_fa_icon_url(res, name, color):
|
||||||
|
if color == 'white':
|
||||||
|
holo = 'dark'
|
||||||
|
elif color == 'grey':
|
||||||
|
holo = 'light'
|
||||||
|
else:
|
||||||
|
raise AppError('invalid color')
|
||||||
|
return ('https://raw.githubusercontent.com/svenkapudija/Android-Action-Bar-Icons/' +
|
||||||
|
'master/Font Awesome/holo_{2}/ic_fa_{1}/drawable-{0}dpi/ic_fa_{1}.png').format(res, name, holo)
|
||||||
|
|
||||||
|
|
||||||
|
def make_classic_icon_url(res, name, color):
|
||||||
|
dirname = classic.CLASSIC_MAP.get(name)
|
||||||
|
if not dirname:
|
||||||
|
raise AppError('invalid name')
|
||||||
|
if color == 'white':
|
||||||
|
holo = 'dark'
|
||||||
|
elif color == 'grey':
|
||||||
|
holo = 'light'
|
||||||
|
else:
|
||||||
|
raise AppError('invalid color')
|
||||||
|
return ('https://raw.githubusercontent.com/svenkapudija/Android-Action-Bar-Icons/' +
|
||||||
|
'master/Android Stock/holo_{2}/{3}/drawable-{0}dpi/ic_action_{1}.png').format(res, name, holo, dirname)
|
||||||
|
|
||||||
|
|
||||||
|
def make_target_path(base_path, proj, res, filename):
|
||||||
|
res_path1 = os.path.join(base_path, proj, 'src', 'main', 'res')
|
||||||
|
res_path2 = os.path.join(base_path, proj, 'res')
|
||||||
|
if os.path.isdir(res_path1):
|
||||||
|
res_path = res_path1
|
||||||
|
elif os.path.isdir(res_path2):
|
||||||
|
res_path = res_path2
|
||||||
|
else:
|
||||||
|
raise AppError('missing res dir')
|
||||||
|
res_specific_path = os.path.join(res_path, 'drawable-' + res + 'dpi')
|
||||||
|
try:
|
||||||
|
os.mkdir(res_specific_path)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
return os.path.join(res_specific_path, filename)
|
||||||
|
|
||||||
|
|
||||||
|
def do_material(options, proj_path, cat, name, color, size):
|
||||||
|
base_path = expanduser(options['basePath'])
|
||||||
|
filename_map = options['filenameMap']
|
||||||
|
|
||||||
|
for res in resolutions['material']:
|
||||||
|
filename = make_filename(filename_map['material'], cat, name, color, size)
|
||||||
|
target_path = make_target_path(base_path, proj_path, res, filename)
|
||||||
|
url = make_material_icon_url(cat, res, name, color, size)
|
||||||
|
download_url(url, target_path)
|
||||||
|
|
||||||
|
|
||||||
|
def do_classic_or_fa(options, proj_path, cat, name, color):
|
||||||
|
base_path = expanduser(options['basePath'])
|
||||||
|
filename_map = options['filenameMap']
|
||||||
|
|
||||||
|
for res in resolutions[cat]:
|
||||||
|
filename = make_filename(filename_map[cat], cat, name, color, size=32)
|
||||||
|
target_path = make_target_path(base_path, proj_path, res, filename)
|
||||||
|
url = globals()['make_' + cat + '_icon_url'](res, name, color)
|
||||||
|
download_url(url, target_path)
|
||||||
|
|
||||||
|
|
||||||
|
def print_usage():
|
||||||
|
print("Usage:")
|
||||||
|
print("Material : ./copy <proj path> <category> <color> <icon name> [size]")
|
||||||
|
print("Classic & FA: ./copy <proj path> <fa/classic> <color> <icon name>")
|
||||||
|
print("")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import json
|
||||||
|
|
||||||
|
if len(sys.argv) < 5:
|
||||||
|
print_usage()
|
||||||
|
return
|
||||||
|
|
||||||
|
option_filename = 'options.json'
|
||||||
|
if not os.path.exists(option_filename):
|
||||||
|
option_filename = 'options.templ.json'
|
||||||
|
print("WARNING: using the template options file")
|
||||||
|
print("You should create your own options.json")
|
||||||
|
|
||||||
|
with open(option_filename, 'r') as fd:
|
||||||
|
options = json.load(fd)
|
||||||
|
|
||||||
|
proj_path = sys.argv[1]
|
||||||
|
cat = sys.argv[2]
|
||||||
|
color = sys.argv[3]
|
||||||
|
name = sys.argv[4]
|
||||||
|
|
||||||
|
if cat == 'classic' or cat == 'fa':
|
||||||
|
do_classic_or_fa(options, proj_path, cat, name, color)
|
||||||
|
else:
|
||||||
|
size = sys.argv[5] if len(sys.argv) >= 6 else 0
|
||||||
|
size = int(size) or 24
|
||||||
|
do_material(options, proj_path, cat, name, color, size)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
except AppError as e:
|
||||||
|
print(e.message)
|
||||||
|
|
||||||
|
|
8
Graphics/android-icon-copier/options.templ.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"basePath": "~/Documents",
|
||||||
|
"filenameMap": {
|
||||||
|
"classic": "ic_action_{name}{bgSuffix}.png",
|
||||||
|
"fa": "ic_action_fa_{name}{bgSuffix}.png",
|
||||||
|
"material": "ic_{name}_{color}_{size}dp.png"
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 182 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 475 KiB After Width: | Height: | Size: 475 KiB |
Before Width: | Height: | Size: 579 KiB After Width: | Height: | Size: 579 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 995 B After Width: | Height: | Size: 995 B |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |