Browse Source

Adjusted to appium-android and baangt

bernhardbuhl 4 years ago
parent
commit
88334b3c71
100 changed files with 1625 additions and 121 deletions
  1. 2 0
      .fehbg
  2. 211 115
      Dockerfile
  3. 3 3
      Makefile
  4. 1 2
      README.md
  5. 0 1
      baangt.sh
  6. BIN
      baangtLogo.png
  7. BIN
      baangtLogoWhite.png
  8. 101 0
      devices/profiles/samsung_galaxy_s10.xml
  9. 101 0
      devices/profiles/samsung_galaxy_s6.xml
  10. 101 0
      devices/profiles/samsung_galaxy_s7.xml
  11. 101 0
      devices/profiles/samsung_galaxy_s7_edge.xml
  12. 101 0
      devices/profiles/samsung_galaxy_s8.xml
  13. 101 0
      devices/profiles/samsung_galaxy_s9.xml
  14. 4 0
      devices/skins/README.md
  15. BIN
      devices/skins/galaxy_nexus/land_back.png
  16. BIN
      devices/skins/galaxy_nexus/land_fore.png
  17. BIN
      devices/skins/galaxy_nexus/land_shadow.png
  18. 59 0
      devices/skins/galaxy_nexus/layout
  19. BIN
      devices/skins/galaxy_nexus/port_back.png
  20. BIN
      devices/skins/galaxy_nexus/port_fore.png
  21. BIN
      devices/skins/galaxy_nexus/port_shadow.png
  22. BIN
      devices/skins/galaxy_nexus/thumb.png
  23. BIN
      devices/skins/nexus_10/land_back.png
  24. BIN
      devices/skins/nexus_10/land_fore.png
  25. BIN
      devices/skins/nexus_10/land_shadow.png
  26. 59 0
      devices/skins/nexus_10/layout
  27. BIN
      devices/skins/nexus_10/port_back.png
  28. BIN
      devices/skins/nexus_10/port_fore.png
  29. BIN
      devices/skins/nexus_10/port_shadow.png
  30. BIN
      devices/skins/nexus_10/thumb.png
  31. BIN
      devices/skins/nexus_4/land_back.png
  32. BIN
      devices/skins/nexus_4/land_fore.png
  33. BIN
      devices/skins/nexus_4/land_shadow.png
  34. 59 0
      devices/skins/nexus_4/layout
  35. BIN
      devices/skins/nexus_4/port_back.png
  36. BIN
      devices/skins/nexus_4/port_fore.png
  37. BIN
      devices/skins/nexus_4/port_shadow.png
  38. BIN
      devices/skins/nexus_4/thumb.png
  39. BIN
      devices/skins/nexus_5/land_back.png
  40. BIN
      devices/skins/nexus_5/land_fore.png
  41. BIN
      devices/skins/nexus_5/land_shadow.png
  42. 59 0
      devices/skins/nexus_5/layout
  43. BIN
      devices/skins/nexus_5/port_back.png
  44. BIN
      devices/skins/nexus_5/port_fore.png
  45. BIN
      devices/skins/nexus_5/port_shadow.png
  46. BIN
      devices/skins/nexus_5x/land_back.png
  47. BIN
      devices/skins/nexus_5x/land_fore.png
  48. BIN
      devices/skins/nexus_5x/land_shadow.png
  49. 59 0
      devices/skins/nexus_5x/layout
  50. BIN
      devices/skins/nexus_5x/port_back.png
  51. BIN
      devices/skins/nexus_5x/port_fore.png
  52. BIN
      devices/skins/nexus_5x/port_shadow.png
  53. BIN
      devices/skins/nexus_6/land_back.png
  54. BIN
      devices/skins/nexus_6/land_fore.png
  55. BIN
      devices/skins/nexus_6/land_shadow.png
  56. 59 0
      devices/skins/nexus_6/layout
  57. BIN
      devices/skins/nexus_6/port_back.png
  58. BIN
      devices/skins/nexus_6/port_fore.png
  59. BIN
      devices/skins/nexus_6/port_shadow.png
  60. BIN
      devices/skins/nexus_6p/land_back.png
  61. BIN
      devices/skins/nexus_6p/land_fore.png
  62. BIN
      devices/skins/nexus_6p/land_shadow.png
  63. 59 0
      devices/skins/nexus_6p/layout
  64. BIN
      devices/skins/nexus_6p/port_back.png
  65. BIN
      devices/skins/nexus_6p/port_fore.png
  66. BIN
      devices/skins/nexus_6p/port_shadow.png
  67. BIN
      devices/skins/nexus_7/land_back.png
  68. BIN
      devices/skins/nexus_7/land_fore.png
  69. BIN
      devices/skins/nexus_7/land_shadow.png
  70. 59 0
      devices/skins/nexus_7/layout
  71. BIN
      devices/skins/nexus_7/port_back.png
  72. BIN
      devices/skins/nexus_7/port_fore.png
  73. BIN
      devices/skins/nexus_7/port_shadow.png
  74. BIN
      devices/skins/nexus_7/thumb.png
  75. BIN
      devices/skins/nexus_9/land_back.png
  76. BIN
      devices/skins/nexus_9/land_fore.png
  77. BIN
      devices/skins/nexus_9/land_shadow.png
  78. 59 0
      devices/skins/nexus_9/layout
  79. BIN
      devices/skins/nexus_9/port_back.png
  80. BIN
      devices/skins/nexus_9/port_fore.png
  81. BIN
      devices/skins/nexus_9/port_shadow.png
  82. BIN
      devices/skins/nexus_one/button.png
  83. BIN
      devices/skins/nexus_one/land_back.png
  84. BIN
      devices/skins/nexus_one/land_shadow.png
  85. 134 0
      devices/skins/nexus_one/layout
  86. BIN
      devices/skins/nexus_one/port_back.png
  87. BIN
      devices/skins/nexus_one/port_shadow.png
  88. BIN
      devices/skins/nexus_one/power.png
  89. BIN
      devices/skins/nexus_one/power_land.png
  90. BIN
      devices/skins/nexus_one/thumb.png
  91. BIN
      devices/skins/nexus_one/volume_down.png
  92. BIN
      devices/skins/nexus_one/volume_down_land.png
  93. BIN
      devices/skins/nexus_one/volume_up.png
  94. BIN
      devices/skins/nexus_one/volume_up_land.png
  95. BIN
      devices/skins/nexus_s/button.png
  96. BIN
      devices/skins/nexus_s/land_back.png
  97. BIN
      devices/skins/nexus_s/land_fore.png
  98. BIN
      devices/skins/nexus_s/land_shadow.png
  99. 133 0
      devices/skins/nexus_s/layout
  100. 0 0
      devices/skins/nexus_s/port_back.png

