Refactor: Restructure LocalFileTransferActivity

Shifted remaining P2P API callbacks and related methods to WifiDirectManager
This commit is contained in:
Aditya-Sood 2019-07-20 22:02:05 +05:30
parent 8ec675efdd
commit 709e043f68
3 changed files with 33 additions and 26 deletions

View File

@ -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;

View File

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

View File

@ -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);
}
}