Browse Source

First commit

master
Skylar Ittner 6 months ago
commit
4d60b848fa
  1. 8
      .gitignore
  2. 357
      LICENSE.md
  3. 90
      config.xml
  4. 6379
      license-credits.md
  5. 269
      nbproject/build.xml
  6. 3
      nbproject/configs/android.properties
  7. 3
      nbproject/configs/android_1.properties
  8. 5
      nbproject/configs/ios.properties
  9. 5
      nbproject/configs/ios_1.properties
  10. 9
      nbproject/license-mpl.txt
  11. 48
      nbproject/plugins.properties
  12. 9
      nbproject/project.properties
  13. 9
      nbproject/project.xml
  14. 1913
      package-lock.json
  15. 91
      package.json
  16. 10
      res/android/drawable/ic_launcher_background.xml
  17. 12
      res/android/drawable/ic_launcher_foreground.xml
  18. 5
      res/android/mipmap-anydpi-v26/ic_launcher.xml
  19. 5
      res/android/mipmap-anydpi-v26/ic_launcher_round.xml
  20. BIN
      res/android/mipmap-hdpi/ic_launcher.png
  21. BIN
      res/android/mipmap-hdpi/ic_launcher_round.png
  22. BIN
      res/android/mipmap-mdpi/ic_launcher.png
  23. BIN
      res/android/mipmap-mdpi/ic_launcher_round.png
  24. BIN
      res/android/mipmap-xhdpi/ic_launcher.png
  25. BIN
      res/android/mipmap-xhdpi/ic_launcher_round.png
  26. BIN
      res/android/mipmap-xxhdpi/ic_launcher.png
  27. BIN
      res/android/mipmap-xxhdpi/ic_launcher_round.png
  28. BIN
      res/android/mipmap-xxxhdpi/ic_launcher.png
  29. BIN
      res/android/mipmap-xxxhdpi/ic_launcher_round.png
  30. 214
      res/ios-splash-dark.svg
  31. 214
      res/ios-splash.svg
  32. BIN
      res/ios/icon/100.png
  33. BIN
      res/ios/icon/1024.png
  34. BIN
      res/ios/icon/114.png
  35. BIN
      res/ios/icon/120.png
  36. BIN
      res/ios/icon/128.png
  37. BIN
      res/ios/icon/144.png
  38. BIN
      res/ios/icon/152.png
  39. BIN
      res/ios/icon/16.png
  40. BIN
      res/ios/icon/167.png
  41. BIN
      res/ios/icon/172.png
  42. BIN
      res/ios/icon/180.png
  43. BIN
      res/ios/icon/196.png
  44. BIN
      res/ios/icon/20.png
  45. BIN
      res/ios/icon/216.png
  46. BIN
      res/ios/icon/256.png
  47. BIN
      res/ios/icon/29.png
  48. BIN
      res/ios/icon/32.png
  49. BIN
      res/ios/icon/40.png
  50. BIN
      res/ios/icon/48.png
  51. BIN
      res/ios/icon/50.png
  52. BIN
      res/ios/icon/512.png
  53. BIN
      res/ios/icon/55.png
  54. BIN
      res/ios/icon/57.png
  55. BIN
      res/ios/icon/58.png
  56. BIN
      res/ios/icon/60.png
  57. BIN
      res/ios/icon/64.png
  58. BIN
      res/ios/icon/72.png
  59. BIN
      res/ios/icon/76.png
  60. BIN
      res/ios/icon/80.png
  61. BIN
      res/ios/icon/87.png
  62. BIN
      res/ios/icon/88.png
  63. BIN
      res/ios/splash/Default@2x~universal~anyany.png
  64. BIN
      res/ios/splash/Default@2x~universal~anyany~dark.png
  65. 194
      res/logo-background.svg
  66. 189
      res/logo-foreground.svg
  67. BIN
      res/logo-ios.png
  68. 212
      res/logo-ios.svg
  69. BIN
      res/logo-sm.png
  70. 151
      res/logo-sm.svg
  71. BIN
      res/logo.png
  72. 11
      scripts/generate_credits.sh
  73. 5
      scripts/npm_prepare.sh
  74. 53
      scripts/remove_bloat.sh
  75. 8
      scripts/www_npm_install.sh
  76. 165
      src/android/BackgroundFetchHeadlessTask.java
  77. 178
      www/assets/css/app.css
  78. 68
      www/assets/css/tablet.css
  79. 60
      www/assets/fonts/roboto/Roboto.css
  80. BIN
      www/assets/fonts/roboto/Roboto_400.woff
  81. BIN
      www/assets/fonts/roboto/Roboto_400.woff2
  82. BIN
      www/assets/fonts/roboto/Roboto_400i.woff
  83. BIN
      www/assets/fonts/roboto/Roboto_400i.woff2
  84. BIN
      www/assets/fonts/roboto/Roboto_500.woff
  85. BIN
      www/assets/fonts/roboto/Roboto_500.woff2
  86. BIN
      www/assets/fonts/roboto/Roboto_500i.woff
  87. BIN
      www/assets/fonts/roboto/Roboto_500i.woff2
  88. BIN
      www/assets/fonts/roboto/Roboto_700.woff
  89. BIN
      www/assets/fonts/roboto/Roboto_700.woff2
  90. BIN
      www/assets/fonts/roboto/Roboto_700i.woff
  91. BIN
      www/assets/fonts/roboto/Roboto_700i.woff2
  92. 31
      www/assets/iframeloading.html
  93. BIN
      www/assets/images/icons/128.png
  94. BIN
      www/assets/images/icons/144.png
  95. BIN
      www/assets/images/icons/152.png
  96. BIN
      www/assets/images/icons/192.png
  97. BIN
      www/assets/images/icons/256.png
  98. BIN
      www/assets/images/icons/32.png
  99. BIN
      www/assets/images/icons/48.png
  100. BIN
      www/assets/images/icons/512.png

8
.gitignore

@ -0,0 +1,8 @@
node_modules/
www/node_modules/
platforms
nbproject/private
plugins
*yarn-error.log
*npm-debug.log
*.directory

357
LICENSE.md

