[Galaxy Note5 Themes and Apps] jovy23:
Hello to all Developers and XDA members! I have come here to give you a guide on how to add contacts, tasks, and apps edge panel on your Galaxy Note 5 device and maybe some other devices as well so here is how you can do it!

What Is Required...

★ First you need to have experience and know how to decompile/recompile apks with Apktools, apkmanager, smali, and baksmali

★ Have 7-zip installed onto your computer/laptop

★ Make sure you have Notepad++ also installed!

★HOW TO ADD CONTACTS, TASKS, AND APPS EDGE PANEL★

WHAT DOES THIS MOD DO: This mod will let you add contacts, tasks, and apps edge panel on your non edge/edge+ Samsung device. (On Marshmallow Firmware).

★ First go into your system/etc folder and find the "floating_feature.xml"

Now open up "floating_feature.xml" with notepad++ for editing.

SEARCH FOR:

<SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE></SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE>
<SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE_STRIPE></SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE_STRIPE>

NOW CHANGE THEM TO:

<SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE>people,task,circle,panel</SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE>
<SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE_STRIPE>-1</SEC_FLOATING_FEATURE_COMMON_CONFIG_EDGE_STRIPE>

★ Now go into your system/framework folder and take out your "services.jar"

★ Now decompile/baksmali services.jar, then navigate to:

Now open up "SystemServer.smali" with notepad++ for editing.

Now for this part of this guide what I have highlighted in "GREEN" text is what you have to find using Notepad++, And what you see in "BLUE" are the line(s) you have to make changes to:

SEARCH FOR:

[COLOR="Green"] const-string/jumbo v6, "spengestureservice"[/COLOR]

YOU SHOULD SEE SOMETHING LIKE THIS:

const-string/jumbo v6, "spengestureservice"

new-instance v7, Lcom/android/server/smartclip/SpenGestureManagerService;

move-object/from16 v0, v206

invoke-direct {v7, v5, v0}, Lcom/android/server/smartclip/SpenGestureManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V

invoke-static {v6, v7}, Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V
:try_end_d83
.catch Ljava/lang/Throwable; {:try_start_d6f .. :try_end_d83} :catch_1747

.line 2033
:goto_d83
:try_start_d83
const-string v6, "SystemServer"

const-string v7, "SamplingProfiler Service"

invoke-static {v6, v7}, Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I

NOW ADD NEW LINES IN BLUE, MAKE SURE YOU PUT THEM IN THE RIGHT PLACE IN BETWEEN :GOTO AND :TRY_START:

const-string/jumbo v6, "spengestureservice"

new-instance v7, Lcom/android/server/smartclip/SpenGestureManagerService;

move-object/from16 v0, v206

invoke-direct {v7, v5, v0}, Lcom/android/server/smartclip/SpenGestureManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V

invoke-static {v6, v7}, Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V
:try_end_d83
.catch Ljava/lang/Throwable; {:try_start_d6f .. :try_end_d83} :catch_1747

.line 2033
:goto_d83
[COLOR="Blue"] move-object/from16 v0, p0

iget-object v6, v0, Lcom/android/server/SystemServer;->mSystemServiceManager:Lcom/android/server/SystemServiceManager;

const-string v7, "com.android.server.cocktailbar.CocktailBarManagerService"

invoke-virtual {v6, v7}, Lcom/android/server/SystemServiceManager;->startService(Ljava/lang/String;)Lcom/android/server/SystemService;[/COLOR]

:try_start_d83
const-string v6, "SystemServer"

const-string v7, "SamplingProfiler Service"

invoke-static {v6, v7}, Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I

Now navigate to:

SEARCH FOR:

[COLOR="Green"] const-string v8, "SEC_PRODUCT_FEATURE_COMMON_SUPPORT_COCKTAIL_FW: false"[/COLOR]

NOW MAKE CHANGES THAT YOU SEE IN BLUE:

[COLOR="Green"] const-string v8, "SEC_PRODUCT_FEATURE_COMMON_SUPPORT_COCKTAIL_FW: [COLOR="Blue"]true[/COLOR]"[/COLOR]

Now navigate to:

SEARCH FOR:

[COLOR="Green"].method public enqueueEdgeNotification(Ljava/lang/String;Ljava/lang/String;ILandroid/os/Bundle;I)V[/COLOR]

IT SHOULD LOOK SOMETHING LIKE THIS:

.method public enqueueEdgeNotification(Ljava/lang/String;Ljava/lang/String;ILandroid/os/Bundle;I)V
.registers 6
.param p1, "pkg" # Ljava/lang/String;
.param p2, "opPkg" # Ljava/lang/String;
.param p3, "id" # I
.param p4, "extra" # Landroid/os/Bundle;
.param p5, "userId" # I

