Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.stirante.quizcheat;
- import android.app.Application;
- import android.app.PendingIntent;
- import android.content.BroadcastReceiver;
- import android.content.ContentResolver;
- import android.content.ContentUris;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.res.XModuleResources;
- import android.content.res.XResources;
- import android.database.Cursor;
- import android.database.DatabaseUtils;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.ParcelFileDescriptor;
- import android.os.RemoteException;
- import android.provider.MediaStore;
- import android.util.TypedValue;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.lang.ref.WeakReference;
- import java.util.List;
- import de.robv.android.xposed.XC_MethodHook;
- import de.robv.android.xposed.XposedBridge;
- import de.robv.android.xposed.XposedHelpers;
- import de.robv.android.xposed.callbacks.XC_InitPackageResources;
- import de.robv.android.xposed.callbacks.XC_LayoutInflated;
- import de.robv.android.xposed.callbacks.XC_LoadPackage;
- /**
- * Created by stirante
- */
- public class NowPlayingFilter {
- private static String artist = "No data";
- private static String album = "No data";
- private static String title = "No data";
- private static boolean playing;
- private static boolean isBitmapReady = false;
- private static Bitmap bitmap;
- private static View nowPlaying;
- public static void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) throws Throwable {
- resparam.res.hookLayout("com.snapchat.android", "layout", "battery_view", new XC_LayoutInflated() {
- LinearLayout.LayoutParams batteryLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
- @Override
- public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
- View battery = liparam.view.findViewById(liparam.res.getIdentifier("battery_icon", "id", "com.snapchat.android"));
- battery.setLayoutParams(batteryLayoutParams);
- battery.setPadding(0, 0, 0, 0);
- }
- });
- }
- public static void handleLoadPackage(final XC_LoadPackage.LoadPackageParam packageParam, Context ctx) throws Throwable {
- Context myContext = ctx.createPackageContext("com.stirante.quizcheat", Context.CONTEXT_IGNORE_SECURITY);
- nowPlaying = LayoutInflater.from(myContext).inflate(R.layout.now_playing, null);
- IntentFilter iF = new IntentFilter();
- iF.addAction("com.android.music.metachanged");
- iF.addAction("com.android.music.playstatechanged");
- iF.addAction("com.android.music.playbackcomplete");
- iF.addAction("com.android.music.queuechanged");
- iF.addAction("com.htc.music.metachanged");
- iF.addAction("fm.last.android.metachanged");
- iF.addAction("com.sec.android.app.music.metachanged");
- iF.addAction("com.nullsoft.winamp.metachanged");
- iF.addAction("com.amazon.mp3.metachanged");
- iF.addAction("com.miui.player.metachanged");
- iF.addAction("com.real.IMP.metachanged");
- iF.addAction("com.sonyericsson.music.metachanged");
- iF.addAction("com.rdio.android.metachanged");
- iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
- iF.addAction("com.andrew.apollo.metachanged");
- iF.addAction("com.android.music.playstatechanged");
- iF.addAction("com.android.music.playbackcomplete");
- iF.addAction("com.android.music.metachanged");
- //HTC Music
- iF.addAction("com.htc.music.playstatechanged");
- iF.addAction("com.htc.music.playbackcomplete");
- iF.addAction("com.htc.music.metachanged");
- //MIUI Player
- iF.addAction("com.miui.player.playstatechanged");
- iF.addAction("com.miui.player.playbackcomplete");
- iF.addAction("com.miui.player.metachanged");
- //Real
- iF.addAction("com.real.IMP.playstatechanged");
- iF.addAction("com.real.IMP.playbackcomplete");
- iF.addAction("com.real.IMP.metachanged");
- //SEMC Music Player
- iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_TRACK_STARTED");
- iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_PAUSED");
- iF.addAction("com.sonyericsson.music.TRACK_COMPLETED");
- iF.addAction("com.sonyericsson.music.metachanged");
- iF.addAction("com.sonyericsson.music.playbackcomplete");
- iF.addAction("com.sonyericsson.music.playstatechanged");
- //rdio
- iF.addAction("com.rdio.android.metachanged");
- iF.addAction("com.rdio.android.playstatechanged");
- //Samsung Music Player
- iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged");
- iF.addAction("com.samsung.sec.android.MusicPlayer.playbackcomplete");
- iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
- iF.addAction("com.sec.android.app.music.playstatechanged");
- iF.addAction("com.sec.android.app.music.playbackcomplete");
- iF.addAction("com.sec.android.app.music.metachanged");
- //Winamp
- iF.addAction("com.nullsoft.winamp.playstatechanged");
- //Amazon
- iF.addAction("com.amazon.mp3.playstatechanged");
- //Rhapsody
- iF.addAction("com.rhapsody.playstatechanged");
- //PowerAmp
- iF.addAction("com.maxmpz.audioplayer.playstatechanged");
- //Last.fm
- iF.addAction("fm.last.android.metachanged");
- iF.addAction("fm.last.android.playbackpaused");
- iF.addAction("fm.last.android.playbackcomplete");
- //A simple last.fm scrobbler
- iF.addAction("com.adam.aslfms.notify.playstatechanged");
- //Scrobble Droid
- iF.addAction("net.jjc1138.android.scrobbler.action.MUSIC_STATUS");
- //Spotify
- iF.addAction("com.spotify.music.metadatachanged");
- iF.addAction("com.spotify.music.playbackstatechanged");
- iF.addAction("com.spotify.music.queuechanged");
- ctx.registerReceiver(new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- for (String key : intent.getExtras().keySet()) {
- XposedBridge.log(key + ": " + intent.getExtras().get(key));
- }
- XposedBridge.log("----");
- String artist = intent.getStringExtra("artist");
- String album = intent.getStringExtra("album");
- String title = intent.getStringExtra("track");
- if (artist == null || album == null || title == null) {
- playing = false;
- return;
- }
- if (!artist.equalsIgnoreCase(NowPlayingFilter.artist) || !album.equalsIgnoreCase(NowPlayingFilter.album) || !title.equalsIgnoreCase(NowPlayingFilter.title)) {
- isBitmapReady = false;
- }
- NowPlayingFilter.artist = artist;
- NowPlayingFilter.album = album;
- NowPlayingFilter.title = title;
- playing = intent.getBooleanExtra("playing", true);
- }
- }, iF);
- initFilter(packageParam);
- }
- public static void initFilter(final XC_LoadPackage.LoadPackageParam packageParam) {
- final Class<?> fc = XposedHelpers.findClass("SR", packageParam.classLoader);
- final Class<?> el = XposedHelpers.findClass("RY", packageParam.classLoader);
- XposedHelpers.findAndHookMethod("Te", packageParam.classLoader, "a", Context.class, XposedHelpers.findClass("PX", packageParam.classLoader), new XC_MethodHook() {
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- XposedBridge.log("Adding now playing");
- Object elObj = XposedHelpers.newInstance(el, param.args[1]);
- View view = (View) XposedHelpers.callMethod(param.args[1], "a", new Class[]{int.class, ViewGroup.class, boolean.class}, 2130968587, null, false);
- XposedHelpers.setObjectField(elObj, "a", view);
- ImageView image = (ImageView) XposedHelpers.callMethod(view, "findViewById", 2131558548);
- if (!isBitmapReady)
- generateBitmap((Context) param.args[0]);
- image.setImageBitmap(bitmap);
- image.setTranslationY(0);
- ((List) param.getResult()).add(XposedHelpers.newInstance(fc, elObj));
- }
- });
- }
- private final static int WIDTH = 886;
- private final static int HEIGHT = 1575;
- private static void generateBitmap(Context ctx) {
- bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(bitmap);
- ((ImageView) nowPlaying.findViewById(R.id.albumImage)).setImageBitmap(albumArt);
- ((TextView) nowPlaying.findViewById(R.id.album)).setText(album);
- ((TextView) nowPlaying.findViewById(R.id.title)).setText(title);
- ((TextView) nowPlaying.findViewById(R.id.artist)).setText(artist);
- nowPlaying.setLayoutParams(new RelativeLayout.LayoutParams(WIDTH, HEIGHT));
- nowPlaying.measure(View.MeasureSpec.makeMeasureSpec(nowPlaying.getLayoutParams().width, View.MeasureSpec.EXACTLY),
- View.MeasureSpec.makeMeasureSpec(nowPlaying.getLayoutParams().height, View.MeasureSpec.EXACTLY));
- nowPlaying.layout(0, 0, WIDTH, HEIGHT);
- nowPlaying.draw(c);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement