Previously a profile can exist in the following forms:
* `.database.Profile` used for everything backend;
* `.ShadowsocksSettings` which uses Preferences to provide UI to tweak settings;
* `.aidl.Config` used for IPC;
* `<data dir>/shared_pref/com.github.shadowsocks_preferences.xml` which exists for no apparent reason.
Thus long code block can be seen whose purpose is simply converting the data from one form to another. This commit intends to remove the latter two by:
1. Using profile ID and take advantage of fs r/w lock SQLite uses for IPC and better extensibility;
2. Stop persisting redundant fields in the preferences file and update database directly.
This commit adds an app banner in Android TV and introduces several changes including refactoring AppManager to make all features accessible with D-pad navigation.
Currently this app has the exact same user interface on Android TV as on normal Android devices but one should create a TV-specific user interface in the future.
P.S. Only tested in Android emulator. More testing might be needed.
* Refine exceptions handling when parsing per-app config string
* Remove redundant profiles Preference
* Move Network Traffic to title bar
* Add ripple to title text
* Animate using animateLayoutChanges
* Hide connection test in NAT mode
* Refine UI.
* Change notification action button icon for hidpi device
* Fix FAB ripple
* Fix usability problem
* Fix changes not commited when snackbar being swiped
* Show import/export as action
* Drop unused drawables
* Move TaskerSettings
* Fix action icons
* Prevent switching to an invalid profile
* Fix line wrap when screen width is small
* Refine exceptions handling when parsing per-app config string
* Remove redundant profiles Preference
* Move Network Traffic to title bar
* Add ripple to title text
* Animate using animateLayoutChanges
* Hide connection test in NAT mode