Git Product home page Git Product logo

openwifi-client-android's Introduction

Open Wi-Fi networks map.

 – Makes the map of Wi-Fi networks as you walk around even if the application is minimized.
 – Displays the coverage of each Wi-Fi network.
 – Customizable map view: normal or hybrid.
 – Customizable Wi-Fi search interval.

Join us on Facebook: https://www.facebook.com/groups/openwifi.project/
Follow us on Twitter: https://twitter.com/owifi
Join us on VK: http://vk.com/owifi
Join our community on Google+: https://plus.google.com/communities/106829221677020050162

0.1.8

 – Project is closed. Sync feature is removed.

0.1.7.3

 – Added a menu command to forcibly close the application.
 – Sync is 5-10 times faster.
 – Fixed a crash when connecting to a Wi-Fi network.
 – Fixed a crash in statistics screen.
 – Filtering of networks on scan is slightly improved.

0.1.7.2

– Fixed the crash when a location provider is unavailable.
– Removed unused advanced setting.
– Local database size is slightly reduced.

0.1.7.1

Fixed a crash on Android 2.2.

0.1.7

This update changes the map refreshing algorithm. The new algorithm should work many times faster than the old one.

The update requires full re-sync as the cache structure was changed.

Full change list:

– The cache structure was changed. New map refreshing algorithm was implemented.
– "Wi-Fi is disabled" notification icon was changed to the standard one.
– Active sync notification was added.
– Statistics loading animation was added.
– Rare failures were fixed.
– Open source licenses screen was added.
– Icons were added to the social network buttons.

0.1.6-beta

– Significantly increased the speed of displaying networks on the map.
– The icons of networks have been returned.
– It is now possible to sync from server to client without authenticating.
– Fixed a crash in the case if Google Maps or Google Play services are not installed.
– Action Bar buttons are now highlighted when pressed.
– Reduced APK size by 100kB.

0.1.5

– Switched to Google Maps Android API v2: more map features, faster map refreshing, less traffic for map data.
– Android 2.1 is no longer supported due to switching to the newer Google Maps version.
– Network counters are temporary removed – until the next update.
– Fixed the network icon color for the Hybrid view.
– Optimized APK size.

0.1.4

– Help screen. It is available from the overflow menu and will be shown once on the very first application startup.
– Authentication is completely re-implemented and should fix authentication issues on some devices.
– Application look and feel for Android < 3.0 is now similar to Android 3.0+.
– Default search interval is changed to 10 seconds.
– Added messages about not yet implemented features.

0.1.3

Known issue: if you do not see any networks in Minsk then tap "Settings" → "Sign in again" → "Synchronize Now".

– Fixed last synced time summary in settings.
– Added new permission to allow logging in with Google on some devices.
– Fixed network areas color on the Satellite map view.

0.1.2

– The very first syncing autostart.
– Using secured connection.
– "Synchronize Now" option shows syncing status.
– Network labels size is the same for different screens.
– Using traffic compression.
– Networks layer updating progress bar.
– Authentication using Google Account.
– Changed the order of preferences.

0.1.0

– Initial release.

openwifi-client-android's People

Contributors

eigenein avatar

Watchers

 avatar  avatar  avatar

openwifi-client-android's Issues

Модульные тесты

Поискать участки кода, которые требуют регулярного тестирования и написать для них тесты. Первая идея - код проверки наличия подключения к сети Интернет.

Пассивный поиск сетей

Идея пассивного поиска основывается на двух фичах:

  1. Андроид регулярно выполняет поиск сетей.
  2. При просмотре карты выполняется поиск текущего местоположения.

Если приложение сможет перехватить результаты поиска сетей, и на этот момент будет известно местоположение, можно сохранить результаты в базу.

Профит:

  1. Пользователи будут иметь актуальную информацию для текущего местоположения. Здесь хорошо бы сделать обновление оверлея с сетями при получении результатов сканирования.
  2. Проект получит пользу от юзеров, которые не хотят или не умеют включать поиск. По крайней мере, получим информацию для типичного положения пользователя.
  3. Получим некоторую лояльность первых пользователей: при входе в приложение они не будут видеть полностью пустую карту в своей местности.

Мобильная версия сайта

Некритическая задача с сомнительной пользой. Теоретически, может привести некоторое количество пользователей, ищущих приложение "на ходу".

Опция для автоматического отключения сканирования при низком заряда батареи

Тем самым, мы избавим себя от некоторой части криков пользователей, что приложение высаживает батарею до нуля.

Приложение должно уведомлять о таком событии. Нотификация должна предоставлять возможность быстро возобновить сканирование.

При включении сканирования проверять заряд батареи и переспрашивать пользователя, если заряд ниже критического.

Что почитать

Опция "Поделиться точкой / сетью"

В контекстном меню сети нужно предлагать поделиться информацией о точке. Фактически, это вызовет клиент, который может запостить некий текст с инфой о точке и нашем приложении (может привести к нам некоторое количество пользователей). :)

Инфа аналогична фиче "Поделиться местоположением", поэтому, искать инфу для реализации нужно в этом направлении.

Микро-синхронизация

Суть фичи заключается в синхронизации данных в небольшой, локальной относительно текущего местоположения, области.

Тем самым, мы поможем пользователям подключиться "здесь и сейчас", затратив лишь небольшое количество дорогого мобильного трафика.

