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<>();