Skip to content

Commit 24f6043

Browse files
Daneshcodenamedroid
authored andcommitted
Onscreen controls customization
Allow onscreen controls to be re-arranged + show/hide search button Depends on cmSettings (not merged yet) found at : http://goo.gl/eBnMN Patchset2 : Minor cleanup. Change-Id: I9ab6d9de9d00c45b5673b9247abb96cbf1a9d434
1 parent 34fb1cc commit 24f6043

File tree

8 files changed

+179
-46
lines changed

8 files changed

+179
-46
lines changed

core/java/android/provider/Settings.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2071,6 +2071,13 @@ public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
20712071
*/
20722072
public static final String WIDGET_BUTTONS = "expanded_widget_buttons";
20732073

2074+
/**
2075+
* Navigation controls to Use
2076+
*
2077+
* @hide
2078+
*/
2079+
public static final String NAV_BUTTONS = "nav_buttons";
2080+
20742081
/**
20752082
* Notification Power Widget - Custom Brightness Mode
20762083
* @hide
4.38 KB
Loading
2.82 KB
Loading

packages/SystemUI/res/layout/navigation_bar.xml

Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -43,49 +43,58 @@
4343

4444
<!-- navigation controls -->
4545
<View
46-
android:layout_width="40dp"
46+
android:layout_width="match_parent"
4747
android:layout_height="match_parent"
48-
android:layout_weight="0"
48+
android:layout_weight="1"
4949
android:visibility="invisible"
5050
/>
51-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
51+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/one"
5252
android:layout_width="80dp"
5353
android:layout_height="match_parent"
54-
android:src="@drawable/ic_sysbar_back"
55-
systemui:keyCode="4"
54+
systemui:keyRepeat="true"
5655
android:layout_weight="0"
57-
systemui:glowBackground="@drawable/ic_sysbar_highlight"
58-
android:contentDescription="@string/accessibility_back"
59-
/>
60-
<View
56+
systemui:glowBackground="@drawable/ic_sysbar_highlight" />
57+
<View
6158
android:layout_width="match_parent"
6259
android:layout_height="match_parent"
6360
android:layout_weight="1"
6461
android:visibility="invisible"
6562
/>
66-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
63+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/two"
6764
android:layout_width="80dp"
6865
android:layout_height="match_parent"
69-
android:src="@drawable/ic_sysbar_home"
70-
systemui:keyCode="3"
71-
systemui:keyRepeat="false"
66+
systemui:keyRepeat="true"
7267
android:layout_weight="0"
73-
systemui:glowBackground="@drawable/ic_sysbar_highlight"
74-
android:contentDescription="@string/accessibility_home"
68+
systemui:glowBackground="@drawable/ic_sysbar_highlight" />
69+
<View
70+
android:layout_width="match_parent"
71+
android:layout_height="match_parent"
72+
android:layout_weight="1"
73+
android:visibility="invisible"
7574
/>
76-
<View
75+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/three"
76+
android:layout_width="80dp"
77+
android:layout_height="match_parent"
78+
android:layout_weight="0"
79+
systemui:keyRepeat="true"
80+
systemui:glowBackground="@drawable/ic_sysbar_highlight" />
81+
<View
7782
android:layout_width="match_parent"
7883
android:layout_height="match_parent"
7984
android:layout_weight="1"
8085
android:visibility="invisible"
8186
/>
82-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
87+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/four"
8388
android:layout_width="80dp"
8489
android:layout_height="match_parent"
85-
android:src="@drawable/ic_sysbar_recent"
8690
android:layout_weight="0"
87-
systemui:glowBackground="@drawable/ic_sysbar_highlight"
88-
android:contentDescription="@string/accessibility_recent"
91+
systemui:keyRepeat="true"
92+
systemui:glowBackground="@drawable/ic_sysbar_highlight" />
93+
<View
94+
android:layout_width="match_parent"
95+
android:layout_height="match_parent"
96+
android:layout_weight="1"
97+
android:visibility="invisible"
8998
/>
9099
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
91100
android:layout_width="40dp"
@@ -180,49 +189,61 @@
180189
android:contentDescription="@string/accessibility_menu"
181190
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
182191
/>
183-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
192+
<View
193+
android:layout_height="match_parent"
194+
android:layout_width="match_parent"
195+
android:layout_weight="1"
196+
android:visibility="invisible"
197+
/>
198+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/one"
184199
android:layout_height="80dp"
185200
android:layout_width="match_parent"
186-
android:src="@drawable/ic_sysbar_recent_land"
187201
android:layout_weight="0"
188-
android:contentDescription="@string/accessibility_recent"
189202
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
190203
/>
191-
<View
204+
<View
192205
android:layout_height="match_parent"
193206
android:layout_width="match_parent"
194207
android:layout_weight="1"
195208
android:visibility="invisible"
196209
/>
197-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
210+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/two"
198211
android:layout_height="80dp"
199212
android:layout_width="match_parent"
200-
android:src="@drawable/ic_sysbar_home_land"
201213
systemui:keyCode="3"
202214
systemui:keyRepeat="false"
203215
android:layout_weight="0"
204-
android:contentDescription="@string/accessibility_home"
205216
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
206217
/>
207-
<View
218+
<View
208219
android:layout_height="match_parent"
209220
android:layout_width="match_parent"
210221
android:layout_weight="1"
211222
android:visibility="invisible"
212223
/>
213-
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
224+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/three"
214225
android:layout_height="80dp"
215226
android:layout_width="match_parent"
216-
android:src="@drawable/ic_sysbar_back_land"
217227
systemui:keyCode="4"
218228
android:layout_weight="0"
219-
android:contentDescription="@string/accessibility_back"
220229
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
221230
/>
222231
<View
223-
android:layout_height="40dp"
232+
android:layout_height="match_parent"
233+
android:layout_width="match_parent"
234+
android:layout_weight="1"
235+
android:visibility="invisible"
236+
/>
237+
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/four"
224238
android:layout_width="match_parent"
239+
android:layout_height="80dp"
225240
android:layout_weight="0"
241+
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
242+
/>
243+
<View
244+
android:layout_height="match_parent"
245+
android:layout_width="match_parent"
246+
android:layout_weight="1"
226247
android:visibility="invisible"
227248
/>
228249
</LinearLayout>

packages/SystemUI/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@
200200
<string name="accessibility_menu">Menu</string>
201201
<!-- Content description of the recents button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
202202
<string name="accessibility_recent">Recent apps</string>
203+
<string name="accessibility_search">Search</string>
203204

204205
<!-- Content description of the switch input method button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
205206
<string name="accessibility_ime_switch_button">Switch input method button.</string>

packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

Lines changed: 91 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,35 @@
1616

1717
package com.android.systemui.statusbar.phone;
1818

19+
import java.io.FileDescriptor;
20+
import java.io.PrintWriter;
21+
1922
import android.animation.Animator;
2023
import android.animation.AnimatorListenerAdapter;
24+
import android.content.ContentResolver;
2125
import android.content.Context;
26+
import android.content.res.Configuration;
2227
import android.content.res.Resources;
28+
import android.database.ContentObserver;
2329
import android.graphics.Rect;
30+
import android.os.Handler;
2431
import android.os.ServiceManager;
32+
import android.provider.Settings;
2533
import android.util.AttributeSet;
2634
import android.util.Slog;
27-
import android.view.animation.AccelerateInterpolator;
2835
import android.view.Display;
36+
import android.view.KeyEvent;
2937
import android.view.MotionEvent;
38+
import android.view.Surface;
3039
import android.view.View;
3140
import android.view.ViewGroup;
32-
import android.view.Surface;
3341
import android.view.WindowManager;
42+
import android.view.animation.AccelerateInterpolator;
3443
import android.widget.LinearLayout;
3544

36-
import java.io.FileDescriptor;
37-
import java.io.PrintWriter;
38-
import java.lang.StringBuilder;
39-
4045
import com.android.internal.statusbar.IStatusBarService;
41-
4246
import com.android.systemui.R;
47+
import com.android.systemui.statusbar.policy.KeyButtonView;
4348

4449
public class NavigationBarView extends LinearLayout {
4550
final static boolean DEBUG = false;
@@ -59,23 +64,91 @@ public class NavigationBarView extends LinearLayout {
5964
int mBarSize;
6065
boolean mVertical;
6166

62-
boolean mHidden, mLowProfile, mShowMenu;
67+
boolean mHidden, mLowProfile, mShowMenu, mHideSearch;
6368
int mDisabledFlags = 0;
6469

70+
public void updateButtons() {
71+
String saved = Settings.System.getString(mContext.getContentResolver(), Settings.System.NAV_BUTTONS);
72+
if (saved == null) {
73+
saved = "back|home|recent|search0";
74+
}
75+
boolean isPortrait = mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
76+
int[] ids = {R.id.one,R.id.two,R.id.three,R.id.four};
77+
mHideSearch = saved.contains("search0");
78+
int cc =0;
79+
//Reset all paddings to invisible
80+
ViewGroup navPanel = ((ViewGroup) mCurrentView.findViewById(R.id.nav_buttons));
81+
for (int cv = 0; cv < navPanel.getChildCount(); cv++) {
82+
if (!(navPanel.getChildAt(cv) instanceof KeyButtonView)) {
83+
navPanel.getChildAt(cv).setVisibility(View.INVISIBLE);
84+
}
85+
}
86+
for (String buttons : saved.split("\\|") ){
87+
KeyButtonView cView = (KeyButtonView) mCurrentView.findViewById(ids[cc]);
88+
if (buttons.equals("back")){
89+
cView.setTag("back");
90+
cView.setContentDescription(mContext.getResources().getString(R.string.accessibility_back));
91+
cView.setMCode(KeyEvent.KEYCODE_BACK);
92+
if (isPortrait) {
93+
cView.setImageResource(R.drawable.ic_sysbar_back);
94+
} else {
95+
cView.setImageResource(R.drawable.ic_sysbar_back_land);
96+
}
97+
} else if (buttons.equals("home")){
98+
cView.setTag("home");
99+
cView.setContentDescription(mContext.getResources().getString(R.string.accessibility_home));
100+
cView.setMCode(KeyEvent.KEYCODE_HOME);
101+
if (isPortrait) {
102+
cView.setImageResource(R.drawable.ic_sysbar_home);
103+
} else {
104+
cView.setImageResource(R.drawable.ic_sysbar_home_land);
105+
}
106+
} else if (buttons.equals("recent")){
107+
cView.setTag("recent");
108+
cView.setContentDescription(mContext.getResources().getString(R.string.accessibility_recent));
109+
cView.setMCode(0);
110+
if (isPortrait) {
111+
cView.setImageResource(R.drawable.ic_sysbar_recent);
112+
} else {
113+
cView.setImageResource(R.drawable.ic_sysbar_recent_land);
114+
}
115+
} else {
116+
cView.setTag("search");
117+
cView.setContentDescription(mContext.getResources().getString(R.string.accessibility_search));
118+
cView.setMCode(KeyEvent.KEYCODE_SEARCH);
119+
if (isPortrait) {
120+
cView.setImageResource(R.drawable.ic_sysbar_search);
121+
} else {
122+
cView.setImageResource(R.drawable.ic_sysbar_search_land);
123+
}
124+
//Hide search button padding
125+
if (mHideSearch) {
126+
navPanel.getChildAt(navPanel.indexOfChild(cView) - 1).setVisibility(View.GONE);
127+
}
128+
}
129+
cc++;
130+
}
131+
mCurrentView.invalidate();
132+
}
133+
65134
public View getRecentsButton() {
66-
return mCurrentView.findViewById(R.id.recent_apps);
135+
return mCurrentView.findViewWithTag("recent");
67136
}
68137

69138
public View getMenuButton() {
70139
return mCurrentView.findViewById(R.id.menu);
71140
}
72141

73142
public View getBackButton() {
74-
return mCurrentView.findViewById(R.id.back);
143+
return mCurrentView.findViewWithTag("back");
75144
}
76145

77146
public View getHomeButton() {
78-
return mCurrentView.findViewById(R.id.home);
147+
return mCurrentView.findViewWithTag("home");
148+
}
149+
150+
public View getSearchButton() {
151+
return mCurrentView.findViewWithTag("search");
79152
}
80153

81154
public NavigationBarView(Context context, AttributeSet attrs) {
@@ -128,6 +201,11 @@ public void setDisabledFlags(int disabledFlags, boolean force) {
128201
getBackButton() .setVisibility(disableBack ? View.INVISIBLE : View.VISIBLE);
129202
getHomeButton() .setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
130203
getRecentsButton().setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
204+
if (!mHideSearch) {
205+
getSearchButton() .setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
206+
} else {
207+
getSearchButton() .setVisibility(View.GONE);
208+
}
131209
}
132210

133211
public void setMenuVisibility(final boolean show) {
@@ -139,7 +217,7 @@ public void setMenuVisibility(final boolean show, final boolean force) {
139217

140218
mShowMenu = show;
141219

142-
getMenuButton().setVisibility(mShowMenu ? View.VISIBLE : View.INVISIBLE);
220+
getMenuButton().setVisibility(mShowMenu ? View.VISIBLE : View.GONE);
143221
}
144222

145223
public void setLowProfile(final boolean lightsOut) {
@@ -228,7 +306,7 @@ public void reorient() {
228306
mCurrentView = mRotatedViews[rot];
229307
mCurrentView.setVisibility(View.VISIBLE);
230308
mVertical = (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270);
231-
309+
updateButtons();
232310
// force the low profile & disabled states into compliance
233311
setLowProfile(mLowProfile, false, true /* force */);
234312
setDisabledFlags(mDisabledFlags, true /* force */);

packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
import android.app.PendingIntent;
2626
import android.app.StatusBarManager;
2727
import android.content.BroadcastReceiver;
28+
import android.content.ContentResolver;
2829
import android.content.Context;
2930
import android.content.Intent;
3031
import android.content.IntentFilter;
3132
import android.content.pm.ApplicationInfo;
3233
import android.content.pm.PackageManager.NameNotFoundException;
3334
import android.content.res.Resources;
3435
import android.content.res.Configuration;
36+
import android.database.ContentObserver;
3537
import android.graphics.PixelFormat;
3638
import android.graphics.Rect;
3739
import android.graphics.drawable.Drawable;
@@ -311,7 +313,8 @@ protected View makeStatusBarView() {
311313
} catch (RemoteException ex) {
312314
// no window manager? good luck with that
313315
}
314-
316+
NavPanelObserver settingsObserver = new NavPanelObserver(new Handler());
317+
settingsObserver.observe();
315318
// figure out which pixel-format to use for the status bar.
316319
mPixelFormat = PixelFormat.OPAQUE;
317320
mStatusIcons = (LinearLayout)sb.findViewById(R.id.statusIcons);
@@ -395,6 +398,25 @@ public void onClick(View v) {
395398
return sb;
396399
}
397400

401+
protected class NavPanelObserver extends ContentObserver {
402+
public NavPanelObserver(Handler handler) {
403+
super(handler);
404+
}
405+
406+
public void observe() {
407+
ContentResolver resolver = mContext.getContentResolver();
408+
resolver.registerContentObserver(
409+
Settings.System.getUriFor(Settings.System.NAV_BUTTONS),
410+
false, this);
411+
onChange(true);
412+
}
413+
414+
@Override
415+
public void onChange(boolean selfChange) {
416+
prepareNavigationBarView();
417+
}
418+
}
419+
398420
protected WindowManager.LayoutParams getRecentsLayoutParams(LayoutParams layoutParams) {
399421
boolean opaque = false;
400422
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(

0 commit comments

Comments
 (0)