1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2025-02-10 19:14:45 +00:00

Add pref to enable verbose logging (#303)

* Add prefs: verbose_log, expert_mode

* Update prefs in Constants

* Add service.AppPrefs

* Update fragments to read verbose log pref

* Update classes with context or inject to read verbose log pref

* Inherit ENABLE_VERBOSE_LOG from RestApi to Completion

* Restart whole app if verbose log pref was changed

* A line too much

* Revert expert mode pref (DELTA REVERT)
This commit is contained in:
Catfriend1 2019-02-19 08:14:21 +01:00 committed by GitHub
parent 53d3c13403
commit cdcdc3c1c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 175 additions and 20 deletions

View file

@ -7,6 +7,9 @@ import com.nutomic.syncthingandroid.activities.FolderPickerActivity;
import com.nutomic.syncthingandroid.activities.MainActivity; import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SettingsActivity; import com.nutomic.syncthingandroid.activities.SettingsActivity;
import com.nutomic.syncthingandroid.activities.SyncConditionsActivity; import com.nutomic.syncthingandroid.activities.SyncConditionsActivity;
import com.nutomic.syncthingandroid.fragments.DeviceListFragment;
import com.nutomic.syncthingandroid.fragments.FolderListFragment;
import com.nutomic.syncthingandroid.fragments.StatusFragment;
import com.nutomic.syncthingandroid.receiver.AppConfigReceiver; import com.nutomic.syncthingandroid.receiver.AppConfigReceiver;
import com.nutomic.syncthingandroid.service.RunConditionMonitor; import com.nutomic.syncthingandroid.service.RunConditionMonitor;
import com.nutomic.syncthingandroid.service.EventProcessor; import com.nutomic.syncthingandroid.service.EventProcessor;
@ -31,6 +34,9 @@ public interface DaggerComponent {
void inject(FolderActivity activity); void inject(FolderActivity activity);
void inject(FolderPickerActivity activity); void inject(FolderPickerActivity activity);
void inject(SyncConditionsActivity activity); void inject(SyncConditionsActivity activity);
void inject(DeviceListFragment fragment);
void inject(FolderListFragment fragment);
void inject(StatusFragment fragment);
void inject(Languages languages); void inject(Languages languages);
void inject(SyncthingService service); void inject(SyncthingService service);
void inject(RunConditionMonitor runConditionMonitor); void inject(RunConditionMonitor runConditionMonitor);

View file

@ -70,6 +70,8 @@ public class SettingsActivity extends SyncthingActivity {
private SettingsFragment mSettingsFragment; private SettingsFragment mSettingsFragment;
public static final int RESULT_RESTART_APP = 3461;
public static final String EXTRA_OPEN_SUB_PREF_SCREEN = public static final String EXTRA_OPEN_SUB_PREF_SCREEN =
"com.github.catfriend1.syncthingandroid.activities.SettingsActivity.OPEN_SUB_PREF_SCREEN"; "com.github.catfriend1.syncthingandroid.activities.SettingsActivity.OPEN_SUB_PREF_SCREEN";
@ -153,6 +155,7 @@ public class SettingsActivity extends SyncthingActivity {
private Dialog mCurrentPrefScreenDialog = null; private Dialog mCurrentPrefScreenDialog = null;
/* Run conditions */
private Preference mCategoryRunConditions; private Preference mCategoryRunConditions;
private ListPreference mPowerSource; private ListPreference mPowerSource;
private CheckBoxPreference mRunOnMobileData; private CheckBoxPreference mRunOnMobileData;
@ -332,13 +335,15 @@ public class SettingsActivity extends SyncthingActivity {
exportConfig.setOnPreferenceClickListener(this); exportConfig.setOnPreferenceClickListener(this);
importConfig.setOnPreferenceClickListener(this); importConfig.setOnPreferenceClickListener(this);
/* Debugging */ /* Troubleshooting */
Preference verboseLog = findPreference(Constants.PREF_VERBOSE_LOG);
Preference openIssueTracker = findPreference(KEY_OPEN_ISSUE_TRACKER); Preference openIssueTracker = findPreference(KEY_OPEN_ISSUE_TRACKER);
Preference debugFacilitiesEnabled = findPreference(Constants.PREF_DEBUG_FACILITIES_ENABLED); Preference debugFacilitiesEnabled = findPreference(Constants.PREF_DEBUG_FACILITIES_ENABLED);
Preference environmentVariables = findPreference("environment_variables"); Preference environmentVariables = findPreference("environment_variables");
Preference stResetDatabase = findPreference("st_reset_database"); Preference stResetDatabase = findPreference("st_reset_database");
Preference stResetDeltas = findPreference("st_reset_deltas"); Preference stResetDeltas = findPreference("st_reset_deltas");
verboseLog.setOnPreferenceClickListener(this);
openIssueTracker.setOnPreferenceClickListener(this); openIssueTracker.setOnPreferenceClickListener(this);
debugFacilitiesEnabled.setOnPreferenceChangeListener(this); debugFacilitiesEnabled.setOnPreferenceChangeListener(this);
environmentVariables.setOnPreferenceChangeListener(this); environmentVariables.setOnPreferenceChangeListener(this);
@ -739,6 +744,20 @@ public class SettingsActivity extends SyncthingActivity {
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
final Intent intent; final Intent intent;
switch (preference.getKey()) { switch (preference.getKey()) {
case Constants.PREF_VERBOSE_LOG:
new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialog_settings_restart_app_title)
.setMessage(R.string.dialog_settings_restart_app_question)
.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
getActivity().setResult(RESULT_RESTART_APP);
getActivity().finish();
})
.setNegativeButton(android.R.string.no, (dialogInterface, i) -> {
// Revert.
((CheckBoxPreference) preference).setChecked(!((CheckBoxPreference) preference).isChecked());
})
.show();
return true;
case KEY_OPEN_ISSUE_TRACKER: case KEY_OPEN_ISSUE_TRACKER:
intent = new Intent(getActivity(), WebViewActivity.class); intent = new Intent(getActivity(), WebViewActivity.class);
intent.putExtra(WebViewActivity.EXTRA_WEB_URL, getString(R.string.issue_tracker_url)); intent.putExtra(WebViewActivity.EXTRA_WEB_URL, getString(R.string.issue_tracker_url));

View file

@ -1,8 +1,10 @@
package com.nutomic.syncthingandroid.fragments; package com.nutomic.syncthingandroid.fragments;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment; import android.support.v4.app.ListFragment;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
@ -13,10 +15,12 @@ import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.activities.DeviceActivity; import com.nutomic.syncthingandroid.activities.DeviceActivity;
import com.nutomic.syncthingandroid.activities.MainActivity; import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SyncthingActivity; import com.nutomic.syncthingandroid.activities.SyncthingActivity;
import com.nutomic.syncthingandroid.model.Device; import com.nutomic.syncthingandroid.model.Device;
import com.nutomic.syncthingandroid.service.AppPrefs;
import com.nutomic.syncthingandroid.service.Constants; import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.RestApi; import com.nutomic.syncthingandroid.service.RestApi;
import com.nutomic.syncthingandroid.service.SyncthingService; import com.nutomic.syncthingandroid.service.SyncthingService;
@ -27,6 +31,8 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import javax.inject.Inject;
/** /**
* Displays a list of all existing devices. * Displays a list of all existing devices.
*/ */
@ -35,7 +41,9 @@ public class DeviceListFragment extends ListFragment implements SyncthingService
private final static String TAG = "DeviceListFragment"; private final static String TAG = "DeviceListFragment";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
@Inject SharedPreferences mPreferences;
/** /**
* Compares devices by name, uses the device ID as fallback if the name is empty * Compares devices by name, uses the device ID as fallback if the name is empty
@ -59,6 +67,13 @@ public class DeviceListFragment extends ListFragment implements SyncthingService
private DevicesAdapter mAdapter; private DevicesAdapter mAdapter;
private SyncthingService.State mServiceState = SyncthingService.State.INIT; private SyncthingService.State mServiceState = SyncthingService.State.INIT;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getActivity().getApplication()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
}
@Override @Override
public void setUserVisibleHint(boolean isVisibleToUser) public void setUserVisibleHint(boolean isVisibleToUser)
{ {

View file

@ -39,6 +39,8 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
private static final String TAG = "DrawerFragment"; private static final String TAG = "DrawerFragment";
private static final int SETTINGS_SCREEN_REQUEST = 3460;
/** /**
* These buttons might be accessible if the screen is big enough * These buttons might be accessible if the screen is big enough
* or the user can scroll the drawer to access them. * or the user can scroll the drawer to access them.
@ -194,7 +196,7 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
mActivity.closeDrawer(); mActivity.closeDrawer();
break; break;
case R.id.drawerActionSettings: case R.id.drawerActionSettings:
startActivity(new Intent(mActivity, SettingsActivity.class)); startActivityForResult(new Intent(mActivity, SettingsActivity.class), SETTINGS_SCREEN_REQUEST);
mActivity.closeDrawer(); mActivity.closeDrawer();
break; break;
case R.id.drawerActionExit: case R.id.drawerActionExit:
@ -220,12 +222,26 @@ public class DrawerFragment extends Fragment implements SyncthingService.OnServi
} }
} }
private void doExit() { private Boolean doExit() {
if (mActivity == null || mActivity.isFinishing()) { if (mActivity == null || mActivity.isFinishing()) {
return; return false;
} }
Log.i(TAG, "Exiting app on user request"); Log.i(TAG, "Exiting app on user request");
mActivity.stopService(new Intent(mActivity, SyncthingService.class)); mActivity.stopService(new Intent(mActivity, SyncthingService.class));
mActivity.finish(); mActivity.finish();
return true;
}
/**
* Receives result of SettingsActivity.
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == SETTINGS_SCREEN_REQUEST && resultCode == SettingsActivity.RESULT_RESTART_APP) {
Log.d(TAG, "Got request to restart MainActivity");
if (doExit()) {
startActivity(new Intent(getActivity(), MainActivity.class));
}
}
} }
} }

View file

@ -1,8 +1,10 @@
package com.nutomic.syncthingandroid.fragments; package com.nutomic.syncthingandroid.fragments;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment; import android.support.v4.app.ListFragment;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
@ -12,10 +14,12 @@ import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.activities.FolderActivity; import com.nutomic.syncthingandroid.activities.FolderActivity;
import com.nutomic.syncthingandroid.activities.MainActivity; import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SyncthingActivity; import com.nutomic.syncthingandroid.activities.SyncthingActivity;
import com.nutomic.syncthingandroid.model.Folder; import com.nutomic.syncthingandroid.model.Folder;
import com.nutomic.syncthingandroid.service.AppPrefs;
import com.nutomic.syncthingandroid.service.Constants; import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.RestApi; import com.nutomic.syncthingandroid.service.RestApi;
import com.nutomic.syncthingandroid.service.SyncthingService; import com.nutomic.syncthingandroid.service.SyncthingService;
@ -24,6 +28,8 @@ import com.nutomic.syncthingandroid.views.FoldersAdapter;
import java.util.List; import java.util.List;
import javax.inject.Inject;
/** /**
* Displays a list of all existing folders. * Displays a list of all existing folders.
*/ */
@ -32,7 +38,9 @@ public class FolderListFragment extends ListFragment implements SyncthingService
private static final String TAG = "FolderListFragment"; private static final String TAG = "FolderListFragment";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
@Inject SharedPreferences mPreferences;
private Runnable mUpdateListRunnable = new Runnable() { private Runnable mUpdateListRunnable = new Runnable() {
@Override @Override
@ -47,6 +55,13 @@ public class FolderListFragment extends ListFragment implements SyncthingService
private FoldersAdapter mAdapter; private FoldersAdapter mAdapter;
private SyncthingService.State mServiceState = SyncthingService.State.INIT; private SyncthingService.State mServiceState = SyncthingService.State.INIT;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getActivity().getApplication()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
}
@Override @Override
public void setUserVisibleHint(boolean isVisibleToUser) public void setUserVisibleHint(boolean isVisibleToUser)
{ {

View file

@ -1,8 +1,10 @@
package com.nutomic.syncthingandroid.fragments; package com.nutomic.syncthingandroid.fragments;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment; import android.support.v4.app.ListFragment;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@ -16,11 +18,13 @@ import android.widget.ArrayAdapter;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.activities.MainActivity; import com.nutomic.syncthingandroid.activities.MainActivity;
import com.nutomic.syncthingandroid.activities.SettingsActivity; import com.nutomic.syncthingandroid.activities.SettingsActivity;
import com.nutomic.syncthingandroid.activities.SyncthingActivity; import com.nutomic.syncthingandroid.activities.SyncthingActivity;
import com.nutomic.syncthingandroid.model.Connections; import com.nutomic.syncthingandroid.model.Connections;
import com.nutomic.syncthingandroid.model.SystemStatus; import com.nutomic.syncthingandroid.model.SystemStatus;
import com.nutomic.syncthingandroid.service.AppPrefs;
import com.nutomic.syncthingandroid.service.Constants; import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.RestApi; import com.nutomic.syncthingandroid.service.RestApi;
import com.nutomic.syncthingandroid.service.SyncthingService; import com.nutomic.syncthingandroid.service.SyncthingService;
@ -32,6 +36,8 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.text.NumberFormat; import java.text.NumberFormat;
import javax.inject.Inject;
/** /**
* Displays why syncthing is running or disabled. * Displays why syncthing is running or disabled.
*/ */
@ -39,7 +45,9 @@ public class StatusFragment extends ListFragment implements SyncthingService.OnS
private static final String TAG = "StatusFragment"; private static final String TAG = "StatusFragment";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
@Inject SharedPreferences mPreferences;
private Runnable mRestApiQueryRunnable = new Runnable() { private Runnable mRestApiQueryRunnable = new Runnable() {
@Override @Override
@ -70,6 +78,13 @@ public class StatusFragment extends ListFragment implements SyncthingService.OnS
private String mAnnounceServer = ""; private String mAnnounceServer = "";
private String mUptime = ""; private String mUptime = "";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getActivity().getApplication()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
}
@Override @Override
public void setUserVisibleHint(boolean isVisibleToUser) public void setUserVisibleHint(boolean isVisibleToUser)
{ {

View file

@ -18,6 +18,8 @@ import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley; import com.android.volley.toolbox.Volley;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.nutomic.syncthingandroid.service.AppPrefs;
import com.nutomic.syncthingandroid.service.Constants; import com.nutomic.syncthingandroid.service.Constants;
import java.io.File; import java.io.File;
@ -38,7 +40,7 @@ public abstract class ApiRequest {
private static final String TAG = "ApiRequest"; private static final String TAG = "ApiRequest";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
/** /**
* The name of the HTTP header used for the syncthing API key. * The name of the HTTP header used for the syncthing API key.
@ -77,6 +79,7 @@ public abstract class ApiRequest {
mUrl = url; mUrl = url;
mPath = path; mPath = path;
mApiKey = apiKey; mApiKey = apiKey;
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(context);
} }
Uri buildUri(Map<String, String> params) { Uri buildUri(Map<String, String> params) {

View file

@ -17,11 +17,15 @@ public class Completion {
private static final String TAG = "Completion"; private static final String TAG = "Completion";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
HashMap<String, HashMap<String, CompletionInfo>> deviceFolderMap = HashMap<String, HashMap<String, CompletionInfo>> deviceFolderMap =
new HashMap<String, HashMap<String, CompletionInfo>>(); new HashMap<String, HashMap<String, CompletionInfo>>();
public Completion(Boolean enableVerboseLog) {
ENABLE_VERBOSE_LOG = enableVerboseLog;
}
/** /**
* Removes a folder from the cache model. * Removes a folder from the cache model.
*/ */

View file

@ -0,0 +1,32 @@
package com.nutomic.syncthingandroid.service;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
/**
* Provides preference getters and setters.
*/
public class AppPrefs {
private static final String TAG = "AppPrefs";
private static final Boolean PREF_VERBOSE_LOG_DEFAULT = false;
public static final boolean getPrefVerboseLog(Context context) {
if (context == null) {
Log.e(TAG, "getPrefVerboseLog: context == null");
return PREF_VERBOSE_LOG_DEFAULT;
}
return getPrefVerboseLog(PreferenceManager.getDefaultSharedPreferences(context));
}
public static final boolean getPrefVerboseLog(SharedPreferences sharedPreferences) {
if (sharedPreferences == null) {
Log.e(TAG, "getPrefVerboseLog: sharedPreferences == null");
return PREF_VERBOSE_LOG_DEFAULT;
}
return sharedPreferences.getBoolean(Constants.PREF_VERBOSE_LOG, PREF_VERBOSE_LOG_DEFAULT);
}
}

View file

@ -33,8 +33,8 @@ public class Constants {
public static final String PREF_SUGGEST_NEW_FOLDER_ROOT_DATA = "external_android_data"; public static final String PREF_SUGGEST_NEW_FOLDER_ROOT_DATA = "external_android_data";
public static final String PREF_SUGGEST_NEW_FOLDER_ROOT_MEDIA = "external_android_media"; public static final String PREF_SUGGEST_NEW_FOLDER_ROOT_MEDIA = "external_android_media";
// Preferences - Troubleshooting // Preferences - Troubleshooting
public static final String PREF_VERBOSE_LOG = "verbose_log";
public static final String PREF_ENVIRONMENT_VARIABLES = "environment_variables"; public static final String PREF_ENVIRONMENT_VARIABLES = "environment_variables";
public static final String PREF_DEBUG_FACILITIES_ENABLED = "debug_facilities_enabled"; public static final String PREF_DEBUG_FACILITIES_ENABLED = "debug_facilities_enabled";

View file

@ -38,7 +38,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
private static final String TAG = "EventProcessor"; private static final String TAG = "EventProcessor";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
/** /**
* Minimum interval in seconds at which the events are polled from syncthing and processed. * Minimum interval in seconds at which the events are polled from syncthing and processed.
@ -62,6 +62,7 @@ public class EventProcessor implements Runnable, RestApi.OnReceiveEventListener
public EventProcessor(Context context, RestApi restApi) { public EventProcessor(Context context, RestApi restApi) {
((SyncthingApp) context.getApplicationContext()).component().inject(this); ((SyncthingApp) context.getApplicationContext()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
mContext = context; mContext = context;
mRestApi = restApi; mRestApi = restApi;
} }

View file

@ -65,7 +65,7 @@ public class RestApi {
private static final String TAG = "RestApi"; private static final String TAG = "RestApi";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
/** /**
* Compares folders by labels, uses the folder ID as fallback if the label is empty * Compares folders by labels, uses the folder ID as fallback if the label is empty
@ -143,18 +143,20 @@ public class RestApi {
/** /**
* Stores the latest result of device and folder completion events. * Stores the latest result of device and folder completion events.
*/ */
private Completion mCompletion = new Completion(); private Completion mCompletion;
private Gson mGson; private Gson mGson;
public RestApi(Context context, URL url, String apiKey, OnApiAvailableListener apiListener, public RestApi(Context context, URL url, String apiKey, OnApiAvailableListener apiListener,
OnConfigChangedListener configListener) { OnConfigChangedListener configListener) {
((SyncthingApp) context.getApplicationContext()).component().inject(this); ((SyncthingApp) context.getApplicationContext()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(context);
mContext = context; mContext = context;
mUrl = url; mUrl = url;
mApiKey = apiKey; mApiKey = apiKey;
mOnApiAvailableListener = apiListener; mOnApiAvailableListener = apiListener;
mOnConfigChangedListener = configListener; mOnConfigChangedListener = configListener;
mCompletion = new Completion(ENABLE_VERBOSE_LOG);
mGson = getGson(); mGson = getGson();
} }

View file

@ -39,7 +39,7 @@ public class RunConditionMonitor {
private static final String TAG = "RunConditionMonitor"; private static final String TAG = "RunConditionMonitor";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
private static final String POWER_SOURCE_CHARGER_BATTERY = "ac_and_battery_power"; private static final String POWER_SOURCE_CHARGER_BATTERY = "ac_and_battery_power";
private static final String POWER_SOURCE_CHARGER = "ac_power"; private static final String POWER_SOURCE_CHARGER = "ac_power";
@ -111,8 +111,9 @@ public class RunConditionMonitor {
public RunConditionMonitor(Context context, public RunConditionMonitor(Context context,
OnShouldRunChangedListener onShouldRunChangedListener, OnShouldRunChangedListener onShouldRunChangedListener,
OnSyncPreconditionChangedListener onSyncPreconditionChangedListener) { OnSyncPreconditionChangedListener onSyncPreconditionChangedListener) {
LogV("Created new instance");
((SyncthingApp) context.getApplicationContext()).component().inject(this); ((SyncthingApp) context.getApplicationContext()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
LogV("Created new instance");
mContext = context; mContext = context;
res = mContext.getResources(); res = mContext.getResources();
mOnShouldRunChangedListener = onShouldRunChangedListener; mOnShouldRunChangedListener = onShouldRunChangedListener;

View file

@ -53,7 +53,7 @@ public class SyncthingRunnable implements Runnable {
private static final String TAG_NATIVE = "SyncthingNativeCode"; private static final String TAG_NATIVE = "SyncthingNativeCode";
private static final String TAG_NICE = "SyncthingRunnableIoNice"; private static final String TAG_NICE = "SyncthingRunnableIoNice";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
private static final int LOG_FILE_MAX_LINES = 10; private static final int LOG_FILE_MAX_LINES = 10;
private static final AtomicReference<Process> mSyncthing = new AtomicReference<>(); private static final AtomicReference<Process> mSyncthing = new AtomicReference<>();
@ -84,6 +84,7 @@ public class SyncthingRunnable implements Runnable {
*/ */
public SyncthingRunnable(Context context, Command command) { public SyncthingRunnable(Context context, Command command) {
((SyncthingApp) context.getApplicationContext()).component().inject(this); ((SyncthingApp) context.getApplicationContext()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
mContext = context; mContext = context;
// Example: mSyncthingBinary="/data/app/com.github.catfriend1.syncthingandroid.debug-8HsN-IsVtZXc8GrE5-Hepw==/lib/x86/libsyncthing.so" // Example: mSyncthingBinary="/data/app/com.github.catfriend1.syncthingandroid.debug-8HsN-IsVtZXc8GrE5-Hepw==/lib/x86/libsyncthing.so"
mSyncthingBinary = Constants.getSyncthingBinary(mContext); mSyncthingBinary = Constants.getSyncthingBinary(mContext);

View file

@ -48,7 +48,7 @@ public class SyncthingService extends Service {
private static final String TAG = "SyncthingService"; private static final String TAG = "SyncthingService";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
/** /**
* Intent action to perform a Syncthing restart. * Intent action to perform a Syncthing restart.
@ -213,10 +213,11 @@ public class SyncthingService extends Service {
*/ */
@Override @Override
public void onCreate() { public void onCreate() {
LogV("onCreate");
super.onCreate(); super.onCreate();
PRNGFixes.apply(); PRNGFixes.apply();
((SyncthingApp) getApplication()).component().inject(this); ((SyncthingApp) getApplication()).component().inject(this);
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(mPreferences);
LogV("onCreate");
mHandler = new Handler(); mHandler = new Handler();
/** /**
@ -521,7 +522,6 @@ public class SyncthingService extends Service {
return; return;
} }
Log.v(TAG, "Starting syncthing");
onServiceStateChange(State.STARTING); onServiceStateChange(State.STARTING);
if (mRestApi == null) { if (mRestApi == null) {

View file

@ -13,6 +13,7 @@ import com.nutomic.syncthingandroid.model.FolderIgnoreList;
import com.nutomic.syncthingandroid.model.Gui; import com.nutomic.syncthingandroid.model.Gui;
import com.nutomic.syncthingandroid.model.Options; import com.nutomic.syncthingandroid.model.Options;
import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.service.AppPrefs;
import com.nutomic.syncthingandroid.service.Constants; import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.SyncthingRunnable; import com.nutomic.syncthingandroid.service.SyncthingRunnable;
@ -61,7 +62,7 @@ public class ConfigXml {
private static final String TAG = "ConfigXml"; private static final String TAG = "ConfigXml";
private static final Boolean ENABLE_VERBOSE_LOG = false; private Boolean ENABLE_VERBOSE_LOG = false;
public class OpenConfigException extends RuntimeException { public class OpenConfigException extends RuntimeException {
} }
@ -98,6 +99,7 @@ public class ConfigXml {
public ConfigXml(Context context) { public ConfigXml(Context context) {
mContext = context; mContext = context;
ENABLE_VERBOSE_LOG = AppPrefs.getPrefVerboseLog(context);
mConfigFile = Constants.getConfigFile(mContext); mConfigFile = Constants.getConfigFile(mContext);
} }

View file

@ -569,6 +569,10 @@ Please report any problems you encounter via Github.</string>
<string name="config_imported_successful">Config was imported</string> <string name="config_imported_successful">Config was imported</string>
<string name="config_import_failed">Config import failed, make sure files are in %1$s</string> <string name="config_import_failed">Config import failed, make sure files are in %1$s</string>
<string name="dialog_settings_restart_app_title">Restart required</string>
<string name="dialog_settings_restart_app_question">Changing this option requires an immediate restart of the app. All other changes will be discarded. Continue?</string>
<!-- Title for the preference to set STTRACE parameters --> <!-- Title for the preference to set STTRACE parameters -->
<string name="sttrace_title">STTRACE Options</string> <string name="sttrace_title">STTRACE Options</string>
@ -601,6 +605,10 @@ Please report any problems you encounter via Github.</string>
<string name="category_about">About</string> <string name="category_about">About</string>
<string name="verbose_log_title">Verbose log</string>
<string name="verbose_log_summary">Enabling this option will help to generate debug logs at a very detailed level.</string>
<!-- Settings item that opens the log activity --> <!-- Settings item that opens the log activity -->
<string name="open_log">Open Log</string> <string name="open_log">Open Log</string>

View file

@ -78,12 +78,14 @@
android:key="category_behaviour" android:key="category_behaviour"
android:title="@string/category_behaviour"> android:title="@string/category_behaviour">
<!-- Autostart on boot -->
<CheckBoxPreference <CheckBoxPreference
android:key="always_run_in_background" android:key="always_run_in_background"
android:title="@string/behaviour_autostart_title" android:title="@string/behaviour_autostart_title"
android:summary="@string/behaviour_autostart_summary" android:summary="@string/behaviour_autostart_summary"
android:defaultValue="false" /> android:defaultValue="false" />
<!-- Use root -->
<CheckBoxPreference <CheckBoxPreference
android:key="use_root" android:key="use_root"
android:title="@string/use_root_title" android:title="@string/use_root_title"
@ -217,12 +219,21 @@
<PreferenceScreen <PreferenceScreen
android:title="@string/category_debug"> android:title="@string/category_debug">
<!-- Report issue -->
<Preference <Preference
android:key="open_issue_tracker" android:key="open_issue_tracker"
android:persistent="false" android:persistent="false"
android:title="@string/report_issue_title"> android:title="@string/report_issue_title">
</Preference> </Preference>
<!-- Verbose log -->
<CheckBoxPreference
android:key="verbose_log"
android:title="@string/verbose_log_title"
android:summary="@string/verbose_log_summary"
android:defaultValue="false" />
<!-- Open Android or SyncthingNative log -->
<Preference <Preference
android:title="@string/open_log" android:title="@string/open_log"
android:summary="@string/open_log_summary"> android:summary="@string/open_log_summary">
@ -230,21 +241,25 @@
android:action=".activities.LogActivity" /> android:action=".activities.LogActivity" />
</Preference> </Preference>
<!-- STTRACE facility chooser dialog -->
<com.nutomic.syncthingandroid.views.SttracePreference <com.nutomic.syncthingandroid.views.SttracePreference
android:key="debug_facilities_enabled" android:key="debug_facilities_enabled"
android:title="@string/sttrace_title" /> android:title="@string/sttrace_title" />
<!-- Environment variables -->
<EditTextPreference <EditTextPreference
android:key="environment_variables" android:key="environment_variables"
android:title="@string/environment_variables" android:title="@string/environment_variables"
android:singleLine="true" android:singleLine="true"
android:inputType="textNoSuggestions"/> android:inputType="textNoSuggestions"/>
<!-- Reset database -->
<Preference <Preference
android:key="st_reset_database" android:key="st_reset_database"
android:title="@string/st_reset_database_title" android:title="@string/st_reset_database_title"
android:singleLine="true" /> android:singleLine="true" />
<!-- Reset index database -->
<Preference <Preference
android:key="st_reset_deltas" android:key="st_reset_deltas"
android:title="@string/st_reset_deltas_title" android:title="@string/st_reset_deltas_title"