Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
0c6e649
Added working upd multicast
jackss011 Apr 16, 2017
770825c
Created working UdpSender class
jackss011 Apr 17, 2017
ec00f3f
Added TCP connection manager
jackss011 Apr 17, 2017
f596358
Improved TcpConnection class
jackss011 Apr 18, 2017
6acc9e4
Polished TcpConnection
jackss011 Apr 18, 2017
8bed38a
Improved connection functionalities
jackss011 Apr 19, 2017
a4e1e8f
Polished UdpSender
jackss011 Apr 19, 2017
cea8d17
Added TODO to TcpConnection
jackss011 Apr 19, 2017
970b58c
Added canStartConnection() to TcpConnection + Polished javadoc
jackss011 Apr 19, 2017
3a35db2
Added Charset to PrintWriter in TcpConnection
jackss011 Apr 19, 2017
bc97d5c
Added sandbox debug only flavour
jackss011 Apr 20, 2017
94011f7
Merge branch 'exp/sand-flavor' into feat/network-base
jackss011 Apr 20, 2017
c6317ee
Removed changes from MainActivity to 7a75442a
jackss011 Apr 20, 2017
d5d2086
Deleted NetworkTests xml layout
jackss011 Apr 20, 2017
51ba799
Renamed NetworkTests to NetworkTestsActivity
jackss011 Apr 20, 2017
50b281f
Implemented NetworkTestsActivivity
jackss011 Apr 20, 2017
3aae617
TcpConnection and NetBridge call their state listener when is set
jackss011 Apr 20, 2017
585ce21
Fixed double launcher for build variant sandboxDebug
jackss011 Apr 20, 2017
cd3798c
Commented manifest (sandbox)
jackss011 Apr 20, 2017
4d9fedf
Implemented working Beacon
jackss011 Apr 22, 2017
62616ce
Created BeaconEventListener inner class
jackss011 Apr 22, 2017
8342da3
Static function buildNetworkThread() factory
jackss011 Apr 22, 2017
ebf81bf
Added device_list to beacon
jackss011 Apr 22, 2017
bc3fa2e
Basic ConnectDialogFragment
jackss011 Apr 24, 2017
739bc91
Improved connection_fragment
jackss011 Apr 24, 2017
efd7287
Using a SocketInfo struct for Beacon results
jackss011 Apr 25, 2017
c216016
Fixed ExpiringList bug in update()
jackss011 Apr 25, 2017
17e5a7b
Removed dividers from ConnectionDialogFragment list
jackss011 Apr 25, 2017
39ac508
Added comments to private functions in ConnectionDialogFragment
jackss011 Apr 25, 2017
73fa57a
ConnectDialogFragment restart update_timer when a device is found
jackss011 Apr 25, 2017
3c324e4
Added StaticSettings class
jackss011 Apr 25, 2017
690f949
Fixed TcpConnection bugs
jackss011 Apr 27, 2017
8ee1441
Removed stacktrace_print on Beacon shutdown
jackss011 Apr 27, 2017
fb027ad
Using String address istead of InetAddress in SocketInfo
jackss011 Apr 27, 2017
cc736b0
ConnectionDialogFragment can retrieve device addresses
jackss011 Apr 27, 2017
1b2a067
Optimized Beacon devices callbacks
jackss011 Apr 27, 2017
139ccfa
Removed TcpConnection stack_trace print when the socket is intentiona…
jackss011 Apr 27, 2017
9c33a8e
Implemented basic NetAdapter class
jackss011 Apr 27, 2017
244897c
Connection classes improvement
jackss011 Apr 27, 2017
d35048a
Moved wifi network classes to a wifi subfolder
jackss011 Apr 28, 2017
9d24c42
Updated classes packages due to new network.wifi package
jackss011 Apr 28, 2017
674cf00
NetAdapter can send data
jackss011 Apr 28, 2017
90ee408
Renamed MBUtils to StaticLibrary
jackss011 Apr 28, 2017
2e85b61
Updated packages due to StaticLibrary rename
jackss011 Apr 28, 2017
aa3f63d
Host name sanitized in ConnectDialogFragment
jackss011 Apr 28, 2017
9524e6b
NetAdapter notifies its state when listener is registered
jackss011 Apr 28, 2017
c0654f2
Check for Beacon message validity
jackss011 May 12, 2017
f53f17a
Added getDeviceName to StaticLibrary
jackss011 May 12, 2017
992aea7
Added hanshake to network
jackss011 May 12, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 15 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,25 @@ android {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

}
productFlavors {
sandbox {
applicationIdSuffix ".sandbox"
versionNameSuffix "-SANDBOX"
}
full { }
}