Фичу можно сделать премиумной.

Unable to start receiver info.eigenein.openwifi.receivers.ScanResultsReceiver: java.lang.NullPointerException

USER_COMMENT=
ANDROID_VERSION=4.1.1
APP_VERSION_NAME=0.1.0
BRAND=htc_europe
PHONE_MODEL=HTC One S
CUSTOM_DATA=
STACK_TRACE=java.lang.RuntimeException: Unable to start receiver info.eigenein.openwifi.receivers.ScanResultsReceiver: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2577)
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5511)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at info.eigenein.openwifi.helpers.location.LocationTracker.getLocation(LocationTracker.java:50)
at info.eigenein.openwifi.receivers.ScanResultsReceiver.onReceive(ScanResultsReceiver.java:32)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2566)
... 10 more
java.lang.NullPointerException
at info.eigenein.openwifi.helpers.location.LocationTracker.getLocation(LocationTracker.java:50)
at info.eigenein.openwifi.receivers.ScanResultsReceiver.onReceive(ScanResultsReceiver.java:32)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2566)
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5511)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)

Отслеживать и сообщать серверу об изменениях настроек защиты AP

Действительно, если точка станет защищенной, то при текущей реализации клиенты перестанут о ней сообщать, и информация о точке всегда будет заведомо неверной.

Можно также попытаться скрыто хранить существующие данные о такой точке некоторое время в надежде, что она может стать открытой.

Подсказки для сокрытия сетей

Многие публичные сети, которые ловит приложение, являются по умолчанию бесполезными - например, куча принтеров. Все они имеют довольно шаблонные SSID'ы и можно матчить SSID на предмет соответствия одному из шаблонов, и предлагать пользователю скрыть сразу все сети с таким шаблоном.

Но нужно найти способ донести пользователю, почему мы предлагаем скрыть такие сети.

Премиум?

Система нотификаций

Нужно добавить новые иконки и типы нотификаций:

  • Wi-Fi отключен (ошибка)
  • #129 Опциональная постоянная иконка
  • #29 Поиск остановлен из-за севшей батареи (ошибка)
  • #128 Работает поиск (постоянная иконка)
  • #80 Работает обновление (постоянная иконка)

Адаптивный выбор версии Google Maps API

Это позволит использовать новый компонент карт в современных устройствах. Здесь наверняка придется написать кучу адаптеров для абстрагирования от конкретной версии карт.

Хорошо бы в рамках этой же задачи добавить расширенную настройку для явного переключения версии карт – как минимум сильно упростит отладку.

Ограничение частоты обновления

Возможность ручного обновления оставляем, автоматическое ограничиваем, чтобы снизить нагрузку на сервер. После старта проекта период делаем небольшим, чтобы лавина пользователей не видела пустой карты. затем - увеличиваем в одном из обновлений.

Реализуется просто, если запилить #5 – просто проверяем, давно ли было последнее.

RejectedExecutionException

Подозреваю, что таски на выборку сетей работают нереально долго и не прерываются (то есть, подозрение на долго выполняющийся запрос).

USER_COMMENT=
ANDROID_VERSION=2.1-update1
APP_VERSION_NAME=0.1.0
BRAND=LGE
PHONE_MODEL=GT540
CUSTOM_DATA=
STACK_TRACE=java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1876)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:774)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at info.eigenein.openwifi.activities.MainActivity.startRefreshingScanResultsOnMap(MainActivity.java:221)
at info.eigenein.openwifi.activities.MainActivity.access$100(MainActivity.java:34)
at info.eigenein.openwifi.activities.MainActivity$1.onMovedOrZoomed(MainActivity.java:63)
at info.eigenein.openwifi.helpers.map.TrackableMapView.fireMovedOrZoomed(TrackableMapView.java:58)
at info.eigenein.openwifi.helpers.map.TrackableMapView.dispatchDraw(TrackableMapView.java:41)
at android.view.View.draw(View.java:6561)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6561)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6561)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1903)
at android.view.ViewRoot.draw(ViewRoot.java:1349)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:885)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
at dalvik.system.NativeStart.main(Native Method)

Поделиться снимком экрана

Поможет при поддержке пользователей. Есть также смысл использовать стегу для записи Support ID и какой-нибудь контрольной суммы, чтобы убедиться, что изображение не модифицировано.

Удаление устаревших результатов с сервера

Здесь все понятно: нужно как и на клиенте, удалять старые, никому не нужные записи.

Есть смысл пока не торопиться с этой задачей и посмотреть реальный объем данных на сервере, позапускать различные запросы и измерить скорость их выполнения.

Слить StoredScanResult и StoredLocation в одну сущность (и одну таблицу)

После запиливания синхронизации появилась денормализация данных. Кроме того, код усложнен из-за наличия двух сущностей вместо одной. Кроме того, появляются "потерянные" местоположения, которые удалить очевидным путем не так просто. + Raw queries с join'ами. Итого:

  • Удалить StoredScanResult и StoredLocation.
  • Ввести новую сущность MyScanResult, объединяющую две предыдущие.
  • Обновить код. Попутно нужно добавить в таблицу нужные индексы.

Глобальный список исключений

Нужно обеспечить одностороннюю синхронизацию на клиент с интерфейсом для отключения всей фичи и индивидуальных пунктов.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.