Skip to content

Commit

Permalink
ShowThanksCount bug fixed; changed Settings and HideThreads(doesn't w…
Browse files Browse the repository at this point in the history
…ork yet); version bumped; changed build tools
  • Loading branch information
randombyte-developer committed Feb 23, 2016
1 parent 915723e commit af1709a
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 46 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -8,8 +8,8 @@ android {
applicationId "de.randombyte.xpit"
minSdkVersion 15
targetSdkVersion 23
versionCode 2
versionName "1.0"
versionCode 3
versionName "1.0.1"
}
signingConfigs {
release {
Expand Down
59 changes: 59 additions & 0 deletions app/src/main/java/de/randombyte/xpit/Settings.java
@@ -0,0 +1,59 @@
package de.randombyte.xpit;

import android.content.SharedPreferences;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import de.randombyte.xpit.hooks.HideThreads;

/**
* Helper class for managing the settings.
*/
public class Settings {

public static SharedPreferences TARGET_PREFS;

public static String[] getHiddenThreadsString() {
Set<String> idsString = TARGET_PREFS
.getStringSet(HideThreads.HIDDEN_THREADS_PREF_KEY, new HashSet<String>());
return idsString.toArray(new String[idsString.size()]);
}

/**
* Returns the threads that are marked by the user as hidden from the SharedPreferences.
* @return Returns a map of id and last known title of the threads.
*/
public static Map<Integer, String> getHiddenThreads() {
String[] threadStrings = getHiddenThreadsString();
Map<Integer, String> threads = new HashMap<>(threadStrings.length);
for (String threadString : threadStrings) {
String[] pair = threadString.split(";", 2); //Ignore ";"s in title after first ";"
threads.put(Integer.valueOf(pair[0]), pair[1]);
}
return threads;
}

public static void setHiddenThreads(Map<Integer, String> threads) {
Set<String> threadsString = new HashSet<>(threads.size());
for (Map.Entry<Integer, String> thread : threads.entrySet()) {
threadsString.add(thread.getKey() + ";" + thread.getValue()); //id;title
}
TARGET_PREFS.edit().putStringSet(HideThreads.HIDDEN_THREADS_PREF_KEY, threadsString).apply();
}

/**
* Adds a thread as hidden.
* @param id The thread id
* @param title The title of the thread; for user
* @return True if the id already was mapped.
*/
public static boolean addHiddenThread(int id, String title) {
Map<Integer, String> hiddenThreads = getHiddenThreads();
boolean modified = hiddenThreads.put(id, title) != null;
setHiddenThreads(hiddenThreads);
return modified;
}
}
25 changes: 3 additions & 22 deletions app/src/main/java/de/randombyte/xpit/Xpit.java
@@ -1,18 +1,14 @@
package de.randombyte.xpit;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import de.randombyte.xpit.hooks.ActivatableHook;
import de.randombyte.xpit.hooks.HideSignature;
import de.randombyte.xpit.hooks.HideThreads;
import de.randombyte.xpit.hooks.ShowPostIndex;
import de.randombyte.xpit.hooks.ShowThanksCount;
import de.randombyte.xpit.hooks.ShowThreadAuthorInfo;
Expand All @@ -29,8 +25,6 @@ public class Xpit implements IXposedHookLoadPackage {
public static final String THIS_PACKAGE_NAME = "de.randombyte.xpit";
public static final String TARGET_PACKAGE_NAME = "de.androidpit.app";

public static SharedPreferences TARGET_PREFS;

public static Context OWN_CONTEXT;
public static Context TARGET_CONTEXT;

Expand All @@ -52,28 +46,15 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam)

Commons.init(loadPackageParam);

TARGET_PREFS = PreferenceManager.getDefaultSharedPreferences(TARGET_CONTEXT);
Settings.TARGET_PREFS = PreferenceManager.getDefaultSharedPreferences(TARGET_CONTEXT);
hooks.addAll(Arrays.asList(new ShowThreadAuthorInfo(), new ShowPostIndex(), new ShowThanksCount(),
new HideSignature()));
new XpitSettings().init(loadPackageParam, hooks);
new HideThreads().init(loadPackageParam);
//new HideThreads().init(loadPackageParam);
for (ActivatableHook hook : hooks) {
hook.init(loadPackageParam);
hook.readEnabled(TARGET_PREFS);
hook.readEnabled(Settings.TARGET_PREFS);
}
}

/**
* Returns the thread ids that are marked by the user as hidden from the SharedPreferences.
*/
public static List<Integer> getHiddenThreadIds() {
Set<String> idsString = Xpit.TARGET_PREFS
.getStringSet(HideThreads.HIDDEN_THREADS_PREF_KEY, new HashSet<String>());
String[] idsStringArray = idsString.toArray(new String[idsString.size()]);
List<Integer> ids = new ArrayList<>(idsStringArray.length);
for (String idString : idsStringArray) {
ids.add(Integer.valueOf(idString));
}
return ids;
}
}
24 changes: 8 additions & 16 deletions app/src/main/java/de/randombyte/xpit/hooks/HideThreads.java
@@ -1,17 +1,16 @@
package de.randombyte.xpit.hooks;

