From 709e043f68b9771ca90a8d5dc5b43ceee27928d4 Mon Sep 17 00:00:00 2001 From: Aditya-Sood Date: Sat, 20 Jul 2019 22:02:05 +0530 Subject: [PATCH] Refactor: Restructure LocalFileTransferActivity Shifted remaining P2P API callbacks and related methods to WifiDirectManager --- .../LocalFileTransferActivity.java | 28 +++++-------------- .../WifiDirectBroadcastReceiver.java | 8 +++--- .../WifiDirectManager.java | 23 ++++++++++++++- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java index 87bf6d3b0..aad6dd444 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java @@ -9,7 +9,6 @@ import android.net.Uri; import android.net.wifi.p2p.WifiP2pDevice; import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pInfo; -import android.net.wifi.p2p.WifiP2pManager; import android.os.Build; import android.os.Bundle; import android.util.Log; @@ -67,8 +66,8 @@ import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.Fil * 2) After handshake, starting the files transfer using {@link SenderDeviceAsyncTask} on the sender * device and {@link ReceiverDeviceAsyncTask} files receiving device */ -public class LocalFileTransferActivity extends AppCompatActivity - implements WifiP2pManager.PeerListListener, WifiP2pManager.ConnectionInfoListener { +public class LocalFileTransferActivity extends AppCompatActivity implements + WifiDirectManager.Callbacks { // Not a typo, 'Log' tags have a length upper limit of 25 characters public static final String TAG = "LocalFileTransferActvty"; @@ -196,7 +195,7 @@ public class LocalFileTransferActivity extends AppCompatActivity if (!checkExternalStorageWritePermission()) return true; /* Initiate discovery */ - if (!isWifiP2pEnabled()) { + if (!wifiDirectManager.isWifiP2pEnabled()) { requestEnableWifiP2pServices(); return true; } @@ -228,14 +227,6 @@ public class LocalFileTransferActivity extends AppCompatActivity return fileUriArrayList; } - public void setWifiP2pEnabled(boolean wifiP2pEnabled) { - this.wifiDirectManager.setWifiP2pEnabled(wifiP2pEnabled); - } - - public boolean isWifiP2pEnabled() { - return this.wifiDirectManager.isWifiP2pEnabled(); - } - public void updateUserDevice(@Nullable WifiP2pDevice userDevice) { // Update UI with user device's details wifiDirectManager.setUserDevice(userDevice); @@ -382,9 +373,9 @@ public class LocalFileTransferActivity extends AppCompatActivity fileListAdapter.notifyItemChanged(itemIndex); } - /* From WifiP2pManager.PeerListListener callback-interface */ + /* From WifiDirectManager.Callbacks interface */ @Override - public void onPeersAvailable(@NonNull WifiP2pDeviceList peers) { + public void updatePeerDevicesList(@NonNull WifiP2pDeviceList peers) { searchingPeersProgressBar.setVisibility(View.GONE); listViewPeerDevices.setVisibility(View.VISIBLE); @@ -397,13 +388,8 @@ public class LocalFileTransferActivity extends AppCompatActivity } } - /* From WifiP2pManager.ConnectionInfoListener callback-interface */ @Override - public void onConnectionInfoAvailable(@NonNull WifiP2pInfo groupInfo) { - /* Devices have successfully connected, and 'info' holds information about the wifi p2p group formed */ - wifiDirectManager.setGroupInfo(groupInfo); - - // Start handshake between the devices + public void performHandshakeWithSelectedPeerDevice(@NonNull WifiP2pInfo groupInfo) { if (BuildConfig.DEBUG) { Log.d(TAG, "Starting handshake"); } @@ -554,7 +540,7 @@ public class LocalFileTransferActivity extends AppCompatActivity } case REQUEST_ENABLE_WIFI_P2P: { - if (!isWifiP2pEnabled()) { + if (!wifiDirectManager.isWifiP2pEnabled()) { showToast(this, R.string.discovery_needs_wifi, Toast.LENGTH_LONG); } break; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java index 3a494197f..a517c3c3e 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectBroadcastReceiver.java @@ -43,9 +43,9 @@ public class WifiDirectBroadcastReceiver extends BroadcastReceiver { int wifiP2pState = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); if (wifiP2pState == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { - wifiActivity.setWifiP2pEnabled(true); + wifiActivity.wifiDirectManager.setWifiP2pEnabled(true); } else { - wifiActivity.setWifiP2pEnabled(false); + wifiActivity.wifiDirectManager.setWifiP2pEnabled(false); showToast(wifiActivity, R.string.discovery_needs_wifi, Toast.LENGTH_SHORT); wifiActivity.clearPeers(); } @@ -55,7 +55,7 @@ public class WifiDirectBroadcastReceiver extends BroadcastReceiver { if (manager != null) { /* List of available peers has changed, so request & use the new list through * PeerListListener.requestPeers() callback */ - manager.requestPeers(channel, wifiActivity); + manager.requestPeers(channel, wifiActivity.wifiDirectManager); } Log.d(LocalFileTransferActivity.TAG, "P2P peers changed"); } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { @@ -67,7 +67,7 @@ public class WifiDirectBroadcastReceiver extends BroadcastReceiver { if (networkInfo.isConnected()) { // Request connection info about the wifi p2p group formed upon connection - manager.requestConnectionInfo(channel, wifiActivity); + manager.requestConnectionInfo(channel, wifiActivity.wifiDirectManager); } else { // Not connected after connection change -> Disconnected wifiActivity.clearPeers(); diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java index 1971f6738..b33c16b47 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java @@ -6,6 +6,7 @@ import android.content.IntentFilter; import android.net.wifi.WpsInfo; import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pDevice; +import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pInfo; import android.net.wifi.p2p.WifiP2pManager; import android.os.Build; @@ -22,7 +23,7 @@ import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.LocalFileTra /** * Manager for the Wifi-P2p API, used in the local file transfer module * */ -public class WifiDirectManager implements WifiP2pManager.ChannelListener { +public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2pManager.PeerListListener, WifiP2pManager.ConnectionInfoListener { private static final String TAG = "WifiDirectManager"; @@ -111,6 +112,20 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener { } } + /* From WifiP2pManager.PeerListListener callback-interface */ + @Override + public void onPeersAvailable(@NonNull WifiP2pDeviceList peers) { + ((Callbacks) activity).updatePeerDevicesList(peers); + } + + /* From WifiP2pManager.ConnectionInfoListener callback-interface */ + @Override + public void onConnectionInfoAvailable(@NonNull WifiP2pInfo groupInfo) { + /* Devices have successfully connected, and 'info' holds information about the wifi p2p group formed */ + setGroupInfo(groupInfo); + ((Callbacks) activity).performHandshakeWithSelectedPeerDevice(groupInfo); + } + public void setUserDevice(@NonNull WifiP2pDevice userDevice) { this.userDevice = userDevice; } @@ -205,4 +220,10 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener { return ("Unknown error code - " + reason); } } + + public interface Callbacks { + void updatePeerDevicesList(@NonNull WifiP2pDeviceList peers); + + void performHandshakeWithSelectedPeerDevice(@NonNull WifiP2pInfo groupInfo); + } }