Änderung der Long-Press / Double Tap Funktion der Home Taste

S

sessions

Stammgast
152
Man liest ja viele Beschwerden oder Ärgernisse über die neu "Double Tap" Funktion, um in die Recent Apps - Liste zu kommen bzw. lange drücken für Gooogle Now.
Ich habe nach einer Lösung gesucht das zu ändern. Ich habe mir dazu die bestehende Modifikation mit dem Xposed Framework angesehen, mir kommt das aber nicht wirklich elegant vor.

Ich habe mir das dann im bestehenden System genauer angeschaut, wo diese Funktion verankert ist und habe den entsprechenden Eintrag auch gefunden.

Hier ist die Anleitung zum Ändern des "Doppelklick / Lange Drücken" Verhaltens der Home- Taste!

Warnung:
Das ist nur was für Fortgeschrittene!
Unbedingt vorher ein nandroid Backup machen.
Ich übernehme keine Verantwortung für Bootloops oder ähnliches!


Voraussetzungen:

  • root - so wie immer ;)
  • Deodexed Rom 6.2.B.1.96
Mit einem odexed ROM (=Stock nach dem Update) könnte es auch funktionieren - hab ich aber nicht probiert! Bitte dazu um Feedback, vielleicht kann es ja jemand einmal probieren!

  • adb(ist beim APKMultiTool dabei, unter \other )
  • Texteditor (vorzugsweise Notepad++)


So, nun der Ablauf im Detail:

1) Download aller notwendigen Dateien, einrichten des Framework am PC

Als erstes müssen wir die Framework- Umgebung im APK Multitool einrichten.

Das geht über die Setup.bat, Funktion 2 des APK- Multitool.
Dort die SystemUI.apk und framework-res.apk installieren. Die beiden Dateien werden dabei vom Handy geladen.
Für Xperia Geräte muss aber noch eine weitere Datei geladen werden, die nicht im APKMultitool voreingestellt ist!

Dazu eine Kommandozeile im Verzeichnis APK-Multi-Tool\other öffnen, um die Dateien vom Handy zu laden

Code:
adb pull /system/framework/SemcGenericUxpRes.apk

Dann die Dateien in das apktool importieren:
Code:
java -jar apktool.jar if SemcGenericUxpRes.apk

Zum Schluss müssen wir noch die framework-res.apk in das APK-Multitool Verzeichnis "place-apk-here-for-modding" kopieren, damit das Programm sie als aktuelles Projekt erkennt.
Code:
adb pull /system/framework/framework-res.apk  ..\place-apk-here-for-modding

Sie sollte mit dem adb Befehl nun dort sein, bitte nochmal kontrollieren!


2) Dekompilieren der framework-res.apk

Das ApkMultiTool über die Script.bat starten und mit Funktion 22 die "Heap Memory Size" auf "1024" einstellen.
Rechts oben muss die framework-res.apk als aktuelles Projekt angeführt sein, wenn nicht mit Funktion "24" einstellen.

Danach mit Funktion 9 die Datei dekompilieren
Das MUSS fehlerfrei durchlaufen
Es wird dabei unter "\projects" ein neues Verzeichnis "\framework-res.apk" erstellt, in dem die aufgelösten Daten sind.

Die Datei ist nach Abschluss des Vorganges dekompiliert.


3) Die Einstellung verändern

Das APKMultitool minimieren und in den Explorer wechseln.
Im Unterverzeichnis \projects\framework-res.apk\res\values des APKMultitool gibt es eine Datei namens
=> integers.xml

Diese mit Notepad++ öffnen und die folgenden Zeilen suchen:

Code:
  <integer name="config_longPressOnHomeBehavior">3</integer>
  <integer name="config_doubleTapOnHomeBehavior">2</integer>

Es kann sein, dass hier "1" und "3" steht oder andere Zahlen. Da ich ein anderes Framework verwende (Honami :D ), könnten die Zahlen auch anders lauten.
Diese beiden Zahlen muss man miteinander vertauschen!
Dann abspeichern.

4) Die framework-res.apk neu kompilieren

