diff --git a/res/layout/activity_device.xml b/res/layout/activity_device.xml
index 9bb47993..43028053 100644
--- a/res/layout/activity_device.xml
+++ b/res/layout/activity_device.xml
@@ -70,7 +70,7 @@
+
+
Rename
Refresh
This paired device is not reachable. Make sure it is connected to your same network.
+ It looks like you are on a mobile data connection. KDE Connect only works on local networks.
There are no file browsers installed.
Send SMS
Send text messages from your desktop
diff --git a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java
index f6f0583e..867ce6db 100644
--- a/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java
+++ b/src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java
@@ -31,6 +31,7 @@ import org.kde.kdeconnect.Backends.BaseLinkProvider;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
+import org.kde.kdeconnect.Helpers.NetworkHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.NetworkPackage;
@@ -362,6 +363,11 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
private void broadcastUdpPackage() {
+ if (NetworkHelper.isOnMobileNetwork(context)) {
+ Log.w("LanLinkProvider", "On 3G network, not sending broadcast.");
+ return;
+ }
+
new Thread(new Runnable() {
@Override
public void run() {
diff --git a/src/org/kde/kdeconnect/BackgroundService.java b/src/org/kde/kdeconnect/BackgroundService.java
index 7b5ef04a..ca6c2cca 100644
--- a/src/org/kde/kdeconnect/BackgroundService.java
+++ b/src/org/kde/kdeconnect/BackgroundService.java
@@ -119,7 +119,7 @@ public class BackgroundService extends Service {
}
};
- private void onDeviceListChanged() {
+ public void onDeviceListChanged() {
for(DeviceListChangedCallback callback : deviceListChangedCallbacks.values()) {
callback.onDeviceListChanged();
}
diff --git a/src/org/kde/kdeconnect/Helpers/NetworkHelper.java b/src/org/kde/kdeconnect/Helpers/NetworkHelper.java
new file mode 100644
index 00000000..0f6d17cd
--- /dev/null
+++ b/src/org/kde/kdeconnect/Helpers/NetworkHelper.java
@@ -0,0 +1,16 @@
+package org.kde.kdeconnect.Helpers;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.util.Log;
+
+public class NetworkHelper {
+
+ public static boolean isOnMobileNetwork(Context context) {
+ final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo info = connMgr.getActiveNetworkInfo();
+ return (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE);
+ }
+
+}
diff --git a/src/org/kde/kdeconnect/KdeConnectBroadcastReceiver.java b/src/org/kde/kdeconnect/KdeConnectBroadcastReceiver.java
index e43afbab..2cb73f34 100644
--- a/src/org/kde/kdeconnect/KdeConnectBroadcastReceiver.java
+++ b/src/org/kde/kdeconnect/KdeConnectBroadcastReceiver.java
@@ -67,6 +67,7 @@ public class KdeConnectBroadcastReceiver extends BroadcastReceiver
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(BackgroundService service) {
+ service.onDeviceListChanged();
service.onNetworkChange();
}
});
diff --git a/src/org/kde/kdeconnect/UserInterface/DeviceFragment.java b/src/org/kde/kdeconnect/UserInterface/DeviceFragment.java
index f3a7cde3..820e8deb 100644
--- a/src/org/kde/kdeconnect/UserInterface/DeviceFragment.java
+++ b/src/org/kde/kdeconnect/UserInterface/DeviceFragment.java
@@ -40,6 +40,7 @@ import android.widget.TextView;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
+import org.kde.kdeconnect.Helpers.NetworkHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.UserInterface.List.CustomItem;
@@ -333,9 +334,11 @@ public class DeviceFragment extends Fragment {
boolean paired = device.isPaired();
boolean reachable = device.isReachable();
+ boolean onData = NetworkHelper.isOnMobileNetwork(getContext());
rootView.findViewById(R.id.pairing_buttons).setVisibility(paired ? View.GONE : View.VISIBLE);
- rootView.findViewById(R.id.unpair_message).setVisibility((paired && !reachable) ? View.VISIBLE : View.GONE);
+ rootView.findViewById(R.id.not_reachable_message).setVisibility((paired && !reachable && !onData) ? View.VISIBLE : View.GONE);
+ rootView.findViewById(R.id.on_data_message).setVisibility((paired && !reachable && onData) ? View.VISIBLE : View.GONE);
try {
ArrayList items = new ArrayList<>();
diff --git a/src/org/kde/kdeconnect/UserInterface/PairingFragment.java b/src/org/kde/kdeconnect/UserInterface/PairingFragment.java
index ecf65b0a..c5fe6225 100644
--- a/src/org/kde/kdeconnect/UserInterface/PairingFragment.java
+++ b/src/org/kde/kdeconnect/UserInterface/PairingFragment.java
@@ -36,6 +36,7 @@ import android.widget.TextView;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
+import org.kde.kdeconnect.Helpers.NetworkHelper;
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
import org.kde.kdeconnect.UserInterface.List.PairingDeviceItem;
import org.kde.kdeconnect.UserInterface.List.SectionItem;
@@ -60,6 +61,8 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
boolean listRefreshCalledThisFrame = false;
+ TextView headerText;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -74,10 +77,10 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
rootView = inflater.inflate(R.layout.activity_list, container, false);
- TextView text = new TextView(inflater.getContext());
- text.setText(getString(R.string.pairing_description));
- text.setPadding(0, (int) (16 * getResources().getDisplayMetrics().density), 0, (int) (12 * getResources().getDisplayMetrics().density));
- ((ListView) rootView).addHeaderView(text);
+ headerText = new TextView(inflater.getContext());
+ headerText.setText(getString(R.string.pairing_description));
+ headerText.setPadding(0, (int) (16 * getResources().getDisplayMetrics().density), 0, (int) (12 * getResources().getDisplayMetrics().density));
+ ((ListView) rootView).addHeaderView(headerText);
return rootView;
}
@@ -104,6 +107,8 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
}
listRefreshCalledThisFrame = true;
+ headerText.setText(getString(NetworkHelper.isOnMobileNetwork(getContext()) ? R.string.on_data_message : R.string.pairing_description));
+
try {
Collection devices = service.getDevices().values();
final ArrayList items = new ArrayList<>();