+ 2 - 0
.fehbg

@@ -0,0 +1,2 @@
+#!/bin/sh
+feh --bg-max '/root/logo.png' 

+ 211 - 115
Dockerfile

@@ -1,126 +1,222 @@
-FROM ubuntu:18.04
+FROM appium/appium:1.16.0-p1
+
+LABEL maintainer "Bernhard Buhl <info@baangt.org>"
+LABEL based_on "appium-android by Budi Utomo <budtmo.os@gmail.com>"
+
+#=============
+# Set WORKDIR
+#=============
+WORKDIR /root
+
+#==================
+# General Packages
+#------------------
+# xterm
+#   Terminal emulator
+# supervisor
+#   Process manager
+# socat
+#   Port forwarder
+#------------------
+#  NoVNC Packages
+#------------------
+# x11vnc
+#   VNC server for X display
+#       We use package from ubuntu 18.10 to fix crashing issue
+# openbox
+#   Windows manager
+# feh
+#   ScreenBackground
+# menu
+#   Debian menu
+# python-numpy
+#   Numpy, For faster performance: https://github.com/novnc/websockify/issues/77
+# net-tools
+#   Netstat
+#------------------
+#  Video Recording
+#------------------
+# ffmpeg
+#   Video recorder
+# jq
+#   Sed for JSON data
+#------------------
+#    KVM Package
+# for emulator x86
+# https://help.ubuntu.com/community/KVM/Installation
+#------------------
+# qemu-kvm
+# libvirt-bin
+# ubuntu-vm-builder
+# bridge-utils
+#==================
+# ADD docker/configs/sources1810.list /etc/apt/sources.list.d/
+ADD docker/configs/x11vnc.pref /etc/apt/preferences.d/
+RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends \
+    xterm \
+    supervisor \
+    socat \
+    x11vnc \
+    openbox \
+    feh \
+    menu \
+    python-numpy \
+    net-tools \
+    ffmpeg \
+    jq \
+    qemu-kvm \
+    libvirt-bin \
+    ubuntu-vm-builder \
+    bridge-utils
+
+#    \
+# && apt clean all \
+# && rm -rf /var/lib/apt/lists/*
+
+#=======
+# noVNC
+# Use same commit id that docker-selenium uses
+# https://github.com/elgalu/docker-selenium/blob/236b861177bd2917d864e52291114b1f5e4540d7/Dockerfile#L412-L413
+#=======
+ENV NOVNC_SHA="b403cb92fb8de82d04f305b4f14fa978003890d7" \
+    WEBSOCKIFY_SHA="558a6439f14b0d85a31145541745e25c255d576b"
+RUN  wget -nv -O noVNC.zip "https://github.com/kanaka/noVNC/archive/${NOVNC_SHA}.zip" \
+ && unzip -x noVNC.zip \
+ && rm noVNC.zip  \
+ && mv noVNC-${NOVNC_SHA} noVNC \
+ && wget -nv -O websockify.zip "https://github.com/kanaka/websockify/archive/${WEBSOCKIFY_SHA}.zip" \
+ && unzip -x websockify.zip \
+ && mv websockify-${WEBSOCKIFY_SHA} ./noVNC/utils/websockify \
+ && rm websockify.zip \
+ && ln noVNC/vnc_auto.html noVNC/index.html
+
+#======================
+# Install SDK packages
+#======================
+ARG ANDROID_VERSION=5.0.1
+ARG API_LEVEL=21
+ARG PROCESSOR=x86
+ARG SYS_IMG=x86
+ARG IMG_TYPE=google_apis
+ARG BROWSER=android
+ARG CHROME_DRIVER=2.40
+ARG GOOGLE_PLAY_SERVICE=12.8.74
+ARG GOOGLE_PLAY_STORE=11.0.50
+ARG APP_RELEASE_VERSION=1.5-p0
+ENV ANDROID_VERSION=$ANDROID_VERSION \
+    API_LEVEL=$API_LEVEL \
+    PROCESSOR=$PROCESSOR \
+    SYS_IMG=$SYS_IMG \
+    IMG_TYPE=$IMG_TYPE \
+    BROWSER=$BROWSER \
+    CHROME_DRIVER=$CHROME_DRIVER \
+    GOOGLE_PLAY_SERVICE=$GOOGLE_PLAY_SERVICE \
+    GOOGLE_PLAY_STORE=$GOOGLE_PLAY_STORE \
+    GA=true \
+    GA_ENDPOINT=https://www.google-analytics.com/collect \
+    GA_TRACKING_ID=UA-133466903-1 \
+    GA_API_VERSION="1" \
+    APP_RELEASE_VERSION=$APP_RELEASE_VERSION \
+    APP_TYPE=Emulator
+ENV PATH ${PATH}:${ANDROID_HOME}/build-tools
+
+RUN yes | sdkmanager --licenses && \
+    sdkmanager "platforms;android-${API_LEVEL}" "system-images;android-${API_LEVEL};${IMG_TYPE};${SYS_IMG}" "emulator"
+
+#==============================================
+# Download proper version of chromedriver
+# to be able to use Chrome browser in emulator
+#==============================================
+RUN wget -nv -O chrome.zip "https://chromedriver.storage.googleapis.com/${CHROME_DRIVER}/chromedriver_linux64.zip" \
+ && unzip -x chrome.zip \
+ && rm chrome.zip
+
+#================================================================
+# Download Google Play Services APK and Play Store from apklinker
+#================================================================
+RUN wget -nv -O google_play_services.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b5155e5ef4f8/com.google.android.gms_${GOOGLE_PLAY_SERVICE}-020700-204998136_12874013_MinAPI21_(x86)(nodpi)_apklinker.com.apk"
+RUN wget -nv -O google_play_store.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b632b1164e31/com.android.vending_${GOOGLE_PLAY_STORE}-all-0-PR-206665793_81105000_MinAPI16_(armeabi,armeabi-v7a,mips,mips64,x86,x86_64)(240,320,480dpi)_apklinker.com.apk"
+
+#================================================
+# noVNC Default Configurations
+# These Configurations can be changed through -e
+#================================================
+ENV DISPLAY=:0 \
+    SCREEN=0 \
+    SCREEN_WIDTH=1600 \
+    SCREEN_HEIGHT=900 \
+    SCREEN_DEPTH=24+32 \
+    LOCAL_PORT=5900 \
+    TARGET_PORT=6080 \
+    TIMEOUT=1 \
+    VIDEO_PATH=/tmp/video \
+    LOG_PATH=/var/log/supervisor
+
+#================================================
+# openbox configuration
+# Update the openbox configuration files to:
+#   + Use a single virtual desktop to prevent accidentally switching
+#   + Add background
+#================================================
+ADD baangtLogo.png /root/logo.png
+ADD .fehbg /root/.fehbg
+RUN sed -i "s/<number>4<\/number>/<number>1<\/number>/g" /etc/xdg/openbox/rc.xml \
+    && echo /root/.fehbg >> /etc/xdg/openbox/autostart
+
+#===============
+# Expose Ports
+#---------------
+# 4723
+#   Appium port
+# 6080
+#   noVNC port
+# 5554
+#   Emulator port
+# 5555
+#   ADB connection port
+#===============
+EXPOSE 4723 6080 5554 5555
+
+#======================
+# Add Emulator Devices
+#======================
+COPY devices /root/devices
+
+# ================================
+# Add everything needed for baangt
+# ================================
 
