[Sony Ericsson Xperia Mini, Mini Pro, Xperia Pro, A] serajr:
Here´s my

Serajr Power Toggles

small application for all Sony JB/ICS Small App ready devices. It was built from scratch by me using lastest Sony Add-on SDK.

For now, all 23 toggles will be available and enable/disable and reorder buttons is not allowed!

I´ve tested it only on my fat ST15i, but it should work on all patched Framework stock roms, and here are the proofs:

Here's a little warning

: Unfortunately Sony does not provide it´s platform key pairs to sign third-party applications, and some toggles only the system can manage, so in order to get all toggles working, a very simple framework-res.apk and services.jar patch is needed. But don´t worry, the patch process does not edit any smali file, just creates new ones (provided on attachments)!!!

If you have installed previous patch, the one with SystemUI,apk, revert it back to its original state!!

Patching framework-res.apk process:

1. Decompile your framework-res.apk (pay attention, yours can be a little different from mine)

2. Edit AndroidManifest.xml (with notepad++)

3. Add red lines, save and close it:

<?xml version="1.0" encoding="utf-8"?>
<manifest android:sharedUserId="android.uid.system" android:versionCode="15" android:versionName="4.0.4-tL1_3w" android:sharedUserLabel="@string/android_system_label" package="android" coreApp="true"
xmlns:android="http://schemas.android.com/apk/res/android">
<eat-comment />
.
.
.
.
.
.
.
<application android:label="@string/android_system_label" android:icon="@drawable/ic_launcher_android" android:allowClearUserData="false" android:hasCode="false" android:persistent="true" android:process="system" android:backupAgent="com.android.server.SystemBackupAgent" android:killAfterRestore="false">
<activity android:theme="@style/BidiDialogAlert" android:name="com.android.internal.app.ChooserActivity" android:multiprocess="true" android:excludeFromRecents="true" android:finishOnCloseSystemDialogs="true">
<intent-filter>
<action android:name="android.intent.action.CHOOSER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:theme="@style/Theme.Holo.Dialog" android:label="@string/heavy_weight_switcher_title" android:name="com.android.internal.app.HeavyWeightSwitcherActivity" android:process=":ui" android:excludeFromRecents="true" android:finishOnCloseSystemDialogs="true" />
<activity android:theme="@style/Theme.Wallpaper.NoTitleBar.Fullscreen" android:name="com.android.internal.app.PlatLogoActivity" android:process=":ui" />
<activity android:theme="@style/Theme.NoDisplay" android:name="com.android.internal.app.DisableCarModeActivity" android:process=":ui" android:excludeFromRecents="true" />
<activity android:theme="@style/BidiDialogAlert" android:name="com.android.internal.app.RingtonePickerActivity" android:process=":ui" android:multiprocess="true" android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.RINGTONE_PICKER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:theme="@style/Theme.Holo.Dialog" android:label="@string/choose_account_label" android:name="android.accounts.ChooseAccountActivity" android:exported="true" android:process=":ui" android:excludeFromRecents="true" />
<activity android:theme="@style/Theme.Holo.DialogWhenLarge.NoActionBar" android:label="@string/choose_account_label" android:name="android.accounts.ChooseTypeAndAccountActivity" android:exported="true" android:process=":ui" android:excludeFromRecents="true" />
<activity android:theme="@style/Theme.Holo.DialogWhenLarge.NoActionBar" android:label="@string/choose_account_label" android:name="android.accounts.ChooseAccountTypeActivity" android:process=":ui" android:excludeFromRecents="true" />
<activity android:theme="@style/Theme.Holo.DialogWhenLarge" android:name="android.accounts.GrantCredentialsPermissionActivity" android:exported="true" android:process=":ui" android:excludeFromRecents="true" />
<activity android:theme="@style/Theme.Holo.Dialog" android:label="@string/sync_too_many_deletes" android:name="android.content.SyncActivityTooManyDeletes" android:process=":ui" />
<activity android:name="com.android.server.ShutdownActivity" android:permission="android.permission.SHUTDOWN" android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_REQUEST_SHUTDOWN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.REBOOT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:theme="@style/BidiDialogAlert" android:name="com.android.internal.app.NetInitiatedActivity" android:process=":ui" android:excludeFromRecents="true" />
<receiver android:name="com.android.server.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name="com.android.server.MasterClearReceiver" android:permission="android.permission.MASTER_CLEAR" android:priority="100">
<intent-filter>
<action android:name="android.intent.action.MASTER_CLEAR" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="android.intent.category.MASTER_CLEAR" />
</intent-filter>
</receiver>
<service android:name="com.android.internal.os.storage.ExternalStorageFormatter" android:permission="android.permission.MASTER_CLEAR" android:exported="true" />

