Refactored code, added log and emulator skins

This commit is contained in:
butomo1989 2017-02-27 14:53:48 +01:00
parent 87ed3c6a1f
commit 30b2205987
130 changed files with 1303 additions and 264 deletions

View file

@ -99,11 +99,16 @@ EXPOSE 6080
#==================
# Add Browser APKs
#==================
COPY example/browser_apk /root/browser_apk
COPY browser_apk /root/browser_apk
#====================
# Add Emulator Skins
#====================
COPY skins /root/skins
#===================
# Run docker-appium
#===================
COPY supervisord.conf /root/
COPY service /root/service
COPY src /root/src
CMD /usr/bin/supervisord --configuration supervisord.conf

View file

@ -1,161 +0,0 @@
import logging
import os
import re
import subprocess
import appium
from service import CONFIG_FILE
logging.basicConfig()
logger = logging.getLogger('main')
# not using enum because need to install pip that will make docker image size bigger
TYPE_ARMEABI = 'armeabi'
TYPE_X86 = 'x86'
def run():
"""
Start noVNC, installation of needed android SDK packages and Appium server.
"""
# Get android version package
android_version = os.getenv('ANDROID_VERSION', '4.2.2')
emulator_name = 'emulator_{version}'.format(version=android_version)
os.environ['EMULATOR_NAME'] = emulator_name
# Get emulator type
types = [TYPE_ARMEABI, TYPE_X86]
emulator_type = os.getenv('EMULATOR_TYPE', TYPE_ARMEABI).lower()
emulator_type = TYPE_ARMEABI if emulator_type not in types else emulator_type
# Link emulator shortcut
subprocess.check_call('ln -s $ANDROID_HOME/tools/{shortcut_file} $ANDROID_HOME/tools/emulator'.format(
shortcut_file='emulator64-x86' if emulator_type == TYPE_X86 else 'emulator64-arm'), shell=True)
# Option to connect with selenium server
connect_to_grid = str_to_bool(str(os.getenv('CONNECT_TO_GRID', False)))
logger.info('Connect with selenium grid? {input}'.format(input=connect_to_grid))
appium_cmd = 'appium'
if connect_to_grid:
try:
appium_host = os.getenv('APPIUM_HOST', '127.0.0.1')
appium_port = int(os.getenv('APPIUM_PORT', 4723))
selenium_host = os.getenv('SELENIUM_HOST', '172.17.0.1')
selenium_port = int(os.getenv('SELENIUM_PORT', 4444))
appium.create_node_config(CONFIG_FILE, emulator_name, android_version,
appium_host, appium_port, selenium_host, selenium_port)
appium_cmd += ' --nodeconfig {file}'.format(file=CONFIG_FILE)
except ValueError as v_err:
logger.error(v_err)
# Start installation of android packages, emulator creation and appium in a terminal
android_cmd = get_android_bash_commands(android_version, emulator_type)
if android_cmd:
cmd = 'xterm -T "Android-Appium" -n "Android-Appium" -e \"{android} && ' \
'/bin/echo $EMULATOR_NAME && {appium}\"'.format(android=android_cmd, appium=appium_cmd)
else:
logger.warning('There is no android packages installed!')
cmd = 'xterm -e \"{appium}\"'.format(appium=appium_cmd)
subprocess.check_call(cmd, shell=True)
def get_available_sdk_packages():
"""
Get list of available sdk packages.
:return: List of available packages.
:rtype: bytearray
"""
cmd = ['android', 'list', 'sdk']
output_str = subprocess.check_output(cmd)
logger.info('List of Android SDK: ')
logger.info(output_str)
return [output.strip() for output in output_str.split('\n')] if output_str else None
def get_item_position(keyword, items):
"""
Get position of item in array by given keyword.
:return: item position
:rtype: int
"""
pos = 0
for p, v in enumerate(items):
if keyword in v:
pos = p
break # Get the first item that match with keyword
return pos
def get_android_bash_commands(android_version, emulator_type):
"""
Get bash commands to install given android version and to create android emulator based on given type.
To see list of available targets: android list targets
To see list to avd: android list avd
:param android_version: android version
:type android_version: str
:param emulator_type: emulator type
:type emulator_type: str
:return: bash commands
:rtype: bytearray
"""
bash_command = None
try:
packages = get_available_sdk_packages()
if packages:
item_pos = get_item_position(android_version, packages)
logger.info('item position: {pos}'.format(pos=item_pos))
item = packages[item_pos]
item_info = item.split('-')
package_number = item_info[0]
api_version = re.search('%s(.*)%s' % ('API', ','), item_info[1]).group(1).strip()
logger.info(
'Package number: {number}, API version: {version}'.format(number=package_number, version=api_version))
commands = []
# Command to install SDK package
commands.append('echo y | android update sdk --no-ui --filter {number}'.format(number=package_number))
# Command to install system image and create android emulator
sys_img = 'x86' if emulator_type == TYPE_X86 else 'armeabi-v7a'
commands.append('echo y | android update sdk --no-ui -a --filter sys-img-{sys_img}-android-{api}'.format(
sys_img=sys_img, api=api_version))
commands.append(
'echo no | android create avd -f -n emulator_{version} -t android-{api} --abi {sys_img}'.format(
version=android_version, api=api_version, sys_img=sys_img))
# Join all commands in one str for xterm
bash_command = ' && '.join(commands)
else:
raise RuntimeError('Packages is empty!')
except IndexError as i_err:
logger.error(i_err)
return bash_command
def str_to_bool(str):
"""
Convert string to boolean.
:param str: given string
:type str: str
:return: converted string
:rtype: bool
"""
return str.lower() in ('yes', 'true', 't', '1')
if __name__ == '__main__':
logger.setLevel(logging.INFO)
run()