@ -0,0 +1,357 @@
Mozilla Public License Version 2.0
==================================
### 1. Definitions
**1.1. “Contributor”**
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
**1.2. “Contributor Version”**
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
**1.3. “Contribution”**
means Covered Software of a particular Contributor.
**1.4. “Covered Software”**
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
**1.5. “Incompatible With Secondary Licenses”**
means
* **(a)** that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
* **(b)** that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
**1.6. “Executable Form”**
means any form of the work other than Source Code Form.
**1.7. “Larger Work”**
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
**1.8. “License”**
means this document.
**1.9. “Licensable”**
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
**1.10. “Modifications”**
means any of the following:
* **(a)** any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
* **(b)** any new file in Source Code Form that contains any Covered
Software.
**1.11. “Patent Claims” of a Contributor**
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
**1.12. “Secondary License”**
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
**1.13. “Source Code Form”**
means the form of the work preferred for making modifications.
**1.14. “You” (or “Your”)**
means an individual or a legal entity exercising rights under this
License. For legal entities, “You” includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, “control” means **(a)** the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or **(b)** ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
### 2. License Grants and Conditions
#### 2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
* **(a)** under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
* **(b)** under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
#### 2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
#### 2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
* **(a)** for any code that a Contributor has removed from Covered Software;
or
* **(b)** for infringements caused by: **(i)** Your and any other third party's
modifications of Covered Software, or **(ii)** the combination of its
Contributions with other software (except as part of its Contributor
Version); or
* **(c)** under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
#### 2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
#### 2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
#### 2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
#### 2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
### 3. Responsibilities
#### 3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
#### 3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
* **(a)** such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
* **(b)** You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
#### 3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
#### 3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
#### 3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
### 4. Inability to Comply Due to Statute or Regulation
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: **(a)** comply with
the terms of this License to the maximum extent possible; and **(b)**
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
### 5. Termination
**5.1.** The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated **(a)** provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and **(b)** on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
**5.2.** If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
### 6. Disclaimer of Warranty
> Covered Software is provided under this License on an “as is”
> basis, without warranty of any kind, either expressed, implied, or
> statutory, including, without limitation, warranties that the
> Covered Software is free of defects, merchantable, fit for a
> particular purpose or non-infringing. The entire risk as to the
> quality and performance of the Covered Software is with You.
> Should any Covered Software prove defective in any respect, You
> (not any Contributor) assume the cost of any necessary servicing,
> repair, or correction. This disclaimer of warranty constitutes an
> essential part of this License. No use of any Covered Software is
> authorized under this License except under this disclaimer.
### 7. Limitation of Liability
> Under no circumstances and under no legal theory, whether tort
> (including negligence), contract, or otherwise, shall any
> Contributor, or anyone who distributes Covered Software as
> permitted above, be liable to You for any direct, indirect,
> special, incidental, or consequential damages of any character
> including, without limitation, damages for lost profits, loss of
> goodwill, work stoppage, computer failure or malfunction, or any
> and all other commercial damages or losses, even if such party
> shall have been informed of the possibility of such damages. This
> limitation of liability shall not apply to liability for death or
> personal injury resulting from such party's negligence to the
> extent applicable law prohibits such limitation. Some
> jurisdictions do not allow the exclusion or limitation of
> incidental or consequential damages, so this exclusion and
> limitation may not apply to You.
### 8. Litigation
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
### 9. Miscellaneous
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
### 10. Versions of the License
#### 10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
#### 10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
#### 10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
## Exhibit A - Source Code Form License Notice
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
## Exhibit B - “Incompatible With Secondary Licenses” Notice
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

90
config.xml

@ -0,0 +1,90 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.fixphrase.app" version="1.5.2" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name short="FixPhrase">FixPhrase</name>
<description>
</description>
<author email="dev@netsyms.com" href="https://netsyms.com">
Netsyms Technologies
</author>
<content src="index.html" />
<access origin="*" />
<allow-navigation href="https://fixphrase.com/*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<access launch-external="yes" origin="geo:*" />
<icon src="res/logo.png" />
<preference name="HeaderColor" value="#82b1ff" />
<preference name="StatusBarBackgroundColor" value="#d0f2fc" />
<preference name="StatusBarStyle" value="default" />
<platform name="android">
<allow-intent href="market:*" />
<preference name="AndroidLaunchMode" value="singleTask" />
<resource-file src="/res/android/drawable/ic_launcher_background.xml" target="/app/src/main/res/drawable/ic_launcher_background.xml" />
<resource-file src="/res/android/drawable/ic_launcher_foreground.xml" target="/app/src/main/res/drawable/ic_launcher_foreground.xml" />
<resource-file src="res/android/mipmap-anydpi-v26/ic_launcher.xml" target="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="mdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-mdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="hdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-hdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="xhdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-xhdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="xxhdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-xxhdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="xxxhdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-xxxhdpi/ic_launcher.png" />
</platform>
<platform name="ios">
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="DisallowOverscroll" value="true" />
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />
<preference name="PreferredContentMode" value="mobile" />
<edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
<string>Your location is used to find your FixPhrase and automatically adjust the map. It does not leave your device.</string>
</edit-config>
<config-file target="*-Debug.plist" parent="com.apple.developer.associated-domains">
<array>
<string>applinks:fixphrase.com</string>
</array>
</config-file>
<config-file target="*-Release.plist" parent="com.apple.developer.associated-domains">
<array>
<string>applinks:fixphrase.com</string>
</array>
</config-file>
<splash src="res/ios/splash/Default@2x~universal~anyany.png" />
<splash src="res/ios/splash/Default@2x~universal~anyany~dark.png" />
<icon height="100" src="res/ios/icon/100.png" width="100" />
<icon height="1024" src="res/ios/icon/1024.png" width="1024" />
<icon height="114" src="res/ios/icon/114.png" width="114" />
<icon height="120" src="res/ios/icon/120.png" width="120" />
<icon height="128" src="res/ios/icon/128.png" width="128" />
<icon height="144" src="res/ios/icon/144.png" width="144" />
<icon height="152" src="res/ios/icon/152.png" width="152" />
<icon height="16" src="res/ios/icon/16.png" width="16" />
<icon height="167" src="res/ios/icon/167.png" width="167" />
<icon height="172" src="res/ios/icon/172.png" width="172" />
<icon height="180" src="res/ios/icon/180.png" width="180" />
<icon height="196" src="res/ios/icon/196.png" width="196" />
<icon height="20" src="res/ios/icon/20.png" width="20" />
<icon height="256" src="res/ios/icon/256.png" width="256" />
<icon height="29" src="res/ios/icon/29.png" width="29" />
<icon height="32" src="res/ios/icon/32.png" width="32" />
<icon height="40" src="res/ios/icon/40.png" width="40" />
<icon height="48" src="res/ios/icon/48.png" width="48" />
<icon height="50" src="res/ios/icon/50.png" width="50" />
<icon height="512" src="res/ios/icon/512.png" width="512" />
<icon height="55" src="res/ios/icon/55.png" width="55" />
<icon height="57" src="res/ios/icon/57.png" width="57" />
<icon height="58" src="res/ios/icon/58.png" width="58" />
<icon height="60" src="res/ios/icon/60.png" width="60" />
<icon height="64" src="res/ios/icon/64.png" width="64" />
<icon height="72" src="res/ios/icon/72.png" width="72" />
<icon height="76" src="res/ios/icon/76.png" width="76" />
<icon height="80" src="res/ios/icon/80.png" width="80" />
<icon height="87" src="res/ios/icon/87.png" width="87" />
<icon height="88" src="res/ios/icon/88.png" width="88" />
</platform>
<hook src="scripts/npm_prepare.sh" type="before_prepare" />
</widget>

