Commit 62f001e3 authored by David Burke's avatar David Burke

Autofill service now works. Basic login page kind of shows

parent c538a396
Pipeline #36971541 failed with stage
in 3 minutes and 25 seconds
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
xmlns:tools="http://schemas.android.com/tools"
android:versionCode="1"
android:versionName="1.0">
......@@ -20,7 +21,8 @@
<application
android:name="com.tns.NativeScriptApplication"
android:allowBackup="true"
android:allowBackup="false"
tools:replace="android:allowBackup"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme">
......@@ -39,5 +41,16 @@
</intent-filter>
</activity>
<activity android:name="com.tns.ErrorReportActivity"/>
<service
android:name="com.tns.passit.AutofillService"
android:label="Passit Autofill Service"
android:permission="android.permission.BIND_AUTOFILL_SERVICE">
<intent-filter>
<action android:name="android.service.autofill.AutofillService" />
</intent-filter>
<meta-data
android:name="android.autofill"
android:resource="@xml/service_configuration" />
</service>
</application>
</manifest>
......@@ -8,7 +8,7 @@
android {
defaultConfig {
generatedDensities = []
applicationId = "org.nativescript.ngsample"
applicationId = "com.burkesoftware.Passit"
//override supported platforms
// ndk {
......
<autofill-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.burkesoftware.Passit.com.tns.NativeScriptActivity" />
\ No newline at end of file
/// <reference path="./node_modules/tns-platform-declarations/android-28.d.ts" />
......@@ -8419,7 +8419,8 @@
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true
"bundled": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
......@@ -8437,11 +8438,13 @@
},
"balanced-match": {
"version": "1.0.0",
"bundled": true
"bundled": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -8454,15 +8457,18 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true
"bundled": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true
"bundled": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true
"bundled": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -8565,7 +8571,8 @@
},
"inherits": {
"version": "2.0.3",
"bundled": true
"bundled": true,
"optional": true
},
"ini": {
"version": "1.3.5",
......@@ -8575,6 +8582,7 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -8587,17 +8595,20 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true
"bundled": true,
"optional": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
......@@ -8614,6 +8625,7 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -8686,7 +8698,8 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true
"bundled": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
......@@ -8696,6 +8709,7 @@
"once": {
"version": "1.4.0",
"bundled": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -8771,7 +8785,8 @@
},
"safe-buffer": {
"version": "5.1.1",
"bundled": true
"bundled": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -8801,6 +8816,7 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -8818,6 +8834,7 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -8856,11 +8873,13 @@
},
"wrappy": {
"version": "1.0.2",
"bundled": true
"bundled": true,
"optional": true
},
"yallist": {
"version": "3.0.2",
"bundled": true
"bundled": true,
"optional": true
}
}
},
......@@ -12661,6 +12680,19 @@
"resolved": "https://registry.npmjs.org/nativescript-intl/-/nativescript-intl-3.0.0.tgz",
"integrity": "sha1-gu6b59N3Fys8QpVzRyMDdijhhqc="
},
"nativescript-libsodium": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/nativescript-libsodium/-/nativescript-libsodium-1.3.3.tgz",
"integrity": "sha512-GuIEU6LPm+lku9d/FFZz8cbf1E+RBFkr4Lt5MprK0JwFmLxEywfiCtitOGAsrQ+xHsiNRGytV4vDFp3twHoL1A==",
"requires": {
"text-encoding": "^0.6.4"
}
},
"nativescript-localstorage": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nativescript-localstorage/-/nativescript-localstorage-2.0.0.tgz",
"integrity": "sha512-5iwwCrXp4CugQlRV6Ic4upUy/MsBw4P9lg2mrnPoaDWwrUu4yOaJzFiUZVmFPJXTAF8KiJPpWXx287ImbkDjsg=="
},
"nativescript-theme-core": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/nativescript-theme-core/-/nativescript-theme-core-1.0.4.tgz",
......@@ -17990,6 +18022,11 @@
}
}
},
"text-encoding": {
"version": "0.6.4",
"resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
"integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk="
},
"text-encoding-utf-8": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz",
......@@ -18100,6 +18137,12 @@
"resolved": "https://registry.npmjs.org/tns-core-modules-widgets/-/tns-core-modules-widgets-5.0.1.tgz",
"integrity": "sha512-zDml+PISblTkAQ+Xd4JcMHl/o5dpAn0B+R2fLtxWjNIhkNzNfz+FmfMtH7Js2wnwtLp+kC2ZNOQRVAzOBquxAQ=="
},
"tns-platform-declarations": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/tns-platform-declarations/-/tns-platform-declarations-5.0.2.tgz",
"integrity": "sha512-CGRHyibgjd1MWPfUVD0f2uIGgj3r9g8Cp9q4fi1h82adgrZWo3vVcWGv7pkdmiyzlJ6Y2ukwSyi6VxSMcAZPkQ==",
"dev": true
},
"to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
......
......@@ -30,10 +30,6 @@
"url": "git@gitlab.com:burke-software/passit-frontend.git"
},
"dependencies": {
"nativescript-angular": "~7.0.0",
"nativescript-theme-core": "~1.0.4",
"reflect-metadata": "~0.1.8",
"tns-core-modules": "~5.0.0",
"@angular/animations": "^7.0.4",
"@angular/common": "^7.0.4",
"@angular/compiler": "^7.0.4",
......@@ -67,6 +63,10 @@
"jspdf": "^1.4.1",
"jsqr": "^1.1.1",
"karma-webdriver-launcher": "^1.0.5",
"nativescript-angular": "~7.0.0",
"nativescript-libsodium": "^1.3.3",
"nativescript-localstorage": "^2.0.0",
"nativescript-theme-core": "~1.0.4",
"ng-inline-svg": "~8.1.0",
"ng-select": "~1.0.1",
"ngrx-forms": "^3.1.0",
......@@ -78,21 +78,22 @@
"passit-sdk-js": "2.3.2",
"qrcode": "^1.3.2",
"raven-js": "^3.27.0",
"reflect-metadata": "~0.1.8",
"rxjs": "^6.3.3",
"rxjs-tslint": "^0.1.5",
"stream": "^0.0.2",
"susy": "^2.2.12",
"tns-core-modules": "~5.0.0",
"url-parse": "^1.4.4",
"webextension-polyfill": "^0.3.1",
"zone.js": "~0.8.18"
},
"devDependencies": {
"nativescript-dev-webpack": "^0.17.0",
"@nativescript/schematics": "^0.4.0",
"@angular-devkit/build-angular": "~0.10.0",
"@angular/cli": "^7.0.6",
"@angular/compiler-cli": "^7.0.4",
"@babel/core": "^7.1.0",
"@nativescript/schematics": "^0.4.0",
"@storybook/addon-actions": "^4.0.7",
"@storybook/addon-knobs": "^4.0.7",
"@storybook/addon-links": "^4.0.7",
......@@ -112,8 +113,10 @@
"karma-coverage-istanbul-reporter": "~2.0.4",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "~0.2.2",
"nativescript-dev-webpack": "^0.17.0",
"prettier": "^1.10.2",
"protractor": "~5.4.0",
"tns-platform-declarations": "^5.0.2",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "~3.1.6",
......@@ -122,7 +125,7 @@
"webpack-bundle-analyzer": "^3.0.2"
},
"nativescript": {
"id": "org.nativescript.ngsample",
"id": "com.burkesoftware.Passit",
"tns-android": {
"version": "5.0.0"
}
......
......@@ -10,3 +10,186 @@ of writing your own CSS rules. For a full list of class names in the theme
refer to http://docs.nativescript.org/ui/theme.
*/
@import '~nativescript-theme-core/css/core.light.css';
.submit-button {
background-color: #6cc780;
box-shadow: 0 06px 3px 0 rgba(0, 0, 0 0.2), inset 0 0 0 0 #47b960;
color: white;
}
ActionBar,
.action-bar {
background-color: #0092a8;
box-shadow: 0 0 4px 1px rgba(#413741, 0.3);
color: white;
}
.page {
align-items: center;
flex-direction: column;
}
.form {
margin-left: 30;
margin-right: 30;
flex-grow: 2;
vertical-align: middle;
}
#searchBar {
border-bottom-width: 2;
border-color: white;
padding-bottom: 5px;
}
.search {
margin-bottom: 40px;
}
.saved-confirm {
font-weight: bold;
color: #47b960;
}
.detailPage {
margin-top: 80px;
}
.formLabel {
padding-bottom: 5px;
}
.url-button {
background-image: url("res://open_url");
background-repeat: no-repeat;
}
.copy-button {
background-image: url("res://copy");
background-repeat: no-repeat;
}
.copied-button {
background-image: url("res://check");
background-repeat: no-repeat;
}
.dice {
background-color: transparent;
border-color: transparent;
border-width: 1;
margin-top: -16;
padding: 0;
}
.eye-button {
background-image: url("res://eye");
background-repeat: no-repeat;
}
.eye-slash-button {
background-image: url("res://eye_slash");
background-repeat: no-repeat;
}
.icons {
margin-top: -10;
}
.detailInput {
margin-top: -50px;
margin-bottom: -50px;
background-color: white;
}
.urlInput {
width: 78%;
}
.landscape .urlInput {
width: 84%;
}
.userInputNew {
width: 100%;
}
.newPasswordInput {
width: 50%;
}
.tabletUserInput, {
width: 74%;
}
.userInput {
width: 74%;
}
.landscape .userInput,
.landscape .tabletUserInput {
width: 82%;
}
.passwordInput {
width: 59%;
}
.tabletPasswordInput {
width: 59%;
}
.landscape .passwordInput,
.landscape .tabletPasswordInput {
width: 70%;
}
#searchBar {
border-bottom-width: 2;
border-color: white;
padding-bottom: 5px;
}
.search {
margin-bottom: 40px;
}
.fab-button {
height: 70;
width: 70;
margin: 15;
background-color: #0092a8;
horizontal-align: right;
vertical-align: bottom;
}
.text-label {
color: #413741;
font-size: 14;
letter-spacing: 0.04;
line-height: 1.333;
}
.text-label--error {
color: #B92855;
}
.text-label--light {
color: #6F989E;
}
.app-switch {
width: 100;
background-color: #6F989E;
color: #6F989E;
}
.app-switch[checked=true] {
width: 100;
background-color: #0092A8;
color: #0092A8;
}
import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core";
import { NativeScriptCommonModule } from "nativescript-angular/common";
import { NativeScriptFormsModule } from "nativescript-angular/forms";
import { NativeScriptHttpModule } from "nativescript-angular/http";
import { StoreModule } from "@ngrx/store";
import { NgrxFormsModule } from "ngrx-forms";
import { LoginContainer } from "./login";
import { LoginComponent } from "./login/login.component";
import { reducers } from "./account.reducer";
import { SharedModule } from "../shared/shared.module";
import { DirectivesModule } from "../directives";
export const COMPONENTS = [LoginContainer, LoginComponent];
export const SERVICES = [];
@NgModule({
imports: [
DirectivesModule,
NativeScriptCommonModule,
NativeScriptFormsModule,
NativeScriptHttpModule,
NgrxFormsModule,
SharedModule,
StoreModule.forFeature("account", reducers)
],
declarations: COMPONENTS,
exports: COMPONENTS,
providers: [SERVICES],
schemas: [NO_ERRORS_SCHEMA]
})
export class AccountModule {}
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { RouterModule } from "@angular/router";
import { EffectsModule } from "@ngrx/effects";
import { StoreModule } from "@ngrx/store";
import { InlineSVGModule } from "ng-inline-svg";
import { NgrxFormsModule } from "ngrx-forms";
import { AccountComponent } from "./account.component";
import { LoginEffects } from "./account.effects";
import { reducers } from "./account.reducer";
import {
ChangePasswordComponent,
ChangePasswordContainer
} from "./change-password";
import { ConfirmEmailComponent, ConfirmEmailContainer } from "./confirm-email";
import { ConfirmEmailEffects } from "./confirm-email/confirm-email.effects";
import { DeleteComponent, DeleteContainer } from "./delete";
import { LoginContainer } from "./login";
import { RegisterEffects } from "./register/register.effects";
import { UserService } from "./user";
import { ProgressIndicatorModule } from "../progress-indicator";
import { LoginComponent } from "./login/login.component";
import { RegisterComponent } from "./register/register.component";
import { RegisterContainer } from "./register/register.container";
import { SharedModule } from "../shared";
import { LoginFormEffects } from "./login/login.effects";
import { ConfirmEmailGuard } from "./confirm-email/confirm-email.guard";
import { ErrorReportingComponent } from "./error-reporting/error-reporting.component";
import { ErrorReportingContainer } from "./error-reporting/error-reporting.container";
import { ErrorReportingEffects } from "./error-reporting/error-reporting.effects";
import { BackupCodeComponent } from "./backup-code/backup-code.component";
import { ResetPasswordComponent } from "./reset-password/reset-password.component";
import { MarketingFrameComponent } from "./marketing-frame/marketing-frame.component";
import { ResetPasswordContainer } from "./reset-password/reset-password.container";
import { ResetPasswordEffects } from "./reset-password/reset-password.effects";
import { ResetPasswordVerifyComponent } from "./reset-password/reset-password-verify/reset-password-verify.component";
import { ResetPasswordVerifyContainer } from "./reset-password/reset-password-verify/reset-password-verify.container";
import { ResetPasswordVerifyEffects } from "./reset-password/reset-password-verify/reset-password-verify.effects";
import { PasswordInputComponent } from "./change-password/password-input/password-input.component";
import { ManageBackupCodeComponent } from "./manage-backup-code/manage-backup-code.component";
import { ManageBackupCodeContainer } from "./manage-backup-code/manage-backup-code.container";
import { ManageBackupCodeEffects } from "./manage-backup-code/manage-backup-code.effects";
import { BackupCodePdfService } from "./backup-code-pdf.service";
import { SetPasswordComponent } from "./reset-password/set-password/set-password.component";
import { SetPasswordContainer } from "./reset-password/set-password/set-password.container";
import { SetPasswordEffects } from "./reset-password/set-password/set-password.effects";
import { ServerSelectComponent } from "./shared/server-select.component";
export const COMPONENTS = [
AccountComponent,
ChangePasswordComponent,
ChangePasswordContainer,
PasswordInputComponent,
ConfirmEmailComponent,
ConfirmEmailContainer,
DeleteContainer,
DeleteComponent,
ErrorReportingComponent,
ErrorReportingContainer,
LoginComponent,
LoginContainer,
RegisterComponent,
RegisterContainer,
BackupCodeComponent,
ResetPasswordComponent,
ResetPasswordContainer,
ResetPasswordVerifyComponent,
ResetPasswordVerifyContainer,
SetPasswordComponent,
MarketingFrameComponent,
SetPasswordContainer,
ManageBackupCodeComponent,
ManageBackupCodeContainer,
MarketingFrameComponent,
ServerSelectComponent
];
export const SERVICES = [UserService, ConfirmEmailGuard, BackupCodePdfService];
@NgModule({
imports: [
CommonModule,
FormsModule,
InlineSVGModule,
SharedModule,
RouterModule,
ReactiveFormsModule,
NgrxFormsModule,
ProgressIndicatorModule,
StoreModule.forFeature("account", reducers),
EffectsModule.forFeature([
LoginEffects,
LoginFormEffects,
RegisterEffects,
ConfirmEmailEffects,
ErrorReportingEffects,
ResetPasswordEffects,
ResetPasswordVerifyEffects,
SetPasswordEffects,
ManageBackupCodeEffects
])
],
declarations: COMPONENTS,
exports: COMPONENTS,
providers: [SERVICES]
})
export class AccountModule {}
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { RouterModule } from "@angular/router";
import { EffectsModule } from "@ngrx/effects";
import { StoreModule } from "@ngrx/store";
import { InlineSVGModule } from "ng-inline-svg";
import { NgrxFormsModule } from "ngrx-forms";
import { AccountComponent } from "./account.component";
import { LoginEffects } from "./account.effects";
import { reducers } from "./account.reducer";
import {
ChangePasswordComponent,
ChangePasswordContainer
} from "./change-password";
import { ConfirmEmailComponent, ConfirmEmailContainer } from "./confirm-email";
import { ConfirmEmailEffects } from "./confirm-email/confirm-email.effects";
import { DeleteComponent, DeleteContainer } from "./delete";
import { LoginContainer } from "./login";
import { RegisterEffects } from "./register/register.effects";
import { UserService } from "./user";
import { ProgressIndicatorModule } from "../progress-indicator";
import { LoginComponent } from "./login/login.component";
import { RegisterComponent } from "./register/register.component";
import { RegisterContainer } from "./register/register.container";
import { SharedModule } from "../shared";
import { LoginFormEffects } from "./login/login.effects";
import { ConfirmEmailGuard } from "./confirm-email/confirm-email.guard";
import { ErrorReportingComponent } from "./error-reporting/error-reporting.component";
import { ErrorReportingContainer } from "./error-reporting/error-reporting.container";
import { ErrorReportingEffects } from "./error-reporting/error-reporting.effects";
import { BackupCodeComponent } from "./backup-code/backup-code.component";
import { ResetPasswordComponent } from "./reset-password/reset-password.component";
import { MarketingFrameComponent } from "./marketing-frame/marketing-frame.component";
import { ResetPasswordContainer } from "./reset-password/reset-password.container";
import { ResetPasswordEffects } from "./reset-password/reset-password.effects";
import { ResetPasswordVerifyComponent } from "./reset-password/reset-password-verify/reset-password-verify.component";
import { ResetPasswordVerifyContainer } from "./reset-password/reset-password-verify/reset-password-verify.container";
import { ResetPasswordVerifyEffects } from "./reset-password/reset-password-verify/reset-password-verify.effects";
import { PasswordInputComponent } from "./change-password/password-input/password-input.component";
import { ManageBackupCodeComponent } from "./manage-backup-code/manage-backup-code.component";
import { ManageBackupCodeContainer } from "./manage-backup-code/manage-backup-code.container";
import { ManageBackupCodeEffects } from "./manage-backup-code/manage-backup-code.effects";
import { BackupCodePdfService } from "./backup-code-pdf.service";
import { SetPasswordComponent } from "./reset-password/set-password/set-password.component";
import { SetPasswordContainer } from "./reset-password/set-password/set-password.container";
import { SetPasswordEffects } from "./reset-password/set-password/set-password.effects";
import { ServerSelectComponent } from "./shared/server-select.component";
export const COMPONENTS = [
AccountComponent,
ChangePasswordComponent,
ChangePasswordContainer,
PasswordInputComponent,
ConfirmEmailComponent,
ConfirmEmailContainer,
DeleteContainer,
DeleteComponent,
ErrorReportingComponent,
ErrorReportingContainer,
LoginComponent,
LoginContainer,