Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions app/src/main/java/app/revanced/integrations/twitter/Pref.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,20 @@ public static boolean enableNativeTranslator() {
return Utils.getBooleanPerf(Settings.NATIVE_TRANSLATOR);
}

public static boolean enableNativeReaderMode() {
return Utils.getBooleanPerf(Settings.NATIVE_READER_MODE);
}
public static boolean hideNativeReaderPostTextOnlyMode() {
return Utils.getBooleanPerf(Settings.NATIVE_READER_MODE_TEXT_ONLY_MODE);
}
public static boolean hideNativeReaderHideQuotedPosts() {
return Utils.getBooleanPerf(Settings.NATIVE_READER_MODE_HIDE_QUOTED_POST);
}

public static boolean hideNativeReaderNoGrok() {
return Utils.getBooleanPerf(Settings.NATIVE_READER_MODE_NO_GROK);
}

public static String translatorLanguage() {
return Utils.getStringPref(Settings.NATIVE_TRANSLATOR_LANG);
}
Expand Down
115 changes: 104 additions & 11 deletions app/src/main/java/app/revanced/integrations/twitter/Utils.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package app.revanced.integrations.twitter;

import app.revanced.integrations.twitter.model.Debug;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.DownloadManager;
Expand All @@ -22,28 +23,36 @@
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.FileOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

import java.lang.StackTraceElement;

