kivymd / KivyMD

KivyMD is a collection of Material Design compliant widgets for use with Kivy, a framework for cross-platform, touch-enabled graphical applications. https://youtube.com/c/KivyMD https://twitter.com/KivyMD https://habr.com/ru/users/kivymd https://stackoverflow.com/tags/kivymd
https://kivymd.readthedocs.io
MIT License
2.21k stars 661 forks source link

app crash #988

Closed purushottam858 closed 3 years ago

purushottam858 commented 3 years ago

Description of the Bug

app crashes on deploying on the android but works fine on ubuntu

I have created new virtual environment with python 3.9.5 and installed kivy 2.0.0 again but i dont know what is wrong with building apk . I am still getting this error .

05-19 00:23:51.977 16177 16365 I python : Traceback (most recent call last): 05-19 00:23:51.977 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/app/main.py", line 372, in 05-19 00:23:51.977 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/app.py", line 855, in run 05-19 00:23:51.977 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/base.py", line 504, in runTouchApp 05-19 00:23:51.978 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/core/window/window_sdl2.py", line 747, in mainloop 05-19 00:23:51.978 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/core/window/window_sdl2.py", line 479, in _mainloop 05-19 00:23:51.978 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/base.py", line 339, in idle 05-19 00:23:51.978 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/clock.py", line 591, in tick 05-19 00:23:51.979 16177 16365 I python : File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events 05-19 00:23:51.979 16177 16365 I python : File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events 05-19 00:23:51.979 16177 16365 I python : File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events 05-19 00:23:51.979 16177 16365 I python : File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick 05-19 00:23:51.980 16177 16365 I python : File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback 05-19 00:23:51.980 16177 16365 I python : File "/home/purushottam2/Desktop/myupdateproject/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/weakmethod.py", line 56, in is_dead 05-19 00:23:51.980 16177 16365 I python : ReferenceError: weakly-referenced object no longer exists 05-19 00:23:51.980 16177 16365 I python : Python for android ended.

============================================ python --version gives

Python 3.9.5

=============================================

pip list gives

Package Version


appdirs 1.4.4 buildozer 1.2.0 certifi 2020.12.5 chardet 4.0.0 colorama 0.4.4 Cython 0.29.23 distlib 0.3.1 docutils 0.17.1 ffpyplayer 4.3.2 filelock 3.0.12 idna 2.10 importlib-metadata 4.0.1 Jinja2 3.0.0 Kivy 2.0.0 Kivy-examples 2.0.0 Kivy-Garden 0.1.4 kivymd 0.104.1 MarkupSafe 2.0.1 pep517 0.6.0 pexpect 4.8.0 Pillow 8.2.0 pip 21.1.1 plyer 2.0.0 ptyprocess 0.7.0 Pygments 2.9.0 pytoml 0.1.21 requests 2.25.1 setuptools 56.0.0 sh 1.14.2 six 1.16.0 toml 0.10.2 urllib3 1.26.4 virtualenv 20.4.6 zipp 3.4.1

================================= pip freeze gives

appdirs==1.4.4 buildozer==1.2.0 certifi==2020.12.5 chardet==4.0.0 colorama==0.4.4 Cython==0.29.23 distlib==0.3.1 docutils==0.17.1 ffpyplayer==4.3.2 filelock==3.0.12 idna==2.10 importlib-metadata==4.0.1 Jinja2==3.0.0 Kivy==2.0.0 Kivy-examples==2.0.0 Kivy-Garden==0.1.4 kivymd==0.104.1 MarkupSafe==2.0.1 pep517==0.6.0 pexpect==4.8.0 Pillow==8.2.0 plyer==2.0.0 ptyprocess==0.7.0 Pygments==2.9.0 pytoml==0.1.21 requests==2.25.1 sh==1.14.2 six==1.16.0 toml==0.10.2 urllib3==1.26.4 virtualenv==20.4.6 zipp==3.4.1

==========================================buildozer file =============================

[app]

(str) Title of your application

title = kApplication