Im APK Multitool die Funktion 11 "Compile System APK" ausführen. Die Frage nach weiteren APKs dann mit "n" beantworten.
Die Datei wird kompiliert, es dürfen dabei keine Fehlermeldungen auftauchen.
--> es entsteht ein unsignedframework-res.apk

Im APK Multitool die Funktion 13 "Sign apk" ausführen.

--> es entsteht ein signedframework-res.apk im Verzeichnis "place-apk-here-for-modding" des APKMultiTool

Die Datei wurde nun erfolgreich kompiliert und signiert.


5) Die Datei auf das Telefon spielen

Die signedframework-res.apk auf das Telefon kopieren und in framework-res.apk umbenennen.
Dort mit einem Filemanager nach /system/framework kopieren, die vorhandene Datei überschreiben.
Achtung: Das Handy startet danach sofort neu!

Fertig!
Die Lange-Drück und die Doppel-Drück Funktion sind nun vertauscht.


Anmerkung:
Ich habe bei Punkt 3 ein bißchen mit den Zahlen herumgespielt, also 1/3, 3/2, usw. und bin immer zu verschiedenen Ereignissen bei "DoubleTap" bzw. "Longpress" gekommen. Wenn meine Anleitung mit dem Austausch der Zahlen nicht funktioniert, so müsst ihr bitte einfach ein bißchen mit den Zahlen 1,2,3 herumprobieren. Schlimmstenfalls macht das Handy dann bei langem oder doppeltem Tastendruck gar nichts.

Ich weiß, dass die meisten User damit nichts anfangen können werden, aber vielleicht hilft's dem einen oder anderen Dev.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: dotartist und Keinbockwurst
viel zu viel Aufwand für ein so winziges problem.
Einfach Doppelklick und gut ist.
 
Ok, hier noch eine kurze Fortsetzung...

Zu den Möglichkeiten die man hat, das Verhalten zu ändern hab ich folgendes festgestellt bzw. in den Sources nachgelesen:

Der Aktion, mit der der Integer Wert (also 0,1,2,3) verknüpft ist, wird in der android.policy.jar definiert.
Und zwar in der \smali\com\android\internal\policy\impl\PhoneWindowManager.smali

Bei der aktuellen .96 FW kann man bei longpress den Wert auf 0 bis 3 setzen, hier mal der smali code:

Code:
.field static final LONG_PRESS_HOME_NOTHING:I = 0x0
.field static final LONG_PRESS_HOME_RECENT_DIALOG:I = 0x1
.field static final LONG_PRESS_HOME_RECENT_SYSTEM_UI:I = 0x2
.field static final LONG_PRESS_HOME_ASSIST:I = 0x3

.field static final DOUBLE_TAP_HOME_NOTHING:I = 0x0
.field static final DOUBLE_TAP_HOME_RECENT_SYSTEM_UI:I = 0x1

Mit "Double Tap" kann man nur 0 = nothing und 1 = "Recent Apps view in SystemUI" wählen, da nur dort im Code auch eine Funktion einprogrammiert ist.

Mein Ziel war, mit der "Double Tap Home" Funktion einfach eine andere App zu verknüpfen :cool:

Da es bei double Tap Home nichts gibt, hab ich mir die HOME_ASSIST angesehen. Diese verweist dann auf eine "SearchManager" Aktion, die tief in die android.policy.jar verwurzelt ist.
Um da also eine Änderung zu realisieren müsste man etliche Zeilen in den Smali Codes der android.policy.jar verändern bzw. einfügen.
Das übersteigt jedoch meine bescheidenen Kenntnisse.


@Placebo: Ich denke genau dafür ist aber ein Forum da, bzw. speziell diese Section. Siehe auch mein letzter Satz im Eingangsposting. ;)
 
Oder einfach mal "Wanam" ausprobieren
 

Ähnliche Themen

L
Antworten
0
Aufrufe
1.184
luisao200
L
Habijob
Antworten
1
Aufrufe
1.497
Aaskereija
Aaskereija
Androidfan7
Antworten
2
Aufrufe
1.550
Androidfan7
Androidfan7
Zurück
Oben Unten