From 6dc0f9639e5c566818930fa183e67927a1b761f8 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Thu, 7 Jul 2011 14:24:26 -0700 Subject: [PATCH] Refactor Bluetooth settings Two lists: paired devices and available devices. New item at top for the device itself (not connected to discoverable, this is a larger refactoring). New settings icon. Change-Id: I788a6c0afdb07309d449a4d41a02cf8480c95a37 --- res/drawable-hdpi/ic_bt_config.png | Bin 1767 -> 773 bytes res/drawable-mdpi/ic_bt_config.png | Bin 1196 -> 653 bytes res/values/strings.xml | 6 +- .../settings/bluetooth/BluetoothSettings.java | 89 ++++++++++++------ 4 files changed, 61 insertions(+), 34 deletions(-) diff --git a/res/drawable-hdpi/ic_bt_config.png b/res/drawable-hdpi/ic_bt_config.png index c6d24833d46f2981e563c9b2394911324a9d9d23..47b4ba23f7a547b327d6a0dd592b7e188ebbc28e 100644 GIT binary patch literal 773 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCcKfnz$52J2-w_pT?Lfr0U*r;B4q#NoHoPX`_f5NX@bofvVVP4GC| z7KW@1jXALwn8FenZ#8jm-_Dr5fFbul;X$XE1g7Jzaw>}7C$hM=KfM3s+}YZ{&tvw< zJXo@ST9&bAdhu_K7G5TSYkj;{vbuiJS~njh@HuF=aOdrOGB@2WU}0i+nPLz}a@-6d z;SCSkmS%RxX*1U*9GhYqea&a)(ppom;svvRzGO^ZaJ)ey`}N&7PM0q89y-L`FL1SY z@-G2VS&efxwk$f|f4NzmJO95mL}r12+a4peq8ufjh{AKrE^KGKCn3nlJT2z)%-FkS zo_Pz-G%{$f+v6Ov&$RYIS5n8P8nMYbYyS8xWjCF>+F+B#g_Db`{&D4U{rw%(yKbf5 zG{HqRjyE6rs+w9~Eh5bxg@rR91+HDcsW|5jSajsdJ zWn{}#v%H|c{9-pVAM;J@cJ#6_vSo@>AX=TBoO^Xy-av zuhcT*-E?u8XKYGR;K5&Y0&jpaUk|Qae)ixiCFWee(un8e~8=1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP Q22{u3>FVdQ&MBb@03|y(X#fBK delta 1718 zcmV;n21)sa2ImbSiBL{Q4GJ0x0000DNk~Le0000;0000;2m}BC0RQBB%#k4&e*j1T z002k;M#*bF00009c5p#w0000;0000;0M2>v1pojA?@2^KRA}Dq*nNmxXBEfs&vR#H zU$dK%zSvSQh7w6MeWBECk!S>qwghZM5^Je7m`ZGt2K+H2e{^^Db$0IckGVU0XLdF_H8TZa&cMPjcc1gU=lsq& z&-2i+j&-bK9qZWtw}o~to-Fp0Ea$duKvkF=${Bx=L{j;=k@GeIr8rUQI+9nwjJYai zB5s7x2B2zIf>^AsQm|Ylc3Fs)1J&ScwA%*VW|hUrf9XQeY0rDs zYvRQK?EwlBd3)T8Nr@m()lN>A9^+2=g(oF#jZif{i3iyyS)fWy*-Vj&64~mriNi1Z$LpvfAiQVW?bCT-nWh*`90p0TjuOJ9! z&DKM-G(ySzpB=i)$Yox8f6i|)7v?)sX{j|@3KS%f*g8WdGdPJZXZ#UyQk#(meLGs- zP4n?d3udFiOm8OE>qX<0HW{)XAuYf*0A-Z<(fJ-+4P43bN+6b(Y)evBjeMl6+ZwZ( z7fs}iIYAv}yMQvCIZ<|vJyx5|gd$Ne;%u|)T@+9?O%Y<3*zPU^e~LAkN#va|CrFy< zF&6<;o#@00w%F-IipDbaRf%1qi`w?ra-f<-B|c`an@oF0t`4Un={35|2uTw$`X7KY ziAuyi=sufK)Pquk@jd4Q)_ARcNHn(hSoX<6q9U<=yBv0hDS0Kwo!8%>mgWo^(&U(W zPe3&=!Dff;RZ!CBe~2&JVVmcyScDXm-HdWGLTY-r)~V(Odwkrq*a{~NdqG9My$-m+ zWX+2vawdJz8M!*527BwKB9zot)KwmI$j!#}8uM-UctIqR$eVH?v&oo$iIU5F0>mNv zNfwWeWkp@rYx>-2yUUH~SMa#~&IzJ4O=TSSFIU&J#)_~%f9nW&~t6pcDxAED3` zP6Z~o)h_Fe%j@<#!(OSTaACE`<2IN|A*1R-xy*AF_-@bmR(-?FFAFp8@+0oI$&7IW zM(pz|NeWsU!?ji`NhAi$nG{4S!d~zjBX5=ULK>~*fa-e974G!~-Np@=^nH(+5DAN5 z3bxv**Nhc7f8t6*Ce2izt8DS}`UL-W)Delg(hC=aA=YiH9j@}OUi{L-PN#>Qg*7TM zyv1HODvII54`C5b#mOq$-KjrS&65s#yCF>EHuqU;TtUGx z!(Lrfc?;hwx=UQ(4kXm!1c`zzzGk&|bt!nxL;l{tNg{Er`)xF1&VW<)c{W>lp;nO> z7VZ*2e?j6Fd)#E&j6tXT$Zss%Vq{fwg`GaHVA7y-4mq3-jCgsc7qU=?^A!&$n-Jt3 z@MF^r6V+{-ue#EhK4njP#GBd5yO`7GLWCl*5BrHoNig83Z!Cziny46`wA=NHB0c_K z*vV`{FZL*$uSO`~(+0gQuPo;*8JvpC*fn#gIVh{ zI2D&GZFiRyiUv&hfyWfnz0pM{su572GJ6r3a-AVBDkvkCbBC{6V@z4Er_+AjVwen2 zkR*6H6>()cf74F?NpCau8ZvFdfR{YvrS$T$Wrj4|JJFZ17I%yjzbGhW%cqU$^u6zkawzVwd}lPbrHPoOaO9)7y+Tspi5! z(zx7alRmF{!nt;JlWzhX6*4naF*iCgGdeRiEigDbFfi)UgQb(80vtv%GgL7*Ix;gl zFflDKI65#e(5C`)0000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy M07*qoM6N<$f|V#W$^ZZW diff --git a/res/drawable-mdpi/ic_bt_config.png b/res/drawable-mdpi/ic_bt_config.png index eefda2649e19c34f5c8df5485ba8599b445aa6c4..792810427f92d8521d94cdb350b6c2db23830bb9 100644 GIT binary patch delta 595 zcmZ3(*~_Zf8Q|y6%O%Cdz`(%k>ERLtq!mDzg9S+5EZ$Tdg$8?YyFmC@fXD$N+W1**uV~EG`r&kU0t~f}rKFC)KQ&JQP>)>XP<-OHZ{X^hF z;N^hJ0mbcG_Hiy+=*TJVkl{LMYJ{0w*G4llx#P37SnD4rJ*)pe`}@4Q;`^e{^h|yV zyKaeEQT_bty!z%{*9wpBJZE)3(yBD8GlKuz;l3wVlAFSwc8mXbwREk9V(O1d-lmj? zcbK%#uW7O3HOcrihg~?~VA_EXClV*CWOqijDpWq%-D<+**(4vglkK|LzRISl%fp&N zO4mnLKVGroOCxvq+#46CUYGMSySB49p7)&1G5_<+O&%n$PqXc>zkB6Df9~?b$HYP> zFZr`#BDe3AsH*mUyYAB40$cC>YWQx~d8|Z z%w`jrS^?If<<{pQ$s@Q>XMM`otJ!imdwaXVa>+pW?6ulKj{jnw255A+Qu-riTZ zta%AAB1B7EBTAf$QWHxu^Yau!GILWI4D}6-^$iXGU0hc_S&~IY)X*Zt(9+7p+{(~Y z*TBNcz@YnC$JfbTEHa)LGQV~kcmfTT0T~*cpH@12{r?jW*`#L(?CT<6H#NP zITA5>Nz|EgQb!w@&dl-b{qNzdf4$E>GsifW9wO#@+U&K~@4vp=S_|fF-v0Au8dk-mL%Kh+|VhAV@R!XR?7On^mS6I%2!NPNI(bAv6h7#ppR)@VVTPT1hlZ45xjVfk_VpoN4y0>TG+&TZssKKu%8)3 zC%Z`zVt|k)zGX9pYC}{8_vvLTE1004KF(pWSVs7YNB9$i#gbzsf8CrVEdc=&OqO=; zSA-V>BkpE9-H1NtQCkUfyTYwN%loE}mx%hC}S+ zYgX|XchCal8RsXyf8jg+nv>e1Z?dvNRy`Wf8U3u+)GlP?$+)qbv_r!h)fakPX(1zo zvRbBFwOD@4i3+Jqz{m*Qsdsfkr?gMqLL}f>ZP1`bbyzQ{HL)FsbF)1sS^Hf7jv!+z55(4gI3i`bhV? z5L_KqsSn)sxsfIO&JBFV1Zl2dFa#`O6Hm~_3EpGB>)ym^UzLC>q3g-xBbHMv;t-Es zp5b;b(nmk%uz1M_N!2Fg3B90W8qy&hP?r$8OM7%mC)KZ&1&0ND7_V9tbck6_gJSbk|Szc!?Q+VVVU>BqD zP0+v_IT9#Jq}j-QTw*uh#|K_R_;_v1iJnXi24;>xEMW=UbLwA!&tmB6L-RIo|8M&n zjF;On4S>~@0000bbVXQnWMOn=I%9HWVRU5xGB7bQ87(j|EiyAyF*iCgGdeRiEigDb zFfi)UgQb%w0vtv%GgL7*Ix;glFflDKI65#e(5C`)0000PbVXQnQ*UN;cVTj606}DL gVr3vnZDD6+Qe|Oed2z{QJOBUy07*qoM6N<$f=x{L$N&HU diff --git a/res/values/strings.xml b/res/values/strings.xml index 251da79193a..f8d38a22750 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -955,10 +955,10 @@ Searching\u2026 Device settings - + Paired devices - - Found devices + + Available devices Connect diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 6a5641f69a7..2208223e1df 100644 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -23,6 +23,7 @@ import android.bluetooth.BluetoothDevice; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.util.Log; @@ -51,8 +52,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { private BluetoothEnabler mBluetoothEnabler; - private PreferenceGroup mFoundDevicesCategory; - private boolean mFoundDevicesCategoryIsPresent; + private PreferenceGroup mAvailableDevicesCategory; + private boolean mAvailableDevicesCategoryIsPresent; private View mView; private TextView mEmptyView; @@ -97,10 +98,6 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch); - if (mLocalAdapter != null && mLocalAdapter.isEnabled()) { - activity.getActionBar().setSubtitle(mLocalAdapter.getName()); - } - setHasOptionsMenu(true); } @@ -159,8 +156,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { } private void startScanning() { - if (!mFoundDevicesCategoryIsPresent) { - getPreferenceScreen().addPreference(mFoundDevicesCategory); + if (!mAvailableDevicesCategoryIsPresent) { + getPreferenceScreen().addPreference(mAvailableDevicesCategory); } mLocalAdapter.startScanning(true); } @@ -171,6 +168,16 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { super.onDevicePreferenceClick(btPreference); } + private void addDeviceCategory(PreferenceGroup preferenceGroup, int titleId, + BluetoothDeviceFilter.Filter filter) { + preferenceGroup.setTitle(titleId); + getPreferenceScreen().addPreference(preferenceGroup); + setFilter(filter); + setDeviceListGroup(preferenceGroup); + addCachedDevices(); + preferenceGroup.setEnabled(true); + } + private void updateContent(int bluetoothState) { final PreferenceScreen preferenceScreen = getPreferenceScreen(); getActivity().invalidateOptionsMenu(); @@ -179,42 +186,58 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { switch (bluetoothState) { case BluetoothAdapter.STATE_ON: preferenceScreen.removeAll(); - - // Add bonded devices from cache first - setFilter(BluetoothDeviceFilter.BONDED_DEVICE_FILTER); - setDeviceListGroup(preferenceScreen); preferenceScreen.setOrderingAsAdded(true); - addCachedDevices(); - int numberOfPairedDevices = preferenceScreen.getPreferenceCount(); + // This device + if (mMyDevicePreference == null) { + mMyDevicePreference = new Preference(getActivity()); + } + if (mLocalAdapter != null) { + mMyDevicePreference.setTitle(mLocalAdapter.getName()); + } + mMyDevicePreference.setEnabled(true); + preferenceScreen.addPreference(mMyDevicePreference); - // Found devices category - mFoundDevicesCategory = new ProgressCategory(getActivity(), null); - mFoundDevicesCategory.setTitle(R.string.bluetooth_preference_found_devices); - preferenceScreen.addPreference(mFoundDevicesCategory); - mFoundDevicesCategoryIsPresent = true; + // Paired devices category + if (mPairedDevicesCategory == null) { + mPairedDevicesCategory = new PreferenceCategory(getActivity()); + } else { + mPairedDevicesCategory.removeAll(); + } + addDeviceCategory(mPairedDevicesCategory, + R.string.bluetooth_preference_paired_devices, + BluetoothDeviceFilter.BONDED_DEVICE_FILTER); + int numberOfPairedDevices = mPairedDevicesCategory.getPreferenceCount(); - // Unbonded found devices from cache - setFilter(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER); - setDeviceListGroup(mFoundDevicesCategory); - addCachedDevices(); + // Available devices category + if (mAvailableDevicesCategory == null) { + mAvailableDevicesCategory = new ProgressCategory(getActivity(), null); + } else { + mAvailableDevicesCategory.removeAll(); + } + addDeviceCategory(mAvailableDevicesCategory, + R.string.bluetooth_preference_found_devices, + BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER); + int numberOfAvailableDevices = mAvailableDevicesCategory.getPreferenceCount(); + mAvailableDevicesCategoryIsPresent = true; - int numberOfUnpairedDevices = mFoundDevicesCategory.getPreferenceCount(); - if (numberOfUnpairedDevices == 0) { - preferenceScreen.removePreference(mFoundDevicesCategory); - mFoundDevicesCategoryIsPresent = false; + if (numberOfAvailableDevices == 0) { + preferenceScreen.removePreference(mAvailableDevicesCategory); + mAvailableDevicesCategoryIsPresent = false; } - if (numberOfPairedDevices == 0) startScanning(); - - return; + if (numberOfPairedDevices == 0) { + preferenceScreen.removePreference(mPairedDevicesCategory); + startScanning(); + } + return; // not break case BluetoothAdapter.STATE_TURNING_OFF: int preferenceCount = preferenceScreen.getPreferenceCount(); for (int i = 0; i < preferenceCount; i++) { preferenceScreen.getPreference(i).setEnabled(false); } - return; + return; // not break case BluetoothAdapter.STATE_OFF: messageId = R.string.bluetooth_empty_list_bluetooth_off; @@ -268,6 +291,10 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { } }; + private Preference mMyDevicePreference; + + private PreferenceGroup mPairedDevicesCategory; + /** * Add a listener, which enables the advanced settings icon. * @param preference the newly added preference