Created
March 31, 2019 10:18
-
-
Save cruor99/001a756777008c9d15e84b8222f7c67c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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