Giter Site home page Giter Site logo

nextcloud / android Goto Github PK

View Code? Open in Web Editor NEW
3.9K 182.0 1.7K 465.4 MB

📱 Nextcloud Android app

Home Page: https://play.google.com/store/apps/details?id=com.nextcloud.client

License: GNU General Public License v2.0

Java 60.93% Makefile 0.11% Python 0.33% Batchfile 0.10% Shell 0.76% Ruby 0.42% Kotlin 37.31% Dockerfile 0.01% AIDL 0.02%
nextcloud android mobile-app mobile java opensource open-source hacktoberfest kotlin

android's People

Contributors

aleister09 avatar alperozturk96 avatar alvarobrey avatar andyscherzinger avatar ardevd avatar david-development avatar davigonz avatar davivel avatar deepdiver1975 avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar divayprakash avatar ezaquarii avatar jabarros avatar jmue avatar jonasmayerdev avatar jorisbodin avatar malkomich avatar mario avatar nextcloud-bot avatar parneet-guraya avatar przybylski avatar renovate[bot] avatar sirambd avatar stefan-niedermann avatar stoyicker avatar surinder-tsys avatar tobiaskaminsky avatar zetatom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android's Issues

Instant upload for the not-currently active account

copied from the forum https://help.nextcloud.com/t/android-app-one-app-instance-for-each-account/605
As far as I understand the request the issue is that instant upload only works for the currently active account:

Hello,
sorry if this is the wrong place to post about the Android app. I've tried to use the mail address
[email protected] (proposed by the app itself) but got the answer "no such user".
So this is my feature wish:

I've two owncloud accounts as a normal user (two
more as admin) and would like to have different instances of the app
each with it's own account assigned. Is that possible? At this time the
automatic photo/video upload works only on the active account. I would
like to assigned it to only one account and have this always active, so every
uploaded photo will be stored under the same account. The other accounts should be
active also at the same time.

Thank you
Jürgen

Looping in @jancborchardt for UX aspects and @przybylski and @tobiasKaminsky for general discussion/approval of the feature request

Development Guide discussion

Hi everybody,

I just created a wiki page for a short development guide which should help new contributors to understand how develop and release new versions of the app.

https://github.com/nextcloud/android/wiki/Development-Guide

It is just a draft. I thought it is easier if we have some stuff written down to kick off the discussion. For now I focused on versioning and the code review process.

Feel free to challenge anything I have written down ;)

cc @jancborchardt @LukasReschke @tobiasKaminsky @przybylski

Fixed layout on Chromebook

Actual behaviour

  • The app utilises a "portrait" view on the app installed on an Asus Chromebook Flip, leaving the rest of the window blank.

Expected behaviour

  • The app should make use of all available space

Environment data

Android version:
6.0
Device model:
Asus Chromebook flip (Android framework runs within a container)
Stock or customized system:
... both?
Nextcloud app version: 1.0

Nextcloud server version: 9.0

screenshot 2016-06-19 at 21 55 07

App doesn't remember cloud connection

Actual behaviour

-If mobile is restarted (I use planned switch-off/on during night) app asks for url, username and password

Expected behaviour

-App should at least pre-fill last cloud URL and username or if it is not security issue save credentials and login automatically.

Steps to reproduce

  1. login into app
  2. restart phone
  3. start app

Environment data

Android version: 4.2.1

Device model: evolveo strongphone

Nextcloud app version: 1.0.1

Crash on sharing to app

Version: 20160617 from fdroid
When sending a file from the file manager to nextcloud I get the following error:

************ CAUSE OF ERROR ************

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nextcloud.android.beta/com.owncloud.android.ui.activity.ReceiveExternalFilesActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5461)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:134)
Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
    at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:198)
    at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99)
    at com.owncloud.android.ui.activity.ToolbarActivity.setupToolbar(ToolbarActivity.java:52)
    at com.owncloud.android.ui.activity.ReceiveExternalFilesActivity.populateDirectoryList(ReceiveExternalFilesActivity.java:384)
    at com.owncloud.android.ui.activity.ReceiveExternalFilesActivity.onAccountSet(ReceiveExternalFilesActivity.java:201)
    at com.owncloud.android.ui.activity.BaseActivity.onStart(BaseActivity.java:189)
    at com.owncloud.android.ui.activity.FileActivity.onStart(FileActivity.java:177)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
    at android.app.Activity.performStart(Activity.java:6268)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
    ... 10 more

************ DEVICE INFORMATION ***********
Brand: motorola
Device: condor_umts
Model: Moto E
Id: MOB30J
Product: cm_condor

************ FIRMWARE ************
SDK: 23
Release: 6.0.1
Incremental: a804b51831

Move vs Copy are both disruptive - can it work like other apps?

Actual behaviour

When uploading, the options provided are to either move the file from it's location to the NC directory or make a copy of it.

For the former and especially in the case of photos traditionally kept in DCIM this leads to fragmentation of files in other places on the filesystem (and therefore harder to manage)

For the latter, copying doubles storage usage per file, with many photos taken the disk usage can get into the gigabytes before the day is over.

Expected behaviour

Like other apps, uploading shouldn't disrupt the location of files nor duplicate everything on storage.
Perhaps investigating and replicating the functionality of dropbox, onedrive or Google photos would be a good place to start.