.prologue
.line 2023
return-void
.end method

NOW REMOVE THAT WHOLE METHOD AND ADD NEW METHOD THAT YOU SEE BELOW IN BLUE:

[COLOR="Blue"].method public enqueueEdgeNotification(Ljava/lang/String;Ljava/lang/String;ILandroid/os/Bundle;I)V
.registers 14
.param p1, "pkg" # Ljava/lang/String;
.param p2, "opPkg" # Ljava/lang/String;
.param p3, "id" # I
.param p4, "extra" # Landroid/os/Bundle;
.param p5, "userId" # I

.prologue
.line 2020
# invokes: Lcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V
invoke-static {p1}, Lcom/android/server/notification/NotificationManagerService;->access$3400(Ljava/lang/String;)V

.line 2021
iget-object v0, p0, Lcom/android/server/notification/NotificationManagerService$6;->this$0:Lcom/android/server/notification/NotificationManagerService;

invoke-static {}, Landroid/os/Binder;->getCallingUid()I

move-result v3

invoke-static {}, Landroid/os/Binder;->getCallingPid()I

move-result v4

move-object v1, p1

move-object v2, p2

move v5, p3

move-object v6, p4

move v7, p5

invoke-virtual/range {v0 .. v7}, Lcom/android/server/notification/NotificationManagerService;->enqueueEdgeNotificationInternal(Ljava/lang/String;Ljava/lang/String;IIILandroid/os/Bundle;I)V

.line 2023
return-void
.end method[/COLOR]

NOW SEARCH FOR:

[COLOR="Green"].method public removeEdgeNotification(Ljava/lang/String;ILandroid/os/Bundle;I)V[/COLOR]

IT SHOULD LOOK SOMETHING LIKE THIS:

.method public removeEdgeNotification(Ljava/lang/String;ILandroid/os/Bundle;I)V
.registers 5
.param p1, "pkg" # Ljava/lang/String;
.param p2, "id" # I
.param p3, "extra" # Landroid/os/Bundle;
.param p4, "userId" # I

.prologue
.line 2034
return-void
.end method

NOW REMOVE THAT WHOLE METHOD AND ADD NEW METHOD THAT YOU SEE BELOW IN BLUE:

[COLOR="Blue"].method public removeEdgeNotification(Ljava/lang/String;ILandroid/os/Bundle;I)V
.registers 12
.param p1, "pkg" # Ljava/lang/String;
.param p2, "id" # I
.param p3, "extra" # Landroid/os/Bundle;
.param p4, "userId" # I

.prologue
.line 2028
# invokes: Lcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V
invoke-static {p1}, Lcom/android/server/notification/NotificationManagerService;->access$3400(Ljava/lang/String;)V

.line 2029
invoke-static {}, Landroid/os/Binder;->getCallingPid()I

move-result v0

invoke-static {}, Landroid/os/Binder;->getCallingUid()I

move-result v1

const/4 v3, 0x1

const/4 v4, 0x0

const-string v5, "cancelNotificationWithTag"

move v2, p4

move-object v6, p1

invoke-static/range {v0 .. v6}, Landroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I

move-result p4

.line 2032
iget-object v0, p0, Lcom/android/server/notification/NotificationManagerService$6;->this$0:Lcom/android/server/notification/NotificationManagerService;

invoke-static {}, Landroid/os/Binder;->getCallingUid()I

move-result v1

invoke-static {}, Landroid/os/Binder;->getCallingPid()I

move-result v2

move-object v3, p1

move v4, p2

move-object v5, p3

move v6, p4

invoke-virtual/range {v0 .. v6}, Lcom/android/server/notification/NotificationManagerService;->removeEdgeNotificationInternal(IILjava/lang/String;ILandroid/os/Bundle;I)V

.line 2034
return-void
.end method[/COLOR]

Once done now smali/recompile your services.jar and your done with that part!

★ Now go into your system/framework folder and take out your "framework.jar"

★ Now decompile/baksmali framework.jar, then navigate to:

SEARCH FOR:

[COLOR="Green"].method constructor <init>(Landroid/content/Context;Landroid/os/Handler;)V[/COLOR]

IT SHOULD LOOK SOMETHING LIKE THIS:

.method constructor <init>(Landroid/content/Context;Landroid/os/Handler;)V
.registers 3
.param p1, "context" # Landroid/content/Context;
.param p2, "handler" # Landroid/os/Handler;

.prologue
.line 184
invoke-direct {p0}, Ljava/lang/Object;-><init>()V

.line 185
iput-object p1, p0, Landroid/app/NotificationManager;->mContext:Landroid/content/Context;

.line 192
return-void
.end method

NOW ADD NEW LINES AND MAKE CHANGES IN BLUE, MAKE SURE YOU PUT THEM IN THE RIGHT PLACE:

