Skip to content

Instantly share code, notes, and snippets.

@cruor99
Created March 31, 2019 10:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cruor99/001a756777008c9d15e84b8222f7c67c to your computer and use it in GitHub Desktop.
Save cruor99/001a756777008c9d15e84b8222f7c67c to your computer and use it in GitHub Desktop.
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty, BooleanProperty, DictProperty, StringProperty
from kivy.clock import Clock
from kivy.utils import platform
from kivy.logger import Logger
# KivyMD stuff
from kivymd.snackbar import Snackbar
# Services
from services.login import LoginProvider
from services.jobs import JobsProvider
# Components
from components.loaders import MDDialogSpinner
# iOS imports
if platform == "ios":
from pyobjus import autoclass, objc_dict
if platform == "android":
from jnius import autoclass, cast
WebView = autoclass('android.webkit.WebView')
WebViewClient = autoclass('android.webkit.WebViewClient')
activity = autoclass('org.kivy.android.PythonActivity').mActivity
from android.runnable import run_on_ui_thread
@run_on_ui_thread
def create_webview(self, *args):
webview = WebView(activity)
webview.getSettings().setJavaScriptEnabled(True)
wvc = WebViewClient();
webview.setWebViewClient(wvc);
activity.setContentView(webview)
webview.loadUrl('http://www.google.com/')
class OrganizerRoot(BoxLayout):
login_provider = ObjectProperty(LoginProvider())
jobs_provider = JobsProvider()
logged_in = BooleanProperty(False)
onesignal_object = ObjectProperty()
Crashlytics = ObjectProperty()
Fabric = ObjectProperty()
user_details = DictProperty({})
auth_token = StringProperty("")
login_loader = ObjectProperty(MDDialogSpinner())
def __init__(self, **kwargs):
super(OrganizerRoot, self).__init__(**kwargs)
# List of screens for back button
self.screen_list = []
Clock.schedule_once(self.finish_init)
if platform == "ios":
Clock.schedule_once(self.finish_ios_init)
elif platform == "android":
Clock.schedule_once(self.finish_android_init)
def open_url(self, url):
Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
browserIntent = Intent()
browserIntent.setAction(Intent.ACTION_VIEW)
browserIntent.setData(Uri.parse(url))
currentActivity = cast('android.app.Activity', activity)
currentActivity.startActivity(browserIntent)
def finish_ios_init(self, *args):
self.Crashlytics = autoclass("Crashlytics")
self.Fabric = autoclass("Fabric").with_([self.Crashlytics])
self.onesignal_object = autoclass("OneSignal")
mock_launch_options = objc_dict({})
self.onesignal_object.initWithLaunchOptions_appId_(
mock_launch_options, "API KEY HERE")
def finish_android_init(self, *args):
#create_webview(self)
self.open_url("https://msale.com")
def create_webview(self):
create_webview(self)
def finish_init(self, *args):
from screens.login_screen import LoginScreen
self.ids.main_screen_manager.add_widget(
LoginScreen(name="login_screen", id="login_screen"))
from screens.dash_screen import DashScreen
self.ids.main_screen_manager.add_widget(
DashScreen(name="dash_screen", id="dash_screen"))
def next_page(self, neoscreen):
current_screen = self.ids.main_screen_manager.current
if current_screen == neoscreen:
Logger.debug(
"Duplicate screen attempted: {}".format(current_screen))
else:
Logger.debug("New screen: {}".format(neoscreen))
self.screen_list.append(current_screen)
self.ids.main_screen_manager.current = neoscreen
def login_user(self, username, password):
self.login_provider.login(
username=username,
password=password,
callbacks={
"success": self.login_success,
"failure": self.login_failed,
"error": self.login_failed,
})
self.login_loader.loading_text = "Logger deg inn..."
self.login_loader.open()
def login_success(self, req, res):
Logger.info("Login Success: {}".format(res))
Snackbar(text="Login Successful").show()
self.logged_in = True
if platform == "ios":
self.onesignal_object.setEmail_(res["user"]["email"])
elif platform == "android":
pass
self.auth_token = res["token"]
Logger.info("Auth token: {}".format(res["token"]))
Logger.info("Token type: {}".format(type(res["token"])))
self.user_details = res["user"]
self.next_page("dash_screen")
#self.jobs_provider.auth_token = res["token"]
self.login_loader.dismiss()
def login_failed(self, req, res):
Logger.info("Login failed: {}".format(res))
Logger.info("Login status: {}".format(req.resp_status))
Snackbar(
text="Login feilet: {}:{}".format(req.resp_status, res)).show()
self.login_loader.dismiss()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment