p4a-demo/homepage.py


Home Back

import sys,time
from plyer import storagepath, vibrator,notification,flash,camera,gps,filechooser

from bottle import redirect


pos='No position yet'
filepath="no path"

try:
    from android.permissions import request_permissions,check_permission, Permission
except ModuleNotFoundError:
        print("We are not in adroid device")


myPermission=["android.permission.WRITE_EXTERNAL_STORAGE",
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.ACCESS_FINE_LOCATION",
            "android.permission.INTERNET",
            "android.permission.ACCESS_BACKGROUND_LOCATION",
            "android.permission.VIBRATE",
            "android.permission.POST_NOTIFICATIONS",
            "android.permission.CAMERA",
            "android.permission.FLASHLIGHT",
            "android.hardware.camera.any",
            "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"]



def header():
    return '''<!DOCTYPE html >
<html  lang="en">

<head>
    <title>P4A Demo</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">


    <script src="/html/js/jquery.min.js"></script>
    <link rel="stylesheet" href="/html/css/bootstrap.min.css">
    <link rel="stylesheet" href="/html/css/mystyle.css">
    <script src="/html/js/bootstrap.bundle.min.js"></script>
    <script src="/html/js/popper.min.js"></script>
    <script src="/html/js/myscript.js"></script>
</head>

<body>
    '''


def menu():
    return '''<nav class="navbar navbar-expand-sm navbar-dark bg-dark" aria-label="P4A Demo">
    <div class="container-fluid">
      <a class="navbar-brand" href="#">P4A Demo</a>
      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample03" aria-controls="navbarsExample03" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="collapse navbar-collapse" id="navbarsExample03">
        <ul class="navbar-nav me-auto mb-2 mb-sm-0">
          <li class="nav-item"><a class="nav-link active" aria-current="page" href="/">Home</a></li>
          <li class="nav-item"><a class="nav-link active" href="/quit">Quit</a></li>
        </ul>
        </div>
    </div>
  </nav>
    '''

def footer():
    return '''</body></html>
    
    '''

def quitApp():
    sys.exit(0) #not close app webview


def page():
    
    
    home =  storagepath.get_home_dir()
    application_dir=storagepath.get_application_dir()
    primary_ext_storage = storagepath.get_external_storage_dir()
    try:
        secondary_ext_storage = storagepath.get_sdcard_dir()
    except :
        secondary_ext_storage =''
    
    
    
    return '''
    <div class="container-fluid">
    <h1>Home Page</h1>
    <p>This is a demo for P4a Project</p>
    
    <pre>
    home={home}
    application_dir={application_dir} 
    primary_ext_storage ={primary_ext_storage}
    secondary_ext_storage ={secondary_ext_storage}
    </pre>
    <pre id="out">Ready.</pre>
    <div id="srv"></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/vibrate')">Vibrate</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/notify')">Notify</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/toast')">Toast</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/flashon')">Flash on</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/flashoff')">Flash off</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/position')">Get Position</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/stopposition')">Turn off position</button></div>
    <div><button class="btn btn-success" onclick="$('#out').load('/selectfile')">Select a file</button></div>
    </div>
    '''.format(home=home,primary_ext_storage =primary_ext_storage,
                application_dir=application_dir,
                secondary_ext_storage =secondary_ext_storage)




def reqPermissions():
    try:
        request_permissions(myPermission,checkPerms)
    except NameError:
        print("request_permissions is not defined")    
    


def checkPerms(perm,g):
    permStatus=''
    for i  in range(0,len(myPermission)):
        try:
            if not check_permission(myPermission[i]):
                permStatus=permStatus+"<li>Permission not granted:  "+myPermission[i]+"</li>"
                print(permStatus)
        except:
            print("Problem on check permissions")
            return ''
            
    return '<div class="container-fluid" ><ul>%s</ul></div>' % permStatus

def home():
    reqPermissions()
    yield header() 
    yield menu()
    yield page()
    yield footer()
    
    

def vibrate():
    
    try:
        vibrator.vibrate(1)
    except NotImplementedError:
        pass
    except ModuleNotFoundError:
        pass    
    return 'I should vibrate'    

def notify():
    title = 'Python for Android Demo'
    message = 'This is an example.'
    notification.notify(title=title, message=message)

def toast():
    title = 'Python for Android Demo'
    message = 'This is an example.'
    notification.notify(title=title, message=message,toast=True)    

def flashon():
    flash.release()
    flash.on()
    

def flashoff():
    flash.off()    
    flash.release()

def getPositionCallback(**kwargs):
    global pos
    pos='lat: {lat}, lon: {lon}'.format(**kwargs)
    print (pos)
    
    
    

def StopPosition():
    try:
        gps.stop()
        
    except NotImplementedError:
        pass
    
    return "<script>loopShowPosition=false;    showPosition();</script>"

            
def StartPosition():
    try:
        gps.configure(on_location=getPositionCallback)
        gps.start()
    except NotImplementedError:
        pass

    return "<script>loopShowPosition=true;    showPosition();    </script>"

def showpos():
    global pos
    return pos     

def handleFile(s):
    global filepath
    filepath="File selected: " + s[0]
    print(filepath)


def getfile(): #bleah!
    global filepath
    return filepath
    
def selectfile():
    
    filechooser.open_file(on_selection=handleFile)
    redirect("/getfile")
    

Powered by Code, a simple repository browser by Fabio Di Matteo