import android.content.SharedPreferences;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import de.randombyte.xpit.Xpit;
import de.randombyte.xpit.Settings;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
Expand All @@ -36,18 +35,20 @@ public void init(final XC_LoadPackage.LoadPackageParam params) {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Object thread = XposedHelpers.getObjectField(param.thisObject, "mThread");
final Context currentActivityContext = (Context) param.thisObject;
final int id = XposedHelpers.getIntField(thread, "id");
final String title = (String) XposedHelpers.getObjectField(thread, "title");
Menu menu = (Menu) param.args[0];
menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Thread ausblenden")
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (addHiddenThreads(id)) {
Toast.makeText(Xpit.TARGET_CONTEXT, "Wird demnächst ausgeblndet",
if (!Settings.addHiddenThread(id, title)) {
Toast.makeText(currentActivityContext, "Wird demnächst ausgeblendet",
Toast.LENGTH_LONG).show();
XposedBridge.log("Aus");
} else {
Toast.makeText(Xpit.TARGET_CONTEXT, "Schon ausgeblendet",
Toast.makeText(currentActivityContext, "Schon ausgeblendet",
Toast.LENGTH_LONG).show();
XposedBridge.log("Scho Aus");
}
Expand All @@ -63,7 +64,7 @@ public boolean onMenuItemClick(MenuItem item) {
"retrofit.client.Response", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
List<Integer> hiddenThreadIds = Xpit.getHiddenThreadIds();
Set<Integer> hiddenThreadIds = Settings.getHiddenThreads().keySet(); //Only ids
Object[] threads = (Object[]) XposedHelpers.getObjectField(param.args[0], "threads");
List filteredThreads = new ArrayList(threads.length);
for (Object thread : threads) {
Expand All @@ -81,13 +82,4 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
}
});
}

public boolean addHiddenThreads(int id) {
Set<String> hiddenThreads = Xpit.TARGET_PREFS.getStringSet(HIDDEN_THREADS_PREF_KEY, new HashSet<String>());
boolean modified = hiddenThreads.add(String.valueOf(id));
SharedPreferences.Editor editor = Xpit.TARGET_PREFS.edit();
editor.putStringSet(HIDDEN_THREADS_PREF_KEY, hiddenThreads);
editor.apply();
return modified;
}
}
Expand Up @@ -34,11 +34,16 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
ViewGroup buttonGroup = (ViewGroup) answerButton.getParent();
ViewGroup buttonGroupParent = (ViewGroup) buttonGroup.getParent();

//Get value
int rating1 = XposedHelpers.getIntField(param.thisObject, "rating");
int rating2 = XposedHelpers.getIntField(param.thisObject, "numUserRatingsPositive");
int rating = rating1 == 0 ? rating2 : rating1;

//Inflate own layout
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(Xpit.OWN_CONTEXT)
.inflate(R.layout.thanks_number_textview, null);
TextView textView = (TextView) relativeLayout.findViewById(R.id.thanks_number);
textView.setText("Danke: " + XposedHelpers.getIntField(param.thisObject, "rating"));
textView.setText("Danke: " + rating);

//Add Views to new container
buttonGroupParent.removeView(buttonGroup);
Expand Down
53 changes: 49 additions & 4 deletions app/src/main/java/de/randombyte/xpit/hooks/XpitSettings.java
Expand Up @@ -2,16 +2,21 @@

import android.content.Context;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.MultiSelectListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.widget.Toast;

import java.util.List;
import java.util.Map;
import java.util.Set;

import de.randombyte.xpit.Settings;
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_LoadPackage;

Expand Down Expand Up @@ -47,7 +52,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
});
}

private PreferenceScreen createXpitScreen(Context targetContext, PreferenceManager prefManager, List<ActivatableHook> hooks) {
private PreferenceScreen createXpitScreen(final Context targetContext, final PreferenceManager prefManager, List<ActivatableHook> hooks) {
PreferenceScreen xpitScreen = prefManager.createPreferenceScreen(targetContext);
xpitScreen.setTitle("Xpit");

Expand All @@ -64,9 +69,49 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
xpitScreen.addPreference(checkPref);
}

ListPreference hiddenThreadsPref = new ListPreference(targetContext);
//Hidden threads list
MultiSelectListPreference hiddenThreadsPref = new MultiSelectListPreference(targetContext);
hiddenThreadsPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
MultiSelectListPreference pref = (MultiSelectListPreference) preference;
//Prepare for dialog to be shown; doing it here to update values
Map<Integer, String> hiddenThreads = Settings.getHiddenThreads();
Integer[] ids = hiddenThreads.keySet().toArray(new Integer[hiddenThreads.keySet().size()]);
String[] idStrings = new String[ids.length];
for (int i = 0; i < idStrings.length; i++) {
idStrings[i] = ids[i].toString();
}
pref.setEntryValues(idStrings);
pref.setEntries(hiddenThreads.values().toArray(new String[hiddenThreads.size()]));

return true;
}
});
hiddenThreadsPref.setTitle("Ausgeblendete Threads");
xpitScreen.addPreference(hiddenThreadsPref);

hiddenThreadsPref.setKey(HideThreads.HIDDEN_THREADS_PREF_KEY);
hiddenThreadsPref.setPositiveButtonText("Entfernen");
hiddenThreadsPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValues) {
Set<String> threadsRemoved = (Set<String>) newValues;
Map<Integer, String> threads = Settings.getHiddenThreads();
for (String threadTitle : threadsRemoved) {
Integer id = Integer.valueOf(threadTitle.split(";")[0]);
if (threads.remove(id) == null) {
XposedBridge.log(id + " not found in hidden threads prefs! Shouldn't happen!");
Toast.makeText(targetContext, "Fehler! Bitte Xposed-Log an Entwickler schicken.", Toast.LENGTH_LONG).show();
return false;
}
}
Settings.setHiddenThreads(threads);

return false;
}
});

//xpitScreen.addPreference(hiddenThreadsPref);

return xpitScreen;
}
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha5'
classpath 'com.android.tools.build:gradle:2.0.0-beta5'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down

0 comments on commit af1709a

Please sign in to comment.