Steps to reproduce

  1. Tap to upload
  2. Choose whether to move or copy
  3. Instantly regret either decision

Context: https://help.nextcloud.com/t/android-copy-vs-move-on-upload-there-has-to-be-a-better-way/631

App version 1.0.1 incompatible with 9.0.50 (nginx)

Actual behaviour

Android app v. 1.0.1
Server v 9.0.50
After the Android app got autoupdated on my phone the server view just tries to refresh but won't update.
Server works fine with OC desktop app on Mac OS X Maverics and NC web-app works fine.
Tried removing the profile in the app and add it back. When NC app tries to conenct to the server the app responds with "Unknown error occurred!" Tested both on WiFi on the same LAN as the server, and via 4G.

Expected behaviour

Android app 1.0.1 should manage to reload content from server version 9.0.50.

Steps to reproduce

  1. Remove server profile in app
  2. Add it back
  3. "Unknown error occurred!" should appear

Environment data

Android version:
6.0.1 Marshmallow
Device model:
Nexus 5X
Stock or customized system:
Stock
Nextcloud app version:
1.0.1
Nextcloud server version:
9.0.50

Logs

Web server error log

Nothing in the access logs or error logs in nginx - nothing in the nextcloud.log

Nextcloud log (data/nextcloud.log)

Could not find the logs under /data or /sdcard/nextcloud or /sdcard/Android/com.nextcloud.client

Store files on SD card

Currently all files synchronized by the app become stored on the internaml device memory. However it should be able to store files to the SD card instead.

A typically use case would be synchronizing a music library, which could exceed the internal storage by far and is ideally stored on a modern SD card.

PR: #92

Remove mail_feedback

There is the mail_feedback thingy implemented which goes to [email protected], this mail address is not routed at the moment.

I'd advise that we maybe link them to our bug tracker or a new category in our forum instead. Any thoughts?

cc @nextcloud/android

Two character password in Google Play screenshot

Actual behaviour

  • In Google Play, the first screenshot of Nextcloud client shows a user 'hans' with a password of only two characters, as represented by '••'.

Expected behaviour

  • Nextcloud should never encourage users to set short passwords for their accounts, even implicitly. I suggest the example password in the screenshot to be at least 10 characters, like '••••••••••' or longer.

Steps to reproduce

  1. Go to Google Play page for Nextcloud client, here: https://play.google.com/store/apps/details?id=com.nextcloud.client
  2. Click on the first screenshot of the app, this one: https://goo.gl/LW70E4
  3. Look at the password field in the screenshot, it is '••'.

Environment data

Nextcloud app version:
1.0.0

German playstore description

Actual behaviour

The german description in the playstore at the moment is:
"Die Nextcloud Android App können Sie alle Ihre Dateien auf Ihrem Nextcloud zugreifen."

Expected behaviour

sholud be:
Die Nextcloud Android App. Mit ihr können Sie auf alle Ihre Dateien in Ihrer Nextcloud zugreifen.

Steps to reproduce

Search for the nextcloud app in german playstore

Environment data

Android version: 6.01
Playstore Version: 6.5.08.D-all 2792142

Device model:
SGS5
Stock or customized system:
customized
Nextcloud app version:
1.0.0
Nextcloud server version:
oc 9.0.2

Logs

Web server error log

Insert your webserver log here

Nextcloud log (data/nextcloud.log)

Insert your Nextcloud log here

IndexOutOfBounds (reason unknown) via Play Store Console

App Version 1.0.0

Android version
Android 6.01
Device
Xperia Z5 Compact (E5823) 1

One of my folders kill the nextcloud app. This also happend on owncloud.

**java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1**
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
    at java.util.ArrayList.get(ArrayList.java:308)
    at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
    at android.widget.AbsListView.onInitializeAccessibilityNodeInfoForItem(AbsListView.java:2478)
    at android.widget.ListView.onInitializeAccessibilityNodeInfoForItem(ListView.java:3946)
    at android.widget.AbsListView$ListItemAccessibilityDelegate.onInitializeAccessibilityNodeInfo(AbsListView.java:2409)
    at android.view.View.onInitializeAccessibilityNodeInfo(View.java:6151)
    at android.view.View.createAccessibilityNodeInfoInternal(View.java:6112)
    at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:22359)
    at android.view.View.createAccessibilityNodeInfo(View.java:6095)
    at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:145)
    at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
    at android.view.View.onInitializeAccessibilityEventInternal(View.java:6049)
    at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:22271)
    at android.view.View.onInitializeAccessibilityEvent(View.java:6035)
    at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5902)
    at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:22210)
    at android.view.View.sendAccessibilityEventUnchecked(View.java:5885)
    at android.view.View.sendAccessibilityEventInternal(View.java:5864)
    at android.view.View$AccessibilityDelegate.sendAccessibilityEvent(View.java:22168)
    at android.view.View.sendAccessibilityEvent(View.java:5829)
    at android.widget.AdapterView.performItemClick(AdapterView.java:317)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042)
    at android.widget.AbsListView$3.run(AbsListView.java:3879)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:5514)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

small setup screen improvement

I just installed the Nextcloud app, great work from everybody!

When I start the app for the first time it ask for the usual stuff like URL, username and password. Below the input fields there is a "Do you know Nextcloud?" link (don't know the exact wording because I installed it on a German environment). This points to Nextcloud.com/news. Wouldn't it be better to link to Nextcloud.com/about? Might be more useful to learn more about Nextcloud than the blogs.

F-Droid

Actual behaviour

-Tell us what happens
google apps only

Expected behaviour

-Tell us what should happen
should be also in F-Droid Markedplace

Steps to reproduce

  • no steps

Environment data

Android version:
all ;)
Device model:
all ;)

(but the "muster/sample " it's really good on the issue list 👍 :)

best regards
Blacky

Removing file crashes app.

nextcloud fdroid beta, version 20160613
Trying to remove a file which is not synced locally produces the following result:

(Also I wanted to send the bug report generated by the app, but it doesn't provide an email address to send it to.)

************ CAUSE OF ERROR ************

android.content.res.Resources$NotFoundException: String resource ID #0x7f08017f
    at android.content.res.Resources.getText(Resources.java:336)
    at android.content.res.XResources.getText(XResources.java:1065)
    at android.content.res.Resources.getString(Resources.java:424)
    at android.support.v4.app.Fragment.getString(Fragment.java:661)
    at com.owncloud.android.ui.dialog.ConfirmationDialogFragment.onCreateDialog(ConfirmationDialogFragment.java:100)
    at com.owncloud.android.ui.dialog.RemoveFileDialogFragment.onCreateDialog(RemoveFileDialogFragment.java:77)
    at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:308)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5461)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:134)

************ DEVICE INFORMATION ***********
Brand: motorola
Device: condor_umts
Model: Moto E
Product: cm_condor

************ FIRMWARE ************
SDK: 23
Release: 6.0.1

Allow 2-way-sync

When 'syncronizing' a folder in the nextCloud app, actually changes from the remote server become propagated on the mobile device. However changes on the mobile device aren't uploaded back to the remote server.

How the nextCloud app should behave:

  • files added to a synchronized folder should be scanned/recognized
  • changes to files (create, update, delete) of a synchronized folder should be propagated back to the server
  • conflicting changes should open a dialog (overwrite on device/server, rename)

Feature Request: Add Wifi Only Options

I like the ability to set a particular folder in which I would like Nextcloud to upload photos to, rather than trying to upload to all new folders it detects. But I would also like an option where it will only automatically upload the photos when the phone is in wireless network and doesn't use the data phone network.

Additionally to this I would like to request a feature in which you can have the photos automatically uploaded but not delete them from the server if I delete the photos from my phone.

NullPointerException in UploadFinishReceiver (reason unknown) via Play Store Console

App Version 1.0.0

Android version
Android 5.01

Device
ZenFone 2 (ZE551ML) (Z00A)

java.lang.RuntimeException: Error receiving broadcast Intent { act=com.owncloud.android.files.services.FileUploaderUPLOAD_FINISH flg=0x10 (has extras) } in com.owncloud.android.ui.activity.FileDisplayActivity$UploadFinishReceiver@12b4375c
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:874)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5264)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.owncloud.android.datamodel.OCFile.getRemotePath()' on a null object reference
    at com.owncloud.android.ui.activity.FileDisplayActivity$UploadFinishReceiver.onReceive(FileDisplayActivity.java:1075)
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:864)
    ... 8 more

Bug: Freezes up on Uploading

Server: OwnCloud 9.0.2
App: NextCloud
Server Host: HostGator

At random the files would not be uploading, or some do upload while the status shows 0% uploading.

This occurs on a Google Nexus 6P with all updates installed.

Filter

  • Filter current files and folders (no subfolders) by typing.
  • Search also in the middle of the name
  • "search" icon next to three-dot menu as it is a very important task so it should be always visible

PR: #152

Resized images: zoom behaviour

Idea to download the full sized image:

  • Zooming a resized image with at least 2x (which can get blurry)
    • show snackbar "automatically download full image on zoom: yes"
    • Clicking "yes" after second time will offer option "always" to prevent showing the question.
  • time out the snackbar the second time by just waiting will show "never download full image" -> "yes".
  • after both show second snackbar without action "default behaviour can be changed in settings"
  • In setting: new entry "click on image downloads ..."
    • full image to storage
    • resized image to cache

Question: Nextcloud or ownclou beta?

I can recognize some names, so would like to ask.

Is this nextcloud app still compatible with owncloud? Will it remain so?

What is the relationship between the apps? (meaning if you're going to continue to cooperate on both or are the apps going to diverge eventually..)

I was really fond of your work and I got used to using many features from the beta app (with the stable one serving as a back up) and I was happy when I could contribute in a meaningful way..

That is why I would like to know what the current situation is..

Server based theming capabilities

Will the nextcloud app eventually be able to visually look like the mobile web browser version? This way it can be themed just like our own installs are. Or Will its always have it's own design and look?

Same code style for AndroidStudio

As proposed in ownCloud we should identify how to use (and enforce) the same style guide.
And then, after merging most of the old PR, we should refactor every class :)

Fast scroll list view

Enable a handler that allows fast scrolling to easily scroll to the bottom, e.g. when navigate to the oldest file.

Bug:

  • fast scroll vanishes after switching to subfolder

