Merge remote-tracking branch 'remotes/origin/master' into userTheming
|
@ -34,7 +34,7 @@ pipeline:
|
|||
# needs gplay
|
||||
- sed -i '/com.google.*.gms/s/^.*\/\///g' build.gradle
|
||||
- export BRANCH=$(scripts/lint/getBranchName.sh ${GIT_USERNAME} ${GIT_TOKEN} ${DRONE_PULL_REQUEST})
|
||||
- ruby scripts/lint/lint-up.rb ${GIT_USERNAME} ${GIT_TOKEN} $BRANCH
|
||||
- scripts/lint/lint-up-wrapper.sh ${GIT_USERNAME} ${GIT_TOKEN} $BRANCH ${LOG_USERNAME} ${LOG_PASSWORD} ${DRONE_BUILD_NUMBER}
|
||||
when:
|
||||
matrix:
|
||||
FLAVOUR: Modified
|
||||
|
|
|
@ -1 +1 @@
|
|||
eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBuZXh0Y2xvdWRjaS9hbmRyb2lkOmFuZHJvaWQtMTgKICAgIGNvbW1hbmRzOgogICAgICAjIHVuY29tbWVudCBncGxheSBmb3IgR3BsYXksIE1vZGlmaWVkIG9ubHkKICAgICAgLSBzaCAtYyAiaWYgWyAnJEZMQVZPVVInICE9ICdHZW5lcmljJyBdOyB0aGVuIHNlZCAtaSAnL2NvbS5nb29nbGUuKi5nbXMvcy9eLipcL1wvLy9nJyBidWlsZC5ncmFkbGU7IGZpIgoKICAgICAgLSBlY2hvIG5vIHwgYW5kcm9pZCBjcmVhdGUgYXZkIC0tZm9yY2UgLW4gdGVzdCAtdCAkQU5EUk9JRF9UQVJHRVQgLS1hYmkgJEFORFJPSURfQUJJIC1jIDIwTQogICAgICAtIGVtdWxhdG9yIC1hdmQgdGVzdCAtbm8td2luZG93ICYKICAgICAgLSAuL3dhaXRfZm9yX2VtdWxhdG9yLnNoCgogICAgICAjIGJ1aWxkIGFwcCBhbmQgYXNzZW1ibGUgQVBLLCBpbiBkZWJ1ZyBtb2RlCiAgICAgIC0gLi9ncmFkbGV3IGFzc2VtYmxlJHtGTEFWT1VSfQoKICAgICAgIyBydW4gYWxsIHRoZSBpbnN0cnVtZW50ZWQgdGVzdHMgb2YgYXBwIG1vZHVsZSAtIERJU0FCTEVEIHVudGlsIHdlIGdldCBhbiBzdGFibGUgc2V0dXAgZm9yIEVzcHJlc3NvIGluIFRyYXZpcwogICAgICAjIC0gLi9ncmFkbGV3IGNvbm5lY3RlZERlYnVnQW5kcm9pZFRlc3QgLS1pbmZvCgogICAgICAjIGluc3RhbGwgYXBwLCB0aGVuIGFzc2VtYmxlIGFuZCBpbnN0YWxsIGluc3RydW1lbnRlZCB0ZXN0cyBvZiBhcHAgbW9kdWxlCiAgICAgIC0gLi9ncmFkbGV3IDppbnN0YWxsJHtGTEFWT1VSfURlYnVnCiAgICAgIC0gLi9ncmFkbGV3IDppbnN0YWxsJHtGTEFWT1VSfURlYnVnQW5kcm9pZFRlc3QKCiAgICAgICMgcnVuIHNhbXBsZSBpbnN0cnVtZW50ZWQgdW5pdCB0ZXN0CiAgICAgICMgVE9ETyBmYWlscyBiZWNhdXNlIHRlc3QgcnVubmVyIGlzIG5vdCBhdmFpbGFibGUKICAgICAgIy0gYWRiIHNoZWxsIGFtIGluc3RydW1lbnQgLXcgLWUgZGVidWcgZmFsc2UgLWUgY2xhc3MgY29tLm93bmNsb3VkLmFuZHJvaWQuZGF0YW1vZGVsLk9DRmlsZVVuaXRUZXN0IGNvbS5vd25jbG91ZC5hbmRyb2lkLnRlc3QvYW5kcm9pZC5zdXBwb3J0LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcgoKICAgIGVudmlyb25tZW50OgogICAgICAtIEFORFJPSURfVEFSR0VUPWFuZHJvaWQtMjQKICAgICAgLSBBTkRST0lEX0FCST1hcm1lYWJpLXY3YQogICAgICAtIExEX0xJQlJBUllfUEFUSD0vdXNyL2xpYi94ODZfNjQtbGludXgtZ251Lzovb3B0L2FuZHJvaWQtc2RrLWxpbnV4L3Rvb2xzL2xpYjY0L2dsZXNfbWVzYS8KCiAgbGludDoKICAgICAgaW1hZ2U6IG5leHRjbG91ZGNpL2FuZHJvaWQ6YW5kcm9pZC0xOAogICAgICBjb21tYW5kczoKICAgICAgICAjIG5lZWRzIGdwbGF5CiAgICAgICAgLSBzZWQgLWkgJy9jb20uZ29vZ2xlLiouZ21zL3MvXi4qXC9cLy8vZycgYnVpbGQuZ3JhZGxlCiAgICAgICAgLSBleHBvcnQgQlJBTkNIPSQoc2NyaXB0cy9saW50L2dldEJyYW5jaE5hbWUuc2ggJHtHSVRfVVNFUk5BTUV9ICR7R0lUX1RPS0VOfSAke0RST05FX1BVTExfUkVRVUVTVH0pCiAgICAgICAgLSBydWJ5IHNjcmlwdHMvbGludC9saW50LXVwLnJiICR7R0lUX1VTRVJOQU1FfSAke0dJVF9UT0tFTn0gJEJSQU5DSAogICAgICB3aGVuOgogICAgICAgIG1hdHJpeDoKICAgICAgICAgIEZMQVZPVVI6IE1vZGlmaWVkCgptYXRyaXg6CiAgRkxBVk9VUjoKICAgIC0gR2VuZXJpYwogICAgLSBHcGxheQogICAgLSBNb2RpZmllZAoKYnJhbmNoZXM6IG1hc3Rlcg.BJDcPdoKinGxnz6zT8dBxvwE_DBi9QyzXXnk0LOOdV4
|
||||
eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBuZXh0Y2xvdWRjaS9hbmRyb2lkOmFuZHJvaWQtMTgKICAgIGNvbW1hbmRzOgogICAgICAjIHVuY29tbWVudCBncGxheSBmb3IgR3BsYXksIE1vZGlmaWVkIG9ubHkKICAgICAgLSBzaCAtYyAiaWYgWyAnJEZMQVZPVVInICE9ICdHZW5lcmljJyBdOyB0aGVuIHNlZCAtaSAnL2NvbS5nb29nbGUuKi5nbXMvcy9eLipcL1wvLy9nJyBidWlsZC5ncmFkbGU7IGZpIgoKICAgICAgLSBlY2hvIG5vIHwgYW5kcm9pZCBjcmVhdGUgYXZkIC0tZm9yY2UgLW4gdGVzdCAtdCAkQU5EUk9JRF9UQVJHRVQgLS1hYmkgJEFORFJPSURfQUJJIC1jIDIwTQogICAgICAtIGVtdWxhdG9yIC1hdmQgdGVzdCAtbm8td2luZG93ICYKICAgICAgLSAuL3dhaXRfZm9yX2VtdWxhdG9yLnNoCgogICAgICAjIGJ1aWxkIGFwcCBhbmQgYXNzZW1ibGUgQVBLLCBpbiBkZWJ1ZyBtb2RlCiAgICAgIC0gLi9ncmFkbGV3IGFzc2VtYmxlJHtGTEFWT1VSfQoKICAgICAgIyBydW4gYWxsIHRoZSBpbnN0cnVtZW50ZWQgdGVzdHMgb2YgYXBwIG1vZHVsZSAtIERJU0FCTEVEIHVudGlsIHdlIGdldCBhbiBzdGFibGUgc2V0dXAgZm9yIEVzcHJlc3NvIGluIFRyYXZpcwogICAgICAjIC0gLi9ncmFkbGV3IGNvbm5lY3RlZERlYnVnQW5kcm9pZFRlc3QgLS1pbmZvCgogICAgICAjIGluc3RhbGwgYXBwLCB0aGVuIGFzc2VtYmxlIGFuZCBpbnN0YWxsIGluc3RydW1lbnRlZCB0ZXN0cyBvZiBhcHAgbW9kdWxlCiAgICAgIC0gLi9ncmFkbGV3IDppbnN0YWxsJHtGTEFWT1VSfURlYnVnCiAgICAgIC0gLi9ncmFkbGV3IDppbnN0YWxsJHtGTEFWT1VSfURlYnVnQW5kcm9pZFRlc3QKCiAgICAgICMgcnVuIHNhbXBsZSBpbnN0cnVtZW50ZWQgdW5pdCB0ZXN0CiAgICAgICMgVE9ETyBmYWlscyBiZWNhdXNlIHRlc3QgcnVubmVyIGlzIG5vdCBhdmFpbGFibGUKICAgICAgIy0gYWRiIHNoZWxsIGFtIGluc3RydW1lbnQgLXcgLWUgZGVidWcgZmFsc2UgLWUgY2xhc3MgY29tLm93bmNsb3VkLmFuZHJvaWQuZGF0YW1vZGVsLk9DRmlsZVVuaXRUZXN0IGNvbS5vd25jbG91ZC5hbmRyb2lkLnRlc3QvYW5kcm9pZC5zdXBwb3J0LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcgoKICAgIGVudmlyb25tZW50OgogICAgICAtIEFORFJPSURfVEFSR0VUPWFuZHJvaWQtMjQKICAgICAgLSBBTkRST0lEX0FCST1hcm1lYWJpLXY3YQogICAgICAtIExEX0xJQlJBUllfUEFUSD0vdXNyL2xpYi94ODZfNjQtbGludXgtZ251Lzovb3B0L2FuZHJvaWQtc2RrLWxpbnV4L3Rvb2xzL2xpYjY0L2dsZXNfbWVzYS8KCiAgbGludDoKICAgICAgaW1hZ2U6IG5leHRjbG91ZGNpL2FuZHJvaWQ6YW5kcm9pZC0xOAogICAgICBjb21tYW5kczoKICAgICAgICAjIG5lZWRzIGdwbGF5CiAgICAgICAgLSBzZWQgLWkgJy9jb20uZ29vZ2xlLiouZ21zL3MvXi4qXC9cLy8vZycgYnVpbGQuZ3JhZGxlCiAgICAgICAgLSBleHBvcnQgQlJBTkNIPSQoc2NyaXB0cy9saW50L2dldEJyYW5jaE5hbWUuc2ggJHtHSVRfVVNFUk5BTUV9ICR7R0lUX1RPS0VOfSAke0RST05FX1BVTExfUkVRVUVTVH0pCiAgICAgICAgLSBzY3JpcHRzL2xpbnQvbGludC11cC13cmFwcGVyLnNoICR7R0lUX1VTRVJOQU1FfSAke0dJVF9UT0tFTn0gJEJSQU5DSCAke0xPR19VU0VSTkFNRX0gJHtMT0dfUEFTU1dPUkR9ICR7RFJPTkVfQlVJTERfTlVNQkVSfQogICAgICB3aGVuOgogICAgICAgIG1hdHJpeDoKICAgICAgICAgIEZMQVZPVVI6IE1vZGlmaWVkCgptYXRyaXg6CiAgRkxBVk9VUjoKICAgIC0gR2VuZXJpYwogICAgLSBHcGxheQogICAgLSBNb2RpZmllZAoKYnJhbmNoZXM6IG1hc3Rlcg.vRQiBogC3hjPLCVvLM0-Qrbvk4hnwKscwaPRBlyc8NM
|
|
@ -1,3 +1,6 @@
|
|||
## 1.4.3 (May 22, 2017)
|
||||
- Hotfix: ignore oauth header for now and use basic auth to allow new logins for nc12
|
||||
|
||||
## 1.4.2 (March 14, 2017)
|
||||
- Auto Upload for newly taken photos/images (Android 6+)
|
||||
- Auto Upload improvements and fixes
|
||||
|
|
|
@ -52,7 +52,6 @@ repositories {
|
|||
android {
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
lintConfig file("${project.rootDir}/lint.xml")
|
||||
htmlReport true
|
||||
htmlOutput file("$project.buildDir/reports/lint/lint.html")
|
||||
disable 'MissingTranslation'
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
|
@ -12,7 +11,7 @@
|
|||
version="1"
|
||||
id="svg4"
|
||||
sodipodi:docname="ic_list_empty_image.svg"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
inkscape:version="0.91 r13725"
|
||||
inkscape:export-filename="C:\DEV\src\Android\Nextcloud\favourites\src\main\res\drawable-mdpi\ic_list_empty_image.png"
|
||||
inkscape:export-xdpi="432"
|
||||
inkscape:export-ydpi="432">
|
||||
|
@ -38,19 +37,19 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1005"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="835"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cx="17.694915"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
style="block-progression:tb;text-transform:none;text-indent:0;fill:#000000;fill-opacity:1;opacity:0.5"
|
||||
style="block-progression:tb;text-transform:none;text-indent:0;fill:#757575;fill-opacity:1;opacity:1"
|
||||
d="M1.344 2A.445.445 0 0 0 1 2.438v11.124c0 .23.212.44.438.44h13.125a.457.457 0 0 0 .437-.44V2.61c0-.337-.264-.61-.515-.61zM2 3h12v5l-1-1-3 4-3-3-4 4H2zm2.5 1a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z"
|
||||
fill="#969696"
|
||||
color="#000"
|
||||
|
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -3,7 +3,6 @@
|
|||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
|
@ -12,7 +11,7 @@
|
|||
version="1"
|
||||
id="svg4"
|
||||
sodipodi:docname="ic_list_empty_video.svg"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
inkscape:version="0.91 r13725"
|
||||
inkscape:export-filename="C:\DEV\src\Android\Nextcloud\favourites\src\main\res\drawable-mdpi\ic_list_empty_video.png"
|
||||
inkscape:export-xdpi="432"
|
||||
inkscape:export-ydpi="432">
|
||||
|
@ -38,21 +37,21 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1005"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="835"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:zoom="20.85965"
|
||||
inkscape:cx="-15.290906"
|
||||
inkscape:cy="9.1100694"
|
||||
inkscape:window-x="1600"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
style="block-progression:tb;text-transform:none;text-indent:0;fill:#000000;fill-opacity:1;opacity:0.5"
|
||||
style="block-progression:tb;text-transform:none;text-indent:0;fill:#757575;fill-opacity:1;opacity:1"
|
||||
d="M1.344 2A.445.445 0 0 0 1 2.438v11.124c0 .23.212.44.438.44h13.124a.457.457 0 0 0 .438-.44V2.61c0-.336-.265-.61-.516-.61zM2 3h12v10H2zm3 2v6l6-3z"
|
||||
id="path2"
|
||||
fill="#969696"
|
||||
color="#000"
|
||||
id="path2" />
|
||||
color="#000" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -1,2 +1,2 @@
|
|||
DO NOT TOUCH; GENERATED BY DRONE
|
||||
<span class="mdl-layout-title">Lint Report: 75 errors and 852 warnings</span>
|
||||
<span class="mdl-layout-title">Lint Report: 74 errors and 848 warnings</span>
|
18
scripts/lint/lint-up-wrapper.sh
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
#1: GIT_USERNAME
|
||||
#2: GIT_TOKEN
|
||||
#3: BRANCH
|
||||
#4: LOG_USERNAME
|
||||
#5: LOG_PASSWORD
|
||||
#6: DRONE_BUILD_NUMBER
|
||||
|
||||
ruby scripts/lint/lint-up.rb $1 $2 $3
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "New master at: https://nextcloud.kaminsky.me/index.php/s/tXwtChzyqMj6I8v"
|
||||
curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/droneLogs/master.html --upload-file build/reports/lint/lint.html
|
||||
else
|
||||
echo "New results at https://nextcloud.kaminsky.me/index.php/s/tXwtChzyqMj6I8v ->" $6.html
|
||||
curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/droneLogs/$6.html --upload-file build/reports/lint/lint.html
|
||||
fi
|
|
@ -19,8 +19,8 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.owncloud.android"
|
||||
android:versionCode="10040299"
|
||||
android:versionName="1.4.2">
|
||||
android:versionCode="10040399"
|
||||
android:versionName="1.4.3">
|
||||
|
||||
<application
|
||||
android:name=".MainApp"
|
||||
|
|
|
@ -19,10 +19,9 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.owncloud.android"
|
||||
android:versionCode="10040299"
|
||||
android:versionName="1.4.2">
|
||||
android:versionCode="10040399"
|
||||
android:versionName="1.4.3">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="14"
|
||||
|
|
|
@ -225,7 +225,10 @@ public class AccountUtils {
|
|||
if (currentAccountVersion == null) {
|
||||
Log_OC.i(TAG, "Upgrading accounts to account version #" + ACCOUNT_VERSION);
|
||||
Account[] ocAccounts = accountMgr.getAccountsByType(MainApp.getAccountType());
|
||||
String serverUrl, username, newAccountName, password;
|
||||
String serverUrl;
|
||||
String username;
|
||||
String newAccountName;
|
||||
String password;
|
||||
Account newAccount;
|
||||
for (Account account : ocAccounts) {
|
||||
// build new account name
|
||||
|
|
|
@ -279,49 +279,18 @@ public class FileDataStorageManager {
|
|||
Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
|
||||
+ " children and " + filesToRemove.size() + " files to remove");
|
||||
|
||||
ArrayList<ContentProviderOperation> operations =
|
||||
new ArrayList<ContentProviderOperation>(updatedFiles.size());
|
||||
ArrayList<ContentProviderOperation> operations = new ArrayList<>(updatedFiles.size());
|
||||
|
||||
// prepare operations to insert or update files to save in the given folder
|
||||
for (OCFile file : updatedFiles) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
|
||||
cv.put(
|
||||
ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
|
||||
file.getModificationTimestampAtLastSyncForData()
|
||||
);
|
||||
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
|
||||
cv.put(ProviderTableMeta.FILE_NAME, file.getFileName());
|
||||
//cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId());
|
||||
cv.put(ProviderTableMeta.FILE_PARENT, folder.getFileId());
|
||||
cv.put(ProviderTableMeta.FILE_PATH, file.getRemotePath());
|
||||
if (!file.isFolder()) {
|
||||
cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
|
||||
}
|
||||
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, file.getLastSyncDateForProperties());
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, file.getLastSyncDateForData());
|
||||
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.isAvailableOffline() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, file.isSharedViaLink() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, file.isSharedWithSharee() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
|
||||
cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
|
||||
cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
|
||||
cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
|
||||
cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
|
||||
cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
|
||||
cv.put(ProviderTableMeta.FILE_FAVORITE, file.getIsFavorite());
|
||||
ContentValues cv = createContentValueForFile(file, folder);
|
||||
|
||||
boolean existsByPath = fileExists(file.getRemotePath());
|
||||
if (existsByPath || fileExists(file.getFileId())) {
|
||||
// updating an existing file
|
||||
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
|
||||
withValues(cv).
|
||||
withSelection(ProviderTableMeta._ID + "=?",
|
||||
new String[]{String.valueOf(file.getFileId())})
|
||||
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI)
|
||||
.withValues(cv)
|
||||
.withSelection(ProviderTableMeta._ID + "=?", new String[]{String.valueOf(file.getFileId())})
|
||||
.build());
|
||||
|
||||
} else {
|
||||
|
@ -332,17 +301,14 @@ public class FileDataStorageManager {
|
|||
}
|
||||
|
||||
// prepare operations to remove files in the given folder
|
||||
String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND +
|
||||
ProviderTableMeta.FILE_PATH + "=?";
|
||||
String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PATH + "=?";
|
||||
String [] whereArgs = null;
|
||||
for (OCFile file : filesToRemove) {
|
||||
if (file.getParentId() == folder.getFileId()) {
|
||||
whereArgs = new String[]{mAccount.name, file.getRemotePath()};
|
||||
if (file.isFolder()) {
|
||||
operations.add(ContentProviderOperation.newDelete(
|
||||
ContentUris.withAppendedId(
|
||||
ProviderTableMeta.CONTENT_URI_DIR, file.getFileId()
|
||||
)
|
||||
ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_DIR, file.getFileId())
|
||||
).withSelection(where, whereArgs).build());
|
||||
|
||||
File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
|
||||
|
@ -351,8 +317,7 @@ public class FileDataStorageManager {
|
|||
}
|
||||
} else {
|
||||
operations.add(ContentProviderOperation.newDelete(
|
||||
ContentUris.withAppendedId(
|
||||
ProviderTableMeta.CONTENT_URI_FILE, file.getFileId()
|
||||
ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, file.getFileId()
|
||||
)
|
||||
).withSelection(where, whereArgs).build());
|
||||
|
||||
|
@ -366,29 +331,7 @@ public class FileDataStorageManager {
|
|||
}
|
||||
|
||||
// update metadata of folder
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp());
|
||||
cv.put(
|
||||
ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
|
||||
folder.getModificationTimestampAtLastSyncForData()
|
||||
);
|
||||
cv.put(ProviderTableMeta.FILE_CREATION, folder.getCreationTimestamp());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0);
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, folder.getMimetype());
|
||||
cv.put(ProviderTableMeta.FILE_NAME, folder.getFileName());
|
||||
cv.put(ProviderTableMeta.FILE_PARENT, folder.getParentId());
|
||||
cv.put(ProviderTableMeta.FILE_PATH, folder.getRemotePath());
|
||||
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, folder.getLastSyncDateForProperties());
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, folder.getLastSyncDateForData());
|
||||
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, folder.isAvailableOffline() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, folder.isSharedViaLink() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, folder.isSharedWithSharee() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink());
|
||||
cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions());
|
||||
cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId());
|
||||
cv.put(ProviderTableMeta.FILE_FAVORITE, folder.getIsFavorite());
|
||||
ContentValues cv = createContentValueForFile(folder);
|
||||
|
||||
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
|
||||
withValues(cv).
|
||||
|
@ -431,7 +374,67 @@ public class FileDataStorageManager {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ContentValues createContentValueForFile(OCFile folder) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp());
|
||||
cv.put(
|
||||
ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
|
||||
folder.getModificationTimestampAtLastSyncForData()
|
||||
);
|
||||
cv.put(ProviderTableMeta.FILE_CREATION, folder.getCreationTimestamp());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0);
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, folder.getMimetype());
|
||||
cv.put(ProviderTableMeta.FILE_NAME, folder.getFileName());
|
||||
cv.put(ProviderTableMeta.FILE_PARENT, folder.getParentId());
|
||||
cv.put(ProviderTableMeta.FILE_PATH, folder.getRemotePath());
|
||||
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, folder.getLastSyncDateForProperties());
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, folder.getLastSyncDateForData());
|
||||
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, folder.isAvailableOffline() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, folder.isSharedViaLink() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, folder.isSharedWithSharee() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink());
|
||||
cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions());
|
||||
cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId());
|
||||
cv.put(ProviderTableMeta.FILE_FAVORITE, folder.getIsFavorite());
|
||||
return cv;
|
||||
}
|
||||
|
||||
private ContentValues createContentValueForFile(OCFile file, OCFile folder) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
|
||||
cv.put(
|
||||
ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
|
||||
file.getModificationTimestampAtLastSyncForData()
|
||||
);
|
||||
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
|
||||
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
|
||||
cv.put(ProviderTableMeta.FILE_NAME, file.getFileName());
|
||||
//cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId());
|
||||
cv.put(ProviderTableMeta.FILE_PARENT, folder.getFileId());
|
||||
cv.put(ProviderTableMeta.FILE_PATH, file.getRemotePath());
|
||||
if (!file.isFolder()) {
|
||||
cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
|
||||
}
|
||||
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, file.getLastSyncDateForProperties());
|
||||
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, file.getLastSyncDateForData());
|
||||
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.isAvailableOffline() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, file.isSharedViaLink() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, file.isSharedWithSharee() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
|
||||
cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
|
||||
cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
|
||||
cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
|
||||
cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
|
||||
cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
|
||||
cv.put(ProviderTableMeta.FILE_FAVORITE, file.getIsFavorite());
|
||||
return cv;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -425,12 +425,13 @@ public class ThumbnailsCacheManager {
|
|||
thumbnail = doFileInBackground(mFile);
|
||||
}
|
||||
}
|
||||
} // the app should never break due to a problem with thumbnails
|
||||
catch (OutOfMemoryError t) {
|
||||
Log_OC.e(TAG, "Generation of thumbnail for " + mFile.getAbsolutePath() + " failed", t);
|
||||
System.gc();
|
||||
} catch (Throwable t) {
|
||||
// the app should never break due to a problem with thumbnails
|
||||
Log_OC.e(TAG, "Generation of thumbnail for " + mFile.getAbsolutePath() + " failed", t);
|
||||
if (t instanceof OutOfMemoryError) {
|
||||
System.gc();
|
||||
}
|
||||
}
|
||||
|
||||
return thumbnail;
|
||||
|
|
|
@ -56,6 +56,13 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
|||
// http://developer.android.com/reference/android/hardware/Camera.html#ACTION_NEW_VIDEO
|
||||
private static final String NEW_VIDEO_ACTION = "android.hardware.action.NEW_VIDEO";
|
||||
|
||||
/**
|
||||
* Because we support NEW_PHOTO_ACTION and NEW_PHOTO_ACTION_UNOFFICIAL it can happen that
|
||||
* handleNewPictureAction is called twice for the same photo. Use this simple static variable to
|
||||
* remember last uploaded photo to filter duplicates. Must not be null!
|
||||
*/
|
||||
static String lastUploadedPhotoPath = "";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
|
@ -75,13 +82,6 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Because we support NEW_PHOTO_ACTION and NEW_PHOTO_ACTION_UNOFFICIAL it can happen that
|
||||
* handleNewPictureAction is called twice for the same photo. Use this simple static variable to
|
||||
* remember last uploaded photo to filter duplicates. Must not be null!
|
||||
*/
|
||||
static String lastUploadedPhotoPath = "";
|
||||
|
||||
private void handleNewPictureAction(Context context, Intent intent) {
|
||||
Cursor c = null;
|
||||
String file_path = null;
|
||||
|
|
|
@ -115,7 +115,8 @@ public class IndexedForest<V> {
|
|||
String currentPath = remotePath;
|
||||
String parentPath = null;
|
||||
String parentKey = null;
|
||||
Node<V> currentNode = valuedNode, parentNode = null;
|
||||
Node<V> currentNode = valuedNode;
|
||||
Node<V> parentNode = null;
|
||||
boolean linked = false;
|
||||
while (!OCFile.ROOT_PATH.equals(currentPath) && !linked) {
|
||||
parentPath = new File(currentPath).getParent();
|
||||
|
|
|
@ -197,6 +197,10 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
|
|||
updatePausePlay();
|
||||
}
|
||||
|
||||
public void stopMediaPlayerMessages() {
|
||||
mHandler.removeMessages(SHOW_PROGRESS);
|
||||
}
|
||||
|
||||
|
||||
private void initControllerView(View v) {
|
||||
mPauseButton = (ImageButton) v.findViewById(R.id.playBtn);
|
||||
|
|
|
@ -508,7 +508,6 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
|
|||
// nobody is bound
|
||||
processStopRequest(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -98,11 +98,8 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation {
|
|||
// analyze response
|
||||
if (result.getHttpCode() == HttpStatus.SC_UNAUTHORIZED) {
|
||||
String authRequest = ((result.getAuthenticateHeader()).trim()).toLowerCase();
|
||||
if (authRequest.startsWith("basic")) {
|
||||
if (authRequest.startsWith("basic") || authRequest.startsWith("bearer")) {
|
||||
authMethod = AuthenticationMethod.BASIC_HTTP_AUTH;
|
||||
|
||||
} else if (authRequest.startsWith("bearer")) {
|
||||
authMethod = AuthenticationMethod.BEARER_TOKEN;
|
||||
}
|
||||
// else - fall back to UNKNOWN
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/**
|
||||
/*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Tobias Kaminsky
|
||||
* Copyright (C) 2017 Tobias Kaminsky
|
||||
* Copyright (C) 2017 Nextcloud GmbH.
|
||||
* <p>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* <p>
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
* <p>
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
@ -173,7 +173,9 @@ public class ContactsBackupJob extends Job {
|
|||
cal.add(Calendar.DAY_OF_YEAR, -daysToExpire);
|
||||
Long timestampToExpire = cal.getTimeInMillis();
|
||||
|
||||
if (backupFolder != null) {
|
||||
Log_OC.d(TAG, "expire: " + daysToExpire + " " + backupFolder.getFileName());
|
||||
}
|
||||
|
||||
Vector<OCFile> backups = storageManager.getFolderContent(backupFolder, false);
|
||||
|
||||
|
|
|
@ -136,7 +136,8 @@ public class CustomPopup {
|
|||
LayoutParams.WRAP_CONTENT));
|
||||
root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
|
||||
int rootW = root.getWidth(), rootH = root.getHeight();
|
||||
int rootW = root.getWidth();
|
||||
int rootH = root.getHeight();
|
||||
int screenW = mWManager.getDefaultDisplay().getWidth();
|
||||
|
||||
int xpos = ((screenW - rootW) / 2) + x;
|
||||
|
|
|
@ -509,6 +509,7 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
|
|||
case Menu.NONE:
|
||||
// account clicked
|
||||
accountClicked(menuItem.getTitle().toString());
|
||||
break;
|
||||
default:
|
||||
Log_OC.i(TAG, "Unknown drawer menu item clicked: " + menuItem.getTitle());
|
||||
}
|
||||
|
|
|
@ -316,7 +316,7 @@ public class FileDisplayActivity extends HookActivity
|
|||
dialog.dismiss();
|
||||
}
|
||||
})
|
||||
.setIcon(R.drawable.ic_cloud_upload)
|
||||
.setIcon(R.drawable.nav_folder_sync)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
@ -431,7 +431,12 @@ public class FileDisplayActivity extends HookActivity
|
|||
|
||||
/// Second fragment
|
||||
OCFile file = getFile();
|
||||
Fragment secondFragment = chooseInitialSecondFragment(file);
|
||||
|
||||
Fragment secondFragment = getSecondFragment();
|
||||
if (secondFragment == null) {
|
||||
secondFragment = chooseInitialSecondFragment(file);
|
||||
}
|
||||
|
||||
if (secondFragment != null) {
|
||||
setSecondFragment(secondFragment);
|
||||
updateFragmentsVisibility(true);
|
||||
|
@ -470,13 +475,9 @@ public class FileDisplayActivity extends HookActivity
|
|||
Fragment secondFragment = null;
|
||||
if (file != null && !file.isFolder()) {
|
||||
if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)) {
|
||||
int startPlaybackPosition =
|
||||
getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
|
||||
boolean autoplay =
|
||||
getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
|
||||
secondFragment = new PreviewMediaFragment(file, getAccount(),
|
||||
startPlaybackPosition, autoplay);
|
||||
|
||||
int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
|
||||
boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
|
||||
secondFragment = new PreviewMediaFragment(file, getAccount(), startPlaybackPosition, autoplay);
|
||||
} else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) {
|
||||
secondFragment = null;
|
||||
} else {
|
||||
|
@ -550,8 +551,7 @@ public class FileDisplayActivity extends HookActivity
|
|||
}
|
||||
|
||||
public FileFragment getSecondFragment() {
|
||||
Fragment second = getSupportFragmentManager().findFragmentByTag(
|
||||
FileDisplayActivity.TAG_SECOND_FRAGMENT);
|
||||
Fragment second = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT);
|
||||
if (second != null) {
|
||||
return (FileFragment) second;
|
||||
}
|
||||
|
@ -757,7 +757,7 @@ public class FileDisplayActivity extends HookActivity
|
|||
R.drawable.ic_view_list));
|
||||
getListOfFilesFragment().setGridAsPreferred();
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
retval = super.onOptionsItemSelected(item);
|
||||
|
|
|
@ -49,6 +49,8 @@ public class CreateFolderDialogFragment
|
|||
|
||||
public static final String CREATE_FOLDER_FRAGMENT = "CREATE_FOLDER_FRAGMENT";
|
||||
|
||||
private OCFile mParentFolder;
|
||||
|
||||
/**
|
||||
* Public factory method to create new CreateFolderDialogFragment instances.
|
||||
*
|
||||
|
@ -64,9 +66,6 @@ public class CreateFolderDialogFragment
|
|||
|
||||
}
|
||||
|
||||
private OCFile mParentFolder;
|
||||
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
mParentFolder = getArguments().getParcelable(ARG_PARENT_FOLDER);
|
||||
|
|
|
@ -54,6 +54,8 @@ public class RenameFileDialogFragment
|
|||
|
||||
private static final String ARG_TARGET_FILE = "TARGET_FILE";
|
||||
|
||||
private OCFile mTargetFile;
|
||||
|
||||
/**
|
||||
* Public factory method to create new RenameFileDialogFragment instances.
|
||||
*
|
||||
|
@ -69,8 +71,6 @@ public class RenameFileDialogFragment
|
|||
|
||||
}
|
||||
|
||||
private OCFile mTargetFile;
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
mTargetFile = getArguments().getParcelable(ARG_TARGET_FILE);
|
||||
|
|
|
@ -287,8 +287,8 @@ public class ExtendedListFragment extends Fragment
|
|||
}
|
||||
|
||||
public boolean onQueryTextChange(final String query) {
|
||||
if (getFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT)
|
||||
instanceof ExtendedListFragment){
|
||||
if (getFragmentManager() != null && getFragmentManager().
|
||||
findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT) instanceof ExtendedListFragment) {
|
||||
performSearch(query, false);
|
||||
return true;
|
||||
} else {
|
||||
|
|
|
@ -23,9 +23,11 @@ package com.owncloud.android.ui.fragment.contactsbackup;
|
|||
|
||||
import android.Manifest;
|
||||
import android.accounts.Account;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
|
@ -53,6 +55,7 @@ import android.widget.LinearLayout;
|
|||
import com.evernote.android.job.JobRequest;
|
||||
import com.evernote.android.job.util.support.PersistableBundleCompat;
|
||||
import com.owncloud.android.R;
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.files.services.FileDownloader;
|
||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
|
@ -104,6 +107,7 @@ public class ContactListFragment extends FileFragment {
|
|||
public Button restoreContacts;
|
||||
|
||||
private ContactListAdapter contactListAdapter;
|
||||
private Account account;
|
||||
|
||||
public static ContactListFragment newInstance(OCFile file, Account account) {
|
||||
ContactListFragment frag = new ContactListFragment();
|
||||
|
@ -142,13 +146,19 @@ public class ContactListFragment extends FileFragment {
|
|||
try {
|
||||
OCFile ocFile = getArguments().getParcelable(FILE_NAME);
|
||||
setFile(ocFile);
|
||||
Account account = getArguments().getParcelable(ACCOUNT);
|
||||
account = getArguments().getParcelable(ACCOUNT);
|
||||
|
||||
if (!ocFile.isDown()) {
|
||||
Intent i = new Intent(getContext(), FileDownloader.class);
|
||||
i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);
|
||||
i.putExtra(FileDownloader.EXTRA_FILE, ocFile);
|
||||
getContext().startService(i);
|
||||
|
||||
// Listen for download messages
|
||||
IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.getDownloadAddedMessage());
|
||||
downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
|
||||
DownloadFinishReceiver mDownloadFinishReceiver = new DownloadFinishReceiver();
|
||||
getContext().registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
|
||||
} else {
|
||||
File file = new File(ocFile.getStoragePath());
|
||||
vCards.addAll(Ezvcard.parse(file).all());
|
||||
|
@ -446,6 +456,27 @@ public class ContactListFragment extends FileFragment {
|
|||
return displayName;
|
||||
}
|
||||
}
|
||||
|
||||
private class DownloadFinishReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equalsIgnoreCase(FileDownloader.getDownloadFinishMessage())){
|
||||
String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
|
||||
|
||||
FileDataStorageManager storageManager = new FileDataStorageManager(account,
|
||||
getContext().getContentResolver());
|
||||
OCFile ocFile = storageManager.getFileByPath(downloadedRemotePath);
|
||||
File file = new File(ocFile.getStoragePath());
|
||||
|
||||
try {
|
||||
contactListAdapter.replaceVCards(Ezvcard.parse(file).all());
|
||||
} catch (IOException e) {
|
||||
Log_OC.e(TAG, "IO Exception: " + file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.ContactItemViewHolder> {
|
||||
|
@ -475,6 +506,11 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
|
|||
}
|
||||
}
|
||||
|
||||
public void replaceVCards(List<VCard> vCards) {
|
||||
this.vCards = vCards;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public int[] getCheckedIntArray() {
|
||||
int[] intArray;
|
||||
if (checkedVCards != null && checkedVCards.size() > 0) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/**
|
||||
/*
|
||||
* Nextcloud Android client application
|
||||
*
|
||||
* @author Mario Danic
|
||||
|
@ -24,6 +24,7 @@ import android.Manifest;
|
|||
import android.accounts.Account;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
@ -44,7 +45,10 @@ import com.evernote.android.job.JobRequest;
|
|||
import com.evernote.android.job.util.support.PersistableBundleCompat;
|
||||
import com.owncloud.android.R;
|
||||
import com.owncloud.android.datamodel.ArbitraryDataProvider;
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.operations.RefreshFolderOperation;
|
||||
import com.owncloud.android.services.ContactsBackupJob;
|
||||
import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
|
||||
import com.owncloud.android.ui.fragment.FileFragment;
|
||||
|
@ -167,13 +171,35 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
|
|||
}
|
||||
}
|
||||
|
||||
final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
|
||||
ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
|
||||
|
||||
String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR;
|
||||
OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString);
|
||||
String backupFolderPath = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR;
|
||||
refreshBackupFolder(backupFolderPath, contactsPreferenceActivity);
|
||||
}
|
||||
|
||||
Vector<OCFile> backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder,
|
||||
false);
|
||||
private void refreshBackupFolder(final String backupFolderPath,
|
||||
final ContactsPreferenceActivity contactsPreferenceActivity) {
|
||||
AsyncTask<String, Integer, Boolean> task = new AsyncTask<String, Integer, Boolean>() {
|
||||
@Override
|
||||
protected Boolean doInBackground(String... path) {
|
||||
FileDataStorageManager storageManager = new FileDataStorageManager(account,
|
||||
getActivity().getContentResolver());
|
||||
|
||||
OCFile folder = storageManager.getFileByPath(path[0]);
|
||||
RefreshFolderOperation operation = new RefreshFolderOperation(folder, System.currentTimeMillis(),
|
||||
false, false, false, storageManager, account, getContext());
|
||||
|
||||
RemoteOperationResult result = operation.execute(account, getContext());
|
||||
return result.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result) {
|
||||
if (result) {
|
||||
OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderPath);
|
||||
|
||||
Vector<OCFile> backupFiles = contactsPreferenceActivity.getStorageManager()
|
||||
.getFolderContent(backupFolder, false);
|
||||
|
||||
if (backupFiles == null || backupFiles.size() == 0) {
|
||||
contactsRestoreHeader.setVisibility(View.GONE);
|
||||
|
@ -183,6 +209,11 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
|
|||
contactsDatePickerBtn.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
task.execute(backupFolderPath);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
|
|
@ -106,6 +106,7 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
private MediaServiceConnection mMediaServiceConnection = null;
|
||||
private VideoHelper mVideoHelper;
|
||||
private boolean mAutoplay;
|
||||
private static boolean mOnResume = false;
|
||||
public boolean mPrepared;
|
||||
|
||||
private static final String TAG = PreviewMediaFragment.class.getSimpleName();
|
||||
|
@ -220,6 +221,7 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
*/
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
mOnResume = true;
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
Log_OC.v(TAG, "onActivityCreated");
|
||||
|
||||
|
@ -234,14 +236,11 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
if (!file.isDown()) {
|
||||
throw new IllegalStateException("There is no local file to preview");
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
file = (OCFile) savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
|
||||
} else {
|
||||
file = savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_FILE);
|
||||
setFile(file);
|
||||
mAccount = savedInstanceState.getParcelable(PreviewMediaFragment.EXTRA_ACCOUNT);
|
||||
mSavedPlaybackPosition =
|
||||
savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION);
|
||||
mSavedPlaybackPosition = savedInstanceState.getInt(PreviewMediaFragment.EXTRA_PLAY_POSITION);
|
||||
mAutoplay = savedInstanceState.getBoolean(PreviewMediaFragment.EXTRA_PLAYING);
|
||||
|
||||
}
|
||||
|
@ -251,15 +250,12 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
mVideoPreview.setVisibility(View.VISIBLE);
|
||||
mImagePreview.setVisibility(View.GONE);
|
||||
prepareVideo();
|
||||
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
mVideoPreview.setVisibility(View.GONE);
|
||||
mImagePreview.setVisibility(View.VISIBLE);
|
||||
extractAndSetCoverArt(file);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -307,11 +303,8 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
}
|
||||
else {
|
||||
if (mMediaServiceBinder != null) {
|
||||
outState.putInt(
|
||||
PreviewMediaFragment.EXTRA_PLAY_POSITION,
|
||||
mMediaServiceBinder.getCurrentPosition());
|
||||
outState.putBoolean(
|
||||
PreviewMediaFragment.EXTRA_PLAYING, mMediaServiceBinder.isPlaying());
|
||||
outState.putInt(PreviewMediaFragment.EXTRA_PLAY_POSITION, mMediaServiceBinder.getCurrentPosition());
|
||||
outState.putBoolean(PreviewMediaFragment.EXTRA_PLAYING, mMediaServiceBinder.isPlaying());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -565,6 +558,8 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mOnResume = !mOnResume;
|
||||
|
||||
if (getActivity() != null) {
|
||||
AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
|
||||
}
|
||||
|
@ -585,6 +580,7 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
if (mMediaServiceConnection != null) {
|
||||
Log_OC.d(TAG, "Unbinding from MediaService ...");
|
||||
if (mMediaServiceBinder != null && mMediaController != null) {
|
||||
mMediaController.stopMediaPlayerMessages();
|
||||
mMediaServiceBinder.unregisterMediaController(mMediaController);
|
||||
}
|
||||
getActivity().unbindService(mMediaServiceConnection);
|
||||
|
@ -638,7 +634,7 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
|
||||
private void playAudio() {
|
||||
OCFile file = getFile();
|
||||
if (!mMediaServiceBinder.isPlaying(file)) {
|
||||
if (!mMediaServiceBinder.isPlaying(file) && !mOnResume) {
|
||||
Log_OC.d(TAG, "starting playback of " + file.getStoragePath());
|
||||
mMediaServiceBinder.start(mAccount, file, mAutoplay, mSavedPlaybackPosition);
|
||||
|
||||
|
@ -649,6 +645,8 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
mMediaController.updatePausePlay();
|
||||
}
|
||||
}
|
||||
|
||||
mOnResume = false;
|
||||
}
|
||||
|
||||
|
||||
|
|
BIN
src/main/res/drawable-hdpi/nav_activity.png
Normal file
After Width: | Height: | Size: 676 B |
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 367 B |
BIN
src/main/res/drawable-hdpi/nav_contacts.png
Normal file
After Width: | Height: | Size: 539 B |
Before Width: | Height: | Size: 840 B After Width: | Height: | Size: 840 B |
Before Width: | Height: | Size: 772 B After Width: | Height: | Size: 772 B |
Before Width: | Height: | Size: 714 B After Width: | Height: | Size: 714 B |
BIN
src/main/res/drawable-hdpi/nav_notifications.png
Normal file
After Width: | Height: | Size: 623 B |
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 754 B After Width: | Height: | Size: 754 B |
BIN
src/main/res/drawable-hdpi/nav_photos.png
Normal file
After Width: | Height: | Size: 698 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
src/main/res/drawable-hdpi/nav_settings.png
Normal file
After Width: | Height: | Size: 1,004 B |
Before Width: | Height: | Size: 995 B After Width: | Height: | Size: 995 B |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 284 B |
BIN
src/main/res/drawable-hdpi/nav_videos.png
Normal file
After Width: | Height: | Size: 450 B |
BIN
src/main/res/drawable-mdpi/nav_activity.png
Normal file
After Width: | Height: | Size: 505 B |
BIN
src/main/res/drawable-mdpi/nav_all_files.png
Normal file
After Width: | Height: | Size: 278 B |
BIN
src/main/res/drawable-mdpi/nav_contacts.png
Normal file
After Width: | Height: | Size: 394 B |
Before Width: | Height: | Size: 576 B After Width: | Height: | Size: 576 B |
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 427 B After Width: | Height: | Size: 427 B |
BIN
src/main/res/drawable-mdpi/nav_notifications.png
Normal file
After Width: | Height: | Size: 450 B |
Before Width: | Height: | Size: 199 B After Width: | Height: | Size: 199 B |
Before Width: | Height: | Size: 535 B After Width: | Height: | Size: 535 B |
BIN
src/main/res/drawable-mdpi/nav_photos.png
Normal file
After Width: | Height: | Size: 516 B |
Before Width: | Height: | Size: 984 B After Width: | Height: | Size: 984 B |
BIN
src/main/res/drawable-mdpi/nav_settings.png
Normal file
After Width: | Height: | Size: 646 B |
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 733 B |
Before Width: | Height: | Size: 183 B After Width: | Height: | Size: 183 B |
BIN
src/main/res/drawable-mdpi/nav_videos.png
Normal file
After Width: | Height: | Size: 360 B |
BIN
src/main/res/drawable-xhdpi/nav_activity.png
Normal file
After Width: | Height: | Size: 850 B |
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B |
BIN
src/main/res/drawable-xhdpi/nav_contacts.png
Normal file
After Width: | Height: | Size: 656 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 944 B After Width: | Height: | Size: 944 B |
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 669 B |
BIN
src/main/res/drawable-xhdpi/nav_notifications.png
Normal file
After Width: | Height: | Size: 719 B |
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 910 B After Width: | Height: | Size: 910 B |
BIN
src/main/res/drawable-xhdpi/nav_photos.png
Normal file
After Width: | Height: | Size: 696 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
src/main/res/drawable-xhdpi/nav_settings.png
Normal file
After Width: | Height: | Size: 604 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 230 B After Width: | Height: | Size: 230 B |
BIN
src/main/res/drawable-xhdpi/nav_videos.png
Normal file
After Width: | Height: | Size: 423 B |
BIN
src/main/res/drawable-xxhdpi/nav_activity.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 442 B |
BIN
src/main/res/drawable-xxhdpi/nav_contacts.png
Normal file
After Width: | Height: | Size: 972 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 936 B After Width: | Height: | Size: 936 B |
BIN
src/main/res/drawable-xxhdpi/nav_notifications.png
Normal file
After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 453 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
src/main/res/drawable-xxhdpi/nav_photos.png
Normal file
After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
src/main/res/drawable-xxhdpi/nav_settings.png
Normal file
After Width: | Height: | Size: 994 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 275 B After Width: | Height: | Size: 275 B |
BIN
src/main/res/drawable-xxhdpi/nav_videos.png
Normal file
After Width: | Height: | Size: 616 B |
BIN
src/main/res/drawable-xxxhdpi/nav_activity.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/res/drawable-xxxhdpi/nav_notifications.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 633 B After Width: | Height: | Size: 633 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
src/main/res/drawable-xxxhdpi/nav_photos.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
BIN
src/main/res/drawable-xxxhdpi/nav_settings.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 360 B After Width: | Height: | Size: 360 B |