-MAINTAINER Bernhard Buhl <buhl@buhl-consulting.com.cy>
-
-RUN echo "Europe/Rome" > /etc/timezone
-
-RUN apt-get update -q && \
-	export DEBIAN_FRONTEND=noninteractive && \
-    apt-get install -y --no-install-recommends tzdata
-
-RUN dpkg-reconfigure -f noninteractive tzdata
-
-# Install packages
-RUN apt-get update -q && \
-	export DEBIAN_FRONTEND=noninteractive && \
-    dpkg --add-architecture i386 && \
+RUN export DEBIAN_FRONTEND=noninteractive && \
     apt-get install -y --no-install-recommends software-properties-common && \
-    add-apt-repository universe && \
-    apt-get update -q && \
     apt-get remove -y python3.6 && \
     apt-get install -y --no-install-recommends wget curl rsync netcat mg vim bzip2 zip unzip && \
-    apt-get install -y --no-install-recommends libx11-6 libxcb1 libxau6 jq python3-setuptools python3-tk && \
-    apt-get install -y --no-install-recommends lxde tightvncserver xvfb dbus-x11 x11-utils && \
-    apt-get install -y --no-install-recommends xfonts-base xfonts-75dpi xfonts-100dpi && \
+    apt-get install -y --no-install-recommends python3-setuptools python3-tk && \
     apt-get install -y --no-install-recommends python-pip python3.7-dev python-qt4 python3-pip tk-dev && \