6379
license-credits.md
File diff suppressed because it is too large
View File

269
nbproject/build.xml

@ -0,0 +1,269 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!--
Generated file; DO NOT EDIT.
-->
<project name="PackageNotice" basedir="..">
<property file="nbproject/configs/${config}.properties" />
<scriptdef name="checkVersion" language="javascript">
<attribute name="first" />
<attribute name="property" />
<![CDATA[
var first = attributes.get("first");
if (first >= "3.0.0") {
project.setProperty(attributes.get("property"), true);
}
]]>
</scriptdef>
<scriptdef name="forDevice" language="javascript">
<![CDATA[
var dev = project.getProperty("device");
if (dev == "device") {
project.setProperty("build.for.device", true);
}
]]>
</scriptdef>
<target name="check-cordova-project">
<condition property="cordova.project">
<or>
<available file=".cordova"/>
<available file="hooks"/>
</or>
</condition>
</target>
<target name="upgrade-to-cordova-project" depends="check-cordova-project,check-cordova-version" unless="cordova.project">
<echo level="info" message="${cordova.command} -d create ${java.io.tmpdir}/nb_temp_project com.coolappz.${project.name} ${project.name}" />
<delete dir="${java.io.tmpdir}/nb_temp_project"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true" >
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="create"/>
<arg value="${java.io.tmpdir}/nb_temp_project"/>
<arg value="com.coolappz.${project.name}"/>
<arg value="${project.name}" />
</exec>
<copy todir="." overwrite="true" failonerror="false">
<fileset dir="${java.io.tmpdir}/nb_temp_project"/>
</copy>
<delete dir="${java.io.tmpdir}/nb_temp_project"/>
<delete dir="www"/>
<copy todir="www" failonerror="false" quiet="true" >
<fileset dir="${site.root}"/>
</copy>
</target>
<target name="create-hello-world" depends="check-cordova-version">
<echo level="info" message="${cordova.command} -d create www_nb_temp com.coolappz.${project.name} ${project.name}" />
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="create"/>
<arg value="www_nb_temp"/>
<arg value="com.coolappz.${project.name}"/>
<arg value="${project.name}" />
</exec>
<delete dir="www"/>
<mkdir dir="www"/>
<move file="www_nb_temp/www" tofile="www"/>
<delete dir="www_nb_temp"/>
<delete file="www/config.xml"/>
</target>
<taskdef
classname="org.netbeans.modules.cordova.updatetask.ReadConfigTask"
classpath="${update.task.jar}"
name="readconfig"/>
<taskdef
classname="org.netbeans.modules.cordova.updatetask.PluginTask"
classpath="${update.task.jar}"
name="plugintask"/>
<target name="check-cordova-version">
<property environment="env"/>
<checkVersion first="${cordova.version}" property="cordova.ver.3"/>
<fail message="Cordova version 3 or greater required." unless="cordova.ver.3"/>
<readconfig/>
<forDevice/>
</target>
<target name="check-android-template">
<available file="platforms/android" property="android.generated.exists"/>
</target>
<target name="check-ios-template">
<available file="platforms/ios" property="ios.generated.exists"/>
</target>
<target name="create-android" depends="check-android-template,check-cordova-version,upgrade-to-cordova-project" unless="android.generated.exists">
<echo level="info" message="${cordova.command} -d platform add android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="platform"/>
<arg value="add"/>
<arg value="android"/>
</exec>
</target>
<target name="create-ios" depends="check-ios-template,check-cordova-version,upgrade-to-cordova-project" unless="ios.generated.exists">
<echo level="info" message="${cordova.command} -d platform add ios"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" dir="." failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="platform"/>
<arg value="add"/>
<arg value="ios"/>
</exec>
</target>
<target name="rebuild-ios" depends="clean-ios,build-ios"/>
<target name="build-ios" depends="create-ios,update-plugins,update-ios,build-ios-xcodebuild,build-ios-ipa"/>
<target name="build-ios-xcodebuild">
<property name="path" location="platforms/ios/build"/>
<exec executable="xcodebuild" dir="platforms/ios" failonerror="true">
<arg value="-project"/>
<arg value="${project.name}.xcodeproj"/>
<arg value="ARCHS=${ios.build.arch}"/>
<arg value="-target"/>
<arg value="${project.name}"/>
<arg value="-configuration"/>
<arg value="Release"/>
<arg value="-sdk"/>
<arg value="${ios.build.sdk}" />
<arg value="build"/>
<arg value="CONFIGURATION_BUILD_DIR=${path}"/>
</exec>
</target>
<target name="build-ios-ipa" if="build.for.device">
<exec executable="xcrun" dir="platforms/ios/build" failonerror="true">
<env key="CODESIGN_ALLOCATE" value="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate" />
<arg value="-sdk"/>
<arg value="${ios.build.sdk}" />
<arg value="PackageApplication"/>
<arg value="-v"/>
<arg value="${project.name}.app"/>
<arg value="-o"/>
<arg value="${basedir}/platforms/ios/build/${project.name}.ipa"/>
<arg value="--sign"/>
<arg value="${ios.certificate.name}"/>
<arg value="--embed"/>
<arg value="${ios.provisioning.profile}"/>
</exec>
<available file="${basedir}/platforms/ios/build/${project.name}.ipa" property="ipa.found"/>
<fail unless="ipa.found" message="PackageApplication failed."/>
</target>
<target name="sim-ios" depends="build-ios,ios-run-device,ios-run-simulator">
</target>
<target name="ios-run-device" if="build.for.device">
<echo>
Install "${basedir}/platforms/ios/build/${project.name}.ipa" through iTunes and run it.
</echo>
<exec executable="open" failonerror="true">
<arg value="${basedir}/platforms/ios/build/${project.name}.ipa"/>
</exec>
</target>
<target name="ios-run-simulator" unless="build.for.device">
<exec executable="killall" dir="platforms/ios/build">
<arg value="launchd_sim"/>
</exec>
<exec executable="${ios.sim.exec}" dir="platforms/ios/build">
<arg line="launch ${project.name}.app ${ios.device.args} --exit"/>
</exec>
</target>
<target name="update-plugins">
<plugintask/>
</target>
<target name="update-android">
<echo level="info" message="${cordova.command} prepare android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="prepare"/>
<arg value="android"/>
</exec>
</target>
<target name="update-ios">
<echo level="info" message="${cordova.command} prepare ios"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="prepare"/>
<arg value="ios"/>
</exec>
</target>
<target name="rebuild-android" depends="clean-android,build-android"/>
<target name="build-android" depends="create-android,update-plugins">
<echo level="info" message="${cordova.command} -d build android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="build"/>
<arg value="android"/>
</exec>
</target>
<target name="sim-android" depends="create-android,update-plugins">
<echo level="info" message="${cordova.command} -d ${android.target.device.arg} android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="${android.target.device.arg}"/>
<arg value="android"/>
</exec>
</target>
<target name="clean-android" depends="check-android-template" if="android.generated.exists">
<exec executable="./gradlew" dir="platforms/android">
<arg value="clean" />
</exec>
</target>
<target name="clean-ios" depends="check-ios-template" if="ios.generated.exists">
<exec executable="platforms/ios/cordova/clean" />
</target>
</project>