@SuppressWarnings("unused")
public class Utils {
@SuppressLint("StaticFieldLeak")
private static final Context ctx = app.revanced.integrations.shared.Utils.getContext();
private static final SharedPrefCategory sp = new SharedPrefCategory(Settings.SHARED_PREF_NAME);
private static final SharedPrefCategory defsp = new SharedPrefCategory(ctx.getPackageName() + "_preferences");

public static void openUrl(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage(ctx.getPackageName());
ctx.startActivity(intent);
}

public static void openDefaultLinks(){
public static void openDefaultLinks() {
Intent intent = new Intent(android.provider.Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS);
intent.setData(Uri.parse("package:"+ctx.getPackageName()));
intent.setData(Uri.parse("package:" + ctx.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(intent);
}
Expand Down Expand Up @@ -73,7 +82,6 @@ public static void startAppIconNNavIconActivity() {
startActivityFromClassName(className);
}


private static void startBookmarkActivity() {
String className = "com.twitter.app.bookmarks.legacy.BookmarkActivity";
startActivityFromClassName(className);
Expand All @@ -84,7 +92,7 @@ public static void startXSettings() {
startActivityFromClassName(className);
}

//thanks to @Ouxyl
// thanks to @Ouxyl
public static boolean redirect(TabLayout$g g) {
try {
String tabName = g.c.toString();
Expand Down Expand Up @@ -249,8 +257,8 @@ private static String getPath(String publicFolder, String subFolder, String file
return publicFolder + "/" + subFolder + "/" + filename;
}


private static void postDownload(String filename, File tempFile, File file, Intent intent, long downloadId, BroadcastReceiver broadcastReceiver) {
private static void postDownload(String filename, File tempFile, File file, Intent intent, long downloadId,
BroadcastReceiver broadcastReceiver) {
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (id == downloadId) {
boolean result = tempFile.renameTo(file);
Expand Down Expand Up @@ -293,8 +301,7 @@ public static void downloadFile(String url, String mediaName, String ext) {

File tempFile = new File(
Environment.getExternalStorageDirectory(),
getPath(publicFolder, subFolder, "temp_" + filename)
);
getPath(publicFolder, subFolder, "temp_" + filename));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ctx.registerReceiver(new BroadcastReceiver() {
Expand All @@ -313,13 +320,99 @@ public void onReceive(Context context, Intent intent) {
}
}

public static int getTheme() {
// 0 = light, 1 = dark, 2 = dim
int theme = 0;
String three_state_night_mode = defsp.getString("three_state_night_mode", String.valueOf(theme));
if (!(three_state_night_mode.equals("0"))) {
String dark_mode_appr = defsp.getString("dark_mode_appearance", "lights_out");
if (dark_mode_appr.equals("lights_out"))
theme = 1;
else if (dark_mode_appr.equals("dim"))
theme = 2;
}
return theme;
}

public static boolean pikoWriteFile(String fileName,String data,boolean append){
File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File pikoDir = new File(downloadsDir, "Piko");

if (!pikoDir.exists()) {
pikoDir.mkdirs();
}

File outputFile = new File(pikoDir, fileName);
return writeFile(outputFile,data.getBytes(),append);
}

public static boolean writeFile(File fileName, byte[] data, boolean append) {
try {
FileOutputStream outputStream = new FileOutputStream(fileName, append);
outputStream.write(data);
outputStream.close();
return true;
} catch (Exception e) {
logger(e.toString());
}
return false;
}

public static String readFile(File fileName) {
try {
if (!fileName.exists())
return null;

StringBuilder content = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {
}
}
}
return content.toString();
} catch (Exception e) {
logger(e.toString());
}
return null;
}

public static void toast(String msg) {
app.revanced.integrations.shared.Utils.showToastShort(msg);
}

public static void logger(Object j) {
Log.d("piko", j.toString());
public static void logger(Object e) {
String logName = "piko";
Log.d(logName, String.valueOf(e)+"\n");
if (e instanceof Exception) {
Exception ex = (Exception) e;
StackTraceElement[] stackTraceElements = ex.getStackTrace();
for (StackTraceElement element : stackTraceElements) {
Log.d(logName, "Exception occurred at line " + element.getLineNumber() + " in " + element.getClassName()
+ "." + element.getMethodName());
}
}
}

/*** THIS FUNCTION SHOULD BE USED ONLY WHILE DEVELOPMENT ***/
public static void debugClass(Object obj) {
Debug cls = new Debug(obj);
try{
cls.describeClass();
}catch(Exception e){
logger(e);
}
}

}
125 changes: 125 additions & 0 deletions app/src/main/java/app/revanced/integrations/twitter/model/Debug.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package app.revanced.integrations.twitter.model;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import app.revanced.integrations.twitter.Utils;

public class Debug {
protected Object obj;

public Debug(Object obj) {
this.obj = obj;
}

protected Class<?> getObjClass() throws ClassNotFoundException {
return this.obj.getClass();
}

protected Object getField(Class cls, Object clsObj, String fieldName) throws Exception {
Field field = cls.getDeclaredField(fieldName);
field.setAccessible(true);
return (Object) field.get(clsObj);
}

protected Object getField(Object clsObj, String fieldName) throws Exception {
return getField(clsObj.getClass(), clsObj, fieldName);
}

protected Object getField(String fieldName) throws Exception {
return getField(this.obj, fieldName);
}

protected Object getMethod(Object clsObj, String methodName) throws Exception {
return clsObj.getClass().getDeclaredMethod(methodName).invoke(clsObj);
}

protected Object getMethod(String methodName) throws Exception {
return this.getMethod(this.obj, methodName);
}

/*** THE BELOW FUNCTIONS SHOULD BE USED ONLY WHILE DEVELOPMENT ***/
protected String describeFields() throws Exception {
String line = "----------------------------";
StringBuilder sb = new StringBuilder();
Class<?> cls = this.getObjClass();

Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
String tyName = field.getType().getName();
Object value;
sb.append(name)
.append(" - ")
.append(tyName)
.append("\n ");

try {
value = field.get(this.obj);
} catch (IllegalAccessException e) {
value = "<access denied>\n";
}
sb.append(value)
.append("\n"+line+"\n");
}
return sb.toString();
}

protected String describeMethods() throws Exception {
String line = "----------------------------";
StringBuilder sb = new StringBuilder();
Class<?> cls = this.getObjClass();
Method[] methods = cls.getDeclaredMethods();

for (Method method : methods) {
method.setAccessible(true);
sb.append(method.getName())
.append(" - ")
.append(method.getReturnType().getSimpleName())
.append("\n ");

Parameter[] params = method.getParameters();
if (params.length == 0) {
try {
Object result = method.invoke(this.obj);
sb.append(result);
} catch (Exception e) {
sb.append("<error invoking>");
}
} else {
for (Parameter param : params) {
sb.append(param.getType().getSimpleName())
.append(" ")
.append(param.getName())
.append(", ");
}
}
sb.append("\n"+line+"\n");
}
return sb.toString();
}

public void describeClass() throws Exception {
String className = this.getObjClass().getName();
String line = "----------------------------";

String fields = this.describeFields();
String methods = this.describeMethods();

StringBuilder sb = new StringBuilder();
sb.append(line)
.append("\n" + className)
.append("\n" + line + "\n" + line)
.append("\nFIELDS\n" + line +"\n"+ fields)
.append("\n" + line + "\n" + line)
.append("\nMETHODS\n" + line + "\n"+methods)
.append("\n" + line + "\n" + line);

String fileName = className+".txt";
Utils.pikoWriteFile(fileName,sb.toString(),false);
Utils.toast("DONE: "+className);

}
}
Loading
Loading