Compare commits
41 Commits
Author | SHA1 | Date |
---|---|---|
clienthax | 3e0464c796 | |
clienthax | f08854f5d0 | |
clienthax | f8dbc9333c | |
clienthax | 1c6b151083 | |
clienthax | 0359f5f975 | |
clienthax | f709704fce | |
clienthax | ec47b98061 | |
clienthax | 1a7ad17c87 | |
clienthax | 55e2e94b63 | |
clienthax | 8ec2dd75c2 | |
ave | 44cd92fcdc | |
ave | 8037a7c9b8 | |
ave | ab288a7c79 | |
ave | f38df07e48 | |
ave | 350f30b1f6 | |
ave | 4f86cec370 | |
ave | 9d7138b6a6 | |
ave | 66b238bb1b | |
ave | ee4a3cb49e | |
ave | 8f690ffe03 | |
ave | 69700dacaf | |
ave | fb587755da | |
ave | 1b99304a05 | |
ave | c60d13a690 | |
ave | 1cc00f6a48 | |
ave | f3ee05255c | |
ave | 4db6c07a04 | |
tesnos | fb8a857955 | |
tesnos | 9082828e56 | |
tesnos | 354e1538c2 | |
tesnos | 8811192499 | |
tesnos | 9de62d94f3 | |
tesnos | dab5801b1e | |
tesnos | 03827d9f02 | |
ave | 73cba5f94d | |
eatsfoobars | a35345d167 | |
eatsfoobars | c21b085f22 | |
eatsfoobars | 91dd61f262 | |
eatsfoobars | f52a1d0764 | |
ave | b9cf51f294 | |
ave | 2027eaeb39 |
|
@ -0,0 +1,2 @@
|
|||
* text=auto eol=lf
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#### Toolchain setup
|
||||
|
||||
- Get apktool (due to 2 bugs present in v2.3.4, you're strongly recommended to use v2.4.0 or higher, I compile latest from source).
|
||||
- Get apktool (use [this self-built version](//f001.backblazeb2.com/file/avepub/apktool-cli-all.jar) which is master + [this pr](https://github.com/iBotPeaches/Apktool/pull/2463)).
|
||||
- Get a keystore, see [here](https://stackoverflow.com/a/14994354/3286892), step 1.
|
||||
- Get apksigner, it's part of android build tools.
|
||||
- If you want Mutant Standard emoji patches, get 72x72 PNG copies of latest version of mutant standard emojis with codepoints. I have a zip [here](https://mutant.lavatech.top/72x72.zip).
|
||||
|
@ -21,9 +21,8 @@ CTCCI requires python3.6+, and also likely requires Linux (I haven't tried it on
|
|||
#### Initial setup
|
||||
|
||||
- Follow the "Toolchain setup" steps above in case you haven't already.
|
||||
- Install dependencies (`python3 -m pip install -Ur requirements.txt`)
|
||||
- Copy `ctcci/ctcconfig.example.py` to `ctcci/ctcconfig.py` and configure contents to your local data and your personal preferences.
|
||||
- If you don't want to always automatically be required to use the latest discord version, set `LOCAL_STATE` to `True` and point `STATE_FILE` to a `state.json` file that looks like this: `{"android": {"com.discord": {"version": 909}}}`.
|
||||
- If you don't want to always automatically be required to use the latest discord version, edit the `$REPO_FOLDER/patchport-state.json` file.
|
||||
- Set up a local distok-style file storage for your APKs, and copy your APKs on it, and name them properly (the format is `$DISTOK_FOLDER/android/$PACKAGE_ID-$VERSION_NUMBER.apk`, example: `/home/ave/distok/android/com.discord-909.apk`).
|
||||
|
||||
#### Environment Variables
|
||||
|
@ -61,11 +60,11 @@ To get the diff, run `diff -crB -x "dist" -x "res/raw" -x "build" CleanFolder Pa
|
|||
|
||||
#### Porting patches
|
||||
|
||||
You can use `patchport.py` to easily attempt to port patches. This is what I use to port between every single version.
|
||||
You can use `patchport.py` to easily attempt to port patches. This is what I use to port between every single version. Note that while CTCCI requires python3.6+, `patchport.py` requires python3.7+.
|
||||
|
||||
It's not really intelligent and doesn't do much more than manually preparing necessary patch, checking if an existing patch can be applied to a given version, replacing relevant variables required for porting various patches and eliminating offsets caused by updates, but it saves a lot of time if used carefully.
|
||||
|
||||
Example command: `python3 patchport.py /home/ave/workbench/ctc/com.discord-968`
|
||||
Example command: `python3.7 patchport.py /home/ave/workbench/ctc/com.discord-968`
|
||||
|
||||
#### Figuring out which patch is causing your build to break
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
FROM ubuntu:21.04
|
||||
|
||||
# Install needed packages
|
||||
RUN apt-get update
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python3 android-sdk-build-tools wget unzip imagemagick git patch software-properties-common
|
||||
|
||||
# Install fdroid
|
||||
RUN add-apt-repository ppa:fdroid/fdroidserver
|
||||
RUN apt-get update
|
||||
RUN apt-get -y install fdroidserver
|
||||
|
||||
# Create resources folder for tools/images etc
|
||||
ENV CTC_FOLDER=/opt/ctc
|
||||
RUN mkdir ${CTC_FOLDER}
|
||||
|
||||
# Grab modified apktool
|
||||
RUN mkdir ${CTC_FOLDER}/tools
|
||||
RUN wget -O ${CTC_FOLDER}/tools/apktool.jar https://f001.backblazeb2.com/file/avepub/apktool-cli-all.jar
|
||||
|
||||
# Grab xml-patch (https://github.com/dnault/xml-patch)
|
||||
RUN wget -O ${CTC_FOLDER}/tools/xml-patch.jar https://jcenter.bintray.com/com/github/dnault/xml-patch/0.3.1/xml-patch-0.3.1.jar
|
||||
|
||||
# Grab emoji sets
|
||||
ENV EMOJI_PATH=${CTC_FOLDER}/emojis
|
||||
ENV EMOJI_MUTANT_PATH=${EMOJI_PATH}/mutant
|
||||
ENV EMOJI_BLOBMOJIS_PATH=${EMOJI_PATH}/blobmojis
|
||||
RUN mkdir ${EMOJI_PATH}
|
||||
|
||||
# Mutant emojis
|
||||
RUN mkdir ${EMOJI_MUTANT_PATH}
|
||||
WORKDIR ${EMOJI_MUTANT_PATH}
|
||||
RUN wget https://mutant.lavatech.top/72x72.zip
|
||||
RUN unzip 72x72.zip
|
||||
RUN mv 72x72/*.png .
|
||||
RUN rm -rf 72x72
|
||||
RUN rm 72x72.zip
|
||||
|
||||
# Blobmojis
|
||||
RUN mkdir ${EMOJI_BLOBMOJIS_PATH}
|
||||
RUN mkdir /tmp/blobmoji
|
||||
WORKDIR /tmp/blobmoji
|
||||
RUN wget https://github.com/C1710/blobmoji/archive/refs/heads/main.zip
|
||||
RUN 7za x main.zip
|
||||
WORKDIR /tmp/blobmoji/blobmoji-main/svg
|
||||
RUN find ./*.svg -exec mogrify -format png -resize 72x72 -path ${EMOJI_BLOBMOJIS_PATH} {} \; ; exit 0
|
||||
|
||||
# Generate self signed KS
|
||||
RUN mkdir ${CTC_FOLDER}/keystores
|
||||
WORKDIR ${CTC_FOLDER}/keystores
|
||||
RUN keytool -genkey -alias test \
|
||||
-keyalg RSA -keystore keystore.jks \
|
||||
-dname "CN=Test, OU=Test, O=Test, L=Test, S=Test, C=Test" \
|
||||
-storepass password -keypass password
|
||||
|
||||
# Make folder for git repo
|
||||
RUN mkdir ${CTC_FOLDER}/gitrepo
|
||||
WORKDIR ${CTC_FOLDER}/gitrepo
|
||||
|
||||
# paths in ctcconfig in docker
|
||||
# container fs
|
||||
# /opt/ctc/gitrepo
|
||||
# /opt/ctc/keystores/keystore.jks not specified by default
|
|
@ -2,7 +2,11 @@
|
|||
|
||||
Modular Client Mod for Discord's Android app.
|
||||
|
||||
**Latest supported Discord Android version:** 49.13 (1340), released on 2020-11-20.
|
||||
**THIS IS A WORK IN PROGRESS BRANCH! THE PATCHES ARE INCOMPLETE!**
|
||||
|
||||
For status updates and support on the project, join #cutthecord on https://libera.chat. WebIRC link: https://web.libera.chat/#cutthecord
|
||||
|
||||
**Latest supported Discord Android version:** 87.2 - Alpha (87202), released on 2021-08-04.
|
||||
|
||||
New patch development will be done for the latest supported version.
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
ctcconfig.py
|
|
@ -1,79 +0,0 @@
|
|||
import os
|
||||
|
||||
APKTOOL_BIN = "java -jar /home/ave/apktool-cli-all.jar" # use latest
|
||||
|
||||
# APKs must be placed under $DISTOK_FOLDER/android/$PACKAGE_ID-$VERSION_NUMBER.apk
|
||||
# Example: /home/ave/distok/android/com.discord-909.apk
|
||||
DISTOK_FOLDER = "/home/ave/distok"
|
||||
|
||||
# Set if F-Droid repo should be automatically updated or not
|
||||
# If set to False, you can leave FDROID_FOLDER empty
|
||||
DO_FDROID = True
|
||||
FDROID_FOLDER = "/var/www/fdroid/seabear"
|
||||
|
||||
# This is where APKs will be placed
|
||||
RESULT_FOLDER = FDROID_FOLDER + "/repo"
|
||||
|
||||
# Repo for CutTheCord (https://gitdab.com/distok/cutthecord)
|
||||
DO_GITPULL = True
|
||||
REPO_FOLDER = "/home/ave/distokrepos/cutthecord"
|
||||
|
||||
# If false, jarsigner will be used for signing the apk.
|
||||
DO_APKSIGNER = True
|
||||
|
||||
# Keystore file, alias and pass. Required.
|
||||
KEYSTORE_FILE = "/home/ave/oof.keystore"
|
||||
KEYSTORE_ALIAS = "distok"
|
||||
KEYSTORE_PASS = "redacted"
|
||||
|
||||
# Set this to the python version you want to use. Needs to be 3.6+.
|
||||
PYTHON_BIN = "python3.6"
|
||||
|
||||
# Folder where the apk will be extracted to, patched in, and packed back on
|
||||
# You're not recommended to touch WORK_APK_PATH.
|
||||
WORK_FOLDER = "/tmp/cutthecord"
|
||||
WORK_APK_PATH = os.path.join(WORK_FOLDER, "discord")
|
||||
|
||||
# Package ID for discord. You should probably not touch this.
|
||||
PACKAGE_ID = "com.discord"
|
||||
|
||||
# Set to force if you want builds to be done
|
||||
# even if there's already a build for this version
|
||||
FORCE = False
|
||||
|
||||
# Custom ringtones, default = applied to all the ones not explicitly stated
|
||||
RINGTONES = {"ave": "/home/ave/sans.mp3",
|
||||
"default": "/home/ave/removeskype.mp3"}
|
||||
|
||||
# Custom icons, default = applied to all the ones not explicitly stated
|
||||
ICONS = {"ave": "/home/ave/ctclogoave.png",
|
||||
"default": "/home/ave/ctclogo.png"}
|
||||
|
||||
# Custom dynamic icons, default = applied to all the ones not explicitly stated
|
||||
DYN_ICONS = {"ave": {"bg": "/home/ave/distokrepos/cutthecord/icons/bg.png",
|
||||
"fg": "/home/ave/distokrepos/cutthecord/icons/fg.png"},
|
||||
"default": {"bg": "/home/ave/dcbg.png",
|
||||
"fg": "/home/ave/dcfg.png"}}
|
||||
|
||||
# Custom app names, default = applied to all the ones not explicitly stated
|
||||
# Needs to be one word, __ gets replaced with space
|
||||
APP_NAMES = {"ave": "CutTheCord__Ave",
|
||||
"litecord": "Litecord",
|
||||
"test": "CTC__Testing",
|
||||
"default": "CutTheCord"}
|
||||
|
||||
# Custom fonts, default = applied to all the ones not explicitly stated
|
||||
FONTS = {"ellie": {"whitney_bold.ttf": "/home/ave/fonts/GoogleSans-Bold.ttf",
|
||||
"whitney_semibold.ttf": "/home/ave/fonts/GoogleSans-Medium.ttf",
|
||||
"whitney_medium.ttf": "/home/ave/fonts/GoogleSans-Regular.ttf"},
|
||||
"dyslexic": {"whitney_bold.ttf": "/home/ave/fonts/OpenDyslexic3-Bold.ttf",
|
||||
"whitney_semibold.ttf": "/home/ave/fonts/OpenDyslexic3-Bold.ttf",
|
||||
"whitney_medium.ttf": "/home/ave/fonts/OpenDyslexic3-Regular.ttf"},
|
||||
"murm": {"whitney_bold.ttf": "/home/ave/fonts/comicbd.ttf",
|
||||
"whitney_semibold.ttf": "/home/ave/fonts/comicbd.ttf",
|
||||
"whitney_medium.ttf": "/home/ave/fonts/comic.ttf"},
|
||||
"ave": {"sourcecodepro_semibold.ttf": "/home/ave/fonts/comic.ttf"},
|
||||
"default": {}}
|
||||
|
||||
# Amount of last builds cleanartifacts.py should keep
|
||||
CLEAN_ARTIFACT_KEEP_COUNT = 2
|
|
@ -1 +0,0 @@
|
|||
../bettertm/bettertm.sh
|
|
@ -1,202 +0,0 @@
|
|||
## DisTok CutTheCord: No Profile Strip Patch
|
||||
|
||||
This patch removes the "profile strip" from the left side menu, helping remove PII from screenshots:
|
||||
|
||||
![](https://x3.pm/i/99b1vutg.png)
|
||||
|
||||
#### Available and tested on:
|
||||
- 8.4.2g
|
||||
- 8.4.3g
|
||||
- 8.4.4g
|
||||
- 8.4.5g
|
||||
- 8.4.8
|
||||
- 8.5.0
|
||||
- 8.5.1
|
||||
- 8.5.3
|
||||
- 8.5.4
|
||||
- 8.5.5
|
||||
- 8.5.6
|
||||
- 8.7.6
|
||||
- 8.8.4
|
||||
- 8.8.8
|
||||
- 8.9.6
|
||||
- 8.9.7
|
||||
- 8.9.8
|
||||
- 8.9.9
|
||||
- 9.0.0
|
||||
- 9.0.1
|
||||
- 9.0.2
|
||||
- 9.0.3
|
||||
- 9.0.4
|
||||
- 9.0.6
|
||||
- 9.0.9
|
||||
- 9.1.0
|
||||
- 9.3.8-SAO-Heathcliff
|
||||
- 9.3.9
|
||||
- 9.4.0
|
||||
- 9.4.2-SA
|
||||
- 9.4.3-SA
|
||||
- 9.4.5
|
||||
- 9.4.6
|
||||
- 9.4.7
|
||||
- 9.4.8
|
||||
- 9.6.4
|
||||
- 9.6.5
|
||||
- 9.6.6
|
||||
- 9.6.7
|
||||
- 9.6.8
|
||||
- 9.7.0
|
||||
- 9.8.0
|
||||
- 9.8.4
|
||||
- 9.8.6
|
||||
- 9.9.1
|
||||
- 9.9.2
|
||||
- 9.9.3
|
||||
- 9.9.4
|
||||
- 9.9.6
|
||||
- 10.0.6
|
||||
- 10.0.7
|
||||
- 10.1.1
|
||||
- 10.1.2
|
||||
- 10.1.3
|
||||
- 10.1.5
|
||||
- 10.1.6
|
||||
- 10.1.9
|
||||
- 10.2.0
|
||||
- 10.2.1
|
||||
- 10.2.2
|
||||
- 10.2.3
|
||||
- 10.2.4
|
||||
- 10.2.5
|
||||
- 10.2.6
|
||||
- 10.2.9
|
||||
- 10.3.1
|
||||
- 10.3.2
|
||||
- 10.3.3
|
||||
- 10.4.0
|
||||
- 10.4.1
|
||||
- 10.5.1
|
||||
- 11.0
|
||||
- 11.4
|
||||
- 11.5
|
||||
- 12.0-alpha1
|
||||
- 11.7
|
||||
- 12.1
|
||||
- 12.2
|
||||
- 12.3
|
||||
- 13-alpha1
|
||||
- 12.5
|
||||
- 14-alpha2
|
||||
- 14-alpha3
|
||||
- 14.0
|
||||
- 15-alpha3
|
||||
- 15.0
|
||||
- 16
|
||||
- 17.0
|
||||
- 18.0-alpha1
|
||||
- 18.0-alpha9
|
||||
- 18.0-alpha11
|
||||
- 18.0-alpha12
|
||||
- 19.0
|
||||
- 20-alpha1
|
||||
- 21-alpha2
|
||||
- 22-alpha1
|
||||
- 21.3
|
||||
- 22-alpha3-alpha1
|
||||
- 16
|
||||
- 17.0
|
||||
- 18.0-alpha1
|
||||
- 18.0-alpha9
|
||||
- 18.0-alpha11
|
||||
- 18.0-alpha12
|
||||
- 19.0
|
||||
- 20-alpha1
|
||||
- 21-alpha2
|
||||
- 22-alpha1
|
||||
- 21.3
|
||||
- 22-alpha3-alpha4
|
||||
- 16
|
||||
- 17.0
|
||||
- 18.0-alpha1
|
||||
- 18.0-alpha9
|
||||
- 18.0-alpha11
|
||||
- 18.0-alpha12
|
||||
- 19.0
|
||||
- 20-alpha1
|
||||
- 21-alpha2
|
||||
- 22-alpha1
|
||||
- 21.3
|
||||
- 22-alpha3-alpha6
|
||||
- 16
|
||||
- 17.0
|
||||
- 18.0-alpha1
|
||||
- 18.0-alpha9
|
||||
- 18.0-alpha11
|
||||
- 18.0-alpha12
|
||||
- 19.0
|
||||
- 20-alpha1
|
||||
- 21-alpha2
|
||||
- 22-alpha1
|
||||
- 21.3
|
||||
- 22-alpha3-alpha7
|
||||
- 16
|
||||
- 17.0
|
||||
- 18.0-alpha1
|
||||
- 18.0-alpha9
|
||||
- 18.0-alpha11
|
||||
- 18.0-alpha12
|
||||
- 19.0
|
||||
- 20-alpha1
|
||||
- 21-alpha2
|
||||
- 22-alpha1
|
||||
- 21.3
|
||||
- 22-alpha3
|
||||
- 22.4
|
||||
- 22.5
|
||||
- 23.0
|
||||
- 24-alpha2
|
||||
- 24
|
||||
- 28-alpha2
|
||||
- 28.1
|
||||
- 29-alpha1
|
||||
- 30.0
|
||||
- 30.1
|
||||
- 31-alpha1
|
||||
- 31-alpha2
|
||||
- 32-alpha2
|
||||
- 32.0
|
||||
- 33.1
|
||||
- 34.0
|
||||
- 34.2
|
||||
- 34.3
|
||||
- 35.0-alpha1
|
||||
- 36.3
|
||||
- 36.5
|
||||
- 38.0
|
||||
- 38.1
|
||||
- 40.04
|
||||
- 41.02
|
||||
- 41.05
|
||||
- 41.06
|
||||
- 41.10
|
||||
- 41.11
|
||||
- 42.0
|
||||
- 42.1
|
||||
- 42.3
|
||||
- 44-alpha2
|
||||
- 44-alpha4
|
||||
- 44.5
|
||||
- 44.6
|
||||
- 45.2
|
||||
- 46.0
|
||||
- 46.3
|
||||
- 48.0
|
||||
- 48.1
|
||||
- 48.2
|
||||
- 49.1
|
||||
- 49.2
|
||||
- 49.8
|
||||
- 49.10
|
||||
- 49.12
|
||||
- 49.13
|
||||
|
|
@ -1 +0,0 @@
|
|||
{"versionname": "49.13", "versioncode": "1340"}
|
236
patchport.py
|
@ -1,236 +0,0 @@
|
|||
#!/bin/env python3
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
import subprocess
|
||||
import datetime
|
||||
import shutil
|
||||
|
||||
# Example invocation:
|
||||
# python3 patchport.py /home/ave/apks/com.discord-900/
|
||||
|
||||
with open("patchport-state.json", "r") as f:
|
||||
jin = json.load(f)
|
||||
from_versioncode = jin["versioncode"]
|
||||
from_versionname = jin["versionname"]
|
||||
|
||||
apk_folder = sys.argv[1]
|
||||
cutthecord_folder = os.path.dirname(os.path.realpath(__file__))
|
||||
debug = False
|
||||
tmp_folder = "/tmp/patchport"
|
||||
|
||||
if debug:
|
||||
print(f"ctc folder: {cutthecord_folder}")
|
||||
|
||||
|
||||
def modify_patch(patch_name, patch_path):
|
||||
with open(patch_path) as f:
|
||||
patch_content = f.read()
|
||||
|
||||
if patch_name in ["branding", "customversion"]:
|
||||
patch_content = patch_content.replace(from_versioncode, to_versioncode)
|
||||
patch_content = patch_content.replace(from_versionname, to_versionname)
|
||||
|
||||
if patch_name == "notrack":
|
||||
# TODO: There's a risk here that we'll replace the nulled value
|
||||
from_crashlytics_id = re_crashlytics.findall(patch_content)[0]
|
||||
patch_content = patch_content.replace(from_crashlytics_id,
|
||||
to_crashlytics_id)
|
||||
return patch_content
|
||||
|
||||
|
||||
def apply_patch(patch_contents):
|
||||
subprocess.run("patch -p1 --no-backup-if-mismatch --force",
|
||||
shell=True, input=patch_contents, text=True,
|
||||
cwd=apk_folder, capture_output=True)
|
||||
|
||||
|
||||
def fix_offset(patch_contents):
|
||||
# OH GOD OH FUCK
|
||||
shutil.rmtree(tmp_folder, ignore_errors=True)
|
||||
shutil.copytree(apk_folder, tmp_folder)
|
||||
subprocess.run("patch -p1 --no-backup-if-mismatch --force",
|
||||
shell=True, input=patch_contents, text=True,
|
||||
cwd=tmp_folder, capture_output=True)
|
||||
out = subprocess.run(f"diff -crB {apk_folder} {tmp_folder}",
|
||||
shell=True, input=patch_contents, text=True,
|
||||
cwd=tmp_folder, capture_output=True)
|
||||
shutil.rmtree(tmp_folder, ignore_errors=True)
|
||||
patch_out = out.stdout.replace(apk_folder, "from").replace(tmp_folder, "to")
|
||||
return patch_out
|
||||
|
||||
|
||||
def make_necessary(version_name, version_code):
|
||||
# OH GOD OH FUCK
|
||||
shutil.rmtree(tmp_folder, ignore_errors=True)
|
||||
shutil.copytree(apk_folder, tmp_folder)
|
||||
|
||||
# Set version code and name
|
||||
# Due to https://github.com/iBotPeaches/Apktool/issues/2046
|
||||
# Code based on https://stackoverflow.com/a/4128192/3286892
|
||||
with open(os.path.join(tmp_folder, "AndroidManifest.xml")) as fin:
|
||||
filec = fin.read()
|
||||
incorrect_versioncode = re_versioncode_xml.findall(filec)[0]
|
||||
filec = filec.replace(incorrect_versioncode,
|
||||
f'platformBuildVersionCode="{to_versioncode}"')
|
||||
incorrect_versionname = re_versionname_xml.findall(filec)[0]
|
||||
filec = filec.replace(incorrect_versionname,
|
||||
f'platformBuildVersionName="{to_versionname}"')
|
||||
with open(os.path.join(tmp_folder, "AndroidManifest.xml"), "w") as fout:
|
||||
fout.write(filec)
|
||||
|
||||
out = subprocess.run(f"diff -crB {apk_folder} {tmp_folder}",
|
||||
shell=True, text=True,
|
||||
cwd=tmp_folder, capture_output=True)
|
||||
shutil.rmtree(tmp_folder, ignore_errors=True)
|
||||
patch_out = out.stdout.replace(apk_folder, "from").replace(tmp_folder, "to")
|
||||
return patch_out
|
||||
|
||||
|
||||
re_versioncode_xml = re.compile(r'(platformBuildVersionCode="[0-9]+")')
|
||||
re_versionname_xml = re.compile(r'(platformBuildVersionName="[0-9a-z.]+")')
|
||||
|
||||
re_versioncode_yml = re.compile(r'versionCode: \'([0-9]+)\'')
|
||||
re_versionname_yml = re.compile(r'versionName: \'?(.+?)\'?$')
|
||||
|
||||
re_releasedate = re.compile(r'released on ([0-9]{4}-[0-9]{2}-[0-9]{2})')
|
||||
re_crashlytics = re.compile(r'com\.crashlytics\.android\.build_id">([a-z0-9]'
|
||||
r'{8}-?[a-z0-9]{4}-?[a-z0-9]{4}-?[a-z0-9]{4}-?'
|
||||
r'[a-z0-9]{12})</string>')
|
||||
|
||||
|
||||
# Get version code and name
|
||||
with open(os.path.join(apk_folder, "apktool.yml")) as f:
|
||||
file_contents = f.read()
|
||||
to_versioncode = re_versioncode_yml.findall(file_contents)[0]
|
||||
to_versionname = re_versionname_yml.findall(file_contents)[0]
|
||||
|
||||
# Get crashlytics build ID
|
||||
with open(os.path.join(apk_folder, "res", "values", "strings.xml")) as f:
|
||||
file_contents = f.read()
|
||||
to_crashlytics_id = re_crashlytics.findall(file_contents)[0]
|
||||
|
||||
|
||||
failures = []
|
||||
|
||||
for patch in os.listdir(os.path.join(cutthecord_folder, "patches")):
|
||||
if debug:
|
||||
print(f"going over patch: {patch}")
|
||||
|
||||
# Ignore non-dirs
|
||||
if not os.path.isdir(os.path.join(cutthecord_folder, "patches", patch)):
|
||||
if debug:
|
||||
print(f"patch is not a folder, skipping: {patch}")
|
||||
continue
|
||||
|
||||
pre_in_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{from_versioncode}-pre.sh")
|
||||
post_in_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{from_versioncode}-post.sh")
|
||||
pre_out_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{to_versioncode}-pre.sh")
|
||||
post_out_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{to_versioncode}-post.sh")
|
||||
|
||||
patch_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{from_versioncode}.patch")
|
||||
out_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{to_versioncode}.patch")
|
||||
readme_path = os.path.join(cutthecord_folder, "patches", patch, "README.md")
|
||||
|
||||
# Handle copying of versioned scripts, untested and dirty!
|
||||
script_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{from_versioncode}.sh")
|
||||
if os.path.exists(script_path):
|
||||
script_out_path = os.path.join(cutthecord_folder, "patches", patch,
|
||||
f"{to_versioncode}.sh")
|
||||
with open(script_path) as f:
|
||||
with open(script_out_path, "w") as f2:
|
||||
f2.write(f.read())
|
||||
|
||||
# Check if patch exists for from_version, if it doesn't, warn user
|
||||
if not os.path.isfile(patch_path) and patch not in ["necessary"]:
|
||||
# Don't warn on instructional patches
|
||||
if patch not in ["customfont", "customring",
|
||||
"bettertm", "bettertmlight",
|
||||
"blobs"]:
|
||||
print(f"SKIPPED: No {from_versionname} version found for {patch}.")
|
||||
continue
|
||||
|
||||
# Check if pre-script exists, if it does copy it
|
||||
if os.path.isfile(pre_in_path):
|
||||
shutil.copyfile(pre_in_path, pre_out_path)
|
||||
print(f"PRE COPIED: {patch}'s pre script was copied.")
|
||||
|
||||
# Check if post-script exists, if it does copy it
|
||||
if os.path.isfile(post_in_path):
|
||||
shutil.copyfile(post_in_path, post_out_path)
|
||||
print(f"POST COPIED: {patch}'s post script was copied.")
|
||||
|
||||
# Create necessary instead of porting it.
|
||||
if patch == "necessary":
|
||||
patch_contents = make_necessary(to_versioncode, to_versionname)
|
||||
else:
|
||||
# Get a modified version of the patch
|
||||
patch_contents = modify_patch(patch, patch_path)
|
||||
|
||||
# Pass the new patch to patch command and get it to attempt to patch
|
||||
out = subprocess.run("patch -p1 --dry-run --force", shell=True,
|
||||
cwd=apk_folder, input=patch_contents, text=True,
|
||||
capture_output=True)
|
||||
|
||||
# Check for issues
|
||||
if "FAILED" in out.stdout:
|
||||
print(f"FAILED: {patch} failed, please fix by hand.")
|
||||
failures.append(patch)
|
||||
out_path += "-failed"
|
||||
elif "offset" in out.stdout:
|
||||
patch_contents = fix_offset(patch_contents)
|
||||
print(f"WARNING: {patch} has offsets which were auto corrected.")
|
||||
|
||||
if debug:
|
||||
print(out.stdout)
|
||||
|
||||
# Apply patch to main APK folder too
|
||||
if patch in ["necessary"]:
|
||||
apply_patch(patch_contents)
|
||||
|
||||
if from_versionname != to_versionname:
|
||||
# Add supported version to readme of that patch, hacky
|
||||
# https://stackoverflow.com/a/35130508/3286892
|
||||
with open(readme_path, 'r') as f:
|
||||
readme_text = f.read().replace(f'- {from_versionname}\n',
|
||||
f'- {from_versionname}\n'
|
||||
f'- {to_versionname}\n')
|
||||
with open(readme_path, "w") as f:
|
||||
f.write(readme_text)
|
||||
|
||||
# Save ported patch
|
||||
with open(out_path, "w") as f:
|
||||
f.write(patch_contents)
|
||||
|
||||
if not out_path.endswith("-failed"):
|
||||
print(f"PORTED: {patch} was successfully ported.")
|
||||
|
||||
ctcreadme_path = os.path.join(cutthecord_folder, "README.md")
|
||||
# TODO: can we pull the correct date from distok?
|
||||
out_datestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d")
|
||||
# Update readme with latest version, hacky
|
||||
# https://stackoverflow.com/a/35130508/3286892
|
||||
with open(ctcreadme_path, 'r') as f:
|
||||
ctcr_text = f.read().replace(f'{from_versionname} ({from_versioncode})',
|
||||
f'{to_versionname} ({to_versioncode})')
|
||||
in_datestamp = re_releasedate.findall(ctcr_text)[0]
|
||||
ctcr_text = ctcr_text.replace(in_datestamp, out_datestamp)
|
||||
with open(ctcreadme_path, "w") as f:
|
||||
f.write(ctcr_text)
|
||||
|
||||
with open("patchport-state.json", "w") as f:
|
||||
jout = {"versionname": to_versionname, "versioncode": to_versioncode}
|
||||
json.dump(jout, f)
|
||||
|
||||
if failures:
|
||||
print(f"Port complete. Following patches failed: {', '.join(failures)}")
|
||||
else:
|
||||
print("Port complete. All patches completed successfully.")
|
|
@ -0,0 +1,2 @@
|
|||
*.apk
|
||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 578 KiB After Width: | Height: | Size: 578 KiB |
Before Width: | Height: | Size: 638 KiB After Width: | Height: | Size: 638 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 578 KiB After Width: | Height: | Size: 578 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 591 KiB After Width: | Height: | Size: 591 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
@ -9,3 +9,8 @@ Here's why these patches are no longer maintained in this form:
|
|||
- compact: It's just a pain to maintain.
|
||||
- smalltime: It's just a pain to maintain.
|
||||
- customdefaultemoji: There doesn't seem to be default emojis anymore?
|
||||
- noprofilestrip: UI changes removed the profile strip.
|
||||
- nonearby: Didn't add much anyways.
|
||||
- squareavatars: Moved to xml-patchs
|
||||
- betterrotation: Moved to xml-patchs
|
||||
- noblocked: Moved to xml-patchs
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB from/AndroidManifest.xml to/AndroidManifest.xml
|
||||
*** from/AndroidManifest.xml 2020-12-08 18:13:28.198490900 +0000
|
||||
--- to/AndroidManifest.xml 2020-12-08 18:10:38.788471600 +0000
|
||||
***************
|
||||
*** 30,37 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 30,37 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_logo_round" android:supportsRtl="true" android:theme="@style/AppTheme.Dark" android:usesCleartextTraffic="@bool/use_cleartext_traffic">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB fromAndroidManifest.xml to/AndroidManifest.xml
|
||||
*** fromAndroidManifest.xml 2021-05-31 15:40:24.000000000 +0300
|
||||
--- to/AndroidManifest.xml 2021-05-31 15:40:24.000000000 +0300
|
||||
***************
|
||||
*** 37,44 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square_canary" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_logo_round_canary" android:supportsRtl="true" android:theme="@style/AppTheme.Dark">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 37,44 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square_canary" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_logo_round_canary" android:supportsRtl="true" android:theme="@style/AppTheme.Dark">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,22 @@
|
|||
diff -crB fromAndroidManifest.xml to/AndroidManifest.xml
|
||||
*** fromAndroidManifest.xml 2021-05-31 15:40:24.000000000 +0300
|
||||
--- to/AndroidManifest.xml 2021-05-31 15:40:24.000000000 +0300
|
||||
***************
|
||||
*** 37,44 ****
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square_canary" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_logo_round_canary" android:supportsRtl="true" android:theme="@style/AppTheme.Dark">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:screenOrientation="fullUser" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
--- 37,44 ----
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<application android:allowBackup="false" android:appCategory="social" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_logo_square_canary" android:label="@string/discord" android:largeHeap="true" android:name="com.discord.app.App" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_logo_round_canary" android:supportsRtl="true" android:theme="@style/AppTheme.Dark">
|
||||
<activity android:name="com.discord.samsung.SamsungConnectActivity" android:theme="@style/AppTheme.Translucent"/>
|
||||
! <activity android:name="com.discord.app.AppActivity" android:theme="@style/AppTheme.Dark" android:windowSoftInputMode="adjustResize|stateHidden"/>
|
||||
! <activity android:exported="true" android:launchMode="singleTask" android:name="com.discord.app.AppActivity$Main" android:theme="@style/AppTheme.Loading" android:windowSoftInputMode="adjustResize|stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
|
@ -0,0 +1,17 @@
|
|||
## DisTok CutTheCord: Better Rotation
|
||||
|
||||
This patch changes rotation settings to disallow upside down rotation.
|
||||
|
||||
Contributed by [clienthax](https://gitdab.com/clienthax).
|
||||
|
||||
#### Available and tested on:
|
||||
- 49.13
|
||||
- 52.3
|
||||
- 53.0
|
||||
- 53.1
|
||||
- 53.3
|
||||
- 54.0
|
||||
- 55.1
|
||||
- 56.0
|
||||
- 78.4 - Alpha
|
||||
|