3
nbproject/configs/android.properties

@ -0,0 +1,3 @@
device=emulator
display.name=Android Emulator
type=android

3
nbproject/configs/android_1.properties

@ -0,0 +1,3 @@
device=device
display.name=Android Device
type=android

5
nbproject/configs/ios.properties

@ -0,0 +1,5 @@
device=emulator
display.name=iPhone Simulator
ios.build.arch=i386
ios.build.sdk=
type=ios

5
nbproject/configs/ios_1.properties

@ -0,0 +1,5 @@
device=device
display.name=iPhone Device
ios.build.arch=armv7 armv7s
ios.build.sdk=
type=ios

9
nbproject/license-mpl.txt

@ -0,0 +1,9 @@
<#if licenseFirst??>
${licenseFirst}
</#if>
${licensePrefix}This Source Code Form is subject to the terms of the Mozilla Public
${licensePrefix}License, v. 2.0. If a copy of the MPL was not distributed with this
${licensePrefix}file, You can obtain one at http://mozilla.org/MPL/2.0/.
<#if licenseLast??>
${licenseLast}
</#if>

48
nbproject/plugins.properties

@ -0,0 +1,48 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This is a list of plugins installed in your project
# You can delete or add new plugins
#
# Format is following:
# id.of.plugin=url_of_repository
#
# Corresponding "id.of.plugin" can be found in the plugin's plugin.xml file:
# <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="foo.bar.plugin" version="0.0.1">
#
# This list contains all core cordova plugins.
#
# For more information about plugins see http://cordova.apache.org/blog/releases/2013/07/23/cordova-3.html
#
cordova-plugin-device=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
cordova-plugin-network-information=https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
cordova-plugin-battery-status=https://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status.git
cordova-plugin-device-motion=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git
cordova-plugin-device-orientation=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-orientation.git
cordova-plugin-geolocation=https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git
cordova-plugin-camera=https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git
cordova-plugin-media-capture=https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git
cordova-plugin-media=https://git-wip-us.apache.org/repos/asf/cordova-plugin-media.git
cordova-plugin-file=https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git
cordova-plugin-file-transfer=https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git
cordova-plugin-dialogs=https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git
cordova-plugin-vibration=https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git
cordova-plugin-contacts=https://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts.git
cordova-plugin-globalization=https://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization.git
cordova-plugin-splashscreen=https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git
cordova-plugin-console=https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git

9
nbproject/project.properties

@ -0,0 +1,9 @@
auxiliary.org-netbeans-modules-cordova.cordova_5f_build_5f_script_5f_version=52
auxiliary.org-netbeans-modules-cordova.phonegap=true
auxiliary.org-netbeans-modules-javascript-nodejs.run_2e_enabled=false
browser.run=true
file.reference.FixPhrase-www=www
files.encoding=UTF-8
project.licensePath=./nbproject/license-mpl.txt
site.root.folder=${file.reference.FixPhrase-www}
start.file=index.html

9
nbproject/project.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.web.clientproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/clientside-project/1">
<name>FixPhrase App</name>
</data>
</configuration>
</project>

1913
package-lock.json
File diff suppressed because it is too large
View File

91
package.json

