From ae82992630fdf5886df5af9c343a45be117892ff Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Sun, 5 Apr 2020 16:38:36 -0700 Subject: [PATCH 01/18] Start server as thread, and add pre-seeding of KOLIBRI_HOME directory --- .gitignore | 2 ++ Makefile | 19 +++++++++++++++---- project_info.template | 2 +- src/main.py | 2 +- src/server.py | 27 ++++++++++++++++----------- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index a778c3a5..b2065c5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ src/kolibri +src/preseeded_kolibri_home +tmpenv whl/* # File format for signing key diff --git a/Makefile b/Makefile index 8e38bbdf..fabd7e56 100644 --- a/Makefile +++ b/Makefile @@ -37,10 +37,21 @@ kolibri.apk: p4a_android_distro build_docker: Dockerfile docker build -t android_kolibri . -create_premigrated_db: - pip install whl/*.whl - KOLIBRI_HOME=tmphome kolibri manage migrate - cp tmphome/db.sqlite3 src/db.sqlite3.empty +preseeded_kolibri_home: export KOLIBRI_HOME := src/preseeded_kolibri_home +preseeded_kolibri_home: export PYTHONPATH := tmpenv +preseeded_kolibri_home: + yes | pip uninstall --target tmpenv kolibri 2> /dev/null || true + rm -r src/preseeded_kolibri_home 2> /dev/null || true + pip install --target tmpenv whl/*.whl + kolibri start --port=16294 + sleep 5 + kolibri stop + sleep 1 + yes yes | kolibri manage deprovision + rm -r src/preseeded_kolibri_home/logs 2> /dev/null || true + rm -r src/preseeded_kolibri_home/sessions 2> /dev/null || true + rm -r src/preseeded_kolibri_home/process_cache 2> /dev/null || true + touch src/preseeded_kolibri_home/was_preseeded # Run the docker image. # TODO Would be better to just specify the file here? diff --git a/project_info.template b/project_info.template index ad2d83e8..3e9041e6 100644 --- a/project_info.template +++ b/project_info.template @@ -8,5 +8,5 @@ "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["server:server.py"], "extra_permissions": [], "sdk": 17}} + "extra_build_options": {"android": {"services": ["server:server.py"], "extra_permissions": [], "sdk": 23}} } diff --git a/src/main.py b/src/main.py index ef341a1c..332e4351 100644 --- a/src/main.py +++ b/src/main.py @@ -28,7 +28,7 @@ def start_kolibri_server(port): # TODO: check for storage availability, allow user to chose sd card or internal def get_home_folder(): kolibri_home_file = PythonActivity.mActivity.getExternalFilesDir(None) - return kolibri_home_file.toString() + return os.path.join(kolibri_home_file.toString(), "KOLIBRI_DATA") logging.info("Starting kolibri server via Android service...") diff --git a/src/server.py b/src/server.py index e32814f8..15765519 100644 --- a/src/server.py +++ b/src/server.py @@ -3,6 +3,7 @@ import os import shutil import sys +import time # initialize logging before loading any third-party modules, as they may cause logging to get configured. logging.basicConfig(level=logging.DEBUG) @@ -21,6 +22,9 @@ # TODO: before shipping the app, make this contingent on debug vs production mode os.environ["KOLIBRI_RUN_MODE"] = "pew-dev" +service_args = json.loads(os.environ.get("PYTHON_SERVICE_ARGUMENT") or "{}") + + def start_django(port): from kolibri.utils.cli import main @@ -33,9 +37,6 @@ def start_django(port): if pew.ui.platform == "android": from jnius import autoclass - - service_args = json.loads(os.environ.get("PYTHON_SERVICE_ARGUMENT") or "{}") - service = autoclass('org.kivy.android.PythonService').mService File = autoclass("java.io.File") Timezone = autoclass("java.util.TimeZone") @@ -66,13 +67,11 @@ def make_service_foreground(title, message): os.environ["KOLIBRI_HOME"] = service_args["HOME"] - # copy an empty pre-migrated database into the Kolibri data directory to speed up startup - DB_TEMPLATE_PATH = "db.sqlite3.empty" - DB_PATH = os.path.join(os.environ["KOLIBRI_HOME"], "db.sqlite3") - if not os.path.exists(DB_PATH) and os.path.exists(DB_TEMPLATE_PATH): - if not os.path.exists(os.environ["KOLIBRI_HOME"]): - os.makedirs(os.environ["KOLIBRI_HOME"]) - shutil.copyfile(DB_TEMPLATE_PATH, DB_PATH) + # move in a templated Kolibri data directory, including pre-migrated DB, to speed up startup + HOME_TEMPLATE_PATH = "preseeded_kolibri_home" + HOME_PATH = os.environ["KOLIBRI_HOME"] + if not os.path.exists(HOME_PATH) and os.path.exists(HOME_TEMPLATE_PATH): + shutil.move(HOME_TEMPLATE_PATH, HOME_PATH) # store the version name into an envvar to be picked up by Kolibri os.environ["KOLIBRI_APK_VERSION_NAME"] = service_args["VERSION"] @@ -85,4 +84,10 @@ def make_service_foreground(title, message): make_service_foreground("Kolibri is running...", "Click here to resume.") - start_django(service_args["PORT"]) + thread = pew.ui.PEWThread(target=start_django, args=(service_args["PORT"],)) + thread.daemon = True + thread.start() + + while True: + logging.info("Server has been started!") + time.sleep(1) \ No newline at end of file From 57421630db005343f41a18dc8e7e32ad1293e336 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Sun, 5 Apr 2020 16:44:33 -0700 Subject: [PATCH 02/18] Add KOLIBRI_HOME preseeding to kolibri.apk target for docker build --- Makefile | 1 + scripts/rundocker.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fabd7e56..9967289e 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,7 @@ endif .PHONY: kolibri.apk # Buld the debug version of the apk +kolibri.apk: p4a_android_distro preseeded_kolibri_home kolibri.apk: p4a_android_distro pew build android $(pew_release_flag) diff --git a/scripts/rundocker.sh b/scripts/rundocker.sh index 8b015a7a..1caaa196 100755 --- a/scripts/rundocker.sh +++ b/scripts/rundocker.sh @@ -43,7 +43,7 @@ echo "Starting ${CONTAINER_ID}" docker start -i ${CONTAINER_ID} # copy the apk to our host. Handles permissions. -echo -e "Coping APK \n\t From ${CONTAINER_ID}:${CONTAINER_HOME}/dist/ to ${PWD}" +echo -e "Copying APK \n\t From ${CONTAINER_ID}:${CONTAINER_HOME}/dist/ to ${PWD}" docker cp ${CONTAINER_ID}:${CONTAINER_HOME}/dist/ . # manually remove the container afterward From 6420fb4515fa9a2e4cbd3fcbf1662f96d8a5d98a Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Sun, 5 Apr 2020 20:20:47 -0700 Subject: [PATCH 03/18] Load time optimization: blacklist 63% of source files from Kolibri whl --- Makefile | 21 ++++++++------ delete_kolibri_blacklist.sh | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 9 deletions(-) create mode 100755 delete_kolibri_blacklist.sh diff --git a/Makefile b/Makefile index 9967289e..f6556992 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,16 @@ clean: - rm -rf dist/android/*.apk project_info.json ./src/kolibri deepclean: clean - rm -r ~/.local/share/python-for-android + rm -r $(HOME)/.local/share/python-for-android rm -r build yes y | docker system prune -a rm build_docker 2> /dev/null # Extract the whl file src/kolibri: clean + rm -r src/kolibri 2> /dev/null || true unzip -qo "whl/kolibri*.whl" "kolibri/*" -x "kolibri/dist/cext*" -d src/ + ./delete_kolibri_blacklist.sh # Generate the project info file project_info.json: project_info.template src/kolibri scripts/create_project_info.py @@ -18,6 +20,8 @@ project_info.json: project_info.template src/kolibri scripts/create_project_info .PHONY: p4a_android_distro p4a_android_distro: whitelist.txt project_info.json + mkdir -p $(HOME)/.local/share/python-for-android/packages/openssl/ + wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2p.tar.gz -O $(HOME)/.local/share/python-for-android/packages/openssl/openssl-1.0.2p.tar.gz pew init android ifdef P4A_RELEASE_KEYSTORE_PASSWD @@ -25,9 +29,8 @@ pew_release_flag = --release endif .PHONY: kolibri.apk -# Buld the debug version of the apk +# Build the debug version of the apk kolibri.apk: p4a_android_distro preseeded_kolibri_home -kolibri.apk: p4a_android_distro pew build android $(pew_release_flag) # DOCKER BUILD @@ -41,14 +44,14 @@ build_docker: Dockerfile preseeded_kolibri_home: export KOLIBRI_HOME := src/preseeded_kolibri_home preseeded_kolibri_home: export PYTHONPATH := tmpenv preseeded_kolibri_home: - yes | pip uninstall --target tmpenv kolibri 2> /dev/null || true + rm -r tmpenv 2> /dev/null || true rm -r src/preseeded_kolibri_home 2> /dev/null || true pip install --target tmpenv whl/*.whl - kolibri start --port=16294 + tmpenv/bin/kolibri start --port=16294 sleep 5 - kolibri stop + tmpenv/bin/kolibri stop sleep 1 - yes yes | kolibri manage deprovision + yes yes | tmpenv/bin/kolibri manage deprovision rm -r src/preseeded_kolibri_home/logs 2> /dev/null || true rm -r src/preseeded_kolibri_home/sessions 2> /dev/null || true rm -r src/preseeded_kolibri_home/process_cache 2> /dev/null || true @@ -59,10 +62,10 @@ preseeded_kolibri_home: run_docker: build_docker ./scripts/rundocker.sh -launch: +launch: project_info.json pew build android $(pew_release_flag) adb uninstall org.learningequality.Kolibri || true 2> /dev/null rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null adb install dist/android/*-debug.apk adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity - adb logcat | grep -E "python|Python| server " \ No newline at end of file + adb logcat | grep -E "python|Python|server|kolibri|Kolibri" | grep -E -v "BufferQueueProducer|WifiTrafficPoller|DexObserverFW|GCoreUlr" \ No newline at end of file diff --git a/delete_kolibri_blacklist.sh b/delete_kolibri_blacklist.sh new file mode 100755 index 00000000..bdc4cb9a --- /dev/null +++ b/delete_kolibri_blacklist.sh @@ -0,0 +1,57 @@ +# remove the OIDC dependencies, as we won't use them here +rm -r src/kolibri/plugins/oidc_provider_plugin +rm -r src/kolibri/dist/oidc_provider +rm -r src/kolibri/dist/jwkest +rm -r src/kolibri/dist/Cryptodome + +# remove some assorted additional plugins +rm -r src/kolibri/plugins/demo_server +rm -r src/kolibri/plugins/style_guide + +# remove pycountry and replace with stub +# (only used by getlang_by_alpha2 in le-utils, which Kolibri doesn't call) +rm -r src/kolibri/dist/pycountry/* +touch src/kolibri/dist/pycountry/__init__.py + +# remove source maps +find src/kolibri -name "*.js.map" -type f -delete + +# remove node_modules (contains only core-js) +rm -r src/kolibri/core/node_modules + +# remove unused translation files from django and other apps +rm -r src/kolibri/dist/rest_framework/locale +rm -r src/kolibri/dist/django_filters/locale +rm -r src/kolibri/dist/mptt/locale + +rm -r src/kolibri/dist/django/contrib/admindocs/locale +rm -r src/kolibri/dist/django/contrib/auth/locale +rm -r src/kolibri/dist/django/contrib/sites/locale +rm -r src/kolibri/dist/django/contrib/contenttypes/locale +rm -r src/kolibri/dist/django/contrib/flatpages/locale +rm -r src/kolibri/dist/django/contrib/sessions/locale +rm -r src/kolibri/dist/django/contrib/humanize/locale +rm -r src/kolibri/dist/django/contrib/admin/locale + +# remove some django components entirely +rm -r src/kolibri/dist/django/contrib/gis +rm -r src/kolibri/dist/django/contrib/redirects +rm -r src/kolibri/dist/django/conf/app_template +rm -r src/kolibri/dist/django/conf/project_template +rm -r src/kolibri/dist/django/db/backends/postgresql_psycopg2 +rm -r src/kolibri/dist/django/db/backends/postgresql +rm -r src/kolibri/dist/django/db/backends/mysql +rm -r src/kolibri/dist/django/db/backends/oracle +rm -r src/kolibri/dist/django/contrib/postgres + +# remove bigger chunks of django admin (may not want to do this) +rm -r src/kolibri/dist/django/contrib/admin/static +rm -r src/kolibri/dist/django/contrib/admin/templates + +# other assorted testing stuff +find src/kolibri -wholename "*/test/*" -not -wholename "*/django/test/*" -delete +rm -r src/kolibri/dist/tzlocal/test_data + +# remove some unnecessary apps +rm -r src/kolibri/dist/redis_cache +rm -r src/kolibri/dist/redis \ No newline at end of file From 87334559dddf964bf6c60b482f8654648914ed47 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Wed, 8 Apr 2020 15:29:45 -0700 Subject: [PATCH 04/18] Update loading page to use smoother SVG animation --- assets/_load.html | 310 +++++++++++++++++++++++++++++++++++-- assets/loading-spinner.gif | Bin 98772 -> 0 bytes large_icon.png | Bin 0 -> 93634 bytes 3 files changed, 295 insertions(+), 15 deletions(-) delete mode 100644 assets/loading-spinner.gif create mode 100644 large_icon.png diff --git a/assets/_load.html b/assets/_load.html index 9aadf7a6..f2823a66 100644 --- a/assets/_load.html +++ b/assets/_load.html @@ -1,22 +1,302 @@ + + + + - + Kolibri is starting... -
+ + + +
-
-
+ + Kolibri Loader + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - -
- -

Please wait, Kolibri is loading...

- -
- - - - +

Starting Kolibri

+

Please wait; this may take some time.

+ + + \ No newline at end of file diff --git a/assets/loading-spinner.gif b/assets/loading-spinner.gif deleted file mode 100644 index 638e6609d5153ad5d43d7bcf0de472aa0e1e7dda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98772 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 z 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

@(six-z=|9&kqGSehM?QlWr$KTnvoKJ+ z-VEaP7Y{IvAb?O!6BMUKs&~5}ctSirMQ_Lz zjE#`N`g;8Iqbh8VK<#^b?l+N*d?hN-#LO4a$(M;4H#ER&S#!+m9lfW?k0YTvan^6{ znqL9ZdwWIa+|dH@V$%5)i~iq(by<=lv?)e8fdq#;C9U` zOc;k3CglBil(tAfjRSDpzvidD4trNWa&Ld~_6$9raQm%0UXX~baWN(Tn{UXNTEmy@ zcQ+sFKr;ScnC?u4OfIo#4rozykJF5t>aQ>4L{WJ3cUH`jJj#V4QpGF7X5ZF9#YP3ufd@W7_Y2Ke4q@lnIFlCw7 zBA}X#D!BnL3PzW(?aY>kh;b+GSEpG-yVlRiMLyz*gWizQEYiLmD*#52EEg%fJ=?}S z4oGC6z9%{CK<{v#vsP#sEWHy+d0#Q$2bD%%koKN(r>av~B?X#Y@{`XW=(R9fjk9sD zRFKPrgU>RCaZ3>;1kjLJ30+RpDf*g zWSo}Gf~8LQS0s#TE98k~OAcK?(z{`71eC@l+A{)|Q7jx?B{RRnq8NBPC}h6fgSi*+ z)FJ@<(X&AI7`Xs*+?X=G8$BMRi≦Ks#)TP@8*V1ZuZqpmhc>apSl2x_)^34b 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 diff --git a/large_icon.png b/large_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1bfda102bbac4a7e5cfd46f3c54af0aafc36f2 GIT binary patch literal 93634 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 literal 0 HcmV?d00001 From 33324156255e4e82f69c2b6fdbcd242e99c771fb Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Wed, 8 Apr 2020 15:34:58 -0700 Subject: [PATCH 05/18] Refactor code into utility files (general/android) and clean things up --- Makefile | 3 +- logcat.sh | 9 ++++ project_info.template | 2 +- src/android_service.py | 37 +++++++++++++ src/android_utils.py | 114 +++++++++++++++++++++++++++++++++++++++++ src/kolibri_utils.py | 33 ++++++++++++ src/main.py | 33 +++++------- src/server.py | 93 --------------------------------- 8 files changed, 209 insertions(+), 115 deletions(-) create mode 100755 logcat.sh create mode 100644 src/android_service.py create mode 100644 src/android_utils.py create mode 100644 src/kolibri_utils.py delete mode 100644 src/server.py diff --git a/Makefile b/Makefile index f6556992..22b62111 100644 --- a/Makefile +++ b/Makefile @@ -68,4 +68,5 @@ launch: project_info.json rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null adb install dist/android/*-debug.apk adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity - adb logcat | grep -E "python|Python|server|kolibri|Kolibri" | grep -E -v "BufferQueueProducer|WifiTrafficPoller|DexObserverFW|GCoreUlr" \ No newline at end of file + sleep 5 + adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller" diff --git a/logcat.sh b/logcat.sh new file mode 100755 index 00000000..73ced822 --- /dev/null +++ b/logcat.sh @@ -0,0 +1,9 @@ +main_pid=$(adb shell ps | grep ' org.learningequality.Kolibri$' | tr -s [:space:] ' ' | cut -d' ' -f2) +server_pid=$(adb shell ps | grep ' org.learningequality.Kolibri:service_kolibri$' | tr -s [:space:] ' ' | cut -d' ' -f2) +if [ -z "$server_pid" ]; then + echo "Searching for: $main_pid" + adb logcat | grep -E " $main_pid " +else + echo "Searching for: $main_pid | $server_pid " + adb logcat | grep -E " $main_pid | $server_pid " +fi \ No newline at end of file diff --git a/project_info.template b/project_info.template index 3e9041e6..5b3c2d40 100644 --- a/project_info.template +++ b/project_info.template @@ -8,5 +8,5 @@ "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["server:server.py"], "extra_permissions": [], "sdk": 23}} + "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": [], "sdk": 23}} } diff --git a/src/android_service.py b/src/android_service.py new file mode 100644 index 00000000..4146cf2a --- /dev/null +++ b/src/android_service.py @@ -0,0 +1,37 @@ +import logging +import os +import pew.ui +import shutil +import time + +# initialize logging before loading any third-party modules, as they may cause logging to get configured. +logging.basicConfig(level=logging.DEBUG) + + +logging.info("Entering android_service.py...") + +from android_utils import get_service_args, make_service_foreground +from kolibri_utils import start_kolibri_server + +# load the arguments passed into the service into environment variables +args = get_service_args() +for arg, val in args.items(): + print("setting envvar '{}' to '{}'".format(arg, val)) + os.environ[arg] = str(val) + +# move in a templated Kolibri data directory, including pre-migrated DB, to speed up startup +HOME_TEMPLATE_PATH = "preseeded_kolibri_home" +HOME_PATH = os.environ["KOLIBRI_HOME"] +if not os.path.exists(HOME_PATH) and os.path.exists(HOME_TEMPLATE_PATH): + shutil.move(HOME_TEMPLATE_PATH, HOME_PATH) + +# ensure the service stays running by "foregrounding" it with a persistent notification +make_service_foreground("Kolibri is running...", "Click here to resume.") + +# start the kolibri server as a thread +thread = pew.ui.PEWThread(target=start_kolibri_server) +thread.daemon = True +thread.start() + +while True: + time.sleep(1) \ No newline at end of file diff --git a/src/android_utils.py b/src/android_utils.py new file mode 100644 index 00000000..c2e5af99 --- /dev/null +++ b/src/android_utils.py @@ -0,0 +1,114 @@ +import json +import logging +import os +from jnius import autoclass, cast, jnius + +logging.basicConfig(level=logging.DEBUG) + +AndroidString = autoclass('java.lang.String') +Intent = autoclass('android.content.Intent') +NotificationBuilder = autoclass("android.app.Notification$Builder") +PackageManager = autoclass("android.content.pm.PackageManager") +PendingIntent = autoclass("android.app.PendingIntent") +PythonActivity = autoclass("org.kivy.android.PythonActivity") +Timezone = autoclass("java.util.TimeZone") +Uri = autoclass('android.net.Uri') + + +def is_service_context(): + return "PYTHON_SERVICE_ARGUMENT" in os.environ + + +def get_service(): + assert is_service_context(), "Cannot get service, as we are not in a service context." + PythonService = autoclass("org.kivy.android.PythonService") + return PythonService.mService + + +def get_timezone_name(): + return Timezone.getDefault().getDisplayName() + + +def start_service(service_name, service_args): + service = autoclass("org.learningequality.Kolibri.Service{}".format(service_name.title())) + service.start(PythonActivity.mActivity, json.dumps(service_args)) + + +def get_service_args(): + assert is_service_context(), "Cannot get service args, as we are not in a service context." + return json.loads(os.environ.get("PYTHON_SERVICE_ARGUMENT") or "{}") + + +def get_version_name(): + return get_activity().getPackageManager().getPackageInfo(PythonActivity.getPackageName(), 0).versionName + + +def get_activity(): + if is_service_context(): + return cast("android.app.Service", get_service()) + else: + return PythonActivity.mActivity + + +def is_app_installed(app_id): + + manager = get_activity().getPackageManager() + + try: + manager.getPackageInfo(app_id, PackageManager.GET_ACTIVITIES) + except jnius.JavaException as e: + return False + + return True + + +# TODO: check for storage availability, allow user to chose sd card or internal +def get_home_folder(): + kolibri_home_file = get_activity().getExternalFilesDir(None) + return os.path.join(kolibri_home_file.toString(), "KOLIBRI_DATA") + + +def send_whatsapp_message(msg): + share_by_intent(msg=msg, app="com.whatsapp") + + +def share_by_intent(path=None, msg=None, app=None, mimetype=None): + + assert path or msg, "Must provide either a file path or a msg to share" + + sendIntent = Intent() + sendIntent.setAction(Intent.ACTION_SEND) + if path: + if not path.startswith("http"): + path = "file://" + path + parcelable = cast("android.os.Parcelable", Uri.parse(path)) + sendIntent.putExtra(Intent.EXTRA_STREAM, parcelable) + sendIntent.setType(AndroidString(mimetype or "*/*")) + sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + if msg: + if not path: + sendIntent.setType(AndroidString(mimetype or "text/plain")) + sendIntent.putExtra(Intent.EXTRA_TEXT, AndroidString(msg)) + if app: + sendIntent.setPackage(AndroidString(app)) + sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + get_activity().startActivity(sendIntent) + + +def make_service_foreground(title, message): + service = get_service() + Drawable = autoclass("{}.R$drawable".format(service.getPackageName())) + app_context = service.getApplication().getApplicationContext() + notification_builder = NotificationBuilder(app_context) + notification_builder.setContentTitle(AndroidString(title)) + notification_builder.setContentText(AndroidString(message)) + notification_intent = Intent(app_context, PythonActivity) + notification_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) + notification_intent.setAction(Intent.ACTION_MAIN) + notification_intent.addCategory(Intent.CATEGORY_LAUNCHER) + intent = PendingIntent.getActivity(service, 0, notification_intent, 0) + notification_builder.setContentIntent(intent) + notification_builder.setSmallIcon(Drawable.icon) + notification_builder.setAutoCancel(True) + new_notification = notification_builder.getNotification() + service.startForeground(1, new_notification) diff --git a/src/kolibri_utils.py b/src/kolibri_utils.py new file mode 100644 index 00000000..f9505274 --- /dev/null +++ b/src/kolibri_utils.py @@ -0,0 +1,33 @@ +import os +import pew.ui +import sys + + +script_dir = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(script_dir) +sys.path.append(os.path.join(script_dir, "kolibri", "dist")) + +os.environ["DJANGO_SETTINGS_MODULE"] = "kolibri_app_settings" + +# TODO: before shipping the app, make this contingent on debug vs production mode +os.environ["KOLIBRI_RUN_MODE"] = "pew-dev" + + +if pew.ui.platform == "android": + # initialize some system environment variables needed to run smoothly on Android + from android_utils import get_timezone_name + os.environ["TZ"] = get_timezone_name() + os.environ["LC_ALL"] = "en_US.UTF-8" + + +def start_kolibri_server(): + + from kolibri.utils.cli import main + + print("Starting Kolibri server...") + print("Port: {}".format(os.environ.get("KOLIBRI_HTTP_PORT", "(default)"))) + print("Home folder: {}".format(os.environ.get("KOLIBRI_HOME", "(default)"))) + print("Timezone: {}".format(os.environ.get("TZ", "(default)"))) + + main(["start", "--foreground"]) + diff --git a/src/main.py b/src/main.py index 332e4351..2aabb048 100644 --- a/src/main.py +++ b/src/main.py @@ -1,4 +1,3 @@ -import json import logging import os import time @@ -16,35 +15,29 @@ logging.info("Entering main.py...") -def start_kolibri_server(port): +def start_kolibri(port): if pew.ui.platform == "android": - from jnius import autoclass - - PythonActivity = autoclass("org.kivy.android.PythonActivity") - service = autoclass('org.learningequality.Kolibri.ServiceServer') - - # TODO: check for storage availability, allow user to chose sd card or internal - def get_home_folder(): - kolibri_home_file = PythonActivity.mActivity.getExternalFilesDir(None) - return os.path.join(kolibri_home_file.toString(), "KOLIBRI_DATA") + from android_utils import get_home_folder, start_service, get_version_name logging.info("Starting kolibri server via Android service...") - service.start(PythonActivity.mActivity, json.dumps({ - "HOME": get_home_folder(), - "PORT": port, - "VERSION": PythonActivity.getPackageManager().getPackageInfo(PythonActivity.getPackageName(), 0).versionName, - })) + start_service("kolibri", { + "KOLIBRI_HOME": get_home_folder(), + "KOLIBRI_HTTP_PORT": port, + "KOLIBRI_APK_VERSION_NAME": get_version_name(), + }) else: - from server import start_django + from kolibri_utils import start_kolibri_server + + os.environ["KOLIBRI_HTTP_PORT"] = port logging.info("Starting kolibri server directly as thread...") - thread = pew.ui.PEWThread(target=start_django, args=(port,)) + thread = pew.ui.PEWThread(target=start_kolibri_server) thread.daemon = True thread.start() @@ -62,8 +55,8 @@ def setUp(self): self.kolibri_loaded = False self.view = pew.ui.WebUIView("Kolibri", self.loader_url, delegate=self) - # start thread - start_kolibri_server(PORT) + # start kolibri server + start_kolibri(PORT) self.load_thread = pew.ui.PEWThread(target=self.wait_for_server) self.load_thread.daemon = True diff --git a/src/server.py b/src/server.py deleted file mode 100644 index 15765519..00000000 --- a/src/server.py +++ /dev/null @@ -1,93 +0,0 @@ -import json -import logging -import os -import shutil -import sys -import time - -# initialize logging before loading any third-party modules, as they may cause logging to get configured. -logging.basicConfig(level=logging.DEBUG) - -import pew -import pew.ui - -logging.info("Entering server.py...") - -script_dir = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(script_dir) -sys.path.append(os.path.join(script_dir, "kolibri", "dist")) - -os.environ["DJANGO_SETTINGS_MODULE"] = "kolibri_app_settings" - -# TODO: before shipping the app, make this contingent on debug vs production mode -os.environ["KOLIBRI_RUN_MODE"] = "pew-dev" - -service_args = json.loads(os.environ.get("PYTHON_SERVICE_ARGUMENT") or "{}") - - -def start_django(port): - - from kolibri.utils.cli import main - - logging.info("Starting server...") - - main(["start", "--foreground", "--port={port}".format(port=port)]) - - -if pew.ui.platform == "android": - - from jnius import autoclass - service = autoclass('org.kivy.android.PythonService').mService - File = autoclass("java.io.File") - Timezone = autoclass("java.util.TimeZone") - AndroidString = autoclass('java.lang.String') - Drawable = autoclass("{}.R$drawable".format(service.getPackageName())) - Context = autoclass('android.content.Context') - Intent = autoclass('android.content.Intent') - PendingIntent = autoclass('android.app.PendingIntent') - NotificationBuilder = autoclass('android.app.Notification$Builder') - Notification = autoclass('android.app.Notification') - - def make_service_foreground(title, message): - PythonActivity = autoclass('org.kivy.android.PythonActivity') - app_context = service.getApplication().getApplicationContext() - notification_builder = NotificationBuilder(app_context) - notification_builder.setContentTitle(AndroidString(title)) - notification_builder.setContentText(AndroidString(message)) - notification_intent = Intent(app_context, PythonActivity) - notification_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK) - notification_intent.setAction(Intent.ACTION_MAIN) - notification_intent.addCategory(Intent.CATEGORY_LAUNCHER) - intent = PendingIntent.getActivity(service, 0, notification_intent, 0) - notification_builder.setContentIntent(intent) - notification_builder.setSmallIcon(Drawable.icon) - notification_builder.setAutoCancel(True) - new_notification = notification_builder.getNotification() - service.startForeground(1, new_notification) - - os.environ["KOLIBRI_HOME"] = service_args["HOME"] - - # move in a templated Kolibri data directory, including pre-migrated DB, to speed up startup - HOME_TEMPLATE_PATH = "preseeded_kolibri_home" - HOME_PATH = os.environ["KOLIBRI_HOME"] - if not os.path.exists(HOME_PATH) and os.path.exists(HOME_TEMPLATE_PATH): - shutil.move(HOME_TEMPLATE_PATH, HOME_PATH) - - # store the version name into an envvar to be picked up by Kolibri - os.environ["KOLIBRI_APK_VERSION_NAME"] = service_args["VERSION"] - - os.environ["TZ"] = Timezone.getDefault().getDisplayName() - os.environ["LC_ALL"] = "en_US.UTF-8" - - logging.info("Home folder: {}".format(os.environ["KOLIBRI_HOME"])) - logging.info("Timezone: {}".format(os.environ["TZ"])) - - make_service_foreground("Kolibri is running...", "Click here to resume.") - - thread = pew.ui.PEWThread(target=start_django, args=(service_args["PORT"],)) - thread.daemon = True - thread.start() - - while True: - logging.info("Server has been started!") - time.sleep(1) \ No newline at end of file From c8f3a4ac749529f7adcb2f9a966afbd20ef54723 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Mon, 13 Apr 2020 15:45:28 -0700 Subject: [PATCH 06/18] Clean up makefile, add minsdk, and main.py fix --- Makefile | 8 +++----- project_info.template | 2 +- src/main.py | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 22b62111..0ef3265c 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ clean: - rm -rf dist/android/*.apk project_info.json ./src/kolibri deepclean: clean - rm -r $(HOME)/.local/share/python-for-android - rm -r build - yes y | docker system prune -a + rm -r $(HOME)/.local/share/python-for-android || true + rm -r build || true + yes y | docker system prune -a || true rm build_docker 2> /dev/null # Extract the whl file @@ -20,8 +20,6 @@ project_info.json: project_info.template src/kolibri scripts/create_project_info .PHONY: p4a_android_distro p4a_android_distro: whitelist.txt project_info.json - mkdir -p $(HOME)/.local/share/python-for-android/packages/openssl/ - wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2p.tar.gz -O $(HOME)/.local/share/python-for-android/packages/openssl/openssl-1.0.2p.tar.gz pew init android ifdef P4A_RELEASE_KEYSTORE_PASSWD diff --git a/project_info.template b/project_info.template index 5b3c2d40..6bc7a1e3 100644 --- a/project_info.template +++ b/project_info.template @@ -8,5 +8,5 @@ "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": [], "sdk": 23}} + "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": [], "sdk": 28, "minsdk": 19}} } diff --git a/src/main.py b/src/main.py index 2aabb048..63f4fd24 100644 --- a/src/main.py +++ b/src/main.py @@ -33,7 +33,7 @@ def start_kolibri(port): from kolibri_utils import start_kolibri_server - os.environ["KOLIBRI_HTTP_PORT"] = port + os.environ["KOLIBRI_HTTP_PORT"] = str(port) logging.info("Starting kolibri server directly as thread...") From 44cd7afdfa7b90d7361060303412eb105ee15c46 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Mon, 13 Apr 2020 16:07:41 -0700 Subject: [PATCH 07/18] In-progress updates for WhatsApp file sharing --- .gitignore | 1 + Makefile | 3 +++ project_info.template | 2 +- src/android_service.py | 6 +++++- src/android_utils.py | 24 +++++++++++++++++++++++- src/config.py | 3 ++- src/db.sqlite3.empty | Bin 921600 -> 0 bytes src/initialization.py | 21 +++++++++++++++++++++ src/kolibri_utils.py | 24 ++++-------------------- src/main.py | 33 +++++++++++++++++++-------------- 10 files changed, 79 insertions(+), 38 deletions(-) delete mode 100644 src/db.sqlite3.empty create mode 100644 src/initialization.py diff --git a/.gitignore b/.gitignore index b2065c5f..b6dfa32e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ src/kolibri src/preseeded_kolibri_home +src/extra-packages tmpenv whl/* diff --git a/Makefile b/Makefile index 0ef3265c..eb1528ae 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,9 @@ src/kolibri: clean rm -r src/kolibri 2> /dev/null || true unzip -qo "whl/kolibri*.whl" "kolibri/*" -x "kolibri/dist/cext*" -d src/ ./delete_kolibri_blacklist.sh + # can remove the following and use requirements after we have a version of p4a with: + # https://github.com/kivy/python-for-android/pull/1437/files + pip install --target src/extra-packages flask plyer # Generate the project info file project_info.json: project_info.template src/kolibri scripts/create_project_info.py diff --git a/project_info.template b/project_info.template index 6bc7a1e3..39a7c17e 100644 --- a/project_info.template +++ b/project_info.template @@ -8,5 +8,5 @@ "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": [], "sdk": 28, "minsdk": 19}} + "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": ["FOREGROUND_SERVICE"], "sdk": 28, "minsdk": 19}} } diff --git a/src/android_service.py b/src/android_service.py index 4146cf2a..8b58d3a5 100644 --- a/src/android_service.py +++ b/src/android_service.py @@ -1,9 +1,13 @@ +import initialization # keep this first, to ensure we're set up for other imports + import logging import os import pew.ui import shutil import time + + # initialize logging before loading any third-party modules, as they may cause logging to get configured. logging.basicConfig(level=logging.DEBUG) @@ -26,7 +30,7 @@ shutil.move(HOME_TEMPLATE_PATH, HOME_PATH) # ensure the service stays running by "foregrounding" it with a persistent notification -make_service_foreground("Kolibri is running...", "Click here to resume.") +# make_service_foreground("Kolibri is running...", "Click here to resume.") # start the kolibri server as a thread thread = pew.ui.PEWThread(target=start_kolibri_server) diff --git a/src/android_utils.py b/src/android_utils.py index c2e5af99..00ed3db4 100644 --- a/src/android_utils.py +++ b/src/android_utils.py @@ -31,7 +31,7 @@ def get_timezone_name(): def start_service(service_name, service_args): service = autoclass("org.learningequality.Kolibri.Service{}".format(service_name.title())) - service.start(PythonActivity.mActivity, json.dumps(service_args)) + service.start(PythonActivity.mActivity, json.dumps(dict(service_args))) def get_service_args(): @@ -95,6 +95,28 @@ def share_by_intent(path=None, msg=None, app=None, mimetype=None): get_activity().startActivity(sendIntent) + +def share_file(path, app=None, msg=None): + + if not path.startswith("http"): + path = "file://" + path + + logging.info("About to share path: " + path) + + sendIntent = Intent() + sendIntent.setAction(Intent.ACTION_SEND) + parcelable = cast("android.os.Parcelable", Uri.parse(path)) + sendIntent.putExtra(Intent.EXTRA_STREAM, parcelable) + if msg: + sendIntent.putExtra(Intent.EXTRA_TEXT, AndroidString(msg)) + if app: + sendIntent.setPackage(AndroidString(app)) + sendIntent.setType(AndroidString("*/*")) + sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + get_activity().startActivity(sendIntent) + + def make_service_foreground(title, message): service = get_service() Drawable = autoclass("{}.R$drawable".format(service.getPackageName())) diff --git a/src/config.py b/src/config.py index d3e4ac46..a9c1af87 100644 --- a/src/config.py +++ b/src/config.py @@ -1 +1,2 @@ -PORT = 8080 \ No newline at end of file +KOLIBRI_PORT = 8080 +FLASK_PORT = 5226 \ No newline at end of file diff --git a/src/db.sqlite3.empty b/src/db.sqlite3.empty deleted file mode 100644 index 5dfcc731d3ed6e9fc72610b032c52138aa12819d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921600 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 diff --git a/src/initialization.py b/src/initialization.py new file mode 100644 index 00000000..7ab266dc --- /dev/null +++ b/src/initialization.py @@ -0,0 +1,21 @@ +import os +import pew.ui +import sys + + +script_dir = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(script_dir) +sys.path.append(os.path.join(script_dir, "kolibri", "dist")) +sys.path.append(os.path.join(script_dir, "extra-packages")) + +os.environ["DJANGO_SETTINGS_MODULE"] = "kolibri_app_settings" + +# TODO: before shipping the app, make this contingent on debug vs production mode +os.environ["KOLIBRI_RUN_MODE"] = "pew-dev" + + +if pew.ui.platform == "android": + # initialize some system environment variables needed to run smoothly on Android + from android_utils import get_timezone_name + os.environ["TZ"] = get_timezone_name() + os.environ["LC_ALL"] = "en_US.UTF-8" \ No newline at end of file diff --git a/src/kolibri_utils.py b/src/kolibri_utils.py index f9505274..0b30a528 100644 --- a/src/kolibri_utils.py +++ b/src/kolibri_utils.py @@ -3,31 +3,15 @@ import sys -script_dir = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(script_dir) -sys.path.append(os.path.join(script_dir, "kolibri", "dist")) - -os.environ["DJANGO_SETTINGS_MODULE"] = "kolibri_app_settings" - -# TODO: before shipping the app, make this contingent on debug vs production mode -os.environ["KOLIBRI_RUN_MODE"] = "pew-dev" - - -if pew.ui.platform == "android": - # initialize some system environment variables needed to run smoothly on Android - from android_utils import get_timezone_name - os.environ["TZ"] = get_timezone_name() - os.environ["LC_ALL"] = "en_US.UTF-8" - - def start_kolibri_server(): - from kolibri.utils.cli import main - print("Starting Kolibri server...") print("Port: {}".format(os.environ.get("KOLIBRI_HTTP_PORT", "(default)"))) print("Home folder: {}".format(os.environ.get("KOLIBRI_HOME", "(default)"))) print("Timezone: {}".format(os.environ.get("TZ", "(default)"))) - main(["start", "--foreground"]) + +def get_file_path(filename): + from kolibri.core.content.utils.paths import get_content_storage_file_path + return get_content_storage_file_path(filename) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 63f4fd24..1052e0c9 100644 --- a/src/main.py +++ b/src/main.py @@ -1,3 +1,5 @@ +import initialization # keep this first, to ensure we're set up for other imports + import logging import os import time @@ -9,34 +11,37 @@ import pew import pew.ui -from config import PORT +from config import KOLIBRI_PORT, FLASK_PORT pew.set_app_name("Kolibri") logging.info("Entering main.py...") +if pew.ui.platform == "android": + + from android_utils import get_home_folder, get_version_name + + os.environ["KOLIBRI_HOME"] = get_home_folder() + os.environ["KOLIBRI_APK_VERSION_NAME"] = get_version_name() + + def start_kolibri(port): - if pew.ui.platform == "android": + os.environ["KOLIBRI_HTTP_PORT"] = str(port) - from android_utils import get_home_folder, start_service, get_version_name + if pew.ui.platform == "android": logging.info("Starting kolibri server via Android service...") - start_service("kolibri", { - "KOLIBRI_HOME": get_home_folder(), - "KOLIBRI_HTTP_PORT": port, - "KOLIBRI_APK_VERSION_NAME": get_version_name(), - }) + from android_utils import start_service + start_service("kolibri", dict(os.environ)) else: - from kolibri_utils import start_kolibri_server - - os.environ["KOLIBRI_HTTP_PORT"] = str(port) - logging.info("Starting kolibri server directly as thread...") + from kolibri_utils import start_kolibri_server + thread = pew.ui.PEWThread(target=start_kolibri_server) thread.daemon = True thread.start() @@ -56,7 +61,7 @@ def setUp(self): self.view = pew.ui.WebUIView("Kolibri", self.loader_url, delegate=self) # start kolibri server - start_kolibri(PORT) + start_kolibri(KOLIBRI_PORT) self.load_thread = pew.ui.PEWThread(target=self.wait_for_server) self.load_thread.daemon = True @@ -89,7 +94,7 @@ def page_loaded(self, url): def wait_for_server(self): - home_url = "http://localhost:{port}".format(port=PORT) + home_url = "http://localhost:{port}".format(port=KOLIBRI_PORT) # test url to see if server has started def running(): From de041f0b273f335ae691cf7c461a1a456706db44 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Fri, 17 Apr 2020 09:11:44 -0700 Subject: [PATCH 08/18] Py3-ification. --- Makefile | 2 +- delete_kolibri_blacklist.sh | 3 +++ project_info.template | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index eb1528ae..35714953 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ launch: project_info.json pew build android $(pew_release_flag) adb uninstall org.learningequality.Kolibri || true 2> /dev/null rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null - adb install dist/android/*-debug.apk + adb install dist/android/*-debug-*.apk adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity sleep 5 adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller" diff --git a/delete_kolibri_blacklist.sh b/delete_kolibri_blacklist.sh index bdc4cb9a..bf8ee636 100755 --- a/delete_kolibri_blacklist.sh +++ b/delete_kolibri_blacklist.sh @@ -8,6 +8,9 @@ rm -r src/kolibri/dist/Cryptodome rm -r src/kolibri/plugins/demo_server rm -r src/kolibri/plugins/style_guide +# remove python2-only stuff +rm -r src/kolibri/dist/py2only + # remove pycountry and replace with stub # (only used by getlang_by_alpha2 in le-utils, which Kolibri doesn't call) rm -r src/kolibri/dist/pycountry/* diff --git a/project_info.template b/project_info.template index 39a7c17e..47d081a6 100644 --- a/project_info.template +++ b/project_info.template @@ -3,10 +3,10 @@ "version": "${apk_version}", "build_number": "${build_number}", "identifier": "org.learningequality.Kolibri", - "requirements": {"android": ["python2", "pyjnius", "genericndkbuild", "sqlite3", "cryptography", "pyopenssl", "openssl", "six"]}, + "requirements": {"android": ["python3", "android", "pyjnius", "genericndkbuild", "sqlite3", "cryptography", "pyopenssl", "openssl", "six"]}, "whitelist_file": {"android": "whitelist.txt"}, "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": ["FOREGROUND_SERVICE"], "sdk": 28, "minsdk": 19}} + "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": ["FOREGROUND_SERVICE"], "sdk": 29, "minsdk": 21}} } From 839bd981370a5f98bdac0e2de8d0252f575b214e Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Fri, 17 Apr 2020 21:31:50 -0700 Subject: [PATCH 09/18] Point Dockerfile to temporary development branches of p4a and pew --- Dockerfile | 4 ++-- Makefile | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index d9c7dcaf..ab1ee0c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,8 +44,8 @@ RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ python get-pip.py && \ pip install cython virtualenv && \ # get kevin's custom packages - pip install -e git+https://github.com/kollivier/pyeverywhere@dev#egg=pyeverywhere && \ - pip install -e git+https://github.com/kollivier/python-for-android@webview_plus#egg=python-for-android && \ + pip install -e git+https://github.com/kollivier/pyeverywhere@p4a_update#egg=pyeverywhere && \ + pip install -e git+https://github.com/kollivier/python-for-android@pew_webview#egg=python-for-android && \ useradd -lm kivy USER kivy:kivy diff --git a/Makefile b/Makefile index 35714953..dc6d9223 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ clean: deepclean: clean rm -r $(HOME)/.local/share/python-for-android || true rm -r build || true + rm -r dist || true yes y | docker system prune -a || true rm build_docker 2> /dev/null From 8dc0e1a5b2915937dcafc177cc5134f1af190926 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Fri, 17 Apr 2020 21:32:17 -0700 Subject: [PATCH 10/18] Upgrade urllib reference to Python 3 --- src/main.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main.py b/src/main.py index 1052e0c9..56924c4f 100644 --- a/src/main.py +++ b/src/main.py @@ -3,7 +3,8 @@ import logging import os import time -import urllib2 +import urllib.error +import urllib.request # initialize logging before loading any third-party modules, as they may cause logging to get configured. logging.basicConfig(level=logging.DEBUG) @@ -99,9 +100,10 @@ def wait_for_server(self): # test url to see if server has started def running(): try: - urllib2.urlopen(home_url) + with urllib.request.urlopen(home_url) as response: + response.read() return True - except urllib2.URLError: + except urllib.error.URLError: return False # Tie up this thread until the server is running From 679c84ff3cf3475639f04fb08c03abd856e6a913 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Sat, 18 Apr 2020 12:24:10 -0700 Subject: [PATCH 11/18] Update foreground service notification code to work in API level >= 26 --- Makefile | 4 ++-- src/android_service.py | 2 +- src/android_utils.py | 25 +++++++++++++++++++++---- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index dc6d9223..ae030611 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ clean: - rm -rf dist/android/*.apk project_info.json ./src/kolibri deepclean: clean - rm -r $(HOME)/.local/share/python-for-android || true + python-for-android clean_dists rm -r build || true rm -r dist || true yes y | docker system prune -a || true @@ -71,4 +71,4 @@ launch: project_info.json adb install dist/android/*-debug-*.apk adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity sleep 5 - adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller" + adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller|localhost:5000|NetworkManagementSocketTagger|No jobs to start" diff --git a/src/android_service.py b/src/android_service.py index 8b58d3a5..bca5fb40 100644 --- a/src/android_service.py +++ b/src/android_service.py @@ -30,7 +30,7 @@ shutil.move(HOME_TEMPLATE_PATH, HOME_PATH) # ensure the service stays running by "foregrounding" it with a persistent notification -# make_service_foreground("Kolibri is running...", "Click here to resume.") +make_service_foreground("Kolibri is running...", "Click here to resume.") # start the kolibri server as a thread thread = pew.ui.PEWThread(target=start_kolibri_server) diff --git a/src/android_utils.py b/src/android_utils.py index 00ed3db4..7f614a8d 100644 --- a/src/android_utils.py +++ b/src/android_utils.py @@ -5,15 +5,19 @@ logging.basicConfig(level=logging.DEBUG) -AndroidString = autoclass('java.lang.String') -Intent = autoclass('android.content.Intent') +AndroidString = autoclass("java.lang.String") +Context = autoclass("android.content.Context") +Intent = autoclass("android.content.Intent") NotificationBuilder = autoclass("android.app.Notification$Builder") +NotificationManager = autoclass("android.app.NotificationManager") PackageManager = autoclass("android.content.pm.PackageManager") PendingIntent = autoclass("android.app.PendingIntent") PythonActivity = autoclass("org.kivy.android.PythonActivity") Timezone = autoclass("java.util.TimeZone") -Uri = autoclass('android.net.Uri') +Uri = autoclass("android.net.Uri") +ANDROID_VERSION = autoclass("android.os.Build$VERSION") +SDK_INT = ANDROID_VERSION.SDK_INT def is_service_context(): return "PYTHON_SERVICE_ARGUMENT" in os.environ @@ -50,6 +54,9 @@ def get_activity(): return PythonActivity.mActivity +Drawable = autoclass("{}.R$drawable".format(get_activity().getPackageName())) + + def is_app_installed(app_id): manager = get_activity().getPackageManager() @@ -121,7 +128,17 @@ def make_service_foreground(title, message): service = get_service() Drawable = autoclass("{}.R$drawable".format(service.getPackageName())) app_context = service.getApplication().getApplicationContext() - notification_builder = NotificationBuilder(app_context) + + if SDK_INT >= 26: + NotificationChannel = autoclass("android.app.NotificationChannel") + notification_service = cast(NotificationManager, get_activity().getSystemService(Context.NOTIFICATION_SERVICE)) + channel_id = get_activity().getPackageName() + app_channel = NotificationChannel(channel_id, "Kolibri Background Server", NotificationManager.IMPORTANCE_DEFAULT) + notification_service.createNotificationChannel(app_channel) + notification_builder = NotificationBuilder(app_context, channel_id) + else: + notification_builder = NotificationBuilder(app_context) + notification_builder.setContentTitle(AndroidString(title)) notification_builder.setContentText(AndroidString(message)) notification_intent = Intent(app_context, PythonActivity) From 92ea5c8eb5e5b7eae33fa4b946eb7c4026ca4fcc Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Sun, 19 Apr 2020 16:22:25 -0700 Subject: [PATCH 12/18] Fully functioning file sharing via Flask server and intents --- Makefile | 10 ++++----- logcat.sh | 5 +++-- project_info.template | 12 +++++++++-- src/android_service.py | 28 +++++++++++++++++++++++-- src/android_utils.py | 42 +++++++++++--------------------------- src/fileprovider_paths.xml | 5 +++++ src/kolibri_utils.py | 2 +- src/main.py | 2 +- 8 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 src/fileprovider_paths.xml diff --git a/Makefile b/Makefile index ae030611..057eb957 100644 --- a/Makefile +++ b/Makefile @@ -14,9 +14,6 @@ src/kolibri: clean rm -r src/kolibri 2> /dev/null || true unzip -qo "whl/kolibri*.whl" "kolibri/*" -x "kolibri/dist/cext*" -d src/ ./delete_kolibri_blacklist.sh - # can remove the following and use requirements after we have a version of p4a with: - # https://github.com/kivy/python-for-android/pull/1437/files - pip install --target src/extra-packages flask plyer # Generate the project info file project_info.json: project_info.template src/kolibri scripts/create_project_info.py @@ -48,9 +45,10 @@ preseeded_kolibri_home: export PYTHONPATH := tmpenv preseeded_kolibri_home: rm -r tmpenv 2> /dev/null || true rm -r src/preseeded_kolibri_home 2> /dev/null || true + pip uninstall kolibri 2> /dev/null || true pip install --target tmpenv whl/*.whl tmpenv/bin/kolibri start --port=16294 - sleep 5 + sleep 1 tmpenv/bin/kolibri stop sleep 1 yes yes | tmpenv/bin/kolibri manage deprovision @@ -67,8 +65,8 @@ run_docker: build_docker launch: project_info.json pew build android $(pew_release_flag) adb uninstall org.learningequality.Kolibri || true 2> /dev/null - rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null +# rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null adb install dist/android/*-debug-*.apk adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity - sleep 5 + sleep 1 adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller|localhost:5000|NetworkManagementSocketTagger|No jobs to start" diff --git a/logcat.sh b/logcat.sh index 73ced822..bedb3d57 100755 --- a/logcat.sh +++ b/logcat.sh @@ -1,9 +1,10 @@ main_pid=$(adb shell ps | grep ' org.learningequality.Kolibri$' | tr -s [:space:] ' ' | cut -d' ' -f2) server_pid=$(adb shell ps | grep ' org.learningequality.Kolibri:service_kolibri$' | tr -s [:space:] ' ' | cut -d' ' -f2) +exclusion="NetworkManagementSocketTagger|Could not ping|No jobs|port:5000" if [ -z "$server_pid" ]; then echo "Searching for: $main_pid" adb logcat | grep -E " $main_pid " else - echo "Searching for: $main_pid | $server_pid " - adb logcat | grep -E " $main_pid | $server_pid " + echo "Searching for: $main_pid | $server_pid " | egrep -v "$exclusion" + adb logcat | grep -E " $main_pid | $server_pid " | egrep -v "$exclusion" fi \ No newline at end of file diff --git a/project_info.template b/project_info.template index 47d081a6..3b83052d 100644 --- a/project_info.template +++ b/project_info.template @@ -3,10 +3,18 @@ "version": "${apk_version}", "build_number": "${build_number}", "identifier": "org.learningequality.Kolibri", - "requirements": {"android": ["python3", "android", "pyjnius", "genericndkbuild", "sqlite3", "cryptography", "pyopenssl", "openssl", "six"]}, + "requirements": {"android": ["python3", "android", "pyjnius", "genericndkbuild", "sqlite3", "cryptography", "pyopenssl", "openssl", "six", "flask"]}, "whitelist_file": {"android": "whitelist.txt"}, "icons": {"android": "icon.png"}, "launch_images": {"android": "assets/launch-image.png"}, "asset_dirs": ["assets"], - "extra_build_options": {"android": {"services": ["kolibri:android_service.py"], "extra_permissions": ["FOREGROUND_SERVICE"], "sdk": 29, "minsdk": 21}} + "extra_build_options": { + "android": { + "services": ["kolibri:android_service.py"], + "extra_permissions": ["FOREGROUND_SERVICE"], + "sdk": 29, + "minsdk": 21, + "fileprovider_paths_filename": "fileprovider_paths.xml" + } + } } diff --git a/src/android_service.py b/src/android_service.py index bca5fb40..d7ba0919 100644 --- a/src/android_service.py +++ b/src/android_service.py @@ -1,12 +1,16 @@ import initialization # keep this first, to ensure we're set up for other imports +import flask import logging import os import pew.ui import shutil import time +from config import FLASK_PORT +from android_utils import share_by_intent +from kolibri_utils import get_content_file_path # initialize logging before loading any third-party modules, as they may cause logging to get configured. logging.basicConfig(level=logging.DEBUG) @@ -37,5 +41,25 @@ thread.daemon = True thread.start() -while True: - time.sleep(1) \ No newline at end of file +# start a parallel Flask server as a backchannel for triggering events +flaskapp = flask.Flask(__name__) + +@flaskapp.route('/share_by_intent') +def do_share_by_intent(): + + args = flask.request.args + allowed_args = ["filename", "path", "msg", "app", "mimetype"] + kwargs = {key: args[key] for key in args if key in allowed_args} + + if "filename" in kwargs: + kwargs["path"] = get_content_file_path(kwargs.pop("filename")) + + logging.error("Sharing: {}".format(kwargs)) + + share_by_intent(**kwargs) + + return "OK, boomer" + + +if __name__ == "__main__": + flaskapp.run(host="localhost", port=FLASK_PORT) diff --git a/src/android_utils.py b/src/android_utils.py index 7f614a8d..bae0db9a 100644 --- a/src/android_utils.py +++ b/src/android_utils.py @@ -7,6 +7,9 @@ AndroidString = autoclass("java.lang.String") Context = autoclass("android.content.Context") +Environment = autoclass("android.os.Environment") +File = autoclass("java.io.File") +FileProvider = autoclass('android.support.v4.content.FileProvider') Intent = autoclass("android.content.Intent") NotificationBuilder = autoclass("android.app.Notification$Builder") NotificationManager = autoclass("android.app.NotificationManager") @@ -19,6 +22,7 @@ ANDROID_VERSION = autoclass("android.os.Build$VERSION") SDK_INT = ANDROID_VERSION.SDK_INT + def is_service_context(): return "PYTHON_SERVICE_ARGUMENT" in os.environ @@ -54,9 +58,6 @@ def get_activity(): return PythonActivity.mActivity -Drawable = autoclass("{}.R$drawable".format(get_activity().getPackageName())) - - def is_app_installed(app_id): manager = get_activity().getPackageManager() @@ -79,16 +80,19 @@ def send_whatsapp_message(msg): share_by_intent(msg=msg, app="com.whatsapp") -def share_by_intent(path=None, msg=None, app=None, mimetype=None): +def share_by_intent(path=None, filename=None, msg=None, app=None, mimetype=None): - assert path or msg, "Must provide either a file path or a msg to share" + assert path or msg or filename, "Must provide either a path, a filename, or a msg to share" sendIntent = Intent() sendIntent.setAction(Intent.ACTION_SEND) if path: - if not path.startswith("http"): - path = "file://" + path - parcelable = cast("android.os.Parcelable", Uri.parse(path)) + uri = FileProvider.getUriForFile( + Context.getApplicationContext(), + "org.learningequality.Kolibri.fileprovider", + File(path) + ) + parcelable = cast("android.os.Parcelable", uri) sendIntent.putExtra(Intent.EXTRA_STREAM, parcelable) sendIntent.setType(AndroidString(mimetype or "*/*")) sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) @@ -102,28 +106,6 @@ def share_by_intent(path=None, msg=None, app=None, mimetype=None): get_activity().startActivity(sendIntent) - -def share_file(path, app=None, msg=None): - - if not path.startswith("http"): - path = "file://" + path - - logging.info("About to share path: " + path) - - sendIntent = Intent() - sendIntent.setAction(Intent.ACTION_SEND) - parcelable = cast("android.os.Parcelable", Uri.parse(path)) - sendIntent.putExtra(Intent.EXTRA_STREAM, parcelable) - if msg: - sendIntent.putExtra(Intent.EXTRA_TEXT, AndroidString(msg)) - if app: - sendIntent.setPackage(AndroidString(app)) - sendIntent.setType(AndroidString("*/*")) - sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - get_activity().startActivity(sendIntent) - - def make_service_foreground(title, message): service = get_service() Drawable = autoclass("{}.R$drawable".format(service.getPackageName())) diff --git a/src/fileprovider_paths.xml b/src/fileprovider_paths.xml new file mode 100644 index 00000000..3514378c --- /dev/null +++ b/src/fileprovider_paths.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/kolibri_utils.py b/src/kolibri_utils.py index 0b30a528..0d6283b4 100644 --- a/src/kolibri_utils.py +++ b/src/kolibri_utils.py @@ -12,6 +12,6 @@ def start_kolibri_server(): main(["start", "--foreground"]) -def get_file_path(filename): +def get_content_file_path(filename): from kolibri.core.content.utils.paths import get_content_storage_file_path return get_content_storage_file_path(filename) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 56924c4f..bbf91932 100644 --- a/src/main.py +++ b/src/main.py @@ -12,7 +12,7 @@ import pew import pew.ui -from config import KOLIBRI_PORT, FLASK_PORT +from config import KOLIBRI_PORT pew.set_app_name("Kolibri") logging.info("Entering main.py...") From 9d338b3a6cfb18ef152655cbed86340bdd6c5072 Mon Sep 17 00:00:00 2001 From: Jamie Alexandre Date: Fri, 24 Apr 2020 14:44:53 -0700 Subject: [PATCH 13/18] Install APK for the specified architecture --- Makefile | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 359a9dca..003ab3c1 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,12 @@ +# run with `make ... ARCH=64bit` to build for v8a ARCH= +ifeq ($(ARCH), 64bit) + ARM_VER=v8a +else + ARM_VER=v7a +endif + # Clear out apks clean: - rm -rf dist/android/*.apk project_info.json ./src/kolibri @@ -64,11 +71,16 @@ preseeded_kolibri_home: run_docker: build_docker ./scripts/rundocker.sh -launch: project_info.json +softbuild: project_info.json pew build android $(pew_release_flag) $(ARCH) + +install: adb uninstall org.learningequality.Kolibri || true 2> /dev/null -# rm dist/android/Kolibri-0-debug.apk || true 2> /dev/null - adb install dist/android/*-debug-*.apk + adb install dist/android/*$(ARM_VER)-debug-*.apk + +run: install adb shell am start -n org.learningequality.Kolibri/org.kivy.android.PythonActivity sleep 1 adb logcat | grep -i -E "python|kolibr| `adb shell ps | grep ' org.learningequality.Kolibri$$' | tr -s [:space:] ' ' | cut -d' ' -f2` " | grep -E -v "WifiTrafficPoller|localhost:5000|NetworkManagementSocketTagger|No jobs to start" + +launch: softbuild run \ No newline at end of file From a759c21dbd6daab37533423a10dd8ddc7c67aae2 Mon Sep 17 00:00:00 2001 From: David Canas Date: Fri, 24 Apr 2020 18:26:12 -0700 Subject: [PATCH 14/18] Using python3 for build Updating ubuntu to bionic for the libraries --- Dockerfile | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index ab1ee0c7..48d0e70d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:16.04 as build +FROM ubuntu:bionic as build LABEL maintainer="Learning Equality " tag="kolibrikivy" ENV DEBIAN_FRONTEND noninteractive @@ -31,8 +31,17 @@ RUN dpkg --add-architecture i386 && \ zlib1g:i386 \ python-wxgtk3.0 \ libgtk-3-dev \ + python3 \ && apt-get clean +RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ + python3 get-pip.py + +# Ensure that python is using python3 +# copying approach from official python images +ENV PATH /usr/local/bin:$PATH +RUN cd /usr/local/bin && \ + ln -s $(which python3) python # Allows us to invalidate cache if those repos update. # Intentionally not pinning for dev velocity. @@ -40,14 +49,14 @@ ADD https://github.com/kollivier/python-for-android/archive/webview_plus.zip p4a ADD https://github.com/kollivier/pyeverywhere/archive/dev.zip pew.zip # install python dependencies -RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ - python get-pip.py && \ - pip install cython virtualenv && \ +RUN pip install cython virtualenv && \ # get kevin's custom packages pip install -e git+https://github.com/kollivier/pyeverywhere@p4a_update#egg=pyeverywhere && \ pip install -e git+https://github.com/kollivier/python-for-android@pew_webview#egg=python-for-android && \ useradd -lm kivy +ENV LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 + USER kivy:kivy WORKDIR /home/kivy From 120b4b307bdb59dd2a861bc5a63b753e229d5fd7 Mon Sep 17 00:00:00 2001 From: David Canas Date: Fri, 24 Apr 2020 20:39:49 -0700 Subject: [PATCH 15/18] Bring back signing. First pass --- .buildkite/pipeline.yaml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index f1e15b5a..47087dd4 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -1,5 +1,16 @@ steps: - - block: "Build :android:?" - if: build.source == "trigger_job" - - label: "Build Android App" + - block: "Build dev APK?" + # Always run if this is a Kolibri release + if: build.env("LE_KOLIBRI_RELEASE") != "false" + + - label: "Build dev APK" command: ".buildkite/build.sh" + env: KOLIBRI_ANDROID_BUILD_MODE=dev + + - block: "Build release APK?" + # Always run if this is a Kolibri release + if: build.env("LE_KOLIBRI_RELEASE") != "false" + + - label: "Build Release APK :tada:" + command: ".buildkite/build.sh" + env: KOLIBRI_ANDROID_BUILD_MODE=release \ No newline at end of file From 5450a20d3ecbd759a0b39fcade87cbc864e7c95c Mon Sep 17 00:00:00 2001 From: David Canas Date: Fri, 24 Apr 2020 20:45:05 -0700 Subject: [PATCH 16/18] Fixing conditionals for block steps --- .buildkite/pipeline.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index 47087dd4..c95e74fd 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -1,7 +1,7 @@ steps: - block: "Build dev APK?" # Always run if this is a Kolibri release - if: build.env("LE_KOLIBRI_RELEASE") != "false" + if: build.env("LE_KOLIBRI_RELEASE") && build.env("LE_KOLIBRI_RELEASE") != "false" - label: "Build dev APK" command: ".buildkite/build.sh" @@ -9,7 +9,7 @@ steps: - block: "Build release APK?" # Always run if this is a Kolibri release - if: build.env("LE_KOLIBRI_RELEASE") != "false" + if: build.env("LE_KOLIBRI_RELEASE") && build.env("LE_KOLIBRI_RELEASE") != "false" - label: "Build Release APK :tada:" command: ".buildkite/build.sh" From d61dfe2afbeff7ff45adaf290a52e7a0e913032c Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Sat, 25 Apr 2020 09:20:03 -0700 Subject: [PATCH 17/18] Fixes for Dockerfile after p4a + bionic upgrades --- Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Dockerfile b/Dockerfile index 48d0e70d..50f70cc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,11 +14,13 @@ RUN dpkg --add-architecture i386 && \ cython \ gcc \ git \ + iproute2 \ libffi-dev \ libltdl-dev\ libncurses5:i386 \ libstdc++6:i386 \ libtool \ + locales \ lsb-release \ openjdk-8-jdk \ python-dev \ @@ -27,6 +29,7 @@ RUN dpkg --add-architecture i386 && \ wget \ xclip \ xsel \ + zip \ zlib1g-dev \ zlib1g:i386 \ python-wxgtk3.0 \ @@ -34,6 +37,10 @@ RUN dpkg --add-architecture i386 && \ python3 \ && apt-get clean +# Use java 1.8 because Ubuntu's gradle version doesn't support 1.11 +ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 +ENV PATH=$PATH:$JAVA_HOME + RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ python3 get-pip.py @@ -55,6 +62,8 @@ RUN pip install cython virtualenv && \ pip install -e git+https://github.com/kollivier/python-for-android@pew_webview#egg=python-for-android && \ useradd -lm kivy +RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ + locale-gen ENV LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 USER kivy:kivy From a2bc0ae6d6fe8f2719812a418750067d33fd32dd Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Sat, 25 Apr 2020 10:00:01 -0700 Subject: [PATCH 18/18] Fix buildkite release env variable checks. --- .buildkite/pipeline.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index c95e74fd..5311348e 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -1,7 +1,7 @@ steps: - block: "Build dev APK?" # Always run if this is a Kolibri release - if: build.env("LE_KOLIBRI_RELEASE") && build.env("LE_KOLIBRI_RELEASE") != "false" + if: build.env("LE_KOLIBRI_RELEASE") != "true" - label: "Build dev APK" command: ".buildkite/build.sh" @@ -9,7 +9,7 @@ steps: - block: "Build release APK?" # Always run if this is a Kolibri release - if: build.env("LE_KOLIBRI_RELEASE") && build.env("LE_KOLIBRI_RELEASE") != "false" + if: build.env("LE_KOLIBRI_RELEASE") == "true" - label: "Build Release APK :tada:" command: ".buildkite/build.sh"