View file

@ -1,73 +0,0 @@
"""Unit test for start.py."""
import os
from unittest import TestCase
import mock
from service import start
class TestService(TestCase):
"""Unit test class to test method run."""
def setUp(self):
os.environ['ANDROID_VERSION'] = '4.2.2'
os.environ['EMULATOR_TYPE'] = start.TYPE_X86
os.environ['CONNECT_TO_GRID'] = str(False)
@mock.patch('subprocess.check_call')
@mock.patch('service.start.get_android_bash_commands')
def test_without_selenium_server(self, mocked_subprocess, mocked_bash_cmd):
self.assertFalse(mocked_subprocess.called)
self.assertFalse(mocked_bash_cmd.called)
start.run()
self.assertTrue(mocked_subprocess.called)
self.assertTrue(mocked_bash_cmd.called)
@mock.patch('subprocess.check_call')
@mock.patch('service.appium.create_node_config')
@mock.patch('service.start.get_android_bash_commands')
def test_with_selenium_server(self, mocked_subprocess, mocked_config, mocked_bash_cmd):
os.environ['CONNECT_TO_GRID'] = str(True)
self.assertFalse(mocked_subprocess.called)
self.assertFalse(mocked_config.called)
self.assertFalse(mocked_bash_cmd.called)
start.run()
self.assertTrue(mocked_subprocess.called)
self.assertTrue(mocked_config.called)
self.assertTrue(mocked_bash_cmd.called)
@mock.patch('subprocess.check_call')
@mock.patch('service.appium.create_node_config')
@mock.patch('service.start.get_android_bash_commands')
def test_invalid_integer(self, mocked_subprocess, mocked_config, mocked_bash_cmd):
os.environ['CONNECT_TO_GRID'] = str(True)
os.environ['APPIUM_PORT'] = 'test'
self.assertFalse(mocked_subprocess.called)
self.assertFalse(mocked_config.called)
self.assertFalse(mocked_bash_cmd.called)
start.run()
self.assertTrue(mocked_subprocess.called)
self.assertFalse(mocked_config.called)
self.assertTrue(mocked_bash_cmd.called)
self.assertRaises(ValueError)
@mock.patch('service.start.get_android_bash_commands')
@mock.patch('subprocess.check_call')
@mock.patch('service.start.logger.warning')
def test_empty_android_cmd(self, mocked_bash_cmd, mocked_subprocess, mocked_logger_warning):
mocked_bash_cmd.return_value = None
self.assertFalse(mocked_subprocess.called)
self.assertFalse(mocked_logger_warning.called)
start.run()
self.assertTrue(mocked_subprocess.called)
self.assertTrue(mocked_logger_warning.called)
def tearDown(self):
del os.environ['ANDROID_VERSION']
del os.environ['EMULATOR_TYPE']
if os.getenv('CONNECT_TO_GRID') == str(True):
del os.environ['CONNECT_TO_GRID']
if os.getenv('APPIUM_PORT'):
del os.environ['APPIUM_PORT']

View file

@ -2,7 +2,7 @@
cover-xml=true
cover-xml-file=coverage.xml
with-coverage=true
cover-package=service
cover-package=src
cover-erase=true
with-xunit=true
xunit-file=xunit.xml

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

59
skins/galaxy_nexus/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 720
height 1280
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1101
height 1709
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 192
y 213
}
}
landscape {
width 1847
height 886
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 304
y 788
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

59
skins/nexus_10/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1600
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 2330
height 3136
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 366
y 266
}
}
landscape {
width 3340
height 2176
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 388
y 1866
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
skins/nexus_10/thumb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
skins/nexus_4/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 KiB

BIN
skins/nexus_4/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

59
skins/nexus_4/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 768
height 1280
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 958
height 1678
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 94
y 187
}
}
landscape {
width 1799
height 885
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 257
y 813
rotation 3
}
}
}