@ -0,0 +1,91 @@
{
"name": "com.fixphrase.app",
"displayName": "FixPhrase",
"version": "1.0.0",
"description": "Locate any place on Earth with just four words.",
"product_string": "FixPhrase",
"main": "www/index.html",
"window": {
"icon": "res/logo-sm.png",
"id": "com.fixphrase.app_window_main_00001",
"frame": true
},
"user_agent": "Mozilla/5.0 (%osinfo) %name/%ver NW.js/%nwver WebKit/%webkit_ver Chromium/%chromium_ver",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"ecosystem:cordova"
],
"author": "Netsyms Technologies",
"license": "MPL-2.0",
"cordova": {
"plugins": {
"phonegap-plugin-barcodescanner": {},
"cordova-plugin-device": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-headercolor": {},
"cordova-plugin-theme-detection": {},
"cordova-plugin-nativestorage": {},
"cordova-plugin-androidx": {},
"cordova-plugin-androidx-adapter": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-x-socialsharing": {},
"cordova-plugin-velda-devicefeedback": {},
"cordova-plugin-inappbrowser": {},
"ionic-plugin-deeplinks": {
"URL_SCHEME": "fixphrase",
"DEEPLINK_SCHEME": "https",
"DEEPLINK_HOST": "fixphrase.com",
"ANDROID_PATH_PREFIX": "/",
"ANDROID_2_PATH_PREFIX": "",
"ANDROID_3_PATH_PREFIX": "",
"ANDROID_4_PATH_PREFIX": "",
"ANDROID_5_PATH_PREFIX": "",
"DEEPLINK_2_SCHEME": "",
"DEEPLINK_2_HOST": "",
"DEEPLINK_3_SCHEME": "",
"DEEPLINK_3_HOST": "",
"DEEPLINK_4_SCHEME": "",
"DEEPLINK_4_HOST": "",
"DEEPLINK_5_SCHEME": "",
"DEEPLINK_5_HOST": ""
},
"cordova-plugin-geolocation": {
"GPS_REQUIRED": "false"
}
},
"platforms": [
"browser",
"android",
"ios"
]
},
"dependencies": {
"cordova-plugin-device": "^2.0.3",
"cordova-plugin-headercolor": "^1.0.0",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-theme-detection": "^1.3.0"
},
"devDependencies": {
"cordova-android": "^10.1.1",
"cordova-browser": "^6.0.0",
"cordova-ios": "^6.2.0",
"cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-androidx": "^3.0.0",
"cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-camera": "^5.0.1",
"cordova-plugin-geolocation": "^4.1.0",
"cordova-plugin-inappbrowser": "^5.0.0",
"cordova-plugin-nativestorage": "^2.3.2",
"cordova-plugin-splashscreen": "^6.0.0",
"cordova-plugin-velda-devicefeedback": "0.0.2",
"cordova-plugin-x-socialsharing": "^6.0.3",
"cordova-webintent": "github:cordova-misc/cordova-webintent",
"es6-promise-plugin": "^4.2.2",
"ionic-plugin-deeplinks": "^1.0.23"
}
}

10
res/android/drawable/ic_launcher_background.xml
File diff suppressed because it is too large
View File

12
res/android/drawable/ic_launcher_foreground.xml

@ -0,0 +1,12 @@
<vector xmlns:ns0="http://schemas.android.com/apk/res/android" ns0:name="svg8" ns0:width="512.0dp" ns0:height="512.0dp" ns0:viewportWidth="999.999926181" ns0:viewportHeight="1000.0">
<group ns0:name="layer1">
<group ns0:name="g1125">
<path ns0:name="path2" ns0:pathData="M402.938494685 61.1252972316C238.275605558 61.1252972316 104.790586523 194.610390086 104.790586523 359.273190631C104.790586523 479.484168887 146.669938256 513.049991811 372.296195476 840.141094798C379.614889116 850.713880569 391.056597159 856.060509677 402.543578334 856.180096295C402.543578334 856.180096295 402.738681687 465.073907599 402.738681687 465.073907599C336.059091604 464.804322641 282.14343508 410.680932156 282.130269855 344.00079841C282.138596335 277.270077975 336.129104286 223.121666787 402.859515844 222.918461858C402.859515844 222.918461858 402.938494685 61.1252972316 402.938494685 61.1252972316" ns0:fillColor="#f44336" ns0:strokeWidth="0.0700043367486"/>
<group ns0:name="g849">
<path ns0:name="rect821" ns0:pathData="M488.877274547 61.1266735562C456.416336417 61.1266735562 430.28352341 84.2604181456 430.28352341 112.998928469C430.28352341 141.737511058 456.416336417 164.874997835 488.877274547 164.874997835C488.877274547 164.874997835 765.648842417 164.874997835 765.648842417 164.874997835C798.109800078 164.874997835 824.242593554 141.737511058 824.242593554 112.998928469C824.242593554 84.2604181456 798.109800078 61.1266735562 765.648842417 61.1266735562C765.648842417 61.1266735562 488.877274547 61.1266735562 488.877274547 61.1266735562M488.877274547 222.583737236C456.416336417 222.583737236 430.28352341 245.721218153 430.28352341 274.459812461C430.28352341 303.198387237 456.416336417 326.332059561 488.877274547 326.332059561C488.877274547 326.332059561 709.847435084 326.332059561 709.847435084 326.332059561C742.308334152 326.332059561 768.441186221 303.198387237 768.441186221 274.459812461C768.441186221 245.721218153 742.308334152 222.583737236 709.847435084 222.583737236C709.847435084 222.583737236 488.877274547 222.583737236 488.877274547 222.583737236M488.877274547 384.040810681C456.416336417 384.040810681 430.28352341 407.178291598 430.28352341 435.916866375C430.28352341 464.655382557 456.416336417 487.7929416 488.877274547 487.7929416C488.877274547 487.7929416 821.454038812 487.7929416 821.454038812 487.7929416C853.914937879 487.7929416 880.047789949 464.655382557 880.047789949 435.916866375C880.047789949 407.178291598 853.914937879 384.040810681 821.454038812 384.040810681C821.454038812 384.040810681 488.877274547 384.040810681 488.877274547 384.040810681M488.877274547 545.501692719C456.416336417 545.501692719 430.28352341 568.635345512 430.28352341 597.37393982C430.28352341 626.112514596 456.416336417 649.250015045 488.877274547 649.250015045C488.877274547 649.250015045 659.623137235 649.250015045 659.623137235 649.250015045C692.084075365 649.250015045 718.216888372 626.112514596 718.216888372 597.37393982C718.216888372 568.635345512 692.084075365 545.501692719 659.623137235 545.501692719C659.623137235 545.501692719 488.877274547 545.501692719 488.877274547 545.501692719" ns0:fillColor="#ffffff" ns0:fillAlpha="1.0" ns0:strokeWidth="0.0999999825605" ns0:strokeAlpha="1.0" ns0:strokeLineCap="round" ns0:strokeLineJoin="miter" ns0:strokeMiterLimit="4"/>
</group>
</group>
<path ns0:name="path934" ns0:pathData="M-776.367175434 637.276792046C-776.367175434 637.276792046 -645.317574784 410.292237539 -645.317574784 410.292237539C-645.317574784 410.292237539 -319.148949681 410.292237539 -319.148949681 410.292237539C-319.148949681 410.292237539 -188.625175819 636.366014458 -188.625175819 636.366014458C-188.625175819 636.366014458 -776.367175434 637.276792046 -776.367175434 637.276792046" ns0:fillAlpha="1.0" ns0:fillType="evenOdd" ns0:strokeWidth="0.0700043367486" ns0:strokeAlpha="1.0" ns0:strokeLineCap="butt" ns0:strokeLineJoin="miter"/>
<path ns0:name="path936" ns0:pathData="M-1627.43103141 1509.51774023C-1627.43103141 1509.51774023 -1496.38144552 1282.53318573 -1496.38144552 1282.53318573C-1496.38144552 1282.53318573 -1170.21278351 1282.53318573 -1170.21278351 1282.53318573C-1170.21278351 1282.53318573 -1039.68900965 1508.60696265 -1039.68900965 1508.60696265C-1039.68900965 1508.60696265 -1627.43103141 1509.51774023 -1627.43103141 1509.51774023" ns0:fillType="evenOdd" ns0:strokeColor="#000000" ns0:strokeWidth="0.0700043367486" ns0:strokeAlpha="1.0" ns0:strokeLineCap="butt" ns0:strokeLineJoin="miter"/>
</group>
</vector>