variantFilter { variant ->
// Ignore sandboxRelease since it makes no sense
if(variant.name == 'sandboxRelease')
setIgnore true
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.BLUETOOTH"/>


<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
Expand Down
209 changes: 209 additions & 0 deletions app/src/main/java/com/jackss/ag/macroboard/network/NetAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
package com.jackss.ag.macroboard.network;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.util.Log;
import com.jackss.ag.macroboard.network.wifi.WifiBridge;
import com.jackss.ag.macroboard.ui.fragments.ConnectDialogFragment;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
*
*/
public class NetAdapter implements Sender.OnSendListener
{
private static final String TAG = "NetAdapter";

// |===============================
// |==> STATIC MEMBERS
// |===============================

private static NetAdapter instance;

public static NetAdapter getInstance()
{
if(instance == null) instance = new NetAdapter();
return instance;
}



// |===============================
// |==> CLASSES
// |===============================

public enum State
{
IDLE,
CONNECTING,
CONNECTED,
ERROR
}


public interface OnNetworkEventListener
{
void onNetworkStateChanged(State newState);

void onNetworkFailure();
}


NetBridge.OnConnectionStateListener bridgeListener = new NetBridge.OnConnectionStateListener()
{
@Override
public void onConnectionStateChanged(NetBridge.BridgeState newState)
{
switch (newState)
{
case IDLE:
state = State.IDLE;
break;
case CONNECTING:
state = State.CONNECTING;
break;
case CONNECTED:
state = State.CONNECTED;
break;
case ERROR:
state = State.ERROR;
break;
}

notifyNetworkState();
}
};


private final ConnectDialogFragment.OnConnectDialogEventListener connectionDialogListener =
new ConnectDialogFragment.OnConnectDialogEventListener()
{
@Override
public void onDialogConnectRequest(String address)
{
try
{
netBridge.startConnection(InetAddress.getByName(address));
}
catch (UnknownHostException e)
{
e.printStackTrace();
throw new AssertionError("Dialog returned invalid address");
}
}
};


// |===============================
// |==> FIELDS
// |===============================

private State state;

private WifiBridge netBridge;

private ConnectDialogFragment connectDialogFragment;

private OnNetworkEventListener listener;

private Sender sender;


// |===============================
// |==> CONSTRUCTORS
// |===============================

private NetAdapter()
{
netBridge = new WifiBridge(null);
netBridge.setConnectionStateListener(bridgeListener);

connectDialogFragment = new ConnectDialogFragment();
connectDialogFragment.setDialogEventListener(connectionDialogListener);

sender = new Sender(this);
}


// |===============================
// |==> METHODS
// |===============================

private void notifyNetworkState()
{
if(listener != null)
{
if(getNetworkState() == State.ERROR)
listener.onNetworkFailure();
else
listener.onNetworkStateChanged(getNetworkState());
}
}

@Override
public void sendData(String data, NetBridge.DataReliability reliability) //TODO: move this inside NetBridge?
{
netBridge.sendData(data, reliability);
}

public void connectDialog(Activity activity)
{
if(!isConnected())
connectDialogFragment.show(activity.getFragmentManager(), null);
else
Log.e(TAG, "Socket is already connected");
}

public void disconnect()
{
connectDialogFragment.dismiss();

netBridge.stopConnection();
}

public boolean isConnected()
{
return netBridge.getConnectionState() == NetBridge.BridgeState.CONNECTED;
}

public void registerListener(@NonNull OnNetworkEventListener listener)
{
this.listener = listener;
notifyNetworkState();
}

public void unregisterListener()
{
this.listener = null;
}

public State getNetworkState()
{
return state;
}

public Sender getSender()
{
return sender;
}
}





// public static boolean isWifiConnected(@NonNull Context context)
// {
// ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// Network networks[] = manager.getAllNetworks();
//
// for(Network net : networks)
// {
// NetworkInfo info = manager.getNetworkInfo(net);
// if(info.getType() == ConnectivityManager.TYPE_WIFI) return info.isConnected();
// }
//
// return false;
// }
88 changes: 88 additions & 0 deletions app/src/main/java/com/jackss/ag/macroboard/network/NetBridge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.jackss.ag.macroboard.network;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.Log;

/**
*
*/
abstract public class NetBridge<T>
{
public enum DataReliability
{
RELIABLE,
UNRELIABLE
}

public enum BridgeState
{
IDLE,
CONNECTING,
CONNECTED,
ERROR
}

public interface OnConnectionStateListener
{
void onConnectionStateChanged(BridgeState newState);
}

private Context context;

private OnConnectionStateListener connectionStateListener;

private BridgeState connectionState;


public NetBridge(Context context)
{
this.context = context;
}


// interface
abstract public boolean canStartConnection();

abstract public void startConnection(T address);

abstract public void stopConnection();

abstract public boolean isConnected();

abstract public boolean sendData(String data, DataReliability reliability);

public boolean sendData(String data)
{
return sendData(data, DataReliability.RELIABLE);
}

// final
public void setConnectionStateListener(@Nullable OnConnectionStateListener connectionStateListener)
{
this.connectionStateListener = connectionStateListener;

if(connectionStateListener != null) connectionStateListener.onConnectionStateChanged(getConnectionState());
}

protected void setConnectionState(BridgeState state)
{
if(this.connectionState != state)
{
this.connectionState = state;
if(connectionStateListener != null) connectionStateListener.onConnectionStateChanged(this.connectionState);
}

Log.v("NetBridge", "Moving to state: " + state.name());
}

public BridgeState getConnectionState()
{
return connectionState;
}

public Context getContext()
{
return context;
}
}
Loading