mirror of
https://github.com/etesync/android
synced 2024-11-22 16:08:13 +00:00
Debugging improvements
* force debugging options for resource detection (because there's no way to turn them on until there's an account) * provide "report issue" button in debug settings * provide CONTRIBUTING.md, including instructions on how to report issues * increase socket timeout from 20 to 45 seconds (hopefully fixes #237) * previous commit: increase total simultaneous connections to 3 (2 per host)
This commit is contained in:
parent
3e4efe8b82
commit
13cfe3ce98
56
CONTRIBUTING.md
Normal file
56
CONTRIBUTING.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
DAVdroid is free and open-source software, licensed under the [GPLv3 License](COPYING).
|
||||||
|
If you like our project, please contribute to it.
|
||||||
|
|
||||||
|
# How to contribute
|
||||||
|
|
||||||
|
## Reporting issues
|
||||||
|
|
||||||
|
An issue might be a bug, an enhancement request or something in between. If you think you
|
||||||
|
have found a bug or if you want to request some enhancement, please:
|
||||||
|
|
||||||
|
1. Read the [Configuration](http://davdroid.bitfire.at/configuration) and [FAQ](http://davdroid.bitfire.at/faq/)
|
||||||
|
pages carefully. The most common issues/usage challenges are explained there.
|
||||||
|
2. Search the Web for the problem, maybe ask competent friends or in forums.
|
||||||
|
3. Browse through the [open issues](https://github.com/rfc2822/davdroid/issues). You can
|
||||||
|
also search the issues in the search field on top of the page. Please have a look
|
||||||
|
into the closed issues, too, because many requests have already been handled (and can''t/won''t
|
||||||
|
be fixed, for instance).
|
||||||
|
4. **[Fetch verbose logs](https://github.com/rfc2822/davdroid/wiki/How-to-view-the-logs) and prepare
|
||||||
|
them. Remove `Authorization: Basic xxxxxx` headers and other private data.** Extracting the
|
||||||
|
logs may be cumbersome work in the first time, but it''s absolutely necessary in order to
|
||||||
|
handle your issue.
|
||||||
|
5. Create a new issue, containing
|
||||||
|
* a useful summary of the problem ("Crash when syncing contacts with large photos" instead of "CRASH PLEASE HELP"),
|
||||||
|
* your DAVdroid version and source ("DAVdroid 0.5.10 from F-Droid"),
|
||||||
|
* your Android version and device model ("Samsung Galaxy S2 running Android 4.4.2 (CyanogenMod 11-20140504-SNAPSHOT-M6-i9100)"),
|
||||||
|
* your CalDAV/CardDAV server software, version and hosting information ("OwnCloud 6, hosted on virtual server"),
|
||||||
|
* **verbose logs including the network traffic** (see step before). Enquote the logs with three backticks ```
|
||||||
|
before and after, or post them onto http://gist.github.com and provide a link.
|
||||||
|
|
||||||
|
|
||||||
|
## Pull requests
|
||||||
|
|
||||||
|
We''re very happy about pull requests for
|
||||||
|
|
||||||
|
* source code,
|
||||||
|
* documentation,
|
||||||
|
* translation (strings).
|
||||||
|
|
||||||
|
However, if you want to contribute source code, please talk with us in the
|
||||||
|
corresponding issue before because will only merge pull requests that
|
||||||
|
|
||||||
|
* match our product goals,
|
||||||
|
* have the necessary code quality,
|
||||||
|
* don''t interfere with other near-term future development.
|
||||||
|
|
||||||
|
However, feel free to fork the repository and do your changes anyway
|
||||||
|
(that''s why it''s open-source). Just don''t expect your strategic changes to be
|
||||||
|
merged if there''s no consensus in the issue before.
|
||||||
|
|
||||||
|
|
||||||
|
## Donations
|
||||||
|
|
||||||
|
If you want to support this project, please also consider [donating to DAVdroid](http://davdroid.bitfire.at/donate)
|
||||||
|
or [purchasing it in one of the commercial stores](http://davdroid.bitfire.at/download).
|
||||||
|
|
10
README.md
10
README.md
@ -1,7 +1,13 @@
|
|||||||
|
|
||||||
Please see the [DAVdroid Web site](http://davdroid.bitfire.at) for more information.
|
DAVDROID
|
||||||
|
========
|
||||||
|
|
||||||
Twitter: https://twitter.com/davdroidapp
|
Please see the [DAVdroid Web site](http://davdroid.bitfire.at) for
|
||||||
|
detailled information about DAVdroid.
|
||||||
|
|
||||||
|
DAVdroid is licensed under the [GPLv3 License](COPYING).
|
||||||
|
|
||||||
|
Twitter: [@davdroidapp](https://twitter.com/davdroidapp)
|
||||||
|
|
||||||
|
|
||||||
USED THIRD-PARTY LIBRARIES
|
USED THIRD-PARTY LIBRARIES
|
||||||
|
BIN
res/drawable-hdpi/ic_action_new_event.png
Normal file
BIN
res/drawable-hdpi/ic_action_new_event.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 409 B |
BIN
res/drawable-mdpi/ic_action_new_event.png
Normal file
BIN
res/drawable-mdpi/ic_action_new_event.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 384 B |
BIN
res/drawable-xhdpi/ic_action_new_event.png
Normal file
BIN
res/drawable-xhdpi/ic_action_new_event.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 481 B |
BIN
res/drawable-xxhdpi/ic_action_new_event.png
Normal file
BIN
res/drawable-xxhdpi/ic_action_new_event.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 530 B |
4
res/menu/debug_settings.xml
Normal file
4
res/menu/debug_settings.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
<item android:title="@string/report_an_issue" android:showAsAction="always|withText" android:onClick="reportIssue" android:icon="@drawable/ic_action_new_event"></item>
|
||||||
|
</menu>
|
@ -115,5 +115,6 @@
|
|||||||
<string name="network_logging">Netzwerkverkehr aufzeichnen</string>
|
<string name="network_logging">Netzwerkverkehr aufzeichnen</string>
|
||||||
<string name="network_logging_enabled">Der gesamte Netzwerkverkehr wird in den Android-Logs mitgeschrieben (zur Fehlersuche)</string>
|
<string name="network_logging_enabled">Der gesamte Netzwerkverkehr wird in den Android-Logs mitgeschrieben (zur Fehlersuche)</string>
|
||||||
<string name="network_logging_disabled">Netzwerkverkehr wird nicht aufgezeichnet</string>
|
<string name="network_logging_disabled">Netzwerkverkehr wird nicht aufgezeichnet</string>
|
||||||
|
<string name="report_an_issue">Problem berichten</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -122,5 +122,6 @@
|
|||||||
<string name="network_logging">Log network traffic</string>
|
<string name="network_logging">Log network traffic</string>
|
||||||
<string name="network_logging_enabled">All network traffic is being logged verbosely (debug mode)</string>
|
<string name="network_logging_enabled">All network traffic is being logged verbosely (debug mode)</string>
|
||||||
<string name="network_logging_disabled">Network traffic is not being logged</string>
|
<string name="network_logging_disabled">Network traffic is not being logged</string>
|
||||||
|
<string name="report_an_issue">Report an issue</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -42,9 +42,8 @@ public class AddAccountActivity extends Activity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean showHelp(MenuItem item) {
|
public void showHelp(MenuItem item) {
|
||||||
startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse(Constants.WEB_URL_HELP)), 0);
|
startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse(Constants.WEB_URL_HELP)), 0);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,11 +25,14 @@ import android.content.AbstractThreadedSyncAdapter;
|
|||||||
import android.content.ContentProviderClient;
|
import android.content.ContentProviderClient;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.content.SyncResult;
|
import android.content.SyncResult;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import at.bitfire.davdroid.Constants;
|
||||||
import at.bitfire.davdroid.resource.LocalCollection;
|
import at.bitfire.davdroid.resource.LocalCollection;
|
||||||
import at.bitfire.davdroid.resource.LocalStorageException;
|
import at.bitfire.davdroid.resource.LocalStorageException;
|
||||||
import at.bitfire.davdroid.resource.RemoteCollection;
|
import at.bitfire.davdroid.resource.RemoteCollection;
|
||||||
@ -106,7 +109,11 @@ public abstract class DavSyncAdapter extends AbstractThreadedSyncAdapter impleme
|
|||||||
httpClientLock.writeLock().lock();
|
httpClientLock.writeLock().lock();
|
||||||
if (httpClient == null) {
|
if (httpClient == null) {
|
||||||
Log.d(TAG, "Creating new DavHttpClient");
|
Log.d(TAG, "Creating new DavHttpClient");
|
||||||
httpClient = DavHttpClient.create(getContext());
|
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
httpClient = DavHttpClient.create(
|
||||||
|
settings.getBoolean(Constants.SETTING_DISABLE_COMPRESSION, false),
|
||||||
|
settings.getBoolean(Constants.SETTING_NETWORK_LOGGING, false)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// prevent httpClient shutdown until we're ready by holding a read lock
|
// prevent httpClient shutdown until we're ready by holding a read lock
|
||||||
|
@ -2,11 +2,17 @@ package at.bitfire.davdroid.syncadapter;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import at.bitfire.davdroid.R;
|
import at.bitfire.davdroid.R;
|
||||||
|
|
||||||
public class GeneralSettingsActivity extends Activity {
|
public class GeneralSettingsActivity extends Activity {
|
||||||
|
final static String URL_REPORT_ISSUE = "https://github.com/rfc2822/davdroid/blob/master/CONTRIBUTING.md";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@ -16,7 +22,11 @@ public class GeneralSettingsActivity extends Activity {
|
|||||||
.replace(android.R.id.content, new GeneralSettingsFragment())
|
.replace(android.R.id.content, new GeneralSettingsFragment())
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void reportIssue(MenuItem item) {
|
||||||
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(URL_REPORT_ISSUE)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class GeneralSettingsFragment extends PreferenceFragment {
|
public static class GeneralSettingsFragment extends PreferenceFragment {
|
||||||
@Override
|
@Override
|
||||||
@ -25,6 +35,13 @@ public class GeneralSettingsActivity extends Activity {
|
|||||||
|
|
||||||
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
|
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
|
||||||
addPreferencesFromResource(R.xml.general_settings);
|
addPreferencesFromResource(R.xml.general_settings);
|
||||||
|
|
||||||
|
setHasOptionsMenu(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.debug_settings, menu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,9 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC
|
|||||||
args.getBoolean(EXTRA_AUTH_PREEMPTIVE)
|
args.getBoolean(EXTRA_AUTH_PREEMPTIVE)
|
||||||
);
|
);
|
||||||
|
|
||||||
CloseableHttpClient httpClient = DavHttpClient.create(context);
|
// disable compression and enable network logging for debugging purposes
|
||||||
|
CloseableHttpClient httpClient = DavHttpClient.create(true, true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// (1/5) detect capabilities
|
// (1/5) detect capabilities
|
||||||
WebDavResource base = new WebDavResource(httpClient, new URI(serverInfo.getProvidedURL()), serverInfo.getUserName(),
|
WebDavResource base = new WebDavResource(httpClient, new URI(serverInfo.getProvidedURL()), serverInfo.getUserName(),
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package at.bitfire.davdroid.webdav;
|
package at.bitfire.davdroid.webdav;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import at.bitfire.davdroid.Constants;
|
import at.bitfire.davdroid.Constants;
|
||||||
import ch.boye.httpclientandroidlib.client.config.RequestConfig;
|
import ch.boye.httpclientandroidlib.client.config.RequestConfig;
|
||||||
@ -41,13 +38,13 @@ public class DavHttpClient {
|
|||||||
// use request defaults from AndroidHttpClient
|
// use request defaults from AndroidHttpClient
|
||||||
defaultRqConfig = RequestConfig.copy(RequestConfig.DEFAULT)
|
defaultRqConfig = RequestConfig.copy(RequestConfig.DEFAULT)
|
||||||
.setConnectTimeout(20*1000)
|
.setConnectTimeout(20*1000)
|
||||||
.setSocketTimeout(20*1000)
|
.setSocketTimeout(45*1000)
|
||||||
.setStaleConnectionCheckEnabled(false)
|
.setStaleConnectionCheckEnabled(false)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static CloseableHttpClient create(Context context) {
|
public static CloseableHttpClient create(boolean disableCompression, boolean logTraffic) {
|
||||||
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
||||||
// limits per DavHttpClient (= per DavSyncAdapter extends AbstractThreadedSyncAdapter)
|
// limits per DavHttpClient (= per DavSyncAdapter extends AbstractThreadedSyncAdapter)
|
||||||
connectionManager.setMaxTotal(3); // max. 3 connections in total
|
connectionManager.setMaxTotal(3); // max. 3 connections in total
|
||||||
@ -60,16 +57,16 @@ public class DavHttpClient {
|
|||||||
.setRetryHandler(DavHttpRequestRetryHandler.INSTANCE)
|
.setRetryHandler(DavHttpRequestRetryHandler.INSTANCE)
|
||||||
.setUserAgent("DAVdroid/" + Constants.APP_VERSION)
|
.setUserAgent("DAVdroid/" + Constants.APP_VERSION)
|
||||||
.disableCookieManagement();
|
.disableCookieManagement();
|
||||||
|
|
||||||
// debug options
|
|
||||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
if (settings.getBoolean(Constants.SETTING_DISABLE_COMPRESSION, false))
|
|
||||||
builder = builder.disableContentCompression();
|
|
||||||
|
|
||||||
boolean networkLogging = settings.getBoolean(Constants.SETTING_NETWORK_LOGGING, false);
|
if (disableCompression) {
|
||||||
Log.d(TAG, "Network logging: " + networkLogging);
|
Log.d(TAG, "Disabling compression for debugging purposes");
|
||||||
ManagedHttpClientConnectionFactory.INSTANCE.wirelog.enableDebug(networkLogging);
|
builder = builder.disableContentCompression();
|
||||||
ManagedHttpClientConnectionFactory.INSTANCE.log.enableDebug(networkLogging);
|
}
|
||||||
|
|
||||||
|
if (logTraffic)
|
||||||
|
Log.d(TAG, "Logging network traffic for debugging purposes");
|
||||||
|
ManagedHttpClientConnectionFactory.INSTANCE.wirelog.enableDebug(logTraffic);
|
||||||
|
ManagedHttpClientConnectionFactory.INSTANCE.log.enableDebug(logTraffic);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user