5
res/android/mipmap-anydpi-v26/ic_launcher.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

5
res/android/mipmap-anydpi-v26/ic_launcher_round.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

BIN
res/android/mipmap-hdpi/ic_launcher.png

After

Width: 72  |  Height: 72  |  Size: 5.9 KiB

BIN
res/android/mipmap-hdpi/ic_launcher_round.png

After

Width: 72  |  Height: 72  |  Size: 6.6 KiB

BIN
res/android/mipmap-mdpi/ic_launcher.png

After

Width: 48  |  Height: 48  |  Size: 3.2 KiB

BIN
res/android/mipmap-mdpi/ic_launcher_round.png

After

Width: 48  |  Height: 48  |  Size: 4.1 KiB

BIN
res/android/mipmap-xhdpi/ic_launcher.png

After

Width: 96  |  Height: 96  |  Size: 7.8 KiB

BIN
res/android/mipmap-xhdpi/ic_launcher_round.png

After

Width: 96  |  Height: 96  |  Size: 9.9 KiB

BIN
res/android/mipmap-xxhdpi/ic_launcher.png

After

Width: 144  |  Height: 144  |  Size: 15 KiB

BIN
res/android/mipmap-xxhdpi/ic_launcher_round.png

After

Width: 144  |  Height: 144  |  Size: 16 KiB

BIN
res/android/mipmap-xxxhdpi/ic_launcher.png

After

Width: 192  |  Height: 192  |  Size: 21 KiB

BIN
res/android/mipmap-xxxhdpi/ic_launcher_round.png

After

Width: 192  |  Height: 192  |  Size: 24 KiB

214
res/ios-splash-dark.svg
File diff suppressed because it is too large
View File

214
res/ios-splash.svg
File diff suppressed because it is too large
View File

BIN
res/ios/icon/100.png

After

Width: 100  |  Height: 100  |  Size: 10 KiB

BIN
res/ios/icon/1024.png

After

Width: 1024  |  Height: 1024  |  Size: 183 KiB

BIN
res/ios/icon/114.png

After

Width: 114  |  Height: 114  |  Size: 12 KiB

BIN
res/ios/icon/120.png

After

Width: 120  |  Height: 120  |  Size: 13 KiB

BIN
res/ios/icon/128.png

After

Width: 128  |  Height: 128  |  Size: 14 KiB

BIN
res/ios/icon/144.png

After

Width: 144  |  Height: 144  |  Size: 17 KiB

BIN
res/ios/icon/152.png

After

Width: 152  |  Height: 152  |  Size: 18 KiB

BIN
res/ios/icon/16.png

After

Width: 16  |  Height: 16  |  Size: 848 B

BIN
res/ios/icon/167.png

After

Width: 167  |  Height: 167  |  Size: 20 KiB

BIN
res/ios/icon/172.png

After

Width: 172  |  Height: 172  |  Size: 21 KiB

BIN
res/ios/icon/180.png

After

Width: 180  |  Height: 180  |  Size: 22 KiB

BIN
res/ios/icon/196.png

After

Width: 196  |  Height: 196  |  Size: 25 KiB

BIN
res/ios/icon/20.png

After

Width: 20  |  Height: 20  |  Size: 1.1 KiB

BIN
res/ios/icon/216.png

After

Width: 216  |  Height: 216  |  Size: 28 KiB

BIN
res/ios/icon/256.png

After

Width: 256  |  Height: 256  |  Size: 35 KiB

BIN
res/ios/icon/29.png

After

Width: 29  |  Height: 29  |  Size: 2.0 KiB

BIN
res/ios/icon/32.png

After

Width: 32  |  Height: 32  |  Size: 2.2 KiB

BIN
res/ios/icon/40.png

After

Width: 40  |  Height: 40  |  Size: 3.1 KiB

BIN
res/ios/icon/48.png

After

Width: 48  |  Height: 48  |  Size: 3.9 KiB

BIN
res/ios/icon/50.png

After

Width: 50  |  Height: 50  |  Size: 4.2 KiB

BIN
res/ios/icon/512.png

After

Width: 512  |  Height: 512  |  Size: 93 KiB

BIN
res/ios/icon/55.png

After

Width: 55  |  Height: 55  |  Size: 4.8 KiB

BIN
res/ios/icon/57.png

After

Width: 57  |  Height: 57  |  Size: 4.9 KiB

BIN
res/ios/icon/58.png

After

Width: 58  |  Height: 58  |  Size: 5.2 KiB

BIN
res/ios/icon/60.png

After

Width: 60  |  Height: 60  |  Size: 5.3 KiB

BIN
res/ios/icon/64.png

After

Width: 64  |  Height: 64  |  Size: 5.8 KiB

BIN
res/ios/icon/72.png

After

Width: 72  |  Height: 72  |  Size: 6.8 KiB

BIN
res/ios/icon/76.png

After