-    apt-get install -y --no-install-recommends libssl-dev git jq firefox unzip && \
+    apt-get install -y --no-install-recommends libssl-dev git jq firefox && \
     wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
     dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install && \
-    rm google-chrome-stable_current_amd64.deb && \
-    apt-get -qqy install nodejs && \
-    apt-get install -y npm	
+    rm google-chrome-stable_current_amd64.deb
 
+WORKDIR /
 # Install Baangt
-RUN git clone -b master --single-branch https://gogs.earthsquad.global/athos/baangt --branch master && \
-    pip3 install -r baangt/requirements.txt 
-    
-#=============================================
-# Install Android SDK's and Platform tools
-#=============================================
+RUN git clone -b Appium https://gogs.earthsquad.global/athos/baangt --single-branch  && \
+    pip3 install -r baangt/requirements.txt
 
-RUN export DEBIAN_FRONTEND=noninteractive && \
-    apt-get -y --no-install-recommends install \
-    libc6-i386 \
-    lib32stdc++6 \
-    lib32gcc1 \
-    lib32ncurses5 \
-    lib32z1 \
-    wget \
-    curl \
-    unzip \
-    ca-certificates \
-    tzdata \
-    libqt5webkit5 \
-    libgconf-2-4 \
-    openjdk-8-jdk \
-    xvfb \
-    gnupg \
-  && wget --progress=dot:giga -O /opt/adt.tgz \
-    https://dl.google.com/android/android-sdk_r24.3.4-linux.tgz \
-  && tar xzf /opt/adt.tgz -C /opt \
-  && rm /opt/adt.tgz \
-  && echo y | /opt/android-sdk-linux/tools/android update sdk --all --filter platform-tools,build-tools-23.0.1 --no-ui --force \
-  && apt-get -qqy clean \
-  && rm -rf /var/cache/apt/*
-
-#================================
-# Set up PATH for Android Tools
-#================================
-
-ENV PATH $PATH:/opt/android-sdk-linux/platform-tools:/opt/android-sdk-linux/tools:/usr/lib/jvm/java-8-openjdk-amd64/jre
-ENV ANDROID_HOME /opt/android-sdk-linux
-
-#==========================
-# Install Appium Dependencies
-#==========================
-RUN curl -sL https://deb.nodesource.com/setup_0.12 | bash - \
-  && apt-get -qqy install \
-    python \
-    make \
-    build-essential \
-    g++
-
-#=====================
-# Install Appium
-#=====================
-ENV APPIUM_VERSION 1.4.16
-
-RUN mkdir /opt/appium \
-  && cd /opt/appium \
-  && npm install appium@$APPIUM_VERSION \
-  && ln -s /opt/appium/node_modules/.bin/appium /usr/bin/appium
-
-EXPOSE 4723
-
-WORKDIR /root/
-
-# VNC-Server 
-RUN mkdir -p /root/.vnc
-COPY xstartup /root/.vnc/
-RUN chmod a+x /root/.vnc/xstartup
-RUN touch /root/.vnc/passwd && \
-    /bin/bash -c "echo -e 'password\npassword\nn' | vncpasswd" > /root/.vnc/passwd && \ 
-    chmod 400 /root/.vnc/passwd && \
-    chmod go-rwx /root/.vnc && \
-    touch /root/.Xauthority
-
-COPY start-vncserver.sh /root/
-COPY baangt.sh /root/
-COPY getdrivers.sh /root/
-RUN chmod a+x /root/start-vncserver.sh && \
-    chmod a+x /root/baangt.sh && \
-    chmod a+x /root/getdrivers.sh && \
-    /root/getdrivers.sh && \
-    echo "mycontainer" > /etc/hostname && \
-    echo "127.0.0.1	localhost" > /etc/hosts && \
-    echo "127.0.0.1	mycontainer" >> /etc/hosts
-
-EXPOSE 5901
-ENV USER root
-CMD [ "/root/start-vncserver.sh" ]
-
-#==========================
-# Run appium as default
-#==========================
-CMD /usr/bin/appium
+# Download Browser Drivers:
+WORKDIR /baangt
+RUN mkdir /baangt/browserDrivers
+RUN python3 baangt.py --reloadDrivers=True
+
+
+#===================
+# Run docker-appium
+#===================
+WORKDIR /root
+COPY src /root/src
+COPY supervisord.conf /root/
+RUN chmod -R +x /root/src && chmod +x /root/supervisord.conf
+
+HEALTHCHECK --interval=2s --timeout=40s --retries=1 \
+    CMD timeout 40 adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done'
 
+CMD /usr/bin/supervisord --configuration supervisord.conf

+ 3 - 3
Makefile

@@ -1,6 +1,6 @@
 
-REPOSITORY?=baangt/baangt-appium-vnc
-NAME?=baangtAppiumVNC
+REPOSITORY?=baangt/baangt-appium-novnc
+NAME?=baangtAppiumNoVNC
 TAG?=latest
 
 DOCKER = docker
@@ -26,7 +26,7 @@ build:
 .PHONY: run
 run:
 	@echo "$(OK_COLOR)==>$(NO_COLOR) Running $(REPOSITORY):$(TAG)"
-	@docker run --rm -ti -p 5902:5901 --name $(NAME) $(REPOSITORY):$(TAG)
+	@docker docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" -e APPIUM=true --name $(NAME) $(REPOSITORY):$(TAG)
 
 .PHONY: shell
 shell:

+ 1 - 2
README.md

@@ -18,8 +18,7 @@ $ make run
 which is a shorthand for:
 
 ```bash
-$ docker run --rm -ti -p 5902:5901 --name docker-ubuntu baangt/docker-ubuntu-vnc:latest
-```
+$ docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" -e APPIUM=true --name android-container baangt-android_emulator```
 
 To get a shell on a running container:
 

+ 0 - 1
baangt.sh

@@ -1 +0,0 @@
-python3 /baangt/baangt.py

BIN
baangtLogo.png


BIN
baangtLogoWhite.png


+ 101 - 0
devices/profiles/samsung_galaxy_s10.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S10</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>6.1</d:diagonal-length>
+                <d:pixel-density>xxxhdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>3040</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">4</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 101 - 0
devices/profiles/samsung_galaxy_s6.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S6</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>5.10</d:diagonal-length>
+                <d:pixel-density>hdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>2560</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">3</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 101 - 0
devices/profiles/samsung_galaxy_s7.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S7</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>5.10</d:diagonal-length>
+                <d:pixel-density>xxxhdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>2560</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">4</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 101 - 0
devices/profiles/samsung_galaxy_s7_edge.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S7 Edge</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>5.50</d:diagonal-length>
+                <d:pixel-density>xxxhdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>2560</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">4</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 101 - 0
devices/profiles/samsung_galaxy_s8.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S8</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>5.80</d:diagonal-length>
+                <d:pixel-density>xxxhdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>2960</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">4</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 101 - 0
devices/profiles/samsung_galaxy_s9.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<d:devices xmlns:d="http://schemas.android.com/sdk/devices/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <d:device>
+        <d:name>Samsung Galaxy S9</d:name>
+        <d:manufacturer>User</d:manufacturer>
+        <d:meta/>
+        <d:hardware>
+            <d:screen>
+                <d:screen-size>large</d:screen-size>
+                <d:diagonal-length>5.80</d:diagonal-length>
+                <d:pixel-density>xxxhdpi</d:pixel-density>
+                <d:screen-ratio>long</d:screen-ratio>
+                <d:dimensions>
+                    <d:x-dimension>1440</d:x-dimension>
+                    <d:y-dimension>2960</d:y-dimension>
+                </d:dimensions>
+                <d:xdpi>575.92</d:xdpi>
+                <d:ydpi>575.92</d:ydpi>
+                <d:touch>
+                    <d:multitouch>jazz-hands</d:multitouch>
+                    <d:mechanism>finger</d:mechanism>
+                    <d:screen-type>capacitive</d:screen-type>
+                </d:touch>
+            </d:screen>
+            <d:networking>
+                Bluetooth
+                Wifi
+                NFC
+            </d:networking>
+            <d:sensors>
+                Accelerometer
+                Barometer
+                Compass
+                GPS
+                Gyroscope
+                LightSensor
+                ProximitySensor
+            </d:sensors>
+            <d:mic>true</d:mic>
+            <d:camera>
+                <d:location>back</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:camera>
+                <d:location>front</d:location>
+                <d:autofocus>true</d:autofocus>
+                <d:flash>true</d:flash>
+            </d:camera>
+            <d:keyboard>qwerty</d:keyboard>
+            <d:nav>nonav</d:nav>
+            <d:ram unit="GiB">4</d:ram>
+            <d:buttons>hard</d:buttons>
+            <d:internal-storage unit="GiB">
+                4
+            </d:internal-storage>
+            <d:removable-storage unit="TiB"/>
+            <d:cpu>Generic CPU</d:cpu>
+            <d:gpu>Generic GPU</d:gpu>
+            <d:abi>
+                armeabi-v7a
+                x86
+                x86_64
+            </d:abi>
+            <d:dock/>
+            <d:power-type>battery</d:power-type>
+        </d:hardware>
+        <d:software>
+            <d:api-level>-</d:api-level>
+            <d:live-wallpaper-support>true</d:live-wallpaper-support>
+            <d:bluetooth-profiles/>
+            <d:gl-version>2.0</d:gl-version>
+            <d:gl-extensions/>
+            <d:status-bar>false</d:status-bar>
+        </d:software>
+        <d:state default="true" name="Portrait">
+            <d:description>The device in portrait orientation</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape">
+            <d:description>The device in landscape orientation</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keyshidden</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Portrait with keyboard">
+            <d:description>The device in portrait orientation with a keyboard open</d:description>
+            <d:screen-orientation>port</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+        <d:state name="Landscape with keyboard">
+            <d:description>The device in landscape orientation with a keyboard open</d:description>
+            <d:screen-orientation>land</d:screen-orientation>
+            <d:keyboard-state>keysexposed</d:keyboard-state>
+            <d:nav-state>navhidden</d:nav-state>
+        </d:state>
+    </d:device>
+</d:devices>

+ 4 - 0
devices/skins/README.md

@@ -0,0 +1,4 @@
+Sources
+--------
+
+The Emulator skins are taken from [Android Studio IDE](https://developer.android.com/studio) and [Samsung Developer Website](https://developer.samsung.com/home.do)

BIN
devices/skins/galaxy_nexus/land_back.png


BIN
devices/skins/galaxy_nexus/land_fore.png


BIN
devices/skins/galaxy_nexus/land_shadow.png


+ 59 - 0
devices/skins/galaxy_nexus/layout

@@ -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
+    }
+  }
+}

BIN
devices/skins/galaxy_nexus/port_back.png


BIN
devices/skins/galaxy_nexus/port_fore.png


BIN
devices/skins/galaxy_nexus/port_shadow.png


BIN
devices/skins/galaxy_nexus/thumb.png


BIN
devices/skins/nexus_10/land_back.png


BIN
devices/skins/nexus_10/land_fore.png


BIN
devices/skins/nexus_10/land_shadow.png


+ 59 - 0
devices/skins/nexus_10/layout

@@ -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
+    }
+  }
+}

BIN
devices/skins/nexus_10/port_back.png


BIN
devices/skins/nexus_10/port_fore.png


BIN
devices/skins/nexus_10/port_shadow.png


BIN
devices/skins/nexus_10/thumb.png


BIN
devices/skins/nexus_4/land_back.png


BIN
devices/skins/nexus_4/land_fore.png


BIN
devices/skins/nexus_4/land_shadow.png


+ 59 - 0
devices/skins/nexus_4/layout

@@ -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
devices/skins/nexus_4/port_back.png


BIN
devices/skins/nexus_4/port_fore.png


BIN
devices/skins/nexus_4/port_shadow.png


BIN
devices/skins/nexus_4/thumb.png


BIN
devices/skins/nexus_5/land_back.png


BIN
devices/skins/nexus_5/land_fore.png


BIN
devices/skins/nexus_5/land_shadow.png


+ 59 - 0
devices/skins/nexus_5/layout

@@ -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
devices/skins/nexus_5/port_back.png


BIN
devices/skins/nexus_5/port_fore.png


BIN
devices/skins/nexus_5/port_shadow.png


BIN
devices/skins/nexus_5x/land_back.png


BIN
devices/skins/nexus_5x/land_fore.png


BIN
devices/skins/nexus_5x/land_shadow.png


+ 59 - 0
devices/skins/nexus_5x/layout

@@ -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
+    }
+  }
+}

BIN
devices/skins/nexus_5x/port_back.png


BIN
devices/skins/nexus_5x/port_fore.png


BIN
devices/skins/nexus_5x/port_shadow.png


BIN
devices/skins/nexus_6/land_back.png


BIN
devices/skins/nexus_6/land_fore.png


BIN
devices/skins/nexus_6/land_shadow.png


+ 59 - 0
devices/skins/nexus_6/layout

@@ -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
devices/skins/nexus_6/port_back.png


BIN
devices/skins/nexus_6/port_fore.png


BIN
devices/skins/nexus_6/port_shadow.png


BIN
devices/skins/nexus_6p/land_back.png


BIN
devices/skins/nexus_6p/land_fore.png


BIN
devices/skins/nexus_6p/land_shadow.png


+ 59 - 0
devices/skins/nexus_6p/layout

@@ -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
+    }
+  }
+}

BIN
devices/skins/nexus_6p/port_back.png


BIN
devices/skins/nexus_6p/port_fore.png


BIN
devices/skins/nexus_6p/port_shadow.png


BIN
devices/skins/nexus_7/land_back.png


BIN
devices/skins/nexus_7/land_fore.png


BIN
devices/skins/nexus_7/land_shadow.png


+ 59 - 0
devices/skins/nexus_7/layout

@@ -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
devices/skins/nexus_7/port_back.png


BIN
devices/skins/nexus_7/port_fore.png


BIN
devices/skins/nexus_7/port_shadow.png


BIN
devices/skins/nexus_7/thumb.png


BIN
devices/skins/nexus_9/land_back.png


BIN
devices/skins/nexus_9/land_fore.png


BIN
devices/skins/nexus_9/land_shadow.png


+ 59 - 0
devices/skins/nexus_9/layout

@@ -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
devices/skins/nexus_9/port_back.png


BIN
devices/skins/nexus_9/port_fore.png


BIN
devices/skins/nexus_9/port_shadow.png


BIN
devices/skins/nexus_one/button.png


BIN
devices/skins/nexus_one/land_back.png


BIN
devices/skins/nexus_one/land_shadow.png


+ 134 - 0
devices/skins/nexus_one/layout

@@ -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
+    }
+  }
+}

BIN
devices/skins/nexus_one/port_back.png


BIN
devices/skins/nexus_one/port_shadow.png


BIN
devices/skins/nexus_one/power.png


BIN
devices/skins/nexus_one/power_land.png


BIN
devices/skins/nexus_one/thumb.png


BIN
devices/skins/nexus_one/volume_down.png


BIN
devices/skins/nexus_one/volume_down_land.png


BIN
devices/skins/nexus_one/volume_up.png


BIN
devices/skins/nexus_one/volume_up_land.png


BIN
devices/skins/nexus_s/button.png


BIN
devices/skins/nexus_s/land_back.png


BIN
devices/skins/nexus_s/land_fore.png


BIN
devices/skins/nexus_s/land_shadow.png


+ 133 - 0
devices/skins/nexus_s/layout

@@ -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
+    }
+  }
+}

+ 0 - 0
devices/skins/nexus_s/port_back.png


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