Compare commits

..

2 Commits

Author SHA1 Message Date
Dan Ballard f59240e6c8 try path join only for qml path
the build was successful Details
2020-10-28 15:50:19 -07:00
Dan Ballard 8337c92f45 log assetFolder, use sperator rune
the build was successful Details
2020-10-28 15:43:16 -07:00
4167 changed files with 227662 additions and 262030 deletions

View File

@ -33,10 +33,9 @@ pipeline:
- tar -czf $FILENAME cwtch
- sha256sum $FILENAME > $FILENAME.sha256
- rm -r cwtch
build-android-arm-v7a:
build-android:
mem_limit: 3G
image: therecipe/qt:android
secrets: [upload_jks_file,upload_jks_pass]
when:
repo: cwtch.im/ui
branch: master
@ -53,65 +52,18 @@ pipeline:
- apt-get -qq update && apt-get --no-install-recommends -qq -y install ca-certificates curl git
- rm -r vendor/
- make clean
- echo "cwtch-upload" > android/jks_alias
- echo $UPLOAD_JKS_PASS > android/jks_pass
- echo $UPLOAD_JKS_FILE | tr -d '\n ' > android/ui.jks.b64
- base64 --decode android/ui.jks.b64 > android/ui.jks
- export GOARCH=arm
- go mod download
- export VERSION=`git describe --tags`
- export BUILDDATE=`date +%G-%m-%d-%H-%M`
- go mod vendor
- qtsetup generate android
- qtsetup generate android
- mv assets android/
- ANDROID_MODULES_INCLUDE="Core,Gui,Svg,QuickWidgets,Xml" qtdeploy -ldflags "-X main.buildVer=$VERSION -X main.buildDate=$BUILDDATE" build android
- qtdeploy -ldflags "-X main.buildVer=$VERSION -X main.buildDate=$BUILDDATE" build android
- mv android/assets assets
- cd deploy
- export FILENAME=cwtch-android-arm-v7a-$BUILDDATE.apk
- cp android/build-release-signed.apk $FILENAME
- export FILENAME=cwtch-android-$BUILDDATE.apk
- cp android/build-debug.apk $FILENAME
- sha256sum $FILENAME > $FILENAME.sha256
- rm -r android
build-android-arm64-v8a:
mem_limit: 3G
image: therecipe/qt:android
secrets: [upload_jks_file,upload_jks_pass]
when:
repo: cwtch.im/ui
branch: master
event: push
environment:
- QT_DIR=/opt/Qt
- QT_DOCKER='true'
- QT_API=5.13.0
- ANDROID_NDK_DIR=/home/user/android-ndk-r18b
- ANDROID_SDK_DIR=/home/user/android-sdk-linux
- GO111MODULE=on
commands:
- export PATH=$PATH:/home/user/work/bin:/media/sf_GOPATH1/bin
- apt-get -qq update && apt-get --no-install-recommends -qq -y install ca-certificates curl git
- rm -r vendor/
- make clean
- echo "cwtch-upload" > android/jks_alias
- echo $UPLOAD_JKS_PASS > android/jks_pass
- echo $UPLOAD_JKS_FILE | tr -d '\n ' > android/ui.jks.b64
- base64 --decode android/ui.jks.b64 > android/ui.jks
- export GOARCH=arm64
- perl -pe 's/versionCode="(\d+)"/"versionCode=\"" .($1+1)."\""/eg' android/AndroidManifest.xml > android/AndroidManifest.xml.inc
- rm android/AndroidManifest.xml
- mv android/AndroidManifest.xml.inc android/AndroidManifest.xml
- go mod download
- export VERSION=`git describe --tags`
- export BUILDDATE=`date +%G-%m-%d-%H-%M`
- go mod vendor
- qtsetup generate android
- mv assets android/
- ANDROID_MODULES_INCLUDE="Core,Gui,Svg,QuickWidgets,Xml" qtdeploy -ldflags "-X main.buildVer=$VERSION -X main.buildDate=$BUILDDATE" build android
- mv android/assets assets
- cd deploy
- export FILENAME=cwtch-android-arm64-v8a-$BUILDDATE.apk
- cp android/build-release-signed.apk $FILENAME
- sha256sum $FILENAME > $FILENAME.sha256
- rm -r android
build-windows:
mem_limit: 3G
image: therecipe/qt:windows_64_static
@ -145,25 +97,7 @@ pipeline:
- export FILENAME=cwtch-windows-$BUILDDATE.zip
- zip -r $FILENAME cwtch
- sha256sum $FILENAME > $FILENAME.sha256
- mv cwtch windows
package-windows:
mem_limit: 3G
image: hp41/nsis:latest
when:
repo: cwtch.im/ui
branch: [ master, windows_build ]
event: push
environment:
commands:
- cp nsis/cwtch-installer.nsi deploy/
- cd deploy
- makensis -V3 cwtch-installer.nsi
- export BUILDDATE=`date +%G-%m-%d-%H-%M`
- export FILENAME=cwtch-installer-$BUILDDATE.exe
- mv cwtch-installer.exe $FILENAME
- sha256sum $FILENAME > $FILENAME.sha256
- rm cwtch-installer.nsi
- rm -r windows
- rm -r cwtch
deploy-buildfiles:
image: pivotaldata/concourse-ssh
secrets: [buildfiles_key]

