diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..cedc2dd77 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright (C) 2010-2015 VREM Software Development + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/app/src/main/java/com/vrem/wifianalyzer/Frequency.java b/app/src/main/java/com/vrem/wifianalyzer/Frequency.java index f586f43e4..0e8e67262 100644 --- a/app/src/main/java/com/vrem/wifianalyzer/Frequency.java +++ b/app/src/main/java/com/vrem/wifianalyzer/Frequency.java @@ -1,39 +1,61 @@ -package com.vrem.wifianalyzer; - -enum Frequency { - UNKNOWN(0, 0, 0), - TWO_POINT_FOUR(2412, 2472, 1), - TWO_POINT_FOUR_CH_14(2484, 2484, 14), - FIVE(5170, 5825, 34); - - final int CHANNEL_FREQUENCY_SPREAD = 5; - - private int start; - private int end; - private int offset; - - private Frequency(int start, int end, int offset) { - this.start = start; - this.end = end; - this.offset = offset; - } - - boolean inRange(int value) { - return value >= start && value <= end; - } - int channel(int value) { - if (inRange(value)) { - return (value - start) / CHANNEL_FREQUENCY_SPREAD + offset; - } - return 0; - } - - static Frequency find(int value) { - for (Frequency frequency: Frequency.values()) { - if (frequency.inRange(value)) { - return frequency; - } - } - return Frequency.UNKNOWN; - } -} +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +enum Frequency { + UNKNOWN(0, 0, 0, ""), + TWO_POINT_FOUR(2412, 2472, 1, "2.4Ghz"), + TWO_POINT_FOUR_CH_14(2484, 2484, 14, "2.4Ghz"), + FIVE(5170, 5825, 34, "5Ghz"); + + final int CHANNEL_FREQUENCY_SPREAD = 5; + + private int start; + private int end; + private int offset; + private String band; + + Frequency(int start, int end, int offset, String band) { + this.start = start; + this.end = end; + this.offset = offset; + this.band = band; + } + + boolean inRange(int value) { + return value >= start && value <= end; + } + + int channel(int value) { + if (inRange(value)) { + return (value - start) / CHANNEL_FREQUENCY_SPREAD + offset; + } + return 0; + } + + String getBand() { + return band; + } + + static Frequency find(int value) { + for (Frequency frequency: Frequency.values()) { + if (frequency.inRange(value)) { + return frequency; + } + } + return Frequency.UNKNOWN; + } +} diff --git a/app/src/main/java/com/vrem/wifianalyzer/ListViewAdapter.java b/app/src/main/java/com/vrem/wifianalyzer/ListViewAdapter.java index 2f86fca31..e01c204c5 100644 --- a/app/src/main/java/com/vrem/wifianalyzer/ListViewAdapter.java +++ b/app/src/main/java/com/vrem/wifianalyzer/ListViewAdapter.java @@ -1,56 +1,68 @@ -package com.vrem.wifianalyzer; - -import android.app.Activity; -import android.net.wifi.ScanResult; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import java.util.List; - -public class ListViewAdapter extends ArrayAdapter { - - public ListViewAdapter(Activity activity, List scanResults) { - super(activity, android.R.layout.simple_list_item_1, scanResults); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); - if (convertView == null){ - convertView = inflater.inflate(R.layout.column_row, null); - } - - convertView.setBackgroundResource(position % 2 == 0 - ? R.color.bright_foreground_material_dark - : R.color.background_material_light); - - ScanResult scanResult = getItem(position); - - ((TextView) convertView.findViewById(R.id.ssid)).setText( - (scanResult.SSID.length() == 0 ? "HIDDEN" : scanResult.SSID) + " (" + scanResult.BSSID + ")"); - - WifiLevel wifiLevel = WifiLevel.find(scanResult.level); - Security security = Security.find(scanResult.capabilities); - Frequency frequency = Frequency.find(scanResult.frequency); - - ImageView imageView = (ImageView) convertView.findViewById(R.id.levelImage); - imageView.setImageResource(wifiLevel.getImageResource()); - - ImageView securityImage = (ImageView) convertView.findViewById(R.id.securityImage); - securityImage.setImageResource(security.getImageResource()); - - TextView textLevel = (TextView) convertView.findViewById(R.id.level); - textLevel.setText(scanResult.level + "dBm"); - textLevel.setTextColor(getContext().getResources().getColor(wifiLevel.getColorResource())); - - ((TextView) convertView.findViewById(R.id.channel)).setText("" + frequency.channel(scanResult.frequency)); - ((TextView) convertView.findViewById(R.id.frequency)).setText(" (" + scanResult.frequency + "MHz)"); - ((TextView) convertView.findViewById(R.id.capabilities)).setText(scanResult.capabilities); - - return convertView; - } -} +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +public class ListViewAdapter extends ArrayAdapter { + + public ListViewAdapter(Activity activity, List wifiScanResults) { + super(activity, android.R.layout.simple_list_item_1, wifiScanResults); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); + if (convertView == null){ + convertView = inflater.inflate(R.layout.column_row, null); + } + + WifiScan wifiScan = getItem(position); + + ((TextView) convertView.findViewById(R.id.ssid)).setText( + (wifiScan.getSSID().length() == 0 ? "HIDDEN" : wifiScan.getSSID()) + " (" + wifiScan.getBSSID() + ")"); + + WifiLevel wifiLevel = wifiScan.getWifiLevel(); + Security security = wifiScan.getSecurity(); + String securities = wifiScan.getSecurities(); + Frequency frequency = wifiScan.getFrequency(); + int channel = wifiScan.getChannel(); + + ImageView imageView = (ImageView) convertView.findViewById(R.id.levelImage); + imageView.setImageResource(wifiLevel.getImageResource()); + + ImageView securityImage = (ImageView) convertView.findViewById(R.id.securityImage); + securityImage.setImageResource(security.getImageResource()); + + TextView textLevel = (TextView) convertView.findViewById(R.id.level); + textLevel.setText(wifiScan.getLevel() + "dBm"); + textLevel.setTextColor(getContext().getResources().getColor(wifiLevel.getColorResource())); + + ((TextView) convertView.findViewById(R.id.channel)).setText("" + channel); + ((TextView) convertView.findViewById(R.id.frequency)).setText(" (" + frequency.getBand()+")"); + ((TextView) convertView.findViewById(R.id.security)).setText(securities); + + return convertView; + } +} diff --git a/app/src/main/java/com/vrem/wifianalyzer/MainActivity.java b/app/src/main/java/com/vrem/wifianalyzer/MainActivity.java index ad25eefc6..4cd5f2e5d 100644 --- a/app/src/main/java/com/vrem/wifianalyzer/MainActivity.java +++ b/app/src/main/java/com/vrem/wifianalyzer/MainActivity.java @@ -1,130 +1,120 @@ -package com.vrem.wifianalyzer; - -import android.content.Context; -import android.net.wifi.ScanResult; -import android.net.wifi.WifiManager; -import android.os.Bundle; -import android.os.Handler; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.View; -import android.view.Menu; -import android.view.MenuItem; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.ArrayAdapter; -import android.widget.ListAdapter; -import android.widget.ListView; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class MainActivity extends AppCompatActivity { - - public static final int DELAY_MILLIS = 60000; - - private ListView listView; - private WifiManager wifiManager; - private Handler handler; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - wifiManager = getWifiManager(); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - listView = (ListView) findViewById(R.id.listView); - listView.setAdapter(new ListViewAdapter(this, scanResults())); - listView.setOnItemClickListener(makeListViewOnItemClickListener()); - - handler = new Handler(); - handler.postDelayed(updateListView(), DELAY_MILLIS); - } - - private OnItemClickListener makeListViewOnItemClickListener() { - return new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - ScanResult itemValue = (ScanResult) listView.getItemAtPosition(position); - Toast.makeText(getApplicationContext(), - "SSID: " + itemValue.SSID + - "\nBSSID: " + itemValue.BSSID + - "\nLEVEL: " + itemValue.level + - "\nFREQUENCY: " + itemValue.frequency + - "\n" + itemValue.capabilities - , Toast.LENGTH_LONG) - .show(); - } - }; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.action_settings) { - return true; - } - return super.onOptionsItemSelected(item); - } - - private WifiManager getWifiManager() { - WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); - if (!wifiManager.isWifiEnabled()) { - Toast.makeText(getApplicationContext(), "WiFi is disabled! Making it enabled...", Toast.LENGTH_LONG).show(); - wifiManager.setWifiEnabled(true); - } - return wifiManager; - } - - private List scanResults() { - Toast.makeText(this, "Scanning WiFi ... ", Toast.LENGTH_SHORT).show(); - - wifiManager.startScan(); - List results = wifiManager.getScanResults(); - if (results == null) { - return new ArrayList<>(); - } - Collections.sort(results, new Comparator() { - @Override - public int compare(ScanResult lhs, ScanResult rhs) { - int result = rhs.level - lhs.level; - if (result == 0) { - result = rhs.SSID.compareTo(lhs.SSID); - if (result == 0) { - result = rhs.BSSID.compareTo(lhs.BSSID); - } - } - return result; - } - }); - return results; - } - - private Runnable updateListView() { - return new Runnable() { - @Override - public void run() { - ListViewAdapter listViewAdapter = (ListViewAdapter) listView.getAdapter(); - listViewAdapter.clear(); - listViewAdapter.addAll(scanResults()); - listViewAdapter.notifyDataSetChanged(); - handler.postDelayed(updateListView(), DELAY_MILLIS); - } - }; - } -} +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +import android.content.Context; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class MainActivity extends AppCompatActivity { + + public static final int DELAY_MILLIS = 60000; + + private ListView listView; + private WifiManager wifiManager; + private Handler handler; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + wifiManager = getWifiManager(); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + listView = (ListView) findViewById(R.id.listView); + listView.setAdapter(new ListViewAdapter(this, wifiScan())); + listView.setOnItemClickListener(makeListViewOnItemClickListener()); + + handler = new Handler(); + handler.postDelayed(updateListView(), DELAY_MILLIS); + } + + private OnItemClickListener makeListViewOnItemClickListener() { + return new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Toast.makeText(getApplicationContext(), + listView.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show(); + } + }; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + return item.getItemId() == R.id.action_settings || super.onOptionsItemSelected(item); + } + + private WifiManager getWifiManager() { + WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); + if (!wifiManager.isWifiEnabled()) { + Toast.makeText(getApplicationContext(), "WiFi is disabled! Making it enabled...", Toast.LENGTH_LONG).show(); + wifiManager.setWifiEnabled(true); + } + return wifiManager; + } + + private List wifiScan() { + List results = new ArrayList<>(); + Toast.makeText(this, "Scanning WiFi ... ", Toast.LENGTH_SHORT).show(); + + wifiManager.startScan(); + List scanResults = wifiManager.getScanResults(); + if (scanResults != null) { + for (ScanResult scanResult: scanResults) { + results.add(WifiScan.make(scanResult)); + } + Collections.sort(results); + } + return results; + } + + private Runnable updateListView() { + return new Runnable() { + @Override + public void run() { + ListViewAdapter listViewAdapter = (ListViewAdapter) listView.getAdapter(); + listViewAdapter.clear(); + listViewAdapter.addAll(wifiScan()); + listViewAdapter.notifyDataSetChanged(); + handler.postDelayed(updateListView(), DELAY_MILLIS); + } + }; + } +} diff --git a/app/src/main/java/com/vrem/wifianalyzer/Security.java b/app/src/main/java/com/vrem/wifianalyzer/Security.java index 5fcc64c9d..fdaff15f5 100644 --- a/app/src/main/java/com/vrem/wifianalyzer/Security.java +++ b/app/src/main/java/com/vrem/wifianalyzer/Security.java @@ -1,32 +1,71 @@ -package com.vrem.wifianalyzer; - -import android.net.wifi.WifiManager; - -enum Security { - NONE(R.drawable.empty), - WEP(R.drawable.unlock), - WPA2(R.drawable.lock), - WPA(R.drawable.lock); - - private final int imageResource; - - private Security(int imageResource) { - this.imageResource = imageResource; - } - - int getImageResource() { - return imageResource; - } - - static Security find(String value) { - if (value != null) { - value = value.toUpperCase(); - for (Security security: Security.values()) { - if (value.contains(security.name())) { - return security; - } - } - } - return Security.NONE; - } -} +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +import java.util.ArrayList; +import java.util.List; + +enum Security { + // weak security first - keep this order + NONE(R.drawable.unlock), + WEP(R.drawable.brokenlock), + WPS(R.drawable.brokenlock), + WPA(R.drawable.lock), + WPA2(R.drawable.lock); + + private final int imageResource; + + Security(int imageResource) { + this.imageResource = imageResource; + } + + int getImageResource() { + return imageResource; + } + private static List findSecurities(String capabilities) { + List results = new ArrayList<>(); + if (capabilities != null) { + String[] values = capabilities.toUpperCase().replace("][", "-").replace("]", "").replace("[", "").split("-"); + for (String value: values) { + try { + results.add(Security.valueOf(value)); + } catch (Exception e) { + // skip capabilities that are not security + } + } + } + return results; + } + + static Security findOne(String capabilities) { + List securities = findSecurities(capabilities); + for (Security security: Security.values()) { + if (securities.contains(security)) { + return security; + } + } + return Security.NONE; + } + + static String findAll(String capabilities) { + StringBuilder result = new StringBuilder(); + for (Security current: findSecurities(capabilities)) { + result.append(current.name()); + result.append(" "); + } + return result.toString(); + } +} diff --git a/app/src/main/java/com/vrem/wifianalyzer/WifiLevel.java b/app/src/main/java/com/vrem/wifianalyzer/WifiLevel.java index 1e7fe41fa..b4c4ab50a 100644 --- a/app/src/main/java/com/vrem/wifianalyzer/WifiLevel.java +++ b/app/src/main/java/com/vrem/wifianalyzer/WifiLevel.java @@ -1,39 +1,54 @@ -package com.vrem.wifianalyzer; - -import android.net.wifi.WifiManager; - -enum WifiLevel { - ZERO(R.drawable.wifi0, R.color.wifi0), - ONE(R.drawable.wifi1, R.color.wifi1), - TWO(R.drawable.wifi2, R.color.wifi2), - THREE(R.drawable.wifi3, R.color.wifi3), - FOUR(R.drawable.wifi4, R.color.wifi4); - - private final int imageResource; - private final int colorResource; - - private WifiLevel(int imageResource, int colorResource) { - this.imageResource = imageResource; - this.colorResource = colorResource; - } - - int getColorResource() { - return colorResource; - } - - int getImageResource() { - return imageResource; - } - - static WifiLevel find(int level) { - int maxLevel = WifiLevel.values().length; - int signalLevel = WifiManager.calculateSignalLevel(level, maxLevel); - if (signalLevel < 0) { - return WifiLevel.ZERO; - } - if (signalLevel >= maxLevel) { - return WifiLevel.FOUR; - } - return WifiLevel.values()[signalLevel]; - } -} +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +import android.net.wifi.WifiManager; + +enum WifiLevel { + ZERO(R.drawable.wifi0, R.color.wifi0), + ONE(R.drawable.wifi1, R.color.wifi1), + TWO(R.drawable.wifi2, R.color.wifi2), + THREE(R.drawable.wifi3, R.color.wifi3), + FOUR(R.drawable.wifi4, R.color.wifi4); + + private final int imageResource; + private final int colorResource; + + WifiLevel(int imageResource, int colorResource) { + this.imageResource = imageResource; + this.colorResource = colorResource; + } + + int getColorResource() { + return colorResource; + } + + int getImageResource() { + return imageResource; + } + + static WifiLevel find(int level) { + int maxLevel = WifiLevel.values().length; + int signalLevel = WifiManager.calculateSignalLevel(level, maxLevel); + if (signalLevel < 0) { + return WifiLevel.ZERO; + } + if (signalLevel >= maxLevel) { + return WifiLevel.FOUR; + } + return WifiLevel.values()[signalLevel]; + } +} diff --git a/app/src/main/java/com/vrem/wifianalyzer/WifiScan.java b/app/src/main/java/com/vrem/wifianalyzer/WifiScan.java new file mode 100644 index 000000000..6e0057a65 --- /dev/null +++ b/app/src/main/java/com/vrem/wifianalyzer/WifiScan.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2010 - 2015 VREM Software Development + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.vrem.wifianalyzer; + +import android.net.wifi.ScanResult; +import android.support.annotation.NonNull; + +public class WifiScan implements Comparable { + + private final ScanResult scanResult; + + private WifiScan(ScanResult scanResult) { + this.scanResult = scanResult; + } + + public static WifiScan make(@NonNull ScanResult scanResult) { + return new WifiScan(scanResult); + } + + public Frequency getFrequency() { + return Frequency.find(scanResult.frequency); + } + + public int getChannel() { + return getFrequency().channel(scanResult.frequency); + } + + public Security getSecurity() { + return Security.findOne(scanResult.capabilities); + } + + public String getSecurities() { + return Security.findAll(scanResult.capabilities); + } + + public WifiLevel getWifiLevel() { + return WifiLevel.find(scanResult.level); + } + + public String getSSID() { + return scanResult.SSID; + } + + public String getBSSID() { + return scanResult.BSSID; + } + + public int getLevel() { + return scanResult.level; + } + + @Override + public String toString() { + return "SSID: " + this.scanResult.SSID + + "\nBSSID: " + this.scanResult.BSSID + + "\nLEVEL: " + this.scanResult.level + + "\nFREQUENCY: " + this.scanResult.frequency + + "\n" + this.scanResult.capabilities; + } + + @Override + public int compareTo(@NonNull WifiScan another) { + int result = another.scanResult.level - this.scanResult.level; + if (result == 0) { + result = this.scanResult.SSID.compareTo(another.scanResult.SSID); + if (result == 0) { + result = this.scanResult.BSSID.compareTo(another.scanResult.BSSID); + } + } + return result; + } +} diff --git a/app/src/main/res/layout/column_row.xml b/app/src/main/res/layout/column_row.xml index 12c9f813b..4ae431386 100644 --- a/app/src/main/res/layout/column_row.xml +++ b/app/src/main/res/layout/column_row.xml @@ -1,67 +1,61 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file