From dbeef621a007cac2ca91a031291964946d7cebfb Mon Sep 17 00:00:00 2001 From: Rares Vanca Date: Sat, 20 Dec 2025 14:34:23 +0200 Subject: [PATCH 01/41] Refactor project structure for compose migration --- app/src/main/AndroidManifest.xml | 20 ++++---- .../warpinator/{ => app}/WarpinatorApp.java | 6 ++- .../warpinator/{ => core/model}/Remote.java | 18 +++++-- .../warpinator/{ => core/model}/Transfer.java | 23 ++++++--- .../{ => core/network}/Authenticator.java | 7 ++- .../{ => core/network}/CertServer.java | 3 +- .../warpinator/{ => core/network}/Server.java | 28 ++++++---- .../{ => core/service}/GrpcService.java | 46 ++++------------- .../{ => core/service}/MainService.java | 34 +++++++++---- .../core/service/RegistrationService.java | 51 +++++++++++++++++++ .../{ => core/service}/TileMainService.java | 6 ++- .../{ => core/utils}/Autostart.java | 4 +- .../warpinator/{ => core/utils}/Utils.java | 19 ++++--- .../{ => core/utils}/ZlibCompressor.java | 2 +- .../{ => legacy}/AboutActivity.java | 6 ++- .../{ => legacy}/LocalBroadcasts.java | 2 +- .../warpinator/{ => legacy}/MainActivity.java | 8 ++- .../{ => legacy}/MainServiceBinder.java | 4 +- .../{ => legacy}/RemotesAdapter.java | 7 ++- .../{ => legacy}/SettingsActivity.java | 10 ++-- .../{ => legacy}/ShareActivity.java | 9 +++- .../{ => legacy}/TransfersActivity.java | 10 +++- .../{ => legacy}/TransfersAdapter.java | 7 ++- .../preferences/EditTextPreference.java | 2 +- .../preferences/ListPreference.java | 2 +- .../preferences/ProfilePicturePreference.java | 6 +-- .../preferences/ResetablePreference.java | 2 +- app/src/main/res/layout/activity_about.xml | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/activity_share.xml | 2 +- .../main/res/layout/activity_transfers.xml | 2 +- app/src/main/res/xml/root_preferences.xml | 16 +++--- 32 files changed, 241 insertions(+), 125 deletions(-) rename app/src/main/java/slowscript/warpinator/{ => app}/WarpinatorApp.java (94%) rename app/src/main/java/slowscript/warpinator/{ => core/model}/Remote.java (96%) rename app/src/main/java/slowscript/warpinator/{ => core/model}/Transfer.java (97%) rename app/src/main/java/slowscript/warpinator/{ => core/network}/Authenticator.java (97%) rename app/src/main/java/slowscript/warpinator/{ => core/network}/CertServer.java (97%) rename app/src/main/java/slowscript/warpinator/{ => core/network}/Server.java (96%) rename app/src/main/java/slowscript/warpinator/{ => core/service}/GrpcService.java (80%) rename app/src/main/java/slowscript/warpinator/{ => core/service}/MainService.java (95%) create mode 100644 app/src/main/java/slowscript/warpinator/core/service/RegistrationService.java rename app/src/main/java/slowscript/warpinator/{ => core/service}/TileMainService.java (96%) rename app/src/main/java/slowscript/warpinator/{ => core/utils}/Autostart.java (92%) rename app/src/main/java/slowscript/warpinator/{ => core/utils}/Utils.java (96%) rename app/src/main/java/slowscript/warpinator/{ => core/utils}/ZlibCompressor.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/AboutActivity.java (91%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/LocalBroadcasts.java (98%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/MainActivity.java (98%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/MainServiceBinder.java (74%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/RemotesAdapter.java (94%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/SettingsActivity.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/ShareActivity.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/TransfersActivity.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/TransfersAdapter.java (98%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/preferences/EditTextPreference.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/preferences/ListPreference.java (96%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/preferences/ProfilePicturePreference.java (97%) rename app/src/main/java/slowscript/warpinator/{ => legacy}/preferences/ResetablePreference.java (96%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7b88162b..42244c0b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,10 +24,10 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" - android:name=".WarpinatorApp"> + android:name=".app.WarpinatorApp"> @@ -41,11 +41,11 @@ - - @@ -58,14 +58,14 @@ - - - @@ -85,17 +85,17 @@ - - - transfers = new ArrayList<>(); + public ArrayList transfers = new ArrayList<>(); ManagedChannel channel; WarpGrpc.WarpBlockingStub blockingStub; @@ -206,7 +216,7 @@ public boolean isFavorite() { } // This does not update uuid, ip and authPort - void updateFromServiceRegistration(WarpProto.ServiceRegistration reg) { + public void updateFromServiceRegistration(WarpProto.ServiceRegistration reg) { hostname = reg.getHostname(); api = reg.getApiVersion(); port = reg.getPort(); @@ -215,7 +225,7 @@ void updateFromServiceRegistration(WarpProto.ServiceRegistration reg) { staticService = true; } - boolean sameSubnetWarning() { + public boolean sameSubnetWarning() { if (status == RemoteStatus.CONNECTED) return false; if (MainService.svc.currentIPInfo == null) diff --git a/app/src/main/java/slowscript/warpinator/Transfer.java b/app/src/main/java/slowscript/warpinator/core/model/Transfer.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/Transfer.java rename to app/src/main/java/slowscript/warpinator/core/model/Transfer.java index 82576fba..548c8e64 100644 --- a/app/src/main/java/slowscript/warpinator/Transfer.java +++ b/app/src/main/java/slowscript/warpinator/core/model/Transfer.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.model; import android.Manifest; import android.app.Notification; @@ -38,9 +38,18 @@ import io.grpc.StatusException; import io.grpc.stub.CallStreamObserver; +import slowscript.warpinator.BuildConfig; +import slowscript.warpinator.R; +import slowscript.warpinator.WarpProto; +import slowscript.warpinator.legacy.LocalBroadcasts; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.legacy.TransfersActivity; +import slowscript.warpinator.core.utils.Utils; +import slowscript.warpinator.core.utils.ZlibCompressor; import static java.util.zip.Deflater.DEFAULT_COMPRESSION; -import static slowscript.warpinator.MainService.svc; +import static slowscript.warpinator.core.service.MainService.svc; public class Transfer { public enum Direction { SEND, RECEIVE } @@ -82,8 +91,8 @@ static final class FileType { private String currentRelativePath; private long currentLastMod = -1; - Uri currentUri; - File currentFile; + public Uri currentUri; + public File currentFile; private OutputStream currentStream; private boolean safeOverwriteFlag = false; public final ArrayList errors = new ArrayList<>(); @@ -124,7 +133,7 @@ public int getProgress() { return (int)((float)bytesTransferred / totalSize * 100f); } - void updateUI() { + public void updateUI() { long now = System.currentTimeMillis(); if (getStatus() == Status.TRANSFERRING && (now - lastUiUpdate) < UI_UPDATE_LIMIT) return; @@ -398,7 +407,7 @@ else if (Server.current.notifyIncoming && notify) { //Notification } } - void startReceive() { + public void startReceive() { Log.i(TAG, "Transfer accepted, compression " + useCompression); setStatus(Status.TRANSFERRING); actualStartTime = System.currentTimeMillis(); @@ -410,7 +419,7 @@ void startReceive() { svc.wakeLock.acquire(MainService.WAKELOCK_TIMEOUT*60*1000L); } - void declineTransfer() { + public void declineTransfer() { Log.i(TAG, "Transfer declined"); Remote r = MainService.remotes.get(remoteUUID); if (r != null) diff --git a/app/src/main/java/slowscript/warpinator/Authenticator.java b/app/src/main/java/slowscript/warpinator/core/network/Authenticator.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/Authenticator.java rename to app/src/main/java/slowscript/warpinator/core/network/Authenticator.java index 119cea1f..aac7bfae 100644 --- a/app/src/main/java/slowscript/warpinator/Authenticator.java +++ b/app/src/main/java/slowscript/warpinator/core/network/Authenticator.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.network; import android.util.Base64; import android.util.Log; @@ -44,6 +44,9 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.utils.Utils; + public class Authenticator { private static final String TAG = "AUTH"; public static String DEFAULT_GROUP_CODE = "Warpinator"; @@ -55,7 +58,7 @@ public class Authenticator { static String cert_begin = "-----BEGIN CERTIFICATE-----\n"; static String cert_end = "-----END CERTIFICATE-----"; - static Exception certException = null; + public static Exception certException = null; public static byte[] getBoxedCertificate() { byte[] bytes = new byte[0]; diff --git a/app/src/main/java/slowscript/warpinator/CertServer.java b/app/src/main/java/slowscript/warpinator/core/network/CertServer.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/CertServer.java rename to app/src/main/java/slowscript/warpinator/core/network/CertServer.java index c89e289f..59f245c9 100644 --- a/app/src/main/java/slowscript/warpinator/CertServer.java +++ b/app/src/main/java/slowscript/warpinator/core/network/CertServer.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.network; import android.util.Base64; import android.util.Log; @@ -6,7 +6,6 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; -import java.net.SocketException; import java.util.Arrays; public class CertServer implements Runnable{ diff --git a/app/src/main/java/slowscript/warpinator/Server.java b/app/src/main/java/slowscript/warpinator/core/network/Server.java similarity index 96% rename from app/src/main/java/slowscript/warpinator/Server.java rename to app/src/main/java/slowscript/warpinator/core/network/Server.java index 375baf93..324acca5 100644 --- a/app/src/main/java/slowscript/warpinator/Server.java +++ b/app/src/main/java/slowscript/warpinator/core/network/Server.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.network; import android.content.Context; import android.content.SharedPreferences; @@ -25,7 +25,6 @@ import java.io.IOException; import java.net.Inet4Address; import java.net.InetAddress; -import java.security.Security; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.Arrays; @@ -58,6 +57,15 @@ import io.grpc.netty.NettyServerBuilder; import io.grpc.okhttp.OkHttpChannelBuilder; import io.netty.handler.ssl.SslContextBuilder; +import slowscript.warpinator.R; +import slowscript.warpinator.WarpProto; +import slowscript.warpinator.WarpRegistrationGrpc; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.service.GrpcService; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.service.RegistrationService; +import slowscript.warpinator.legacy.LocalBroadcasts; +import slowscript.warpinator.core.utils.Utils; public class Server { private static final String TAG = "SRV"; @@ -80,7 +88,7 @@ public class Server { public ArrayList recentRemotes = new ArrayList<>(); // recent manually connected remotes public boolean useCompression; - JmDNS jmdns; + public JmDNS jmdns; private ServiceInfo serviceInfo; private final ServiceListener serviceListener; private final SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener; @@ -189,7 +197,7 @@ void loadSettings() { svc.prefs.edit().putBoolean("autoStop", false).apply(); } - void saveFavorites() { + public void saveFavorites() { svc.prefs.edit().putStringSet("favorites", favorites).apply(); } @@ -265,7 +273,7 @@ void registerService(boolean flush) { } } - WarpProto.ServiceRegistration getServiceRegistrationMsg() { + public WarpProto.ServiceRegistration getServiceRegistrationMsg() { return WarpProto.ServiceRegistration.newBuilder() .setServiceId(uuid) .setIp(svc.getCurrentIPStr()) @@ -276,7 +284,7 @@ WarpProto.ServiceRegistration getServiceRegistrationMsg() { .build(); } - void registerWithHost(String host) { + public void registerWithHost(String host) { svc.executor.submit(() -> { Log.d(TAG, "Registering with host " + host); ManagedChannel channel = null; @@ -330,7 +338,7 @@ void registerWithHost(String host) { }); } - void reannounce() { + public void reannounce() { svc.executor.submit(()->{ Log.d(TAG, "Reannouncing"); try { @@ -350,7 +358,7 @@ void reannounce() { }); } - void rescan() { + public void rescan() { svc.executor.submit(()->{ Log.d(TAG, "Rescanning"); //Need a new one every time since it can only run three times @@ -397,7 +405,7 @@ DNSOutgoing dnsAddAnswer(DNSOutgoing out, DNSIncoming in, DNSRecord rec) throws return newOut; } - void addRemote(Remote remote) { + public void addRemote(Remote remote) { //Add to remotes list MainService.remotes.put(remote.uuid, remote); svc.notifyDeviceCountUpdate(); @@ -523,7 +531,7 @@ public static Bitmap getProfilePicture(String picture, Context ctx) { return bmp; } - ByteString getProfilePictureBytes() { + public ByteString getProfilePictureBytes() { ByteArrayOutputStream os = new ByteArrayOutputStream(); Bitmap bmp = getProfilePicture(profilePicture, svc); bmp.compress(Bitmap.CompressFormat.PNG, 90, os); diff --git a/app/src/main/java/slowscript/warpinator/GrpcService.java b/app/src/main/java/slowscript/warpinator/core/service/GrpcService.java similarity index 80% rename from app/src/main/java/slowscript/warpinator/GrpcService.java rename to app/src/main/java/slowscript/warpinator/core/service/GrpcService.java index 19d8545e..8568b0e7 100644 --- a/app/src/main/java/slowscript/warpinator/GrpcService.java +++ b/app/src/main/java/slowscript/warpinator/core/service/GrpcService.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.service; import android.util.Base64; import android.util.Log; @@ -10,6 +10,14 @@ import io.grpc.StatusException; import io.grpc.stub.ServerCallStreamObserver; import io.grpc.stub.StreamObserver; +import slowscript.warpinator.WarpGrpc; +import slowscript.warpinator.WarpProto; +import slowscript.warpinator.WarpRegistrationGrpc; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.model.Transfer; +import slowscript.warpinator.core.network.Authenticator; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.utils.Utils; public class GrpcService extends WarpGrpc.WarpImplBase { static String TAG = "GRPC"; @@ -209,39 +217,3 @@ void returnVoid(StreamObserver responseObserver) { } } -class RegistrationService extends WarpRegistrationGrpc.WarpRegistrationImplBase { - private static final String TAG = "REG_V2"; - @Override - public void requestCertificate(WarpProto.RegRequest request, StreamObserver responseObserver) { - byte[] cert = Authenticator.getBoxedCertificate(); - byte[] sendData = Base64.encode(cert, Base64.DEFAULT); - Log.v(TAG, "Sending certificate to " + request.getHostname() + " ; IP=" + request.getIp()); // IP can by mine (Linux impl) or remote's - responseObserver.onNext(WarpProto.RegResponse.newBuilder().setLockedCertBytes(ByteString.copyFrom(sendData)).build()); - responseObserver.onCompleted(); - } - - @Override - public void registerService(WarpProto.ServiceRegistration req, StreamObserver responseObserver) { - Remote r = MainService.remotes.get(req.getServiceId()); - Log.i(TAG, "Service registration from " + req.getServiceId()); - if (r != null) { - if (r.status != Remote.RemoteStatus.CONNECTED) { - r.address = InetAddresses.forString(req.getIp()); - r.authPort = req.getAuthPort(); - r.updateFromServiceRegistration(req); - if (r.status == Remote.RemoteStatus.DISCONNECTED || r.status == Remote.RemoteStatus.ERROR) - r.connect(); - else r.updateUI(); - } else Log.w("REG_V2", "Attempted registration from already connected remote"); - } else { - r = new Remote(); - r.uuid = req.getServiceId(); - r.address = InetAddresses.forString(req.getIp()); - r.authPort = req.getAuthPort(); - r.updateFromServiceRegistration(req); - Server.current.addRemote(r); - } - responseObserver.onNext(Server.current.getServiceRegistrationMsg()); - responseObserver.onCompleted(); - } -} diff --git a/app/src/main/java/slowscript/warpinator/MainService.java b/app/src/main/java/slowscript/warpinator/core/service/MainService.java similarity index 95% rename from app/src/main/java/slowscript/warpinator/MainService.java rename to app/src/main/java/slowscript/warpinator/core/service/MainService.java index fe6eb756..8cadd73e 100644 --- a/app/src/main/java/slowscript/warpinator/MainService.java +++ b/app/src/main/java/slowscript/warpinator/core/service/MainService.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.service; import android.app.Notification; import android.app.NotificationChannel; @@ -45,6 +45,18 @@ import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; +import slowscript.warpinator.R; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.model.Transfer; +import slowscript.warpinator.core.network.Authenticator; +import slowscript.warpinator.legacy.LocalBroadcasts; +import slowscript.warpinator.legacy.MainActivity; +import slowscript.warpinator.legacy.MainServiceBinder; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.legacy.TransfersActivity; +import slowscript.warpinator.core.utils.Utils; +import slowscript.warpinator.app.WarpinatorApp; + public class MainService extends Service { private static final String TAG = "SERVICE"; @@ -52,9 +64,9 @@ public class MainService extends Service { public static String CHANNEL_INCOMING = "IncomingTransfer"; public static String CHANNEL_PROGRESS = "TransferProgress"; static int SVC_NOTIFICATION_ID = 1; - static int PROGRESS_NOTIFICATION_ID = 2; + public static int PROGRESS_NOTIFICATION_ID = 2; static String ACTION_STOP = "StopSvc"; - static int WAKELOCK_TIMEOUT = 10; // 10 min + public static int WAKELOCK_TIMEOUT = 10; // 10 min static long pingTime = 10_000; static long reconnectTime = 40_000; static long autoStopTime = 60_000; @@ -62,17 +74,17 @@ public class MainService extends Service { public int runningTransfers = 0; public boolean networkAvailable = false; public boolean apOn = false; - int notifId = 1300; - Utils.IPInfo currentIPInfo = null; + public int notifId = 1300; + public Utils.IPInfo currentIPInfo = null; public static MainService svc; public static ConcurrentHashMap remotes = new ConcurrentHashMap<>(); public static final ArrayList> remoteCountObservers = new ArrayList<>(); public static List remotesOrder = Collections.synchronizedList(new ArrayList<>()); - SharedPreferences prefs; - ExecutorService executor = Executors.newCachedThreadPool(); + public SharedPreferences prefs; + public ExecutorService executor = Executors.newCachedThreadPool(); public NotificationManagerCompat notificationMgr; - PowerManager.WakeLock wakeLock; + public PowerManager.WakeLock wakeLock; private NotificationCompat.Builder notifBuilder = null; private Server server; @@ -204,7 +216,7 @@ private void stopServer () { logcatProcess.destroy(); } - static void scheduleAutoStop() { + public static void scheduleAutoStop() { if (svc != null && svc.runningTransfers == 0 && svc.autoStopTask == null && svc.isAutoStopEnabled() && WarpinatorApp.activitiesRunning < 1) { svc.autoStopTask = new TimerTask() { @@ -220,7 +232,7 @@ public void run() { } } - static void cancelAutoStop() { + public static void cancelAutoStop() { if (svc != null && svc.autoStopTask != null) { Log.d(TAG, "Cancelling AutoStop"); svc.autoStopTask.cancel(); @@ -370,7 +382,7 @@ private void onNetworkChanged() { } } - String getCurrentIPStr() { + public String getCurrentIPStr() { return currentIPInfo == null ? null : currentIPInfo.address.getHostAddress(); } diff --git a/app/src/main/java/slowscript/warpinator/core/service/RegistrationService.java b/app/src/main/java/slowscript/warpinator/core/service/RegistrationService.java new file mode 100644 index 00000000..cb43615b --- /dev/null +++ b/app/src/main/java/slowscript/warpinator/core/service/RegistrationService.java @@ -0,0 +1,51 @@ +package slowscript.warpinator.core.service; + +import android.util.Base64; +import android.util.Log; + +import com.google.common.net.InetAddresses; +import com.google.protobuf.ByteString; + +import io.grpc.stub.StreamObserver; +import slowscript.warpinator.WarpProto; +import slowscript.warpinator.WarpRegistrationGrpc; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.network.Authenticator; +import slowscript.warpinator.core.network.Server; + +public class RegistrationService extends WarpRegistrationGrpc.WarpRegistrationImplBase { + private static final String TAG = "REG_V2"; + @Override + public void requestCertificate(WarpProto.RegRequest request, StreamObserver responseObserver) { + byte[] cert = Authenticator.getBoxedCertificate(); + byte[] sendData = Base64.encode(cert, Base64.DEFAULT); + Log.v(TAG, "Sending certificate to " + request.getHostname() + " ; IP=" + request.getIp()); // IP can by mine (Linux impl) or remote's + responseObserver.onNext(WarpProto.RegResponse.newBuilder().setLockedCertBytes(ByteString.copyFrom(sendData)).build()); + responseObserver.onCompleted(); + } + + @Override + public void registerService(WarpProto.ServiceRegistration req, StreamObserver responseObserver) { + Remote r = MainService.remotes.get(req.getServiceId()); + Log.i(TAG, "Service registration from " + req.getServiceId()); + if (r != null) { + if (r.status != Remote.RemoteStatus.CONNECTED) { + r.address = InetAddresses.forString(req.getIp()); + r.authPort = req.getAuthPort(); + r.updateFromServiceRegistration(req); + if (r.status == Remote.RemoteStatus.DISCONNECTED || r.status == Remote.RemoteStatus.ERROR) + r.connect(); + else r.updateUI(); + } else Log.w("REG_V2", "Attempted registration from already connected remote"); + } else { + r = new Remote(); + r.uuid = req.getServiceId(); + r.address = InetAddresses.forString(req.getIp()); + r.authPort = req.getAuthPort(); + r.updateFromServiceRegistration(req); + Server.current.addRemote(r); + } + responseObserver.onNext(Server.current.getServiceRegistrationMsg()); + responseObserver.onCompleted(); + } +} diff --git a/app/src/main/java/slowscript/warpinator/TileMainService.java b/app/src/main/java/slowscript/warpinator/core/service/TileMainService.java similarity index 96% rename from app/src/main/java/slowscript/warpinator/TileMainService.java rename to app/src/main/java/slowscript/warpinator/core/service/TileMainService.java index 90c6ad30..36fa453e 100644 --- a/app/src/main/java/slowscript/warpinator/TileMainService.java +++ b/app/src/main/java/slowscript/warpinator/core/service/TileMainService.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.service; import android.content.ComponentName; import android.content.Context; @@ -13,6 +13,10 @@ import androidx.annotation.RequiresApi; +import slowscript.warpinator.R; +import slowscript.warpinator.legacy.MainServiceBinder; +import slowscript.warpinator.core.utils.Utils; + @RequiresApi(api = Build.VERSION_CODES.N) public class TileMainService extends TileService implements MainService.RemoteCountObserver { private Intent serviceIntent; diff --git a/app/src/main/java/slowscript/warpinator/Autostart.java b/app/src/main/java/slowscript/warpinator/core/utils/Autostart.java similarity index 92% rename from app/src/main/java/slowscript/warpinator/Autostart.java rename to app/src/main/java/slowscript/warpinator/core/utils/Autostart.java index a3326a0f..a481df76 100644 --- a/app/src/main/java/slowscript/warpinator/Autostart.java +++ b/app/src/main/java/slowscript/warpinator/core/utils/Autostart.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.utils; import android.content.BroadcastReceiver; import android.content.Context; @@ -9,6 +9,8 @@ import androidx.preference.PreferenceManager; +import slowscript.warpinator.core.service.MainService; + public class Autostart extends BroadcastReceiver { @Override diff --git a/app/src/main/java/slowscript/warpinator/Utils.java b/app/src/main/java/slowscript/warpinator/core/utils/Utils.java similarity index 96% rename from app/src/main/java/slowscript/warpinator/Utils.java rename to app/src/main/java/slowscript/warpinator/core/utils/Utils.java index 38523f6e..e0632f31 100644 --- a/app/src/main/java/slowscript/warpinator/Utils.java +++ b/app/src/main/java/slowscript/warpinator/core/utils/Utils.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.utils; import android.annotation.SuppressLint; import android.app.ActivityManager; @@ -66,6 +66,11 @@ import java.util.Random; import io.grpc.stub.StreamObserver; +import slowscript.warpinator.R; +import slowscript.warpinator.WarpProto; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.service.MainService; import static android.content.Context.CONNECTIVITY_SERVICE; import static android.content.Context.WIFI_SERVICE; @@ -239,7 +244,7 @@ static IPInfo getIPForIface(NetworkInterface ni) { return null; } - static boolean isSameSubnet(InetAddress a, InetAddress b, int prefix) { + public static boolean isSameSubnet(InetAddress a, InetAddress b, int prefix) { var aa = a.getAddress(); var ba = b.getAddress(); if (aa.length != ba.length) @@ -284,7 +289,7 @@ public static void displayMessage(Context ctx, String title, String msg, DialogI .show(); } - static void setEdgeToEdge(Window window) { + public static void setEdgeToEdge(Window window) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) // Problems with statusbar icon color on A5 WindowCompat.enableEdgeToEdge(window); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) // No automatic content protection @@ -292,7 +297,7 @@ static void setEdgeToEdge(Window window) { ViewGroupCompat.installCompatInsetsDispatch(window.getDecorView().getRootView()); } - static void setToolbarInsets(View toolbar) { + public static void setToolbarInsets(View toolbar) { ViewCompat.setOnApplyWindowInsetsListener(toolbar, (v, i) -> { Insets insets = i.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout()); v.setPadding(insets.left, insets.top, insets.right, 0); @@ -300,7 +305,7 @@ static void setToolbarInsets(View toolbar) { }); } - static void setContentInsets(View content) { + public static void setContentInsets(View content) { setContentInsets(content, false); } static void setContentInsets(View content, boolean handleIme) { @@ -407,7 +412,7 @@ public static boolean pathExistsInTree(Context ctx, Uri treeUri, String path) { return false; } - static boolean isMyServiceRunning(Context ctx, Class serviceClass) { + public static boolean isMyServiceRunning(Context ctx, Class serviceClass) { ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); assert manager != null; for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { @@ -496,7 +501,7 @@ public static class IPInfo { } } - static class VoidObserver implements StreamObserver { + public static class VoidObserver implements StreamObserver { @Override public void onNext(WarpProto.VoidType value) {} @Override public void onError(Throwable t) { Log.e(TAG, "Call failed with exception", t); diff --git a/app/src/main/java/slowscript/warpinator/ZlibCompressor.java b/app/src/main/java/slowscript/warpinator/core/utils/ZlibCompressor.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/ZlibCompressor.java rename to app/src/main/java/slowscript/warpinator/core/utils/ZlibCompressor.java index a726e8a3..2be5e0fc 100644 --- a/app/src/main/java/slowscript/warpinator/ZlibCompressor.java +++ b/app/src/main/java/slowscript/warpinator/core/utils/ZlibCompressor.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.core.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/app/src/main/java/slowscript/warpinator/AboutActivity.java b/app/src/main/java/slowscript/warpinator/legacy/AboutActivity.java similarity index 91% rename from app/src/main/java/slowscript/warpinator/AboutActivity.java rename to app/src/main/java/slowscript/warpinator/legacy/AboutActivity.java index c8415d31..7435ee08 100644 --- a/app/src/main/java/slowscript/warpinator/AboutActivity.java +++ b/app/src/main/java/slowscript/warpinator/legacy/AboutActivity.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; @@ -11,6 +11,10 @@ import com.google.android.material.appbar.MaterialToolbar; +import slowscript.warpinator.BuildConfig; +import slowscript.warpinator.R; +import slowscript.warpinator.core.utils.Utils; + public class AboutActivity extends AppCompatActivity { TextView versionView, warrantyView; diff --git a/app/src/main/java/slowscript/warpinator/LocalBroadcasts.java b/app/src/main/java/slowscript/warpinator/legacy/LocalBroadcasts.java similarity index 98% rename from app/src/main/java/slowscript/warpinator/LocalBroadcasts.java rename to app/src/main/java/slowscript/warpinator/legacy/LocalBroadcasts.java index 25424785..5f4856d0 100644 --- a/app/src/main/java/slowscript/warpinator/LocalBroadcasts.java +++ b/app/src/main/java/slowscript/warpinator/legacy/LocalBroadcasts.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.content.Context; import android.content.Intent; diff --git a/app/src/main/java/slowscript/warpinator/MainActivity.java b/app/src/main/java/slowscript/warpinator/legacy/MainActivity.java similarity index 98% rename from app/src/main/java/slowscript/warpinator/MainActivity.java rename to app/src/main/java/slowscript/warpinator/legacy/MainActivity.java index 7d705d8c..ec1f1dec 100644 --- a/app/src/main/java/slowscript/warpinator/MainActivity.java +++ b/app/src/main/java/slowscript/warpinator/legacy/MainActivity.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.Manifest; import android.app.Activity; @@ -48,6 +48,12 @@ import java.io.OutputStream; import java.util.ArrayList; +import slowscript.warpinator.R; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.utils.Utils; + public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback { private static final String TAG = "MAIN"; diff --git a/app/src/main/java/slowscript/warpinator/MainServiceBinder.java b/app/src/main/java/slowscript/warpinator/legacy/MainServiceBinder.java similarity index 74% rename from app/src/main/java/slowscript/warpinator/MainServiceBinder.java rename to app/src/main/java/slowscript/warpinator/legacy/MainServiceBinder.java index 146eda25..fef06708 100644 --- a/app/src/main/java/slowscript/warpinator/MainServiceBinder.java +++ b/app/src/main/java/slowscript/warpinator/legacy/MainServiceBinder.java @@ -1,7 +1,9 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.os.Binder; +import slowscript.warpinator.core.service.MainService; + public class MainServiceBinder extends Binder { private final MainService service; diff --git a/app/src/main/java/slowscript/warpinator/RemotesAdapter.java b/app/src/main/java/slowscript/warpinator/legacy/RemotesAdapter.java similarity index 94% rename from app/src/main/java/slowscript/warpinator/RemotesAdapter.java rename to app/src/main/java/slowscript/warpinator/legacy/RemotesAdapter.java index 46c2656e..0d766f8e 100644 --- a/app/src/main/java/slowscript/warpinator/RemotesAdapter.java +++ b/app/src/main/java/slowscript/warpinator/legacy/RemotesAdapter.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.app.Activity; import android.content.Context; @@ -15,6 +15,11 @@ import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; +import slowscript.warpinator.R; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.utils.Utils; + public class RemotesAdapter extends RecyclerView.Adapter { Activity app; diff --git a/app/src/main/java/slowscript/warpinator/SettingsActivity.java b/app/src/main/java/slowscript/warpinator/legacy/SettingsActivity.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/SettingsActivity.java rename to app/src/main/java/slowscript/warpinator/legacy/SettingsActivity.java index 0a487e1e..db1df8d4 100644 --- a/app/src/main/java/slowscript/warpinator/SettingsActivity.java +++ b/app/src/main/java/slowscript/warpinator/legacy/SettingsActivity.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.content.ActivityNotFoundException; import android.content.Intent; @@ -24,11 +24,13 @@ import com.google.android.material.appbar.MaterialToolbar; -import java.net.SocketException; import java.util.Objects; -import slowscript.warpinator.preferences.ListPreference; -import slowscript.warpinator.preferences.ResetablePreference; +import slowscript.warpinator.R; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.utils.Utils; +import slowscript.warpinator.legacy.preferences.ListPreference; +import slowscript.warpinator.legacy.preferences.ResetablePreference; public class SettingsActivity extends AppCompatActivity { diff --git a/app/src/main/java/slowscript/warpinator/ShareActivity.java b/app/src/main/java/slowscript/warpinator/legacy/ShareActivity.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/ShareActivity.java rename to app/src/main/java/slowscript/warpinator/legacy/ShareActivity.java index 51b17c21..a959ff32 100644 --- a/app/src/main/java/slowscript/warpinator/ShareActivity.java +++ b/app/src/main/java/slowscript/warpinator/legacy/ShareActivity.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.content.BroadcastReceiver; import android.content.Context; @@ -32,6 +32,13 @@ import java.io.File; import java.util.ArrayList; +import slowscript.warpinator.R; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.model.Transfer; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.utils.Utils; + public class ShareActivity extends AppCompatActivity { static final String TAG = "Share"; diff --git a/app/src/main/java/slowscript/warpinator/TransfersActivity.java b/app/src/main/java/slowscript/warpinator/legacy/TransfersActivity.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/TransfersActivity.java rename to app/src/main/java/slowscript/warpinator/legacy/TransfersActivity.java index b75b5c06..b04ea2fd 100644 --- a/app/src/main/java/slowscript/warpinator/TransfersActivity.java +++ b/app/src/main/java/slowscript/warpinator/legacy/TransfersActivity.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.annotation.SuppressLint; import android.app.Activity; @@ -35,6 +35,14 @@ import java.util.ArrayList; +import slowscript.warpinator.R; +import slowscript.warpinator.app.WarpinatorApp; +import slowscript.warpinator.core.model.Remote; +import slowscript.warpinator.core.model.Transfer; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.service.MainService; +import slowscript.warpinator.core.utils.Utils; + public class TransfersActivity extends AppCompatActivity { static final String TAG = "TransferActivity"; diff --git a/app/src/main/java/slowscript/warpinator/TransfersAdapter.java b/app/src/main/java/slowscript/warpinator/legacy/TransfersAdapter.java similarity index 98% rename from app/src/main/java/slowscript/warpinator/TransfersAdapter.java rename to app/src/main/java/slowscript/warpinator/legacy/TransfersAdapter.java index 7aafd488..a7a5c87e 100644 --- a/app/src/main/java/slowscript/warpinator/TransfersAdapter.java +++ b/app/src/main/java/slowscript/warpinator/legacy/TransfersAdapter.java @@ -1,4 +1,4 @@ -package slowscript.warpinator; +package slowscript.warpinator.legacy; import android.annotation.SuppressLint; import android.content.ClipData; @@ -29,6 +29,11 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.common.base.Joiner; +import slowscript.warpinator.R; +import slowscript.warpinator.core.model.Transfer; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.core.utils.Utils; + public class TransfersAdapter extends RecyclerView.Adapter { TransfersActivity activity; diff --git a/app/src/main/java/slowscript/warpinator/preferences/EditTextPreference.java b/app/src/main/java/slowscript/warpinator/legacy/preferences/EditTextPreference.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/preferences/EditTextPreference.java rename to app/src/main/java/slowscript/warpinator/legacy/preferences/EditTextPreference.java index cd52386b..c08893d5 100644 --- a/app/src/main/java/slowscript/warpinator/preferences/EditTextPreference.java +++ b/app/src/main/java/slowscript/warpinator/legacy/preferences/EditTextPreference.java @@ -1,4 +1,4 @@ -package slowscript.warpinator.preferences; +package slowscript.warpinator.legacy.preferences; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/slowscript/warpinator/preferences/ListPreference.java b/app/src/main/java/slowscript/warpinator/legacy/preferences/ListPreference.java similarity index 96% rename from app/src/main/java/slowscript/warpinator/preferences/ListPreference.java rename to app/src/main/java/slowscript/warpinator/legacy/preferences/ListPreference.java index 1fab8cf7..870e629c 100644 --- a/app/src/main/java/slowscript/warpinator/preferences/ListPreference.java +++ b/app/src/main/java/slowscript/warpinator/legacy/preferences/ListPreference.java @@ -1,4 +1,4 @@ -package slowscript.warpinator.preferences; +package slowscript.warpinator.legacy.preferences; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/slowscript/warpinator/preferences/ProfilePicturePreference.java b/app/src/main/java/slowscript/warpinator/legacy/preferences/ProfilePicturePreference.java similarity index 97% rename from app/src/main/java/slowscript/warpinator/preferences/ProfilePicturePreference.java rename to app/src/main/java/slowscript/warpinator/legacy/preferences/ProfilePicturePreference.java index 28740f52..c609cc01 100644 --- a/app/src/main/java/slowscript/warpinator/preferences/ProfilePicturePreference.java +++ b/app/src/main/java/slowscript/warpinator/legacy/preferences/ProfilePicturePreference.java @@ -1,4 +1,4 @@ -package slowscript.warpinator.preferences; +package slowscript.warpinator.legacy.preferences; import android.app.Activity; import android.content.Context; @@ -21,8 +21,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import slowscript.warpinator.R; -import slowscript.warpinator.Server; -import slowscript.warpinator.SettingsActivity; +import slowscript.warpinator.core.network.Server; +import slowscript.warpinator.legacy.SettingsActivity; public class ProfilePicturePreference extends Preference { diff --git a/app/src/main/java/slowscript/warpinator/preferences/ResetablePreference.java b/app/src/main/java/slowscript/warpinator/legacy/preferences/ResetablePreference.java similarity index 96% rename from app/src/main/java/slowscript/warpinator/preferences/ResetablePreference.java rename to app/src/main/java/slowscript/warpinator/legacy/preferences/ResetablePreference.java index a8a70b30..ab0f95bf 100644 --- a/app/src/main/java/slowscript/warpinator/preferences/ResetablePreference.java +++ b/app/src/main/java/slowscript/warpinator/legacy/preferences/ResetablePreference.java @@ -1,4 +1,4 @@ -package slowscript.warpinator.preferences; +package slowscript.warpinator.legacy.preferences; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 47d5b989..71066fb1 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context=".AboutActivity" + tools:context=".legacy.AboutActivity" android:background="?android:colorBackground"> + tools:context=".legacy.MainActivity"> + tools:context=".legacy.ShareActivity"> + tools:context=".legacy.TransfersActivity">