View File

@ -1,89 +0,0 @@
# Notes on Android Debugging
If you are reading this you are probably interested in developing Cwtch for Android! Awesome.
The Cwtch UI app is intended to be a single codebase that runs on multiple platforms. This
complicates the build process in favour of simplifying the code (so goes the theory).
We make use of https://github.com/therecipe/qt/ for deploying Go/Qt code to Android. Before you venture into the weeds
of this README please take a look at the [Installation](https://github.com/therecipe/qt/wiki/Installation)
and [Setup instructions](https://github.com/therecipe/qt/wiki/Deploying-Linux-to-Android) in therecipe/qt.
## Building
Check out and follow the instructions at https://github.com/therecipe/qt/wiki/Deploying-Linux-to-Android as they are sufficient,
below you will find high-level notes regarding the process.
You need to run `qtsetup --qt_version=<vesion> full android` for the non-docker setup. You will need to do this
for every major version change of therecipe dependencies.
You will also need the Android 28 SDK (Pie), the NDK, SDK build tools and platform tools, gradle and **JDK 8**
JAVA_JDK=/path/to/jre8
ANDROID_NDK_DIR=/path/to/ndk
Once all that setup is done you should be able to run:
ANDROID_MODULES_INCLUDE="Core,Gui,Svg,QuickWidgets,Xml" qtdeploy build android
2-4 minutes later an android apk will pop out in `./deploy/android/build-debug.apk`.
### Build Setup Issues we have seen
* `Could not determine java version from <blah>` - this is thrown by gradle inside the `androiddeployqt` process when the
Java version is *not* JRE8. Ensure that JAVA_HOME is pointed to the correct java installation.
* ` readelf <blah> "is not an ordinary file"` - this isn't actually an error that will stop the build, but sometimes
because of the very long debug log output you will come across it when trying to find the *actual* error (which is
probably a Java version issue). It can be safely ignored.
* `could not find QAndroid...` / `CPP build errors` - you will need to run `qtsetup` full android` for the Qt version
you are using.
* Example: androidextras_android.cpp:9:10: fatal error: 'QAndroidActivityResultReceiver' file not found
## Testing on a Real Device
Consult the Android documentation on setting up your device for development.
You will need an android sdk, setup your device for USB Debugging and then with `adb` you can do:
adb install -r ./deploy/android/build-debug.apk
To get the logs you can run
adb logcat
Android Studio provides a nice logcat interface for quickly filtering log files that can be very useful when trying to
debug complex behavior, but command line tools like `grep` and the built-in [logcat filtering](https://developer.android.com/studio/command-line/logcat)
should also suffice.
*Important*: Cwtch UI technically runs *3* different applications: Cwtch Frontend (application client),
Cwtch Backend (application server) and Tor. When filtering logcat you should be aware that some of your messages might
be getting logged by a different process.
(*Ctrl-F Helper: "Why are log messages missing"*)
# Bundled Libraries
There seems to be a bug in Qt (https://bugreports.qt.io/browse/QTBUG-84371) that prevents the use of
`AndroidExtras` in `ANDROID_MODULES_INCLUDE` so we bundle it in `android/libQt5AndroidExtras.so` along with
`libtor` for Tor support.
## Non-SDK Interfaces
e.g. java.lang.NoSuchFieldException: No field mPivotX in class Landroid/graphics/drawable/RotateDrawable$RotateState;
* https://bugreports.qt.io/browse/QTBUG-71590
## Plugins
Theoretically speaking it should be possible to use `ANDROID_EXTRA_PLUGINS` to include support for e.g.
SVG images on Android. However, we have been unable to make it work. If you would like to try, the following
issues might be helpful:
* https://bugreports.qt.io/browse/QTBUG-60022
## Notifications
- Android 8 (API Level 26) forces you to call setChannelId()
- Android 9 "Do Not Disturb" mode also hides all notifications
- Setting up notification channels only seems possible *once* per install. any changes you need to make
require that the app is reinstalled, or the actual channel deleted and changed.

View File

@ -1,4 +1,4 @@
All code in this repository, unless otherwise indicated, is distributed under the following license:
All code in this repositorym, unless otherwise indicated, is distributed under the following license:
Copyright 2019 Open Privacy Research Society

View File

@ -1,11 +1,6 @@
.PHONY: all clean linux windows android
DEFAULT_GOAL: linux
SHELL := env QT_BUILD_VERSION=$(QT_BUILD_VERSION) $(SHELL)
QT_BUILD_VERSION ?= "5.13.4"
all: clean linux windows android
default: linux
clean:
rm -r vendor || true
@ -13,21 +8,41 @@ clean:
find -iname "rcc*" | xargs rm
linux:
date
qtdeploy -qt_version $(QT_BUILD_VERSION) build linux 2>&1 | tee qtdeploy.log | pv
date
cp -R assets deploy/linux/
$(MAKE) linux_build || $(MAKE) linux_clean
windows:
date
qtdeploy -qt_version $(QT_BUILD_VERSION) build windows 2>&1 | tee qtdeploy.log | pv
date
cp -R assets deploy/windows/
$(MAKE) windows_build || $(MAKE) windows_clean
android:
cp -R assets android/
date
## TODO have this also include AndroidExtras (see ANDROID_DEBUGGING) for full notes.
env ANDROID_MODULES_INCLUDE="Core,Gui,Svg,QuickWidgets,Xml" qtdeploy -debug -qt_version $(QT_BUILD_VERSION) build android 2>&1 | tee qtdeploy.log | pv
date
$(MAKE) android_build || $(MAKE) android_clean
linux_build:
date
qtdeploy -qt_version "5.13.0" build linux 2>&1 | tee qtdeploy.log | pv
date
cp -R assets deploy/linux/
$(MAKE) linux_clean
linux_clean:
#ntd
windows_build:
date
qtdeploy -qt_version "5.13.0" build windows 2>&1 | tee qtdeploy.log | pv
date
cp -R assets deploy/windows/
$(MAKE) linux_clean
windows_clean:
#ntd
android_build:
mv assets android/
date
qtdeploy -docker build android 2>&1 | tee qtdeploy.log | pv
date
$(MAKE) android_clean
android_clean:
mv android/assets assets

View File

@ -1,10 +0,0 @@
# Settings List / Flickable
Content not scrolling: Flickable does some reparenting behind the scenes and so
in the top level child of the Flickable you will need:
parent: root.contentItem
And in the flickable you will need to set the contentHeight:
contentHeight: <childId>.height + <padding>

View File

@ -1,20 +1,9 @@
<?xml version="1.0"?>
<manifest package="ca.openprivacy.cwtch.ui" xmlns:android="http://schemas.android.com/apk/res/android"
android:versionName="1.0"
android:versionCode="4"
android:installLocation="auto">
<application android:hardwareAccelerated="true"
android:name="org.qtproject.qt5.android.bindings.QtApplication"
android:label="cwtch"
android:icon="@drawable/knot">
<manifest package="ca.openprivacy.cwtch.ui" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="cwtch" android:icon="@drawable/ic_launcher">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation"
android:name="ca.openprivacy.cwtch.ui.CwtchActivity"
android:label="cwtch"
android:theme="@style/AppTheme"
android:screenOrientation="unspecified"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize">
android:label="cwtch" android:theme="@style/AppTheme" android:screenOrientation="unspecified" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
@ -121,7 +110,7 @@
</application>
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29"/> -->
<uses-sdk android:minSdkVersion="21" /><!-- android:targetSdkVersion="26"/> -->
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>

View File

@ -1,150 +0,0 @@
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
repositories {
google()
jcenter()
}
apply plugin: 'com.android.application'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
android {
/*******************************************************
* The following variables:
* - androidBuildToolsVersion,
* - androidCompileSdkVersion
* - qt5AndroidDir - holds the path to qt android files
* needed to build any Qt application
* on Android.
*
* are defined in gradle.properties file. This file is
* updated by QtCreator and androiddeployqt tools.
* Changing them manually might break the compilation!
*******************************************************/
compileSdkVersion androidCompileSdkVersion.toInteger()
buildToolsVersion '28.0.3'
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
res.srcDirs = [qt5AndroidDir + '/res', 'res']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
}
// kinda of cheaty, would prefer to use if (System.getEnv("GOARCH") == "arm64") {
// but it doesn't want to work in this context
if (qt5AndroidDir.contains("arm64")) {
splits {
// Configures multiple APKs based on ABI.
abi {
// Enables building multiple APKs per ABI.
enable true
// By default all ABIs are included, so use reset() and include to specify that we only
// want APKs for x86 and x86_64.
// Resets the list of ABIs that Gradle should create APKs for to none.
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
// Note that because of the way that therecipe/qt bundles libraries
// only the specific architecture specified by GOARCH /GOARM will *actually*
// work so we currently have to do separate builds for each arch - this needs to be fixed.
include "arm64-v8a"
// Specifies that we do not want to also generate a universal APK that includes all ABIs.
// QT deploy has to be run twice to generate the libgo_base.so for each arch
universalApk false
}
}
task linkBuildDebugArm64(type: Exec) {
workingDir '../build/build/outputs/apk/debug/'
commandLine 'ln', '-sf', 'build-arm64-v8a-debug.apk', 'build-debug.apk'
}
task renameBuildReleaseArm64(type: Exec) {
workingDir '../build/build/outputs/apk/release/'
commandLine 'mv', 'build-arm64-v8a-release-unsigned.apk', 'build-release-unsigned.apk'
}
afterEvaluate {
assembleDebug.finalizedBy(linkBuildDebugArm64)
assembleRelease.finalizedBy(renameBuildReleaseArm64)
}
} else {
splits {
// Configures multiple APKs based on ABI.
abi {
// Enables building multiple APKs per ABI.
enable true
// By default all ABIs are included, so use reset() and include to specify that we only
// want APKs for x86 and x86_64.
// Resets the list of ABIs that Gradle should create APKs for to none.
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
// Note that because of the way that therecipe/qt bundles libraries
// only the specific architecture specified by GOARCH /GOARM will *actually*
// work so we currently have to do separate builds for each arch - this needs to be fixed.
include "armeabi-v7a"
// Specifies that we do not want to also generate a universal APK that includes all ABIs.
// QT deploy has to be run twice to generate the libgo_base.so for each arch
universalApk false
}
}
task linkBuildDebugArm7(type: Exec) {
workingDir '../build/build/outputs/apk/debug/'
commandLine 'ln', '-sf', 'build-armeabi-v7a-debug.apk', 'build-debug.apk'
}
task renameBuildReleaseArm7(type: Exec) {
workingDir '../build/build/outputs/apk/release/'
commandLine 'mv', 'build-armeabi-v7a-release-unsigned.apk', 'build-release-unsigned.apk'
}
afterEvaluate {
assembleDebug.finalizedBy(linkBuildDebugArm7)
assembleRelease.finalizedBy(renameBuildReleaseArm7)
}
}
lintOptions {
abortOnError true
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -2,14 +2,11 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" >
<solid android:color="#FFFDF3FC"/>
<solid android:color="#FFFFFFFF"/>
</shape>
</item>
<!-- It would be nice to find a way to use a transition and trigger it but I haven't yet -->
<item>
<bitmap android:src="@drawable/splash_350"
android:gravity="center" />
<bitmap android:src="@drawable/cwtch_logo"
android:gravity="center" />
</item>
</layer-list>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
<style name="AppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash</item>
</style>
</resources>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="loading_tor">Loading tor...</string>
</resources>

View File

@ -23,13 +23,20 @@ import static android.app.Notification.CATEGORY_SERVICE;
public class CwtchActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
private static NotificationManager m_notificationManager;
private static Notification.Builder m_builder;
private static Notification.Builder m_builderOngoing;
private static CwtchActivity m_instance;
private static String NOTIFICATION_CHANNEL_ID = "cwtch_notification_channel";
private static int CONTENT_NOTIFICATION_ID = 2;
private static String CONTENT_NOTIFICATION_ID_NAME = "Notifications from Peers";
private static int PRIORITY_MIN = -2; // From NotificationCompat
private static int PRIORITY_DEFAULT = 0; // From NotificationCompat
private static String NOTIFICATION_CHANNEL_ID = "cwtch_notification_channel";
private static int ONGOING_NOTIFICATION_ID = 0;
private static String ONGOING_NOTIFICATION_ID_NAME = "ongoing";
private static int CONTENT_NOTIFICATION_ID = 1;
private static String CONTENT_NOTIFICATION_ID_NAME = "content";
public CwtchActivity() {
@ -50,47 +57,66 @@ public class CwtchActivity extends org.qtproject.qt5.android.bindings.QtActivity
}
}
public static void notify(String s, String o)
public static void notify(String s)
{
if (m_notificationManager == null) {
m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
createNotificationChannel();
}
// Apparently thr android documentation is just wrong and we need to provide a setGroupSummary
// notification regardless of targetted support version...
Notification groupSummary =
new Notification.Builder(m_instance)
.setContentTitle("Cwtch")
.setContentText("New Message from Peer: " + o)
.setGroupSummary(true)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher)
.setGroup(NOTIFICATION_CHANNEL_ID)
.setChannelId(NOTIFICATION_CHANNEL_ID)
.build();
m_notificationManager.notify(1, groupSummary);
if (m_builder == null) {
m_builder = new Notification.Builder(m_instance);
m_builder.setSmallIcon(R.drawable.ic_launcher);
m_builder.setContentTitle("Cwtch");
m_builder.setPriority(PRIORITY_DEFAULT);
Notification.Builder m_builder = new Notification.Builder(m_instance)
.setSmallIcon(R.drawable.ic_launcher)
.setChannelId(NOTIFICATION_CHANNEL_ID)
.setGroup(NOTIFICATION_CHANNEL_ID)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle("New Message from Peer: " + o)
.setContentText("[redacted: Open Cwtch App to see the Message]");
m_notificationManager.notify(CONTENT_NOTIFICATION_ID++, m_builder.build());
}
m_builder.setContentText(s);
m_notificationManager.notify(CONTENT_NOTIFICATION_ID, m_builder.build());
}
public static void ongoingNotify(String s)
{
if (m_notificationManager == null) {
m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
createNotificationChannel();
}
if (m_builderOngoing == null) {
m_builderOngoing = new Notification.Builder(m_instance);
m_builderOngoing.setSmallIcon(R.drawable.ic_launcher);
m_builderOngoing.setContentTitle("Cwtch");
m_builderOngoing.setPriority(PRIORITY_MIN);
m_builderOngoing.setWhen(0); // Don't show the time
m_builderOngoing.setOngoing(true);
if (SDK_INT >= 21) {
m_builderOngoing.setCategory(CATEGORY_SERVICE);
//m_builder.setVisibility(VISIBILITY_SECRET);
}
}
m_builderOngoing.setContentText(s);
m_notificationManager.notify(ONGOING_NOTIFICATION_ID, m_builderOngoing.build());
}
private static void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (SDK_INT >= 26) {
String description = "Cwtch Notification Channel";
NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, CONTENT_NOTIFICATION_ID_NAME, NotificationManager.IMPORTANCE_HIGH);
String description = "Cwtch Ongoing Notification Channel";
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, ONGOING_NOTIFICATION_ID_NAME, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
m_notificationManager.createNotificationChannel(channel);
description = "Cwtch Content Notification Channel";
importance = NotificationManager.IMPORTANCE_DEFAULT;
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, CONTENT_NOTIFICATION_ID_NAME, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 998 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
</style>
<g>
<path d="M8.9,12.9c-0.3,0-0.6,0-0.9,0c-2.1,0-6.3,1-6.3,3.1v2.2h5.4V16C7.1,14.7,7.8,13.7,8.9,12.9z"/>
<path d="M8,11.1c1.5,0,2.7-1.2,2.7-2.7c0-1.5-1.2-2.7-2.7-2.7c-1.5,0-2.7,1.2-2.7,2.7C5.3,9.9,6.5,11.1,8,11.1z"/>
<path d="M14.3,11.1c1.5,0,2.7-1.2,2.7-2.7c0-1.5-1.2-2.7-2.7-2.7s-2.7,1.2-2.7,2.7C11.7,9.9,12.8,11.1,14.3,11.1z"/>
<path d="M15.4,13c-0.4,0-0.7-0.1-1.1-0.1c-2.1,0-6-0.4-6.3,3.1v2.2h4.8c0-0.2,0-0.3,0-0.5C12.8,15.8,13.8,14,15.4,13z"/>
</g>
<path class="st0" d="M0,0h24v24H0V0z"/>
<path d="M22.1,18.3c0-0.1,0-0.3,0-0.4c0-0.2,0-0.3,0-0.4l1-0.7c0.1-0.1,0.1-0.2,0.1-0.3l-0.9-1.6c-0.1-0.1-0.2-0.1-0.3-0.1l-1.1,0.5
c-0.2-0.2-0.5-0.3-0.8-0.4l-0.2-1.2c0-0.1-0.1-0.2-0.2-0.2h-1.8c-0.1,0-0.2,0.1-0.2,0.2l-0.2,1.2c-0.3,0.1-0.5,0.3-0.8,0.4l-1.1-0.5
c-0.1,0-0.2,0-0.3,0.1l-0.9,1.6c-0.1,0.1,0,0.2,0.1,0.3l1,0.7c0,0.1,0,0.3,0,0.4s0,0.3,0,0.4l-1,0.7c-0.1,0.1-0.1,0.2-0.1,0.3
l0.9,1.6c0.1,0.1,0.2,0.1,0.3,0.1l1.1-0.5c0.2,0.2,0.5,0.3,0.8,0.4l0.2,1.2c0,0.1,0.1,0.2,0.2,0.2h1.8c0.1,0,0.2-0.1,0.2-0.2L20,21
c0.3-0.1,0.5-0.3,0.8-0.4l1.1,0.5c0.1,0,0.2,0,0.3-0.1l0.9-1.6c0.1-0.1,0-0.2-0.1-0.3L22.1,18.3z M18.7,19.5c-0.9,0-1.7-0.8-1.7-1.7
c0-0.9,0.8-1.7,1.7-1.7c0.9,0,1.7,0.8,1.7,1.7C20.5,18.8,19.7,19.5,18.7,19.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 834 B

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
</style>
<path class="st0" d="M0,0h24v24H0V0z"/>
<g>
<path d="M13.6,13.8c-1-0.2-2-0.3-2.8-0.3c-2.7,0-8,1.3-8,4v2h9.8c-0.3-0.6-0.4-1.3-0.4-2.1C12.2,15.9,12.7,14.7,13.6,13.8z"/>
<circle cx="10.8" cy="7.4" r="4"/>
</g>
<path d="M21.1,17.9c0-0.1,0-0.3,0-0.4c0-0.2,0-0.3,0-0.4l1-0.7c0.1-0.1,0.1-0.2,0.1-0.3l-0.9-1.6c-0.1-0.1-0.2-0.1-0.3-0.1l-1.1,0.5
c-0.2-0.2-0.5-0.3-0.8-0.4l-0.2-1.2c0-0.1-0.1-0.2-0.2-0.2h-1.8c-0.1,0-0.2,0.1-0.2,0.2l-0.2,1.2c-0.3,0.1-0.5,0.3-0.8,0.4l-1.1-0.5
c-0.1,0-0.2,0-0.3,0.1L13.4,16c-0.1,0.1,0,0.2,0.1,0.3l1,0.7c0,0.1,0,0.3,0,0.4c0,0.1,0,0.3,0,0.4l-1,0.7c-0.1,0.1-0.1,0.2-0.1,0.3
l0.9,1.6c0.1,0.1,0.2,0.1,0.3,0.1l1.1-0.5c0.2,0.2,0.5,0.3,0.8,0.4l0.2,1.2c0,0.1,0.1,0.2,0.2,0.2h1.8c0.1,0,0.2-0.1,0.2-0.2
l0.2-1.2c0.3-0.1,0.5-0.3,0.8-0.4l1.1,0.5c0.1,0,0.2,0,0.3-0.1l0.9-1.6c0.1-0.1,0-0.2-0.1-0.3L21.1,17.9z M17.7,19.2
c-0.9,0-1.7-0.8-1.7-1.7c0-0.9,0.8-1.7,1.7-1.7c0.9,0,1.7,0.8,1.7,1.7C19.4,18.4,18.7,19.2,17.7,19.2z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

7
assets/fontawesome/convert.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
for f in *.svg; do
echo "converting $f"
sed -i 's/>/><style>path\{stroke:#FFFFFF;fill:#FFFFFF\}<\/style>/' $f #> $f.intermediate
#inkscape -z -e $f.png -w 1024 -h 1024 $f.intermediate
done

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 860 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 960 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 630 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 624 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 633 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 630 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><style type="text/css">path{stroke:#FFFFFF;fill:#FFFFFF}</style><path d="M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"/></svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 894 B

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