1
1.AndroidManifest.xml
<uses-permission android: name = "android.permission.CAMERA" />
2
2./res/values/integers.xml
<integer name = "config_maxToolItemsInGrid">17</ integer>
Remove the restriction on the number of fast parameters.
3
3./res/values/strings.xml
<string name = "somc_status_bar_flashlight">Flashlight</ string>
Add to their localization.
In arrays.xml
<string-array name = "config_toolButtons">
......
<item>flashlight</ item>
</ string-array>
......
<string-array name = "config_allToolButtons">
<item>flashlight</ item>
</ string-array>
......
<string-array name = "config_iconItemsString">
......
<item>flashlight; somc_ic_settings_flashlight</ item>
</ string-array>
<string-array name = "config_textItemsString">
......
<item>flashlight; somc_status_bar_flashlight</ item>
</ string-array>
4
4. RecompileSystemUI replace public.xml Original.
Next, you need the following IDs:
<public type = "string" name = "somc_status_bar_flashlight"
<public type = "string" name = "accessibility_desc_off
<public type = "string" name = "accessibility_desc_on
<public type = "drawable" name = "somc_statusbar_flashlight_off
<public type = "drawable" name = "somc_statusbar_flashlight_on"
5
5.smali \ com \ sonymobile \ systemui \ statusbar \ tools \ ToolsMain.smali
Looks like this in red add.
.line 255
: cond_0
: goto_0
return-void
.line 222
: cond_1
const-string v0, "flashlight"
invoke-virtual {v0, p1}, Ljava / lang / String; ->equals (Ljava / lang / Object;) Z
move-result v0
if-eqz v0,: cond_aa
invoke-direct {p0}, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->createFlashLight () V
goto: goto_0
: cond_aa
const-string v0, "bluetooth"
invoke-virtual {v0, p1}, Ljava / lang / String; ->equals (Ljava / lang / Object;) Z
move-result v0
if-eqz v0,: cond_2
.line 223
invoke-direct {p0}, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->createBluetooth () V
goto: goto_0
Approximately get so and just looks at himselfFreeflax .
Further, we are looking below.
....
....
....
.method private createDummy () V
.locals 3
.prologue
.line 943
new-instance v0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ 20;
iget-object v1, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mContext: Landroid / content / Context;
const / 4 v2, 0x1
invoke-direct {v0, p0, v1, v2}, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ 20 -><init>(Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; Landroid / content / Context; I) V
.line 957
.local v0, "button": Lcom / sonymobile / systemui / statusbar / tools / ToolsButton;
const / 4 v1,0x0
invoke-virtual {v0, v1}, Landroid / view / View; ->setFocusable (Z) V
.line 959
iget-object v1, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mButtons: Ljava / util / LinkedList;
invoke-virtual {v1, v0}, Ljava / util / LinkedList; ->add (Ljava / lang / Object;) Z
.line 960
return-void
.end method
.method private createFlashLight () V
.locals 7
.prologue
const / 4 v6, 0x1
const / 4 v5, 0x0
new-instance v0, Lcom / sonymobile / systemui / statusbar / tools / FlashLightService;
iget-object v1, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mContext: Landroid / content / Context;
invoke-direct {v0, v1}, Lcom / sonymobile / systemui / statusbar / tools / FlashLightService; -><init>(Landroid / content / Context;) V
new-instance v1, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ FlashLight;
iget-object v2, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mContext: Landroid / content / Context;
invoke-direct {v1, p0, v2, v0}, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ FlashLight; -><init>(Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; Landroid / content / Context; Lcom / sonymobile / systemui / statusbar / tools / FlashLightService;) V
const v2, 0x7f0b0123#<public type = "string" name = "somc_status_bar_flashlight"
invoke-virtual {v1, v2}, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton; ->setTextId (I) V
const v2, 0x7f0b00a4#<public type = "string" name = "accessibility_desc_off
invoke-static {v2}, Ljava / lang / Integer; ->valueOf (I) Ljava / lang / Integer;
move-result-object v2
new-instance v3, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;
const v4, 0x7f020210#<public type = "drawable" name = "somc_statusbar_flashlight_off
invoke-direct {v3, v4, v5}, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon; -><init>(IZ) V
new-array v4, v5, [Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;
invoke-virtual {v1, v5, v2, v3, v4}, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton; ->addState (ILjava / lang / Integer; Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon; [Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;) V
const v2, 0x7f0b00a3# <public type = "string" name = "accessibility_desc_on
invoke-static {v2}, Ljava / lang / Integer; ->valueOf (I) Ljava / lang / Integer;
move-result-object v2
new-instance v3, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;
const v4, 0x7f020211# <public type = "drawable" name = "somc_statusbar_flashlight_on
invoke-direct {v3, v4, v6}, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon; -><init>(IZ) V
new-array v4, v5, [Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;
invoke-virtual {v1, v6, v2, v3, v4}, Lcom / sonymobile / systemui / statusbar / tools / ToolsButton; ->addState (ILjava / lang / Integer; Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon; [Lcom / sonymobile / systemui / statusbar / tools / ToolsButton $ ToolsIcon;) V
iget-object v2, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mButtons: Ljava / util / LinkedList;
invoke-virtual {v2, v1}, Ljava / util / LinkedList; ->add (Ljava / lang / Object;) Z
iget-object v2, p0, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain; ->mServices: Ljava / util / LinkedList;
invoke-virtual {v2, v0}, Ljava / util / LinkedList; ->add (Ljava / lang / Object;) Z
new-instance v2, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ ToolsServiceListenerImpl;
invoke-direct {v2, v1}, Lcom / sonymobile / systemui / statusbar / tools / ToolsMain $ ToolsServiceListenerImpl; -><init>(Lcom / sonymobile / systemui / statusbar / tools / ToolsButton;) V
invoke-virtual {v0, v2}, Lcom / sonymobile / systemui / statusbar / tools / ToolsService; ->setListener (Lcom / sonymobile / systemui / statusbar / tools / ToolsService $ ToolsServiceListener;) V
return-void
.end method
.method private createGps () V
.locals 7
6
6. In this all, compile the source file, sign, unnecessarily added a line in manifest.I rejoice ....