BIN
skins/nexus_4/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

BIN
skins/nexus_4/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
skins/nexus_4/thumb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
skins/nexus_5/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
skins/nexus_5/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

59
skins/nexus_5/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1080
height 1920
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1370
height 2405
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 144
y 195
}
}
landscape {
width 2497
height 1235
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 261
y 1145
rotation 3
}
}
}

BIN
skins/nexus_5/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
skins/nexus_5/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

59
skins/nexus_5x/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1080
height 1920
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1370
height 2446
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 147
y 233
}
}
landscape {
width 2497
height 1234
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 278
y 1143
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
skins/nexus_6/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

BIN
skins/nexus_6/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

59
skins/nexus_6/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1440
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1896
height 3054
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 229
y 239
}
}
landscape {
width 3142
height 1639
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 318
y 1516
rotation 3
}
}
}

BIN
skins/nexus_6/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 KiB

BIN
skins/nexus_6/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

59
skins/nexus_6p/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1440
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1840
height 3251
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 195
y 329
}
}
landscape {
width 3427
height 1620
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 442
y 1511
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,001 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
skins/nexus_7/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
skins/nexus_7/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

59
skins/nexus_7/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 800
height 1280
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1094
height 1689
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 142
y 190
}
}
landscape {
width 1803
height 1045
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 260
y 905
rotation 3
}
}
}

BIN
skins/nexus_7/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
skins/nexus_7/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
skins/nexus_7/thumb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

59
skins/nexus_7_2013/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1200
height 1920
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1596
height 2571
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 195
y 301
}
}
landscape {
width 2772
height 1479
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 423
y 1320
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
skins/nexus_9/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
skins/nexus_9/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

59
skins/nexus_9/layout Normal file
View file

@ -0,0 +1,59 @@
parts {
device {
display {
width 1536
height 2048
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1978
height 2631
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 219
y 264
}
}
landscape {
width 2854
height 1785
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 401
y 1635
rotation 3
}
}
}

BIN
skins/nexus_9/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
skins/nexus_9/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
skins/nexus_one/button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

134
skins/nexus_one/layout Normal file
View file

@ -0,0 +1,134 @@
parts {
device {
display {
width 480
height 800
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
buttons {
back {
image button.png
x 161
y 945
}
soft-left {
image button.png
x 282
y 945
}
home {
image button.png
x 402
y 945
}
search {
image button.png
x 524
y 945
}
volume-up {
image volume_up.png
x 23
y 196
}
volume-down {
image volume_down.png
x 23
y 258
}
power {
image power.png
x 147
y 0
}
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
buttons {
back {
image button.png
x 1015
y 449
}
soft-left {
image button.png
x 1015
y 327
}
home {
image button.png
x 1015
y 207
}
search {
image button.png
x 1014
y 86
}
volume-up {
image volume_up_land.png
x 262
y 534
}
volume-down {
image volume_down_land.png
x 323
y 534
}
power {
image power_land.png
x 38
y 422
}
}
}
}
layouts {
portrait {
width 732
height 1178
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 125
y 131
}
}
landscape {
width 1300
height 612
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 200
y 532
rotation 3
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
skins/nexus_one/power.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
skins/nexus_one/thumb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

BIN
skins/nexus_s/button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
skins/nexus_s/land_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
skins/nexus_s/land_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

133
skins/nexus_s/layout Normal file
View file

@ -0,0 +1,133 @@
parts {
device {
display {
width 480
height 800
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
buttons {
back {
image button.png
x 165
y 991
}
soft-left {
image button.png
x 279
y 991
}
search {
image button.png
x 390
y 991
}
home {
image button.png
x 502
y 993
}
volume-up {
image volume_up.png
x 23
y 305
}
volume-down {
image volume_down.png
x 23
y 412
}
power {
image power.png
x 627
y 215
}
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
buttons {
back {
image button.png
x 1039
y 430
}
soft-left {
image button.png
x 1039
y 318
}
search {
image button.png
x 1039
y 206
}
home {
image button.png
x 1039
y 94
}
volume-up {
image volume_up_land.png
x 361
y 519
}
volume-down {
image volume_down_land.png
x 459
y 519
}
power {
image power_land.png
x 266
y -11
}
}
}
}
layouts {
portrait {
width 719
height 1139
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 119
y 160
}
}
landscape {
width 1210
height 586
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 208
y 524
rotation 3
}
}
}

BIN
skins/nexus_s/port_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
skins/nexus_s/port_fore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
skins/nexus_s/power.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Some files were not shown because too many files have changed in this diff Show more