Width: 76  |  Height: 76  |  Size: 7.2 KiB

BIN
res/ios/icon/80.png

After

Width: 80  |  Height: 80  |  Size: 7.6 KiB

BIN
res/ios/icon/87.png

After

Width: 87  |  Height: 87  |  Size: 8.6 KiB

BIN
res/ios/icon/88.png

After

Width: 88  |  Height: 88  |  Size: 8.6 KiB

BIN
res/ios/splash/Default@2x~universal~anyany.png

After

Width: 2732  |  Height: 2732  |  Size: 101 KiB

BIN
res/ios/splash/Default@2x~universal~anyany~dark.png

After

Width: 2732  |  Height: 2732  |  Size: 76 KiB

194
res/logo-background.svg
File diff suppressed because it is too large
View File

189
res/logo-foreground.svg

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="logo-foreground.svg"
inkscape:export-filename="/home/skylar/Documents/Projects/Sources/Apps/Native/FixPhrase/www/assets/images/icons/256.png"
inkscape:export-xdpi="48"
inkscape:export-ydpi="48">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.97365289"
inkscape:cx="-79.335532"
inkscape:cy="349.74757"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
showguides="false"
inkscape:window-width="1920"
inkscape:window-height="1013"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<defs
id="defs2">
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1094">
<feFlood
flood-opacity="0.717647"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1084" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1086" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1088" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1090" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1092" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1106">
<feFlood
flood-opacity="0.717647"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1096" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1098" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1100" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1102" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1104" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1120">
<feFlood
flood-opacity="0.717647"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1110" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1112" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1114" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1116" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1118" />
</filter>
</defs>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-161.53331)"
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<g
id="g1125"
transform="translate(-4.398055)">
<path
style="fill:#f44336;stroke-width:0.26458332;filter:url(#filter1094)"
d="m 58.982788,169.81375 c -22.306332,0 -40.389102,18.08278 -40.389102,40.3891 0,16.28458 5.673256,20.83163 36.238092,65.14157 0.991439,1.43226 2.541409,2.15655 4.097512,2.17275 l 0.02643,-52.98185 A 16.404743,16.404743 0 0 1 42.617301,208.13395 16.404743,16.404743 0 0 1 58.972089,191.73133 Z"
id="path2"
inkscape:connector-curvature="0" />
<g
style="filter:url(#filter1106)"
id="g849"
transform="translate(0,0.07554504)">
<path
id="rect821"
transform="matrix(0.26458333,0,0,0.26458333,0,161.45776)"
d="m 266.92773,31.296875 c -16.62,0 -30,11.844477 -30,26.558594 0,14.714154 13.38,26.560547 30,26.560547 h 141.70704 c 16.62001,0 30,-11.846393 30,-26.560547 0,-14.714117 -13.37999,-26.558594 -30,-26.558594 z m 0,82.666015 c -16.62,0 -30,11.84639 -30,26.56055 0,14.71415 13.38,26.55859 30,26.55859 h 113.13672 c 16.61998,0 30,-11.84444 30,-26.55859 0,-14.71416 -13.38002,-26.56055 -30,-26.56055 z m 0,82.66602 c -16.62,0 -30,11.84639 -30,26.56054 0,14.71412 13.38,26.56055 30,26.56055 h 170.2793 c 16.61998,0 30,-11.84643 30,-26.56055 0,-14.71415 -13.38002,-26.56054 -30,-26.56054 z m 0,82.66797 c -16.62,0 -30,11.84443 -30,26.55859 0,14.71415 13.38,26.56055 30,26.56055 h 87.42188 c 16.62,0 30,-11.8464 30,-26.56055 0,-14.71416 -13.38,-26.55859 -30,-26.55859 z"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.37795269;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:connector-curvature="0" />
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path934"
d="m -105.17187,247.86307 17.752852,-30.74884 h 44.184975 l 17.68162,30.62546 z"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -220.46265,366.02264 17.75285,-30.74884 h 44.18498 l 17.68162,30.62546 z"
id="path936"
inkscape:connector-curvature="0" />
</g>
</svg>

BIN
res/logo-ios.png

After

Width: 1024  |  Height: 1024  |  Size: 148 KiB

212
res/logo-ios.svg
File diff suppressed because it is too large
View File

BIN
res/logo-sm.png

After

Width: 512  |  Height: 512  |  Size: 16 KiB

151
res/logo-sm.svg

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
viewBox="0 0 8.4666665 8.4666669"
version="1.1"
id="svg8"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="logo-sm.svg"
inkscape:export-filename="/home/skylar/Documents/Projects/Sources/Apps/Native/FixPhrase/res/logo-sm.png"
inkscape:export-xdpi="1536"
inkscape:export-ydpi="1536">
<defs
id="defs2">
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter1106">
<feFlood
flood-opacity="0.717647"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1096" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1098" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1100" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1102" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1104" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter1094">
<feFlood
flood-opacity="0.717647"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1084" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1086" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1088" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1090" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1092" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-423.92997"
inkscape:cy="-6.8080673"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1013"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-288.53332)">
<rect
style="opacity:1;fill:#03a9f4;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
id="rect1108"
width="8.4666662"
height="8.4666662"
x="2.3919068e-07"
y="288.53333"
rx="0.49609375"
ry="0.49609375" />
<g
style="stroke-width:12.41872311"
id="g849"
transform="matrix(0.07849741,0,0,0.08260203,-1.5072921,275.45542)">
<path
id="rect821"
transform="matrix(0.26458333,0,0,0.26458333,0,161.45776)"
d="m 266.92773,31.296875 c -16.62,0 -30,11.844477 -30,26.558594 0,14.714154 13.38,26.560547 30,26.560547 h 141.70704 c 16.62001,0 30,-11.846393 30,-26.560547 0,-14.714117 -13.37999,-26.558594 -30,-26.558594 z m 0,82.666015 c -16.62,0 -30,11.84639 -30,26.56055 0,14.71415 13.38,26.55859 30,26.55859 h 113.13672 c 16.61998,0 30,-11.84444 30,-26.55859 0,-14.71416 -13.38002,-26.56055 -30,-26.56055 z m 0,82.66602 c -16.62,0 -30,11.84639 -30,26.56054 0,14.71412 13.38,26.56055 30,26.56055 h 170.2793 c 16.61998,0 30,-11.84643 30,-26.56055 0,-14.71415 -13.38002,-26.56054 -30,-26.56054 z m 0,82.66797 c -16.62,0 -30,11.84443 -30,26.55859 0,14.71415 13.38,26.56055 30,26.56055 h 87.42188 c 16.62,0 30,-11.8464 30,-26.56055 0,-14.71416 -13.38,-26.55859 -30,-26.55859 z"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4.6936903;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:#f44336;stroke-width:0.26458335"
d="m 3.1123342,289.16501 c -1.4918399,0 -2.70121059,1.20936 -2.70121059,2.70121 0,1.08911 0.37942582,1.39321 2.42359279,4.35666 0.066305,0.0959 0.1699598,0.14415 0.2740402,0.14541 l 0.00176,-3.54341 a 1.0971444,1.0971444 0 0 1 -1.0927072,-1.09694 1.0971444,1.0971444 0 0 1 1.0938025,-1.09699 z"
id="path2"
inkscape:connector-curvature="0" />
</g>
</svg>