[COLOR="Red"]<receiver android:name="com.serajr.powertoggles.receivers.NetworkModeButtonReceiver" android:process="com.android.phone">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_CHANGE_NETWORK_MODE" />
<action android:name="com.serajr.powertoggles.SMALLAPP_NEW_NETWORK_MODE" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.BrightnessButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_CHANGE_BRIGHTNESS_MODE" />
<action android:name="com.serajr.powertoggles.SMALLAPP_NEW_BRIGHTNESS_MODE" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.GPSButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_CHANGE_GPS_STATE" />
<action android:name="com.serajr.powertoggles.SMALLAPP_NEW_GPS_STATE" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.RebootButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_REQUEST_REBOOT" />
<action android:name="com.serajr.powertoggles.SMALLAPP_REBOOT_MODE" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.ShutdownButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_REQUEST_SHUTDOWN" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.USBConnectionModeButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_CHANGE_USB_CONNECTION_MODE" />
<action android:name="com.serajr.powertoggles.SMALLAPP_NEW_USB_CONNECTION_MODE" />
</intent-filter>
</receiver>
<receiver android:name="com.serajr.powertoggles.receivers.USBDebuggingButtonReceiver">
<intent-filter>
<action android:name="com.serajr.powertoggles.SMALLAPP_CHANGE_USB_DEBUGGING_STATE" />
<action android:name="com.serajr.powertoggles.SMALLAPP_NEW_USB_DEBUGGING_STATE" />
</intent-filter>
</receiver>[/COLOR]

</application>
</manifest>

4. Compile it (don´t re-sign it)!!

5. Done!

Patching services.jar process:

1. Decompile your services.jar (optionally use attached Jar_Decompile_Compile tool)

2. Download attached smali.zip file to your computer and unzip it

3. Copy unziped contents with all folders structure into decompiled services.jar project

4. You´ll get: ...\com\serajr\powertoggles\receivers\ (here are 8 smali files)

5. Compile project to get a new classes.dex

6. Replace classes.dex inside services.jar (open it with 7-Zip)

7. Done!

- Download attached framework_and_services_replacer.zip to your computer

- Open it with 7-Zip and go to \system\framework\ empty folder

- Drag and drop both modded framework-res.apk and services.jar inside \system\framework\ empty folder and close it

- Flash framework_and_services_replacer.zip

- Done!

Install process:

1. Download attached v1.0_JB_ICS_SmallApp-SerajrPowerToggles.zip file to your SD Card root

2. Flash it through recovery (CWM)

3. Done!

Attachment files info:

v1.0_JB_ICS_SmallApp-SerajrPowerToggles.zip

- Serajr Power Toggles Small App (flashable zip)

JB_ICS_SmallApp-Framework.zip - Optional

- Small App framework, external task switcher, and permission files (flashable zip)

- BE SURE TO REMOVE/UNINSTALL ANY PREVIOUSLY INSTALLED SmallAppManagerService.apk AND TaskSwitcher.apk (OR Task.apk) FROM /system/app/ BEFORE INSTALL THIS ONE

smali.zip

- Smali files for SystemUI.apk patching process (simple zip file)

Jar_Decompile_Compile.zip

- Tool for decompile/compile jar files

framework_and_services_replacer.zip

- Flashable zip file to easy replace patched framework-res.apk and services.jar

PLEASE... DO NOT MIRROR OR RE-MOD IT WITHOUT MY PERMISSION!!!​

if you like it... Press Thanks!!!! ;)

.

.