Skip to content

Commit 47ce5bb

Browse files
committed
A-Z sorting
1 parent 4e60d1e commit 47ce5bb

File tree

10 files changed

+117
-33
lines changed

10 files changed

+117
-33
lines changed

app/src/main/java/tk/superl2/xwifi/MainActivity.kt

+24-14
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tk.superl2.xwifi
33
import android.Manifest
44
import android.app.AlertDialog
55
import android.content.Intent
6+
import android.content.SharedPreferences
67
import android.content.pm.PackageManager
78
import android.os.AsyncTask
89
import android.os.Build
@@ -34,21 +35,25 @@ class MainActivity: AppCompatActivity() {
3435
private val wifiEntrySSIDs = ArrayList<String>()
3536
private lateinit var loadWifiEntriesInBackgroundTask: LoadWifiEntriesInBackground
3637
private lateinit var qrDialog: AlertDialog
38+
private lateinit var prefs: SharedPreferences
3739

38-
fun sortWifiEntries(ascending: Boolean = true, updateListView: Boolean = false) {
39-
if (ascending) {
40-
wifiEntries.sortBy { it.title }
41-
wifiEntrySSIDs.sort()
42-
} else {
43-
wifiEntries.sortByDescending { it.title }
44-
wifiEntrySSIDs.sortDescending()
40+
fun sortWifiEntries(updateListView: Boolean) {
41+
when (prefs.getString("sorting", "alphabetical")) {
42+
"alphabetical" -> {
43+
wifiEntries.sortWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.title }))
44+
if (!prefs.getBoolean("sorting_order", DEFAULT_SORTING_ORDER)) wifiEntries.reverse()
45+
}
46+
}
47+
if (updateListView) {
48+
wifiEntrySSIDs.clear()
49+
wifiEntries.mapTo(wifiEntrySSIDs) { it.title }
50+
(wifi_ListView.adapter as ArrayAdapter<*>).notifyDataSetChanged()
4551
}
46-
if (updateListView) (wifi_ListView.adapter as ArrayAdapter<*>).notifyDataSetChanged()
4752
}
4853

