Compare commits

..

246 Commits
1.5.8 ... main

Author SHA1 Message Date
f6a224b49d Update dependencies (#433)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update dependencies.

## How was this patch tested?

Manually.

Reviewed-on: #433
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2024-01-19 15:28:50 +01:00
957fe8115e Fix APK paths (#432)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

* Fix APK paths
* Upgrade to Gradle 8.5 & Gradle Plugin 8.2.0

## How was this patch tested?

CI/CD.

Reviewed-on: #432
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-12-02 12:19:36 +01:00
13b172e37b Fix publish release (#431)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Fix publish release.

## How was this patch tested?

CI/CD.

Reviewed-on: #431
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-30 20:45:26 +01:00
83bda397d0 Fix Drone CI environment variables (#430)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Fix Drone CI environment variables.

## How was this patch tested?

CI/CD.

Reviewed-on: #430
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-29 22:41:30 +01:00
14fe38324a Use absolute file paths for APK & keystore in Drone CI (#429)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Use absolute file paths for APK & keystore in Drone CI.

## How was this patch tested?

CI/CD.

Reviewed-on: #429
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-29 21:50:03 +01:00
753592db49 Fix files path in Drone CI gitea-release plugin (#428)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Fix files path in Drone CI gitea-release plugin.

## How was this patch tested?

CI/CD.

Reviewed-on: #428
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-29 20:44:22 +01:00
7194f27adc Build signed APK (#427)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Build signed APK.

## How was this patch tested?

CI/CD.

Reviewed-on: #427
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-29 18:14:56 +01:00
714dadf709 Update Gradle wrapper to the latest version (#426)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update Gradle wrapper to the latest version.

## How was this patch tested?

Manually.

Reviewed-on: #426
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-26 11:14:47 +01:00
b2af0dedb4 Update Gradle Plugin & update Java version to 17 (#425)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update Gradle Plugin & update Java version to 17.

## How was this patch tested?

Manually.

Reviewed-on: #425
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-11-26 10:37:19 +01:00
a3beeeebef Enable Drone CI cache (#424)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

 Enable Drone CI cache.

## How was this patch tested?

CI/CD.

Reviewed-on: #424
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-10-21 21:42:32 +02:00
caad081edb Update dependencies (#423)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update dependencies.

## How was this patch tested?

Manually.

Reviewed-on: #423
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-10-21 13:00:01 +02:00
18b254da46 Update dependencies (#422)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

* Update dependencies

## How was this patch tested?

Manually.

Reviewed-on: #422
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-08-05 09:25:55 +02:00
f45c57b456 Fix permissions management on document download for Android 10+. Fixes #419 (#421)
Some checks reported errors
continuous-integration/drone/push Build encountered an error
continuous-integration/drone Build is passing
continuous-integration/drone/tag Build is passing
## What changes were proposed in this pull request?

* Fix permissions management on document download for Android 10+. Fixes #419

## How was this patch tested?

Manually.

Reviewed-on: #421
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-07-08 11:17:21 +02:00
8fd41782ad Update to Android API 34 (Android 14) (#420)
## What changes were proposed in this pull request?
* Update to Android API 34 (Android 14)
* Remove Firebase Analytics

## How was this patch tested?

Manually.

Reviewed-on: #420
Co-authored-by: Amab <juanmi1982@gmail.com>
Co-committed-by: Amab <juanmi1982@gmail.com>
2023-06-10 14:44:45 +02:00
Marown
f18a03c6cb Run Drone CI pipeline on pull requests only (#418)
## What changes were proposed in this pull request?

Run Drone CI pipeline on pull requests only.

## How was this patch tested?

Drone CI pipeline.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #418
2023-06-03 10:57:43 +02:00
Marown
4d29dc6376 Update dependencies (#417)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update dependencies.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #417
2023-06-02 23:00:10 +02:00
Marown
ae6e4afb3d Update Android Build Tools to 33.0.2 version (#416)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update Android Build Tools to 33.0.2 version.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #416
2023-04-15 14:07:49 +02:00
Marown
1594b9bfa1 Upgrade Gradle to 8.0 version (#415)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Upgrade Gradle to 8.0 version.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #415
2023-04-14 14:55:11 +02:00
Marown
6c1321ecb0 Update dependencies (#414)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?
Update dependencies.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #414
2023-03-02 22:32:18 +01:00
Marown
a2d129ca80 Update dependencies (#413)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update dependencies.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #413
2023-02-01 21:16:46 +01:00
Marown
4429991822 Update dependencies (#412)
All checks were successful
continuous-integration/drone/push Build is passing
## What changes were proposed in this pull request?

Update dependencies.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #412
2023-01-13 19:03:57 +01:00
Marown
dcd264adb4 Add support for background notification download when power save mode is enabled (#411)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
## What changes were proposed in this pull request?

* Add support for background notification download when power save mode is enabled (Fixes #408)
* Remove social links

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #411
2022-12-18 14:48:17 +01:00
Marown
41abd55f43 Update Android Build Tools to 33.0.1 version (#409)
All checks were successful
continuous-integration/drone Build is passing
## What changes were proposed in this pull request?

Update Android Build Tools to 33.0.1 version.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #409
2022-11-28 11:36:02 +01:00
Marown
0f9fa51219 Update Drone CI configuration (#407)
Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #407
2022-11-01 11:24:52 +01:00
Marown
e5f5037fc7 Update Android Gradle plugin (#406)
## What changes were proposed in this pull request?

Upgrade Androiud Gradle PLugin to 7.5.1 version.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #406
2022-10-15 10:03:18 +02:00
Marown
8e0d3c2513 Update dependencies (#405)
## What changes were proposed in this pull request?

* Update dependencies.

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #405
2022-09-15 21:57:54 +02:00
Marown
ea5af3c9d8 Update README.md (#404)
Some checks reported errors
continuous-integration/drone Build was killed
## What changes were proposed in this pull request?

Update README.md

## How was this patch tested?

Manually.

Co-authored-by: Amab <juanmi1982@gmail.com>
Reviewed-on: #404
2022-09-02 18:43:40 +02:00
284992a9f1 Add support for Drone CI (#403)
* Add Drone config

* Fix indentation issues

* Add  test step

* Replace test step with build step

* Use Gradle wrapper

* Restore test step

* Refactor Gradle steps

* Add Fetch step

* Use androidsdk/android-31 image

* Parallelize steps

* Revert parallelize steps

* Update code-analysis step for using sonar-scanner.properties file

* Add sonar-scanner.properties

* Add sonar-project.properties

* Remove sonar-project.properties

* Add sonar.projectKey property

* Remove sonar.projectKey property

* Add inclusions in code-analisys step

* Update inclusions path

* Remove sonar-scanner.properties

* Update inclusions path

* Replace code-analysis image

* Replace code-analysis image

* Disable code-analysis step

* Add integration tests step to Drone CI (#397)

Reviewed-on: http://gitea:3000/juanmi/SWADroid/pulls/397

* Revert "Add integration tests step to Drone CI (#397)"

This reverts commit 88897d3350.

* Refactor steps & fix ITs execution

Co-authored-by: juanmi <juanmi@noreply.gitea>
2022-08-13 08:55:18 +02:00
dependabot[bot]
813ebf945a Bump gson from 2.9.0 to 2.9.1 (#399)
Bumps [gson](https://github.com/google/gson) from 2.9.0 to 2.9.1.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.9.0...gson-parent-2.9.1)

---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-13 08:40:36 +02:00
dependabot[bot]
84be4dd642 Bump gradle from 7.2.1 to 7.2.2 (#400)
Bumps gradle from 7.2.1 to 7.2.2.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-13 08:35:22 +02:00
dependabot[bot]
dbcdb38961 Bump firebase-bom from 30.2.0 to 30.3.2 (#401)
Bumps firebase-bom from 30.2.0 to 30.3.2.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-13 08:24:49 +02:00
dependabot[bot]
01655b20f8 Bump appcompat from 1.4.2 to 1.5.0 (#402)
Bumps appcompat from 1.4.2 to 1.5.0.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-13 08:19:48 +02:00
dependabot[bot]
254ad9ef7e Bump google-services from 4.3.10 to 4.3.13 (#396)
Bumps google-services from 4.3.10 to 4.3.13.

---
updated-dependencies:
- dependency-name: com.google.gms:google-services
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-29 13:17:14 +02:00
dependabot[bot]
38eed2b322 Bump firebase-bom from 30.1.0 to 30.2.0 (#394)
Bumps firebase-bom from 30.1.0 to 30.2.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-24 14:43:24 +02:00
dependabot[bot]
d53a836aff Bump appcompat from 1.4.1 to 1.4.2 (#393)
Bumps appcompat from 1.4.1 to 1.4.2.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-02 16:31:44 +02:00
dependabot[bot]
0a3afeb959 Bump material from 1.6.0 to 1.6.1 (#392)
Bumps [material](https://github.com/material-components/material-components-android) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.6.0...1.6.1)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-01 16:51:07 +02:00
dependabot[bot]
36536f02f0 Bump firebase-bom from 30.0.2 to 30.1.0 (#391)
Bumps firebase-bom from 30.0.2 to 30.1.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-27 13:22:21 +02:00
dependabot[bot]
72c33f1d3c Bump gradle from 7.2.0 to 7.2.1 (#390)
Bumps gradle from 7.2.0 to 7.2.1.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 17:05:21 +02:00
90fb3640ed Fixed #388. Fixed notifications downloads on Android 12 (S) (#389) 2022-05-23 18:15:09 +02:00
dependabot[bot]
6a64bfa9fd Bump firebase-bom from 30.0.1 to 30.0.2 (#387)
Bumps firebase-bom from 30.0.1 to 30.0.2.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-20 14:47:41 +02:00
dependabot[bot]
2bbce7dc93 Bump firebase-bom from 30.0.0 to 30.0.1 (#386)
Bumps firebase-bom from 30.0.0 to 30.0.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-16 08:11:19 +02:00
dependabot[bot]
33bc6efe2a Bump firebase-bom from 29.3.1 to 30.0.0 (#384)
Bumps firebase-bom from 29.3.1 to 30.0.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-09 16:55:05 +02:00
dependabot[bot]
095387b5d5 Bump material from 1.5.0 to 1.6.0 (#383)
Bumps [material](https://github.com/material-components/material-components-android) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.5.0...1.6.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-05 16:51:23 +02:00
dependabot[bot]
fc66a216d4 Bump core from 3.4.1 to 3.5.0 (#382)
Bumps [core](https://github.com/zxing/zxing) from 3.4.1 to 3.5.0.
- [Release notes](https://github.com/zxing/zxing/releases)
- [Changelog](https://github.com/zxing/zxing/blob/master/CHANGES)
- [Commits](https://github.com/zxing/zxing/compare/zxing-3.4.1...zxing-3.5.0)

---
updated-dependencies:
- dependency-name: com.google.zxing:core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-02 08:04:19 +02:00
dependabot[bot]
adae8f875a Bump firebase-bom from 29.3.0 to 29.3.1 (#381)
Bumps firebase-bom from 29.3.0 to 29.3.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-17 08:27:41 +02:00
dependabot[bot]
dc630840d2 Bump gradle from 7.1.2 to 7.1.3 (#380)
Bumps gradle from 7.1.2 to 7.1.3.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-08 13:47:59 +02:00
dependabot[bot]
4a579950a1 Bump firebase-bom from 29.2.1 to 29.3.0 (#379)
Bumps firebase-bom from 29.2.1 to 29.3.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-25 13:48:21 +01:00
dependabot[bot]
2e8dbf7804 Bump firebase-bom from 29.2.0 to 29.2.1 (#378)
Bumps firebase-bom from 29.2.0 to 29.2.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-19 08:00:09 +01:00
dependabot[bot]
c3f9c9a502 Bump firebase-bom from 29.1.0 to 29.2.0 (#377)
Bumps firebase-bom from 29.1.0 to 29.2.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-11 13:46:01 +01:00
dependabot[bot]
88be3ea745 Bump gradle from 7.1.1 to 7.1.2 (#376)
Bumps gradle from 7.1.1 to 7.1.2.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-24 17:21:28 +01:00
dependabot[bot]
686c7f5d75 Bump firebase-bom from 29.0.4 to 29.1.0 (#375)
Bumps firebase-bom from 29.0.4 to 29.1.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 17:05:36 +01:00
dependabot[bot]
437656b635 Bump gson from 2.8.9 to 2.9.0 (#374)
Bumps [gson](https://github.com/google/gson) from 2.8.9 to 2.9.0.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.8.9...gson-parent-2.9.0)

---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 17:02:30 +01:00
dependabot[bot]
013931ff72 Bump gradle from 7.1.0 to 7.1.1 (#373)
Bumps gradle from 7.1.0 to 7.1.1.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-07 16:54:03 +01:00
dependabot[bot]
d86d239fdc Bump gradle from 7.0.4 to 7.1.0 (#372)
Bumps gradle from 7.0.4 to 7.1.0.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-26 16:56:08 +01:00
dependabot[bot]
c229c42c83 Bump firebase-bom from 29.0.3 to 29.0.4 (#371)
Bumps firebase-bom from 29.0.3 to 29.0.4.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-21 13:48:29 +01:00
dependabot[bot]
91634dbbfc Bump material from 1.4.0 to 1.5.0 (#370)
Bumps [material](https://github.com/material-components/material-components-android) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.4.0...1.5.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-14 14:08:30 +01:00
dependabot[bot]
886e589136 Bump appcompat from 1.4.0 to 1.4.1 (#369)
Bumps appcompat from 1.4.0 to 1.4.1.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-13 16:49:48 +01:00
dependabot[bot]
48edaf243d Bump firebase-bom from 29.0.2 to 29.0.3 (#368)
Bumps firebase-bom from 29.0.2 to 29.0.3.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-17 18:07:12 +01:00
dependabot[bot]
11fd49e393 Bump firebase-bom from 29.0.1 to 29.0.2 (#367)
Bumps firebase-bom from 29.0.1 to 29.0.2.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-13 16:54:12 +01:00
dependabot[bot]
4ab2a44cf5 Bump gradle from 7.0.3 to 7.0.4 (#366)
Bumps gradle from 7.0.3 to 7.0.4.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-11 08:30:31 +01:00
dependabot[bot]
166407ea5d Bump firebase-bom from 29.0.0 to 29.0.1 (#365)
Bumps firebase-bom from 29.0.0 to 29.0.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-01 21:32:23 +01:00
dependabot[bot]
737bfcefaa Bump appcompat from 1.3.1 to 1.4.0 (#364)
* Bump appcompat from 1.3.1 to 1.4.0

Bumps appcompat from 1.3.1 to 1.4.0.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update SDK and Build Tools to version 31

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Amab <juanmi1982@gmail.com>
2021-11-18 19:48:15 +01:00
dependabot[bot]
d67fa0d733 Bump firebase-bom from 28.4.2 to 29.0.0 (#363)
Bumps firebase-bom from 28.4.2 to 29.0.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-01 09:00:34 +01:00
dependabot[bot]
eb533db847 Bump gson from 2.8.8 to 2.8.9 (#362)
Bumps [gson](https://github.com/google/gson) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.8.8...gson-parent-2.8.9)

---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-01 08:57:46 +01:00
dependabot[bot]
ce7e2c4b33 Bump zxing-android-embedded from 4.2.0 to 4.3.0 (#361)
Bumps [zxing-android-embedded](https://github.com/journeyapps/zxing-android-embedded) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/journeyapps/zxing-android-embedded/releases)
- [Changelog](https://github.com/journeyapps/zxing-android-embedded/blob/master/CHANGES.md)
- [Commits](https://github.com/journeyapps/zxing-android-embedded/compare/v4.2.0...v4.3.0)

---
updated-dependencies:
- dependency-name: com.journeyapps:zxing-android-embedded
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-26 19:13:05 +02:00
dependabot[bot]
87db8183c1 Bump gradle from 7.0.2 to 7.0.3 (#360)
Bumps gradle from 7.0.2 to 7.0.3.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-12 09:05:26 +02:00
dependabot[bot]
8137268a06 Bump firebase-bom from 28.4.1 to 28.4.2 (#359)
Bumps firebase-bom from 28.4.1 to 28.4.2.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-05 22:49:38 +02:00
dependabot[bot]
a40f6dd7b6 Bump firebase-bom from 28.4.0 to 28.4.1 (#358)
Bumps firebase-bom from 28.4.0 to 28.4.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-15 08:00:26 +02:00
dependabot[bot]
ed9739e029 Bump gradle from 7.0.1 to 7.0.2 (#357)
Bumps gradle from 7.0.1 to 7.0.2.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-02 18:05:18 +02:00
dependabot[bot]
a5f56b84f5 Bump firebase-bom from 28.3.1 to 28.4.0 (#356)
Bumps firebase-bom from 28.3.1 to 28.4.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>
2021-08-23 11:09:02 +02:00
dependabot[bot]
f75c33bb46 Bump gson from 2.8.7 to 2.8.8 (#355)
Bumps [gson](https://github.com/google/gson) from 2.8.7 to 2.8.8.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.8.7...gson-parent-2.8.8)

---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-23 11:04:05 +02:00
dependabot[bot]
0125e4c9ed Bump gradle from 4.2.2 to 7.0.1 (#354)
* Bump gradle from 4.2.2 to 7.0.1

Bumps gradle from 4.2.2 to 7.0.1.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update Gradle to version 7.2

* Use Java 11

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Amab <juanmi1982@gmail.com>
2021-08-19 21:48:33 +02:00
dependabot[bot]
4fd13b6189 Bump google-services from 4.3.9 to 4.3.10 (#353)
Bumps google-services from 4.3.9 to 4.3.10.

---
updated-dependencies:
- dependency-name: com.google.gms:google-services
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-10 15:58:45 +02:00
dependabot[bot]
b3376d6928 Bump firebase-bom from 28.3.0 to 28.3.1 (#351)
Bumps firebase-bom from 28.3.0 to 28.3.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-06 15:04:00 +02:00
dependabot[bot]
397a11f135 Bump google-services from 4.3.8 to 4.3.9 (#352)
Bumps google-services from 4.3.8 to 4.3.9.

---
updated-dependencies:
- dependency-name: com.google.gms:google-services
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-06 14:59:12 +02:00
dependabot[bot]
86cf2aa050 Bump firebase-bom from 28.2.1 to 28.3.0 (#349)
Bumps firebase-bom from 28.2.1 to 28.3.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-23 14:43:42 +02:00
dependabot[bot]
e809e6a630 Bump appcompat from 1.3.0 to 1.3.1 (#348)
Bumps appcompat from 1.3.0 to 1.3.1.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>
2021-07-21 21:17:46 +02:00
a3431b400a Update README.md 2021-07-21 21:13:42 +02:00
1a367ae2d0 Update README.md 2021-07-21 21:07:08 +02:00
dependabot[bot]
f950cf07d7 Bump commons-io from 2.10.0 to 2.11.0 (#347)
Bumps commons-io from 2.10.0 to 2.11.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-14 08:48:15 +02:00
dependabot[bot]
6be734c453 Bump firebase-bom from 28.2.0 to 28.2.1 (#346)
Bumps firebase-bom from 28.2.0 to 28.2.1.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-12 08:21:18 +02:00
dependabot[bot]
da85af62d0 Bump material from 1.3.0 to 1.4.0 (#345)
Bumps [material](https://github.com/material-components/material-components-android) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.3.0...1.4.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-05 09:58:48 +02:00
668202faaf Remove Google Plus references (#344) 2021-07-01 18:01:28 +02:00
dependabot[bot]
30c28e826f Bump gradle from 4.2.1 to 4.2.2 (#343)
Bumps gradle from 4.2.1 to 4.2.2.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-01 14:19:41 +02:00
33429880a2 Update MathJax to version 3.2.0 (#342) 2021-06-30 22:36:43 +02:00
21e520f83a Update README.md 2021-06-30 20:13:59 +02:00
dependabot[bot]
b4989ac740 Bump firebase-bom from 28.1.0 to 28.2.0 (#341)
Bumps firebase-bom from 28.1.0 to 28.2.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-24 18:27:38 +02:00
dependabot[bot]
44757a93a6 Bump commons-io from 2.9.0 to 2.10.0 (#337)
Bumps commons-io from 2.9.0 to 2.10.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-14 16:44:04 +02:00
dependabot[bot]
85e91b54a0 Bump firebase-bom from 28.0.1 to 28.1.0 (#336)
Bumps firebase-bom from 28.0.1 to 28.1.0.

---
updated-dependencies:
- dependency-name: com.google.firebase:firebase-bom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-04 14:56:53 +02:00
dependabot[bot]
c8129b55fd Bump commons-io from 2.8.0 to 2.9.0 (#335)
Bumps commons-io from 2.8.0 to 2.9.0.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-26 08:40:57 +02:00
dependabot[bot]
3d2704235c Bump gson from 2.8.6 to 2.8.7 (#334)
Bumps [gson](https://github.com/google/gson) from 2.8.6 to 2.8.7.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.8.6...gson-parent-2.8.7)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-25 14:44:51 +02:00
dependabot[bot]
8886602547 Bump google-services from 4.3.5 to 4.3.8 (#332)
Bumps google-services from 4.3.5 to 4.3.8.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-19 12:19:10 +02:00
dependabot[bot]
66f7547e0d Bump appcompat from 1.2.0 to 1.3.0 (#333)
Bumps appcompat from 1.2.0 to 1.3.0.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-19 12:14:04 +02:00
dependabot[bot]
bd903de0ab Bump firebase-bom from 28.0.0 to 28.0.1 (#330)
Bumps firebase-bom from 28.0.0 to 28.0.1.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-14 10:44:19 +02:00
dependabot[bot]
76821e16c2 Bump gradle from 4.2.0 to 4.2.1 (#331)
Bumps gradle from 4.2.0 to 4.2.1.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-14 10:39:01 +02:00
dependabot[bot]
d319150ca7 Bump zxing-android-embedded from 4.1.0 to 4.2.0 (#328)
Bumps [zxing-android-embedded](https://github.com/journeyapps/zxing-android-embedded) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/journeyapps/zxing-android-embedded/releases)
- [Changelog](https://github.com/journeyapps/zxing-android-embedded/blob/master/CHANGES.md)
- [Commits](https://github.com/journeyapps/zxing-android-embedded/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-13 16:58:29 +02:00
a88fc9704c Upgrade Gradle to version 7.0.1 (#327)
* Upgrade Gradle to version 7.0.1

* Replace JCenter by Maven Central repository
2021-05-12 17:32:07 +02:00
dependabot[bot]
0ed72582f5 Bump firebase-bom from 27.1.0 to 28.0.0 (#326)
Bumps firebase-bom from 27.1.0 to 28.0.0.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-12 16:58:31 +02:00
dependabot[bot]
028953cbb7 Bump gradle from 4.1.3 to 4.2.0 (#324)
Bumps gradle from 4.1.3 to 4.2.0.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-05 18:33:27 +02:00
dependabot-preview[bot]
34e0b6ba13 Upgrade to GitHub-native Dependabot (#323)
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-28 18:54:24 +02:00
dependabot-preview[bot]
5f815e6afe Bump firebase-bom from 27.0.0 to 27.1.0 (#322)
Bumps firebase-bom from 27.0.0 to 27.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-22 17:08:21 +02:00
dependabot-preview[bot]
622f771ffb Bump firebase-bom from 26.8.0 to 27.0.0 (#321)
Bumps firebase-bom from 26.8.0 to 27.0.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-09 17:32:39 +02:00
dependabot-preview[bot]
14c094e369 Bump firebase-bom from 26.7.0 to 26.8.0 (#320)
Bumps firebase-bom from 26.7.0 to 26.8.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-03-26 13:18:23 +01:00
dependabot-preview[bot]
1ebefbeea7 Bump gradle from 4.1.2 to 4.1.3 (#319)
Bumps gradle from 4.1.2 to 4.1.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-03-19 08:11:01 +01:00
dependabot-preview[bot]
9746154da4 Bump firebase-bom from 26.6.0 to 26.7.0 (#318)
Bumps firebase-bom from 26.6.0 to 26.7.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-03-12 14:24:55 +01:00
dependabot-preview[bot]
3aaca43a6e Bump firebase-bom from 26.5.0 to 26.6.0 (#317)
Bumps firebase-bom from 26.5.0 to 26.6.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-03-02 18:21:30 +01:00
2977a7511b Update README.md 2021-02-21 21:50:05 +01:00
8745daae4f Replace Travis CI badges with GitHub Actions badges 2021-02-21 21:49:19 +01:00
0f4db7e2cc Add GitHub CI (#316)
* Add GitHub CI for develop branch

* Add Gradle stacktrace option

* Fix versions of dependencies

* Revert "Add Gradle stacktrace option"

This reverts commit ebd50bc9

* Set fetch-depth to 0

* Customize git checkout

* Customize git checkout (try 2)

* Customize git checkout (try 3)

* Revert "Customize git checkout (try 3)"

This reverts commit 7fd30c96

* Customize git checkout (try 4)

* Customize git checkout (try 5)

* Customize git checkout (try 6)

* Customize git checkout (try 7)

* Customize git checkout (try 8)

* Customize git checkout (try 9)

* Customize git checkout (try 10)

* Customize git checkout (try 11)

* Customize git checkout (try 12)

* Add cache action

* Fix branch

* Revert "Fix branch"

This reverts commit 69962b0d

* Name all steps

* Fix step name

* Fix step sintax

* Fix CI name

* Fix branch

* Fix cache action

* Fix cache action (try 2)

* Fix branch trigger

* Upgrade Grgit to version 3.3

* Replaced Grgit with gradle-android-git-version

* Fix load of keystore.properties

* Fetch full history and tags from Git

* Add workflow for releases

* Trigger push builds on develop and master branches only

* Fix trigger push builds on develop and master branches only
2021-02-21 19:41:45 +01:00
dependabot-preview[bot]
fcdd116b20 Bump firebase-bom from 26.4.0 to 26.5.0 (#313)
Bumps firebase-bom from 26.4.0 to 26.5.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-02-12 14:28:19 +01:00
dependabot-preview[bot]
8f8cfea110 Bump material from 1.2.1 to 1.3.0 (#312)
Bumps [material](https://github.com/material-components/material-components-android) from 1.2.1 to 1.3.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.2.1...1.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-02-05 16:08:38 +01:00
dependabot-preview[bot]
0c6419577b Bump firebase-bom from 26.3.0 to 26.4.0 (#311)
Bumps firebase-bom from 26.3.0 to 26.4.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-01-29 14:23:50 +01:00
dependabot-preview[bot]
afc3d2c390 Bump google-services from 4.3.4 to 4.3.5 (#310)
Bumps google-services from 4.3.4 to 4.3.5.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-01-29 14:04:58 +01:00
dependabot-preview[bot]
3dee123b8d Bump gradle from 4.1.1 to 4.1.2 (#309)
Bumps gradle from 4.1.1 to 4.1.2.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-01-20 18:39:44 +01:00
dependabot-preview[bot]
016784a47b Bump firebase-bom from 26.2.0 to 26.3.0 (#308)
Bumps firebase-bom from 26.2.0 to 26.3.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-01-17 20:23:42 +01:00
09f4bd924e Merge tag '1.5.7' into develop
1.5.7
2020-12-19 13:33:47 +01:00
aa371a26fb Merge branch 'release/1.5.7' 2020-12-19 13:33:39 +01:00
458e12ca17 Fix apksigner input ak 2020-12-19 13:26:54 +01:00
eed9ab9ad6 Merge tag '1.5.7' into develop
1.5.7
2020-12-19 13:18:33 +01:00
6a7b84196a Merge branch 'release/1.5.7' 2020-12-19 13:18:27 +01:00
97b2b3673d Fix apksigner path 2020-12-19 13:01:14 +01:00
d356ed757d Merge tag '1.5.7' into develop
1.5.7
2020-12-19 12:53:04 +01:00
a53b5634d0 Merge branch 'release/1.5.7' 2020-12-19 12:52:56 +01:00
71bf74c890 Revert "Update signing step"
This reverts commit 7f1d9f05
2020-12-19 12:46:27 +01:00
d745608232 Update signing step 2020-12-19 12:39:08 +01:00
078e3d9f60 Fix zipalign step 2020-12-19 11:40:17 +01:00
5cb073552f Revert "Fix zipalign path in Travis CI"
This reverts commit e33acdeb
2020-12-19 11:16:29 +01:00
4971133501 Merge tag '1.5.7' into develop
1.5.7
2020-12-19 10:32:46 +01:00
e34ccee121 Merge branch 'release/1.5.7' 2020-12-19 10:32:39 +01:00
555a8daae2 Fix zipalign path in Travis CI 2020-12-19 10:26:18 +01:00
e101021374 Merge tag '1.5.7' into develop
1.5.7
2020-12-19 10:13:07 +01:00
29e2738660 Merge branch 'release/1.5.7' 2020-12-19 10:12:57 +01:00
6d8bd8aee6 Disable indoor location module (#307) 2020-12-19 10:05:57 +01:00
dependabot-preview[bot]
663b947f98 Bump firebase-bom from 26.1.1 to 26.2.0 (#306)
Bumps firebase-bom from 26.1.1 to 26.2.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-12-17 19:42:47 +01:00
c988f0b3af Fix APK signing 2020-12-15 21:28:29 +01:00
598923db7a Disable cleanup in Travis CI 2020-12-14 20:31:30 +01:00
b03c0ac1ad Merge tag '1.6.0' into develop
1.6.0
2020-12-14 20:24:59 +01:00
c2eae55f09 Merge branch 'release/1.6.0' 2020-12-14 20:24:52 +01:00
d7c6eb3937 Enable skip_cleanup in Travis CI 2020-12-14 20:18:26 +01:00
59b3213f2f Merge tag '1.6.0' into develop
1.6.0
2020-12-14 20:05:59 +01:00
c04ca8ddea Merge branch 'release/1.6.0' 2020-12-14 20:05:52 +01:00
34d91f1e0c Updated deploy token for Travis CI 2020-12-14 19:58:55 +01:00
55d2f6bb25 Merge tag '1.6.0' into develop
1.6.0
2020-12-14 18:51:58 +01:00
c38a6883c6 Merge branch 'release/1.6.0' 2020-12-14 18:51:50 +01:00
1ba6588148 Fix APK release path 2020-12-14 18:45:43 +01:00
57bde5c7fe Merge tag '1.6.0' into develop
1.6.0
2020-12-14 18:33:06 +01:00
db267632d2 Merge branch 'release/1.6.0' 2020-12-14 18:32:58 +01:00
c0e3bc4c63 Fix APK release path 2020-12-14 18:26:05 +01:00
bdf4a656d0 Merge tag '1.6.0' into develop
1.6.0
2020-12-14 18:12:32 +01:00
41e81b6bc2 Merge branch 'release/1.6.0' 2020-12-14 18:11:59 +01:00
39160cb2c8 Release start 2020-12-14 18:05:39 +01:00
90abf17501 Update Build Tools to 30.0.3 2020-12-12 23:41:17 +01:00
c556f23903 Update Build Tools to 30.0.3 2020-12-12 23:29:58 +01:00
dependabot-preview[bot]
3fbcae3c33 Bump firebase-bom from 26.1.0 to 26.1.1 (#304)
Bumps firebase-bom from 26.1.0 to 26.1.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-12-04 09:05:18 +01:00
dependabot-preview[bot]
6c63f1492c Bump firebase-bom from 26.0.0 to 26.1.0 (#303)
Bumps firebase-bom from 26.0.0 to 26.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-13 08:02:51 +01:00
dependabot-preview[bot]
cda35f9995 Bump gradle from 4.1.0 to 4.1.1 (#302)
Bumps gradle from 4.1.0 to 4.1.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-11 09:58:35 +01:00
dependabot-preview[bot]
d9d74d6dfd Bump firebase-bom from 25.13.0 to 26.0.0 (#301)
Bumps firebase-bom from 25.13.0 to 26.0.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-28 18:45:08 +01:00
dependabot-preview[bot]
4ab58545d1 Bump firebase-bom from 25.12.0 to 25.13.0 (#300)
* Bump firebase-bom from 25.12.0 to 25.13.0

Bumps firebase-bom from 25.12.0 to 25.13.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Update SWADroid/build.gradle

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>
2020-10-27 22:43:49 +01:00
e545548862 Update README.md 2020-10-15 18:07:39 +02:00
3df5d9224d Update CHANGELOG and authors (#299)
* Update CHANGELOG

* Update authors
2020-10-14 23:16:57 +02:00
b3a9dc5ad4 Remove firebase-core dependency 2020-10-14 22:19:01 +02:00
bd985c9cf3 Add Firebase dependencies (#298) 2020-10-14 21:10:03 +02:00
Javier Bueno López
ab0898c571 Indoor Location new module (#287)
* Adding icons and text for manage location

* Adding manage location to main menu

* Adding class to manage location

* Adding view layout to manage location

* Share location switch created

* Basic listener added to switch

* Moving manage location to users menu

* Adding icons and text for manage location

* Adding manage location to main menu

* Adding class to manage location

* Adding view layout to manage location

* Share location switch created

* Basic listener added to switch

* Moving manage location to users menu

* Adding elements to indoor_location view

* Improving indoor_location with default text

* Logic to calculate distance

* Trying to connect to the API.

* Adding model to location distance

* Changing textview to listview

* Making request to MacStore API to get location of Mac

* Search user menu

* New designs manage location activity

* Connecting to swad api

* Connection to swad api working

* Location history showing up in activity

* Adding button and user code to find user

* Sorting locations and saving only one

* Implementing GetLastLocation API method

* Adding location preferences translations

* Adding translations to location menu toast

* Return without error from searching user

* Removing warning

* Adding translations

* Changing permissions

* Changing module name

* Making location serializable

* Changing deprecated implementation

* Cleaning code and refactoring deprecated classes

* Changing location name in menu

* Scanning all wifi networks

* Hiding white activities

* Showing more information in each location

* Fixing bug when searching user

* Fixing available networks sort

* Using roomCode instead of institutionCode

* Changes scheduling tasks

* Deleting dependencies

* Deleting useless import

* Getting correct mac

* Requesting permissions to user

* LocationTimeStamp inherits from Location

* Using new variable to soap object

* Setting const defaultValue

* Extracting common lines on update location click

* Extracting common lines on activity result

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Using functions to reduce code

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/GetLastLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/GetLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/GetLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/GetLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/IndoorLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Constant moved to class level

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/SendCurrentLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/SendCurrentLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/indoorlocation/SendCurrentLocation.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values-es/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/values/strings.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Adding dependency to preferences

* Changing indoor location title text

* Showing text when no location is found

* Allow always location option

* Adding new button to show mac

* Find mac button added and working

* Stopping scheduler when user can't be located

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/model/LocationTimeStamp.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/model/LocationTimeStamp.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/java/es/ugr/swad/swadroid/model/LocationTimeStamp.java

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update SWADroid/src/main/res/xml/preferences.xml

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>

* Update material version to 1.2.1

* Updating plugin

* Fixing API permissions

* Update gradle/wrapper/gradle-wrapper.properties

* Minor code style improvements

* Fix IndexOutOfBoundsException

* Add default locale to SimpleDateFormat

* Use complete Gradle distribution

* Update authors

* Update CHANGELOG

* Remove unused import

* Minor code style improvements

Co-authored-by: javibl8@correo.ugr.es <javier.bueno@jitkey.com>
Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>
2020-10-14 19:50:20 +02:00
dependabot-preview[bot]
df40491a2f Bump gradle from 4.0.2 to 4.1.0 (#297)
* Bump gradle from 4.0.2 to 4.1.0

Bumps gradle from 4.0.2 to 4.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Update Gradle version to 6.6.1

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Amab <juanmi1982@gmail.com>
2020-10-13 17:05:33 +02:00
dependabot-preview[bot]
0618081fda Bump firebase-core from 17.5.0 to 17.5.1 (#296)
Bumps firebase-core from 17.5.0 to 17.5.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-07 08:32:55 +02:00
dependabot-preview[bot]
a71911cf69 Bump gradle from 4.0.1 to 4.0.2 (#295)
Bumps gradle from 4.0.1 to 4.0.2.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-07 08:25:41 +02:00
dependabot-preview[bot]
9546faeb9e Bump google-services from 4.3.3 to 4.3.4 (#294)
Bumps google-services from 4.3.3 to 4.3.4.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-30 07:48:32 +02:00
dependabot-preview[bot]
7a7de175ff Bump core from 3.4.0 to 3.4.1 (#293)
Bumps [core](https://github.com/zxing/zxing) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/zxing/zxing/releases)
- [Changelog](https://github.com/zxing/zxing/blob/master/CHANGES)
- [Commits](https://github.com/zxing/zxing/compare/zxing-3.4.0...zxing-3.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-30 07:38:55 +02:00
58240541f7 Use the standard directory for file downloads. Fixes #291 (#292)
* Use the standard directory for file downloads. Fixes #291

* Use OS independent file separator
2020-09-29 18:19:34 +02:00
dependabot-preview[bot]
086a70421f Bump commons-io from 2.7 to 2.8.0 (#289)
Bumps commons-io from 2.7 to 2.8.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-18 16:47:57 +02:00
8da102888c Fix Travis CI encrypted vars for Pull Requests (#288)
* Fix Travis CI encrypted vars for Pull Requests

* Fix Travis CI encrypted vars for Pull Requests (try 2)

* Fix misspelled command

* Double quote vars in shell scripts
2020-09-06 12:30:16 +02:00
95472cd80e Update Build Tools to 30.0.2 (#286) 2020-08-18 18:34:32 +02:00
dependabot-preview[bot]
785a255648 Bump firebase-core from 17.4.4 to 17.5.0 (#285)
Bumps firebase-core from 17.4.4 to 17.5.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-14 08:27:46 +02:00
dependabot-preview[bot]
99bfc45b79 Bump appcompat from 1.1.0 to 1.2.0 (#284)
Bumps appcompat from 1.1.0 to 1.2.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-08-06 17:13:19 +02:00
84f25e646c Update Build Tools to 30.0.1 (#283) 2020-07-20 21:37:18 +02:00
dependabot-preview[bot]
acb8d33992 Bump gradle from 4.0.0 to 4.0.1 (#282)
Bumps gradle from 4.0.0 to 4.0.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-15 15:57:58 +02:00
dependabot-preview[bot]
eeac30121a Bump firebase-core from 17.4.3 to 17.4.4 (#281)
Bumps firebase-core from 17.4.3 to 17.4.4.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-07-07 07:20:40 +02:00
9e5d0b281e Add support for Android 10.0+ (R) (#280) 2020-06-25 18:27:31 +02:00
dependabot-preview[bot]
797a098c58 Bump firebase-core from 17.4.2 to 17.4.3 (#279)
Bumps firebase-core from 17.4.2 to 17.4.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-06-05 07:36:27 +02:00
c27366211e Update Gradle plugin to 4.0.0 (#278) 2020-05-28 19:42:36 +02:00
dependabot-preview[bot]
7785300490 Bump commons-io from 2.6 to 2.7 (#277)
Bumps commons-io from 2.6 to 2.7.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-28 18:01:43 +02:00
dependabot-preview[bot]
d83b13ed38 Bump firebase-core from 17.4.1 to 17.4.2 (#276)
Bumps firebase-core from 17.4.1 to 17.4.2.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-22 06:59:25 +02:00
dependabot-preview[bot]
5acec1cc2b Bump firebase-core from 17.4.0 to 17.4.1 (#275)
Bumps firebase-core from 17.4.0 to 17.4.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-08 07:45:01 +02:00
b9e146bc0e Add support for Android R (#274)
* Add support for Android R

* Fix Travis CI config
2020-05-07 19:26:13 +02:00
dependabot-preview[bot]
abe6bcea29 Bump firebase-core from 17.3.0 to 17.4.0 (#273)
Bumps firebase-core from 17.3.0 to 17.4.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-04-24 07:51:03 +02:00
76aee54566 Update Gradle plugin to 3.6.3 2020-04-18 08:29:46 +02:00
a1ccf4cc81 Update Gradle plugin to 3.6.2 2020-04-01 06:25:29 +02:00
dependabot-preview[bot]
f770a2edb2 Bump firebase-core from 17.2.3 to 17.3.0 (#272)
Bumps firebase-core from 17.2.3 to 17.3.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-31 07:40:49 +02:00
9a4aff77ea Update Gradle plugin to 3.6.1 (#271) 2020-03-01 11:07:06 +01:00
dependabot-preview[bot]
ffdc94eac2 Bump firebase-core from 17.2.2 to 17.2.3 (#270)
Bumps firebase-core from 17.2.2 to 17.2.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-28 08:42:17 +01:00
dependabot-preview[bot]
7f76620dd6 Bump gradle from 3.5.3 to 3.6.0 (#269)
Bumps gradle from 3.5.3 to 3.6.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-25 17:04:05 +01:00
bf9cb29d65 Update README.md 2020-02-21 19:51:19 +01:00
87a094c845 Update Android Build Tools (#268)
* Update Build Tools to 29.0.3

* Update README.md

* Update README.md
2020-02-21 19:47:46 +01:00
dependabot-preview[bot]
6524137cea Bump firebase-core from 17.2.1 to 17.2.2 (#267)
Bumps firebase-core from 17.2.1 to 17.2.2.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-15 06:32:57 +01:00
dependabot-preview[bot]
780bbc8c06 Bump zxing-android-embedded from 4.0.2 to 4.1.0 (#266)
* Bump zxing-android-embedded from 4.0.2 to 4.1.0

Bumps zxing-android-embedded from 4.0.2 to 4.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Upgrade Gradle distribution from 5.6.3 to 6.0.1

* Set Java compatibility to 1.8 version

Co-authored-by: Juan Miguel Boyero Corral <juanmi1982@gmail.com>
2020-01-08 19:36:25 +01:00
dependabot-preview[bot]
c94c913b2b Bump gradle from 3.5.2 to 3.5.3 (#265)
Bumps gradle from 3.5.2 to 3.5.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-09 23:26:09 +01:00
33bc0a5160 Update README.md 2019-11-20 19:08:49 +01:00
dependabot-preview[bot]
9c0b2dcf1a Bump google-services from 4.3.2 to 4.3.3 (#264)
Bumps google-services from 4.3.2 to 4.3.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-14 19:36:20 +01:00
123920777c Fixed Travis CI path for APK release 2019-11-05 21:34:14 +01:00
913fa1fa1a Merge tag '1.5.6' into develop
1.5.6
2019-11-05 21:02:44 +01:00
dd9e7ab430 Merge branch 'release/1.5.6' 2019-11-05 21:02:32 +01:00
5a68269480 Updated CHANGELOG 2019-11-05 21:02:16 +01:00
f045974e6e Rollcall: Fixed SWADroid allows multiple simultaneous submissions of the attendance list (#263)
* Fix #262

* Updated CHANGELOG

* Rollcall: Fixed The default image is not displayed if the user does not have a photo
2019-11-05 20:53:15 +01:00
91e2043058 Update gradle version (#261) 2019-11-04 19:57:17 +01:00
9fe9322c80 Update README.md 2019-10-26 18:41:27 +02:00
f184c7ccff Added codecov token 2019-10-26 18:33:16 +02:00
f7d1776f96 Update README.md 2019-10-26 18:13:48 +02:00
dependabot-preview[bot]
197db5b5e4 Bump firebase-core from 17.2.0 to 17.2.1 (#260)
Bumps firebase-core from 17.2.0 to 17.2.1.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-26 18:09:40 +02:00
dependabot-preview[bot]
fb1f295541 Bump zxing-android-embedded from 3.6.0 to 4.0.2 (#259)
Bumps zxing-android-embedded from 3.6.0 to 4.0.2.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-26 17:59:45 +02:00
a64e613d7e Merge remote-tracking branch 'origin/develop' into develop 2019-10-26 17:48:05 +02:00
6819890a92 Updated minSdkVersion to 24 (Android 7.0) 2019-10-26 17:47:53 +02:00
dependabot-preview[bot]
1ac62d7351 Bump gson from 2.8.5 to 2.8.6 (#258)
Bumps [gson](https://github.com/google/gson) from 2.8.5 to 2.8.6.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/gson/compare/gson-parent-2.8.5...gson-parent-2.8.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-26 17:38:46 +02:00
e417595006 Updated dependencies 2019-10-26 17:23:14 +02:00
5402ad1e60 Update README.md 2019-10-26 17:16:37 +02:00
153b50c391 Updated Travis CI references (#252)
* Updated build dependencies

* Updated Travis CI references
2019-07-09 22:21:57 +02:00
3ed98be1df Merge tag '1.5.5' into develop
1.5.5
2019-07-08 19:52:15 +02:00
65495a2ea1 Merge branch 'release/1.5.5' 2019-07-08 19:52:04 +02:00
dd58d7a98f Updated CHANGELOG 2019-07-08 19:51:05 +02:00
6444197b8b Fix CHANGELOG typos (#251) 2019-07-08 19:39:19 +02:00
0b5b8a8017 Disable CHANGELOG popup on application upgrade (#250) 2019-07-08 18:44:37 +02:00
ef81ab02d6 Update Firebase dependency (#249) 2019-07-08 18:05:57 +02:00
52230f8f73 Migrate to android-Q (#248) 2019-06-06 20:54:01 +02:00
3a9ced6c9f Switch from Google Analytics to Firebase (#247)
* Switch from Google Analytics to Firebase

* Fix google-services.json.enc path

* Fix google-services.json.enc path (try 2)

* Fix google-services.json.enc path (try 3)

* Fix google-services.json.enc path (try 4)

* Fix google-services.json.enc path (try 5)

* Fix google-services.json.enc path (try 6)

* Fix Android Build Tools version

* Fix BuildConfigField SWAD_APP_KEY
2019-05-02 18:38:45 +02:00
6e6a2da771 Update dependencies (#246) 2019-03-31 16:52:39 +02:00
ea1ff1f2a9 Support for Android 9 (#245)
* Update Android Build Tools and dependencies

* Update Android dependencies
2018-09-25 20:14:56 +02:00
68c7958812 Update issue templates (#244)
* Update issue templates

* Remove old issue template

* Refactor templates
2018-09-06 19:18:42 +02:00
76ded375ff Update gradle plugin (#243)
* Update gradle plugin

* Remove ignored file
2018-06-08 22:15:59 +02:00
fbbd27efcf Update SDK to final release 28 (#242)
Update SDK to final release 28
2018-06-07 18:38:35 +02:00
45d747a294 Add Slack integration with Travis CI (#241) 2018-05-18 16:51:24 +02:00
fda404aaac Enable APK Autodeploy in Travis CI (#240)
Enable APK Autodeploy in Travis CI
2018-05-18 00:51:10 +02:00
3381e18458 Update API version to Android P Preview (#239)
* Upgraded to Android P

* Fix Travis CI (Try 1)

* Fix Travis CI (Try 2)

* Fix Travis CI (Try 3)

* Fix Travis CI (Try 4)

* Fix Travis CI (Try 5)

* Fix Travis CI (Try 6)

* Fix Travis CI (Try 7)

* Fix Travis CI (Try 8)

* Revert Fix Travis CI (Try 8)

* Minor change

* Add parsing of the lint report in Travis CI

* Refactor Gradle config

* Add TODO comments
2018-05-16 22:12:42 +02:00
222e9a1c15 Updated dependencies 2018-05-02 18:32:41 +02:00
16d1fec3af Updated README 2018-04-21 22:23:10 +02:00
5641398ed0 Updated issue template 2018-04-18 20:21:05 +02:00
5f1a87b7b8 Create ISSUE_TEMPLATE.md 2018-04-18 20:15:49 +02:00
589ae7564c Merge pull request #237 from Amab/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2018-04-18 16:58:14 +02:00
388c593a3c Create CODE_OF_CONDUCT.md 2018-04-18 16:46:37 +02:00
f45f6412f1 Create PULL_REQUEST_TEMPLATE.md 2018-04-18 16:44:35 +02:00
0713cedfde Create CONTRIBUTING.md 2018-04-18 16:42:12 +02:00
b540008fb3 Updated dependencies 2018-04-16 17:16:17 +02:00
5d86ae58c4 Updated dependencies 2018-04-03 13:04:42 +02:00
511eeceaf2 Merge tag '1.5.4' into develop
1.5.4
2018-02-25 13:32:02 +01:00
6c8f705011 Merge branch 'release/1.5.4' 2018-02-25 13:31:52 +01:00
299f8d9c8a Bumped version 2018-02-25 13:30:45 +01:00
41186df469 Merge pull request #236 from Cadiducho/groupNameFix
Fix #235
2018-02-25 13:19:47 +01:00
Dani Matilla
6f3f2ca020 Fix behaviour with multiple choices 2018-02-20 13:11:49 +01:00
122 changed files with 1043 additions and 13749 deletions

167
.drone.yml Normal file
View File

@ -0,0 +1,167 @@
kind: pipeline
type: docker
name: debug
steps:
- name: restore-cache
image: drillster/drone-volume-cache
settings:
restore: true
mount:
- .gradle/caches
- .gradle/wrapper
volumes:
- name: cache
path: /cache
- name: fetch-tags
image: drone/git:latest
commands:
- git fetch --tags
- name: build
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
environment:
GRADLE_USER_HOME: /drone/src/.gradle
commands:
# Build
- ./gradlew buildDebug
- name: test
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
privileged: true
environment:
GRADLE_USER_HOME: /drone/src/.gradle
commands:
# Create and run emulator
- echo "no" | avdmanager --verbose create avd --force --name "generic_34" --package "system-images;android-34;google_apis;x86_64" --tag "google_apis" --abi "x86_64"
- emulator -avd "generic_34" -no-window -no-audio -no-boot-anim -netdelay none -no-snapshot -wipe-data -partition-size 1024 &
# Wait for emulator to be ready
- android-wait-for-emulator.sh
# Run tests
- ./gradlew connectedCheck -i
- name: assemble
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
environment:
GRADLE_USER_HOME: /drone/src/.gradle
commands:
# Assemble APK
- ./gradlew assembleDebug
#- name: code-analysis
# image: drone-plugins/sonarqube-scanner:latest
# settings:
# sonar_host:
# from_secret: sonar_host
# sonar_token:
# from_secret: sonar_token
- name: rebuild-cache
image: drillster/drone-volume-cache
settings:
rebuild: true
mount:
- .gradle/caches
- .gradle/wrapper
volumes:
- name: cache
path: /cache
volumes:
- name: cache
host:
path: /share/CACHEDEV1_DATA/homes/admin/drone/cache
trigger:
event:
- push
- pull_request
---
kind: pipeline
type: docker
name: release
steps:
- name: restore-cache
image: drillster/drone-volume-cache
settings:
restore: true
mount:
- .gradle/caches
- .gradle/wrapper
volumes:
- name: cache
path: /cache
- name: fetch-tags
image: drone/git:latest
commands:
- git fetch --tags
- name: build
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
environment:
GRADLE_USER_HOME: /drone/src/.gradle
commands:
# Build
- ./gradlew buildRelease
- name: assemble
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
environment:
GRADLE_USER_HOME: /drone/src/.gradle
RELEASE_KEY_ALIAS:
from_secret: release_key_alias
RELEASE_KEY_PASSWORD:
from_secret: release_key_password
RELEASE_KEYSTORE_BASE64:
from_secret: release_keystore_base64
RELEASE_STORE_FILE:
from_secret: release_store_file
RELEASE_STORE_PASSWORD:
from_secret: release_store_password
commands:
# Encrypt keystore & set $RELEASE_KEYSTORE_BASE64 environment variable in Drone CI
# - openssl base64 -A -in keystore.jks
# Decrypt keystore
- echo $RELEASE_KEYSTORE_BASE64 | base64 -d > SWADroid/keystore.jks
# Assemble APK
- ./gradlew assembleRelease
- name: gitea-release
image: plugins/gitea-release
settings:
api_key:
from_secret: gitea_api_key
base_url: https://git.cuernodehipnos.es
files:
- SWADroid/build/outputs/apk/release/SWADroid-release.apk
- SWADroid/build/outputs/apk/release/SWADroid-release.apk.idsig
checksum:
- md5
- sha1
- sha256
- sha512
- adler32
- crc32
- name: rebuild-cache
image: drillster/drone-volume-cache
settings:
rebuild: true
mount:
- .gradle/caches
- .gradle/wrapper
volumes:
- name: cache
path: /cache
volumes:
- name: cache
host:
path: /share/CACHEDEV1_DATA/homes/admin/drone/cache
trigger:
event:
- tag

View File

@ -3,7 +3,7 @@
*Before opening a pull request*, consider:
- Is the change important and ready enough to ask the community to spend time reviewing?
- Have you searched for existing, related GitHub issues and pull requests?
- Have you searched for existing, related Gitea issues and pull requests?
- Is the change being proposed clearly explained and motivated?
When you contribute code, you affirm that the contribution is your original work and that you

View File

@ -7,4 +7,4 @@
(Please explain how this patch was tested. E.g. unit tests, integration tests, manual tests)
(If this patch involves UI changes, please attach a screenshot; otherwise, remove this)
Please review https://github.com/Amab/SWADroid/blob/develop/CONTRIBUTING.md before opening a pull request.
Please review https://git.cuernodehipnos.es/Marown/SWADroid/src/branch/main/.gitea/CONTRIBUTING.md before opening a pull request.

View File

@ -1,36 +0,0 @@
name: Android CI for builds
on:
push:
branches: [ develop, master ]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Git repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Fetch Git tags
run: git fetch --tags
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache local Gradle repository
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build

View File

@ -1,79 +0,0 @@
name: Android CI for releases
on:
push:
# Pattern matched against refs/tags
tags:
- '*' # Push events to every tag
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout Git repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Fetch Git tags
run: git fetch --tags
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache local Gradle repository
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build -Pbuild=prod
- name: Sign artifact
id: signArtifact
uses: r0adkll/sign-android-release@v1
with:
releaseDirectory: app/build/outputs/apk/release/release
alias: ${{ secrets.ALIAS }}
signingKeyBase64: ${{ secrets.KEYSTORE }}
keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.KEY_PASSWORD }}
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: Release artifact
path: app/build/outputs/apk/release/release/SWADroid-*.apk
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: Save name of Artifact
id: set-result-artifact
run: |
ARTIFACT_PATHNAME_APK=$(ls app/build/outputs/apk/release/release/*.apk | head -n 1)
ARTIFACT_NAME_APK=$(basename $ARTIFACT_PATHNAME_APK)
echo "ARTIFACT_NAME_APK is " ${ARTIFACT_NAME_APK}
echo "ARTIFACT_PATHNAME_APK=${ARTIFACT_PATHNAME_APK}" >> $GITHUB_ENV
echo "ARTIFACT_NAME_APK=${ARTIFACT_NAME_APK}" >> $GITHUB_ENV
- name: Upload Artifact Assets
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ env.ARTIFACT_PATHNAME_APK }}
asset_name: ${{ env.ARTIFACT_NAME_APK }}
asset_content_type: application/zip

View File

@ -1,53 +0,0 @@
os: linux
dist: xenial
language: android
jdk: oraclejdk8
env:
global:
- ANDROID_API=30
- ANDROID_BUILD_TOOLS=30.0.3
- secure: eY3bGKw4jZ+HHkkMBZHiL2dhcz+RJYHib0WC77SSVHLJcCg63pBvs420i4rjNQHycMs+PhRSlR79jdglDTm8svphhRjSts6VMkHDxObwJIyLF8vAZ0PfjhqfOXO+4+Fx6pRIjwM7cBMOQrDfSimJHRB+z/f2AJfUIsaMSlltGVya7nmrLY/fO4dtl4wPnejslj3mhnBAxr+a2Or978RwI2TMpxBovHZKFT/46wJTcMzKXGdXU64M8nmQmpcKHeIKIBiR4g+A2tahC+Us4tFxxoTDd3R+IAzj7Gvjd5JuMlYmQ3quRv2M08u9OJNiT14LpDXy19fZKdw/QNHg3S8JVis8kJDkv6z4HyZXTIBgISZpCZZti04GP29Lj+1f4ISRFc6uxankDuRgfX8ucsxoEPJVq3PfJlpTdP7wjlQtEGv0HF/3MNNyruNbLHFiCgHOANwEOX44INtw6XylPEftmw4y4ptntFG3VXyV1Zi+732Qe4b2QNTbvLPrsmkCRKzo59vKKAzBBhvYvFVITcWbySqdx9/n1H25SRL2Q96nPGQSQyBF6obzzFcjMKkknPle1PXvAfb171964cdIK6/zo9rh/ZCL3+gAKZibmGWvbeztWYl5ON8B8x8mgLO/qgPIotY+aqwmsY06pKrqi6adYZacMF+UgtbLJlhnird6ugk=
- secure: EmcSyXk/5pEJhbRX9DSFzhQGYvGaYdxjDuQwmLuxUGitGpFQZbWexTAK/l0LLcIRsiSmucY7KJgOpL7I6odh2kVUZedarj8/5K1P69ljDDB7bfG8jyOLZvHJ1JTZRuKvUnT846zQwQWTnLXF9N4LaQ86FVqSW2bGHqptIivEjDEVh78V3g4PDsbX5aQ5LjTlSn7bezu9chpVS0fnRlqjAa6U2kUwUt+DDaSHEOs35Z89jT7JoonGFrMsyA7S26CQhOBYE3w76AllIea+MWzPJX3V364ZIzPBnQAkCz02oVI3n+LHZkzUCYHkY8DXWXNy6+/sulFa6L1v6bt8DzF1vwJ+nTNVqmqSDYBe2s1qAUZ+4o8l/THMndxC11LjbbEExG4ekBRFvRsOOf0pBps3Yr4ry27gaj4+9Ap2JCKKOQwm0izh48AJiy0Y8pzIzTO5wB5B7a4czLJmzaNWkPVXw4lKg2ldJ4sd6EBqUZqG2vRmN6VwHb8gHFNaQTH3feBRhYTpkv1wWUuhvclNn5yoZzcSxMT/b8d89e5DahoBYMW48c6jb5wL/EoY3bHp3mjtnTW8oIIjyZK8FjYX+8IqeEoue8bDDqNUN71xmRvp+0CX1iXnfgUeDWnYhXHTewOlJu6i509wGrZPxYjgwAdnpfTyGXPq7Vin9CkNHMw9fbA=
- secure: WS7Jgz0L0aMEZmg4/HxPb9nO7oER9z23n8n508UVQ0DyKL92UPhfVol7+Cob8zuO5SJl5TPOh58gd/C0Prq8t5q3mwlDA9buhnb1uef7pwZOFzQOF0o8RuPSpxLgu8tFlDooWrG9oxZObXwh84TXGX7zgoiWr9Y318qsQSHCiv9Ue9kgJxkjk9wVanJws7zHWAevfFzyoEvqtkDTqNie4RJbMEOdeX+TyUpc77Si2UpAC23Mpl8q+qZr32cgxk3MzSdhJk2C3Vz5MS6LBZ7ynyv+em+/vz2RBlFLetrcknHY8lgE060itWcns6Pj/8tv2SQbJptVFToXbfay/EVleApojHG4w5DFDzQt8a3Az0lBnqOxv3BiAPRcr49/A08qXAKh30p6YBiSvVd8zK+MZoMoj2dDQhdXb72nv0yHZmzkiaQEOGnsBD4Gt3epn/KoJke3W0ffBZOfJNScACW0Gta2XLImZsekb4sjfOF84HrISSMiXunlLpgtcC4C3Pn9VV/6+uciIMqMFDYkJMe2gyRNA2vSyZ61n/ioTLOHYzhYHjZUXB4MOlonYTiFuF4HmVVHO2J9CpOdFFP7hrkWK3HzvcQm9k8dxUkuKDoOlRb+CSlrEZO24V+TaY2DDr1bcitA77VJp90Cz2RpLC3tvSvThgY2VNk+OEbeSrP5DNA=
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -rf $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- "$HOME/.gradle/caches/"
- "$HOME/.gradle/wrapper/"
- "$HOME/.android/build-cache"
before_install:
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./.travis/run_on_non_pull_requests.sh; fi'
- yes | sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"
- yes | sdkmanager "platform-tools"
- yes | sdkmanager "tools"
- yes | sdkmanager "platforms;android-${ANDROID_API}"
- yes | sdkmanager "extras;android;m2repository"
- yes | sdkmanager --list
- chmod +x gradlew
script:
- "./gradlew clean test build connectedCheck -Pbuild=prod"
after_failure: cat $TRAVIS_BUILD_DIR/SWADroid/build/reports/lint-results.xml
before_deploy:
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./.travis/run_on_before_deploy.sh; fi'
- "cd $TRAVIS_BUILD_DIR/SWADroid/build/outputs/apk/prod"
- "${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}/apksigner sign --ks ${TRAVIS_BUILD_DIR}/keystore.jks --ks-pass pass:$storepass --key-pass pass:$keypass --out SWADroid-release.apk SWADroid-prod-unsigned.apk"
- "${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}/apksigner verify SWADroid-release.apk"
deploy:
provider: releases
token:
secure: "IzDdPlY0KyCF1TUdUUeYYU/vBCNmJpxZ/w3B7QeVd1BhyL947jiyJpdEckJhMB7z4MWt5IHRGOXU2pYGxoJC86ES/33Acn91eo22FuaeRmIwjxL9yczae5KmakrSUA8iDjubfjLeWRy/MXAIGJ9qAuLOreAe/xGEoAILCxlJMjANw0AuJG+dBabBc2pt67bjaJO4WNFCkfDK9AC8XGJPXlwWB4L1IDwPQLBWEVRyhf3Ac1Om0lzf7kF240xCcR/cmLqOXArU8iRr3n30HaRQOBibCMjnds7etA+Fs1HiyB8B5gqMXpUM02hI35R9GHOrgqO/+N5lNMdDveLjLhwjPXrkIoWrzI/QifXxnnpa/bCqo4knjy7B8CGAZ5Z3w9Hq/zN2YAkLUIMyl9z1b2LzN9pzAh5SrtuRCBJKUfB7I/qv+wEVj8vrFrZDnMuQntAfBtKu6bD0L/lupkKD31L1i3G9bG3vSaaGauQGqi2/ORyPtLVhgH7LQI7gMzghi2DP1BhgrJCUHK4O7dky0klr0spfEiOLKhZQhzVosjXySh2CLzo/pqkCzWCjr6ozvzyc2VTxh5EvheJvw1gxl5eGlTDzCIu4U9ebQ5X5jXm7uec2c9tn9IYxBjASC7ay9x6UuM7khdbqg4RQ0JLo/6032ZIkxuloZMGF8P1jzHHCtko="
file: "$TRAVIS_BUILD_DIR/SWADroid/build/outputs/apk/prod/SWADroid-release.apk"
cleanup: false
skip_cleanup: true
name: SWADroid $TRAVIS_TAG
release_notes: Automated release from Travis CI.
target_commitish: "$TRAVIS_COMMIT"
on:
tags: true
repo: Amab/SWADroid
branch: master
notifications:
slack:
secure: FDRqQsWyWvSg3uXYV1jtxh209yYdE9wqMRx2Jmf9ivRMowSDqAfLaOD8hlAjD/DnBCBhVpSkOzT4+treByU1qpLXcWBpewl1GukK3jD6AoqD4Xtmp3xOAJsG1BvqeYp48Q95lZFgZ8WxV2IXO4/rAi3GcCDKVYGs3fEEwk/aVEfFDyHE7oT+mruZqrFHbwcPbObTucJWjFLu+VdCSdJ6HTN/gm/04TVg5ox0fqeyxqyAxW3QOEu/2EUOZ78ijrab7+Cn32KluoTlTDJY0+iSszYQll08+g2LsJruyzqWJzp8y0jZMs23e63ge16WrnzCHknTFIUXNG8/OVwCb2gsBA+RIchqEWLiKuOPtkSTZoMCqulDPYVOdGBJbv1CdJW4TKNmnLfsA9EMHlcv+50zcz7rq9115i4qPsous0gKw8Bc+tSL3S28YP81J8UmvTeQjAPgC7iQIeXHNvPpM62hP2v/sK9BUhmsfrFopeQGPVY5vLKXvAF+dJHuyUNK1T17iVyxa55D9Et6QeHqLsHgLKUx22RW128a0FuaFwD1EIKNuj0q+Fn8DNcXtyHoKVdGCD/K3nbDPwx+IsIvHTJfPwDL/cX8eXj+ggK32nuJVQwXLDMloz3xFKe+wO19/7kMzyKQD4Brq4xX2qQ3fiE5uRj6BIxJ2q8wuey3uuJMPVA=

View File

@ -1,2 +0,0 @@
#!/bin/bash
openssl aes-256-cbc -K "$encrypted_855ad244b8b2_key" -iv "$encrypted_855ad244b8b2_iv" -in keystore.jks.enc -out keystore.jks -d

View File

@ -1,2 +0,0 @@
#!/bin/bash
openssl aes-256-cbc -K "$encrypted_b7f76037f2f7_key" -iv "$encrypted_b7f76037f2f7_iv" -in "$TRAVIS_BUILD_DIR/SWADroid/src/prod/google-services.json.enc" -out "$TRAVIS_BUILD_DIR/SWADroid/src/prod/google-services.json" -d

View File

@ -7,14 +7,6 @@ Android client for e-learning platform [![SWADroid](https://openswad.org/logo/sw
[![SWADroid](http://upload.wikimedia.org/wikipedia/commons/c/c8/Farm-Fresh_twitter_1.png)](http://twitter.com/SWADroid)[![SWADroid](http://upload.wikimedia.org/wikipedia/commons/4/4d/Farm-Fresh_facebook.png)](https://www.facebook.com/SWADroid)[![SWADroid](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Telegram_Messenger.png/35px-Telegram_Messenger.png?uselang=es)](https://telegram.me/swadroid)[![SWADroid](https://s.w.org/about/images/logos/wordpress-logo-32-blue.png)](http://swadroid.wordpress.com)
CI Status
---------
[![Releases](https://img.shields.io/github/release/Amab/SWADroid.svg)](https://github.com/Amab/SWADroid/releases/latest)
[![Build Status Master](https://github.com/Amab/SWADroid/actions/workflows/android-build.yml/badge.svg?branch=master)](https://github.com/Amab/SWADroid/actions/workflows/android-build.yml/badge.svg?branch=master)
[![libraries.io](https://img.shields.io/librariesio/github/Amab/SWADroid.svg)](https://libraries.io/github/Amab/SWADroid)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/41ded03ee87d4ceaaafc976a7529bcf3)](https://www.codacy.com/manual/Amab/SWADroid?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Amab/SWADroid&amp;utm_campaign=Badge_Grade)
Copyright and License
---------------------
@ -55,8 +47,6 @@ Contributing
SWADroid is an open source project. I encourage contributions.
The Github team has also been kind enough to write up some great [documentation](https://help.github.com/articles/about-pull-requests/) on working with pull requests.
### Notice
Requests to the SWAD web service require an API key. This API key has not been uploaded to the repository for security reasons.

View File

@ -1,8 +1,9 @@
import io.github.reactivecircus.appversioning.SemVer
plugins {
id 'com.gladed.androidgitversion' version '0.4.14'
id("io.github.reactivecircus.app-versioning") version "1.3.1"
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
//return a BuildConfigField from a properties file.
def static getBuildConfigField(String property){
@ -20,44 +21,35 @@ def static getBuildConfigField(String property){
return value
}
def build_param = "${build}"
appVersioning {
overrideVersionCode { gitTag, providers, variantInfo ->
//SemVer-based version code
def semVer = SemVer.fromGitTag(gitTag)
semVer.major * 1000000 + semVer.minor * 1000 + semVer.patch
if (build_param != "prod") {
//exclude development build
android.variantFilter { variant ->
if (variant.buildType.name == 'prod') {
variant.setIgnore(true)
}
}
} else {
//exclude all except development build
android.variantFilter { variant ->
if (variant.buildType.name != 'prod') {
variant.setIgnore(true)
}
//Timestamp-based version code
//Instant.now().epochSecond.toInt()
}
}
android {
compileSdkVersion 32
buildToolsVersion "32.0.0"
namespace 'es.ugr.swad.swadroid'
compileSdk 34
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
lint {
abortOnError false
}
lintOptions {
abortOnError false
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
defaultConfig {
applicationId "es.ugr.swad.swadroid"
versionName androidGitVersion.name()
versionCode androidGitVersion.code()
minSdkVersion 24
targetSdkVersion 32
targetSdkVersion 34
testApplicationId "es.ugr.swad.swadroid.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
@ -65,25 +57,47 @@ android {
buildConfigField "String", "SWAD_APP_KEY", getBuildConfigField("SWAD_APP_KEY")
}
buildTypes {
prod {
minifyEnabled true
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
def RELEASE_STORE_FILE = System.getenv("RELEASE_STORE_FILE")
buildFeatures {
buildConfig true
}
if (RELEASE_STORE_FILE) {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword System.getenv("RELEASE_STORE_PASSWORD")
keyAlias System.getenv("RELEASE_KEY_ALIAS")
keyPassword System.getenv("RELEASE_KEY_PASSWORD")
v1SigningEnabled true
v2SigningEnabled true
enableV3Signing = true
enableV4Signing = true
}
}
}
if (RELEASE_STORE_FILE) {
buildTypes {
release {
signingConfig signingConfigs.release
}
}
} else {
project.logger.warn("RELEASE_STORE_FILE is not defined. Skipping signing step")
}
}
dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4'
implementation 'commons-io:commons-io:2.11.0'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
implementation 'com.google.zxing:core:3.5.0'
implementation 'com.google.code.gson:gson:2.9.0'
implementation 'com.google.android.material:material:1.6.0'
implementation platform('com.google.firebase:firebase-bom:30.0.2')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.zxing:core:3.5.2'
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.google.android.material:material:1.11.0'
}

View File

@ -1,56 +0,0 @@
{
"project_info": {
"project_number": "398995989132",
"firebase_url": "https://swadroid-1190.firebaseio.com",
"project_id": "swadroid-1190",
"storage_bucket": "swadroid-1190.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:398995989132:android:cf9fabf2a9cd64da",
"android_client_info": {
"package_name": "es.ugr.swad.swadroid"
}
},
"oauth_client": [
{
"client_id": "398995989132-23hrn3d7s4unrfftra30hekdtvrk1pdv.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "es.ugr.swad.swadroid",
"certificate_hash": "11890c064b1d34fe0e6486e214439c9aa1083a70"
}
},
{
"client_id": "398995989132-olrnp4ilkdh8ggh54ruj65rocacs2pgc.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "es.ugr.swad.swadroid",
"certificate_hash": "17c4f28f7db5404990ebfcf626b582cc8e8b54de"
}
},
{
"client_id": "398995989132-os2h8neftvc80bq785s4bqj4osmanc7l.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCyEiJ-L6CrIsiF99OUXi4UvQV2TzCVNMA"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "398995989132-os2h8neftvc80bq785s4bqj4osmanc7l.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="es.ugr.swad.swadroid"
android:installLocation="auto" >
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
@ -15,9 +14,13 @@
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-feature
android:name="android.hardware.touchscreen"
@ -45,12 +48,9 @@
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light"
android:hardwareAccelerated="true">
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="es.ugr.swad.swadroid.SWADMain"
android:icon="@drawable/ic_launcher_swadroid"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -357,7 +357,8 @@
</service>
<service
android:name="es.ugr.swad.swadroid.modules.notifications.NotificationsSyncAdapterService"
android:exported="false" >
android:exported="false"
android:foregroundServiceType="dataSync" >
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
@ -367,6 +368,25 @@
android:resource="@xml/sync_notifications" />
</service>
<receiver
android:name="es.ugr.swad.swadroid.modules.notifications.RestarterNotificationsReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
<action android:name="android.intent.action.MY_PACKAGE_SUSPENDED" />
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="es.ugr.swad.swadroid.fileprovider"

View File

@ -267,6 +267,10 @@ public class Constants {
* Request code for PERMISSION_MULTIPLE permissions
*/
public static final int PERMISSION_MULTIPLE = 102;
/**
* Request code for POST_NOTIFICATIONS permission
*/
public static final int PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 103;
/**
* Prefix tag name for Logcat
*/

View File

@ -19,11 +19,14 @@
package es.ugr.swad.swadroid;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@ -43,6 +46,10 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
@ -50,6 +57,7 @@ import java.util.List;
import java.util.Map;
import es.ugr.swad.swadroid.database.DataBaseHelper;
import es.ugr.swad.swadroid.gui.AlertNotificationFactory;
import es.ugr.swad.swadroid.gui.DialogFactory;
import es.ugr.swad.swadroid.gui.MenuExpandableListActivity;
import es.ugr.swad.swadroid.gui.ProgressScreen;
@ -59,8 +67,8 @@ import es.ugr.swad.swadroid.model.Model;
import es.ugr.swad.swadroid.modules.courses.Courses;
import es.ugr.swad.swadroid.modules.downloads.DownloadsManager;
import es.ugr.swad.swadroid.modules.groups.MyGroupsManager;
import es.ugr.swad.swadroid.modules.information.Information;
import es.ugr.swad.swadroid.modules.indoorlocation.IndoorLocation;
import es.ugr.swad.swadroid.modules.information.Information;
import es.ugr.swad.swadroid.modules.login.Login;
import es.ugr.swad.swadroid.modules.login.LoginActivity;
import es.ugr.swad.swadroid.modules.messages.Messages;
@ -166,6 +174,11 @@ public class SWADMain extends MenuExpandableListActivity {
initializeMainViews();
try {
// Create Notifications channel
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
AlertNotificationFactory.createNotificationChanel(this);
}
//Check if this is the first run after an install or upgrade
lastVersion = Preferences.getLastVersion();
currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
@ -191,6 +204,20 @@ public class SWADMain extends MenuExpandableListActivity {
}
}
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
@Override
protected void onStart() {
super.onStart();
// Check Android 13 permission
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.POST_NOTIFICATIONS},
Constants.PERMISSIONS_REQUEST_POST_NOTIFICATIONS);
}
}
/*
* (non-Javadoc)
* @see android.app.Activity#onResume()
@ -282,7 +309,7 @@ public class SWADMain extends MenuExpandableListActivity {
SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, this);
if(!Preferences.getSyncTime().equals("0") && Preferences.isSyncEnabled()) {
SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY,
Long.valueOf(Preferences.getSyncTime()), this);
Long.parseLong(Preferences.getSyncTime()), this);
}
}
@ -653,96 +680,91 @@ public class SWADMain extends MenuExpandableListActivity {
mProgressScreen = new ProgressScreen(mProgressScreenView, mCoursesListView,
getString(R.string.coursesProgressDescription), this);
OnChildClickListener mExpandableClickListener = new OnChildClickListener() {
OnChildClickListener mExpandableClickListener = (parent, v, groupPosition, childPosition, id) -> {
// Get the item that was clicked
Object o = parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
@SuppressWarnings("unchecked")
String keyword = (String) ((Map<String, Object>) o).get(NAME);
Intent activity;
Context ctx = getApplicationContext();
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
// Get the item that was clicked
Object o = parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
@SuppressWarnings("unchecked")
String keyword = (String) ((Map<String, Object>) o).get(NAME);
Intent activity;
Context ctx = getApplicationContext();
if (keyword.equals(getString(R.string.notificationsModuleLabel))) {
activity = new Intent(ctx, Notifications.class);
startActivityForResult(activity, Constants.NOTIFICATIONS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.testsModuleLabel))) {
activity = new Intent(ctx, Tests.class);
startActivityForResult(activity, Constants.TESTS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.messagesModuleLabel))) {
activity = new Intent(ctx, Messages.class);
activity.putExtra("eventCode", Long.valueOf(0));
startActivityForResult(activity, Constants.MESSAGES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.noticesModuleLabel))) {
activity = new Intent(ctx, Notices.class);
startActivityForResult(activity, Constants.NOTICES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.rollcallModuleLabel))) {
if (Utils.connectionAvailable(ctx)) {
activity = new Intent(ctx, Rollcall.class);
startActivityForResult(activity, Constants.ROLLCALL_REQUEST_CODE);
} else {
Toast.makeText(ctx, R.string.noConnectionMsg, Toast.LENGTH_LONG).show();
}
} else if (keyword.equals(getString(R.string.generateQRModuleLabel))) {
activity = new Intent(ctx, GenerateQR.class);
startActivityForResult(activity, Constants.GENERATE_QR_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.manageLocation))) {
activity = new Intent(ctx, IndoorLocation.class);
startActivityForResult(activity, Constants.MANAGE_LOCATION);
} else if (keyword.equals(getString(R.string.documentsDownloadModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.DOCUMENTS_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.sharedsDownloadModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.SHARE_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.marksModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.MARKS_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.myGroupsModuleLabel))) {
activity = new Intent(ctx, MyGroupsManager.class);
activity.putExtra("courseCode", Courses.getSelectedCourseCode());
startActivityForResult(activity, Constants.MYGROUPSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.introductionModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.INTRODUCTION_REQUEST_CODE);
startActivityForResult(activity, Constants.INTRODUCTION_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.faqsModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.FAQS_REQUEST_CODE);
startActivityForResult(activity, Constants.FAQS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.bibliographyModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.BIBLIOGRAPHY_REQUEST_CODE);
startActivityForResult(activity, Constants.BIBLIOGRAPHY_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.syllabusPracticalsModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
startActivityForResult(activity, Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.syllabusLecturesModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.SYLLABUSLECTURES_REQUEST_CODE);
startActivityForResult(activity, Constants.SYLLABUSLECTURES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.linksModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.LINKS_REQUEST_CODE);
startActivityForResult(activity, Constants.LINKS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.teachingguideModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.TEACHINGGUIDE_REQUEST_CODE);
startActivityForResult(activity, Constants.TEACHINGGUIDE_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.assessmentModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.ASSESSMENT_REQUEST_CODE);
startActivityForResult(activity, Constants.ASSESSMENT_REQUEST_CODE);
if (keyword.equals(getString(R.string.notificationsModuleLabel))) {
activity = new Intent(ctx, Notifications.class);
startActivityForResult(activity, Constants.NOTIFICATIONS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.testsModuleLabel))) {
activity = new Intent(ctx, Tests.class);
startActivityForResult(activity, Constants.TESTS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.messagesModuleLabel))) {
activity = new Intent(ctx, Messages.class);
activity.putExtra("eventCode", Long.valueOf(0));
startActivityForResult(activity, Constants.MESSAGES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.noticesModuleLabel))) {
activity = new Intent(ctx, Notices.class);
startActivityForResult(activity, Constants.NOTICES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.rollcallModuleLabel))) {
if (Utils.connectionAvailable(ctx)) {
activity = new Intent(ctx, Rollcall.class);
startActivityForResult(activity, Constants.ROLLCALL_REQUEST_CODE);
} else {
Toast.makeText(ctx, R.string.noConnectionMsg, Toast.LENGTH_LONG).show();
}
return true;
} else if (keyword.equals(getString(R.string.generateQRModuleLabel))) {
activity = new Intent(ctx, GenerateQR.class);
startActivityForResult(activity, Constants.GENERATE_QR_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.manageLocation))) {
activity = new Intent(ctx, IndoorLocation.class);
startActivityForResult(activity, Constants.MANAGE_LOCATION);
} else if (keyword.equals(getString(R.string.documentsDownloadModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.DOCUMENTS_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.sharedsDownloadModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.SHARE_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.marksModuleLabel))) {
activity = new Intent(ctx, DownloadsManager.class);
activity.putExtra("downloadsAreaCode", Constants.MARKS_AREA_CODE);
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.myGroupsModuleLabel))) {
activity = new Intent(ctx, MyGroupsManager.class);
activity.putExtra("courseCode", Courses.getSelectedCourseCode());
startActivityForResult(activity, Constants.MYGROUPSMANAGER_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.introductionModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.INTRODUCTION_REQUEST_CODE);
startActivityForResult(activity, Constants.INTRODUCTION_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.faqsModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.FAQS_REQUEST_CODE);
startActivityForResult(activity, Constants.FAQS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.bibliographyModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.BIBLIOGRAPHY_REQUEST_CODE);
startActivityForResult(activity, Constants.BIBLIOGRAPHY_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.syllabusPracticalsModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
startActivityForResult(activity, Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.syllabusLecturesModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.SYLLABUSLECTURES_REQUEST_CODE);
startActivityForResult(activity, Constants.SYLLABUSLECTURES_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.linksModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.LINKS_REQUEST_CODE);
startActivityForResult(activity, Constants.LINKS_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.teachingguideModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.TEACHINGGUIDE_REQUEST_CODE);
startActivityForResult(activity, Constants.TEACHINGGUIDE_REQUEST_CODE);
} else if (keyword.equals(getString(R.string.assessmentModuleLabel))) {
activity = new Intent(ctx, Information.class);
activity.putExtra("requestCode", Constants.ASSESSMENT_REQUEST_CODE);
startActivityForResult(activity, Constants.ASSESSMENT_REQUEST_CODE);
}
return true;
};
mExpandableListView.setOnChildClickListener(mExpandableClickListener);

View File

@ -19,118 +19,150 @@
package es.ugr.swad.swadroid.gui;
import static es.ugr.swad.swadroid.utils.NotificationUtils.SWADROID_CHANNEL_ID;
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.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import es.ugr.swad.swadroid.modules.notifications.Notifications;
import es.ugr.swad.swadroid.utils.NotificationUtils;
import static es.ugr.swad.swadroid.utils.NotificationUtils.SWADROID_CHANNEL_ID;
/**
* Class for create notification alerts.
*
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
public class AlertNotificationFactory {
public static NotificationCompat.Builder createAlertNotificationBuilder(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
int flags = 0;
public static final String CHANNEL_NAME = "Background Service";
public static NotificationCompat.Builder createAlertNotificationBuilder(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
.setAutoCancel(autocancel)
.setSmallIcon(smallIcon)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
.setContentTitle(contentTitle)
.setContentText(contentText)
.setTicker(ticker)
.setOngoing(ongoing)
.setOnlyAlertOnce(onlyAlertOnce)
.setWhen(System.currentTimeMillis());
//.setLights(Color.GREEN, 500, 500);
int flags = 0;
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
.setAutoCancel(autocancel)
.setSmallIcon(smallIcon)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
.setContentTitle(contentTitle)
.setContentText(contentText)
.setTicker(ticker)
.setOngoing(ongoing)
.setOnlyAlertOnce(onlyAlertOnce)
.setWhen(System.currentTimeMillis());
//.setLights(Color.GREEN, 500, 500);
//Launch activity on alert click
if(pendingIntent != null) {
if (pendingIntent != null) {
notifBuilder.setContentIntent(pendingIntent);
}
}
//Add sound, vibration and lights
flags |= Notification.DEFAULT_SOUND;
flags |= Notification.DEFAULT_VIBRATE;
flags |= Notification.DEFAULT_LIGHTS;
notifBuilder.setDefaults(flags);
return notifBuilder;
}
public static NotificationCompat.Builder createProgressNotificationBuilder(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce);
notifBuilder.setProgress(maxProgress, progress, indeterminate);
return notifBuilder;
}
public static Notification createAlertNotification(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce);
notifBuilder.setDefaults(flags);
return notifBuilder;
}
public static NotificationCompat.Builder createProgressNotificationBuilder(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce);
notifBuilder.setProgress(maxProgress, progress, indeterminate);
return notifBuilder;
}
public static Notification createAlertNotification(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce);
//Create alert
return notifBuilder.build();
}
public static Notification createProgressNotification(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
NotificationCompat.Builder notifBuilder = createProgressNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce,
maxProgress,
progress,
indeterminate);
public static Notification createProgressNotification(Context context, String contentTitle, String contentText,
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
NotificationCompat.Builder notifBuilder = createProgressNotificationBuilder(context,
contentTitle,
contentText,
ticker,
pendingIntent,
smallIcon,
largeIcon,
autocancel,
ongoing,
onlyAlertOnce,
maxProgress,
progress,
indeterminate);
//Create alert
return notifBuilder.build();
}
public static void showAlertNotification(Context context, Notification notif, int notifId) {
public static Notification createBackgroundNotification(Context context, String contentTitle, int smallIcon, int largeIcon, PendingIntent pendingIntent) {
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
.setOngoing(true)
.setSmallIcon(smallIcon)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
.setContentTitle(contentTitle)
.setPriority(NotificationManager.IMPORTANCE_HIGH)
.setCategory(Notification.CATEGORY_SERVICE)
.setContentIntent(pendingIntent);
//Create alert
return notifBuilder.build();
}
@RequiresApi(Build.VERSION_CODES.O)
public static void createNotificationChanel(Context context) {
NotificationChannel channel = new NotificationChannel(SWADROID_CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
channel.setLightColor(Color.BLUE);
manager.createNotificationChannel(channel);
}
public static void showAlertNotification(Context context, Notification notif, int notifId) {
NotificationManager notifManager;
//Obtain a reference to the notification service
@ -144,5 +176,5 @@ public class AlertNotificationFactory {
//Send alert
notifManager.notify(notifId, notif);
}
}
}

View File

@ -29,8 +29,6 @@ import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.ksoap2.SoapFault;
import org.ksoap2.transport.HttpResponseException;
import org.kxml2.kdom.Element;
@ -65,10 +63,6 @@ public abstract class Module extends MenuActivity {
* Class Module's tag name for Logcat
*/
private static final String TAG = Constants.APP_TAG + " Module";
/**
* Obtain Firebase Analytics instance
*/
protected FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
/**
* Async Task for background jobs
*/
@ -207,6 +201,8 @@ public abstract class Module extends MenuActivity {
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case Constants.LOGIN_REQUEST_CODE:

View File

@ -21,8 +21,6 @@ package es.ugr.swad.swadroid.modules.account;
import android.os.Bundle;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
@ -124,10 +122,6 @@ public class CreateAccount extends Module {
//Request finalized without errors
setResult(RESULT_OK);
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.METHOD, "requestService");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SIGN_UP, bundle);
}
/* (non-Javadoc)

View File

@ -214,10 +214,10 @@ public class DirectoryNavigator {
if (firstChild != null) {
switch (tag) {
case "code":
fileCode = Long.valueOf(firstChild.getNodeValue());
fileCode = Long.parseLong(firstChild.getNodeValue());
break;
case "time":
time = Long.valueOf(firstChild.getNodeValue());
time = Long.parseLong(firstChild.getNodeValue());
break;
case "license":
license = firstChild.getNodeValue();
@ -397,4 +397,4 @@ public class DirectoryNavigator {
*/
class InvalidPathException extends IllegalArgumentException {
private static final long serialVersionUID = 1L;
}
}

View File

@ -18,11 +18,9 @@
*/
package es.ugr.swad.swadroid.modules.downloads;
import android.annotation.TargetApi;
import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
@ -50,7 +48,6 @@ public class DownloadFactory {
* @param title title of the download notification
* @param description description of the download notification
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean downloadFile(Context context, String url, String fileName, String title,
String description) {
@ -77,7 +74,7 @@ public class DownloadFactory {
/**
* Method to show file size in bytes in a human readable way
* http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java
* @see <a href="http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java">how-to-convert-byte-size-into-human-readable-format-in-java</a>
*/
public static String humanReadableByteCount(long bytes, boolean si) {
int unit = si ? 1000 : 1024;

View File

@ -18,7 +18,6 @@
*/
package es.ugr.swad.swadroid.modules.downloads;
import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
@ -27,7 +26,6 @@ import android.database.Cursor;
import android.database.CursorWrapper;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.provider.BaseColumns;
@ -827,7 +825,6 @@ public class DownloadManager {
* method will only work when called from within the download manager's process.
* @param ids the IDs of the downloads
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public void restartDownload(long... ids) {
try (Cursor cursor = query(new Query().setFilterById(ids))) {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
@ -1019,7 +1016,7 @@ public class DownloadManager {
private long translateLong(String column) {
if (!isLongColumn(column)) {
// mimic behavior of underlying cursor -- most likely, throw NumberFormatException
return Long.valueOf(translateString(column));
return Long.parseLong(translateString(column));
}
if (column.equals(COLUMN_ID)) {
@ -1139,4 +1136,4 @@ public class DownloadManager {
}
}
}
}
}

View File

@ -1215,4 +1215,4 @@ public final class Downloads {
public static final String INSERT_KEY_PREFIX = "http_header_";
}
}
}
}

View File

@ -19,7 +19,6 @@
package es.ugr.swad.swadroid.modules.downloads;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
@ -31,10 +30,6 @@ import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
@ -48,6 +43,11 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import java.io.File;
import java.net.URLConnection;
import java.util.ArrayList;
@ -190,9 +190,11 @@ public class DownloadsManager extends MenuActivity {
protected void onStart() {
super.onStart();
// check Android 6 permission
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
// check permissions
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q
&& ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
@ -238,28 +240,18 @@ public class DownloadsManager extends MenuActivity {
TextView homeButton = (TextView) this
.findViewById(R.id.home_button);
homeButton.setOnClickListener((new OnClickListener() {
@Override
public void onClick(View v) {
if (navigator != null) {
updateView(navigator.goToRoot());
}
homeButton.setOnClickListener((v -> {
if (navigator != null) {
updateView(navigator.goToRoot());
}
}));
TextView parentButton = (TextView) this
.findViewById(R.id.parent_button);
parentButton.setOnClickListener((new OnClickListener() {
@Override
public void onClick(View v) {
if (navigator != null) {
updateView(navigator.goToParentDirectory());
}
parentButton.setOnClickListener((v -> {
if (navigator != null) {
updateView(navigator.goToParentDirectory());
}
}));
//Set Font Awesome typeface
@ -272,30 +264,27 @@ public class DownloadsManager extends MenuActivity {
messageText = (TextView) this.findViewById(R.id.messageText);
grid = (GridView) this.findViewById(R.id.gridview);
grid.setOnItemClickListener((new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
grid.setOnItemClickListener(((parent, v, position, id) -> {
DirectoryItem node = navigator.getDirectoryItem(position);
if (node.getFileCode() == -1) //it is a directory therefore navigates into it
updateView(navigator.goToSubDirectory(position));
else { //it is a files therefore gets its information through web service GETFILE
chosenNodeName = node.getName();
fileSize = node.getSize();
File f = new File(Constants.DOWNLOADS_PATH + File.separator + chosenNodeName);
DirectoryItem node = navigator.getDirectoryItem(position);
if (node.getFileCode() == -1) //it is a directory therefore navigates into it
updateView(navigator.goToSubDirectory(position));
else { //it is a files therefore gets its information through web service GETFILE
chosenNodeName = node.getName();
fileSize = node.getSize();
File f = new File(Constants.DOWNLOADS_PATH + File.separator + chosenNodeName);
//If a student is requesting the marks, gets the marks and call the Marks module
if((downloadsAreaCode == Constants.MARKS_AREA_CODE)
&& (Login.getLoggedUser().getUserRole() == Constants.STUDENT_TYPE_CODE)) {
//If a student is requesting the marks, gets the marks and call the Marks module
if((downloadsAreaCode == Constants.MARKS_AREA_CODE)
&& (Login.getLoggedUser().getUserRole() == Constants.STUDENT_TYPE_CODE)) {
requestGetMarks(node.getFileCode());
} else { //Otherwise treat as a regular file
if (isDownloaded(f)) {
viewFile(f);
} else {
AlertDialog fileInfoDialog = createFileInfoDialog(node.getName(), node.getSize(), node.getTime(), node.getPublisher(), node.getFileCode(), node.getLicense());
fileInfoDialog.show();
}
requestGetMarks(node.getFileCode());
} else { //Otherwise treat as a regular file
if (isDownloaded(f)) {
viewFile(f);
} else {
AlertDialog fileInfoDialog = createFileInfoDialog(node.getName(), node.getSize(), node.getTime(), node.getPublisher(), node.getFileCode(), node.getLicense());
fileInfoDialog.show();
}
}
}
@ -322,22 +311,20 @@ public class DownloadsManager extends MenuActivity {
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
public boolean onKeyDown(int keyCode, KeyEvent event) {
//If back button is pressed, go to parent directory
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
if (navigator != null) {
//If current directory is not the root, go to parent directory
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
if (navigator != null) {
//If current directory is not the root, go to parent directory
if (!navigator.isRootDirectory()) {
updateView(navigator.goToParentDirectory());
//If current directory is the root, exit module
//If current directory is the root, exit module
} else {
return super.onKeyDown(keyCode, event);
}
}
return true;
return true;
}
return super.onKeyDown(keyCode, event);
@ -802,7 +789,6 @@ public class DownloadsManager extends MenuActivity {
/**
* Set up the {@link android.app.ActionBar}, if the API is available.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupActionBar() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@ -820,8 +806,9 @@ public class DownloadsManager extends MenuActivity {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
if (grantResults.length > 0

View File

@ -22,8 +22,6 @@ package es.ugr.swad.swadroid.modules.login;
import android.os.Bundle;
import android.util.Log;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
@ -175,10 +173,6 @@ public class Login extends Module {
//Request finalized without errors
setResult(RESULT_OK);
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.METHOD, "requestService");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.LOGIN, bundle);
}
/* (non-Javadoc)

View File

@ -19,7 +19,6 @@
package es.ugr.swad.swadroid.modules.notifications;
import android.accounts.Account;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Notification;
import android.app.PendingIntent;
@ -28,9 +27,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@ -42,6 +39,9 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import org.ksoap2.serialization.SoapObject;
import java.util.ArrayList;
@ -142,48 +142,44 @@ public class Notifications extends Module implements
/**
* Id for the not seen notifications group
*/
private int NOT_SEEN_GROUP_ID = 0;
private final int NOT_SEEN_GROUP_ID = 0;
/**
* Id for the seen notifications group
*/
private int SEEN_GROUP_ID = 1;
private final int SEEN_GROUP_ID = 1;
/**
* ListView click listener
*/
private OnChildClickListener clickListener = new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
TextView notifCode = (TextView) v.findViewById(R.id.notifCode);
TextView code = (TextView) v.findViewById(R.id.eventCode);
TextView type = (TextView) v.findViewById(R.id.eventType);
TextView userPhoto = (TextView) v.findViewById(R.id.eventUserPhoto);
TextView sender = (TextView) v.findViewById(R.id.eventSender);
TextView course = (TextView) v.findViewById(R.id.eventLocation);
TextView summary = (TextView) v.findViewById(R.id.eventSummary);
TextView content = (TextView) v.findViewById(R.id.eventText);
TextView date = (TextView) v.findViewById(R.id.eventDate);
TextView time = (TextView) v.findViewById(R.id.eventTime);
TextView seenLocalText = (TextView) v.findViewById(R.id.seenLocal);
private final OnChildClickListener clickListener = (parent, v, groupPosition, childPosition, id) -> {
TextView notifCode = v.findViewById(R.id.notifCode);
TextView code = v.findViewById(R.id.eventCode);
TextView type = v.findViewById(R.id.eventType);
TextView userPhoto = v.findViewById(R.id.eventUserPhoto);
TextView sender = v.findViewById(R.id.eventSender);
TextView course = v.findViewById(R.id.eventLocation);
TextView summary = v.findViewById(R.id.eventSummary);
TextView content = v.findViewById(R.id.eventText);
TextView date = v.findViewById(R.id.eventDate);
TextView time = v.findViewById(R.id.eventTime);
TextView seenLocalText = v.findViewById(R.id.seenLocal);
Intent activity = new Intent(getApplicationContext(),
NotificationItem.class);
activity.putExtra("notifCode", notifCode.getText().toString());
activity.putExtra("eventCode", code.getText().toString());
activity.putExtra("notificationType", type.getText().toString());
activity.putExtra("userPhoto", userPhoto.getText().toString());
activity.putExtra("sender", sender.getText().toString());
activity.putExtra("course", course.getText().toString());
activity.putExtra("summary", summary.getText().toString());
activity.putExtra("content", content.getText().toString());
activity.putExtra("date", date.getText().toString());
activity.putExtra("time", time.getText().toString());
activity.putExtra("seenLocal", seenLocalText.getText().toString());
startActivity(activity);
return true;
}
Intent activity = new Intent(getApplicationContext(),
NotificationItem.class);
activity.putExtra("notifCode", notifCode.getText().toString());
activity.putExtra("eventCode", code.getText().toString());
activity.putExtra("notificationType", type.getText().toString());
activity.putExtra("userPhoto", userPhoto.getText().toString());
activity.putExtra("sender", sender.getText().toString());
activity.putExtra("course", course.getText().toString());
activity.putExtra("summary", summary.getText().toString());
activity.putExtra("content", content.getText().toString());
activity.putExtra("date", date.getText().toString());
activity.putExtra("time", time.getText().toString());
activity.putExtra("seenLocal", seenLocalText.getText().toString());
startActivity(activity);
return true;
};
/**
@ -280,12 +276,12 @@ public class Notifications extends Module implements
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container_expandablelist);
list = (ExpandableListView) findViewById(R.id.expandablelist_pulltorefresh);
emptyNotifTextView = (TextView) findViewById(R.id.list_item_title);
emptyNotifTextView = findViewById(R.id.list_item_title);
mBirthdayLayout = (LinearLayout) findViewById(R.id.notify_layout);
mBirthdayTextView = (TextView) findViewById(R.id.notifyTextView);
mBirthdayTextView = findViewById(R.id.notifyTextView);
groupItem = new ArrayList<>();
childItem = new ArrayList<>();
groupItem = new ArrayList<>();
childItem = new ArrayList<>();
//Init ExpandableListView
initSwipeOptions();
@ -331,7 +327,7 @@ public class Notifications extends Module implements
refreshScreen();
}
/*
* (non-Javadoc)
*
@ -345,7 +341,7 @@ public class Notifications extends Module implements
intentFilter.addAction(NotificationsSyncAdapterService.START_SYNC);
intentFilter.addAction(NotificationsSyncAdapterService.STOP_SYNC);
intentFilter.addAction(Intent.CATEGORY_DEFAULT);
registerReceiver(receiver, intentFilter);
ContextCompat.registerReceiver(this, receiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
Log.i(TAG, "Registered receiver for automatic synchronization");
@ -406,12 +402,12 @@ public class Notifications extends Module implements
notifCount = 0;
for (int i = 0; i < numNotif; i++) {
SoapObject pii = (SoapObject) soap.getProperty(i);
Long notifCode = Long.valueOf(pii.getProperty("notifCode")
long notifCode = Long.parseLong(pii.getProperty("notifCode")
.toString());
Long eventCode = Long.valueOf(pii.getProperty(
long eventCode = Long.parseLong(pii.getProperty(
"eventCode").toString());
String eventType = pii.getProperty("eventType").toString();
Long eventTime = Long.valueOf(pii.getProperty("eventTime")
long eventTime = Long.parseLong(pii.getProperty("eventTime")
.toString());
String userNickname = pii.getProperty("userNickname")
.toString();
@ -424,7 +420,7 @@ public class Notifications extends Module implements
String userPhoto = pii.getProperty("userPhoto").toString();
String location = pii.getProperty("location").toString();
String summary = pii.getProperty("summary").toString();
Integer status = Integer.valueOf(pii.getProperty("status")
int status = Integer.parseInt(pii.getProperty("status")
.toString());
String content = pii.getProperty("content").toString();
boolean notifReadSWAD = (status >= 4);
@ -587,17 +583,14 @@ public class Notifications extends Module implements
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_markAllRead:
if (item.getItemId() == R.id.action_markAllRead) {
dbHelper.updateAllNotifications("seenLocal",
Utils.parseBoolString(true));
sendReadNotifications();
refreshScreen();
return true;
default:
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
/*
@ -638,76 +631,8 @@ public class Notifications extends Module implements
refreshLayout.setEnabled(enable);
}
});
/*
* Create a ListView-specific touch listener. ListViews are given special treatment because
* by default they handle touches for their list items... i.e. they're in charge of drawing
* the pressed state (the list selector), handling list item clicks, etc.
*
* Requires Android 3.1 (HONEYCOMB_MR1) or newer
*/
/*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
SwipeListViewTouchListener touchListener =
new SwipeListViewTouchListener(
list,
new SwipeListViewTouchListener.OnSwipeCallback() {
@Override
public void onSwipeLeft(ListView listView, int [] reverseSortedPositions) {
if(reverseSortedPositions.length > 0) {
swipeItem(reverseSortedPositions[0]);
}
}
@Override
public void onSwipeRight(ListView listView, int [] reverseSortedPositions) {
if(reverseSortedPositions.length > 0) {
swipeItem(reverseSortedPositions[0]);
}
}
@Override
public void onStartSwipe() {
disableSwipe();
}
@Override
public void onStopSwipe() {
enableSwipe();
}
},
true,
true);
list.setOnTouchListener(touchListener);
// Setting this scroll listener is required to ensure that during ListView scrolling,
// we don't look for swipes.
list.setOnScrollListener(touchListener.makeScrollListener(refreshLayout));
} else {
Log.w(TAG, "SwipeListViewTouchListener requires Android 3.1 (HONEYCOMB_MR1) or newer");
list.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
boolean enable = false;
if(list != null && list.getChildCount() > 0){
// check if the first item of the list is visible
boolean firstItemVisible = list.getFirstVisiblePosition() == 0;
// check if the top of the first item is visible
boolean topOfFirstItemVisible = list.getChildAt(0).getTop() == 0;
// enabling or disabling the refresh layout
enable = firstItemVisible && topOfFirstItemVisible;
}
refreshLayout.setEnabled(enable);
}
});
}*/
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void setAppearance() {
refreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,

View File

@ -59,7 +59,6 @@ import es.ugr.swad.swadroid.model.SWADNotification;
import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.modules.login.Login;
import es.ugr.swad.swadroid.preferences.Preferences;
import es.ugr.swad.swadroid.ssl.SecureConnection;
import es.ugr.swad.swadroid.utils.Utils;
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
import es.ugr.swad.swadroid.webservices.SOAPClient;
@ -72,8 +71,6 @@ import es.ugr.swad.swadroid.webservices.SOAPClient;
*/
public class NotificationsSyncAdapterService extends Service {
private static final String TAG = "NotificationsSyncAdapterService";
private static Preferences prefs;
private static SecureConnection conn;
private static SyncAdapterImpl sSyncAdapter = null;
private static int notifCount;
private static DataBaseHelper dbHelper;
@ -81,14 +78,9 @@ public class NotificationsSyncAdapterService extends Service {
private static String METHOD_NAME = "";
private static Object result;
private static String errorMessage = "";
private static boolean isConnected;
private static boolean isDebuggable;
public static final String START_SYNC = "es.ugr.swad.swadroid.sync.start";
public static final String STOP_SYNC = "es.ugr.swad.swadroid.sync.stop";
/**
* Application context
*/
private static Context mCtx;
public NotificationsSyncAdapterService() {
super();
@ -100,7 +92,6 @@ public class NotificationsSyncAdapterService extends Service {
public SyncAdapterImpl(Context context) {
super(context, true);
mContext = context;
mCtx = context;
}
@Override
@ -187,7 +178,6 @@ public class NotificationsSyncAdapterService extends Service {
*/
@Override
public void onCreate() {
isConnected = Utils.connectionAvailable(this);
// Check if debug mode is enabled
try {
getPackageManager().getApplicationInfo(
@ -198,7 +188,6 @@ public class NotificationsSyncAdapterService extends Service {
}
try {
prefs = new Preferences(this);
dbHelper = new DataBaseHelper(this);
//Initialize webservices client
webserviceClient = null;
@ -206,19 +195,57 @@ public class NotificationsSyncAdapterService extends Service {
Log.e(TAG, "Error initializing database and preferences", e);
}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
Log.i(TAG, "Starting persistent notification in custom foreground mode");
startCustomForeground();
} else {
Log.i(TAG, "Starting persistent notification in standard foreground mode");
startForeground(1, new Notification());
}
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("restartNotificationsService");
broadcastIntent.setClass(this, RestarterNotificationsReceiver.class);
this.sendBroadcast(broadcastIntent);
}
private void startCustomForeground() {
Intent notificationIntent = new Intent(this, Notifications.class);
PendingIntent pendingIntent;
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//single top to avoid creating many activity stacks queue
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(this,
0,
notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
Notification notification = AlertNotificationFactory.createBackgroundNotification(
this,
getString(R.string.appRunningBackground),
R.drawable.ic_launcher_swadroid_notif,
R.drawable.ic_launcher_swadroid,
pendingIntent);
startForeground(2, notification);
}
/* (non-Javadoc)
* @see android.app.Service#onStartCommand(android.content.Intent, int, int)
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
// return START_NOT_STICKY - we want this Service to be left running
// unless explicitly stopped, and it's process is killed, we want it to
// be restarted
return START_STICKY;
return START_REDELIVER_INTENT;
}
@Override
@ -342,10 +369,10 @@ public class NotificationsSyncAdapterService extends Service {
notifCount = 0;
for (int i = 0; i < numNotif; i++) {
SoapObject pii = (SoapObject) soap.getProperty(i);
Long notifCode = Long.valueOf(pii.getProperty("notifCode").toString());
Long eventCode = Long.valueOf(pii.getProperty("eventCode").toString());
long notifCode = Long.parseLong(pii.getProperty("notifCode").toString());
long eventCode = Long.parseLong(pii.getProperty("eventCode").toString());
String eventType = pii.getProperty("eventType").toString();
Long eventTime = Long.valueOf(pii.getProperty("eventTime").toString());
long eventTime = Long.parseLong(pii.getProperty("eventTime").toString());
String userNickname = pii.getProperty("userNickname").toString();
String userSurname1 = pii.getProperty("userSurname1").toString();
String userSurname2 = pii.getProperty("userSurname2").toString();
@ -353,7 +380,7 @@ public class NotificationsSyncAdapterService extends Service {
String userPhoto = pii.getProperty("userPhoto").toString();
String location = pii.getProperty("location").toString();
String summary = pii.getProperty("summary").toString();
Integer status = Integer.valueOf(pii.getProperty("status").toString());
int status = Integer.parseInt(pii.getProperty("status").toString());
String content = pii.getProperty("content").toString();
boolean notifReadSWAD = (status >= 4);
boolean notifCancelled = (status >= 8);

View File

@ -0,0 +1,48 @@
/*
* This file is part of SWADroid.
*
* Copyright (C) 2010 Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*
* SWADroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SWADroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SWADroid. If not, see <http://www.gnu.org/licenses/>.
*/
package es.ugr.swad.swadroid.modules.notifications;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.util.Log;
/**
* Restarter for NotificationsSyncAdapterService service.
*
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
public class RestarterNotificationsReceiver extends BroadcastReceiver {
private static final String TAG = "RestarterNotificationsReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Service tried to stop");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context, NotificationsSyncAdapterService.class));
} else {
context.startService(new Intent(context, NotificationsSyncAdapterService.class));
}
Log.i(TAG, "Service restarted");
}
}

View File

@ -18,11 +18,9 @@
*/
package es.ugr.swad.swadroid.preferences;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
@ -85,22 +83,6 @@ public class Preferences {
* Rate preference name
*/
public static final String RATEPREF = "ratePref";
/**
* Twitter preference name
*/
public static final String TWITTERPREF = "twitterPref";
/**
* Facebook preference name
*/
public static final String FACEBOOKPREF = "facebookPref";
/**
* Telegram preference name
*/
public static final String TELEGRAMPREF = "telegramPref";
/**
* Blog preference name
*/
public static final String BLOGPREF = "blogPref";
/**
* Share preference name
*/
@ -177,7 +159,6 @@ public class Preferences {
/**
* Constructor
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public Preferences(Context ctx) {
getPreferences(ctx);

View File

@ -36,8 +36,6 @@ import android.preference.PreferenceScreen;
import android.util.Log;
import android.widget.Toast;
import com.google.firebase.analytics.FirebaseAnalytics;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Date;
@ -62,10 +60,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
* PreferencesActivity tag name for Logcat
*/
private static final String TAG = Constants.APP_TAG + " PreferencesActivity";
/**
* Obtain Firebase Analytics instance
*/
protected FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
/**
* Application context
*/
@ -82,22 +76,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
* Rate preference
*/
private static Preference ratePref;
/**
* Twitter preference
*/
private static Preference twitterPref;
/**
* Facebook preference
*/
private static Preference facebookPref;
/**
* Telegram preference
*/
private static Preference telegramPref;
/**
* Blog preference
*/
private static Preference blogPref;
/**
* Share preference
*/
@ -180,10 +158,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
logOutPref = findPreference(Preferences.LOGOUTPREF);
currentVersionPref = findPreference(Preferences.CURRENTVERSIONPREF);
ratePref = findPreference(Preferences.RATEPREF);
twitterPref = findPreference(Preferences.TWITTERPREF);
facebookPref = findPreference(Preferences.FACEBOOKPREF);
telegramPref = findPreference(Preferences.TELEGRAMPREF);
blogPref = findPreference(Preferences.BLOGPREF);
sharePref = findPreference(Preferences.SHAREPREF);
privacyPolicyPref = findPreference(Preferences.PRIVACYPOLICYPREF);
syncTimePref = findPreference(Preferences.SYNCTIMEPREF);
@ -191,10 +165,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
//syncTimeLocationPref = findPreference(Preferences.SYNCLOCATIONTIMEPREF);
ratePref.setOnPreferenceChangeListener(this);
twitterPref.setOnPreferenceChangeListener(this);
facebookPref.setOnPreferenceChangeListener(this);
telegramPref.setOnPreferenceChangeListener(this);
blogPref.setOnPreferenceChangeListener(this);
sharePref.setOnPreferenceChangeListener(this);
privacyPolicyPref.setOnPreferenceChangeListener(this);
syncEnablePref.setOnPreferenceChangeListener(this);
@ -229,54 +199,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
return true;
}
});
twitterPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
/**
* Called when a preference is selected.
* @param preference Preference selected.
*/
public boolean onPreferenceClick(Preference preference) {
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
urlIntent.setData(Uri.parse(getString(R.string.twitterURL)));
startActivity(urlIntent);
return true;
}
});
facebookPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
/**
* Called when a preference is selected.
* @param preference Preference selected.
*/
public boolean onPreferenceClick(Preference preference) {
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
urlIntent.setData(Uri.parse(getString(R.string.facebookURL)));
startActivity(urlIntent);
return true;
}
});
telegramPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
/**
* Called when a preference is selected.
* @param preference Preference selected.
*/
public boolean onPreferenceClick(Preference preference) {
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
urlIntent.setData(Uri.parse(getString(R.string.telegramURL)));
startActivity(urlIntent);
return true;
}
});
blogPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
/**
* Called when a preference is selected.
* @param preference Preference selected.
*/
public boolean onPreferenceClick(Preference preference) {
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
urlIntent.setData(Uri.parse(getString(R.string.blogURL)));
startActivity(urlIntent);
return true;
}
});
sharePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
/**
* Called when a preference is selected.
@ -289,11 +211,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.shareBodyMsg));
startActivity(Intent.createChooser(sharingIntent, getString(R.string.shareTitle_menu)));
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "1");
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "text");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE, bundle);
return true;
}
});

View File

@ -43,7 +43,7 @@ public final class PeriodicSyncReceiver extends BroadcastReceiver {
public static PendingIntent createPendingIntent(Context context, String authority, Bundle extras) {
int requestCode = 0;
Intent intent = createIntent(context, authority);
int flags = 0;
int flags = PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE;
return PendingIntent.getBroadcast(context, requestCode, intent, flags);
}

View File

@ -18,22 +18,32 @@
</head>
<body bgcolor="white">
<!--<h4>1.6.0 (upcoming)</h4>
<!--<h4>1.6.0</h4>
<ul>
<li type="disc">Añadido módulo para localización en interiores</li>
</ul>-->
<h4>1.5.8 (2022-05-23)</h4>
<h4>1.5.10</h4>
<ul>
<li type="disc">Corregida gestión de permisos en la descarga de documentos para Android 10+</li>
</ul>
<h4>1.5.9</h4>
<ul>
<li type="disc">Añadido soporte para la descarga de notificaciones en segundo plano cuando la optimización de batería está habilitada</li>
</ul>
<h4>1.5.8<h4>
<ul>
<li type="disc">Corregida descarga de notificaciones en Android 12 (S)</li>
</ul>
<h4>1.5.7 (2020-12-19)</h4>
<h4>1.5.7<h4>
<ul>
<li type="disc">Corregida descarga de archivos en Android R</li>
</ul>
<h4>1.5.6 (2019-11-05)</h4>
<h4>1.5.6<h4>
<ul>
<li type="disc">
<strong>Pasar lista:</strong>
@ -41,13 +51,13 @@
</li>
</ul>
<h4>1.5.5 (2019-07-08)</h4>
<h4>1.5.5<h4>
<ul>
<li type="disc">Añadido soporte para Android-Q</li>
<li type="disc">Corregidas erratas en el historial de cambios</li>
</ul>
<h4>1.5.4 (2018-02-25)</h4>
<h4>1.5.4<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">
@ -56,7 +66,7 @@
</li>
</ul>
<h4>1.5.3 (2017-10-25)</h4>
<h4>1.5.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida compatibilidad con el sistema de notificaciones de Android
@ -64,7 +74,7 @@
</li>
</ul>
<h4>1.5.2 (2017-02-12)</h4>
<h4>1.5.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida pol&iacute;tica de privacidad de datos en la pantalla de
@ -78,12 +88,12 @@
Calificaciones, ahora se encuentran en la nueva carpeta Archivos
</li>
</ul>
<h4>1.5.1 (2017-01-21)</h4>
<h4>1.5.1<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error unparseable date: &quot;anyType{}&quot;(at offset 0)</li>
</ul>
<h4>1.5.0 (2016-09-01)</h4>
<h4>1.5.0<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">
@ -91,7 +101,7 @@
A&ntilde;adida b&uacute;squeda de destinatarios
</li>
</ul>
<h4>1.4.0 (2016-07-25)</h4>
<h4>1.4.0<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">
@ -107,7 +117,7 @@
Corregida consulta de calificaciones desde el rol estudiante
</li>
</ul>
<h4>1.3.4 (2016-07-17)</h4>
<h4>1.3.4<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">
@ -129,7 +139,7 @@
Mejoras menores
</li>
</ul>
<h4>1.3.3 (2016-01-31)</h4>
<h4>1.3.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidas notificaciones sociales</li>
@ -142,12 +152,12 @@
mayor a 30 d&iacute;as
</li>
</ul>
<h4>1.3.2 (2016-01-06)</h4>
<h4>1.3.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida gesti&oacute;n de permisos en Android 6.0 Marshmallow</li>
</ul>
<h4>1.3.1 (2015-12-06)</h4>
<h4>1.3.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Mejoras en las pantallas de identificaci&oacute;n y creaci&oacute;n de
@ -155,7 +165,7 @@
</li>
<li type="disc">Ahora las notificaciones canceladas no se descargan durante la sincronizaci&oacute;n</li>
</ul>
<h4>1.3 (2015-09-03)</h4>
<h4>1.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida creaci&oacute;n de cuentas de usuario</li>
@ -166,13 +176,13 @@
y tests (parcial en tests)
</li>
</ul>
<h4>1.2.4 (2015-03-15)</h4>
<h4>1.2.4<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Reducido retardo entre escaneos de c&oacute;digos a un segundo</li>
<li type="disc">Ahora el m&oacute;dulo de descargas requiere Android 3.0 o superior</li>
</ul>
<h4>1.2.3 (2014-11-30)</h4>
<h4>1.2.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido soporte para escaneo de c&oacute;digos de barras en el
@ -186,7 +196,7 @@
</li>
<li type="disc">Reducido retardo entre escaneos de c&oacute;digos a 2 segundos</li>
</ul>
<h4>1.2.2 (2014-11-26)</h4>
<h4>1.2.2<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Deshabilitado el deslizamiento lateral de las notificaciones</li>
@ -201,7 +211,7 @@
correctamente
</li>
</ul>
<h4>1.2.1 (2014-11-24)</h4>
<h4>1.2.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Ahora se pueden enviar listados de asistencias vac&iacute;os para marcar
@ -212,7 +222,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido refresco en pantalla del listado de asistencias</li>
</ul>
<h4>1.2 (2014-11-23)</h4>
<h4>1.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidas felicitaciones de cumplea&ntilde;os</li>
@ -220,19 +230,19 @@
las asistencias a SWAD
</li>
</ul>
<h4>1.1.4 (2014-11-11)</h4>
<h4>1.1.4<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregida descarga de notificaciones por modificaciones en SWAD</li>
</ul>
<h4>1.1.3 (2014-10-05)</h4>
<h4>1.1.3<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregida actualizaci&oacute;n err&oacute;nea de las notificaciones al
desplazar hacia arriba la lista
</li>
</ul>
<h4>1.1.2 (2014-09-18)</h4>
<h4>1.1.2<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Mejoras en los mensajes de error</li>
@ -244,7 +254,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregidos errores tipogr&aacute;ficos en el historial de cambios</li>
</ul>
<h4>1.1.1 (2014-09-16)</h4>
<h4>1.1.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Ahora el desplazamiento lateral de las notificaciones s&oacute;lo est&aacute;
@ -257,7 +267,7 @@
desplazar la lista hacia arriba sin estar en la parte superior de la misma
</li>
</ul>
<h4>1.1 (2014-09-08)</h4>
<h4>1.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Ahora las notificaciones se agrupan en
@ -293,7 +303,7 @@
aplicaci&oacute;n
</li>
</ul>
<h4>1.0 (2014-03-26)</h4>
<h4>1.0<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">Nueva interfaz gr&aacute;fica estilo Holo</li>
@ -316,7 +326,7 @@
</li>
<li type="disc">Eliminados los idiomas no utilizados por los usuarios</li>
</ul>
<h4>0.13 (2014-02-02)</h4>
<h4>0.13<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida pantalla de identificaci&oacute;n</li>
@ -327,7 +337,7 @@
2.3 o superior cuando la sincronizaci&oacute;n autom&aacute;tica est&aacute; activada
</li>
</ul>
<h4>0.12.7 (2013-12-14)</h4>
<h4>0.12.7<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida informaci&oacute;n de las notificaciones vistas en SWAD al
@ -344,7 +354,7 @@
</li>
<li type="disc">Corregido error al recuperar la configuraci&oacute;n de los tests</li>
</ul>
<h4>0.12.6 (2013-11-24)</h4>
<h4>0.12.6<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido control de las notificaciones vistas</li>
@ -366,17 +376,17 @@
</li>
<li type="disc">Corregido color de fondo negro al deslizar el listado de notificaciones</li>
</ul>
<h4>0.12.5 (2013-11-10)</h4>
<h4>0.12.5<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error que imped&iacute;a responder mensajes</li>
</ul>
<h4>0.12.4 (2013-11-09)</h4>
<h4>0.12.4<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error que imped&iacute;a consultar las sesiones de pr&aacute;cticas</li>
</ul>
<h4>0.12.3 (2013-11-09)</h4>
<h4>0.12.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido sistema de actualizaci&oacute;n "Arrastrar-para-actualizar"
@ -420,13 +430,13 @@
</li>
<li type="disc">Corregido error en la selección del n&uacute;mero de preguntas de test</li>
</ul>
<h4>0.12.2 (2013-06-19)</h4>
<h4>0.12.2<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Actualizadas las comunicaciones con el servidor</li>
</ul>
<h4>0.12.1 (2013-06-09)</h4>
<h4>0.12.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidas notificaciones de foros</li>
@ -455,7 +465,7 @@
<li type="disc">Corregida la detecci&oacute;n del valor nulo en la respuesta del servidor
</li>
</ul>
<h4>0.12 (2013-04-20)</h4>
<h4>0.12<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidos los nuevos tipos de notificaci&oacute;n de Documentos,
@ -500,7 +510,7 @@
dispositivos
</li>
</ul>
<h4>0.11.3 (2013-03-03)</h4>
<h4>0.11.3<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Ahora se muestra el servidor por defecto cuando el campo "Servidor" se deja
@ -514,7 +524,7 @@
asignaturas ante un cambio de configuraci&oacute;n
</li>
</ul>
<h4>0.11.2 (2013-02-24)</h4>
<h4>0.11.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido bot&oacute;n de actualizaci&oacute;n de las asignaturas en la
@ -539,7 +549,7 @@
<li type="disc">Corregido comportamiento an&oacute;malo de los checkboxes en Android 4.2
</li>
</ul>
<h4>0.11.1 (2013-01-26)</h4>
<h4>0.11.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida compatibilidad con pantallas t&aacute;ctiles b&aacute;sicas
@ -568,7 +578,7 @@
descriptores de los tests
</li>
</ul>
<h4>0.11 (2012-12-15)</h4>
<h4>0.11<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo de Descargas</li>
@ -580,7 +590,7 @@
opciones de SWAD
</li>
</ul>
<h4>0.10.1 (2012-11-17)</h4>
<h4>0.10.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida compatibilidad con Android 4.2</li>
@ -603,7 +613,7 @@
asunto
</li>
</ul>
<h4>0.10 (2012-11-09)</h4>
<h4>0.10<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo de inscripci&oacute;n a grupos</li>
@ -620,7 +630,7 @@
<li type="disc">Corregido error en la comprobaci&oacute;n de la conexi&oacute;n a Internet
</li>
</ul>
<h4>0.9.3 (2012-07-20)</h4>
<h4>0.9.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido soporte para carpetas en la URL del servidor</li>
@ -629,14 +639,14 @@
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">mMjoras en los mensajes de error</li>
</ul>
<h4>0.9.2 (2012-07-10)</h4>
<h4>0.9.2<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">La caracter&iacute;stica camera.autofocus ahora es opcional para corregir
incompatibilidades con algunos dispositivos
</li>
</ul>
<h4>0.9.1 (2012-07-09)</h4>
<h4>0.9.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido soporte pana DNI con letra (primera y &uacute;ltima posici&oacute;n)
@ -648,19 +658,19 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido soporte para pantallas grandes</li>
</ul>
<h4>0.9 (2012-07-01)</h4>
<h4>0.9<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo para pasar lista</li>
</ul>
<h4>0.8.1 (2012-05-20)</h4>
<h4>0.8.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida opci&oacute;n para responder mensajes desde su notificaci&oacute;n
abierta
</li>
</ul>
<h4>0.8 (2012-05-01)</h4>
<h4>0.8<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida sincronizaci&oacute;n autom&aacute;tica de las
@ -691,7 +701,7 @@
<li type="disc">Corregido bug HTML en el campo "location" de las notificaciones</li>
<li type="disc">Corregido error en la etiqueta br de las notificaciones</li>
</ul>
<h4>0.7.2 (2012-02-22)</h4>
<h4>0.7.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidas alertas de notificaciones en la barra de estado</li>
@ -701,7 +711,7 @@
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Optimizadas las consultas a la base de datos</li>
</ul>
<h4>0.7.1 (2012-01-11)</h4>
<h4>0.7.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Mejorada la velocidad de renderizado de las calificaciones</li>
@ -710,14 +720,14 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregidos errores de renderizado en las calificaciones</li>
</ul>
<h4>0.7 (2012-01-10)</h4>
<h4>0.7<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida visualizaci&oacute;n de las calificaciones al pulsar sobre la
notificaci&oacute;n asociada
</li>
</ul>
<h4>0.6.2 (2011-12-09)</h4>
<h4>0.6.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido enlace al blog de la aplicaci&oacute;n en la pantalla de
@ -732,7 +742,7 @@
</li>
<li type="disc">Cambios menores en los mensajes de error</li>
</ul>
<h4>0.6.1 (2011-11-16)</h4>
<h4>0.6.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido enlace a la p&aacute;gina de Google+ de la
@ -747,7 +757,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido el funcionamiento del men&uacute; de opciones</li>
</ul>
<h4>0.6 (2011-11-06)</h4>
<h4>0.6<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida compatibilidad con Android 4.0</li>
@ -759,7 +769,7 @@
</li>
<li type="disc">A&ntilde;adido autor de SWAD en la pantalla de configuraci&oacute;n</li>
</ul>
<h4>0.5.2 (2011-09-29)</h4>
<h4>0.5.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido el nombre real de los destinatarios en el mensaje "Mensaje
@ -774,12 +784,12 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error en la descarga de las preguntas de test</li>
</ul>
<h4>0.5.1 (2011-09-26)</h4>
<h4>0.5.1<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error al responder mensajes</li>
</ul>
<h4>0.5 (2011-09-26)</h4>
<h4>0.5<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo de env&iacute;o de mensajes</li>
@ -788,17 +798,17 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correcciones menores</li>
</ul>
<h4>0.4.5 (2011-07-08)</h4>
<h4>0.4.5<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Optimizada la descarga de las preguntas de test</li>
</ul>
<h4>0.4.4 (2011-07-05)</h4>
<h4>0.4.4<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correccoines menores</li>
</ul>
<h4>0.4.3 (2011-06-15)</h4>
<h4>0.4.3<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">mejorada la vissualizaci&oacute;n de los tests</li>
@ -807,7 +817,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correcciones menores</li>
</ul>
<h4>0.4.2 (2011-06-15)</h4>
<h4>0.4.2<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Ahora las preguntas no contestadas punt&uacute;an como 0</li>
@ -816,7 +826,7 @@
</li>
<li type="disc">mejoras en la cisualizaci&oacute;n de los tests</li>
</ul>
<h4>0.4.1 (2011-06-14)</h4>
<h4>0.4.1<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Se permiten puntuacioes negativas en los tests</li>
@ -825,7 +835,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correcifo error al descargar las preguntas de test</li>
</ul>
<h4>0.4 (2011-06-13)</h4>
<h4>0.4<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo de Tests</li>
@ -834,7 +844,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correcciones menores</li>
</ul>
<h4>0.3.10 (2011-05-19)</h4>
<h4>0.3.10<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidas notificaciones de actividades, encuestas y notificaciones
@ -848,28 +858,28 @@
</li>
<li type="disc">A&ntilde;adido mensaje de error de credenciales err&oacute;neas</li>
</ul>
<h4>0.3.9 (2011-05-03)</h4>
<h4>0.3.9<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error de campos vac&iacute;os en las notificaciones</li>
</ul>
<h4>0.3.8 (2011-04-27)</h4>
<h4>0.3.8<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error al borrar las notificaciones antiguas</li>
</ul>
<h4>0.3.7 (2011-04-14)</h4>
<h4>0.3.7<h4>
<ul>
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregido error en el apellido de las notificaciones</li>
</ul>
<h4>0.3.6 (2011-04-13)</h4>
<h4>0.3.6<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adidos detalles de las notificaciones</li>
<li type="disc">A&ntilde;adido mensaje de actualizaci&oacute;n de la aplicaci&oacute;n</li>
</ul>
<h4>0.3.5 (2011-04-05)</h4>
<h4>0.3.5<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida barra de acci&oacute;n</li>
@ -882,7 +892,7 @@
<li type="disc">Mejorada la interfaz de usuario</li>
<li type="disc">Mejoras de rendimiento</li>
</ul>
<h4>0.3.4 (2011-03-27)</h4>
<h4>0.3.4<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Mejorada la interfaz de usuario</li>
@ -891,12 +901,12 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregidos errores menores en los mensajes de error</li>
</ul>
<h4>0.3.3 (2011-03-27)</h4>
<h4>0.3.3<h4>
<ul>
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">Redise&ntilde;ada la interfaz de usuario</li>
</ul>
<h4>0.3.2 (2011-03-24)</h4>
<h4>0.3.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido cuadro de di&aacute;logo de primer inicio de la aplicaci&oacute;n</li>
@ -905,7 +915,7 @@
<lh class="update">[ACTUALIZACIONES]</lh>
<li type="disc">mejorada la pantalla de configuraci&oacute;n</li>
</ul>
<h4>0.3.1 (2011-03-21)</h4>
<h4>0.3.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido guardado autom&aacute;tico de la configuraci&oacute;n</li>
@ -921,13 +931,13 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Corregidos problemas de compatibilidad con algunos dispositivos</li>
</ul>
<h4>0.3 (2011-03-08)</h4>
<h4>0.3<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido m&oacute;dulo de Notificaciones</li>
<li type="disc">A&ntilde;adida compatibilidad con Android 3.0 Honeycomb</li>
</ul>
<h4>0.2.2 (2011-01-18)</h4>
<h4>0.2.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida comprobaci&oacute;n de la conexi&oacute;n a Internet</li>
@ -944,13 +954,13 @@
<li type="disc">Corregidos los iconos del lanzador</li>
<li type="disc">Corregidos problemas de compatibilidad con Android 1.6</li>
</ul>
<h4>0.2.1 (2010-12-15)</h4>
<h4>0.2.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida compatibilidad con Android 2.3 Gingerbread</li>
<li type="disc">Completado el m&oacute;dulo de Login</li>
</ul>
<h4>0.2 (2010-12-08)</h4>
<h4>0.2<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adido cierre de sesi&oacute;n autom&aacute;tico cuando se modifica
@ -958,7 +968,7 @@
</li>
<li type="disc">A&ntilde;adida base de datos inicial</li>
</ul>
<h4>0.1.1 (2010-11-06)</h4>
<h4>0.1.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">A&ntilde;adida imagen de fondo en la pantalla principal</li>
@ -967,7 +977,7 @@
<lh class="fix">[CORRECCIONES]</lh>
<li type="disc">Correcciones menores en la pantalla principal</li>
</ul>
<h4>0.1 (2010-11-03)</h4>
<h4>0.1<h4>
<ul>
<lh class="new">[NOVEDADES]</lh>
<li type="disc">Versi&oacute;n inicial</li>

View File

@ -18,22 +18,32 @@
</head>
<body bgcolor="white"><!--
<h4>1.6.0 (upcoming)</h4>
<h4>1.6.0</h4>
<ul>
<li type="disc">Added indoor location module</li>
</ul>-->
<h4>1.5.8 (2022-05-23)</h4>
<h4>1.5.10</h4>
<ul>
<li type="disc">Fixed permissions management on document download for Android 10+</li>
</ul>
<h4>1.5.9</h4>
<ul>
<li type="disc">Added support for background notification download when power save mode is enabled</li>
</ul>
<h4>1.5.8<h4>
<ul>
<li type="disc">Fixed notifications downloads on Android 12 (S)</li>
</ul>
<h4>1.5.7 (2020-12-19)</h4>
<h4>1.5.7<h4>
<ul>
<li type="disc">Fixed file downloads on Android R</li>
</ul>
<h4>1.5.6 (2019-11-05)</h4>
<h4>1.5.6<h4>
<ul>
<li type="disc">
<strong>Rollcall:</strong>
@ -41,13 +51,13 @@
</li>
</ul>
<h4>1.5.5 (2019-07-08)</h4>
<h4>1.5.5<h4>
<ul>
<li type="disc">Added support for Android-Q</li>
<li type="disc">Fixed CHANGELOG typos</li>
</ul>
<h4>1.5.4 (2018-02-25)</h4>
<h4>1.5.4<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">
@ -56,13 +66,13 @@
</li>
</ul>
<h4>1.5.3 (2017-10-25)</h4>
<h4>1.5.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added compatibility for Android Oreo notifications system</li>
</ul>
<h4>1.5.2 (2017-02-12)</h4>
<h4>1.5.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added privacy policy in Preferences screen</li>
@ -73,12 +83,12 @@
files, such as Documents, Shared and Marks, are now available in the new Files folder
</li>
</ul>
<h4>1.5.1 (2017-01-21)</h4>
<h4>1.5.1<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed unparseable date: &quot;anyType{}&quot;(at offset 0) error</li>
</ul>
<h4>1.5.0 (2016-09-01)</h4>
<h4>1.5.0<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">
@ -86,7 +96,7 @@
Added search of recipients
</li>
</ul>
<h4>1.4.0 (2016-07-25)</h4>
<h4>1.4.0<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">
@ -101,7 +111,7 @@
Fixed consultation of marks from the student role
</li>
</ul>
<h4>1.3.4 (2016-07-17)</h4>
<h4>1.3.4<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">
@ -122,7 +132,7 @@
Minor improvements
</li>
</ul>
<h4>1.3.3 (2016-01-31)</h4>
<h4>1.3.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added social notifications</li>
@ -133,18 +143,18 @@
Now notifications are automatically removed with greater age than 30 days
</li>
</ul>
<h4>1.3.2 (2016-01-06)</h4>
<h4>1.3.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added permission management on Android 6.0 Marshmallow</li>
</ul>
<h4>1.3.1 (2015-12-06)</h4>
<h4>1.3.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Improvements on login screen and create account screen</li>
<li type="disc">Now canceled notifications are not downloaded during synchronization</li>
</ul>
<h4>1.3 (2015-09-03)</h4>
<h4>1.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added creation of user accounts</li>
@ -154,13 +164,13 @@
(partial in tests)
</li>
</ul>
<h4>1.2.4 (2015-03-15)</h4>
<h4>1.2.4<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Changed scan delay of codes to one second</li>
<li type="disc">Now the Downloads module requires Android 3.0 or higher</li>
</ul>
<h4>1.2.3 (2014-11-30)</h4>
<h4>1.2.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added support for barcode scanning in rollcall module</li>
@ -170,7 +180,7 @@
<li type="disc">Now the events list is sorted in rollcall module</li>
<li type="disc">Changed scan delay of codes to 2 seconds</li>
</ul>
<h4>1.2.2 (2014-11-26)</h4>
<h4>1.2.2<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Disabled lateral sliding of notifications</li>
@ -181,7 +191,7 @@
<li type="disc">Fixed screen refresh of users and attendances lists</li>
<li type="disc">Now the relationship between events and courses is handled properly</li>
</ul>
<h4>1.2.1 (2014-11-24)</h4>
<h4>1.2.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Now you can send empty attendance listings to mark all attendees as
@ -192,23 +202,23 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed screen refresh of attendances list</li>
</ul>
<h4>1.2 (2014-11-23)</h4>
<h4>1.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added birthday greetings</li>
<li type="disc">Added rollcall module with sending of attendances to SWAD</li>
</ul>
<h4>1.1.4 (2014-11-11)</h4>
<h4>1.1.4<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed download of notifications due to changes in SWAD</li>
</ul>
<h4>1.1.3 (2014-10-05)</h4>
<h4>1.1.3<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed wrong update of notifications when sliding up the list</li>
</ul>
<h4>1.1.2 (2014-09-18)</h4>
<h4>1.1.2<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Improvements in error messages</li>
@ -220,7 +230,7 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed typos in changelog</li>
</ul>
<h4>1.1.1 (2014-09-16)</h4>
<h4>1.1.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Now the lateral sliding of the notifications is only available for Android
@ -233,7 +243,7 @@
without being on top of it
</li>
</ul>
<h4>1.1 (2014-09-08)</h4>
<h4>1.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Now the notifications are grouped into
@ -260,7 +270,7 @@
</li>
<li type="disc">Fixed crash for open downloaded files with no apps to open with</li>
</ul>
<h4>1.0 (2014-03-26)</h4>
<h4>1.0<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">New GUI Holo style</li>
@ -276,7 +286,7 @@
<li type="disc">Disabled rollcall module (pending redesign and integration with SWAD)</li>
<li type="disc">Removed unused languages</li>
</ul>
<h4>0.13 (2014-02-02)</h4>
<h4>0.13<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added login screen</li>
@ -287,7 +297,7 @@
when automatic synchronization is enabled
</li>
</ul>
<h4>0.12.7 (2013-12-14)</h4>
<h4>0.12.7<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added info of seen notifications from SWAD on notifications download</li>
@ -300,7 +310,7 @@
<li type="disc">Fixed error retrieving the list of students on the rollcall module</li>
<li type="disc">Fixed error retrieving the tests configuration</li>
</ul>
<h4>0.12.6 (2013-11-24)</h4>
<h4>0.12.6<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added management of seen notifications</li>
@ -317,17 +327,17 @@
<li type="disc">Fixed black background color when the notifications list is being pulled
</li>
</ul>
<h4>0.12.5 (2013-11-10)</h4>
<h4>0.12.5<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug that prevented replying messages</li>
</ul>
<h4>0.12.4 (2013-11-09)</h4>
<h4>0.12.4<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug that prevented consulting practice sessions</li>
</ul>
<h4>0.12.3 (2013-11-09)</h4>
<h4>0.12.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added pull-to-refresh update system to the notifications</li>
@ -357,12 +367,12 @@
<li type="disc">Fixed a bug when trying to download an user picture from an empty URL</li>
<li type="disc">Fixed display bug on number of questions input of the tests</li>
</ul>
<h4>0.12.2 (2013-06-19)</h4>
<h4>0.12.2<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Updated communications with server</li>
</ul>
<h4>0.12.1 (2013-06-09)</h4>
<h4>0.12.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added forumPostCourse notification type</li>
@ -387,7 +397,7 @@
<li type="disc">Fixed error messages display</li>
<li type="disc">Modified NULL value detection in server response</li>
</ul>
<h4>0.12 (2013-04-20)</h4>
<h4>0.12<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added new notification types "documentFile", "sharedFile", "enrollment" and
@ -429,7 +439,7 @@
</li>
<li type="disc">Fixed non decimal keyboard type for decimal numbers on some devices</li>
</ul>
<h4>0.11.3 (2013-03-03)</h4>
<h4>0.11.3<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Shows default server in preference summary when the preference value is
@ -443,7 +453,7 @@
preferences change
</li>
</ul>
<h4>0.11.2 (2013-02-24)</h4>
<h4>0.11.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added refresh button on main screen to update courses without clean the
@ -466,7 +476,7 @@
behaviour is exactly the opposite in Android 4.2)
</li>
</ul>
<h4>0.11.1 (2013-01-26)</h4>
<h4>0.11.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added compatibility with screens with basic touch capabilities</li>
@ -492,7 +502,7 @@
descriptors
</li>
</ul>
<h4>0.11 (2012-12-15)</h4>
<h4>0.11<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added downloads module</li>
@ -504,7 +514,7 @@
functions in SWAD
</li>
</ul>
<h4>0.10.1 (2012-11-17)</h4>
<h4>0.10.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added Android 4.2 compatibility</li>
@ -521,7 +531,7 @@
<li type="disc">Fixed available choose for groups with real membership</li>
<li type="disc">Fixed problem with uppercase letter in notifications without summary</li>
</ul>
<h4>0.10 (2012-11-09)</h4>
<h4>0.10<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added module for enrollment to course groups</li>
@ -539,7 +549,7 @@
<li type="disc">Fixed some bugs in course selection spinner</li>
<li type="disc">Fixed bug when checking available connections</li>
</ul>
<h4>0.9.3 (2012-07-20)</h4>
<h4>0.9.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added folders support in server URL</li>
@ -548,14 +558,14 @@
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved error messages</li>
</ul>
<h4>0.9.2 (2012-07-10)</h4>
<h4>0.9.2<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">camera.autofocus feature marked as optional in order to fix device
incompatibilities
</li>
</ul>
<h4>0.9.1 (2012-07-09)</h4>
<h4>0.9.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added DNI with letter (first and last) support and DNI with zeros support
@ -566,17 +576,17 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed xlarge screens support</li>
</ul>
<h4>0.9 (2012-07-01)</h4>
<h4>0.9<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added RollCall module</li>
</ul>
<h4>0.8.1 (2012-05-20)</h4>
<h4>0.8.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added message replys from open notifications</li>
</ul>
<h4>0.8 (2012-05-01)</h4>
<h4>0.8<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added automatic synchronization of notifications</li>
@ -597,7 +607,7 @@
<li type="disc">Fixed HTML bug in location field of notifications</li>
<li type="disc">Fixed br tag bug in notifications</li>
</ul>
<h4>0.7.2 (2012-02-22)</h4>
<h4>0.7.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added notification alerts on status bar</li>
@ -607,7 +617,7 @@
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved query statements</li>
</ul>
<h4>0.7.1 (2012-01-11)</h4>
<h4>0.7.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved rendering speed in marks function</li>
@ -616,12 +626,12 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed rendering errors in marks function</li>
</ul>
<h4>0.7 (2012-01-10)</h4>
<h4>0.7<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added marks function in notifications module</li>
</ul>
<h4>0.6.2 (2011-12-09)</h4>
<h4>0.6.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added Blog URL to preferences screen</li>
@ -632,7 +642,7 @@
<li type="disc">Reinitialized last course selected on database cleaning</li>
<li type="disc">Minor changes on error messages</li>
</ul>
<h4>0.6.1 (2011-11-16)</h4>
<h4>0.6.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added Google+ account to preferences screen</li>
@ -645,7 +655,7 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed menu operation in all activities</li>
</ul>
<h4>0.6 (2011-11-06)</h4>
<h4>0.6<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added Android 4.0 compatibility</li>
@ -653,7 +663,7 @@
<li type="disc">Added clean database option to application menu</li>
<li type="disc">Added name of SWAD's creator to author preferences</li>
</ul>
<h4>0.5.2 (2011-09-29)</h4>
<h4>0.5.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added real names of receivers in "Message Sent" toast</li>
@ -666,12 +676,12 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug on test questions syncronization</li>
</ul>
<h4>0.5.1 (2011-09-26)</h4>
<h4>0.5.1<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug in reply messages function</li>
</ul>
<h4>0.5 (2011-09-26)</h4>
<h4>0.5<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added messages module</li>
@ -680,17 +690,17 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Minor fixes</li>
</ul>
<h4>0.4.5 (2011-07-08)</h4>
<h4>0.4.5<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Optimized questions syncronization</li>
</ul>
<h4>0.4.4 (2011-07-05)</h4>
<h4>0.4.4<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Minor fixes</li>
</ul>
<h4>0.4.3 (2011-06-15)</h4>
<h4>0.4.3<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved tests GUI</li>
@ -699,7 +709,7 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Minor fixes</li>
</ul>
<h4>0.4.2 (2011-06-15)</h4>
<h4>0.4.2<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Now not answered questions score as 0</li>
@ -708,7 +718,7 @@
</li>
<li type="disc">Improved tests GUI</li>
</ul>
<h4>0.4.1 (2011-06-14)</h4>
<h4>0.4.1<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Allowed negative scores on tests</li>
@ -717,7 +727,7 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug on questions syncronization</li>
</ul>
<h4>0.4 (2011-06-13)</h4>
<h4>0.4<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added tests module</li>
@ -726,7 +736,7 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Minor fixes</li>
</ul>
<h4>0.3.10 (2011-05-19)</h4>
<h4>0.3.10<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added assignment, survey and unknown notifications</li>
@ -734,28 +744,28 @@
<li type="disc">Added forced relogin if connection time exceeds a certain period</li>
<li type="disc">Added incorrect user or password error message</li>
</ul>
<h4>0.3.9 (2011-05-03)</h4>
<h4>0.3.9<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed empty fields bug on notifications module</li>
</ul>
<h4>0.3.8 (2011-04-27)</h4>
<h4>0.3.8<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed bug on cleaning old notifications</li>
</ul>
<h4>0.3.7 (2011-04-14)</h4>
<h4>0.3.7<h4>
<ul>
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed notifications bug in surname</li>
</ul>
<h4>0.3.6 (2011-04-13)</h4>
<h4>0.3.6<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added notification details</li>
<li type="disc">Added upgrade dialog</li>
</ul>
<h4>0.3.5 (2011-04-05)</h4>
<h4>0.3.5<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added action bar</li>
@ -766,7 +776,7 @@
<li type="disc">Improved GUI</li>
<li type="disc">Improved performance</li>
</ul>
<h4>0.3.4 (2011-03-27)</h4>
<h4>0.3.4<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved GUI</li>
@ -775,12 +785,12 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed minor errors on error messages</li>
</ul>
<h4>0.3.3 (2011-03-27)</h4>
<h4>0.3.3<h4>
<ul>
<lh class="update">[UPDATES]</lh>
<li type="disc">Redesigned GUI</li>
</ul>
<h4>0.3.2 (2011-03-24)</h4>
<h4>0.3.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added first run dialog</li>
@ -789,7 +799,7 @@
<lh class="update">[UPDATES]</lh>
<li type="disc">Improved preferences screen</li>
</ul>
<h4>0.3.1 (2011-03-21)</h4>
<h4>0.3.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added automatic saving of preferences</li>
@ -804,13 +814,13 @@
<lh class="fix">[FIXES]</lh>
<li type="disc">Fixed compatibility issues with some devices</li>
</ul>
<h4>0.3 (2011-03-08)</h4>
<h4>0.3<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added notifications module</li>
<li type="disc">Added Android 3.0 Honeycomb compatibility</li>
</ul>
<h4>0.2.2 (2011-01-18)</h4>
<h4>0.2.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added connection check</li>
@ -827,19 +837,19 @@
<li type="disc">Fixed launcher icons</li>
<li type="disc">Fixed Android 1.6 compatibility issues</li>
</ul>
<h4>0.2.1 (2010-12-15)</h4>
<h4>0.2.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added Android 2.3 Gingerbread compatibility</li>
<li type="disc">Completed login module</li>
</ul>
<h4>0.2 (2010-12-08)</h4>
<h4>0.2<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added auto logout when user id or password changes</li>
<li type="disc">Added initial database</li>
</ul>
<h4>0.1.1 (2010-11-06)</h4>
<h4>0.1.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">Added background image to main activity</li>
@ -848,7 +858,7 @@
<lh class="fix">[Fixes]</lh>
<li type="disc">Minor fixes on main screen</li>
</ul>
<h4>0.1 (2010-11-03)</h4>
<h4>0.1<h4>
<ul>
<lh class="new">[NEW]</lh>
<li type="disc">First release</li>

View File

@ -124,7 +124,6 @@
plataforma de teleformación SWAD.\nObtenlo gratis aquí:
https://play.google.com/store/apps/details?id=es.ugr.swad.swadroid</string>
<string name="blogTitle">Blog</string>
<string name="prefCatSyncTitle">Sincronización</string>
<string name="prefSyncTimeTitle">Frecuencia de sincronización</string>
<string name="prefSyncTimeSummary">Frecuencia de sincronización de las notificaciones</string>
<string name="prefSyncEnableTitle">Sincronización automática</string>
@ -356,4 +355,5 @@
<string name="checkIn">Hora</string>
<string name="lostLocation">Ubicación no encontrada</string>
<string name="nearestLocation">Punto de acceso inalámbrico más cercano</string>
<string name="appRunningBackground">SWADroid se está ejecutando</string>
</resources>

View File

@ -372,4 +372,5 @@
<string name="checkIn">Time</string>
<string name="lostLocation">Location not found</string>
<string name="nearestLocation">Nearest wireless access point</string>
<string name="appRunningBackground">SWADroid is running</string>
</resources>

View File

@ -66,26 +66,6 @@
android:key="sharePref"
android:summary="@string/shareBodyMsg"
android:title="@string/shareTitle_menu" />
<Preference
android:defaultValue=""
android:key="blogPref"
android:summary="@string/blogURL"
android:title="@string/blogTitle" />
<Preference
android:defaultValue=""
android:key="twitterPref"
android:summary="@string/twitterUser"
android:title="@string/twitterTitle" />
<Preference
android:defaultValue=""
android:key="facebookPref"
android:summary="@string/facebookURL"
android:title="@string/facebookTitle" />
<Preference
android:defaultValue=""
android:key="telegramPref"
android:summary="@string/telegramURL"
android:title="@string/telegramTitle" />
<Preference
android:defaultValue=""
android:key="privacyPolicyPref"

View File

@ -5,11 +5,11 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.android.tools.build:gradle:8.2.1'
}
}
allprojects {
repositories {
mavenCentral()

View File

@ -1,189 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - swadroid_db_crypt - Anomalies</title>
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li id='current'><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - Anomalies</span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table width='100%'>
<tr><td class='container' align='right' valign='top' colspan='2'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td></tr>
<tr>
<td class='container'><b>Things that might not be 'quite right' about your schema:</b></td>
<td class='container' align='right'>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</td></tr></table>
<ul>
<li>
<b>Columns whose name and type imply a relationship to another table's primary key:</b>
<br>Anomaly not detected<p></li>
<li>
<b>Tables without indexes:</b>
<table class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<thead align='left'>
<tr>
<th>Table</th><th>Rows</th>
</tr>
</thead>
<tbody>
<tr>
<td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/courses.html'>courses</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/group_course.html'>group_course</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/group_grouptypes.html'>group_grouptypes</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/group_types.html'>group_types</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/groups.html'>groups</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/notifications.html'>notifications</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/practice_sessions.html'>practice_sessions</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/rollcall.html'>rollcall</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_answers.html'>tst_answers</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_config.html'>tst_config</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_question_answers.html'>tst_question_answers</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_question_tags.html'>tst_question_tags</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_questions.html'>tst_questions</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_questions_course.html'>tst_questions_course</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/tst_tags.html'>tst_tags</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/users.html'>users</a></td>
<td class='detail' align='right'>0</td>
</tr>
<tr>
<td class='detail'><a href='tables/users_courses.html'>users_courses</a></td>
<td class='detail' align='right'>0</td>
</tr>
</tbody>
</table>
18 instances of anomaly detected<p></li>
<li>
<b>Columns that are flagged as both 'nullable' and 'must be unique':</b>
<br>Anomaly not detected<p></li>
<li>
<b>Tables that contain a single column:</b><table class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<thead align='left'>
<tr>
<th>Table</th>
<th>Column</th>
</tr>
</thead>
<tbody>
<tr>
<td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td><td class='detail'>locale</td>
</tr>
</tbody>
</table>
1 instance of anomaly detected<p></li>
<li>
<b>Tables with incrementing column names, potentially indicating denormalization:</b>
<table class='dataTable' border='1' rules='groups'>
<thead align='left'>
<tr>
<th>Table</th>
</tr>
</thead>
<tbody>
<tr>
<td class='detail'><a href='tables/notifications.html'>notifications</a></td>
</tr>
<tr>
<td class='detail'><a href='tables/users.html'>users</a></td>
</tr>
</tbody>
</table>
2 instances of anomaly detected<p></li>
<li>
<b>Columns whose default value is the word 'NULL' or 'null', but the SQL NULL value may have been intended:</b>
<br>Anomaly not detected<p></li>
</ul>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - swadroid_db_crypt - Constraints</title>
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li id='current'><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - Constraints</span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<div class='indent'>
<table width='100%'>
<tr><td class='container' valign='bottom'><b>
0 Foreign Key Constraints:</b>
</td><td class='container' align='right'>
<table>
<tr><td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td></tr>
<tr><td class='container'>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</td></tr></table>
</td></tr>
</table><br>
<table class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<thead align='left'>
<tr>
<th>Constraint Name</th>
<th>Child Column</th>
<th>Parent Column</th>
<th>Delete Rule</th>
</tr>
</thead>
<tbody>
<tr>
<td class='detail' valign='top' colspan='4'>None detected</td>
</tr>
</tbody>
</table>
<a name='checkConstraints'></a><p>
<b>Check Constraints:</b>
<TABLE class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<thead align='left'>
<tr>
<th>Table</th>
<th>Constraint Name</th>
<th>Constraint</th>
</tr>
</thead>
<tbody>
<tr>
<td class='detail' valign='top' colspan='3'>None detected</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>

View File

@ -1,18 +0,0 @@
users_courses
users
tst_tags
tst_questions_course
tst_questions
tst_question_tags
tst_question_answers
tst_config
tst_answers
rollcall
practice_sessions
notifications
groups
group_types
group_grouptypes
group_course
courses
android_metadata

View File

@ -1,30 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "android_metadata" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"android_metadata" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">android_metadata</TD></TR>
<TR><TD PORT="locale" COLSPAN="3" ALIGN="LEFT">locale</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/android_metadata.html"
tooltip="android_metadata"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 B

View File

@ -1,34 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "courses" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"courses" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">courses</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="userRole" COLSPAN="3" ALIGN="LEFT">userRole</TD></TR>
<TR><TD PORT="shortName" COLSPAN="3" ALIGN="LEFT">shortName</TD></TR>
<TR><TD PORT="fullName" COLSPAN="3" ALIGN="LEFT">fullName</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/courses.html"
tooltip="courses"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,32 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "group_course" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"group_course" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_course</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/group_course.html"
tooltip="group_course"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,32 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "group_grouptypes" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"group_grouptypes" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_grouptypes</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="grpTypCod" COLSPAN="3" ALIGN="LEFT">grpTypCod</TD></TR>
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/group_grouptypes.html"
tooltip="group_grouptypes"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,36 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "group_types" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"group_types" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_types</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="courseCode" COLSPAN="3" ALIGN="LEFT">courseCode</TD></TR>
<TR><TD PORT="groupTypeName" COLSPAN="3" ALIGN="LEFT">groupTypeName</TD></TR>
<TR><TD PORT="mandatory" COLSPAN="3" ALIGN="LEFT">mandatory</TD></TR>
<TR><TD PORT="multiple" COLSPAN="3" ALIGN="LEFT">multiple</TD></TR>
<TR><TD PORT="openTime" COLSPAN="3" ALIGN="LEFT">openTime</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/group_types.html"
tooltip="group_types"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,37 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "groups" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"groups" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">groups</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="groupName" COLSPAN="3" ALIGN="LEFT">groupName</TD></TR>
<TR><TD PORT="maxStudents" COLSPAN="3" ALIGN="LEFT">maxStudents</TD></TR>
<TR><TD PORT="students" COLSPAN="3" ALIGN="LEFT">students</TD></TR>
<TR><TD PORT="open" COLSPAN="3" ALIGN="LEFT">open</TD></TR>
<TR><TD PORT="fileZones" COLSPAN="3" ALIGN="LEFT">fileZones</TD></TR>
<TR><TD PORT="member" COLSPAN="3" ALIGN="LEFT">member</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/groups.html"
tooltip="groups"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,44 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "notifications" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"notifications" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">notifications</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="notifCode" COLSPAN="3" ALIGN="LEFT">notifCode</TD></TR>
<TR><TD PORT="eventCode" COLSPAN="3" ALIGN="LEFT">eventCode</TD></TR>
<TR><TD PORT="eventType" COLSPAN="3" ALIGN="LEFT">eventType</TD></TR>
<TR><TD PORT="eventTime" COLSPAN="3" ALIGN="LEFT">eventTime</TD></TR>
<TR><TD PORT="userSurname1" COLSPAN="3" ALIGN="LEFT">userSurname1</TD></TR>
<TR><TD PORT="userSurname2" COLSPAN="3" ALIGN="LEFT">userSurname2</TD></TR>
<TR><TD PORT="userFirstname" COLSPAN="3" ALIGN="LEFT">userFirstname</TD></TR>
<TR><TD PORT="userPhoto" COLSPAN="3" ALIGN="LEFT">userPhoto</TD></TR>
<TR><TD PORT="location" COLSPAN="3" ALIGN="LEFT">location</TD></TR>
<TR><TD PORT="summary" COLSPAN="3" ALIGN="LEFT">summary</TD></TR>
<TR><TD PORT="status" COLSPAN="3" ALIGN="LEFT">status</TD></TR>
<TR><TD PORT="content" COLSPAN="3" ALIGN="LEFT">content</TD></TR>
<TR><TD PORT="seenLocal" COLSPAN="3" ALIGN="LEFT">seenLocal</TD></TR>
<TR><TD PORT="seenRemote" COLSPAN="3" ALIGN="LEFT">seenRemote</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/notifications.html"
tooltip="notifications"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1,36 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "practice_sessions" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"practice_sessions" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">practice_sessions</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
<TR><TD PORT="startDate" COLSPAN="3" ALIGN="LEFT">startDate</TD></TR>
<TR><TD PORT="endDate" COLSPAN="3" ALIGN="LEFT">endDate</TD></TR>
<TR><TD PORT="site" COLSPAN="3" ALIGN="LEFT">site</TD></TR>
<TR><TD PORT="description" COLSPAN="3" ALIGN="LEFT">description</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/practice_sessions.html"
tooltip="practice_sessions"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,22 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "compactRelationshipsDiagram" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
label="\nGenerated by SchemaSpy"
labeljust="l"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
}

View File

@ -1,33 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "rollcall" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"rollcall" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">rollcall</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="sessCod" COLSPAN="3" ALIGN="LEFT">sessCod</TD></TR>
<TR><TD PORT="usrCod" COLSPAN="3" ALIGN="LEFT">usrCod</TD></TR>
<TR><TD PORT="comments" COLSPAN="3" ALIGN="LEFT">comments</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/rollcall.html"
tooltip="rollcall"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,34 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_answers" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_answers" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_answers</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="ansInd" COLSPAN="3" ALIGN="LEFT">ansInd</TD></TR>
<TR><TD PORT="answer" COLSPAN="3" ALIGN="LEFT">answer</TD></TR>
<TR><TD PORT="correct" COLSPAN="3" ALIGN="LEFT">correct</TD></TR>
<TR><TD PORT="answerFeedback" COLSPAN="3" ALIGN="LEFT">answerFeedback</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_answers.html"
tooltip="tst_answers"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,36 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_config" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_config" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_config</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="min" COLSPAN="3" ALIGN="LEFT">min</TD></TR>
<TR><TD PORT="def" COLSPAN="3" ALIGN="LEFT">def</TD></TR>
<TR><TD PORT="max" COLSPAN="3" ALIGN="LEFT">max</TD></TR>
<TR><TD PORT="feedback" COLSPAN="3" ALIGN="LEFT">feedback</TD></TR>
<TR><TD PORT="editTime" COLSPAN="3" ALIGN="LEFT">editTime</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_config.html"
tooltip="tst_config"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,32 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_question_answers" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_question_answers" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_question_answers</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
<TR><TD PORT="ansCod" COLSPAN="3" ALIGN="LEFT">ansCod</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_question_answers.html"
tooltip="tst_question_answers"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,33 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_question_tags" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_question_tags" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_question_tags</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
<TR><TD PORT="tagCod" COLSPAN="3" ALIGN="LEFT">tagCod</TD></TR>
<TR><TD PORT="tagInd" COLSPAN="3" ALIGN="LEFT">tagInd</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_question_tags.html"
tooltip="tst_question_tags"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,35 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_questions" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_questions" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_questions</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="ansType" COLSPAN="3" ALIGN="LEFT">ansType</TD></TR>
<TR><TD PORT="shuffle" COLSPAN="3" ALIGN="LEFT">shuffle</TD></TR>
<TR><TD PORT="stem" COLSPAN="3" ALIGN="LEFT">stem</TD></TR>
<TR><TD PORT="feedback" COLSPAN="3" ALIGN="LEFT">feedback</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_questions.html"
tooltip="tst_questions"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1,32 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_questions_course" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_questions_course" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_questions_course</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_questions_course.html"
tooltip="tst_questions_course"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,32 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "tst_tags" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"tst_tags" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_tags</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
<TR><TD PORT="tagTxt" COLSPAN="3" ALIGN="LEFT">tagTxt</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/tst_tags.html"
tooltip="tst_tags"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 986 B

View File

@ -1,38 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "users" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"users" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">users</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="userCode" COLSPAN="3" ALIGN="LEFT">userCode</TD></TR>
<TR><TD PORT="userID" COLSPAN="3" ALIGN="LEFT">userID</TD></TR>
<TR><TD PORT="userNickname" COLSPAN="3" ALIGN="LEFT">userNickname</TD></TR>
<TR><TD PORT="userSurname1" COLSPAN="3" ALIGN="LEFT">userSurname1</TD></TR>
<TR><TD PORT="userSurname2" COLSPAN="3" ALIGN="LEFT">userSurname2</TD></TR>
<TR><TD PORT="userFirstname" COLSPAN="3" ALIGN="LEFT">userFirstname</TD></TR>
<TR><TD PORT="photoPath" COLSPAN="3" ALIGN="LEFT">photoPath</TD></TR>
<TR><TD PORT="userRole" COLSPAN="3" ALIGN="LEFT">userRole</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/users.html"
tooltip="users"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,33 +0,0 @@
// dot 2.26.3 on Linux 3.11.0-12-generic
// SchemaSpy rev 590
digraph "users_courses" {
graph [
rankdir="RL"
bgcolor="#f7f7f7"
nodesep="0.18"
ranksep="0.46"
fontname="Helvetica"
fontsize="11"
];
node [
fontname="Helvetica"
fontsize="11"
shape="plaintext"
];
edge [
arrowsize="0.8"
];
"users_courses" [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">users_courses</TD></TR>
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
<TR><TD PORT="userCode" COLSPAN="3" ALIGN="LEFT">userCode</TD></TR>
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
</TABLE>>
URL="tables/users_courses.html"
tooltip="users_courses"
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,258 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - swadroid_db_crypt</title>
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
$(function(){
associate($('#showTables'), $('.tbl'));
associate($('#showViews'), $('.view'));
jQuery.fn.alternateRowColors = function() {
$('tbody tr:visible').each(function(i) {
if (i % 2 == 0) {
$(this).removeClass('even').addClass('odd');
} else {
$(this).removeClass('odd').addClass('even');
}
});
return this;
};
$('#showTables, #showViews').click(function() {
$('table.dataTable').alternateRowColors();
});
$('table.dataTable').alternateRowColors();
})
</SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li id='current'><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span></span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table width='100%'>
<tr><td class='container'>
<span class='container'>Generated by <span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span> on jue ene 30 23:37 CET 2014</span>
</td></tr>
<tr>
<td class='container'>Database Type: SQLite - 3.7.15 </td>
<td class='container' align='right' valign='top' rowspan='3'>
<a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a><br>
<br><div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</td>
</tr>
<tr>
<td class='container'><br><a href='swadroid_db_crypt.xml' title='XML Representation'>XML Representation</a><br><a href='insertionOrder.txt' title='Useful for loading data into a database'>Insertion Order</a>&nbsp;<a href='deletionOrder.txt' title='Useful for purging data from a database'>Deletion Order</a>&nbsp;(for database loading/purging scripts)</td>
</tr>
</table>
<div class='indent'>
<p><b><label for='showTables' style='display:none;'><input type='checkbox' id='showTables' checked></label>
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
</b>
<table class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup class='comment'>
<thead align='left'>
<tr>
<th valign='bottom'>Table</th>
<th align='right' valign='bottom'>Children</th>
<th align='right' valign='bottom'>Parents</th>
<th align='right' valign='bottom'>Columns</th>
<th align='right' valign='bottom'>Rows</th>
<th class='comment' align='left' valign='bottom'>Comments</th>
</tr>
</thead>
<tbody>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>1</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/courses.html'>courses</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>5</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_course.html'>group_course</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>3</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_grouptypes.html'>group_grouptypes</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>3</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_types.html'>group_types</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>7</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/groups.html'>groups</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>8</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/notifications.html'>notifications</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>15</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/practice_sessions.html'>practice_sessions</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>7</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/rollcall.html'>rollcall</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>4</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_answers.html'>tst_answers</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>5</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_config.html'>tst_config</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>7</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_question_answers.html'>tst_question_answers</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>3</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_question_tags.html'>tst_question_tags</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>4</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_questions.html'>tst_questions</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>6</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_questions_course.html'>tst_questions_course</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>3</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_tags.html'>tst_tags</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>3</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/users.html'>users</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>9</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/users_courses.html'>users_courses</a></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'></td>
<td class='detail' align='right'>4</td>
<td class='detail' align='right'>0</td>
<td class='comment detail'></td>
</tr>
<tr>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='comment detail'>&nbsp;</td>
</tr>
<tr class='tbl'>
<td class='detail'><b>18 Tables</b></td>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='detail' align='right'><b>97</b></td>
<td class='detail' align='right'><b>0</b></td>
<td class='comment detail'>&nbsp;</td>
</tr>
<tr class='view'>
<td class='detail'><b>0 Views</b></td>
<td class='detail'>&nbsp;</td>
<td class='detail'>&nbsp;</td>
<td class='detail' align='right'><b>0</b></td>
<td class='detail'>&nbsp;</td>
<td class='comment detail'>&nbsp;</td>
</tr>
</table>
</div>
</body>
</html>

View File

@ -1,18 +0,0 @@
android_metadata
courses
group_course
group_grouptypes
group_types
groups
notifications
practice_sessions
rollcall
tst_answers
tst_config
tst_question_answers
tst_question_tags
tst_questions
tst_questions_course
tst_tags
users
users_courses

154
doc/ER_db/jquery.js vendored
View File

@ -1,154 +0,0 @@
/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);

View File

@ -1,83 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - swadroid_db_crypt - All Relationships</title>
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
<li id='current'><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - All Relationships</span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table class='container' width='100%'>
<tr><td class='container'>
<span class='container'>Generated by <span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span> on jue ene 30 23:37 CET 2014</span>
</td>
<td class='container' align='right' valign='top' rowspan='2'>
<table class='legend' border='0'>
<tr>
<td class='dataTable' valign='bottom'>Legend:</td>
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
</tr>
<tr><td class='container' colspan='2'>
<table class='dataTable' border='1'>
<tbody>
<tr><td class='primaryKey'>Primary key columns</td></tr>
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
<tr class='impliedRelationship'><td class='legendDetail'>Dashed lines show implied relationships</td></tr>
<tr><td class='legendDetail'>&lt; <em>n</em> &gt; number of related tables</td></tr>
</table>
</td></tr>
</table>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
&nbsp;
</td></tr>
<tr><td class='container' align='left' valign='top'>
No relationships were detected in the schema.
</td></tr>
<tr><td class='container' align='left' valign='top'>
<form name='options' action=''>
</form>
</td></tr></table>
<table width="100%"><tr><td class="container">
</td></tr></table>
</div>
</body>
</html>

View File

@ -1,277 +0,0 @@
/* required colors MUST be specified in RGB hex notation or the diagrams won't have correct colors */
body {
color: #000;
background-color: #F7F7F7;
font-family: arial, geneva, helvetica, lucida, sans-serif;
margin: 0 0 0 0;
padding: 0px;
}
/* background must be specified for it to propagate into diagrams */
.content {
margin: 0px;
background: #F7F7F7;
border: 0 0;
padding:.4em;
}
/* background-color must be specified for th to propagate into diagrams */
th {
background-color: #9BAB96;
text-align: left;
padding: 0px 4px;
}
/* background-color must be specified for td to propagate into diagrams */
td {
background-color: #ffffff;
}
tr.even td.detail {
}
tr.odd td.detail {
background-color: #F7F7F7;
}
h1 {
font-size: 125%;
}
/* background must be specified for .primaryKey to propagate into diagrams */
.primaryKey {
background: #BED1B8;
padding: 0px 4px;
}
/* background must be specified for .indexedColumn to propagate into diagrams */
.indexedColumn {
background: #F4F7DA;
padding: 0px 4px;
}
/* background must be specified for .excludedColumn to propagate into diagrams */
.excludedColumn {
background: #C0C0C0;
padding: 0px 4px;
}
/* background must be specified for .selectedTable to propagate into diagrams */
.selectedTable {
background: #A9AB96;
}
.detail {
padding: 0px 4px;
}
table {
border-style: none;
margin: 0;
}
.impliedRelationship {
display: none;
font-style: italic;
color: #183118
}
.dataTable {
font-size: 85%;
background-color: #F7F7F7;
}
.heading {
background: transparent;
padding: 8px 0px;
}
.header {
color: #000000;
background: transparent;
font-weight: bold;
font-size: 130%;
text-align: left;
}
.description {
display: block;
padding: 8px 0px;
}
.signature {
font-size: 105%;
font-weight: bold;
font-style: italic;
}
.container {
background-color: #F7F7F7;
padding: 0px 0px;
}
.legend {
display: none;
text-align: left;
}
.legendDetail {
background-color: #F7F7F7;
padding: 0px 4px;
font-style: normal;
color: #000000
}
.relatedTable {
padding: 0px 4px;
}
.relatedKey {
display: none;
padding: 0px -4px 0px 4px;
}
.constraint {
display: none;
text-align: right;
padding: 0px 4px;
}
.comment {
display: none;
text-align: left;
padding: 0px 4px;
}
.impliedNotOrphan {
}
.excludedRelationship {
font-size: 85%;
}
.degrees {
}
/* don't display the diagrams until we know what to display */
.diagram {
display: none;
}
.indent {
padding: 2px;
}
a:link {
color: #489148;
}
a:visited {
color: #183118;
}
.sortedByColumn {
background-color: #6C7769;
}
.notSortedByColumn {
color: #000000;
}
.viewDefinition {
font-size: 90%;
background-color: #ffffff;
border-style: solid;
border-width: 1px;
float: left;
padding: 4px;
font-family: "Courier New", Courier, monospace
}
.viewReferences {
font-size: 90%;
padding: 4px;
}
/* wrap around divs that float so they "take up space" */
div.spacer {
clear: both;
}
.preFormatted {
white-space: pre;
}
/* Tabs from http://www.alistapart.com/articles/slidingdoors/ */
/* resolve an issue with always having a scrollbar for #header */
#headerHolder {
width: 100%;
margin: 0;
border: 1px solid black;
border-bottom-style: none;
}
#header {
float:left;
width: 100%;
background:#BED1B8 url("images/background.gif") repeat-x bottom;
font-size:80%;
line-height:normal;
}
#header ul {
margin:0;
padding:10px 10px 0;
list-style:none;
}
#header li {
float:left;
background:url("images/tabLeft.gif") no-repeat left top;
margin:0;
padding:0 0 0 9px;
border-bottom:1px solid #000;
}
#header a {
float:left;
display:block;
width:.1em;
background:url("images/tabRight.gif") no-repeat right top;
padding:5px 10px 4px 1px;
text-decoration:none;
font-weight:bold;
color:#F4F7DA;
}
#header > ul a {width:auto;}
/* Commented Backslash Hack hides rule from IE5-Mac \*/
#header a {float:none;}
/* End IE5-Mac hack */
#header a:hover {
color:#333;
}
#header #current {
background-position:0 -150px;
border-width:0;
}
#header #current a {
background-position:100% -150px;
padding-bottom:5px;
color:#000;
}
#header li:hover, #header li:hover a {
background-position:0% -150px;
color:#9BAB96;
}
#header li:hover a {
background-position:100% -150px;
}

View File

@ -1,97 +0,0 @@
// table-based pages are expected to set 'table' to their name
var table = null;
// sync target's visibility with the state of checkbox
function sync(cb, target) {
var checked = cb.attr('checked');
var displayed = target.css('display') != 'none';
if (checked != displayed) {
if (checked)
target.show();
else
target.hide();
}
}
// sync target's visibility with the inverse of the state of checkbox
function unsync(cb, target) {
var checked = cb.attr('checked');
var displayed = target.css('display') != 'none';
if (checked == displayed) {
if (checked)
target.hide();
else
target.show();
}
}
// associate the state of checkbox with the visibility of target
function associate(cb, target) {
sync(cb, target);
cb.click(function() {
sync(cb, target);
});
}
// select the appropriate image based on the options selected
function syncImage() {
var implied = $('#implied').attr('checked');
$('.diagram').hide();
if (table) {
if (implied && $('#impliedTwoDegreesImg').size() > 0) {
$('#impliedTwoDegreesImg').show();
} else {
var oneDegree = $('#oneDegree').attr('checked');
if (oneDegree || $('#twoDegreesImg').size() == 0) {
$('#oneDegreeImg').show();
} else {
$('#twoDegreesImg').show();
}
}
} else {
var showNonKeys = $('#showNonKeys').attr('checked');
if (implied) {
if (showNonKeys && $('#impliedLargeImg').size() > 0) {
$('#impliedLargeImg').show();
} else if ($('#impliedCompactImg').size() > 0) {
$('#impliedCompactImg').show();
} else {
$('#realCompactImg').show();
}
} else {
if (showNonKeys && $('#realLargeImg').size() > 0) {
$('#realLargeImg').show();
} else {
$('#realCompactImg').show();
}
}
}
}
// our 'ready' handler makes the page consistent
$(function(){
associate($('#implied'), $('.impliedRelationship'));
associate($('#showComments'), $('.comment'));
associate($('#showLegend'), $('.legend'));
associate($('#showRelatedCols'), $('.relatedKey'));
associate($('#showConstNames'), $('.constraint'));
syncImage();
$('#implied,#oneDegree,#twoDegrees,#showNonKeys').click(function() {
syncImage();
});
unsync($('#implied'), $('.degrees'));
$('#implied').click(function() {
unsync($('#implied'), $('.degrees'));
});
unsync($('#removeImpliedOrphans'), $('.impliedNotOrphan'));
$('#removeImpliedOrphans').click(function() {
unsync($('#removeImpliedOrphans'), $('.impliedNotOrphan'));
});
});

View File

@ -1,138 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<database name="swadroid_db_crypt" type="SQLite - 3.7.15">
<tables>
<table name="android_metadata" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="locale" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="courses" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="1" name="userRole" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="shortName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="fullName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="group_course" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="group_grouptypes" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="grpTypCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="group_types" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="courseCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="2" name="groupTypeName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="mandatory" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="4" name="multiple" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="5" name="openTime" nullable="true" remarks="" size="2000000000" type="LONG"/>
</table>
<table name="groups" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="groupName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="2" name="maxStudents" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="3" name="students" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="4" name="open" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="5" name="fileZones" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="6" name="member" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="notifications" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="notifCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="1" name="eventCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="2" name="eventType" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="eventTime" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="4" name="userSurname1" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="5" name="userSurname2" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="6" name="userFirstname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="7" name="userPhoto" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="8" name="location" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="9" name="summary" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="10" name="status" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="11" name="content" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="12" name="seenLocal" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="13" name="seenRemote" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="practice_sessions" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="startDate" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="endDate" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="4" name="site" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="5" name="description" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="rollcall" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="sessCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="usrCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="comments" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="tst_answers" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="ansInd" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="answer" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="2" name="correct" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="answerFeedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="tst_config" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="1" name="min" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="def" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="3" name="max" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="4" name="feedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="5" name="editTime" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="tst_question_answers" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="ansCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="tst_question_tags" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="tagCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="tagInd" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="tst_questions" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="1" name="ansType" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="2" name="shuffle" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="stem" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="4" name="feedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="tst_questions_course" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="tst_tags" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
<column autoUpdated="false" digits="10" id="1" name="tagTxt" nullable="true" remarks="" size="2000000000" type="TEXT"/>
</table>
<table name="users" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="userCode" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="userID" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="2" name="userNickname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="3" name="userSurname1" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="4" name="userSurname2" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="5" name="userFirstname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="6" name="photoPath" nullable="true" remarks="" size="2000000000" type="TEXT"/>
<column autoUpdated="false" digits="10" id="7" name="userRole" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
<table name="users_courses" numRows="0" remarks="" type="TABLE">
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="0" name="userCode" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
<column autoUpdated="false" digits="10" id="2" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
</table>
</tables>
</database>

View File

@ -1,120 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - Table swadroid_db_crypt.android_metadata</title>
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
table='android_metadata';
</SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>android_metadata</span></span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table width='100%' border='0'>
<tr valign='top'><td class='container' align='left' valign='top'>
<form name='options' action=''>
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
</form>
</td><td class='container' rowspan='2' align='right' valign='top'>
<table class='legend' border='0'>
<tr>
<td class='dataTable' valign='bottom'>Legend:</td>
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
</tr>
<tr><td class='container' colspan='2'>
<table class='dataTable' border='1'>
<tbody>
<tr><td class='primaryKey'>Primary key columns</td></tr>
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
<tr><td class='legendDetail'>&lt; <em>n</em> &gt; number of related tables</td></tr>
</table>
</td></tr>
</table>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
&nbsp;
</td><tr valign='top'><td class='container' align='left' valign='top'>
<a name='columns'></a>
<table id='columns' class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup class='comment'>
<thead align='left'>
<tr>
<th>Column</th>
<th>Type</th>
<th>Size</th>
<th title='Are nulls allowed?'>Nulls</th>
<th title='Is column automatically updated?'>Auto</th>
<th title='Default value'>Default</th>
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
</tr>
</thead>
<tbody valign='top'>
<tr class='odd'>
<td class='detail'>locale</td>
<td class='detail'>text</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
</table>
<p title='1 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
</td></tr></table>
</div>
</body>
</html>

View File

@ -1,164 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - Table swadroid_db_crypt.courses</title>
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
table='courses';
</SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>courses</span></span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table width='100%' border='0'>
<tr valign='top'><td class='container' align='left' valign='top'>
<form name='options' action=''>
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
</form>
</td><td class='container' rowspan='2' align='right' valign='top'>
<table class='legend' border='0'>
<tr>
<td class='dataTable' valign='bottom'>Legend:</td>
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
</tr>
<tr><td class='container' colspan='2'>
<table class='dataTable' border='1'>
<tbody>
<tr><td class='primaryKey'>Primary key columns</td></tr>
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
<tr><td class='legendDetail'>&lt; <em>n</em> &gt; number of related tables</td></tr>
</table>
</td></tr>
</table>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
&nbsp;
</td><tr valign='top'><td class='container' align='left' valign='top'>
<a name='columns'></a>
<table id='columns' class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup class='comment'>
<thead align='left'>
<tr>
<th>Column</th>
<th>Type</th>
<th>Size</th>
<th title='Are nulls allowed?'>Nulls</th>
<th title='Is column automatically updated?'>Auto</th>
<th title='Default value'>Default</th>
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
</tr>
</thead>
<tbody valign='top'>
<tr class='even'>
<td class='detail'>_id</td>
<td class='detail'>integer</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='odd'>
<td class='detail'>id</td>
<td class='detail'>long</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='even'>
<td class='detail'>userRole</td>
<td class='detail'>integer</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='odd'>
<td class='detail'>shortName</td>
<td class='detail'>text</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='even'>
<td class='detail'>fullName</td>
<td class='detail'>text</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
</table>
<p title='5 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
</td></tr></table>
</div>
</body>
</html>

View File

@ -1,142 +0,0 @@
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<!-- SchemaSpy rev 590 -->
<title>SchemaSpy - Table swadroid_db_crypt.group_course</title>
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
table='group_course';
</SCRIPT>
</head>
<body>
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
<div id='header'>
<ul>
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility&nbsp;Tables</a></li>
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
</ul>
</div>
</td></tr></table>
<div class='content' style='clear:both;'>
<table width='100%' border='0' cellpadding='0'>
<tr>
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>group_course</span></span></td>
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
</tr>
</table>
<table width='100%' border='0'>
<tr valign='top'><td class='container' align='left' valign='top'>
<form name='options' action=''>
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
</form>
</td><td class='container' rowspan='2' align='right' valign='top'>
<table class='legend' border='0'>
<tr>
<td class='dataTable' valign='bottom'>Legend:</td>
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&amp;type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
</tr>
<tr><td class='container' colspan='2'>
<table class='dataTable' border='1'>
<tbody>
<tr><td class='primaryKey'>Primary key columns</td></tr>
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
<tr><td class='legendDetail'>&lt; <em>n</em> &gt; number of related tables</td></tr>
</table>
</td></tr>
</table>
<div style="margin-right: 2pt;">
<script type="text/javascript"><!--
google_ad_client = "pub-9598353634003340";
google_ad_channel ="SchemaSpy-generated";
google_ad_width = 234;
google_ad_height = 60;
google_ad_format = "234x60_as";
google_ad_type = "text";
google_color_border = "9bab96";
google_color_link = "489148";
google_color_text = "000000";
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
&nbsp;
</td><tr valign='top'><td class='container' align='left' valign='top'>
<a name='columns'></a>
<table id='columns' class='dataTable' border='1' rules='groups'>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup>
<colgroup class='comment'>
<thead align='left'>
<tr>
<th>Column</th>
<th>Type</th>
<th>Size</th>
<th title='Are nulls allowed?'>Nulls</th>
<th title='Is column automatically updated?'>Auto</th>
<th title='Default value'>Default</th>
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
</tr>
</thead>
<tbody valign='top'>
<tr class='odd'>
<td class='detail'>_id</td>
<td class='detail'>integer</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='even'>
<td class='detail'>grpCod</td>
<td class='detail'>integer</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
<tr class='odd'>
<td class='detail'>crsCod</td>
<td class='detail'>integer</td>
<td class='detail' align='right'>2000000000,10</td>
<td class='detail' align='center' title='nullable'>&nbsp;&radic;&nbsp;</td>
<td class='detail' align='center'></td>
<td class='detail' align='right'>null</td>
<td class='detail'></td>
<td class='detail'> </td>
<td class='comment detail'></td>
</tr>
</table>
<p title='3 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
</td></tr></table>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More