BIN
res/logo.png

After

Width: 512  |  Height: 512  |  Size: 26 KiB

11
scripts/generate_credits.sh

@ -0,0 +1,11 @@
#!/bin/bash
echo "Generating credits files..."
cd www
yarn licenses generate-disclaimer > ../license-credits.md
cd ..
yarn licenses generate-disclaimer >> license-credits.md
cp www/pages/credits.template.html www/pages/credits.html
sed -i -e "/{{credits}}/r license-credits.md" -e "/{{credits}}/d" www/pages/credits.html

5
scripts/npm_prepare.sh

@ -0,0 +1,5 @@
#!/bin/sh
./scripts/www_npm_install.sh
./scripts/remove_bloat.sh
./scripts/generate_credits.sh

53
scripts/remove_bloat.sh

@ -0,0 +1,53 @@
#!/bin/bash
# This script removes some stuff in `www/node_modules` that the app doesn't need to run.
# It makes the build under 6MB, and prevents zip64-related crashes.
echo "Removing bloat in node_modules..."
set -e
DIR="$(pwd)/www/node_modules"
cd $DIR
rm -rf {buffer-from,concat-stream,csscolorparser,dom7,earcut,geojson-vt,gl-matrix}
rm -rf {grid-index,htm,ieee754,inherits,kdbush,@mapbox,minimist,murmurhash-js,path-to-regexp,pbf}
rm -rf {potpack,protocol-buffers-schema,quickselect,readable-stream,resolve-protobuf-schema,rw}
rm -rf {safe-buffer,skeleton-elements,ssr-window,string_decoder,supercluster,swiper,text-encoding,tinyqueue}
rm -rf {ts-custom-error,typedarray,util-deprecate,vt-pbf}
# Make npm stop complaining that these don't exist by actually removing them
rm -rf .bin/*
cd $DIR
cd @fortawesome/fontawesome-pro
rm -rf {js,less,metadata,scss,sprites,svgs}
find css -type f -not -name 'all.min.css' -delete
find webfonts -type f -not -name '*.woff2' -delete
find webfonts -type f -name "fa-brands-400.*" -delete
find . -type f -name '*.tgz' -delete # for some reason it's packaging an 18MB tarball sometimes
cd $DIR
cd framework7
rm -rf {bundle,cjs,components,core,esm,less,lite,lite-bundle,modules,types}
find . -type f -not -name 'framework7-bundle.min.js' -not -name 'framework7-bundle.min.css' -not -name 'LICENSE' -not -name 'package.json' -delete
cd $DIR
cd template7
rm -rf src
find . -type f -not -name "LICENSE" -not -name "package.json" -not -name "template7.min.js" -delete
cd $DIR
cd jquery
rm -rf src
rm -rf external
find dist -type f -not -name 'jquery.min.js' -delete
cd $DIR
cd maplibre-gl
rm -rf {build,flow-typed,src}
find . -name "CHANGELOG.md" -delete
find dist -type f -not -name 'maplibre-gl.css' -not -name 'maplibre-gl.js' -delete
rm -rf dist/style-spec
cd $DIR
echo "Cleanup finished"

8
scripts/www_npm_install.sh

@ -0,0 +1,8 @@
#!/bin/bash
echo "Installing node modules in www/..."
cd www
rm -rf node_modules
npm install
cd ..

165
src/android/BackgroundFetchHeadlessTask.java

@ -0,0 +1,165 @@
package com.transistorsoft.cordova.backgroundfetch;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import com.netsyms.repairapp.MainActivity;
import com.netsyms.repairapp.R;
import com.transistorsoft.tsbackgroundfetch.BackgroundFetch;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class BackgroundFetchHeadlessTask implements HeadlessTask {
private static final String PREFS_NAME = "NativeStorage";
private static final String NOTIFICATION_URL = "https://apis.netsyms.net/repairapp/notifications.php";
private static final String UUID_KEY = "client_uuid";
private static final String SINCE_KEY = "last_notification_check";
private static String shownNotifications = "";
public final String NOTIFICATION_CHANNEL_ID = "background-channel-id";
public static String getValue(Context context, String key, String defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE);
return settings.getString(key, defaultValue);
}
public static void setValue(Context context, String key, String value) {
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor edit = settings.edit();
edit.putString(key, value);
edit.commit();
}
/**
* https://stackoverflow.com/a/34691486
*
* @param urlString
* @return
* @throws IOException
*/
public static String getStringFromURL(String urlString) throws IOException {
HttpURLConnection urlConnection = null;
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(10000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setDoOutput(true);
urlConnection.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
String jsonString = sb.toString();
return jsonString;
}
@Override
public void onFetch(Context context) {
Log.d(BackgroundFetch.TAG, "Notification Poller: onFetch");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String clientuuid = getValue(context, UUID_KEY, null);
String lastcheck = getValue(context, SINCE_KEY, null);
//Log.d(BackgroundFetch.TAG, "Notification Poller: Account JSON: " + accountjson);
try {
String notificationString = getStringFromURL(NOTIFICATION_URL + "?clientuuid=" + clientuuid + "&since=" + lastcheck);
//Log.d(BackgroundFetch.TAG, "Notification Poller: Account " + i + " JSON: " + notificationString);
JSONObject jsonresp = new JSONObject(