4954
override fun onCreate(savedInstanceState: Bundle?) {
5055
PreferenceManager.setDefaultValues(this, R.xml.preferences, false)
51-
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
56+
prefs = PreferenceManager.getDefaultSharedPreferences(this)
5257

5358
setThemeFromSharedPrefs(prefs)
5459
super.onCreate(savedInstanceState)
@@ -146,7 +151,9 @@ class MainActivity: AppCompatActivity() {
146151

147152
override fun doInBackground(vararg params: Unit?) {
148153
loadWifiEntries()
149-
sortWifiEntries(ascending = true)
154+
sortWifiEntries(false)
155+
wifiEntrySSIDs.clear()
156+
wifiEntries.mapTo(wifiEntrySSIDs) { it.title }
150157
}
151158

152159
override fun onPostExecute(result: Unit?) {
@@ -158,10 +165,8 @@ class MainActivity: AppCompatActivity() {
158165
private fun loadWifiEntries() {
159166
Log.v(TAG, "Loading wifi entries...")
160167
wifiEntries.clear()
161-
wifiEntrySSIDs.clear()
162168
try {
163169
wifiEntries.addAll(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) readOreoFile() else readNonOreoFile())
164-
wifiEntries.mapTo(wifiEntrySSIDs) { it.title }
165170
Log.v(TAG, "Wifi entries loaded.")
166171
} catch (e: WifiUnparseableException) {
167172
if (!::errorDialogBuilder.isInitialized) {
@@ -200,12 +205,17 @@ class MainActivity: AppCompatActivity() {
200205
return true
201206
}
202207

203-
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
204-
return when (item!!.itemId) {
208+
override fun onOptionsItemSelected(item: MenuItem): Boolean {
209+
return when (item.itemId) {
205210
R.id.settingsItem -> {
206211
startActivity(Intent(this, SettingsActivity::class.java).putExtra("xposed", false))
207212
true
208213
}
214+
R.id.sortItem -> {
215+
prefs.edit().putBoolean("sorting_order", !prefs.getBoolean("sorting_order", DEFAULT_SORTING_ORDER)).apply()
216+
sortWifiEntries(true)
217+
true
218+
}
209219
else -> super.onOptionsItemSelected(item)
210220
}
211221
}

app/src/main/java/tk/superl2/xwifi/SettingsActivity.kt

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.support.v7.app.AppCompatDelegate
88
import android.widget.Toast
99

1010
internal const val DEFAULT_QR_CODE_RESOLUTION = "300"
11+
internal const val DEFAULT_SORTING_ORDER = true
1112

1213
class SettingsActivity: AppCompatActivity() {
1314
override fun onCreate(savedInstanceState: Bundle?) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<vector android:autoMirrored="true"
2+
android:height="24dp"
3+
android:viewportHeight="24.0"
4+
android:viewportWidth="24.0"
5+
android:width="24dp"
6+
xmlns:android="http://schemas.android.com/apk/res/android">
7+
<group
8+
android:rotation="90"
9+
android:translateX="24">
10+
<path
11+
android:fillColor="?attr/textColorAlertDialogListItem"
12+
android:pathData="M9.01,14L2,14v2h7.01v3L13,15l-3.99,-4v3zM14.99,13v-3L22,10L22,8h-7.01L14.99,5L11,9l3.99,4z" />
13+
</group>
14+
</vector>
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector android:autoMirrored="true"
2+
android:height="24dp"
3+
android:viewportHeight="24.0"
4+
android:viewportWidth="24.0"
5+
android:width="24dp"
6+
xmlns:android="http://schemas.android.com/apk/res/android">
7+
<path
8+
android:fillColor="?attr/textColorAlertDialogListItem"
9+
android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z" />
10+
</vector>

app/src/main/res/menu/menu_activity_main.xml

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
33
xmlns:android="http://schemas.android.com/apk/res/android">
44

5+
<item
6+
android:id="@+id/sortItem"
7+
android:icon="@drawable/ic_compare_arrows_24dp"
8+
android:title="@string/item_sort_menu_activity_main"
9+
app:showAsAction="ifRoom" />
510
<item
611
android:id="@+id/settingsItem"
712
android:checkable="false"
813
android:icon="@drawable/ic_settings_24dp"
9-
android:showAsAction="ifRoom"
1014
android:title="@string/item_settings_menu_activity_main"
11-
app:showAsAction="ifRoom" />
15+
app:showAsAction="never" />
1216
</menu>

app/src/main/res/values-v21/arrays.xml

+7
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,11 @@
5050
<item>Dark</item>
5151
<!--<item>System</item> &lt;!&ndash;Disabled for now. TODO Get system theme working. &ndash;&gt;-->
5252
</string-array>
53+
54+
<string-array name="sorting">
55+
<item>A-Z</item>
56+
</string-array>
57+
<string-array name="sorting_values">
58+
<item>alphabetical</item>
59+
</string-array>
5360
</resources>

app/src/main/res/values/arrays.xml

+7
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,11 @@
4848
<string-array name="themes" tools:ignore="InconsistentArrays">
4949
<item>Light</item>
5050
</string-array>
51+
52+
<string-array name="sorting">
53+
<item>A-Z</item>
54+
</string-array>
55+
<string-array name="sorting_values">
56+
<item>alphabetical</item>
57+
</string-array>
5158
</resources>

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
<string name="item_settings_menu_activity_main">Settings</string>
99
<string name="title_activity_settings">Settings</string>
1010
<string name="theme_restart_message">You may need to restart the app for the new theme to apply properly.</string>
11+
<string name="item_sort_menu_activity_main">Sort order</string>
1112
</resources>

app/src/main/res/xml/preferences.xml

+44-17
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,46 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
3-
<ListPreference
4-
android:defaultValue="Light"
5-
android:entries="@array/themes"
6-
android:entryValues="@array/themes"
7-
android:icon="@drawable/ic_palette_24dp"
8-
android:key="theme"
9-
android:summary="%s"
10-
android:title="App theme" />
11-
<ListPreference
12-
android:defaultValue="300"
13-
android:entries="@array/qr_code_resolutions_entries"
14-
android:entryValues="@array/qr_code_resolutions_values"
15-
android:icon="@drawable/ic_aspect_ratio_24dp"
16-
android:key="qr_code_resolution"
17-
android:summary="%s"
18-
android:title="Resolution of generated QR codes" />
2+
<PreferenceScreen xmlns:tools="http://schemas.android.com/tools"
3+
xmlns:android="http://schemas.android.com/apk/res/android">
4+
<PreferenceCategory
5+
android:iconSpaceReserved="true"
6+
android:title="Display"
7+
tools:ignore="UnusedAttribute" >
8+
<ListPreference
9+
android:defaultValue="Light"
10+
android:entries="@array/themes"
11+
android:entryValues="@array/themes"
12+
android:icon="@drawable/ic_palette_24dp"
13+
android:key="theme"
14+
android:summary="%s"
15+
android:title="App theme" />
16+
<ListPreference
17+
android:defaultValue="300"
18+
android:entries="@array/qr_code_resolutions_entries"
19+
android:entryValues="@array/qr_code_resolutions_values"
20+
android:icon="@drawable/ic_aspect_ratio_24dp"
21+
android:key="qr_code_resolution"
22+
android:summary="%s"
23+
android:title="Resolution of generated QR codes" />
24+
</PreferenceCategory>
25+
26+
<PreferenceCategory
27+
android:iconSpaceReserved="true"
28+
android:title="Sorting"
29+
tools:ignore="UnusedAttribute">
30+
<ListPreference
31+
android:defaultValue="alphabetical"
32+
android:entries="@array/sorting"
33+
android:entryValues="@array/sorting_values"
34+
android:icon="@drawable/ic_sort_24dp"
35+
android:key="sorting"
36+
android:summary="%s"
37+
android:title="Sort by" />
38+
<SwitchPreference
39+
android:defaultValue="true"
40+
android:icon="@drawable/ic_compare_arrows_24dp"
41+
android:key="sorting_order"
42+
android:summaryOff="Descending"
43+
android:summaryOn="Ascending"
44+
android:title="Sort order" />
45+
</PreferenceCategory>
1946
</PreferenceScreen>

app/src/main/res/xml/xposed_preferences.xml

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
3+
<PreferenceCategory
4+
android:title="Display"
5+
android:iconSpaceReserved="true" />
36
<ListPreference
47
android:defaultValue="300"
58
android:entries="@array/qr_code_resolutions_entries"

0 commit comments

Comments
 (0)