Skip to content

Commit

Permalink
Merge pull request #5 from chuparCh0pper/GUI
Browse files Browse the repository at this point in the history
added GUI with settings to disable Toast or Notifications
  • Loading branch information
pperle authored Aug 21, 2016
2 parents 683a013 + 626f2fc commit eec172c
Show file tree
Hide file tree
Showing 7 changed files with 269 additions and 11 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:24.2.0'
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.android.support:multidex:1.0.1'

Expand Down
12 changes: 10 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.chuparch0pper.android.xposed.pogoiv">

Expand All @@ -8,7 +9,6 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<meta-data
android:name="xposedmodule"
android:value="true" />
Expand All @@ -19,6 +19,14 @@
android:name="xposedminversion"
android:value="53" />

<activity
android:name=".ui.SettingsActivity"
android:label="@string/app_name">>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
import java.util.Map;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.IXposedHookZygoteInit;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
Expand All @@ -29,14 +31,32 @@
* PoGoIV_xposed would not have been possible without the work of [elfinlazz](https://github.com/elfinlazz).
* This modul is based on his work on [Pokemon GO IV checker](http://repo.xposed.info/module/de.elfinlazz.android.xposed.pokemongo).
*/
public class IVChecker implements IXposedHookLoadPackage {
public class IVChecker implements IXposedHookLoadPackage, IXposedHookZygoteInit {
private static final String PACKAGE_NAME = IVChecker.class.getPackage().getName();
private static XSharedPreferences preferences;

private boolean enableModule;
private boolean showCaughtToast;
private boolean showIvNotification;


private static final Map<Long, List<Requests.RequestType>> requestMap = new HashMap<>();


@Override
public void initZygote(StartupParam startupParam) throws Throwable {
loadSharedPreferences();
}


@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (!loadPackageParam.packageName.equals("com.nianticlabs.pokemongo"))
return;

loadSharedPreferences();
checkIfModuleIsEnabled();

final Class NiaNetClass = loadPackageParam.classLoader.loadClass("com.nianticlabs.nia.network.NiaNet");

findAndHookMethod(NiaNetClass, "doSyncRequest", long.class, int.class, String.class, int.class, String.class, ByteBuffer.class, int.class, int.class, new XC_MethodHook() {
Expand Down Expand Up @@ -121,18 +141,55 @@ private void HandleResponse(byte[] buffer) {
ByteString payload = responseEnvelop.getReturns(i);
Helper.Log("HandleResponse " + requestType.toString());

if (requestType == Requests.RequestType.ENCOUNTER) {
Encounter(payload); // wild encounter
} else if (requestType == Requests.RequestType.DISK_ENCOUNTER) {
DiskEncounter(payload); // lured encounter
} else if (requestType == Requests.RequestType.INCENSE_ENCOUNTER) {
IncenseEncounter(payload); // incense encounter
} else if (requestType == Requests.RequestType.CATCH_POKEMON) {
Catch(payload);

Helper.Log("showIvNotification= " + showIvNotification);
if (showIvNotification) {
switch (requestType) {
case ENCOUNTER:
Encounter(payload); // wild encounter
break;
case DISK_ENCOUNTER:
DiskEncounter(payload); // lured encounter
break;
case INCENSE_ENCOUNTER:
IncenseEncounter(payload); // incense encounter
break;
}
}

Helper.Log("showCaughtToast= " + showCaughtToast);
if (showCaughtToast) {
if (requestType == Requests.RequestType.CATCH_POKEMON) {
Catch(payload);
}
}
}
}

private void checkIfModuleIsEnabled() {
if (!enableModule) {
return;
}
}

private void loadSharedPreferences() {
// might not work for everyone
// https://github.com/rovo89/XposedBridge/issues/102
preferences = new XSharedPreferences(PACKAGE_NAME);
preferences.reload();
boolean worldReadable = preferences.makeWorldReadable();
Helper.Log("worldReadable = " + worldReadable);

enableModule = preferences.getBoolean("enable_module", true);
showIvNotification = preferences.getBoolean("show_iv_notification", true);
showCaughtToast = preferences.getBoolean("show_caught_toast", true);

Helper.Log("preferences - enableModule = " + enableModule);
Helper.Log("preferences - showIvNotification = " + showIvNotification);
Helper.Log("preferences - showCaughtToast = " + showCaughtToast);
}


private void Encounter(ByteString payload) {
Responses.EncounterResponse encounterResponse;
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package de.chuparch0pper.android.xposed.pogoiv.ui;

import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;

/**
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
* to be used with AppCompat.
*/
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {

private AppCompatDelegate mDelegate;

@Override
protected void onCreate(Bundle savedInstanceState) {
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
getDelegate().onPostCreate(savedInstanceState);
}

public ActionBar getSupportActionBar() {
return getDelegate().getSupportActionBar();
}

public void setSupportActionBar(@Nullable Toolbar toolbar) {
getDelegate().setSupportActionBar(toolbar);
}

@Override
public MenuInflater getMenuInflater() {
return getDelegate().getMenuInflater();
}

@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}

@Override
public void setContentView(View view) {
getDelegate().setContentView(view);
}

@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().setContentView(view, params);
}

@Override
public void addContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().addContentView(view, params);
}

@Override
protected void onPostResume() {
super.onPostResume();
getDelegate().onPostResume();
}

@Override
protected void onTitleChanged(CharSequence title, int color) {
super.onTitleChanged(title, color);
getDelegate().setTitle(title);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getDelegate().onConfigurationChanged(newConfig);
}

@Override
protected void onStop() {
super.onStop();
getDelegate().onStop();
}

@Override
protected void onDestroy() {
super.onDestroy();
getDelegate().onDestroy();
}

public void invalidateOptionsMenu() {
getDelegate().invalidateOptionsMenu();
}

private AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, null);
}
return mDelegate;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package de.chuparch0pper.android.xposed.pogoiv.ui;


import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

import java.io.File;

import de.chuparch0pper.android.xposed.pogoiv.R;

/**
* A {@link PreferenceActivity} that presents a set of application settings.
* <p/>
* See <a href="http://developer.android.com/design/patterns/settings.html">
* Android Design: Settings</a> for design guidelines and the <a
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
* API Guide</a> for more information on developing a Settings UI.
*/
public class SettingsActivity extends AppCompatPreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit();
}

/**
* This fragment shows general preferences.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesMode(Context.MODE_WORLD_READABLE);
addPreferencesFromResource(R.xml.pref_general);
}

@Override
public void onPause() {
super.onPause();

File sharedPrefsDir = new File(getActivity().getApplicationInfo().dataDir, "shared_prefs");
File sharedPrefsFile = new File(sharedPrefsDir, getPreferenceManager().getSharedPreferencesName() + ".xml");
if (sharedPrefsFile.exists()) {
sharedPrefsFile.setReadable(true, false); // Manipulates the read permissions
}
}
}

}
7 changes: 7 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
<resources>
<string name="app_name">PoGoIV</string>

<string name="enable_module_summary">You need to restart (FORCE CLOSE) Pokémon Go for changes to take effect.</string>
<string name="enable_module_title">Enable Module</string>
<string name="show_iv_notification_summary">Notification containing Pokémon\'s IVs, level and capture probability.</string>
<string name="show_iv_notification_title">Show notification when encountering Pokémon</string>
<string name="show_caught_toast_summary">Toast that shows you if the Pokémon was caught (CATCH_ERROR, CATCH_SUCCESS, CATCH_ESCAPE, CATCH_FLEE, CATCH_MISSED)</string>
<string name="show_caught_toast_title">Show toast when Pokémon was caught</string>
</resources>
21 changes: 21 additions & 0 deletions app/src/main/res/xml/pref_general.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<SwitchPreference
android:defaultValue="true"
android:key="enable_module"
android:summary="@string/enable_module_summary"
android:title="@string/enable_module_title" />

<CheckBoxPreference
android:defaultValue="true"
android:key="show_iv_notification"
android:summary="@string/show_iv_notification_summary"
android:title="@string/show_iv_notification_title" />

<CheckBoxPreference
android:defaultValue="true"
android:key="show_caught_toast"
android:summary="@string/show_caught_toast_summary"
android:title="@string/show_caught_toast_title" />

</PreferenceScreen>

0 comments on commit eec172c

Please sign in to comment.