Grid view > back while folder is loading crashes app

Actual behaviour

If "Show grid view" and then the back arrow in the top left corner are clicked, while a folders contents are still loading, the nextcloud app crashes.

Expected behaviour

The app should just go back to the previous folder without crashing.

Steps to reproduce

  1. Open a folder with many files (I used my instant upload folder, and tested with others)
  2. While it's loading, click the three dot menu in the top right
  3. Click "Grid view" (going the opposite direction and choosing "List view" won't crash the app)
  4. Click the left/back arrow in the top, left corner of the app

Works every time.

Environment data

Android version:
5.1.1

Device model:
Samsung galaxy prime

Stock or customized system:
Stock for Samsung

Nextcloud app version:
1.1.0

Nextcloud server version:
ownCloud 9.0.2

Refactor: Create a ThumbImageView

Thumbnails of images are currently shown in 3 different places. The uploadlist, the local file browser and the normal folder view of an nextcloud folder.

The code to generate a thumbnail / kickof the thumbnail generation is present in all of there places.

To unify this, i would like to propose a ThumbImageView class which subclases ImageView. This Class should handle all concern regarding File or OCFile -> Thumbnail, by calling ThumbManager and so on.

The ImageView objects are reused in the list views, all code accesing these Views has to check whether the reference they use, still refer to a View with the initial File, this could be solved by having a Reference to OCFile or File on the ThumbImageView aswell as the unique thumbnail CacheKey!

So we have some new methods like
void setFile(File file);
void setOCFile(OCFile file);
int getCacheKey(); (maybe override .hashCode(), but this could be problematic with OCFiles not existing)

Another possibility would be to introduce two additional classes
FileThumbImageView and OCFileThumbImageView.. As far as i understand it, the Upload Queue and local filebrowser lists use File and the nextcloud folder browser uses OCFile..

This should only a refactor not any addition of new functionality.

Cache resized images on local deletion of an image

When deleting an image locally on the phone the app should generate an resized image of it prior to deletion.
With that (if the cache is big enough) the images can still be shown by thumbnail/resized image without server interaction.

Add contacts and calendar support to mobile

The problem: I need three diffrent apps to sync all my data

owncloud, CalDav Sync Adapter and DAVDroid.

DAVdroid has the problem is you need two accounts, one for calendar, the other for contacts. It also chokes on my calendar.(a little large). It also needs a long not-obvious string that is mentioned nowhere in documentation except third party sites.

So, I would like calender and contact support in the official app, so one account will sync everything. Also makes it somewhat easier for novices.(non-technical friends/customers/employees), who merely use someone elses owncloud install.

Slight design optimizations for the login screen

As per discussion with @nextcloud/designers / @jancborchardt

  • remove the card view (white hovering thingy)
  • color of input fields to be white
  • "Do you know Nextcloud?" to white, but semi-transparent at 50% which means #7fc0e3 (since we don't have transparency, or at least I couldn't find it for text, just backgrounds)

Development will be done on: https://github.com/nextcloud/android/tree/loginLayout
The Branch could also be used to do #16 while working on the login screen changes from this issue

Feature request: watched folders

I have several folders on my device that hold images; screenshots, whatsapp, DCIM, downloads, etc

With Google Photos I can select local directories outside of DCIM to watch and backup, can this functionality be added to the NC client also? We currently have autobackup for DCIM, but adding others to that list (and their respective locations on NC server) would be great.

Sending resized images

If the image is not downloaded a resized image version is sent.
Should this be clarified by using "send resized image" and use "send original size" when downloaded?

Feature Request: Prevent duplicate uploads

Wanted behaviour

When I attempt to upload a duplicate file, I'd like it to prompt me before it uploads. Maybe a message that states "x with that name and datestamp already exists. Upload another copy?"

In an ideal world it would be able to do this with several files in one go, rather than 1 by 1 so as to agree or disagree with duplicate uploads all at once, but anything would be acceptable at the moment.

Actual behaviour

Currently uploading duplicates just appends a number in brackets, meaning I then later have to manually remove duplicates.

Context:
https://help.nextcloud.com/t/is-there-anything-to-stop-duplicates-being-uploaded/1146

No instant update of folder list when changing active account (Nextcloud beta Android-App 20160621)

Actual behaviour

No "instant" update of the files list after choosing a different account from the dropdown.

One have to wait until the screen gets locked. After unlocking the screen the files list is getting updated (caused by an event ?). Manually updating the account (via '...' menu) works well. In no case there's any visual feedback (except the changing files list) which might be suboptimal.

Expected behaviour

Choosing a different account should lead to an instant update of the files list so one can see the directory structure of the recently choosen account

Steps to reproduce

  1. Have two different accounts ready to use with different files/directories
  2. have a look on the current files list
  3. choose the other account
  4. have a look on the current files list and notice it's NOT the files list of the current but the previous account
  5. wait until the lock screen appears
  6. unlock the screen and notice that now you see the proper list

Environment data

Android version: Android 6.0.1

Device model: Samsung SM-G900F (S5 klte)

Stock or customized system: customized CM 13.0

Nextcloud app version: Nextcloud beta Android-App 20160621

Nextcloud server version: 9.0.50

Logs

Web server error log

Insert your webserver log here

Nextcloud log (data/nextcloud.log)

Insert your Nextcloud log here

Allow arbitrary folders to be synchronized

Currently the nextCloud app will create a one to one folder representation of the remote server when synchronizing a directory. However it would be really helpful on a mobile device to map a device directory to a remote server directory.

A use case would be syncronizing a workspace directory of an app on the mobile device with a dedicated directory path on the remote server. For instance a directory with pictures often edited by a mobile app synchronized with a subpath of 'Photos' on the remote server. Or you want to synchronize a shared folder with music into your music library directory on your mobile device...

This would assume issue #19 to be working, such that changes on the mobile device are propagated to the remote server.


There is an open bounty on this issue. Add to the bounty at Bountysource
badge

Automated testing

To improve the quality of our app we should introduce automated testing.
@przybylski you said on IRC that you have experience with this?
What can you recommend?
ownCloud started with appium

Add f-droid releases

Just as the title says add f-droid to the app stores we release the app to.

@tobiasKaminsky I just assigned the issue to you since you know your way around f-droid's mechanisms on how to get apps into their app store.

Release 1.1.0

App crashes regularly (connecting to ownCloud 9.0.2 )

Actual behaviour

App crashes regularly

Expected behaviour

App doesn't crash regularly

Steps to reproduce

Unfortunately, I haven't found a consistent pattern for reproducing the problem yet. The last time it happened I was switching between detail to grid view.

Environment data

Android version:
5.1.1

Device model:
Galaxy Grand Prime

Stock or customized system:

Nextcloud app version:
20160621

Nextcloud server version:
Actually it's interfacing with ownCloud 9.0.2

Logs

************ CAUSE OF ERROR ************

java.lang.IllegalStateException: Cannot add header view to grid -- setAdapter has already been called.
at third_parties.in.srain.cube.GridViewWithHeaderAndFooter.addFooterView(GridViewWithHeaderAndFooter.java:183)
at com.owncloud.android.ui.fragment.ExtendedListFragment.setFooterEnabled(ExtendedListFragment.java:533)
at com.owncloud.android.ui.fragment.ExtendedListFragment.setFooterText(ExtendedListFragment.java:559)
at com.owncloud.android.ui.fragment.OCFileListFragment.updateLayout(OCFileListFragment.java:855)
at com.owncloud.android.ui.fragment.OCFileListFragment.listDirectory(OCFileListFragment.java:830)
at com.owncloud.android.ui.fragment.OCFileListFragment.onBrowseUp(OCFileListFragment.java:541)
at com.owncloud.android.ui.activity.FileDisplayActivity.onBackPressed(FileDisplayActivity.java:857)
at com.owncloud.android.ui.activity.FileDisplayActivity.onOptionsItemSelected(FileDisplayActivity.java:560)
at android.app.Activity.onMenuItemSelected(Activity.java:3137)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
at android.support.v7.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:194)
at android.view.View.performClick(View.java:5254)
at android.view.View$PerformClick.run(View.java:21173)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6838)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

************ DEVICE INFORMATION ***********
Brand: samsung
Device: gprimeltecan
Model: SM-G530W
Id: LMY47X
Product: gprimeltevl

************ FIRMWARE ************
SDK: 22
Release: 5.1.1
Incremental: G530WVLU1AOFB


Synchronizing big folder problem / Download fails due to Doze

Actual behaviour

While synchronizing 34GB of PDFs split in varying sizes
When android locks the screen, some time later a synchronization error occurs

Expected behaviour

synchronization of all files

Steps to reproduce

  1. use Nextcloud app to Synchronize folder
  2. wait till android locks itself
  3. sometime later the error will occur

Environment data

Android version: 6.0.1

Device model: Oneplus Two

Stock or customized system: Stock OxygenOS

Nextcloud app version: 1.0.1

Nextcloud server version: 9.0.5

Logs

Web server error log

 PHP Fatal error:  Uncaught Error: Class 'OCP\Lock\ILockingProvider' not found in /var/www/html/nextcloud/lib/private/files/view.php:1129\nStack trace:\n#0 [internal function]: OC\Files\View->OC\Files\{closure}()\n#1 /var/www/html/nextcloud/3rdparty/icewind/streams/src/CallbackWrapper.php(109): call_user_func(Object(Closure))\n#2 [internal function]: Icewind\Streams\CallbackWrapper->stream_close()\n#3 {main}\n  thrown in /var/www/html/nextcloud/lib/private/files/view.php on line 1129

Nextcloud log (data/nextcloud.log)

{"reqId":"V0jILJKYwueE9Su-ZbfgbgAAAAQ","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:20:28+00:00"}
{"reqId":"V0jIUO3itPpacSu-O54@rAAAAAE","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:21:04+00:00"}
{"reqId":"V0jIURy28ueo4f-A6vlOCAAAAAY","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:21:05+00:00"}
{"reqId":"V0jIUUomMaBSwMQSnqmq4QAAAAI","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:21:05+00:00"}
{"reqId":"V0jIxITPfEMsNLHZffD@hAAAAAc","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:23:00+00:00"}
{"reqId":"V0jIyFzzmAMglKDzKD4aAwAAAAg","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:23:04+00:00"}
{"reqId":"V0jIyNGclq16mLy4OmP9AwAAAAo","remoteAddr":"91.89.175.28","app":"PHP","message":"Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at \/var\/www\/html\/owncloud\/lib\/private\/image.php#515","level":3,"time":"2016-05-27T22:23:04+00:00"}
{"reqId":"V0oq4VzzmAMglKDzKD4aTgAAAAg","remoteAddr":"91.89.175.28","app":"PHP","message":"Uncaught LogicException: Class OCP\Lock\ILockingProvider could not be loaded in \/var\/www\/html\/owncloud\/lib\/private\/files\/view.php:1091\nStack trace:\n#0 [internal function]: spl_autoload('OCP\\Lock\\ILocki...')\n#1 \/var\/www\/html\/owncloud\/lib\/private\/files\/view.php(1091): spl_autoload_call('OCP\\Lock\\ILocki...')\n#2 [internal function]: OC\Files\View->OC\Files\{closure}()\n#3 \/var\/www\/html\/owncloud\/3rdparty\/icewind\/streams\/src\/CallbackWrapper.php(109): call_user_func(Object(Closure))\n#4 [internal function]: Icewind\Streams\CallbackWrapper->stream_close()\n#5 {main}\n  thrown at \/var\/www\/html\/owncloud\/lib\/private\/files\/view.php#1091","level":3,"time":"2016-05-28T23:33:53+00:00"}
{"reqId":"V1W5kKdL5xcj55T-JSM@bwAAAAc","remoteAddr":"134.3.106.30","app":"webdav","message":"Exception: {\"Message\":\"An exception occurred while executing 'INSERT INTO `oc_file_locks` (`key`,`lock`,`ttl`) SELECT ?,?,? FROM `oc_file_locks` WHERE `key` = ? HAVING COUNT(_) = 0' with params [\\"files\\\\/dfbde41fea47c823d82ae317abe77801\\", 1, 1465239456, \\"files\\\\/dfbde41fea47c823d82ae317abe77801\\"]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'files\\/dfbde41fea47c823d82ae317abe77801' for key 'lock_key_index'\",\"Exception\":\"Doctrine\\DBAL\\Exception\\UniqueConstraintViolationException\",\"Code\":0,\"Trace\":\"#0 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/DBALException.php(116): Doctrine\\DBAL\\Driver\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\DBAL\\Driver\\PDOException))\n#1 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/Connection.php(996): Doctrine\\DBAL\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\DBAL\\Driver\\PDOMySql\\Driver), Object(Doctrine\\DBAL\\Driver\\PDOException), 'INSERT INTO `oc...', Array)\\n#2 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/db\\\/connection.php(205): Doctrine\\\\DBAL\\\\Connection->executeUpdate('INSERT INTO`oc...', Array, Array)\n#3 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/db\\/adapter.php(93): OC\\DB\\Connection->executeUpdate('INSERT INTO `oc...', Array)\n#4 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/db\\/connection.php(243): OC\\DB\\Adapter->insertIfNotExist('_PREFIX_file_lo...', Array, Array)\n#5 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/lock\\/dblockingprovider.php(113): OC\\DB\\Connection->insertIfNotExist('_PREFIX_file_lo...', Array, Array)\n#6 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/lock\\/dblockingprovider.php(158): OC\\Lock\\DBLockingProvider->initLockField('files\\/dfbde41fe...', 1)\n#7 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/common.php(663): OC\\Lock\\DBLockingProvider->acquireLock('files\\/dfbde41fe...', 1)\n#8 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/wrapper\\/wrapper.php(577): OC\\Files\\Storage\\Common->acquireLock('files\\/DSA\\/25. T...', 1, Object(OC\\Lock\\DBLockingProvider))\n#9 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/wrapper\\/wrapper.php(577): OC\\Files\\Storage\\Wrapper\\Wrapper->acquireLock('files\\/DSA\\/25. T...', 1, Object(OC\\Lock\\DBLockingProvider))\n#10 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1849): OC\\Files\\Storage\\Wrapper\\Wrapper->acquireLock('files\\/DSA\\/25. T...', 1, Object(OC\\Lock\\DBLockingProvider))\n#11 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1956): OC\\Files\\View->lockPath('\\/DSA\\/25. Tools', 1)\n#12 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1230): OC\\Files\\View->lockFile('DSA\\/25. Tools\\/h...', 1)\n#13 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1277): OC\\Files\\View->getCacheEntry(Object(OCA\\Files_Trashbin\\Storage), 'files\\/DSA\\/25. T...', 'DSA\\/25. Tools\\/h...')\n#14 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/lib\\/connector\\/sabre\\/objecttree.php(155): OC\\Files\\View->getFileInfo('\\/Administrator\\/...')\n#15 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/lib\\/connector\\/sabre\\/lockplugin.php(58): OCA\\DAV\\Connector\\Sabre\\ObjectTree->getNodeForPath('DSA\\/25. Tools\\/h...')\n#16 [internal function]: OCA\\DAV\\Connector\\Sabre\\LockPlugin->getLock(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\n#17 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/event\\/lib\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\n#18 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php(446): Sabre\\Event\\EventEmitter->emit('beforeMethod', Array)\n#19 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php(248): Sabre\\DAV\\Server->invokeMethod(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\n#20 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/appinfo\\/v1\\/webdav.php(55): Sabre\\DAV\\Server->exec()\n#21 \\/var\\/www\\/html\\/owncloud\\/remote.php(138): require_once('\\/var\\/www\\/html\\/o...')\n#22 {main}\",\"File\":\"\\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/Driver\\/AbstractMySQLDriver.php\",\"Line\":66,\"User\":\"Administrator\"}","level":4,"time":"2016-06-06T17:57:36+00:00"}
{"reqId":"V1bwpKjwTDwgkR4k9K9HnQAAAAw","remoteAddr":"134.3.106.30","app":"webdav","message":"Exception: {\"Message\":\"An exception occurred while executing 'INSERT INTO `oc_file_locks` (`key`,`lock`,`ttl`) SELECT ?,?,? FROM `oc_file_locks` WHERE `key` = ? HAVING COUNT(_) = 0' with params [\\"files\\\\/ce6ec4f462fbb3c867ed183861e22e28\\", 1, 1465319093, \\"files\\\\/ce6ec4f462fbb3c867ed183861e22e28\\"]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'files\\/ce6ec4f462fbb3c867ed183861e22e28' for key 'lock_key_index'\",\"Exception\":\"Doctrine\\DBAL\\Exception\\UniqueConstraintViolationException\",\"Code\":0,\"Trace\":\"#0 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/DBALException.php(116): Doctrine\\DBAL\\Driver\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\DBAL\\Driver\\PDOException))\n#1 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/Connection.php(996): Doctrine\\DBAL\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\DBAL\\Driver\\PDOMySql\\Driver), Object(Doctrine\\DBAL\\Driver\\PDOException), 'INSERT INTO `oc...', Array)\\n#2 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/db\\\/connection.php(205): Doctrine\\\\DBAL\\\\Connection->executeUpdate('INSERT INTO`oc...', Array, Array)\n#3 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/db\\/adapter.php(93): OC\\DB\\Connection->executeUpdate('INSERT INTO `oc...', Array)\\n#4 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/db\\\/connection.php(243): OC\\\\DB\\\\Adapter->insertIfNotExist('*PREFIX*file_lo...', Array, Array)\\n#5 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/lock\\\/dblockingprovider.php(113): OC\\\\DB\\\\Connection->insertIfNotExist('*PREFIX*file_lo...', Array, Array)\\n#6 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/lock\\\/dblockingprovider.php(158): OC\\\\Lock\\\\DBLockingProvider->initLockField('files\\\/ce6ec4f46...', 1)\\n#7 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/common.php(663): OC\\\\Lock\\\\DBLockingProvider->acquireLock('files\\\/ce6ec4f46...', 1)\\n#8 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/wrapper\\\/wrapper.php(577): OC\\\\Files\\\\Storage\\\\Common->acquireLock('files\\\/DSA', 1, Object(OC\\\\Lock\\\\DBLockingProvider))\\n#9 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/storage\\\/wrapper\\\/wrapper.php(577): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->acquireLock('files\\\/DSA', 1, Object(OC\\\\Lock\\\\DBLockingProvider))\\n#10 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/view.php(1849): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->acquireLock('files\\\/DSA', 1, Object(OC\\\\Lock\\\\DBLockingProvider))\\n#11 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/view.php(1956): OC\\\\Files\\\\View->lockPath('\\\/DSA', 1)\\n#12 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/view.php(1230): OC\\\\Files\\\\View->lockFile('DSA\\\/25. Tools\\\/h...', 1)\\n#13 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/files\\\/view.php(1277): OC\\\\Files\\\\View->getCacheEntry(Object(OCA\\\\Files_Trashbin\\\\Storage), 'files\\\/DSA\\\/25. T...', 'DSA\\\/25. Tools\\\/h...')\\n#14 \\\/var\\\/www\\\/html\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/connector\\\/sabre\\\/objecttree.php(155): OC\\\\Files\\\\View->getFileInfo('\\\/Administrator\\\/...')\\n#15 \\\/var\\\/www\\\/html\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/connector\\\/sabre\\\/lockplugin.php(58): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\ObjectTree->getNodeForPath('DSA\\\/25. Tools\\\/h...')\\n#16 [internal function]: OCA\\\\DAV\\\\Connector\\\\Sabre\\\\LockPlugin->getLock(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#17 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#18 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(446): Sabre\\\\Event\\\\EventEmitter->emit('beforeMethod', Array)\\n#19 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(248): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#20 \\\/var\\\/www\\\/html\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v1\\\/webdav.php(55): Sabre\\\\DAV\\\\Server->exec()\\n#21 \\\/var\\\/www\\\/html\\\/owncloud\\\/remote.php(138): require_once('\\\/var\\\/www\\\/html\\\/o...')\\n#22 {main}\",\"File\":\"\\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/AbstractMySQLDriver.php\",\"Line\":66,\"User\":\"Administrator\"}","level":4,"time":"2016-06-07T16:04:53+00:00"}
{"reqId":"V1cI@JU7Bkt0cmgPOaoxIQAAAAg","remoteAddr":"134.3.106.30","app":"webdav","message":"Exception: {\"Message\":\"An exception occurred while executing 'INSERT INTO`oc_file_locks`(`key`,`lock`,`ttl`) SELECT ?,?,? FROM`oc_file_locks`WHERE`key`= ? HAVING COUNT(*) = 0' with params [\\\"files\\\\\\\/ce6ec4f462fbb3c867ed183861e22e28\\\", 1, 1465325321, \\\"files\\\\\\\/ce6ec4f462fbb3c867ed183861e22e28\\\"]:\\n\\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'files\\\/ce6ec4f462fbb3c867ed183861e22e28' for key 'lock_key_index'\",\"Exception\":\"Doctrine\\\\DBAL\\\\Exception\\\\UniqueConstraintViolationException\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(116): Doctrine\\\\DBAL\\\\Driver\\\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException))\\n#1 \\\/var\\\/www\\\/html\\\/owncloud\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(996): Doctrine\\\\DBAL\\\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOMySql\\\\Driver), Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException), 'INSERT INTO`oc...', Array)\n#2 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/db\\/connection.php(205): Doctrine\\DBAL\\Connection->executeUpdate('INSERT INTO `oc...', Array, Array)\\n#3 \\\/var\\\/www\\\/html\\\/owncloud\\\/lib\\\/private\\\/db\\\/adapter.php(93): OC\\\\DB\\\\Connection->executeUpdate('INSERT INTO`oc...', Array)\n#4 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/db\\/connection.php(243): OC\\DB\\Adapter->insertIfNotExist('_PREFIX_file_lo...', Array, Array)\n#5 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/lock\\/dblockingprovider.php(113): OC\\DB\\Connection->insertIfNotExist('_PREFIX_file_lo...', Array, Array)\n#6 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/lock\\/dblockingprovider.php(158): OC\\Lock\\DBLockingProvider->initLockField('files\\/ce6ec4f46...', 1)\n#7 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/common.php(663): OC\\Lock\\DBLockingProvider->acquireLock('files\\/ce6ec4f46...', 1)\n#8 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/wrapper\\/wrapper.php(577): OC\\Files\\Storage\\Common->acquireLock('files\\/DSA', 1, Object(OC\\Lock\\DBLockingProvider))\n#9 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/storage\\/wrapper\\/wrapper.php(577): OC\\Files\\Storage\\Wrapper\\Wrapper->acquireLock('files\\/DSA', 1, Object(OC\\Lock\\DBLockingProvider))\n#10 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1849): OC\\Files\\Storage\\Wrapper\\Wrapper->acquireLock('files\\/DSA', 1, Object(OC\\Lock\\DBLockingProvider))\n#11 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1956): OC\\Files\\View->lockPath('\\/DSA', 1)\n#12 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1230): OC\\Files\\View->lockFile('DSA\\/25. Tools\\/h...', 1)\n#13 \\/var\\/www\\/html\\/owncloud\\/lib\\/private\\/files\\/view.php(1277): OC\\Files\\View->getCacheEntry(Object(OCA\\Files_Trashbin\\Storage), 'files\\/DSA\\/25. T...', 'DSA\\/25. Tools\\/h...')\n#14 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/lib\\/connector\\/sabre\\/objecttree.php(155): OC\\Files\\View->getFileInfo('\\/Administrator\\/...')\n#15 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/lib\\/connector\\/sabre\\/lockplugin.php(58): OCA\\DAV\\Connector\\Sabre\\ObjectTree->getNodeForPath('DSA\\/25. Tools\\/h...')\n#16 [internal function]: OCA\\DAV\\Connector\\Sabre\\LockPlugin->getLock(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\n#17 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/event\\/lib\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\n#18 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php(446): Sabre\\Event\\EventEmitter->emit('beforeMethod', Array)\n#19 \\/var\\/www\\/html\\/owncloud\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php(248): Sabre\\DAV\\Server->invokeMethod(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\n#20 \\/var\\/www\\/html\\/owncloud\\/apps\\/dav\\/appinfo\\/v1\\/webdav.php(55): Sabre\\DAV\\Server->exec()\n#21 \\/var\\/www\\/html\\/owncloud\\/remote.php(138): require_once('\\/var\\/www\\/html\\/o...')\n#22 {main}\",\"File\":\"\\/var\\/www\\/html\\/owncloud\\/3rdparty\\/doctrine\\/dbal\\/lib\\/Doctrine\\/DBAL\\/Driver\\/AbstractMySQLDriver.php\",\"Line\":66,\"User\":\"Administrator\"}","level":4,"time":"2016-06-07T17:48:41+00:00"}

Move magic numbers in layout files to @dims

Actual behaviour

-many magic numbers in layout like 4dp, see review comments in #5

Expected behaviour

-move magic numbers like 4dp (widely used) to the dims.xml file as a constant

Link to a list of Nextcloud providers on the setup screen

I bet many new users are unfamiliar to the concept of ownCloud/Nextcloud requiring URL/user/pass and not just user/pass.

To improve usability, I suggest that we put a link next to the server address box in the setup screen, saying: "Looking for a server? Get it here." And we link it to "https://nextcloud.com/providers/" or the equivalent Nextcloud page when it is ready.

Apart from making it usable for Dropbox-minded users, this has the extra benefit of pointing more customers to the own/Next-cloud providers in that list, and this in turn increase the licensing fees Nextcloud can negotiate to get from the said providers.

PR: #561

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.