.method constructor <init>(Landroid/content/Context;Landroid/os/Handler;)V
[COLOR="Blue"].registers 4[/COLOR]
.param p1, "context" # Landroid/content/Context;
.param p2, "handler" # Landroid/os/Handler;

.prologue
.line 184
invoke-direct {p0}, Ljava/lang/Object;-><init>()V

.line 185
iput-object p1, p0, Landroid/app/NotificationManager;->mContext:Landroid/content/Context;

[COLOR="Blue"] new-instance v0, Landroid/app/NotificationManager$EdgeNotificationManager;

invoke-direct {v0, p1}, Landroid/app/NotificationManager$EdgeNotificationManager;-><init>(Landroid/content/Context;)V

iput-object v0, p0, Landroid/app/NotificationManager;->mEdgeNotificationManager:Landroid/app/NotificationManager$EdgeNotificationManager;[/COLOR]

.line 192
return-void
.end method

Now navigate to:

SEARCH FOR:

[COLOR="Green"] const-string/jumbo v0, "multiwindow_facade"[/COLOR]

IT SHOULD LOOK SOMETHING LIKE THIS:

.line 1011
const-string/jumbo v0, "multiwindow_facade"

const-class v1, Lcom/samsung/android/multiwindow/MultiWindowFacade;

new-instance v2, Landroid/app/SystemServiceRegistry$83;

invoke-direct {v2}, Landroid/app/SystemServiceRegistry$83;-><init>()V

invoke-static {v0, v1, v2}, Landroid/app/SystemServiceRegistry;->registerService(Ljava/lang/String;Ljava/lang/Class;Landroid/app/SystemServiceRegistry$ServiceFetcher;)V

.line 1046
const-string/jumbo v0, "spengestureservice"

NOW ADD NEW LINES IN BLUE, MAKE SURE YOU PUT THEM IN THE RIGHT PLACE:

.line 1011
const-string/jumbo v0, "multiwindow_facade"

const-class v1, Lcom/samsung/android/multiwindow/MultiWindowFacade;

new-instance v2, Landroid/app/SystemServiceRegistry$83;

invoke-direct {v2}, Landroid/app/SystemServiceRegistry$83;-><init>()V

invoke-static {v0, v1, v2}, Landroid/app/SystemServiceRegistry;->registerService(Ljava/lang/String;Ljava/lang/Class;Landroid/app/SystemServiceRegistry$ServiceFetcher;)V

[COLOR="Blue"] const-string v0, "CocktailBarService"

const-class v1, Lcom/samsung/android/cocktailbar/CocktailBarManager;

new-instance v2, Landroid/app/SystemServiceRegistry$85;

invoke-direct {v2}, Landroid/app/SystemServiceRegistry$85;-><init>()V

invoke-static {v0, v1, v2}, Landroid/app/SystemServiceRegistry;->registerService(Ljava/lang/String;Ljava/lang/Class;Landroid/app/SystemServiceRegistry$ServiceFetcher;)V[/COLOR]

.line 1046
const-string/jumbo v0, "spengestureservice"

Now you will need to do is add the SystemServiceRegistry$85.smali file from the attachment below called "framework.jar Contacts, Tasks, And Apps Edge Panel Smali Files.rar" and add it into smali/android/app/. Once done now smali/recompile your framework.jar and your DONE! The last thing you will need to do is add the contacts, tasks, and apps edge panel system files with the apks and also the system/etc/permissions xml files that you will be needing to add into your rom so download link will be below as well.

CONTACTS, TASKS, AND APPS EDGE PANEL SYSTEM FILES DOWNLOAD LINK - https://www.androidfilehost.com/?fid=24545070682210404

ONLY BUGS ARE NONE EDGE/EDGE+ USERS WONT BE ABLE TO SEE EDGE FEEDS, EDGE LIGHTNING, AND OTHER EDGE/EDGE+ FEATURES DUE TO THE DEVICE HAVING A DIFFERENT DISPLAY. IF EDGE/EDGE+ USERS ARE FLASHING/INSTALLING A NON EDGE/EDGE+ CUSTOM ROM YOU WILL NOT BE ABLE TO HAVE THOSE FEATURES ALSO BECAUSE THIS MOD ONLY ADDS CONTACTS, TASKS, AND APPS EDGE PANEL TO THE ROM OTHER DISPLAY FEATURES ARE STILL A WORK IN PROGRESS AND A LITTLE BIT HARDER TO DO BECAUSE THERE ARE MANY COCKTAILBAR CODE IN THE EDGE/EDGE+ STOCK FRAMEWORKS THAT THE NON EDGE/EDGE+ SAMSUNG DEVICES DO NOT HAVE.