(str) Package name

package.name = myapp

(str) Package domain (needed for android/ios packaging)

package.domain = org.test

(str) Source code where the main.py live

source.dir = .

(list) Source files to include (let empty to include all the files)

source.include_exts =

(list) List of inclusions using pattern matching

source.include_patterns = *

(list) Source files to exclude (let empty to not exclude anything)

source.exclude_exts = spec

(list) List of directory to exclude (let empty to not exclude anything)

source.exclude_dirs = tests, bin

(list) List of exclusions using pattern matching

source.exclude_patterns = license,images//.jpg

(str) Application versioning (method 1)

version = 0.1

(str) Application versioning (method 2)

version.regex = version = '"['"]

version.filename = %(source.dir)s/main.py

(list) Application requirements

comma separated e.g. requirements = sqlite3,kivy

requirements = python3 ,Kivy==2.0.0, kivymd==0.104.1, sdl2_ttf==2.0.15 , plyer, android ,pil,jnius

(str) Custom source folders for requirements

Sets custom source for any requirements with recipes

requirements.source.kivy = ../../kivy

(list) Garden requirements

garden_requirements = xcamera

(str) Presplash of the application

presplash.filename = %(source.dir)s/data/presplash.png

(str) Icon of the application

icon.filename = %(source.dir)s/data/icon.png

(str) Supported orientation (one of landscape, sensorLandscape, portrait or all)

orientation = all

(list) List of service to declare

services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#

OSX Specific

#

#

author = © Copyright Info

change the major version of python used by the app

osx.python_version = 3

Kivy version to use

osx.kivy_version = 1.9.1

#

Android specific

#

(bool) Indicate if the application should be fullscreen or not

fullscreen = 0

(string) Presplash background color (for new android toolchain)

Supported formats are: #RRGGBB #AARRGGBB or one of the following names:

red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,

darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,

olive, purple, silver, teal.

android.presplash_color = #FFFFFF

(list) Permissions

android.permissions = INTERNET, WRITE_EXTERNAL_STORAGE ,READ_EXTERNAL_STORAGE , ACCESS_NETWORK_STATE

(int) Target Android API, should be as high as possible.

android.api = 27

android.api = 27

(int) Minimum API your APK will support.

android.minapi = 21

android.minapi = 21

(int) Android SDK version to use

android.sdk = 20

android.sdk = 24

(str) Android NDK version to use

android.ndk = 19b

android.ndk = 19b

(int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.

android.ndk_api = 21

(bool) Use --private data storage (True) or --dir public storage (False)

android.private_storage = True

(str) Android NDK directory (if empty, it will be automatically downloaded.)

android.ndk_path =

(str) Android SDK directory (if empty, it will be automatically downloaded.)

android.sdk_path =

(str) ANT directory (if empty, it will be automatically downloaded.)

android.ant_path =

(bool) If True, then skip trying to update the Android sdk

This can be useful to avoid excess Internet downloads or save time

when an update is due and you just want to test/build your package

android.skip_update = False

(bool) If True, then automatically accept SDK license

agreements. This is intended for automation only. If set to False,

the default, you will be shown the license when first running

buildozer.

android.accept_sdk_license = False

(str) Android entry point, default is ok for Kivy-based app

android.entrypoint = org.renpy.android.PythonActivity

(str) Android app theme, default is ok for Kivy-based app

android.apptheme = "@android:style/Theme.NoTitleBar"

(list) Pattern to whitelist for the whole project

android.whitelist =

(str) Path to a custom whitelist file

android.whitelist_src =

(str) Path to a custom blacklist file

android.blacklist_src =

(list) List of Java .jar files to add to the libs so that pyjnius can access

their classes. Don't add jars that you do not need, since extra jars can slow

down the build process. Allows wildcards matching, for example:

OUYA-ODK/libs/*.jar

android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

(list) List of Java files to add to the android project (can be java or a

directory containing the files)

android.add_src =

(list) Android AAR archives to add (currently works only with sdl2_gradle

bootstrap)

android.add_aars = support-compat-28.0.0.aar

(list) Gradle dependencies to add (currently works only with sdl2_gradle

bootstrap)

android.gradle_dependencies =

android.gradle_dependencies = 'com.google.firebase:firebase-ads:10.2.0'

(list) add java compile options

this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option

see https://developer.android.com/studio/write/java8-support for further information

android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"

(list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}

please enclose in double quotes

e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }"

android.add_gradle_repositories =

(list) packaging options to add

see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html

can be necessary to solve conflicts in gradle_dependencies

please enclose in double quotes

e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"

android.add_gradle_repositories =

(list) Java classes to add as activities to the manifest.

android.add_activities = com.example.ExampleActivity

(str) OUYA Console category. Should be one of GAME or APP

If you leave this blank, OUYA support will not be enabled

android.ouya.category = GAME

(str) Filename of OUYA Console icon. It must be a 732x412 png image.

android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

(str) XML file to include as an intent filters in tag

android.manifest.intent_filters =

(str) launchMode to set for the main activity

android.manifest.launch_mode = standard

(list) Android additional libraries to copy into libs/armeabi

android.add_libs_armeabi = libs/android/*.so

android.add_libs_armeabi_v7a = libs/android-v7/*.so

android.add_libs_arm64_v8a = libs/android-v8/*.so

android.add_libs_x86 = libs/android-x86/*.so

android.add_libs_mips = libs/android-mips/*.so

(bool) Indicate whether the screen should stay on

Don't forget to add the WAKE_LOCK permission if you set this to True

android.wakelock = False

(list) Android application meta-data to set (key=value format)

android.meta_data =

android.meta_data = com.google.android.gms.ads.APPLICATION_ID=ca-app-pub-3940256099942544~3347511713

(list) Android library project to add (will be added in the

project.properties automatically.)

android.library_references =

(list) Android shared libraries which will be added to AndroidManifest.xml using tag

android.uses_library =

(str) Android logcat filters to use

android.logcat_filters = *:S python:D

(bool) Copy library instead of making a libpymodules.so

android.copy_libs = 1

(str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64

android.arch = armeabi-v7a

(int) overrides automatic versionCode computation (used in build.gradle)

this is not the same as app version and should only be edited if you know what you're doing

android.numeric_version = 1

#

Python for android (p4a) specific

#

(str) python-for-android fork to use, defaults to upstream (kivy)

p4a.fork =

(str) python-for-android branch to use, defaults to master

p4a.branch = develop

p4a.branch = master

(str) python-for-android git clone directory (if empty, it will be automatically cloned from github)

p4a.source_dir =

(str) The directory in which python-for-android should look for your own build recipes (if any)

p4a.local_recipes =

(str) Filename to the hook for p4a

p4a.hook =

(str) Bootstrap to use for android builds

p4a.bootstrap = sdl2

(int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)

p4a.port =

#

iOS specific

#

(str) Path to a custom kivy-ios folder

ios.kivy_ios_dir = ../kivy-ios

Alternately, specify the URL and branch of a git checkout:

ios.kivy_ios_url = https://github.com/kivy/kivy-ios ios.kivy_ios_branch = master

Another platform dependency: ios-deploy

Uncomment to use a custom checkout

ios.ios_deploy_dir = ../ios_deploy

Or specify URL and branch

ios.ios_deploy_url = https://github.com/phonegap/ios-deploy ios.ios_deploy_branch = 1.7.0

(str) Name of the certificate to use for signing the debug version

Get a list of available identities: buildozer ios list_identities

ios.codesign.debug = "iPhone Developer: ()"

(str) Name of the certificate to use for signing the release version

ios.codesign.release = %(ios.codesign.debug)s

[buildozer]

(int) Log level (0 = error only, 1 = info, 2 = debug (with command output))

log_level = 2

(int) Display warning if buildozer is run as root (0 = False, 1 = True)

warn_on_root = 1

(str) Path to build artifact storage, absolute or relative to spec file

build_dir = ./.buildozer

(str) Path to build output (i.e. .apk, .ipa) storage

bin_dir = ./bin

-----------------------------------------------------------------------------

List as sections

#

You can define all the "list" as [section:key].

Each line will be considered as a option to the list.

Let's take [app] / source.exclude_patterns.

Instead of doing:

#

[app]

source.exclude_patterns = license,data/audio/.wav,data/images/original/

#

This can be translated into:

#

[app:source.exclude_patterns]

license

data/audio/*.wav

data/images/original/*

#

-----------------------------------------------------------------------------

Profiles

#

You can extend section / key with a profile

For example, you want to deploy a demo version of your application without

HD content. You could first change the title to add "(demo)" in the name

and extend the excluded directories to remove the HD content.

#

[app@demo]

title = My Application (demo)

#

[app:source.exclude_patterns@demo]

images/hd/*

#

Then, invoke the command line with the "demo" profile:

#

buildozer --profile demo android debug

Code and Logs

call_back function(attached to upload function in hello screen) will change the screen only if it is ready to display (using a variable to decide this ), if not it will call other fun to take permissions of android storage and again that fun(take permission function ) will call other fun to load images address to recycleview data , then to change screen , set the variable to ready .

This is working fine on ubuntu but app is crashing on android device on starting the app with an error below.

I am using kivy 2 and environment details are in above comment .

python3.9 --version gives Python 3.9.5 on terminal .

what should i update ??

05-16 17:57:46.187 2320 2486 D HBMFeatureControl: brightness=16 05-16 17:57:46.190 763 763 D qdlights: entry write_int path = /sys/class/leds/lcd-backlight/brightness, value=16 05-16 17:57:46.191 763 763 E libc : Access denied finding property "persist.sys.display_debug" 05-16 17:57:46.239 28115 28307 I python : [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored) 05-16 17:57:46.271 28115 28307 I python : [INFO ] [Text ] Provider: sdl2 05-16 17:57:46.449 28115 28191 I org.test.myapp: ProcessProfilingInfo new_methods=133 is saved saved_to_disk=1 resolve_classes_delay=8000 05-16 17:57:46.559 28115 28307 I python : [INFO ] [Window ] Provider: sdl2 05-16 17:57:46.579 28115 28307 E libEGL : validate_display:92 error 3008 (EGL_BAD_DISPLAY) 05-16 17:57:46.580 28115 28307 V SDL : setOrientation() orientation=-1 width=800 height=600 resizable=true hint= 05-16 17:57:46.584 28115 28307 I python : [INFO ] [GL ] Using the "OpenGL ES 2" graphics system 05-16 17:57:46.585 28115 28307 I python : [INFO ] [GL ] Backend used 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] OpenGL version <b'OpenGL ES 3.2 V@331.0 (GIT@c455b9b, Ib7912a5d4e) (Date:09/16/19)'> 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] OpenGL vendor <b'Qualcomm'> 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] OpenGL renderer <b'Adreno (TM) 512'> 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] OpenGL parsed version: 3, 2 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] Texture max size <16384> 05-16 17:57:46.586 28115 28307 I python : [INFO ] [GL ] Texture max units <16> 05-16 17:57:46.603 2320 2486 D HBMFeatureControl: brightness=50 05-16 17:57:46.605 763 763 D qdlights: entry write_int path = /sys/class/leds/lcd-backlight/brightness, value=50 05-16 17:57:46.606 763 763 E libc : Access denied finding property "persist.sys.display_debug" 05-16 17:57:46.620 2320 2486 D HBMFeatureControl: brightness=132 05-16 17:57:46.622 763 763 D qdlights: entry write_int path = /sys/class/leds/lcd-backlight/brightness, value=132 05-16 17:57:46.622 763 763 E libc : Access denied finding property "persist.sys.display_debug" 05-16 17:57:46.628 28115 28307 I python : [INFO ] [Window ] auto add sdl2 input provider 05-16 17:57:46.630 28115 28307 I python : [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked 05-16 17:57:46.636 2320 2486 D HBMFeatureControl: brightness=50 05-16 17:57:46.638 763 763 D qdlights: entry write_int path = /sys/class/leds/lcd-backlight/brightness, value=50 05-16 17:57:46.638 763 763 E libc : Access denied finding property "persist.sys.display_debug" 05-16 17:57:46.652 2320 2486 D HBMFeatureControl: brightness=16 05-16 17:57:46.654 763 763 D qdlights: entry write_int path = /sys/class/leds/lcd-backlight/brightness, value=16 05-16 17:57:46.654 763 763 E libc : Access denied finding property "persist.sys.display_debug" 05-16 17:57:46.828 28115 28307 I python : [INFO ] [Video ] Provider: null(['video_ffmpeg', 'video_ffpyplayer'] ignored) 05-16 17:57:46.848 28115 28307 I python : created===================================================== 05-16 17:57:46.885 28115 28307 I python : [INFO ] [GL ] NPOT texture support is available 05-16 17:57:47.072 28195 28212 I ui.cloudservic: ProcessProfilingInfo new_methods=0 is saved saved_to_disk=0 resolve_classes_delay=8000 05-16 17:57:47.189 1092 2410 D installd: Found valid user 999 05-16 17:57:47.337 28115 28307 I python : started app ================================= 05-16 17:57:47.337 28115 28307 I python : [WARNING] [Base ] Unknown provider 05-16 17:57:47.338 28115 28307 I python : [INFO ] [Base ] Start application main loop 05-16 17:57:47.392 28115 28307 I python : [INFO ] [Base ] Leaving application in progress...

05-16 17:57:47.392 28115 28307 I python : Traceback (most recent call last): 05-16 17:57:47.392 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/app/main.py", line 373, in 05-16 17:57:47.395 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/app.py", line 855, in run 05-16 17:57:47.395 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/base.py", line 504, in runTouchApp 05-16 17:57:47.395 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/core/window/window_sdl2.py", line 747, in mainloop 05-16 17:57:47.395 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/core/window/window_sdl2.py", line 479, in _mainloop 05-16 17:57:47.396 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/base.py", line 339, in idle 05-16 17:57:47.396 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/clock.py", line 591, in tick 05-16 17:57:47.396 28115 28307 I python : File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events 05-16 17:57:47.397 28115 28307 I python : File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events 05-16 17:57:47.397 28115 28307 I python : File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events 05-16 17:57:47.397 28115 28307 I python : File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick 05-16 17:57:47.397 28115 28307 I python : File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback 05-16 17:57:47.398 28115 28307 I python : File "/home/purushottam2/Desktop/project/tttt/yyy/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/kivy/weakmethod.py", line 56, in is_dead 05-16 17:57:47.398 28115 28307 I python : ReferenceError: weakly-referenced object no longer exists 05-16 17:57:47.398 28115 28307 I python : Python for android ended. 05-16 17:57:47.416 1092 2410 D installd: Found valid user 999

===============================================================code ================================================

from kivymd.app import MDApp from kivy.uix.screenmanager import Screen,ScreenManager from kivy.lang import Builder from kivy.uix.floatlayout import FloatLayout from kivymd.uix.swiper import MDSwiperItem from kivymd.utils.fitimage import FitImage from kivymd.uix.boxlayout import MDBoxLayout from kivy.uix.scrollview import ScrollView from kivymd.uix.list import MDList , ThreeLineAvatarListItem from kivymd.uix.label import MDLabel from kivymd.uix.list import OneLineListItem from kivymd.uix.imagelist import SmartTile from kivy.uix.modalview import ModalView from kivy.properties import StringProperty, NumericProperty from kivy.uix.behaviors import ButtonBehavior from kivy.uix.image import Image from kivymd.uix.list import IRightBodyTouch from kivy.metrics import sp, dp from kivy.uix.stacklayout import StackLayout from kivymd.uix import MDAdaptiveWidget from kivymd.uix.button import MDFlatButton , MDIconButton from kivy.uix.carousel import Carousel from kivymd.uix.list import ImageLeftWidget from kivymd.uix.boxlayout import MDBoxLayout from kivymd.uix.carousel import MDCarousel from kivy.uix.relativelayout import RelativeLayout from kivy.properties import ( AliasProperty, BooleanProperty, BoundedNumericProperty, ListProperty, NumericProperty, ObjectProperty, OptionProperty, StringProperty, )

from kivy.animation import Animation from kivy.lang import Builder from kivy.utils import get_color_from_hex from kivymd.app import MDApp from kivymd.utils.fitimage import FitImage from kivy.utils import get_color_from_hex from kivymd.app import MDApp from kivymd.utils.fitimage import FitImage from kivymd.uix.tab import MDTabsBase from kivy.uix.video import Video from kivy.core.window import Window

Window.size = (420,860)

from homemapview import HomeMapView

from searchpopupmenu import SearchPopupMenu

from homegpshelper import HomeGpsHelper

from os import path import os import shutil from shutil import copyfile from sys import exit import glob from plyer import storagepath from kivy.uix.recycleview import RecycleView from kivy.uix.recycleview.views import RecycleDataViewBehavior

from threading import Thread

from kivy.utils import platform

from kivy.clock import Clock from functools import partial

Builder String

helper_string = '''

: import mtx kivy.metrics

: import Window kivy.core.window

ScreenManager:

Hello:

Imagepicscreen:
: : name: 'imagepick' MDBoxLayout: orientation: "vertical" md_bg_color: app.theme_cls.bg_light MDToolbar: id: toolbar title: "Images and videos " left_action_items: [["arrow-left" , lambda x: app.ca()]] #right_action_items: [["magnify"], ["dots-vertical"]] md_bg_color: app.theme_cls.bg_light specific_text_color: 0, 0, 0, 1 MDTabs: #id:tabs #on_tab_switch: app.on_tab_switch(*args) #lock_swiping:True Tab: #id: tabone text : "Images" ImageGallery: id: rv viewclass: 'Piccollect' #data:root.data_items RecycleGridLayout: orientation: 'lr-tb' cols: 4 spacing: '5dp' padding: ['5dp'] default_size: None, dp(rv.width/self.cols*.6) default_size_hint: 1, None size_hint_y: None height: self.minimum_height Tab: #id: tabone text : "Videos" : name: 'hello' BoxLayout: orientation:'vertical' MDToolbar: title: 'ONLINE 88' right_action_items: [['upload', lambda x: app.callback_1() ]] MDTabs: id:tabs on_tab_switch: app.on_tab_switch(*args) #lock_swiping:True Tab: id: tabone text : "map-marker-star" MDBottomNavigation: id : navpanel panel_color : 1,1,1,1 MDBottomNavigationItem: id : nearby text: "Near by" icon: "map-marker-circle" ScrollView: do_scroll: [ False , True] scroll_type: ['content'] #size_hint_y: None size_hint : (1, None) size:(Window.width, self.parent.height) #height: self.parent.height #effect_cls: 'ScrollEffect' MDGridLayout: id: post_lists cols : 1 size_hint_y: None size: self.minimum_size padding: ["0dp", "150dp","0dp", "15dp"] spacing: "50dp" MDBottomNavigationItem: name :'Favourite' text: "Favourite" icon: "heart-settings" MDLabel: text: "Favourite people and places " halign: 'center' Tab: text: "wan" MDLabel: id:"meme box" text : "meme box" halign : "center" ''' class Hello(Screen): pass class Imagepicscreen(Screen): pass # def build_data(self): # # x = 0 # # print("Entered into build data function by thread ") # for file in glob.glob("/storage/emulated/0/DCIM/Camera/*.*"): # print("Entered into the looping of images address " , str(x) , str(file)) # tmp_data = [] # # # tmp_data.append({'source': str(file)}) # #self.data_items.extend(tmp_data) # x += 1 # print("new image added") # # add this block of data to the data_items on the main thread # Clock.schedule_once(partial(self.load_data, tmp_data)) # # def load_data(self, tmp_data, dt): # self.data_items.extend(tmp_data) # print(len(self.data_items) , "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") # print(tmp_data , "======================================") class Tab(FloatLayout, MDTabsBase): pass class Piccollect(Image): source = StringProperty('') print("created=====================================================") def on_touch_down( self, touch ): if self.collide_point( *touch.pos ): print("selecting......" , self.source) class ImageGallery(RecycleView): def __init__(self , **kwargs): super(ImageGallery , self).__init__(**kwargs) #incase of android , images path is not loaded sm = ScreenManager() sm.add_widget(Hello(name = 'hello')) sm.add_widget(Imagepicscreen(name = 'imagepick')) class DemoApp(MDApp): def build(self): self.theme_cls.primary_palette = 'Indigo' self.theme_cls.accent_palette = 'Purple' self.per = False self.imagepicscreen = "not-ready" screen = Screen() self.help_str = Builder.load_string(helper_string) screen.add_widget(self.help_str) return screen def on_start(self): search_menu = None print("started app =================================" ) def ca(self): self.help_str.get_screen('hello').manager.current = 'hello' def callback_1(self): if self.imagepicscreen == "ready": self.help_str.get_screen('imagepick').manager.current = 'imagepick' else : print("screen is getting ready try later ") self.takingper()#take permissions for storage print("vertical dots clicked") print(Window.size , "llllllllllllllllllllllllllll") def takingper(self): # only Request permissions on Android , not loading images path if platform == 'android' : from android.permissions import Permission, request_permissions def call__back(permission, results): if all([res for res in results]): print("Got all permissions>>>>>>>>>>>>>>>>>>>>>>>") self.per = True self.loadaddress()#load images address else: print("Did not get all permissions") self.per = False request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE], call__back) else: self.per = True self.loadaddress() def loadaddress(self): if platform == 'android': print("loading....") self.help_str.get_screen('imagepick').ids.rv.data = [{'source': file} for file in glob.glob("/storage/emulated/0/DCIM/Camera/*.*")] print(self.help_str.get_screen('imagepick').ids.rv.data) print(len(self.help_str.get_screen('imagepick').ids.rv.data)) self.imagepicscreen = 'ready' # now screen is ready to display self.help_str.get_screen('imagepick').manager.current = 'imagepick' else: from plyer import storagepath dict_list = [] ll = [] for root, dirs, files in os.walk(str(storagepath.get_pictures_dir())): for file in files: if(file.endswith(".jpeg")) or (file.endswith(".png")) : ss = str(os.path.join(root,file)) ll.append(ss) li = ll #in case odf android ll = [ ] for image_path in li : #self.get_image_paths(): print(image_path) dict_list.append(dict({"source": image_path})) self.help_str.get_screen('imagepick').ids.rv.data = dict_list self.imagepicscreen = 'ready' self.help_str.get_screen('imagepick').manager.current = 'imagepick' def on_tab_switch(self,instance_tabs,instance_tab,instance_tab_label,tab_text): #instance_tab.ids.label.text = 'hello' print(instance_tabs , instance_tab , instance_tab_label , tab_text ) k = DemoApp() k.run() ### Versions * OS: ubuntu 20.0.04 * Python: 3.9.5 * Kivy: 2.0.0 * KivyMD: 0.104.1
HeaTTheatR commented 3 years ago

@purushottam858 Please edit your post: no need to attach the entire stacktrace (just Python output is enough), no need to attach the entire Bulldozer spec (just the items you use are enough).

HeaTTheatR commented 3 years ago

@purushottam858 Issues about KivyMD version 0.104.1 will be closed. Because we do not support this version. Use the main branch of the KivyMD library.

purushottam858 commented 3 years ago

I didnot understand . what do you mean by "main branch of the KivyMD library " , KivyMD version 0.104.1 is latest version , right ? @HeaTTheatR

HeaTTheatR commented 3 years ago

@HeaTTheatR No. Latest version - 0.104.2.dev