mirror of
https://github.com/sudoxnym/fdroiddata.git
synced 2026-05-19 20:29:15 +00:00
Remove disabled apps: 31-60
This commit is contained in:
parent
3eb6b631c6
commit
3995a322c1
71 changed files with 0 additions and 2593 deletions
|
|
@ -1,55 +0,0 @@
|
|||
Categories:
|
||||
- Writing
|
||||
License: MIT
|
||||
SourceCode: https://github.com/jffrymrtn/writeily
|
||||
IssueTracker: https://github.com/jffrymrtn/writeily/issues
|
||||
|
||||
AutoName: Writeily
|
||||
Description: |-
|
||||
'''NOTE:''' This app is no longer maintained.
|
||||
|
||||
Lets you take down notes in plain text, or Markdown format. Organize notes by
|
||||
starring the most important, and preview your work in a rendered Markdown view.
|
||||
The app blossoms in colour and minimalism. Switch between dark and light themes,
|
||||
and choose between your favourite Roboto font style.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/jffrymrtn/writeily
|
||||
|
||||
Builds:
|
||||
- versionName: '1.5'
|
||||
versionCode: 8
|
||||
disable: ndk packaging
|
||||
commit: 89915168a305126dfeb0016244065b91896b6b9f
|
||||
subdir: writeily
|
||||
gradle:
|
||||
- yes
|
||||
rm:
|
||||
- writeily/libs/*jar
|
||||
- writeily/libs/anddown/obj
|
||||
- writeily/libs/anddown/libs/*jar
|
||||
- writeily/libs/anddown/libs/armeabi-v7a/*
|
||||
- writeily/libs/anddown/libs/armeabi/*
|
||||
- writeily/libs/anddown/libs/x86/*
|
||||
prebuild:
|
||||
- sed -i -e '/gson/d' -e '/android-support/d' build.gradle
|
||||
- sed -i -e '/dependencies/acompile "com.android.support:support-v13:20.0.+"\ncompile
|
||||
"com.google.code.gson:gson:2.3"' build.gradle
|
||||
- sed -i -e 's/libs:anddown/:writeily:libs:anddown/g' build.gradle
|
||||
- pushd libs/anddown/
|
||||
- ndk-build
|
||||
- android update lib-project -p .
|
||||
- ant release
|
||||
- popd
|
||||
|
||||
- versionName: '1.6'
|
||||
versionCode: 9
|
||||
disable: as per 1.5
|
||||
commit: v1.6
|
||||
|
||||
MaintainerNotes: '* Tagging is not reliable.'
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Tags
|
||||
CurrentVersion: '1.6'
|
||||
CurrentVersionCode: 9
|
||||
|
|
@ -1 +0,0 @@
|
|||
Edit plain text and markdown files
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
Categories:
|
||||
- Time
|
||||
License: GPL-3.0-only
|
||||
WebSite: https://ls.vertretungsplan.me
|
||||
SourceCode: https://github.com/johan12345/ls-vertretungsplan
|
||||
IssueTracker: https://github.com/johan12345/ls-vertretungsplan/issues
|
||||
|
||||
AutoName: Vertretungsplan
|
||||
Description: |-
|
||||
'''NOTE:''' This app is no longer maintained, its repo was archived.
|
||||
|
||||
Shows short-term schedule changes and notifies users when there are new changes
|
||||
concerning their classes at Lornsenschule, Schleswig, Germany.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/johan12345/ls-vertretungsplan.git
|
||||
|
||||
Builds:
|
||||
- versionName: 2.1.11
|
||||
versionCode: 18
|
||||
disable: submodules fail
|
||||
commit: b97a2be30b1bb504a90178e6638305102d34e959
|
||||
subdir: Vertretungsplan
|
||||
submodules: true
|
||||
srclibs:
|
||||
- 1:NoAnalytics@v0.3.1
|
||||
- Google-Gson@gson-2.2.4
|
||||
- ACRA@acra-4.5.0
|
||||
extlibs:
|
||||
- jsoup/jsoup-1.7.2.jar
|
||||
- android/android-support-v4.jar
|
||||
prebuild:
|
||||
- sed -i -e 's@\\\\@/@g' project.properties
|
||||
- cd libs
|
||||
- rm acra-*jar gson-*jar jsoup-*jar support-v4-*jar libGoogleAnalytics*jar
|
||||
- cd ..
|
||||
- cp -r $$ACRA$$/src/main/java/org src/
|
||||
- cp -r $$Google-Gson$$/src/main src/main
|
||||
- cp libs/android-support-v4.jar ../libraries/pagerslidingtabstrip/library/libs/android-support-v4.jar
|
||||
target: android-19
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Static
|
||||
CurrentVersion: 2.1.11
|
||||
CurrentVersionCode: 18
|
||||
|
|
@ -1 +0,0 @@
|
|||
Schedule changes at Lornsen-Schule
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
- Multimedia
|
||||
License: Apache-2.0
|
||||
WebSite: https://github.com/Kennyc1012/Opengur/wiki
|
||||
SourceCode: https://github.com/Kennyc1012/Opengur
|
||||
IssueTracker: https://github.com/Kennyc1012/Opengur/issues
|
||||
Changelog: https://github.com/Kennyc1012/Opengur/blob/HEAD/CHANGELOG.MD
|
||||
|
||||
AutoName: Opengur
|
||||
Description: |-
|
||||
'''Note:''' this app is no longer actively developed.
|
||||
|
||||
Browse the Imgur image board. Features support for GIF and GIFV image formats,
|
||||
tablet mode and album support. Based on material design guidelines for both,
|
||||
light and dark themes. Includes meme generator and supports Muzei.
|
||||
|
||||
'''WARNING''': This app is no longer maintained.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/Kennyc1012/Opengur/
|
||||
|
||||
Builds:
|
||||
- versionName: 4.7.1
|
||||
versionCode: 471
|
||||
disable: android gradle plugin version 2.3.0-rc1 is too old
|
||||
commit: 4.7.1
|
||||
subdir: app
|
||||
gradle:
|
||||
- f_droid
|
||||
prebuild:
|
||||
- sed -i -e '/fabric/d' build.gradle ../build.gradle
|
||||
- sed -i -e '/com.crashlytics.sdk.android:crashlytics/,+2d' -e '/enableCrashlytics/s/true/false/g'
|
||||
-e 's/project.API_CLIENT_ID/"null"/g' -e 's/project.API_CLIENT_SECRET/"null"/g'
|
||||
build.gradle
|
||||
- sed -i -e 's/${fabric_key}/null/g' src/main/AndroidManifest.xml
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: HTTP
|
||||
UpdateCheckData: https://raw.githubusercontent.com/Kennyc1012/Opengur/HEAD/app/build.gradle|version_code
|
||||
= (.*)|.|version_name = '(.*)'
|
||||
CurrentVersion: 4.7.1
|
||||
CurrentVersionCode: 92
|
||||
|
|
@ -1 +0,0 @@
|
|||
Browse Imgur
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
License: Apache-2.0
|
||||
AuthorName: Leonardo Cardoso
|
||||
AuthorEmail: contact@leocardz.com
|
||||
WebSite: http://android.leocardz.com/url-unshortener
|
||||
SourceCode: https://github.com/LeonardoCardoso/Unshorten-It
|
||||
IssueTracker: https://github.com/LeonardoCardoso/Unshorten-It/issues
|
||||
|
||||
AutoName: Unshorten It
|
||||
Description: A simple, beautiful, fast and useful url unshortener with link preview.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/LeonardoCardoso/Unshorten-It.git
|
||||
|
||||
Builds:
|
||||
- versionName: '2.2'
|
||||
versionCode: 20
|
||||
disable: private repo
|
||||
commit: d77d15d4229ba746f28959dbf5fe73d08b2a43c5
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
srclibs:
|
||||
- AndroidLinkPreview@23107d1fbdeaaf8aeac58bddc6edbca4226fdca5
|
||||
|
||||
MaintainerNotes: Replace custom maven repo with source-built library.
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '2.2'
|
||||
CurrentVersionCode: 20
|
||||
|
|
@ -1 +0,0 @@
|
|||
Get long URLs from shortened ones
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
Categories:
|
||||
- Multimedia
|
||||
License: AGPL-3.0-only
|
||||
SourceCode: https://github.com/mariogrip/octodroid
|
||||
IssueTracker: https://github.com/mariogrip/octodroid/issues
|
||||
|
||||
AutoName: OctoDroid
|
||||
Description: |-
|
||||
This app enables you to track and control your OctoPrint server with your mobile
|
||||
phone or tablet.
|
||||
|
||||
Features:
|
||||
|
||||
* Read the overall status of your printer
|
||||
* Start, Stop and pause prints with your phone
|
||||
* Receive notification when your print is done
|
||||
* Read the progress of your current prints
|
||||
* Connect/Disconnect from printer
|
||||
* Set the temperature of the heatbed and the hotend
|
||||
* Control the printhead with your phone
|
||||
* Watch the webcam to your phone
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/mariogrip/octodroid
|
||||
|
||||
Builds:
|
||||
- versionName: 0.5.2
|
||||
versionCode: 25
|
||||
disable: missing drawables - ic_play, ic_stop, ...
|
||||
commit: 35e89ff27c8a697153296e418adace4cfe0592f1
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 0.5.2
|
||||
CurrentVersionCode: 25
|
||||
|
|
@ -1 +0,0 @@
|
|||
Control an OctoPrint 3D printer server
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
License: GPL-2.0-only
|
||||
WebSite: http://www.cipherdyne.org
|
||||
SourceCode: https://github.com/mrash/fwknop
|
||||
IssueTracker: https://github.com/mrash/fwknop/issues
|
||||
|
||||
AutoName: Firewall Knock Operator
|
||||
Description: |-
|
||||
Michael Rash's Perl-based "fwknop" program: firewall knock operator. Implements
|
||||
an authorization scheme called Single Packet Authorization (SPA). This method of
|
||||
authorization is based around a default-drop packet filter (fwknop supports
|
||||
iptables on Linux, ipfw on FreeBSD and Mac OS X, and PF on OpenBSD) and libpcap.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/mrash/fwknop.git
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 2
|
||||
disable: Doesn't build (native code)
|
||||
commit: 9e990c9b
|
||||
subdir: android/project
|
||||
rm:
|
||||
- android/project/custom_rules.xml
|
||||
prebuild:
|
||||
- cd jni/fwknop
|
||||
- ./get_libfko_header.sh
|
||||
target: android-7
|
||||
buildjni:
|
||||
- yes
|
||||
ndk: r12b
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '1.0'
|
||||
CurrentVersionCode: 2
|
||||
|
|
@ -1 +0,0 @@
|
|||
Port Knocker
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
License: MIT
|
||||
WebSite: http://twister.net.co
|
||||
SourceCode: https://github.com/miguelfreitas/twister-webview-app
|
||||
IssueTracker: https://github.com/miguelfreitas/twister-webview-app/issues
|
||||
|
||||
AutoName: twister simpleclient
|
||||
Description: |-
|
||||
Twister is a fully decentralized P2P microblogging platform leveraging from the
|
||||
free software implementations of Bitcoin and BitTorrent protocols.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/miguelfreitas/twister-webview-app.git
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 46
|
||||
disable: see readme for build instructions
|
||||
commit: e6ec7da94eeda3d116f062b9843c869131a0730a
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '1.0'
|
||||
CurrentVersionCode: 46
|
||||
|
|
@ -1 +0,0 @@
|
|||
Microblogging client for Twister
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
Categories:
|
||||
- System
|
||||
License: Apache-2.0
|
||||
WebSite: http://androidsu.com/superuser
|
||||
SourceCode: https://github.com/ChainsDD/Superuser
|
||||
IssueTracker: https://github.com/ChainsDD/Superuser/issues
|
||||
|
||||
AutoName: Superuser
|
||||
Description: |-
|
||||
'''This app comes pre-installed on many custom roms. In that case, to upgrade,
|
||||
you would have to remove the original from /system/app because it is signed with
|
||||
a different key. We include this in the repo as it is the latest version for
|
||||
which full source code is available.'''
|
||||
|
||||
Any app that requires root access must call the su binary which in turn calls
|
||||
this app to prompt the user for permission. This app is also used to manage
|
||||
which apps have root permission as well as monitor their usage of the
|
||||
permission.
|
||||
|
||||
This app assumes you have the su binary installed i.e. have root.
|
||||
|
||||
RequiresRoot: 'yes'
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/ChainsDD/Superuser.git
|
||||
|
||||
Builds:
|
||||
- versionName: 3.0.7
|
||||
versionCode: 41
|
||||
disable: The latest free version but using with recent su could lead to problems
|
||||
912db6e5c08713c0
|
||||
commit: unknown - see disabled
|
||||
extlibs:
|
||||
- android/android-support-v4.jar
|
||||
target: android-11
|
||||
|
||||
- versionName: 3.1.3
|
||||
versionCode: 46
|
||||
disable: blobs in source
|
||||
commit: unknown - see disabled
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Static
|
||||
CurrentVersion: 3.1.3
|
||||
CurrentVersionCode: 46
|
||||
|
|
@ -1 +0,0 @@
|
|||
Manage su rights
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
Categories:
|
||||
- Security
|
||||
License: MIT
|
||||
SourceCode: https://github.com/nowsecure/android-vts
|
||||
IssueTracker: https://github.com/nowsecure/android-vts/issues
|
||||
|
||||
AutoName: VTS for Android
|
||||
Description: |-
|
||||
This tool was meant to show the end user the attack surface that a given device
|
||||
is susceptible to. In implementing these checks we attempt to minimize or
|
||||
eliminate both false positives/false negatives without negatively affecting
|
||||
system stability. List of current bug checks:
|
||||
|
||||
* ZipBug9950697
|
||||
* Zip Bug 8219321 / Master keys
|
||||
* Zip Bug 9695860
|
||||
* Jar Bug 13678484 / Android FakeID
|
||||
* CVE 2013-6282 / put/get_user
|
||||
* CVE_2011_1149 / PSNueter / Ashmem Exploit
|
||||
* CVE_2014_3153 / Futex bug / Towelroot
|
||||
* CVE 2014-3847 / WeakSauce * StumpRoot
|
||||
* Stagefright bugs
|
||||
* x509 Serialization bug
|
||||
* PingPong root - CVE-2015-3636
|
||||
* Stagefright - CVE-2015-6602
|
||||
* Samsung Remote Code Execution as System
|
||||
* CVE-2015-6608
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/nowsecure/android-vts.git
|
||||
|
||||
Builds:
|
||||
- versionName: v.13
|
||||
versionCode: 13
|
||||
disable: binaries
|
||||
commit: v.13
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Tags
|
||||
CurrentVersion: v.13
|
||||
CurrentVersionCode: 13
|
||||
|
|
@ -1 +0,0 @@
|
|||
Check for vulnerabilities
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
AntiFeatures:
|
||||
- NonFreeNet
|
||||
Categories:
|
||||
- Navigation
|
||||
License: Apache-2.0
|
||||
WebSite: http://taxi-bulgaria.com
|
||||
SourceCode: https://github.com/sytolk/TaxiAndroidOpen
|
||||
IssueTracker: https://github.com/sytolk/TaxiAndroidOpen/issues
|
||||
Translation: https://hosted.weblate.org/projects/taxi-android-open/
|
||||
|
||||
AutoName: Taxi Bulgaria
|
||||
Description: |-
|
||||
Interact with web services provided by taxi companies for internet communication
|
||||
with taxis: sending a new request, real-time monitoring of status and
|
||||
positioning of taxis, order history, leave feedback for quality of service and
|
||||
more.
|
||||
|
||||
Currently only available for Burgas, Bulgaria.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/sytolk/TaxiAndroidOpen
|
||||
|
||||
Builds:
|
||||
- versionName: 1.0.38
|
||||
versionCode: 38
|
||||
disable: non-free deps (play-services)
|
||||
commit: fb08b69e7f0655f53406405b77ea78ef56d089ca
|
||||
maven: 'yes'
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 1.0.47
|
||||
CurrentVersionCode: 47
|
||||
|
|
@ -1 +0,0 @@
|
|||
Taxi information and odering in Bulgaria
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
Categories:
|
||||
- Games
|
||||
License: GPL-2.0-only
|
||||
WebSite: http://ri-li.sourceforge.net
|
||||
SourceCode: https://github.com/dennis-sheil/commandergenius/tree/toytrain
|
||||
|
||||
Description: A train game.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/dennis-sheil/commandergenius
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 1
|
||||
disable: Doesn't work with these binaries removed
|
||||
commit: 5ddf818e
|
||||
subdir: project
|
||||
init:
|
||||
- rm -rf jni/android/libandroid.so jni/ffmpeg/lib/armeabi* jni/python/libpython.so
|
||||
- cd ..
|
||||
- ./ChangeAppSettings.sh -a
|
||||
target: android-12
|
||||
buildjni:
|
||||
- yes
|
||||
ndk: r12b
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
CurrentVersion: '1.0'
|
||||
CurrentVersionCode: 1
|
||||
|
|
@ -1 +0,0 @@
|
|||
Train game
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
AntiFeatures:
|
||||
- NonFreeDep
|
||||
Categories:
|
||||
- Multimedia
|
||||
License: Apache-2.0
|
||||
WebSite: http://forum.xda-developers.com/showthread.php?t=2653171
|
||||
SourceCode: https://github.com/TrentPierce/DontPause
|
||||
IssueTracker: https://github.com/TrentPierce/DontPause/issues
|
||||
|
||||
AutoName: Dont Pause!
|
||||
Description: |-
|
||||
Silences notifications while media is playing so they don't interrupt you.
|
||||
|
||||
Antifeature: Upstream uses non-free GooglePlayServices which have been stripped
|
||||
from this build.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/TrentPierce/DontPause
|
||||
|
||||
Builds:
|
||||
- versionName: '3.54'
|
||||
versionCode: 39
|
||||
disable: PayPalSDK, google play services
|
||||
commit: 2d8b8004e95b282d4a2
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '3.54'
|
||||
CurrentVersionCode: 39
|
||||
|
|
@ -1 +0,0 @@
|
|||
Silence notifications while media is playing
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
Categories:
|
||||
- Reading
|
||||
License: GPL-3.0-only
|
||||
WebSite: http://android.quran.com/
|
||||
SourceCode: https://github.com/quran/quran_android
|
||||
IssueTracker: https://github.com/quran/quran_android/issues
|
||||
|
||||
AutoName: Quran
|
||||
Description: |-
|
||||
A simple (madani based) qu'ran app for android. You are prompted to download the
|
||||
data at startup.
|
||||
|
||||
Translation, tafsir and Arabic data come from <a href="http://tanzil.net">tanzil</a> and
|
||||
King Saud University. Audio from Every Ayah. Images from
|
||||
<a href="https://github.com/quran/quran.com-images">quran images project</a>.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/ahmedre/quran_android.git
|
||||
|
||||
Builds:
|
||||
- versionName: 2.3.1
|
||||
versionCode: 231
|
||||
disable: custom licence v2.3.1
|
||||
commit: unknown - see disabled
|
||||
subdir: app
|
||||
srclibs:
|
||||
- ActionBarSherlock@4.1.0
|
||||
prebuild: echo "android.library.reference.1=$$ActionBarSherlock$$" >> project.properties
|
||||
target: android-17
|
||||
|
||||
- versionName: 2.7.2
|
||||
versionCode: 272
|
||||
disable: crashlytics
|
||||
commit: v2.7.2
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
prebuild:
|
||||
- sed -i -e '/fabric/d' -e '/com.crashlytics.sdk.android:crashlytics/,+2d' -e
|
||||
'/com.android.tools.build:gradle/s/2.2.0-rc1/2.2.2/' build.gradle ../build.gradle
|
||||
- find . -type f -name '*java' -exec sed -i -e '/Crashlytics.*;$/d' -e '/Fabric/d'
|
||||
-e '/com.crashlytics.android.answers/d' {} \;
|
||||
- pushd src/main/java/com/quran/labs/androidquran/
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Tags
|
||||
CurrentVersion: 3.0.4
|
||||
CurrentVersionCode: 3041
|
||||
|
|
@ -1 +0,0 @@
|
|||
Read the Quran
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
Disabled: non-free, little chance we'll ever build it
|
||||
Categories:
|
||||
- Internet
|
||||
License: GPL-3.0-or-later
|
||||
WebSite: http://www.ratebeer.com
|
||||
SourceCode: https://github.com/erickok/ratebeer
|
||||
IssueTracker: https://github.com/erickok/ratebeer/issues
|
||||
|
||||
AutoName: RateBeer
|
||||
Summary: RateBeer.com client
|
||||
Description: |-
|
||||
Companion client for the <a href="http://www.ratebeer.com">RateBeer</a>-Website.
|
||||
|
||||
Features:
|
||||
|
||||
* Search and explore (top) beers without the need for an account
|
||||
* On- and off-line rating of beers
|
||||
* Offer place and event suggestions based on a user's geographical location
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/erickok/ratebeer
|
||||
|
||||
Builds:
|
||||
- versionName: 1.5.8
|
||||
versionCode: 52
|
||||
disable: filled with jars, uses google play services lib
|
||||
commit: none
|
||||
subdir: RateBeerForAndroid
|
||||
|
||||
- versionName: 2.2.1
|
||||
versionCode: 213
|
||||
disable: play-services
|
||||
commit: v2.2.1
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 2.2.1
|
||||
CurrentVersionCode: 213
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
Categories:
|
||||
- Multimedia
|
||||
- Internet
|
||||
License: GPL-3.0-or-later
|
||||
WebSite: https://mediagoblin.org
|
||||
SourceCode: https://notabug.org/SapienTech/MediaGoblinApp
|
||||
IssueTracker: https://notabug.org/SapienTech/MediaGoblinApp/issues
|
||||
|
||||
Description: |-
|
||||
Enjoy all the features of MediaGoblin, now on your phone.
|
||||
|
||||
* Post images
|
||||
* View images
|
||||
* Comment on posts
|
||||
|
||||
RepoType: git
|
||||
Repo: https://notabug.org/SapienTech/Goblinoid
|
||||
|
||||
Builds:
|
||||
- versionName: 0.1.3
|
||||
versionCode: 103
|
||||
disable: prebuildozer tries to modify the system
|
||||
commit: 0.1.3
|
||||
submodules: true
|
||||
output: bin/MediaGoblin-0.1.3-release-unsigned.apk
|
||||
build:
|
||||
- ./prebuildozer.sh
|
||||
- buildozer android release
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Tags
|
||||
CurrentVersion: 0.1.3
|
||||
CurrentVersionCode: 103
|
||||
|
|
@ -1 +0,0 @@
|
|||
MediaGoblin Client
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
Disabled: Repo vanished
|
||||
Categories:
|
||||
- Games
|
||||
License: MIT
|
||||
SourceCode: https://github.com/Semche/Invasion-Android
|
||||
IssueTracker: https://github.com/Semche/Invasion-Android/issues
|
||||
|
||||
AutoName: Invasion
|
||||
Summary: Shoot'em Up game in space
|
||||
Description: |-
|
||||
You're a space ship, just kill those damn aliens! Touch the right part of the
|
||||
screen to shoot.
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 1
|
||||
disable: unknown jar andengine.jar
|
||||
commit: 51d7251f1629d2b7263abe4bb37906c11490eed4
|
||||
|
||||
MaintainerNotes: Repo has been removed.
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
|
||||
NoSourceSince: '1.1'
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
Categories:
|
||||
- Multimedia
|
||||
License: Apache-2.0
|
||||
WebSite: https://circleofmusic-sidzi.rhcloud.com/
|
||||
SourceCode: https://github.com/Circle-Of-Music-Makers/com-android
|
||||
IssueTracker: https://github.com/Circle-Of-Music-Makers/com-android/issues
|
||||
|
||||
AutoName: Circle of Music
|
||||
Description: |-
|
||||
Listen to music and tell others what you are listening to. Set iconic alarms to
|
||||
wake up.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/Circle-Of-Music-Makers/com-android
|
||||
|
||||
Builds:
|
||||
- versionName: '1'
|
||||
versionCode: 1
|
||||
disable: 'build issues, no license '
|
||||
commit: 4a68ba9
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
CurrentVersion: '1'
|
||||
CurrentVersionCode: 1
|
||||
|
|
@ -1 +0,0 @@
|
|||
Listen and favorite music
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
License: GPL-3.0-or-later
|
||||
WebSite: http://rivers.silverkeytech.com
|
||||
SourceCode: https://github.com/dodyg/AndroidRivers
|
||||
IssueTracker: https://github.com/dodyg/AndroidRivers/issues
|
||||
|
||||
AutoName: Android Rivers
|
||||
Description: |-
|
||||
Feed reader which not only supports RSS, ATOM and OPML, but can also read
|
||||
pocasts and the RiverJS format. It supports Google News, Kayak.com and
|
||||
Craiglist, as well.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/dodyg/AndroidRivers.git
|
||||
|
||||
Builds:
|
||||
- versionName: '1.15'
|
||||
versionCode: 10
|
||||
disable: jars
|
||||
commit: fdfa3a34568a25f26438222df07de7023c9a5499
|
||||
submodules: true
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '1.15'
|
||||
CurrentVersionCode: 10
|
||||
|
|
@ -1 +0,0 @@
|
|||
Feed reader
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
Categories:
|
||||
- Science & Education
|
||||
License: AGPL-3.0-only
|
||||
SourceCode: https://github.com/sli/juicy-mobile
|
||||
IssueTracker: https://github.com/sli/juicy-mobile/issues
|
||||
|
||||
AutoName: Juicy
|
||||
Description: |-
|
||||
A small suite of tools for vapers (electronic cigarette users) for calculating
|
||||
liquid recipes, total resistance, and power output, with included safety
|
||||
features such as warning the user when they’re in dangerous territory.
|
||||
|
||||
Builds:
|
||||
- versionName: 0.2.1
|
||||
versionCode: 1
|
||||
disable: srclibs todo
|
||||
commit: 0.1.1a
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
CurrentVersion: '0.1'
|
||||
CurrentVersionCode: 1
|
||||
|
||||
NoSourceSince: 0.2.1
|
||||
|
|
@ -1 +0,0 @@
|
|||
Calculator for electric cigarettes
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
Categories:
|
||||
- Graphics
|
||||
License: MIT
|
||||
SourceCode: https://github.com/snaheth/TrulyRandom
|
||||
|
||||
AutoName: Truly Random
|
||||
Description: |-
|
||||
Use a random number generator at Australia National University's Quantum Numbers
|
||||
lab to generate random gradients.
|
||||
|
||||
If you are not connected to the internet, the generated numbers and gradients
|
||||
will still be random, but not as random as the numbers you could get by being
|
||||
connected to the internet.
|
||||
|
||||
Builds:
|
||||
- versionName: '1.01'
|
||||
versionCode: 2
|
||||
disable: package id mismatch, R errors
|
||||
commit: 333dd8d0e74ba2f0b6ae7d669c49c48bcc439af2
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
|
||||
MaintainerNotes: Github repo deleted.
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
|
||||
NoSourceSince: '1.02'
|
||||
|
|
@ -1 +0,0 @@
|
|||
Generate random gradients
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
AntiFeatures:
|
||||
- NonFreeNet
|
||||
- Tracking
|
||||
Categories:
|
||||
- Internet
|
||||
License: GPL-3.0-only
|
||||
WebSite: http://sunshineapps.com.ua/
|
||||
SourceCode: https://github.com/sfilmak/MakiLite
|
||||
IssueTracker: https://github.com/sfilmak/MakiLite/issues
|
||||
Changelog: https://github.com/sfilmak/MakiLite/blob/HEAD/README.md
|
||||
|
||||
AutoName: Maki Lite
|
||||
Description: Fast and light Facebook wrapper with colorful themes & powerful customization.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/sfilmak/MakiLite
|
||||
|
||||
Builds:
|
||||
- versionName: 1.2.8
|
||||
versionCode: 11
|
||||
disable: java issue
|
||||
commit: 351d3d98b0ebf8b9ffb11faf8a1220f78a59fcca
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
prebuild:
|
||||
- sed -i -e 's@https://github.com/omadahealth/omada-nexus/raw/master/release@https://jitpack.io@g'
|
||||
../build.gradle
|
||||
- sed -i -e '/uk.me.lewisdeane/a*/\ncompile "com.github.lewisjdeane:L-Dialogs:8c1419e7c6"'
|
||||
-e '/uk.me.lewisdeane/i/*' -e '/rippleeffect/i/*' -e '/rippleeffect/a*/compile
|
||||
"com.github.OrangeGangsters:RippleEffect:custom_listener-SNAPSHOT"' build.gradle
|
||||
- sed -i -e '/<!-- ATTENTION:/,+4d' src/main/AndroidManifest.xml
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Tags
|
||||
CurrentVersion: 1.2.5
|
||||
CurrentVersionCode: 8
|
||||
|
|
@ -1 +0,0 @@
|
|||
Connect to Facebook
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
AntiFeatures:
|
||||
- UpstreamNonFree
|
||||
Categories:
|
||||
- Reading
|
||||
License: AGPL-3.0-only
|
||||
WebSite: https://github.com/helsinki-city-library/pocketlibrary/wiki
|
||||
SourceCode: https://github.com/helsinki-city-library/pocketlibrary
|
||||
IssueTracker: https://github.com/helsinki-city-library/pocketlibrary/issues
|
||||
|
||||
AutoName: Pocket Library
|
||||
Description: |-
|
||||
Pocket Library is a new kind of a service for library patrons.
|
||||
|
||||
The service expands the traditional notion of checking out materials, making it
|
||||
possible for library users to check out books and other items directly from
|
||||
other users anywhere.
|
||||
|
||||
To be more generally useful as a library user’s personal information assistant,
|
||||
it also has the ability to manage the user’s loans and explore the library
|
||||
catalog.
|
||||
|
||||
The service is currently tailored for Helsinki area public libraries’ catalog,
|
||||
but can be easily adapted for anybody using MARC21 catalogs.
|
||||
|
||||
A proprietary analytics library was removed.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/helsinki-city-library/pocketlibrary.git
|
||||
|
||||
Builds:
|
||||
- versionName: '1.5'
|
||||
versionCode: 18
|
||||
disable: purge apk; assets need to be included from common somehow
|
||||
commit: ad935f
|
||||
subdir: android
|
||||
init:
|
||||
- rm LibraryProject/build.xml
|
||||
- echo -e "android.library=true\ntarget=android-12" > LibraryProject/project.properties
|
||||
srclibs:
|
||||
- NoAnalytics@c8d77
|
||||
rm:
|
||||
- android/libs/libGoogleAnalyticsV2.jar
|
||||
- iphone
|
||||
prebuild: $$SDK$$/tools/android update project -l $$NoAnalytics$$ -p .
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '1.5'
|
||||
CurrentVersionCode: 18
|
||||
|
|
@ -1 +0,0 @@
|
|||
Assistance for library users
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
Categories:
|
||||
- Phone & SMS
|
||||
License: Apache-2.0
|
||||
WebSite: http://www.tbray.org/ongoing/When/201x/2010/04/25/LifeSaver-Lessons
|
||||
SourceCode: https://code.google.com/p/lifesaver/source
|
||||
|
||||
AutoName: LifeSaver2
|
||||
Description: |-
|
||||
A simple way to transfer your SMS and call logs to another phone via the sdcard.
|
||||
We don't have version 2.0 which can transfer the data via a Google App Engine
|
||||
server as it would require tokens that aren't in the source code and the source
|
||||
code for the server isn't free anyway.
|
||||
|
||||
RepoType: git-svn
|
||||
Repo: https://lifesaver.googlecode.com/svn/trunk
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 3
|
||||
disable: still waiting for bin to be purged
|
||||
prebuild: rm -rf src/com/textuality/lifesaver
|
||||
target: android-10
|
||||
|
||||
- versionName: '2.2'
|
||||
versionCode: 6
|
||||
disable: 'completely broken app: see description'
|
||||
commit: '27'
|
||||
srclibs:
|
||||
- Aerc@064c6f23aa09
|
||||
prebuild: echo 'android.library.reference.1=$$Aerc$$' >> project.properties
|
||||
target: android-10
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: Static
|
||||
CurrentVersion: '1.0'
|
||||
CurrentVersionCode: 3
|
||||
|
|
@ -1 +0,0 @@
|
|||
SMS and call log backup/restore
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
Categories:
|
||||
- Internet
|
||||
License: Apache-2.0
|
||||
SourceCode: https://github.com/tjoelsson/graphitoid
|
||||
IssueTracker: https://github.com/tjoelsson/graphitoid/issues
|
||||
|
||||
AutoName: Graphitoid
|
||||
Description: |-
|
||||
A front end for <a href="http://graphite.wikidot.com/">Graphite</a>, a realtime graphing
|
||||
server. Displays graphs and allows metrics filtering.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/tjoelsson/graphitoid.git
|
||||
|
||||
Builds:
|
||||
- versionName: 2.1.2
|
||||
versionCode: 6
|
||||
disable: No resource identifier found for attribute 'indicator_gravity'
|
||||
commit: a9683ec7f6c
|
||||
srclibs:
|
||||
- Tree-View-List@e3ff02613a2a
|
||||
- DateSlider@14
|
||||
prebuild:
|
||||
- echo "android.library.reference.1=$$Tree-View-List$$" >> project.properties
|
||||
- echo "android.library.reference.2=$$DateSlider$$" >> project.properties
|
||||
target: android-15
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 2.1.2
|
||||
CurrentVersionCode: 6
|
||||
|
|
@ -1 +0,0 @@
|
|||
Front end for Graphite
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
AntiFeatures:
|
||||
- NonFreeDep
|
||||
Categories:
|
||||
- Security
|
||||
License: GPL-3.0-only
|
||||
WebSite: https://www.surespot.me/
|
||||
SourceCode: https://github.com/zoff99/surespot-android
|
||||
IssueTracker: https://github.com/zoff99/surespot-android/issues
|
||||
|
||||
Name: Surespot
|
||||
AutoName: surespot
|
||||
Description: |-
|
||||
Use surespot and everything you send can only be read by the person you sent it
|
||||
to. Period. Everything sent using surespot is end-to-end encrypted with
|
||||
symmetric-key encryption (256 bit AES-GCM) using keys created with 521 bit ECDH
|
||||
shared secret derivation, but you wont notice because security in surespot is
|
||||
built-in, not a layer over something else. Be confident sending private
|
||||
information and pictures, you have control over your messages, when you delete a
|
||||
sent message it will be removed from the receiver's phone and images are not
|
||||
shareable unless you make them so. Multiple identities allow you to be who you
|
||||
want with just who you want, and if anyone gets annoying you can block them.
|
||||
Surespot does not require or store your phone number or email address and we
|
||||
don't mine your data, no advertisements here!
|
||||
|
||||
'''WARNING'''
|
||||
|
||||
This build recipe is complex and error-prone. Use it only at your own risk.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/zoff99/surespot-android.git
|
||||
|
||||
Builds:
|
||||
- versionName: 61-fdroid
|
||||
versionCode: 61
|
||||
disable: builds, but includes jars
|
||||
commit: 4b9219e86c62208ebe1ca0cf48afa0cf15c34251
|
||||
subdir: surespot
|
||||
gradle:
|
||||
- yes
|
||||
forceversion: true
|
||||
prebuild:
|
||||
- rm 'src/main/res/raw/ffmpegpie'
|
||||
- rm 'src/main/res/raw/ffmpeg'
|
||||
- touch 'src/main/res/raw/ffmpegpie'
|
||||
- touch 'src/main/res/raw/ffmpeg'
|
||||
- sed -i -e 's#com.google.android.gms:play-services-drive:7.5.0#com.android.support:support-v4:22.2.0#'
|
||||
build.gradle
|
||||
- mkdir -p ../surespotcommon/src/main/res/raw
|
||||
- sed -i -e 's#Build.VERSION_CODES.M#23#' src/main/java/com/twofours/surespot/identity/IdentityController.java
|
||||
- printf 'ssl_strict=true\nbaseUrl=https://server.surespot.me:443\n' > ../surespotcommon/src/main/res/raw/configuration.properties
|
||||
- sed -i -e 's#import java.util.Properties;#import java.util.Properties;\nimport
|
||||
com.twofours.surespot.common.R;\n#g' ../surespotcommon/src/main/java/com/twofours/surespot/common/SurespotConfiguration.java
|
||||
- pushd src/main/java/com/twofours/surespot/backup/
|
||||
- sed -i -e '/import com.google.android.gms/d' -e 's#GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE#"dummy"#'
|
||||
-e '/AccountPicker.newChooseAccountIntent/d' ImportIdentityActivity.java ExportIdentityActivity.java
|
||||
- cat ImportIdentityActivity.java | grep -v '\snull);' > ImportIdentityActivity.java_
|
||||
- mv ImportIdentityActivity.java_ ImportIdentityActivity.java
|
||||
- sed -i -e 's#ActivityNotFoundException e#Exception e#' ExportIdentityActivity.java
|
||||
ImportIdentityActivity.java
|
||||
- sed -i -e 's#startActivityForResult(accountPickerIntent, SurespotConstants.IntentRequestCodes.CHOOSE_GOOGLE_ACCOUNT);#System.out.println("dummy");#'
|
||||
ExportIdentityActivity.java ImportIdentityActivity.java
|
||||
- popd
|
||||
- sed -i -e 's#android {#android {\nlintOptions {\nabortOnError false\n}\n#'
|
||||
build.gradle
|
||||
|
||||
- versionName: 63-fdroid
|
||||
versionCode: 63
|
||||
disable: remove apk
|
||||
commit: aa83369736b7533cb8ab824ee36be032b40271bf
|
||||
subdir: surespot
|
||||
patch:
|
||||
- Ex-63.patch
|
||||
- Im-63.patch
|
||||
gradle:
|
||||
- yes
|
||||
srclibs:
|
||||
- gcm@7f647288103bac2c5552af881f0e217c5b95d78a
|
||||
rm:
|
||||
- .google_apis/._.DS_Store
|
||||
- ._.DS_Store
|
||||
- surespot/libs/*
|
||||
- surespot/src/main/res/raw/ffmpegpie
|
||||
- surespot/src/main/res/raw/ffmpeg
|
||||
- surespotcommon/libs/*.jar
|
||||
prebuild:
|
||||
- pwd
|
||||
- touch src/main/res/raw/ffmpegpie src/main/res/raw/ffmpeg
|
||||
- sed -i -e 's#com.google.android.gms:play-services-drive:7.8.0#com.android.support:support-v4:19.0.1#'
|
||||
build.gradle
|
||||
- mkdir -p ../surespotcommon/src/main/res/raw
|
||||
- sed -i -e 's#Build.VERSION_CODES.M#23#' src/main/java/com/twofours/surespot/identity/IdentityController.java
|
||||
- printf 'ssl_strict=true\nbaseUrl=https://server.surespot.me:443\n' > ../surespotcommon/src/main/res/raw/configuration.properties
|
||||
- sed -i -e 's#import java.util.Properties;#import java.util.Properties;\nimport
|
||||
com.twofours.surespot.common.R;\n#g' ../surespotcommon/src/main/java/com/twofours/surespot/common/SurespotConfiguration.java
|
||||
- sed -i -e 's#@integer/google_play_services_version#4030500#' src/main/AndroidManifest.xml
|
||||
- awk 'NR<=21||NR>=62' proguard-project.txt > proguard-project.txt_
|
||||
- mv proguard-project.txt_ proguard-project.txt
|
||||
- sed -i -e 's#import org.acra.ACRA;##' ../androidasynchttp/src/main/java/com/loopj/android/http/AsyncHttpRequest.java
|
||||
src/main/java/com/twofours/surespot/SurespotApplication.java
|
||||
- sed -i -e 's#import org.acra.ReportingInteractionMode;##' -e 's#import org.acra.annotation.ReportsCrashes;##'
|
||||
-e 's#ACRA.init(this);##' -e 's#@ReportsCrashes#// @ReportsCrashes#' -e 's#formUri
|
||||
= "ht#// formUri = "ht#' src/main/java/com/twofours/surespot/SurespotApplication.java
|
||||
- sed -i -e 's#compile files(.libs/gcm.jar.)##' -e 's#compile files(.*libs.*)##'
|
||||
-e 's#android {#android {\nlintOptions {\nabortOnError false\n}\n#' build.gradle
|
||||
- sed -i -e 's#javaMaxHeapSize .*##' build.gradle
|
||||
- rm src/main/java/com/twofours/surespot/backup/DriveHelper.java
|
||||
- cp -av $$gcm$$/gcm-client-deprecated/src/com src/main/java/
|
||||
- pushd ../
|
||||
- find .google_apis -name '*.jar' -exec rm {} \;
|
||||
- popd
|
||||
- sed -i -e '/support-v4/acompile "com.madgag:scprov-jdk15on:1.47.0.3"\ncompile
|
||||
"com.madgag:sc-light-jdk15on:1.47.0.3"' -e '/compile files/d' build.gradle
|
||||
- sed -i -e '/surespotcommon/acompile "com.madgag:scprov-jdk15on:1.47.0.3"\ncompile
|
||||
"com.madgag:sc-light-jdk15on:1.47.0.3"' -e '/compile files/d' ../androidkeystore/build.gradle
|
||||
novcheck: true
|
||||
|
||||
- versionName: 64-mod
|
||||
versionCode: 64
|
||||
disable: GCM
|
||||
commit: b6889acbbf451dcb7421540511b62fc9375b6215
|
||||
subdir: surespot
|
||||
gradle:
|
||||
- yes
|
||||
prebuild:
|
||||
- git clone https://github.com/zoff99/gcm-client-old.git
|
||||
- mkdir -p src/main/java/com/
|
||||
- cp -av gcm-client-old/com src/main/java/
|
||||
- mkdir -p ../surespotcommon/src/main/res/raw
|
||||
- printf 'ssl_strict=true\nbaseUrl=https://server.surespot.me:443\n' > ../surespotcommon/src/main/res/raw/configuration.properties
|
||||
- pushd ../
|
||||
- find .google_apis -name '*.jar' -exec rm {} \;
|
||||
scanignore:
|
||||
- surespot/src/main/res/raw/ffmpeg
|
||||
|
||||
- versionName: 65-mod
|
||||
versionCode: 65
|
||||
disable: GCM
|
||||
commit: fdfd9f08734705d60955694a877f575693f8a960
|
||||
subdir: surespot
|
||||
gradle:
|
||||
- yes
|
||||
prebuild:
|
||||
- git clone https://github.com/zoff99/gcm-client-old.git
|
||||
- mkdir -p src/main/java/com/
|
||||
- cp -av gcm-client-old/com src/main/java/
|
||||
- mkdir -p ../surespotcommon/src/main/res/raw
|
||||
- printf 'ssl_strict=true\nbaseUrl=https://server.surespot.me:443\n' > ../surespotcommon/src/main/res/raw/configuration.properties
|
||||
- pushd ../
|
||||
- find .google_apis -name '*.jar' -exec rm {} \;
|
||||
scanignore:
|
||||
- surespot/src/main/res/raw/ffmpeg
|
||||
|
||||
MaintainerNotes: |-
|
||||
* Voice function removed
|
||||
|
||||
Why on earth do we need to git clone? This build is begging to break
|
||||
itself.
|
||||
|
||||
ArchivePolicy: 0 versions
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
CurrentVersion: 65-mod
|
||||
CurrentVersionCode: 65
|
||||
|
|
@ -1,525 +0,0 @@
|
|||
diff --git a/surespot/src/main/java/com/twofours/surespot/backup/ExportIdentityActivity.java b/tmp/E3.java
|
||||
index 99ec8f1..70d59bc 100644
|
||||
--- a/surespot/src/main/java/com/twofours/surespot/backup/ExportIdentityActivity.java
|
||||
+++ b/tmp/E3.java
|
||||
@@ -41,15 +41,15 @@ import com.actionbarsherlock.app.SherlockActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
-import com.google.android.gms.auth.GoogleAuthUtil;
|
||||
-import com.google.android.gms.common.AccountPicker;
|
||||
-import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
|
||||
-import com.google.api.client.http.ByteArrayContent;
|
||||
-import com.google.api.services.drive.Drive;
|
||||
-import com.google.api.services.drive.model.ChildList;
|
||||
-import com.google.api.services.drive.model.ChildReference;
|
||||
-import com.google.api.services.drive.model.FileList;
|
||||
-import com.google.api.services.drive.model.ParentReference;
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
import com.twofours.surespot.R;
|
||||
import com.twofours.surespot.common.FileUtils;
|
||||
import com.twofours.surespot.common.SurespotConstants;
|
||||
@@ -64,11 +64,11 @@ import com.twofours.surespot.ui.UIUtils;
|
||||
public class ExportIdentityActivity extends SherlockActivity {
|
||||
private static final String TAG = "ExportIdentityActivity";
|
||||
private List<String> mIdentityNames;
|
||||
- private DriveHelper mDriveHelper;
|
||||
+
|
||||
private Spinner mSpinner;
|
||||
|
||||
private TextView mAccountNameDisplay;
|
||||
- public static final String[] ACCOUNT_TYPE = new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE};
|
||||
+ public static final String[] ACCOUNT_TYPE = new String[]{"dummy"};
|
||||
private SingleProgressDialog mSpd;
|
||||
private SingleProgressDialog mSpdBackupDir;
|
||||
private AlertDialog mDialog;
|
||||
@@ -79,439 +79,41 @@ public class ExportIdentityActivity extends SherlockActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_export_identity);
|
||||
|
||||
- Utils.configureActionBar(this, getString(R.string.identity), getString(R.string.backup), true);
|
||||
- final String identityDir = FileUtils.getIdentityExportDir().toString();
|
||||
-
|
||||
- TextView tvBackupWarning = (TextView) findViewById(R.id.backupIdentitiesWarning);
|
||||
- Spannable s1 = new SpannableString(getString(R.string.help_backupIdentities1));
|
||||
- s1.setSpan(new ForegroundColorSpan(Color.RED), 0, s1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
- tvBackupWarning.setText(s1);
|
||||
-
|
||||
- final TextView tvPath = (TextView) findViewById(R.id.backupLocalLocation);
|
||||
- mSpinner = (Spinner) findViewById(R.id.identitySpinner);
|
||||
-
|
||||
- final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.sherlock_spinner_item);
|
||||
- adapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
|
||||
- mIdentityNames = IdentityController.getIdentityNames(this);
|
||||
-
|
||||
- for (String name : mIdentityNames) {
|
||||
- adapter.add(name);
|
||||
- }
|
||||
-
|
||||
- mSpinner.setAdapter(adapter);
|
||||
-
|
||||
- String backupUsername = getIntent().getStringExtra("backupUsername");
|
||||
- getIntent().removeExtra("backupUsername");
|
||||
-
|
||||
- mSpinner.setSelection(adapter.getPosition(backupUsername == null ? IdentityController.getLoggedInUser() : backupUsername));
|
||||
- mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
-
|
||||
- String identityFile = identityDir + File.separator + IdentityController.caseInsensitivize(adapter.getItem(position))
|
||||
- + IdentityController.IDENTITY_EXTENSION;
|
||||
- tvPath.setText(identityFile);
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public void onNothingSelected(AdapterView<?> parent) {
|
||||
-
|
||||
- }
|
||||
-
|
||||
- });
|
||||
-
|
||||
- Button exportToSdCardButton = (Button) findViewById(R.id.bExportSd);
|
||||
-
|
||||
- exportToSdCardButton.setEnabled(FileUtils.isExternalStorageMounted());
|
||||
-
|
||||
- exportToSdCardButton.setOnClickListener(new OnClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onClick(View v) {
|
||||
- // TODO progress
|
||||
- final String user = (String) mSpinner.getSelectedItem();
|
||||
- mDialog = UIUtils.passwordDialog(ExportIdentityActivity.this, getString(R.string.backup_identity, user),
|
||||
- getString(R.string.enter_password_for, user), new IAsyncCallback<String>() {
|
||||
- @Override
|
||||
- public void handleResponse(String result) {
|
||||
- if (!TextUtils.isEmpty(result)) {
|
||||
- exportIdentity(user, result);
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeToast(ExportIdentityActivity.this, getString(R.string.no_identity_exported));
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- mDriveHelper = new DriveHelper(getApplicationContext(), true);
|
||||
- Button exportToGoogleDriveButton = (Button) findViewById(R.id.bBackupDrive);
|
||||
-
|
||||
- exportToGoogleDriveButton.setOnClickListener(new OnClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onClick(View v) {
|
||||
- if (mDriveHelper.getDriveAccount() != null) {
|
||||
- if (mDriveHelper.getDriveService() != null) {
|
||||
- backupIdentityDrive(true);
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- chooseAccount(false);
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- mAccountNameDisplay = (TextView) findViewById(R.id.exportDriveAccount);
|
||||
- String account = getSharedPreferences(IdentityController.getLoggedInUser(), Context.MODE_PRIVATE).getString("pref_google_drive_account",
|
||||
- getString(R.string.no_google_account_selected));
|
||||
- mAccountNameDisplay.setText(account);
|
||||
-
|
||||
- Button chooseAccountButton = (Button) findViewById(R.id.bSelectDriveAccount);
|
||||
- chooseAccountButton.setOnClickListener(new OnClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onClick(View v) {
|
||||
-
|
||||
- chooseAccount(true);
|
||||
- }
|
||||
- });
|
||||
}
|
||||
|
||||
// //////// Local
|
||||
private void exportIdentity(String user, String password) {
|
||||
- IdentityController.exportIdentity(ExportIdentityActivity.this, user, password, new IAsyncCallback<String>() {
|
||||
- @Override
|
||||
- public void handleResponse(String response) {
|
||||
- if (response == null) {
|
||||
- Utils.makeToast(ExportIdentityActivity.this, getString(R.string.no_identity_exported));
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeLongToast(ExportIdentityActivity.this, response);
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- });
|
||||
}
|
||||
|
||||
// //////// DRIVE
|
||||
|
||||
private void chooseAccount(boolean ask) {
|
||||
- Intent accountPickerIntent = AccountPicker.newChooseAccountIntent(null, null, ACCOUNT_TYPE, ask, null, null, null, null);
|
||||
-
|
||||
- try {
|
||||
- startActivityForResult(accountPickerIntent, SurespotConstants.IntentRequestCodes.CHOOSE_GOOGLE_ACCOUNT);
|
||||
- }
|
||||
- catch (ActivityNotFoundException e) {
|
||||
- Utils.makeToast(ExportIdentityActivity.this, getString(R.string.device_does_not_support_google_drive));
|
||||
- SurespotLog.i(TAG, e, "chooseAccount");
|
||||
- }
|
||||
-
|
||||
}
|
||||
|
||||
private void removeAccount() {
|
||||
- SharedPreferences.Editor editor = getSharedPreferences(IdentityController.getLoggedInUser(), Context.MODE_PRIVATE).edit();
|
||||
- editor.remove("pref_google_drive_account");
|
||||
- editor.commit();
|
||||
-
|
||||
- mAccountNameDisplay.setText(R.string.no_google_account_selected);
|
||||
-
|
||||
}
|
||||
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
- switch (requestCode) {
|
||||
- case SurespotConstants.IntentRequestCodes.CHOOSE_GOOGLE_ACCOUNT:
|
||||
- if (data != null) {
|
||||
-
|
||||
- SurespotLog.w("Preferences", "SELECTED ACCOUNT WITH EXTRA: %s", data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME));
|
||||
- Bundle b = data.getExtras();
|
||||
-
|
||||
- String accountName = b.getString(AccountManager.KEY_ACCOUNT_NAME);
|
||||
-
|
||||
- SurespotLog.d("Preferences", "Selected account: " + accountName);
|
||||
- if (accountName != null && accountName.length() > 0) {
|
||||
-
|
||||
- mDriveHelper.setDriveAccount(accountName);
|
||||
- mAccountNameDisplay.setText(accountName);
|
||||
- backupIdentityDrive(true);
|
||||
- }
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH:
|
||||
- if (resultCode == Activity.RESULT_OK) {
|
||||
- Drive drive = mDriveHelper.getDriveService();
|
||||
- if (drive != null) {
|
||||
- backupIdentityDrive(false);
|
||||
-
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
-
|
||||
- }
|
||||
- }
|
||||
}
|
||||
|
||||
private void backupIdentityDrive(final boolean firstAttempt) {
|
||||
- if (mSpdBackupDir == null) {
|
||||
- mSpdBackupDir = new SingleProgressDialog(this, getString(R.string.progress_drive_dir_check), 1000);
|
||||
- }
|
||||
- mSpdBackupDir.show();
|
||||
- new AsyncTask<Void, Void, String>() {
|
||||
-
|
||||
- @Override
|
||||
- protected String doInBackground(Void... params) {
|
||||
-
|
||||
- return ensureDriveIdentityDirectory();
|
||||
-
|
||||
- }
|
||||
-
|
||||
- protected void onPostExecute(final String identityDirId) {
|
||||
- mSpdBackupDir.hide();
|
||||
- if (identityDirId == null) {
|
||||
- if (!firstAttempt) {
|
||||
- Utils.makeToast(ExportIdentityActivity.this, getString(R.string.could_not_backup_identity_to_google_drive));
|
||||
- }
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- SurespotLog.d(TAG, "identity file id: %s", identityDirId);
|
||||
- final String user = (String) mSpinner.getSelectedItem();
|
||||
- mDialog = UIUtils.passwordDialog(ExportIdentityActivity.this, getString(R.string.backup_identity, user),
|
||||
- getString(R.string.enter_password_for, user), new IAsyncCallback<String>() {
|
||||
- @Override
|
||||
- public void handleResponse(final String password) {
|
||||
- if (!TextUtils.isEmpty(password)) {
|
||||
- if (mSpd == null) {
|
||||
- mSpd = new SingleProgressDialog(ExportIdentityActivity.this, getString(R.string.progress_backup_identity_drive), 0);
|
||||
- }
|
||||
-
|
||||
- mSpd.show();
|
||||
-
|
||||
- IdentityController.getExportIdentity(ExportIdentityActivity.this, user, password,
|
||||
- new IAsyncCallbackTuple<byte[], String>() {
|
||||
-
|
||||
- @Override
|
||||
- public void handleResponse(byte[] identityData, final String message) {
|
||||
-
|
||||
- if (identityData == null) {
|
||||
-
|
||||
- ExportIdentityActivity.this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- mSpd.hide();
|
||||
- Utils.makeToast(ExportIdentityActivity.this,
|
||||
- message == null ? getString(R.string.could_not_backup_identity_to_google_drive)
|
||||
- : message);
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- final boolean backedUp = updateIdentityDriveFile(identityDirId, user, identityData);
|
||||
-
|
||||
- ExportIdentityActivity.this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- mSpd.hide();
|
||||
- if (!backedUp) {
|
||||
- Utils.makeToast(ExportIdentityActivity.this,
|
||||
- getString(R.string.could_not_backup_identity_to_google_drive));
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeToast(ExportIdentityActivity.this,
|
||||
- getString(R.string.identity_successfully_backed_up_to_google_drive));
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeToast(ExportIdentityActivity.this, getString(R.string.no_identity_exported));
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
-
|
||||
- ;
|
||||
-
|
||||
- }.execute();
|
||||
-
|
||||
}
|
||||
|
||||
public String ensureDriveIdentityDirectory() {
|
||||
String identityDirId = null;
|
||||
- try {
|
||||
- // see if identities directory exists
|
||||
-
|
||||
- FileList identityDir = mDriveHelper.getDriveService().files().list()
|
||||
- .setQ("title = '" + SurespotConstants.DRIVE_IDENTITY_FOLDER + "' and trashed = false").execute();
|
||||
- List<com.google.api.services.drive.model.File> items = identityDir.getItems();
|
||||
-
|
||||
- if (items.size() > 0) {
|
||||
- for (com.google.api.services.drive.model.File file : items) {
|
||||
- if (!file.getLabels().getTrashed()) {
|
||||
- SurespotLog.d(TAG, "identity folder already exists");
|
||||
- identityDirId = file.getId();
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- if (identityDirId == null) {
|
||||
- com.google.api.services.drive.model.File file = new com.google.api.services.drive.model.File();
|
||||
- file.setTitle(SurespotConstants.DRIVE_IDENTITY_FOLDER);
|
||||
- file.setMimeType(SurespotConstants.MimeTypes.DRIVE_FOLDER);
|
||||
-
|
||||
- com.google.api.services.drive.model.File insertedFile = mDriveHelper.getDriveService().files().insert(file).execute();
|
||||
-
|
||||
- identityDirId = insertedFile.getId();
|
||||
-
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- catch (UserRecoverableAuthIOException e) {
|
||||
- try {
|
||||
- startActivityForResult(e.getIntent(), SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH);
|
||||
- }
|
||||
- catch (NullPointerException npe) {
|
||||
- return null;
|
||||
- }
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "createDriveIdentityDirectory");
|
||||
- }
|
||||
- catch (SecurityException e) {
|
||||
- SurespotLog.e(TAG, e, "createDriveIdentityDirectory");
|
||||
- // when key is revoked on server this happens...should return userrecoverable it seems
|
||||
- // was trying to figure out how to test this
|
||||
- // seems like the only way around this is to remove and re-add android account:
|
||||
- // http://stackoverflow.com/questions/5805657/revoke-account-permission-for-an-app
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ExportIdentityActivity.this, getString(R.string.re_add_google_account));
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
return identityDirId;
|
||||
-
|
||||
}
|
||||
|
||||
public boolean updateIdentityDriveFile(String idDirId, String username, byte[] identityData) {
|
||||
- try {
|
||||
- // gzip identity for consistency - fucked up on this, now have to add code to handle both (gzipped and not gzipped) on restore from google drive
|
||||
- // RM#260
|
||||
- ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
- GZIPOutputStream gzout = new GZIPOutputStream(out);
|
||||
- gzout.write(identityData);
|
||||
- gzout.close();
|
||||
- byte[] gzIdData = out.toByteArray();
|
||||
-
|
||||
- ByteArrayContent content = new ByteArrayContent("application/octet-stream", gzIdData);
|
||||
- String caseInsensitiveUsername = IdentityController.caseInsensitivize(username);
|
||||
- String filename = caseInsensitiveUsername + IdentityController.IDENTITY_EXTENSION;
|
||||
-
|
||||
- // see if identity exists
|
||||
- com.google.api.services.drive.model.File file = null;
|
||||
- ChildReference idFile = getIdentityFile(idDirId, caseInsensitiveUsername);
|
||||
- if (idFile != null) {
|
||||
-
|
||||
- // update
|
||||
- file = mDriveHelper.getDriveService().files().get(idFile.getId()).execute();
|
||||
- if (file != null && !file.getLabels().getTrashed()) {
|
||||
- SurespotLog.d(TAG, "updateIdentityDriveFile, updating existing identity file: %s", filename);
|
||||
- mDriveHelper.getDriveService().files().update(file.getId(), file, content).execute();
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- // create
|
||||
- SurespotLog.d(TAG, "updateIdentityDriveFile, inserting new identity file: %s", filename);
|
||||
-
|
||||
- file = new com.google.api.services.drive.model.File();
|
||||
- ParentReference pr = new ParentReference();
|
||||
- pr.setId(idDirId);
|
||||
- ArrayList<ParentReference> parent = new ArrayList<ParentReference>(1);
|
||||
- parent.add(pr);
|
||||
- file.setParents(parent);
|
||||
- file.setTitle(filename);
|
||||
- file.setMimeType(SurespotConstants.MimeTypes.SURESPOT_IDENTITY);
|
||||
-
|
||||
- com.google.api.services.drive.model.File insertedFile = mDriveHelper.getDriveService().files().insert(file, content).execute();
|
||||
- return true;
|
||||
-
|
||||
- }
|
||||
- catch (UserRecoverableAuthIOException e) {
|
||||
- startActivityForResult(e.getIntent(), SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH);
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "updateIdentityDriveFile");
|
||||
- }
|
||||
- catch (SecurityException e) {
|
||||
- SurespotLog.e(TAG, e, "createDriveIdentityDirectory");
|
||||
- // when key is revoked on server this happens...should return userrecoverable it seems
|
||||
- // was trying to figure out how to test this
|
||||
- // seems like the only way around this is to remove and re-add android account:
|
||||
- // http://stackoverflow.com/questions/5805657/revoke-account-permission-for-an-app
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ExportIdentityActivity.this, getString(R.string.re_add_google_account));
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
return false;
|
||||
}
|
||||
|
||||
+/*
|
||||
private ChildReference getIdentityFile(String identityDirId, String username) throws IOException {
|
||||
ChildReference idFile = null;
|
||||
-
|
||||
- // "title = '" + username + "'";
|
||||
- ChildList identityFileList = mDriveHelper.getDriveService().children().list(identityDirId)
|
||||
- .setQ("title='" + username + IdentityController.IDENTITY_EXTENSION + "' and trashed = false").execute();
|
||||
- List<ChildReference> items = identityFileList.getItems();
|
||||
-
|
||||
- if (items.size() == 1) {
|
||||
- SurespotLog.d(TAG, "getIdentityFile, found identity file for: %s", username);
|
||||
- idFile = items.get(0);
|
||||
- // for (ChildReference file : items) {
|
||||
- // if (!file.getLabels().getTrashed()) {
|
||||
- // SurespotLog.d(TAG, "identity folder already exists");
|
||||
- // identityDirId = file.getId();
|
||||
- // }
|
||||
- // }
|
||||
- }
|
||||
- else {
|
||||
- if (items.size() > 1) {
|
||||
- // delete all but one identity...should never happen
|
||||
- SurespotLog.w(TAG, "$d identities with the same filename found on google drive: %s", items.size(), username);
|
||||
-
|
||||
- for (int i = items.size(); i > 1; i--) {
|
||||
- SurespotLog.w(TAG, "deleting identity file from google drive %s", username);
|
||||
- mDriveHelper.getDriveService().files().delete(items.get(i - 1).getId()).execute();
|
||||
- }
|
||||
- idFile = items.get(0);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
return idFile;
|
||||
}
|
||||
+*/
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
@@ -527,25 +129,6 @@ public class ExportIdentityActivity extends SherlockActivity {
|
||||
finish();
|
||||
|
||||
return true;
|
||||
- case R.id.menu_help:
|
||||
- View view = LayoutInflater.from(this).inflate(R.layout.dialog_help_backup, null);
|
||||
-
|
||||
- TextView tv = (TextView) view.findViewById(R.id.helpBackup1);
|
||||
- UIUtils.setHtml(this, tv, R.string.help_backup_what);
|
||||
-
|
||||
- TextView t1 = (TextView) view.findViewById(R.id.helpBackup2);
|
||||
- t1.setText(Html.fromHtml(getString(R.string.help_backup_local)));
|
||||
- t1.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
-
|
||||
- TextView t2 = (TextView) view.findViewById(R.id.helpBackup3);
|
||||
- UIUtils.setHtml(this, t2, R.string.help_backup_drive1);
|
||||
-
|
||||
- t2 = (TextView) view.findViewById(R.id.helpBackup4);
|
||||
- t2.setText(R.string.help_backup_drive2);
|
||||
-
|
||||
- mDialog = UIUtils.showHelpDialog(this, R.string.surespot_help, view, false);
|
||||
- return true;
|
||||
-
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
@@ -563,13 +146,6 @@ public class ExportIdentityActivity extends SherlockActivity {
|
||||
|
||||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||
- if (keyCode == KeyEvent.KEYCODE_MENU) {
|
||||
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
||||
- openOptionsMenuDeferred();
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
return super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
||||
|
|
@ -1,824 +0,0 @@
|
|||
diff --git a/surespot/src/main/java/com/twofours/surespot/backup/ImportIdentityActivity.java b/tmp/I3.java
|
||||
index 59d7759..039ec79 100644
|
||||
--- a/surespot/src/main/java/com/twofours/surespot/backup/ImportIdentityActivity.java
|
||||
+++ b/tmp/I3.java
|
||||
@@ -32,15 +32,15 @@ import android.widget.ViewSwitcher;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockActivity;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
-import com.google.android.gms.auth.GoogleAuthUtil;
|
||||
-import com.google.android.gms.common.AccountPicker;
|
||||
-import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
|
||||
-import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
||||
-import com.google.api.client.util.DateTime;
|
||||
-import com.google.api.services.drive.Drive;
|
||||
-import com.google.api.services.drive.model.ChildList;
|
||||
-import com.google.api.services.drive.model.ChildReference;
|
||||
-import com.google.api.services.drive.model.FileList;
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
import com.twofours.surespot.R;
|
||||
import com.twofours.surespot.activities.MainActivity;
|
||||
import com.twofours.surespot.common.FileUtils;
|
||||
@@ -59,11 +59,11 @@ public class ImportIdentityActivity extends SherlockActivity {
|
||||
|
||||
private TextView mAccountNameDisplay;
|
||||
private boolean mShowingLocal;
|
||||
- private DriveHelper mDriveHelper;
|
||||
+
|
||||
private ListView mDriveListview;
|
||||
private SingleProgressDialog mSpd;
|
||||
private SingleProgressDialog mSpdLoadIdentities;
|
||||
- public static final String[] ACCOUNT_TYPE = new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE };
|
||||
+ public static final String[] ACCOUNT_TYPE = new String[] { "dummy" };
|
||||
private static final String ACTION_DRIVE_OPEN = "com.google.android.apps.drive.DRIVE_OPEN";
|
||||
private static final String EXTRA_FILE_ID = "resourceId";
|
||||
private String mFileId;
|
||||
@@ -81,778 +81,33 @@ public class ImportIdentityActivity extends SherlockActivity {
|
||||
Utils.configureActionBar(this, getString(R.string.identity), getString(R.string.restore), true);
|
||||
|
||||
Intent intent = getIntent();
|
||||
-
|
||||
- Utils.logIntent(TAG, intent);
|
||||
- mSignup = intent.getBooleanExtra("signup", false);
|
||||
- mSpdLoadIdentities = new SingleProgressDialog(ImportIdentityActivity.this, getString(R.string.progress_loading_identities), 0);
|
||||
-
|
||||
- final String action = intent.getAction();
|
||||
-
|
||||
- // Make sure the Action is DRIVE_OPEN.
|
||||
- if (ACTION_DRIVE_OPEN.equals(action)) {
|
||||
- // Get the Drive file ID.
|
||||
- mFileId = intent.getStringExtra(EXTRA_FILE_ID);
|
||||
- mMode = MODE_DRIVE;
|
||||
- }
|
||||
- else {
|
||||
- mMode = MODE_NORMAL;
|
||||
-
|
||||
- }
|
||||
-
|
||||
- mDriveHelper = new DriveHelper(getApplicationContext(), mMode == MODE_NORMAL);
|
||||
-
|
||||
- Account account = mDriveHelper.getDriveAccount();
|
||||
- mAccountNameDisplay = (TextView) findViewById(R.id.restoreDriveAccount);
|
||||
- mAccountNameDisplay.setText(account == null ? getString(R.string.no_google_account_selected) : account.name);
|
||||
-
|
||||
- Button chooseAccountButton = (Button) findViewById(R.id.bSelectDriveAccount);
|
||||
- chooseAccountButton.setOnClickListener(new OnClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onClick(View v) {
|
||||
- chooseAccount(true);
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- mDriveListview = (ListView) findViewById(R.id.lvDriveIdentities);
|
||||
- mDriveListview.setEmptyView(findViewById(R.id.no_drive_identities));
|
||||
-
|
||||
- mDriveListview.setOnItemClickListener(new OnItemClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
|
||||
- if (IdentityController.getIdentityCount(ImportIdentityActivity.this) >= SurespotConstants.MAX_IDENTITIES) {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.login_max_identities_reached, SurespotConstants.MAX_IDENTITIES));
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- @SuppressWarnings("unchecked")
|
||||
- final Map<String, String> map = (Map<String, String>) mDriveAdapter.getItem(position);
|
||||
-
|
||||
- final String user = map.get("name");
|
||||
-
|
||||
- // make sure file we're going to save to is writable
|
||||
- // before we
|
||||
- // start
|
||||
- if (!IdentityController.ensureIdentityFile(ImportIdentityActivity.this, user, true)) {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_restore_identity_name, user));
|
||||
- if (mMode == MODE_DRIVE) {
|
||||
- finish();
|
||||
- }
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- mDialog = UIUtils.passwordDialog(ImportIdentityActivity.this, getString(R.string.restore_identity, user),
|
||||
- getString(R.string.enter_password_for, user), new IAsyncCallback<String>() {
|
||||
- @Override
|
||||
- public void handleResponse(final String password) {
|
||||
- if (!TextUtils.isEmpty(password)) {
|
||||
- if (mSpd == null) {
|
||||
- mSpd = new SingleProgressDialog(ImportIdentityActivity.this, getString(R.string.progress_restoring_identity), 0);
|
||||
- }
|
||||
- mSpd.show();
|
||||
-
|
||||
- final String url = map.get("url");
|
||||
-
|
||||
- new AsyncTask<Void, Void, Void>() {
|
||||
-
|
||||
- @Override
|
||||
- protected Void doInBackground(Void... params) {
|
||||
- byte[] identityBytes = mDriveHelper.getFileContent(url);
|
||||
- identityBytes = FileUtils.gunzipIfNecessary(identityBytes);
|
||||
-
|
||||
- IdentityController.importIdentityBytes(ImportIdentityActivity.this, user, password, identityBytes,
|
||||
- new IAsyncCallback<IdentityOperationResult>() {
|
||||
-
|
||||
- @Override
|
||||
- public void handleResponse(final IdentityOperationResult response) {
|
||||
- Utils.clearIntent(getIntent());
|
||||
- ImportIdentityActivity.this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- mSpd.hide();
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, response.getResultText());
|
||||
-
|
||||
- if (response.getResultSuccess()) {
|
||||
- // if
|
||||
- // launched
|
||||
- // from
|
||||
- // signup
|
||||
- // and
|
||||
- // successful
|
||||
- // import,
|
||||
- // go
|
||||
- // to
|
||||
- // login
|
||||
- // screen
|
||||
- if (mSignup || mMode == MODE_DRIVE) {
|
||||
- IdentityController.logout();
|
||||
-
|
||||
- Intent intent = new Intent(ImportIdentityActivity.this, MainActivity.class);
|
||||
- intent.putExtra(SurespotConstants.ExtraNames.MESSAGE_TO, user);
|
||||
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
- startActivity(intent);
|
||||
- finish();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
-
|
||||
- });
|
||||
- return null;
|
||||
- }
|
||||
-
|
||||
- }.execute();
|
||||
-
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.no_identity_imported));
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
-
|
||||
- });
|
||||
-
|
||||
- mSwitcher = (ViewSwitcher) findViewById(R.id.restoreViewSwitcher);
|
||||
- RadioButton rbRestoreLocal = (RadioButton) findViewById(R.id.rbRestoreLocal);
|
||||
- RadioButton rbRestoreDrive = (RadioButton) findViewById(R.id.rbRestoreDrive);
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
-
|
||||
- rbRestoreLocal.setTag("local");
|
||||
- rbRestoreLocal.setChecked(true);
|
||||
- mShowingLocal = true;
|
||||
-
|
||||
- rbRestoreDrive.setTag("drive");
|
||||
-
|
||||
- OnClickListener rbClickListener = new OnClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onClick(View view) {
|
||||
- // Is the button now checked?
|
||||
- boolean checked = ((RadioButton) view).isChecked();
|
||||
-
|
||||
- if (checked) {
|
||||
- if (view.getTag().equals("drive")) {
|
||||
- if (mShowingLocal) {
|
||||
-
|
||||
- mDriveListview.setAdapter(null);
|
||||
- mSwitcher.showNext();
|
||||
- mShowingLocal = false;
|
||||
-
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
- if (mDriveHelper.getDriveAccount() != null) {
|
||||
- Drive drive = mDriveHelper.getDriveService();
|
||||
- if (drive != null) {
|
||||
- mSpdLoadIdentities.show();
|
||||
- new AsyncTask<Void, Void, Void>() {
|
||||
- @Override
|
||||
- protected Void doInBackground(Void... params) {
|
||||
- populateDriveIdentities(true);
|
||||
-
|
||||
- return null;
|
||||
- }
|
||||
-
|
||||
- }.execute();
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- chooseAccount(false);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- if (!mShowingLocal) {
|
||||
- mSwitcher.showPrevious();
|
||||
- mShowingLocal = true;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- rbRestoreDrive.setOnClickListener(rbClickListener);
|
||||
- rbRestoreLocal.setOnClickListener(rbClickListener);
|
||||
- setupLocal();
|
||||
-
|
||||
- }
|
||||
- else {
|
||||
- rbRestoreLocal.setVisibility(View.GONE);
|
||||
- rbRestoreDrive.setChecked(true);
|
||||
- mSwitcher.showNext();
|
||||
- mShowingLocal = false;
|
||||
-
|
||||
- new AsyncTask<Void, Void, Void>() {
|
||||
-
|
||||
- @Override
|
||||
- protected Void doInBackground(Void... params) {
|
||||
- restoreExternal(true);
|
||||
- return null;
|
||||
- }
|
||||
- }.execute();
|
||||
-
|
||||
- }
|
||||
-
|
||||
}
|
||||
|
||||
private void setupLocal() {
|
||||
-
|
||||
- ListView lvIdentities = (ListView) findViewById(R.id.lvLocalIdentities);
|
||||
- lvIdentities.setEmptyView(findViewById(R.id.no_local_identities));
|
||||
-
|
||||
- List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
|
||||
-
|
||||
- // query the filesystem for identities
|
||||
- final File exportDir = FileUtils.getIdentityExportDir();
|
||||
- File[] files = IdentityController.getExportIdentityFiles(this, exportDir.getPath());
|
||||
-
|
||||
- TextView tvLocalLocation = (TextView) findViewById(R.id.restoreLocalLocation);
|
||||
-
|
||||
- if (files != null) {
|
||||
- TreeMap<Long, File> sortedFiles = new TreeMap<Long, File>(new Comparator<Long>() {
|
||||
- public int compare(Long o1, Long o2) {
|
||||
- return o2.compareTo(o1);
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- for (File file : files) {
|
||||
- sortedFiles.put(file.lastModified(), file);
|
||||
- }
|
||||
-
|
||||
- for (File file : sortedFiles.values()) {
|
||||
- long lastModTime = file.lastModified();
|
||||
- String date = DateFormat.getDateFormat(this).format(lastModTime) + " " + DateFormat.getTimeFormat(this).format(lastModTime);
|
||||
-
|
||||
- HashMap<String, String> map = new HashMap<String, String>();
|
||||
- map.put("name", IdentityController.getIdentityNameFromFile(file));
|
||||
- map.put("date", date);
|
||||
- items.add(map);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- final SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.identity_item, new String[] { "name", "date" }, new int[] {
|
||||
- R.id.identityBackupName, R.id.identityBackupDate });
|
||||
- tvLocalLocation.setText(exportDir.toString());
|
||||
- lvIdentities.setVisibility(View.VISIBLE);
|
||||
-
|
||||
- lvIdentities.setAdapter(adapter);
|
||||
- lvIdentities.setOnItemClickListener(new OnItemClickListener() {
|
||||
-
|
||||
- @Override
|
||||
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
- if (IdentityController.getIdentityCount(ImportIdentityActivity.this) >= SurespotConstants.MAX_IDENTITIES) {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.login_max_identities_reached, SurespotConstants.MAX_IDENTITIES));
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- @SuppressWarnings("unchecked")
|
||||
- Map<String, String> map = (Map<String, String>) adapter.getItem(position);
|
||||
-
|
||||
- final String user = map.get("name");
|
||||
-
|
||||
- // make sure file we're going to save to is writable before we
|
||||
- // start
|
||||
- if (!IdentityController.ensureIdentityFile(ImportIdentityActivity.this, user, true)) {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_import_identity));
|
||||
- if (mMode == MODE_DRIVE) {
|
||||
- finish();
|
||||
- }
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- UIUtils.passwordDialog(ImportIdentityActivity.this, getString(R.string.restore_identity, user), getString(R.string.enter_password_for, user),
|
||||
- new IAsyncCallback<String>() {
|
||||
- @Override
|
||||
- public void handleResponse(String result) {
|
||||
- if (!TextUtils.isEmpty(result)) {
|
||||
- IdentityController.importIdentity(ImportIdentityActivity.this, exportDir, user, result,
|
||||
- new IAsyncCallback<IdentityOperationResult>() {
|
||||
-
|
||||
- @Override
|
||||
- public void handleResponse(IdentityOperationResult response) {
|
||||
-
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, response.getResultText());
|
||||
-
|
||||
- if (response.getResultSuccess()) {
|
||||
- // if launched
|
||||
- // from
|
||||
- // signup and
|
||||
- // successful
|
||||
- // import, go to
|
||||
- // login
|
||||
- // screen
|
||||
- if (mSignup) {
|
||||
- IdentityController.logout();
|
||||
-
|
||||
- Intent intent = new Intent(ImportIdentityActivity.this, MainActivity.class);
|
||||
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
- startActivity(intent);
|
||||
- }
|
||||
-
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- });
|
||||
- }
|
||||
- else {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.no_identity_imported));
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
-
|
||||
- });
|
||||
-
|
||||
}
|
||||
|
||||
private void restoreExternal(boolean firstTime) {
|
||||
- if (!firstTime) {
|
||||
-
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_import_identity));
|
||||
- finish();
|
||||
- return;
|
||||
- }
|
||||
- });
|
||||
- }
|
||||
-
|
||||
- if (mDriveHelper.getDriveAccount() == null) {
|
||||
- chooseAccount(false);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
|
||||
- try {
|
||||
- com.google.api.services.drive.model.File file = mDriveHelper.getDriveService().files().get(mFileId).execute();
|
||||
-
|
||||
- if (!file.getLabels().getTrashed()) {
|
||||
-
|
||||
- DateTime lastModTime = file.getModifiedDate();
|
||||
-
|
||||
- String date = DateFormat.getDateFormat(this).format(lastModTime.getValue()) + " "
|
||||
- + DateFormat.getTimeFormat(this).format(lastModTime.getValue());
|
||||
- HashMap<String, String> map = new HashMap<String, String>();
|
||||
- String name = IdentityController.getIdentityNameFromFilename(file.getTitle());
|
||||
- map.put("name", name);
|
||||
- map.put("date", date);
|
||||
- map.put("url", file.getDownloadUrl());
|
||||
- items.add(map);
|
||||
- }
|
||||
- else {
|
||||
- SurespotLog.w(TAG, "could not retrieve identity from google drive");
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_import_identity));
|
||||
- }
|
||||
- });
|
||||
- finish();
|
||||
-
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- catch (UserRecoverableAuthIOException e) {
|
||||
- try {
|
||||
- startActivityForResult(e.getIntent(), SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH);
|
||||
- }
|
||||
- catch (NullPointerException npe) {
|
||||
- }
|
||||
- return;
|
||||
-
|
||||
- }
|
||||
- catch (GoogleJsonResponseException e) {
|
||||
- SurespotLog.w(TAG, e, "could not retrieve identity from google drive");
|
||||
-
|
||||
- // if they're restoring from drive, selecting different account in
|
||||
- // surespot will cause 404
|
||||
- if (e.getStatusCode() == 404 && mMode == MODE_DRIVE) {
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.could_not_import_identity_drive_404));
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "could not retrieve identity from google drive");
|
||||
-
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_import_identity));
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- finish();
|
||||
- return;
|
||||
-
|
||||
- }
|
||||
- catch (SecurityException e) {
|
||||
- SurespotLog.w(TAG, e, "createDriveIdentityDirectory");
|
||||
- // when key is revoked on server this happens...should return
|
||||
- // userrecoverable it seems
|
||||
- // was trying to figure out how to test this
|
||||
- // seems like the only way around this is to remove and re-add
|
||||
- // android account:
|
||||
- // http://stackoverflow.com/questions/5805657/revoke-account-permission-for-an-app
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.re_add_google_account));
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- finish();
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- SurespotLog.v(TAG, "loaded %d identities from google drive", items.size());
|
||||
-
|
||||
- mDriveAdapter = new SimpleAdapter(this, items, R.layout.identity_item, new String[] { "name", "date" }, new int[] { R.id.identityBackupName,
|
||||
- R.id.identityBackupDate });
|
||||
-
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
-
|
||||
- mDriveListview.setAdapter(mDriveAdapter);
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
}
|
||||
|
||||
private void populateDriveIdentities(boolean firstAttempt) {
|
||||
-
|
||||
- String identityDirId = ensureDriveIdentityDirectory();
|
||||
- if (identityDirId == null) {
|
||||
- if (!firstAttempt) {
|
||||
-
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_list_identities_from_google_drive));
|
||||
- }
|
||||
- });
|
||||
- }
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
|
||||
- try {
|
||||
- // query the drive for identities
|
||||
- ChildList fileList = getIdentityFiles(identityDirId);
|
||||
- if (fileList == null) {
|
||||
- SurespotLog.v(TAG, "no identity backup files found on google drive");
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- mSpdLoadIdentities.hide();
|
||||
- }
|
||||
- });
|
||||
- return;
|
||||
-
|
||||
- }
|
||||
-
|
||||
- List<ChildReference> refs = fileList.getItems();
|
||||
-
|
||||
- if (refs.size() == 0) {
|
||||
- SurespotLog.v(TAG, "no identity backup files found on google drive");
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- mSpdLoadIdentities.hide();
|
||||
- }
|
||||
- });
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (refs.size() > 0) {
|
||||
- TreeMap<Long, com.google.api.services.drive.model.File> sortedFiles = new TreeMap<Long, com.google.api.services.drive.model.File>(
|
||||
- new Comparator<Long>() {
|
||||
- public int compare(Long o1, Long o2) {
|
||||
- return o2.compareTo(o1);
|
||||
- }
|
||||
- });
|
||||
- for (ChildReference ref : refs) {
|
||||
- com.google.api.services.drive.model.File file = mDriveHelper.getDriveService().files().get(ref.getId()).execute();
|
||||
-
|
||||
- if (!file.getLabels().getTrashed()) {
|
||||
- DateTime lastModTime = file.getModifiedDate();
|
||||
- sortedFiles.put(lastModTime.getValue(), file);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- for (com.google.api.services.drive.model.File file : sortedFiles.values()) {
|
||||
- DateTime lastModTime = file.getModifiedDate();
|
||||
- String date = DateFormat.getDateFormat(this).format(lastModTime.getValue()) + " "
|
||||
- + DateFormat.getTimeFormat(this).format(lastModTime.getValue());
|
||||
- HashMap<String, String> map = new HashMap<String, String>();
|
||||
- String name = IdentityController.getIdentityNameFromFilename(file.getTitle());
|
||||
- map.put("name", name);
|
||||
- map.put("date", date);
|
||||
- map.put("url", file.getDownloadUrl());
|
||||
- items.add(map);
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- }
|
||||
- catch (UserRecoverableAuthIOException e) {
|
||||
- try {
|
||||
- startActivityForResult(e.getIntent(), SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH);
|
||||
- }
|
||||
- catch (NullPointerException npe) {
|
||||
- }
|
||||
- return;
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "could not retrieve identities from google drive");
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.could_not_list_identities_from_google_drive));
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- return;
|
||||
-
|
||||
- }
|
||||
- catch (SecurityException e) {
|
||||
- SurespotLog.w(TAG, e, "createDriveIdentityDirectory");
|
||||
- // when key is revoked on server this happens...should return
|
||||
- // userrecoverable it seems
|
||||
- // was trying to figure out how to test this
|
||||
- // seems like the only way around this is to remove and re-add
|
||||
- // android account:
|
||||
- // http://stackoverflow.com/questions/5805657/revoke-account-permission-for-an-app
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.re_add_google_account));
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- SurespotLog.v(TAG, "loaded %d identities from google drive", items.size());
|
||||
-
|
||||
- mDriveAdapter = new SimpleAdapter(this, items, R.layout.identity_item, new String[] { "name", "date" }, new int[] { R.id.identityBackupName,
|
||||
- R.id.identityBackupDate });
|
||||
-
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
-
|
||||
- mSpdLoadIdentities.hide();
|
||||
- mDriveListview.setAdapter(mDriveAdapter);
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
}
|
||||
|
||||
+/*
|
||||
private ChildList getIdentityFiles(String identityDirId) {
|
||||
ChildList identityFileList = null;
|
||||
- try {
|
||||
- identityFileList = mDriveHelper.getDriveService().children().list(identityDirId).execute();
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "getIdentityFiles");
|
||||
- }
|
||||
return identityFileList;
|
||||
}
|
||||
-
|
||||
+*/
|
||||
public String ensureDriveIdentityDirectory() {
|
||||
String identityDirId = null;
|
||||
- try {
|
||||
- // see if identities directory exists
|
||||
-
|
||||
- FileList identityDir = mDriveHelper.getDriveService().files().list()
|
||||
- .setQ("title = '" + SurespotConstants.DRIVE_IDENTITY_FOLDER + "' and trashed = false").execute();
|
||||
- List<com.google.api.services.drive.model.File> items = identityDir.getItems();
|
||||
-
|
||||
- if (items.size() > 0) {
|
||||
- for (com.google.api.services.drive.model.File file : items) {
|
||||
- if (!file.getLabels().getTrashed()) {
|
||||
- SurespotLog.d(TAG, "identity folder already exists");
|
||||
- identityDirId = file.getId();
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- if (identityDirId == null) {
|
||||
- com.google.api.services.drive.model.File file = new com.google.api.services.drive.model.File();
|
||||
- file.setTitle(SurespotConstants.DRIVE_IDENTITY_FOLDER);
|
||||
- file.setMimeType(SurespotConstants.MimeTypes.DRIVE_FOLDER);
|
||||
-
|
||||
- com.google.api.services.drive.model.File insertedFile = mDriveHelper.getDriveService().files().insert(file).execute();
|
||||
-
|
||||
- identityDirId = insertedFile.getId();
|
||||
-
|
||||
- }
|
||||
-
|
||||
- }
|
||||
- catch (UserRecoverableAuthIOException e) {
|
||||
- SurespotLog.w(TAG, e, "createDriveIdentityDirectory");
|
||||
- //try {
|
||||
- startActivityForResult(e.getIntent(), SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH);
|
||||
-// }
|
||||
-// catch (NullPointerException npe) {
|
||||
-// return null;
|
||||
-// }
|
||||
- }
|
||||
- catch (IOException e) {
|
||||
- SurespotLog.w(TAG, e, "createDriveIdentityDirectory");
|
||||
- }
|
||||
- catch (SecurityException e) {
|
||||
- SurespotLog.e(TAG, e, "createDriveIdentityDirectory");
|
||||
- // when key is revoked on server this happens...should return
|
||||
- // userrecoverable it seems
|
||||
- // was trying to figure out how to test this
|
||||
- // seems like the only way around this is to remove and re-add
|
||||
- // android account:
|
||||
- // http://stackoverflow.com/questions/5805657/revoke-account-permission-for-an-app
|
||||
- this.runOnUiThread(new Runnable() {
|
||||
-
|
||||
- @Override
|
||||
- public void run() {
|
||||
- Utils.makeLongToast(ImportIdentityActivity.this, getString(R.string.re_add_google_account));
|
||||
-
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- }
|
||||
-
|
||||
return identityDirId;
|
||||
}
|
||||
|
||||
// //////// DRIVE
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
- switch (requestCode) {
|
||||
- case SurespotConstants.IntentRequestCodes.CHOOSE_GOOGLE_ACCOUNT:
|
||||
-
|
||||
- if (resultCode == Activity.RESULT_OK && data != null) {
|
||||
-
|
||||
- SurespotLog.w("Preferences", "SELECTED ACCOUNT WITH EXTRA: %s", data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME));
|
||||
- Bundle b = data.getExtras();
|
||||
-
|
||||
- String accountName = b.getString(AccountManager.KEY_ACCOUNT_NAME);
|
||||
-
|
||||
- SurespotLog.d("Preferences", "Selected account: " + accountName);
|
||||
- if (accountName != null && accountName.length() > 0) {
|
||||
-
|
||||
- mDriveHelper.setDriveAccount(accountName);
|
||||
- mAccountNameDisplay.setText(accountName);
|
||||
- if (mDriveListview != null) {
|
||||
- mDriveListview.setAdapter(null);
|
||||
- }
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
- mSpdLoadIdentities.show();
|
||||
- }
|
||||
- new AsyncTask<Void, Void, Void>() {
|
||||
- @Override
|
||||
- protected Void doInBackground(Void... params) {
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
- populateDriveIdentities(true);
|
||||
- }
|
||||
- else {
|
||||
- restoreExternal(true);
|
||||
- }
|
||||
- return null;
|
||||
- }
|
||||
-
|
||||
- }.execute();
|
||||
- }
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case SurespotConstants.IntentRequestCodes.REQUEST_GOOGLE_AUTH:
|
||||
- if (resultCode == Activity.RESULT_OK) {
|
||||
- SurespotLog.v(TAG, "onActivityResult OK");
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
- mSpdLoadIdentities.show();
|
||||
- }
|
||||
- new AsyncTask<Void, Void, Boolean>() {
|
||||
-
|
||||
- @Override
|
||||
- protected Boolean doInBackground(Void... params) {
|
||||
- Drive drive = mDriveHelper.getDriveService();
|
||||
- if (drive != null) {
|
||||
- if (mMode == MODE_NORMAL) {
|
||||
- populateDriveIdentities(false);
|
||||
-
|
||||
- }
|
||||
- else {
|
||||
- restoreExternal(false);
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-
|
||||
- }
|
||||
-
|
||||
- protected void onPostExecute(Boolean result) {
|
||||
- if (!result) {
|
||||
- mSpdLoadIdentities.hide();
|
||||
- }
|
||||
- };
|
||||
- }.execute();
|
||||
-
|
||||
- }
|
||||
- else {
|
||||
- SurespotLog.v(TAG, "onActivityResult not OK");
|
||||
- mSpdLoadIdentities.hide();
|
||||
- }
|
||||
- }
|
||||
}
|
||||
|
||||
private void chooseAccount(boolean ask) {
|
||||
- String descriptionText = null;
|
||||
- if (mMode == MODE_DRIVE) {
|
||||
- descriptionText = getString(R.string.pick_same_drive_account);
|
||||
- }
|
||||
-
|
||||
- Intent accountPickerIntent = AccountPicker.newChooseAccountIntent(null, null, ACCOUNT_TYPE, ask || mMode == MODE_DRIVE, descriptionText, null, null,
|
||||
- null);
|
||||
- try {
|
||||
- startActivityForResult(accountPickerIntent, SurespotConstants.IntentRequestCodes.CHOOSE_GOOGLE_ACCOUNT);
|
||||
- }
|
||||
- catch (ActivityNotFoundException e) {
|
||||
- Utils.makeToast(ImportIdentityActivity.this, getString(R.string.device_does_not_support_google_drive));
|
||||
- SurespotLog.i(TAG, e, "chooseAccount");
|
||||
- }
|
||||
-
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1 +0,0 @@
|
|||
Verschlüsselte Nachrichten versenden
|
||||
|
|
@ -1 +0,0 @@
|
|||
Send encrypted text messages
|
||||
|
|
@ -1 +0,0 @@
|
|||
Enviar mensajes de texto cifrados
|
||||
|
|
@ -1 +0,0 @@
|
|||
Envoyer des messages texte cryptés
|
||||
|
|
@ -1 +0,0 @@
|
|||
שליחת מסרונים (SMS) מוצפנים
|
||||
|
|
@ -1 +0,0 @@
|
|||
Krypterte tekstmeldinger
|
||||
|
|
@ -1 +0,0 @@
|
|||
Wysyłanie zaszyfrowanych wiadomości tekstowych
|
||||
|
|
@ -1 +0,0 @@
|
|||
Envia mensagens de texto criptografadas
|
||||
|
|
@ -1 +0,0 @@
|
|||
Envia mensagens de texto criptografadas
|
||||
|
|
@ -1 +0,0 @@
|
|||
Envia mensagens de texto criptografadas
|
||||
|
|
@ -1 +0,0 @@
|
|||
Şifreli metin iletileri gönderin
|
||||
|
|
@ -1 +0,0 @@
|
|||
发送加密文本消息
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
Categories:
|
||||
- Navigation
|
||||
License: Apache-2.0
|
||||
SourceCode: https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider
|
||||
IssueTracker: https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider/issues
|
||||
|
||||
AutoName: AndroidMockGpx
|
||||
Description: |-
|
||||
Stream GPX files through the Mock Location provider to simulate GPS on the
|
||||
device.
|
||||
|
||||
Requires: https://f-droid.org/packages/org.openintents.filemanager
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider.git
|
||||
|
||||
Builds:
|
||||
- versionName: '1.0'
|
||||
versionCode: 1
|
||||
disable: missing deps, jar present
|
||||
commit: 584b47e467055db3b7f678702e1da5727b18fdf6
|
||||
subdir: android
|
||||
target: android-15
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '1.0'
|
||||
CurrentVersionCode: 1
|
||||
|
|
@ -1 +0,0 @@
|
|||
Simulate GPS through prerecordet GPX files
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
Categories:
|
||||
- Navigation
|
||||
License: LGPL-3.0-only
|
||||
AuthorName: Ushahidi
|
||||
AuthorEmail: contact@ushahidi.com
|
||||
AuthorWebSite: https://www.ushahidi.com/
|
||||
SourceCode: https://github.com/ushahidi/Ushahidi_Android
|
||||
IssueTracker: https://github.com/ushahidi/Ushahidi_Android/issues
|
||||
|
||||
AutoName: Ushahidi
|
||||
Description: |-
|
||||
Ushahidi is a web and mobile platform that allows you to create, visualize and
|
||||
share stories on a map. It allows individuals to share their stories on their
|
||||
own terms using the tools they already have. Sync with any Ushahidi deployment.
|
||||
Send reports with images and location data as well as receive alerts from others
|
||||
who have sent in reports to the site.
|
||||
|
||||
The app supports loading of multiple deployments at one time, quick filtering
|
||||
through reports, exploring incident locations on the map, viewing report photos,
|
||||
news article, media as well as sharing reports via email, SMS or Twitter. Once
|
||||
the data has been downloaded, the app can function without an internet
|
||||
connection, allowing accurate collection of data utilizing the device’s camera
|
||||
and GPS capabilities
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/ushahidi/Ushahidi_Android.git
|
||||
|
||||
Builds:
|
||||
- versionName: 3.1.4
|
||||
versionCode: 29
|
||||
disable: requires Google Maps and API keys (for the moment)
|
||||
commit: unknown - see disabled
|
||||
subdir: Themes/Ushahidi
|
||||
init: rm -f ../../Libraries/cwacmerge/build.xml
|
||||
prebuild:
|
||||
- mkdir src
|
||||
- cp ../../Core/libs/* libs/
|
||||
- rm -f libs/action*
|
||||
- sed -i 's/\"com.google.android.maps\"/\"com.google.android.maps\" android:required="false"/g'
|
||||
AndroidManifest.xml
|
||||
androidupdate:
|
||||
- .
|
||||
- ../../Core
|
||||
- ../../Libraries/cwacmerge
|
||||
- ../../Libraries/abs
|
||||
|
||||
- versionName: '3.9'
|
||||
versionCode: 36
|
||||
disable: requires Google Maps and API keys (for the moment)
|
||||
commit: unknown - see disabled
|
||||
subdir: Themes/Ushahidi
|
||||
init: rm -f ../../Libraries/cwacmerge/build.xml
|
||||
prebuild:
|
||||
- mkdir src
|
||||
- cp ../../Core/libs/* libs/
|
||||
- rm -f libs/action*
|
||||
- sed -i 's/\"com.google.android.maps\"/\"com.google.android.maps\" android:required="false"/g'
|
||||
AndroidManifest.xml
|
||||
androidupdate:
|
||||
- .
|
||||
- ../../Core
|
||||
- ../../Libraries/cwacmerge
|
||||
- ../../Libraries/abs
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: '3.9'
|
||||
CurrentVersionCode: 36
|
||||
|
|
@ -1 +0,0 @@
|
|||
Mapping tools
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
Categories:
|
||||
- System
|
||||
License: GPL-3.0-only
|
||||
SourceCode: https://github.com/bhubie/Expander
|
||||
IssueTracker: https://github.com/bhubie/Expander/issues
|
||||
|
||||
AutoName: Expander
|
||||
Description: |-
|
||||
Allows you to define an unlimited number of text shortcuts that will expand into
|
||||
a full phrases when typed.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/bhubie/Expander
|
||||
|
||||
Builds:
|
||||
- versionName: '0.8'
|
||||
versionCode: 12
|
||||
disable: pre-release constraint layout
|
||||
commit: 2dcb80e9200507c77cfc064449347e64c2f660ce
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
prebuild: sed -i -e '/crittercism/d' build.gradle
|
||||
|
||||
- versionName: 0.8.5
|
||||
versionCode: 13
|
||||
disable: pre-release constraint layout
|
||||
commit: ee0b5ab379e275a77db8a070796be08d71463adc
|
||||
subdir: app
|
||||
gradle:
|
||||
- yes
|
||||
prebuild: sed -i -e '/crittercism/d' build.gradle
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 0.8.5
|
||||
CurrentVersionCode: 13
|
||||
|
|
@ -1 +0,0 @@
|
|||
Expand keywords to whole phrases
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
Categories:
|
||||
- Theming
|
||||
License: Apache-2.0
|
||||
WebSite: http://chislonchow.wordpress.com/2012/03/17/legacy-launcher-for-android
|
||||
SourceCode: https://github.com/chislon/LegacyLauncher
|
||||
IssueTracker: https://github.com/chislon/LegacyLauncher/issues
|
||||
|
||||
AutoName: Legacy Launcher
|
||||
Description: |-
|
||||
Alternative launcher or home screen for low-end devices. It's based on the
|
||||
popular ADW Launcher Free.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/chislon/LegacyLauncher
|
||||
|
||||
Builds:
|
||||
- versionName: 0.39.11
|
||||
versionCode: 55
|
||||
disable: doesn't build; use of hidden api
|
||||
commit: 95273bf6c89f1f5746868d0f02b33e5d9236c4a8
|
||||
target: android-10
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 0.39.11
|
||||
CurrentVersionCode: 55
|
||||
|
|
@ -1 +0,0 @@
|
|||
Launcher for low-end devices
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
Disabled: Needs simple-build-tool to build
|
||||
Categories:
|
||||
- Internet
|
||||
License: MIT
|
||||
SourceCode: https://github.com/jberkel/gist-it
|
||||
IssueTracker: https://github.com/jberkel/gist-it/issues
|
||||
|
||||
Summary: Github Gist API client
|
||||
Description: |-
|
||||
Create and edit gists (snippets of text hosted at https://gist.github.com) with
|
||||
this Android app.
|
||||
|
||||
RepoType: git
|
||||
Repo: https://github.com/jberkel/gist-it.git
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: None
|
||||
CurrentVersion: 0.1.4
|
||||
CurrentVersionCode: 5
|
||||
|
|
@ -1 +0,0 @@
|
|||
Wlppr.com pictures in Muzei
|
||||
Loading…
Reference in a new issue